ความรับผิดชอบในการทำซ้ำข้อบกพร่อง


25

ฉันกำลังพัฒนาโปรแกรมโดยใช้ไลบรารีที่โปรแกรมเมอร์อื่นทำ (เขาทำงานใน บริษัท เดียวกัน) เมื่อเร็ว ๆ นี้ฉันค้นพบการรั่วไหลในห้องสมุดซึ่งเกิดขึ้นภายใต้เงื่อนไขเครือข่ายบางอย่างหลังจากทำงานไม่กี่ชั่วโมง ฉันยื่นข้อบกพร่องพร้อมคำอธิบายของเงื่อนไขเพื่อให้การรั่วไหลนี้เกิดขึ้น ผู้พัฒนารายนั้นตอบว่า "นี่ไม่เพียงพอ", "มันไม่ใช่ความรับผิดชอบของเขาในการทำซ้ำข้อบกพร่อง" และฉันต้องสร้างการทดสอบหน่วยเพื่อสร้างข้อผิดพลาดนี้มิฉะนั้นเขาจะไม่ทำอะไรเลย

  1. เขาพูดถูกมั้ย
  2. ฉันจะทำอย่างไรในสถานการณ์นี้ การสร้างการทดสอบหน่วยเป็นไปไม่ได้เพราะมันขึ้นอยู่กับการกำหนดเวลาเครือข่ายแบบสุ่ม

26
หากคุณกำลังจะเขียนการทดสอบหน่วยคุณอาจแก้ไขข้อผิดพลาดและรับเครดิตสำหรับทุกสิ่ง
JeffO

3
@JeffO เขากำลังจัดการห้องสมุดนั้นและจะไม่ยอมรับข้อผิดพลาด เพราะ "เขาไม่มั่นใจในข้อผิดพลาดที่เคยมีอยู่"
user626528


เป็นไปได้หรือไม่ที่ผู้ดูแลห้องสมุดอยู่ในทีมที่มีนโยบายที่ไม่ยอมรับข้อผิดพลาดหากไม่มีการทดสอบอัตโนมัติ ฉันยังเคยได้ยินคำว่าการทดสอบหน่วยเกี่ยวกับเมื่อสิ่งที่คาดหวังจริงอาจเป็นรูปแบบของการทดสอบอัตโนมัติใด ๆ โดยเฉพาะอย่างยิ่งสำหรับการทดสอบการรวม
Joshua Drake

คำตอบ:


30

เขาพูดถูกหรือเปล่าอาจเป็นคำถามที่ไม่สามารถตอบได้จริงๆหากไม่รู้จัก บริษัท ของคุณ อย่างไรก็ตามเขาไม่ได้มีประโยชน์อย่างแน่นอน

ฉันจะเพิ่มข้อผิดพลาดกับเขา (ที่คุณทำ) ถ้ามันทำให้เกิดปัญหากับโครงการของคุณแล้วฉันจะยกมันเป็นตัวบล็อกกับผู้จัดการโครงการของคุณและทำให้ชัดเจนว่าคุณได้เพิ่มข้อผิดพลาดที่เหมาะสม คน แต่มันจะส่งผลกระทบต่อโครงการของคุณหากไม่ได้รับการแก้ไขโดยทันที

ฉันจะไปพูดคุยกับผู้พัฒนาและอธิบายว่าทำไมจึงไม่สามารถสร้างการทดสอบหน่วย แต่คุณยินดีที่จะแสดงให้เขาเห็นบนเครื่องของคุณ (สมมติว่าเป็นไปได้?)


48

เขาถูกต้อง 100% ที่คุณต้องให้ข้อมูลมากพอที่จะทำให้ข้อผิดพลาดที่ทำซ้ำได้ - ไม่อย่างนั้นไม่มีโอกาสที่จะตรวจสอบว่าการแก้ไขใด ๆ ที่เขามอบให้จะทำงานได้จริงหรือไม่

