ตัวอย่างที่ดีของรหัสที่ซับซ้อนโดยใช้ TDD [ปิด]


37

อะไรจะเป็นตัวอย่างที่ดีของการใช้ TDD ในโครงการขนาดใหญ่ชีวิตจริงที่ซับซ้อน? ตัวอย่างทั้งหมดที่ฉันเคยเห็นเป็นโครงการของเล่นสำหรับหนังสือหรือกระดาษ ...

คุณสามารถตั้งชื่อโครงการโอเพ่นซอร์สที่ใช้ TDD อย่างหนักได้หรือไม่? โดยเฉพาะอย่างยิ่งใน C ++ แต่ฉันสามารถอ่าน Java และ C # หรือภาษาอื่นที่คล้ายคลึงกัน


ยากที่จะตอบคำถามของคุณ มีหลายโครงการที่ใช้การทดสอบอัตโนมัติ แต่มันยากที่จะบอกว่าพวกเขาทำตามปรัชญา TDD ไปไกลแค่ไหนเพราะพวกเขาอาจจะไม่โปรโมต เช่น c ++, c # และ java kinda มีรากฐานในแอปพลิเคชั่น gui ซึ่งยากต่อการทดสอบ โดยปกติคุณจะพบการทดสอบเพิ่มเติมภายในกรอบงานหรือไลบรารี
iMacUwhAK

ส่วนหนึ่งของเหตุผลที่ฉันสนใจในการหาคำตอบที่ดีคือฉันกำลังทำงานบนเดสก์ท็อปแอปพลิเคชันด้วย C ++ เอ็นจิ้นและ Java GUI ...
Xavier Nodet

คำตอบ:


19
  • JUnitได้รับการพัฒนาโดยใช้การทดสอบ 100% ในความเป็นจริงมันได้รับการพัฒนาโดยใช้การทดสอบ 100% ใน JUnitซึ่ง Kent Beck ได้กล่าวว่าสองสามครั้งเป็นการออกกำลังกายที่น่าสนใจอย่างแท้จริง
  • ฉันเชื่อว่าระบบไฟล์ ZFS ของ Sun ได้รับการพัฒนาโดยใช้การทดสอบ
  • ล่าม ikj สำหรับภาษาIoke programming (JVM), ล่าม ikc สำหรับภาษา Ioke programming (CLI), แกน Ioke ทั้งหมดและไลบรารี่มาตรฐานและในความเป็นจริงภาษานั้นได้รับการพัฒนา 100% ทดสอบการขับเคลื่อน )

DUnit - กรอบการทดสอบสำหรับ Delphi มาพร้อมกับชุดทดสอบที่สมบูรณ์สำหรับ DUnit เอง และฉันก็เห็นด้วยกับเคนต์นั่นเป็นความคิดที่โน้มเอียงเล็กน้อย ;-)
Nick Hodges

14

SQLite รหัสทั้งหมดของพวกเขานั้นผ่านการทดสอบอย่างหนักมาก :

ในฐานะเวอร์ชั่น 3.7.14 ไลบรารี SQLite ประกอบด้วยรหัส C ประมาณ 81.3 KSLOC (KSLOC หมายถึง "Source Lines Of Code" หรืออีกนัยหนึ่งบรรทัดของรหัสไม่รวมบรรทัดว่างเปล่าและความคิดเห็น) โดยเปรียบเทียบโครงการมี 1124 เท่าของรหัสทดสอบและสคริปต์ทดสอบ - 91421.1 KSLOC


1
ว้าวพวกเขามีการทดสอบมากมาย: |
Luca Matteis

8
การทดสอบอย่างหนักไม่จำเป็นต้องหมายความว่าได้รับการพัฒนาในลักษณะทดสอบด้วยการขับเคลื่อน (TDD) คือมัน? (ฉันไม่ได้อ่านทั้งหน้านั้น แต่ฉันไม่เห็นคำว่า "TDD" หรือ "ขับเคลื่อน" ในการค้นหาในหน้าดังนั้นฉันจึงไม่ทราบคำตอบสำหรับเรื่องนี้)
lindes

1
@lindes: ดูเหมือนว่าพวกเขาจะไม่ปฏิบัติตาม TDD อย่างเคร่งครัด แต่ตัวอย่างเช่นสำหรับรายงานข้อผิดพลาดทุกครั้งที่พวกเขาทำการทดสอบครั้งแรก พวกเขายังทำการทดสอบสำหรับทุกการกระทำ อย่างน้อยก็บางส่วนนี่คือ TDD
liori

