ตัวอย่างแอพที่ใช้ในโลกแห่งความเป็นจริงที่เขียนด้วย TDD และครอบคลุมการทดสอบที่ดี? [ปิด]


17

มีแอพพลิเคชั่นโอเพนซอร์ซที่พัฒนาขึ้นโดยใช้การพัฒนาแบบทดสอบที่ทำหน้าที่เป็นตัวอย่างของการทดสอบหน่วยที่ดี

ฉันต้องการดูตัวอย่างใน C # และ. NET (โปรดทราบว่าฉันพูดถึงแอปพลิเคชันไม่ใช่เฉพาะห้องสมุด)

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

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

รหัสที่อยู่ภายใต้การทดสอบมีแนวโน้มที่จะเกี่ยวข้องกับการทำงานร่วมกันระหว่างวัตถุและอาจมีตรรกะการไหลอย่างง่าย ๆ ซึ่งทั้งหมดเกิดขึ้นในหน่วยความจำและสามารถเขียนได้ในวิธีที่ง่ายกว่าและเข้าใจได้มากกว่า สำหรับการทดสอบ

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

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

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

ข้อเสนอแนะหรือคำพูดของภูมิปัญญาจะได้รับการชื่นชม



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

@JoshEarl - ฉันเห็น .. ฉันไม่คิดว่าคำตอบของฉันด้านล่างจะได้รับการที่เกี่ยวข้องกับการโพสต์อื่น ๆ
hanzolo

คำตอบ:


14

ฉันไม่รู้ว่าใช้ TDD หรือไม่ แต่ตัวอย่างการทดสอบที่เด่นชัดคือ sqlite ซึ่งมีความครอบคลุมสาขาที่น่าทึ่ง100%และมีรหัสทดสอบและสคริปต์มากกว่า 1,000 เท่ามากกว่ารหัสผลิตภัณฑ์


4
ที่ดูเหมือนเสียความพยายามที่น่าทึ่งหากอัตราส่วนของรหัสการทดสอบรหัสนั้นสูง
Ryathal

6
@Ryathal: ค่าใช้จ่ายของความล้มเหลวกำหนดความพยายามในการทดสอบไม่ใช่ความยาวของรหัสทดสอบ ด้วยการใช้งานที่กว้างขวางเพียงพอในแนวทางที่มีความสำคัญต่อภารกิจเพียงพอการทดสอบอาจคุ้มค่า ฉันไม่แน่ใจจริงๆถ้า SQLite ไม่หักโหม
thiton

3
sqlite เป็นภารกิจที่สำคัญสำหรับผู้คนมากมาย คุณอาจประหลาดใจที่มีการใช้งานบ่อยครั้ง (เช่น OSX, iOS, Android OS) และคุณต้องรู้รหัสทดสอบและข้อมูลจำนวนมากเหล่านั้นอาจถูกสร้างขึ้นจากเครื่อง ฐานข้อมูลความแข็งแกร่งทางอุตสาหกรรมมีกรณีขอบจำนวนมาก
Bryan Oakley

10
SQLite เป็นใช้กันอย่างแพร่หลายฐานข้อมูล SQL บนดาวเคราะห์ที่ฐานการติดตั้งมันเป็นคำสั่งของขนาดใหญ่กว่า MySQL, PostgreSQL, SQL Server, Oracle, DB2 รวมกัน มันอาจเป็นหนึ่งในซอฟต์แวร์ที่มีการใช้กันอย่างแพร่หลายในยุคนั้น หากมีข้อผิดพลาดใน SQLite สมาร์ทโฟนทุกเครื่องบนโลกจะหยุดทำงาน ฉันคิดว่ามันเป็นความหวาดระแวงเล็กน้อย
Jörg W Mittag

@ JörgWMittagว้าวฉันไม่เคยรู้เรื่อง SQLite มาก่อน น่าขบขัน. ขอบคุณ แต่โค้ดทดสอบมากกว่า 1,000 ครั้ง นั่นช่างเหลือเชื่อ
ไมค์หนู

4

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

http://orchard.codeplex.com/wikipage?title=solution

และฉันเดาลิงค์อัพเดท:

http://docs.orchardproject.net/


สิ่งนี้ดูมีแนวโน้ม - แทบรอไม่ไหวที่จะขุดเจาะ :)
Josh Earl

0

มีไลบรารีโอเพ่นซอร์สมากมายเป็น TDDed ไลบรารีการไฮเบอร์เนตของ Rhinos เช่น RhinoMocks และ NHibernate ได้รับการพัฒนาจาก TDDed โดยผู้พัฒนาโดยใช้ XUnit เป็นกรอบการทดสอบหน่วย

ขณะนี้ด้วย OSS คุณจะไม่สามารถรับประกันได้ว่าทุกอย่างในผลิตภัณฑ์นั้นจะถูก TDDed ชุมชนอาจมีมาตรฐานรวมถึงการปฏิบัตินี้และพวกเขาอาจใช้ build-bot ที่ดำเนินการวัดความครอบคลุมของรหัส แต่ TDD เป็นความคิดที่ต้องซื้อโดยนักพัฒนาและกับบุคคลทั่วไปที่สามารถยอมรับการเปิด ลำต้น VCS ต้นทางเหมือนกับที่อยู่ใน GitHub ทุกคนสามารถกระทำการเปลี่ยนแปลงใด ๆ ด้วยจำนวนการทดสอบที่ครอบคลุม (หรือถ้าจำเป็นต้องมีการครอบคลุมการทดสอบอาจถูกเขียนขึ้นหลังจากความจริงซึ่งเป็นการละเมิดจิตวิญญาณของ TDD แต่จริงๆแล้วไม่มี วิธีที่ดีในการรับชม)

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