แต่ - เขาผิด IMHO 100% ว่าสิ่งนี้จะต้องอยู่ในรูปแบบของการทดสอบหน่วย หากคุณสามารถอธิบายสถานการณ์การทดสอบด้วยวิธีหนึ่งเพื่อให้เขาสามารถทำซ้ำความล้มเหลว (อย่างน้อยมีความน่าจะเป็นสูงในระยะเวลาที่เหมาะสมหรือโดยการทดสอบด้วยตนเอง) คุณมีหลักฐานว่ามีปัญหาเกิดขึ้น - ซึ่งควรทำให้เพื่อนร่วมงานของคุณ ในความรับผิดชอบในการแก้ไข แน่นอนถ้าคุณสามารถสร้างสถานการณ์ที่ทำให้เกิดข้อผิดพลาดได้เร็วขึ้นนั่นจะเป็นประโยชน์สำหรับเขา โดยหลักการแล้วจะทดสอบโดยอัตโนมัติและขึ้นอยู่กับองค์กรของคุณที่มีความรับผิดชอบในเรื่องนี้


11
ดังนั้นหากแอปขัดข้อง "ทุกขณะนี้" โดยไม่มีรูปแบบที่ไม่สามารถระบุตัวตนได้สำหรับผู้ใช้ผู้พัฒนาไม่ต้องแก้ไขเนื่องจากผู้ใช้ไม่สามารถทำซ้ำคำสั่งได้? ฉันไม่เห็นด้วยอย่างยิ่งที่นี่ ...
Heinzi

20
@Heinzi: หากฉันได้รับรายงานข้อผิดพลาด "แอพขัดข้องทุกครั้งแล้ว" ฉันจะให้ความสำคัญกับปัญหานั้นน้อยมากในการทำงาน สิ่งต่ำสุดที่ฉันคาดหวังว่าผู้ใช้จะต้องเขียนคือความถี่ "ตอนนี้แล้ว" สิ่งที่เขาทำกับแอพพลิเคชั่นในขณะที่แอพพังครั้งสุดท้ายและข้อความผิดพลาดที่แน่นอน
Doc Brown

3
@ user626528: IMHO เจ้าของห้องสมุดควรพยายามทำตามขั้นตอนที่คุณบอกให้เขาทำซ้ำข้อผิดพลาด - เขาไม่ควรลอง 500 สถานการณ์ที่แตกต่างกันเล็กน้อยเมื่อคำอธิบายของคุณไม่แสดงข้อผิดพลาดใด ๆ
Doc Brown

6
นักข่าวไม่จำเป็นต้องให้ขั้นตอนการทำสำเนา ค่อนข้างบ่อยครั้งที่เราเพียงแค่แนบการถ่ายโอนข้อมูลจากกระบวนการที่ล้มเหลวโดยเฉพาะอย่างยิ่งถ้ามันเกิดขึ้นในระหว่างการทำงานอัตโนมัติ เป็นความรับผิดชอบของผู้รับมอบหมายในการค้นหาขั้นตอนการสืบพันธุ์เพื่อให้สามารถตรวจสอบการแก้ไขได้
avakar

2
(นั่นไม่ได้หมายความว่าผู้รายงานไม่ควรพยายามช่วยเหลือและทำตามขั้นตอนหากพวกเขารู้จักพวกเขาสำหรับการล่มเป็นระยะ ๆ อย่างไรก็ตามนักข่าวไม่มีภาระผูกพันที่จะต้องเสียเวลาในการค้นคว้าสิ่งที่เจ้าขององค์ประกอบอาจจะคิดได้เร็วขึ้น )
avakar

9

ทั้งสองฝ่ายควรใช้ความพยายาม

ผู้พัฒนาห้องสมุดควรใช้ความพยายามเพิ่มเติมแม้จะไม่มีการทดสอบหน่วยเพราะปัญหาบางอย่างไม่สามารถทำซ้ำได้ด้วยการทดสอบหน่วย บางครั้งมันเป็นฮาร์ดแวร์บางครั้งมันเป็นลำดับเฉพาะของการกระทำที่ถูกต้องจากส่วนที่เหลือของโปรแกรมซึ่งทำให้ไลบรารีสร้างผลลัพธ์ที่ไม่ดี

คุณควรใช้ความพยายามเพิ่มเติมเพราะหลังจากทั้งหมดนี้ฉันไม่ได้เป็นข้อบกพร่องในห้องสมุด แต่เป็นผลมาจากการกระทำที่ไม่ถูกต้องจากส่วนที่เหลือของโปรแกรม (เช่นฮีปที่เสียหายอาจทำให้ไลบรารีทำงานผิดปกติ) ดังนั้นจึงเหมาะสมที่จะลดโค้ดที่ไม่ใช่ไลบรารี่ที่เกี่ยวข้องกับการทำซ้ำบั๊กให้มากที่สุด และคุณอาจทำสิ่งนี้ได้เร็วขึ้นและสะอาดกว่าคนที่ไม่คุ้นเคยกับรหัสแอปพลิเคชันของคุณ