9

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


ฉันเพิ่งดูมันและมันเป็นรหัสที่สะอาดจริงๆ
Robert Harvey

3

จากการพูดคุยกับทีมงาน P&P ของ Microsoft ที่ Enterprise Library เขียนด้วย TDD


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

@ Robert - ฉันสามารถบอกคุณได้เพียงสิ่งที่พวกเขาบอกฉัน ... พวกเขาใช้ TDD เมื่อเขียนมัน
วอลเตอร์

6
@ Robert - มันไม่ใช่เรื่องแปลกสำหรับชุดทดสอบที่จะใช้ชีวิตของมันเอง DRY ใช้กับทั้งแอปพลิเคชันของคุณและการทดสอบ ใน TDD คุณจะทำเพียงแค่ 1 ใน 4 สิ่ง: การทดสอบการเขียนการเขียนโค้ดการทดสอบการรีแฟคเตอร์รหัสการรีแฟคเตอร์ หากคุณกำลังทำสิ่งเหล่านี้ทั้งหมดในรูปแบบสีแดงสีเขียว - refactor แล้วคุณกำลังทำ TDD
Jeff Knecht

1
@Jeff: ขอบคุณที่ชี้แจงว่า ฉันคิดว่ามีความแตกต่างบางอย่างระหว่างวิธีที่อธิบาย TDD (ใน reductionist, คำศัพท์ทางกลไก) และวิธีที่ใช้ในสถานการณ์จริง
Robert Harvey

3

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


1
คุณ - หรือคนอื่น ๆ - แบ่งปันประสบการณ์เหล่านี้หรือไม่ ฟังดูเหมือนเป็นสงครามที่ดี

ฉันทวีตเล็กน้อยแล้วใช้เกร็ดเล็กเกร็ดน้อยเพื่อแสดงจุดในโพสต์อื่น พอพูดได้ว่าการออกแบบการทดสอบครั้งแรกและชุดการทดสอบอัตโนมัติทำให้ชีวิตของฉันง่ายขึ้นมากฉันจะไม่กลับไปและพัฒนาวิธีอื่นใด ตัวอย่าง: ข้อบกพร่องเล็กน้อยในกรณีทดสอบหนึ่งกรณีที่การทดสอบด้วยตนเองไม่พบ (เนื่องจากผู้ทดสอบด้วยตนเองไม่ได้ตรวจสอบความสมบูรณ์ของฐานข้อมูลหลังจากการดำเนินการทุกครั้ง); เรียกใช้กรณีทดสอบหลายครั้งในวันนั้นเพื่อหาค่าซึ่งเท่ากับกว่า 40 ชั่วโมงของเวลาทดสอบด้วยตนเองที่บันทึกไว้ เพิ่งทำการเปลี่ยนแปลงรหัสมากกว่า 1,000 รายการและดำเนินการทดสอบในขณะที่ฉันหลับ หิน TDD
Steven A. Lowe

ฉันเชื่อคุณ. ฉันแค่ชอบฟังเรื่องราว คุณอาจพบว่า QuickCheck น่าสนใจ - en.wikipedia.org/wiki/QuickCheck - ฉันเห็นงานนำเสนอที่พบข้อบกพร่องหลายเธรดในรหัสการผลิตอายุ 15 ปี

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

@gbjbaanb: ในกรณีนี้ 'เช็ค' มีความซับซ้อนมากกว่าความสมบูรณ์แบบสคีมาซึ่งเป็นสาเหตุที่ทำให้มีการทดสอบแบบอัตโนมัติสำหรับมัน
Steven A. Lowe

0

โครงการแรกของฉันเสร็จสมบูรณ์ใน TDD เป็นโอเพ่นซอร์สในปี 2002 คุณยังสามารถค้นหาได้ที่นี่:

http://sourceforge.net/projects/camelos/

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

นอกจากนี้เรายังเขียนแอปพลิเคชัน gwt-gae ที่สมบูรณ์โดยใช้ TDD สำหรับส่วนหลัก http://netnumero.appengine.com/company/mycompany

ฉันไม่สามารถปล่อยรหัสนั้น แต่ฉันกำลังทำงานในโครงการตัวอย่างที่สมบูรณ์ใน TDD สำหรับ GWT นั่นคือการใช้ TDD ใน UI

ทันทีที่ฉันเสร็จ (วันหยุดคริสต์มาส) ฉันจะโพสต์ไว้ที่นี่ https://github.com/ubertob/gwt-tdd-example

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