อัตราส่วน "บรรทัดการทำงานของโค้ด" ปกติต่อ "การทดสอบบรรทัดของโค้ด" คืออะไร


27

ฉันค่อนข้างใหม่สำหรับวิธีการ TDD และการทดลองครั้งแรกของฉันบอกว่าการเขียนโค้ดฟังก์ชัน 1 บรรทัดหมายถึงการเขียนโค้ดทดสอบประมาณ 2-3 บรรทัด ดังนั้นในกรณีที่ฉันจะเขียน 1,000 LOC, codebase ทั้งหมดรวมถึงการทดสอบจะเป็นอะไรที่เหมือน ~ 3500 LOC

นี่ถือว่าเป็นเรื่องปกติหรือไม่ อัตราส่วนในโค้ดที่คุณเขียนคือเท่าใด


8
Yeap, TDD มาพร้อมกับป้ายราคาแพง!
EL Yusubov

6
จำนวน 2-3x ของคุณเป็นแบบอนุรักษ์นิยมที่ดีที่สุดก็เป็นจริงใกล้ชิดกับ 4-5X สำหรับสิ่งที่ต้องการ C # / Java, Python / ทับทิมอาจจะใกล้ชิดกับ 2-3x กับสิ่งที่สั้นเช่น Erlang เป็นใกล้ชิดกับ 1: 1 ขึ้นอยู่กับว่าคุณเป็นคนดื้อรั้นเกี่ยวกับ TDD มากขึ้นเชื่อฟังมากขึ้นเท่าไหร่อัตราส่วนที่ใหญ่กว่าจะได้รับ!

6
@ ทอมลอง: ในหนังสือของเคนท์เขาอ้างถึงวอร์ดว่าคุณควรเขียนบททดสอบจนกว่าความกลัวของคุณจะเปลี่ยนเป็นความเบื่อหน่าย
herby

4
@ElYusubov: ฉันไม่ยอมรับว่ามัน "แพ่ง" เลย ดูเหมือนว่าสำหรับผู้ที่ยังคงนับจำนวนงานใน LOCs แต่ราคาไม่ได้อยู่ใน LOC มันเป็นเงินและเวลาออกสู่ตลาด และที่นั่น TDD ไม่ได้มีราคาแพงไปกว่ากระบวนการพัฒนาที่สมเหตุสมผลอื่น ๆ
herby

5
ทำไมคุณแสดงความคิดเห็นแทนการโพสต์คำตอบ? สิ่งที่คุณเขียนนั้นสมเหตุสมผล
Andrey Agibalov

คำตอบ:


18

1: 3 เป็นเรื่องปกติกับ TDD

จากประสบการณ์ของฉันและจากการอ้างอิงอื่น ๆ ฉันจำได้


12
... การอ้างอิงอะไร
TehShrike

... จำได้ไม่ชัด ... ฉันจำไม่ได้แล้วว่ามันอยู่ที่ไหน (อาจจะเป็นในตัวอย่างของ Kent Beck's TDD อาจจะอยู่ในที่ใดที่หนึ่งใน c2.com) ฉันจำความหมายได้ว่ารหัสทดสอบสามครั้งมากกว่ารหัสผลิตก็โอเค
herby

ว้าวเหมือนกันในประสบการณ์ของฉันเช่นกัน (ฉันกำลังดูผลลัพธ์จาก cloc ตอนนี้และฉันค้นหา google เพื่อค้นหาการโพสต์ในอัตราส่วนนี้)
Nikolay Tsenkov

9

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

Robert Martin เคยกล่าวไว้ว่า:

“ เมื่อการทดสอบมีความเฉพาะเจาะจงมากขึ้นรหัสก็จะกว้างขึ้น”

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

แต่เดี๋ยวก่อนนั่นก็ไม่ดีเหมือนกัน ในบางกรณีเช่นเมื่อคุณกำหนดอัลกอริทึมคุณอาจมีโค้ดเพียง 6-10 บรรทัดที่มี "if" สองสามครั้งและอาจมีการเรียกซ้ำ 2-3 ครั้ง ฉันบอกคุณได้ว่ารหัสนั้นอาจมีโค้ดทดสอบมากกว่า 100 บรรทัด

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

ทางใดทางหนึ่งคำตอบที่ดีที่สุดที่จะตอบคำถามของคุณอาจจะเป็น"Cyclomatic ซับซ้อน" ยิ่งความซับซ้อนของวัฏจักรของคุณสูงขึ้นเท่าใดการทดสอบที่คุณต้องเขียนให้ครอบคลุมมากขึ้นจะต้องครอบคลุมทุกกรณี


3

อัตราส่วนจะแตกต่างกันไปขึ้นอยู่กับขนาดของวิธีการของคุณ ขนาดของวิธีการของคุณจะแตกต่างกันไปตามรูปแบบการเขียนโปรแกรมภาษาและปัญหาของโดเมน

หากวิธีการของคุณสั้นแล้ว 3: 1 ก็สมเหตุสมผล หากวิธีการของคุณมีความยาว 3: 1 อยู่ในระดับสูง

ดังนั้นเพื่อตอบคำถามของคุณมันขึ้นอยู่กับ :-)


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

สมมติว่าคุณสามารถตั้งค่าการทดสอบเรียกวิธีการทดสอบและตรวจสอบผลลัพธ์ในโค้ดสามบรรทัด หากวิธีการที่คุณทำการทดสอบนั้นมีความยาวหนึ่งบรรทัด (ตามที่เกิดขึ้นใน Scala) การปันส่วนของรหัสการทดสอบคือ 3: 1 หากวิธีนี้มีความยาวหกบรรทัดแสดงว่าเป็น 1: 2 หกเส้นนั้นไม่ได้ยาวขนาดนั้นทั้งหมด
จอน Strayer

2

สำหรับแอพพลิเคชั่นที่สำคัญของซอฟต์แวร์อัตราส่วนปกติคือหนึ่งวันทำการทดสอบสำหรับแต่ละฟังก์ชั่น LoC

และนี่ไม่นับ TDD ซึ่งไม่เกี่ยวกับการทดสอบ แต่เกี่ยวกับสเปค


1

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

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

โปรดดูเพิ่มเติมว่า"การทดสอบหน่วยไม่เหมาะสมหรือไม่จำเป็นเมื่อใด"


-1

อัตราส่วนของฉันอยู่ที่ 2-1 ถึง 10-1 (รหัสสำหรับทดสอบ) ตรวจสอบให้แน่ใจว่าคุณทดสอบเกี่ยวกับคุณค่า / พฤติกรรมและไม่ได้ใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.