5

หากผู้เขียนห้องสมุดไม่สามารถทำซ้ำข้อผิดพลาดตามรายงานของคุณได้มันก็ไม่มีเหตุผลที่จะคาดหวังให้เขาใช้เวลากับมันมากเกินไปให้แก้ไขโดยลำพัง

แต่คุณมีเวลา จำกัด ในการใช้งานผลิตภัณฑ์ที่ต่อพ่วงกับความสนใจของคุณ น่าเสียดายนี่อาจหมายถึงว่าบั๊กยังคงมีอยู่และไม่มีงานใดที่จะทำการแก้ไขได้

โชคดีที่มันไม่จำเป็นต้องเป็นหายนะ - ในขณะที่ในโลกอุดมคติซอฟต์แวร์ทั้งหมดจะปราศจากข้อผิดพลาดนั่นไม่ใช่กรณีและเราต้องจัดลำดับความสำคัญตามปัญหาที่ทำให้สหรัฐอเมริกา

ซึ่งหมายความว่าเป็นความรับผิดชอบของคุณในการพัฒนากรณีทดสอบที่ทำซ้ำได้หากคุณต้องการแก้ไข คุณอาจไม่สนใจว่ามันจะได้รับการแก้ไขหรือไม่และในกรณีนั้นคุณได้ทำทุกอย่างที่ทำได้และควรคาดหวังจากคุณ คุณอาจต้องการให้แก้ไข แต่ไม่เพียงพอที่จะอุทิศเวลาเพื่อให้สามารถทำซ้ำได้ในเวลานี้ นั่นเป็นที่ยอมรับอย่างสมบูรณ์

การรายงานข้อผิดพลาดถึงความสามารถที่ดีที่สุดของคุณในเวลาที่คุณต้องรับมือกับมันคือการเป็นพลเมืองที่ดีคุณไม่จำเป็นต้องไปไกลกว่านั้นเว้นแต่ว่าจำเป็นสำหรับโปรแกรมของคุณ และคุณอาจไม่ต้องการทำเช่นนั้นแม้กระทั่งอาจมีห้องสมุดอื่นที่คุณสามารถใช้หรืออาจเป็นไปได้ที่คุณจะม้วนตัวเองในช่วงเวลาที่เหมาะสม โดยพื้นฐานแล้วขึ้นอยู่กับคุณที่จะตัดสินใจว่าอะไรคือสิ่งที่คุ้มค่าสำหรับคุณ


1
คำตอบของคุณดูแปลกมากสำหรับฉัน ฉันกำลังแก้ไขข้อบกพร่องของฉันด้วยตัวเองและไม่ต้องรอให้ใครซักคนทำงานสกปรกแทนฉัน ฉันว่ามันเป็นความรับผิดชอบหลักของผู้เขียนรหัสที่จะทำให้ดีที่สุดเพื่อแก้ไขรหัสของเขา
user626528

1
เนื่องจากคุณเป็นคนที่ต้องการแก้ไขในตอนนี้มันเป็นความรับผิดชอบของคุณที่จะโน้มน้าวให้เขารู้ว่ามันคุ้มค่ากับเวลาของเขาในการแก้ไขแทนที่จะเป็น 10 หรือ 12 ปีเมื่อเขาไม่มีอะไรสำคัญกว่าการแก้ไข theregister.co.uk/2013/01/21/kde_bug_quashed ด้วยข้อผิดพลาดที่ไม่สามารถพิสูจน์ได้ของนัยสำคัญ X และข้อผิดพลาดที่ทำซ้ำได้ซึ่งมีนัยสำคัญเท่ากันฉันจะทำงานกับข้อผิดพลาดที่ทำซ้ำได้ทุกครั้ง
jmoreno

อัตตามากเกินไป เขาได้รับค่าจ้างให้ทำงานในห้องสมุดที่เลวร้าย
user626528

