ชื่อใหม่สำหรับการทดสอบหน่วย [ปิด]


9

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

ตอนนี้ฉันชอบการทดสอบหน่วยเพราะพวกเขาอนุญาตให้ฉันเขียนโค้ดที่มีประโยชน์ซึ่งค่อนข้างบ่อยครั้งแรกที่ใช้งานได้! (เคาะบนไม้)

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

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

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

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

และในฐานะชื่อใหม่สำหรับการทดสอบหน่วยที่อาจผ่านการคัดค้านบางอย่างแล้ว jContract ล่ะ? (Java เป็นศูนย์กลางฉันรู้ว่า :) หรือหน่วยสัญญาหรือไม่


14
ชื่ออะไร? สิ่งที่เราเรียกว่ากุหลาบโดยชื่ออื่นจะมีกลิ่นหอมหวาน - เช็คสเปียร์โรมิโอและจูเลียต c.1600
สตีเวนเอ. โลว์

8
ฉันไม่รู้ว่าคุณอยู่ในช่วงรอยแตกหรือไม่ ฉันไม่เคยลองแตกหรือเป็นคุณ
Tim Post

1
ฉันคิดว่าความคิดจะยึดติดกับคำเป็นส่วนใหญ่เพราะความคิดและทัศนคติที่แนบมากับพวกเขาไม่ใช่คำ ฉันจำได้ว่าพบว่าสมาคมสไปเดติกส์ได้เปลี่ยนชื่อเป็นขอบเขตเพราะชื่อนั้นเกี่ยวข้องกับอคติ ฉันจำได้เพราะมันอธิบายว่าทำไมฉันถึงได้ยินเด็ก ๆ เรียกกันว่า "scopey" ก่อนหน้านี้ในวันนั้น หากคุณต้องการเปลี่ยนทัศนคติให้มุ่งความสนใจไปที่ทัศนคติไม่ใช่ชื่อ - การหมกมุ่นกับชื่อนั้นเป็นเรื่องของเวลา
Steve314

2
ออกแบบโดยสัญญา: en.wikipedia.org/wiki/Design_by_contract มีการคิดแบบเฉพาะเจาะจงและการทดสอบหน่วยไม่ใช่ ถ้าฉันเห็นบางสิ่งที่มีสัญญาในชื่อนั่นคือ (และอินเทอร์เฟซ) เป็นสิ่งที่สมองของฉันเชื่อมโยงกับมัน
Berin Loritsch

@ Steve314 Scopey ชอบมัน. :) ฉันคิดว่าในกรณีนี้การทดสอบคำถูกกำหนดไว้แล้วและการเปลี่ยนชื่อการทดสอบหน่วยเป็นคำที่ไม่ได้กำหนดจะดีกว่า ไม่สามารถทำสัญญาได้เนื่องจาก 'อินเทอร์เฟซ' ที่กล่าวถึง วิธีการเกี่ยวกับ 'สร้างโปรแกรมที่ดีขึ้นเร็วขึ้น' หรือ CBPF
Will

คำตอบ:


5

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

การทดสอบคำศัพท์ในการทดสอบหน่วยทำให้ผู้คนคิดว่านี่เป็นการทดสอบการรวมหรือการทดสอบส่วนต่อประสานผู้ใช้เพราะนั่นเป็นการทดสอบประเภทเดียวที่พวกเขาเคยทำ มันเหมือนกับการใส่จาวาเข้าไปในจาวาสคริปต์

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

คุณ / คนอื่น ๆ ให้เหตุผลอะไรเพื่อไม่ทำการทดสอบ

การพึ่งพาที่ยากต่อการล้อเลียน / ปลอม /

คุณคิดว่าแรงจูงใจของพวกเขาไม่ใช่การทดสอบหน่วย?

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