1
@ user626528: มันไม่เกี่ยวกับอัตตามันเป็นเรื่องสำคัญ - ไม่สามารถทำซ้ำข้อบกพร่องที่ต่ำกว่าเป็นความสำคัญ เมื่อได้รับข้อผิดพลาด EOI สองครั้ง (Execute Operator ทันที) หนึ่งคนที่ทำซ้ำได้และไม่มีใครฉันจะทำงานกับคนที่สามารถทำซ้ำได้ก่อนและฉันจะบอกนักพัฒนาคนอื่น ๆ ให้ทำเช่นเดียวกัน และถ้าห้องสมุดไม่ได้ใช้มากฉันอาจทำงานในโครงการอื่นทั้งหมด - แม้ว่าข้อบกพร่องในนั้นจะไม่สำคัญ หากเขา / เพียงผู้เดียว / ได้รับค่าตอบแทนในการทำงานกับห้องสมุดนี้และไม่มีการร้องขอคุณสมบัติที่โดดเด่นหรือข้อบกพร่องอื่น ๆ นอกเหนือจากนี้แล้วใช่เขาก็ควรจะทำมัน
jmoreno

2

ฉันอยากจะปล่อยให้สุนัขนอนนอนตอนนี้ - คุณได้หยิบยกปัญหาขึ้นมาแล้วและได้รับมอบหมายให้เขา สันนิษฐานว่ามีกระบวนการในการติดตามข้อบกพร่องที่โดดเด่นและไล่ล่าเหล่านี้

หากคุณต้องการดำเนินการต่อไปอย่างแข็งขันฉันขอแนะนำให้พูดคุยกับผู้จัดการของคุณเพื่อดูว่ามีเครื่องมือทดสอบใดที่สามารถสร้างปัญหาได้อย่างน่าเชื่อถือ

จากด้านผู้พัฒนา - มันจะเฉื่อยอย่างจริงจังที่จะไม่ทำอะไรเนื่องจากคุณได้ให้ข้อมูลที่จำเป็น อาจเป็นไปได้ว่ามีเวิร์กโหลดจำนวนมากดังนั้นจึงไม่สามารถอุทิศเวลาในการติดตามปัญหาได้


2

คุณพบข้อผิดพลาดคุณรายงานเรื่องนี้และเขาก็เป็นคนที่ฉุนเฉียว

หากคุณสองคนเป็นเพื่อนสนิทของเขาเขาจะทำอะไรบางอย่างเพื่อช่วย แต่เขาต้องการเพียงแค่ผลักดันปัญหากลับ

คุณสามารถทำได้มากขึ้นโดยการรายงานรายละเอียดเพิ่มเติมและพยายามสนับสนุนการอ้างสิทธิ์ของคุณว่าหน่วยความจำรั่ว แต่ถึงกระนั้นคุณก็มีความรับผิดชอบของตัวเองและต้องการทำงานให้เสร็จ

บันทึกข้อมูลให้มากที่สุดเท่าที่จะทำได้และติดตามต่อไป

หากคุณเห็นบุคคลนี้อีกในอนาคต เป็นมิตรพยายามพูดคุยเกี่ยวกับความสนใจร่วมกันและเข้าใจว่าความสัมพันธ์ที่ดีเป็นวิธีที่ได้ผลมากกว่าในการแก้ไขสิ่งต่าง ๆ จากนั้นข้อเท็จจริงใด ๆ ที่คุณสามารถให้เพื่อสนับสนุนข้อเรียกร้อง


ฉันเห็นด้วยกับผู้พัฒนาห้องสมุด บางทีมุมมองของพวกเขาคือผู้พัฒนาแอปพลิเคชันพยายามใช้ไลบรารีและทำให้มันเกิดความผิดพลาดกับรหัสของพวกเขา ไม่มีการรายงานในตัวเสริมหรือโดยผู้พัฒนารายอื่นดังนั้นจึงเป็นข้อบกพร่องที่ค่อนข้างสำคัญ (หรือไม่จริง) บั๊ก
Robbie Dee

@ RobbieDee ใช่จริงนี่ไม่ใช่หนึ่งในคำตอบที่ดีที่สุดของฉัน ฉันแค่คิดว่ามันแปลกที่ทั้งสองไม่สามารถทำงานร่วมกันได้เพราะพวกเขาทำงานให้กับ บริษัท เดียวกัน ฉันหมายถึงถ้าเจ้าของธุรกิจได้ยินพนักงานต้องมาที่นี่เพื่อรับการสนับสนุน ฉันสงสัยว่าเขาจะคิดอย่างไร ไม่ใช่วิธีที่ฉันต้องการให้ทำงานในสถานที่ของฉัน
ซ้ำ

0

บ่อยครั้งสิ่งที่ฉันเจอในสถานการณ์ที่คล้ายกันคือข้อสันนิษฐานที่ว่าข้อผิดพลาดทั้งหมดควรได้รับการแก้ไขและในขณะที่มันน่าชื่นชมมันเป็นเป้าหมายที่ยอดเยี่ยมที่จะมี (ให้เราไม่ต้องออกหน้าเขียนข้อบกพร่อง!) โครงการใด ๆ ที่มีขนาดที่เหมาะสมในการแก้ไขข้อผิดพลาดเพียงเพราะมันเป็นข้อผิดพลาด (ถ้าคุณสามารถหามันได้!) นั่นคือเหตุผลที่เรามีการจัดการโครงการและวิธีการเข้ารหัสรูปแบบและการปฏิบัติเป็นต้น

ดังนั้นสิ่งหนึ่งที่ฉันจะพูดในการป้องกันของเจ้าของห้องสมุด (และเป็นกรณีเมื่อฉันได้ทำงานในโครงการขนาดใหญ่บางอย่าง) คือเวลา dev ค่าใช้จ่ายเงินและเป็นทรัพยากรที่ จำกัด ดังนั้นการตัดสินใจเป็นวิธีการจัดการรายงาน ใครเป็นผู้ตรวจสอบการทดสอบใดบ้างที่ถูกผลิต / จำเป็นและในที่สุดหาก (และถ้าเป็นเช่นนั้นเมื่อ) การแก้ไขจะเกิดขึ้นตามผลกระทบทางธุรกิจอย่างหมดจด อะไรคือผลกระทบของการเริ่มต้นกระบวนการที่ใช้เวลานานเป็นระยะ ๆ ถ้ามันล้มเหลวและคุณสามารถทำให้มันเป็นอัตโนมัติแทนได้ (และบางทีคุณไม่ควรที่จะเป็นมาตรการป้องกันการเขียนโปรแกรมอยู่แล้ว) เป็นเพียงเวลาหรือมีมากกว่านั้น ?

ดูจากมุมมองของพวกเขารายงานข้อผิดพลาดจากผู้ใช้หนึ่งคนของปัญหาที่คาดเดาไม่ได้ในรหัสที่เกิดขึ้นน้อยมากเมื่อใช้ร่วมกับรหัสของพวกเขาอาจเป็นเพียงเครื่องเดียวและภายใต้ช่วงเวลาที่ผิดปกติ เงื่อนไขจะไม่มีข้อพิสูจน์ที่แข็งแกร่งสำหรับช่วงเวลาที่มีค่ามากเพื่อค้นหาและแก้ไขหากเป็นไปได้ แต่ถ้ามันเป็นกรณีธุรกิจที่แข็งแกร่งพอสำหรับผู้ใช้ที่ต้องการ / จำเป็นต้องใช้เวลาในการตรวจสอบอย่างละเอียดมากขึ้นและจัดเตรียมกรณีทดสอบ / แอปพลิเคชันที่เชื่อถือได้หรือคำอธิบายปัญหาที่มีรายละเอียดมากขึ้นกว่าเดิม .

นี่อาจเป็นเรื่องของการสื่อสารที่เจ้าของห้องสมุดไม่ได้พิจารณาว่าจะนำมาใช้อย่างนั้นและหากคุณมีกรณีศึกษาทางธุรกิจที่แข็งแกร่ง (เช่นรหัสของคุณมีค่าใช้จ่ายสูงสำหรับธุรกิจมีข้อกำหนดด้านกฎหมายความปลอดภัยหรือมีบางอย่าง ผลกระทบที่สำคัญอื่น ๆ เคาะ) จากนั้นก็ถึงเวลาที่จะเตะมันขึ้นกับผู้บริหารและปล่อยให้พวกเขาต่อสู้มันออกมา


1
ฉันมีความเห็นอกเห็นใจว่ามีใครบางคนกำลังพิจารณาคำตอบของคุณ (ซึ่งเป็นไปได้ในทางปฏิบัติ) แย่ลงและลงคะแนน กันเกิดขึ้นกับคำตอบของฉัน
isntn