จุดที่ดี พยายามที่จะอธิบายว่าทำไมคุณจะ 'ทดสอบ' วิธีการรับที่เรียบง่ายเป็นเรื่องยากที่อธิบายว่าทำไมมันเป็นสัญญาที่มีความสำคัญต่อความมั่นคงของส่วนที่เหลือทั้งหมดของรหัสของคุณที่วิธี GET เสมอกลับสิ่งที่คุณคาดหวังเป็นอาร์กิวเมนต์ง่ายที่จะทำให้
Will

3

แนวคิดของการเปลี่ยนชื่อได้รับการ proferred แล้ว มันเรียกว่าพฤติกรรมการขับเคลื่อนการพัฒนา พวกที่มาพร้อมกับสังเกตเห็นข้อโต้แย้งเดียวกันมากบวกกับความผิดปกติแบบทดสอบสิ่งที่ยังไม่ได้สร้าง แต่แนวคิดของพวกเขาคือการเขียนสเปคที่สามารถเรียกใช้งานได้

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


2
ข้อมูลจำเพาะที่ใช้งานได้อาจมาก่อน TDD / BDD / Agile / XP มันอาจจะเก่าเท่า CMMI เคยเป็นร่วมกับ UML เมื่อผู้คนคิดว่า UML เป็นภาษาสำหรับเขียน ES

BDD เช่น TDD เป็นแนวทางการทดสอบไม่ได้หนึ่งชนิดของการทดสอบ (บูรณาการการทำงานวีวีวียอมรับหน่วย) ผู้เขียนได้ถามเฉพาะเกี่ยวกับชื่อ "ดีกว่า" สำหรับการทดสอบหน่วย
ybakos

0

สัญญาจะเรียกว่า "ส่วนต่อประสาน" ในกรณีส่วนใหญ่ที่นี่ การมีการทดสอบหน่วยไม่รับประกันสัญญาต่อ se เนื่องจากคุณสามารถเปลี่ยนการทดสอบได้ดังนั้นคุณจึงไม่ทราบว่าคุณสามารถใช้ไลบรารีเวอร์ชันใหม่ได้เพียงเพราะมีการทดสอบไลบรารี คุณต้องทดสอบรหัสที่ใช้ไลบรารีด้วย ไม่แตกต่างจากการทดสอบหน่วยอื่น ๆ ดังนั้นฉันจึงไม่เห็นสาเหตุที่ต้องใช้ชื่อใหม่

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


0

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

เพราะฉันไม่ต้องการมัน ฉันเป็น dev โรงเรียนเก่าที่สวยเมื่อฉันเป็นเด็กเราไม่ได้มี debuggers รวมแฟนซีที่มีการแก้ไขและเขียนรหัสต่อไปและคอมไพล์อาจใช้เวลานานดังนั้นเราจึงต้องได้รับสิ่งต่าง ๆ ถูกต้องตั้งแต่เริ่มต้น จากการฝึกอบรมเช่นนี้ฉันไม่เห็นว่าการเขียนการทดสอบหน่วยโหลดจะทำให้ฉันทำงานได้มากขึ้นหรือโค้ดของฉันก็ไร้ข้อบกพร่องมากขึ้น

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

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


คุณต้องเขียนโค้ดง่าย ๆ แล้ว จำนวนของสถานะที่เข้าถึงได้ในระบบที่ทันสมัยส่วนใหญ่หมายความว่าการทดสอบแบบ end-to-end จะใช้เวลาตลอดชีวิตของจักรวาล - การทดสอบสองชิ้นแต่ละชิ้นด้วย 4 บิตของรัฐใช้เวลา 16 กรณีในการทดสอบแต่ละกรณีหรือ 32 กรณีทดสอบทั้งหมด ทำให้เป็นระบบ end-to-end ให้ 8bits ของรัฐหรือ 256 กรณีทดสอบเพื่อครอบคลุมทุกรัฐ โดยส่วนตัวฉันควรทำ 1/8 งาน
Pete Kirkham

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