-3

คุณได้กล่าวว่า 'ฉันได้ยื่นข้อบกพร่องพร้อมคำอธิบายของเงื่อนไขเพื่อทำให้การรั่วไหลนี้เกิดขึ้น'

หากคุณแน่ใจว่าคำอธิบายนั้นเพียงพอจริง ๆ ที่จะทำให้เกิดข้อผิดพลาดอีกครั้งคุณก็รู้เงื่อนไขที่แน่นอนแล้ว ตอนนี้ถ้าคุณไม่สามารถเขียนการทดสอบหน่วยหลังจากรู้เงื่อนไขแล้วนั่นหมายความว่าคุณไม่สามารถเยาะเย้ยส่วนประกอบบางส่วนที่เกี่ยวข้องหรือบางส่วนของรหัสนั้นแน่นเกินไปจนทำให้การทดสอบหน่วยปฏิบัติได้จริง

คุณควรขอให้เจ้าของห้องสมุดเขียนรหัสใหม่เพื่ออนุญาตให้คุณสร้างการทดสอบหน่วย คุณจะต้องอธิบายอย่างชัดเจนว่าอะไรอยู่ในห้องสมุดที่จะหยุดคุณเพื่อสร้างการทดสอบหน่วย เขาจะต้อง refactor รหัสมิฉะนั้นยอมรับว่าการทดสอบหน่วยเป็นไปไม่ได้กับรหัสปัจจุบัน คุณชนะทั้งสองวิธี

หากวิธีนี้ใช้ไม่ได้ผลคุณมีทางเลือกดังนี้:

  • คุณสามารถสร้างข้อผิดพลาดด้วยหลักฐานเพิ่มเติม
  • ลองใช้อำนาจที่สูงขึ้นและขอให้เขา / เธอประเมินหลักฐานของคุณ
  • ลองใช้ไลบรารี่ในแอพพลิเคชั่นต้นแบบที่มีสภาพแวดล้อมจำลองเพื่อให้โค้ดเพื่อสร้างข้อผิดพลาดเท่านั้น ด้วยวิธีนี้คุณจะสามารถพิสูจน์ข้อผิดพลาดอย่างน้อยนั้นได้

3
ไม่ใช่ความรับผิดชอบของ OP ในการสร้างการทดสอบหน่วยสำหรับผู้ดูแลห้องสมุด
Andy

6
หากผู้พัฒนารายอื่นไม่สนใจรายงานข้อผิดพลาดจากใครบางคนมีโอกาสที่เขาจะตอบสนองต่อคำขอการปรับเปลี่ยนครั้งใหญ่ นอกจากนี้ปัญหาทุกประเภทไม่สามารถทำซ้ำได้อย่างง่ายดายผ่านการทดสอบหน่วย: programmers.stackexchange.com/questions/196105/…
Dan Neely

1
@DanNeely: เขาไม่สนใจเขาอ้างว่านักข่าวต้องทำอะไรมากกว่านี้ - ซึ่งเป็นไปไม่ได้สำหรับนักข่าว และนักข่าวต้องสื่อสารกลับมา! ฉันยังแนะนำให้เกี่ยวข้องกับอำนาจเช่นนี้อาจลงไปที่
isntn

1
@Andy ในบางตำแหน่งเป็นนโยบายขององค์กรที่ไม่ยอมรับข้อผิดพลาดหากไม่มีการทดสอบอัตโนมัติ
Joshua Drake

5
คุณดูสับสนเกี่ยวกับการใช้การลงคะแนนอย่างเหมาะสมและไม่น่าเป็นไปได้ที่จะช่วยเหลือกรณีของคุณ Downvotes เป็นวิธีที่ได้รับการยอมรับในการพูดว่า "ฉันคิดว่านี่เป็นคำตอบที่ไม่ดี" ภาษาที่ไม่เหมาะสมควรได้รับการจัดการไม่เพียง แต่ผ่านการลงคะแนนเสียงเท่านั้น แต่ควรแก้ไขหรือการตั้งค่าสถานะโดยขึ้นอยู่กับว่าคำตอบที่เหลือมีประโยชน์หรือไม่ บริบทสามารถตอบได้ทั้งสองทางขึ้นอยู่กับว่ามันมีความร้ายแรงขนาดไหน
Dan Neely
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.