คำถามติดแท็ก tdd

TDD หมายถึงการพัฒนาที่ขับเคลื่อนด้วยการทดสอบหรือการออกแบบที่ขับเคลื่อนด้วยการทดสอบ มันเป็นวิธีปฏิบัติของการเขียนการทดสอบหน่วยก่อนที่จะเขียนรหัสเพื่อตอบสนองมันในสิ่งที่เรียกว่าวงจร Red-Green-Refactor

3
เป็นความคิดที่ดีหรือไม่ที่จะทำ TDD ในส่วนประกอบระดับต่ำ?
ฉันกำลังพิจารณาที่จะเขียนไดรเวอร์ระดับต่ำหรือส่วนประกอบ / เมล็ดระบบปฏิบัติการ ผู้คนosdev.orgดูเหมือนจะคิดว่าบิตที่สำคัญนั้นไม่ได้มีความหมายที่พิสูจน์ได้ด้วยวิธีนี้ แต่ฉันได้อ่านการสนทนาบางอย่างที่ผู้คนคิดแตกต่างกัน ฉันได้ดูไปรอบ ๆ แล้ว แต่ไม่พบตัวอย่างชีวิตจริงของ TDD ในองค์ประกอบระดับต่ำ นี่เป็นสิ่งที่ผู้คนทำจริง ๆ หรือเพียงแค่สิ่งที่ผู้คนพูดถึงในทางทฤษฎีเพราะไม่มีวิธีที่ดีในการฝึกฝน

1
สไตล์การทำงานมีประโยชน์อย่างไรกับการล้อเลียนอ้างอิง
จากการสัมภาษณ์กับ Kent Beck ในนิตยสาร Java Magazine ฉบับล่าสุด: Binstock: มาพูดคุยเรื่องไมโครไซต์ สำหรับฉันดูเหมือนว่าการทดสอบครั้งแรกเกี่ยวกับบริการไมโครซอฟท์จะซับซ้อนในแง่ที่ว่าบริการบางอย่างเพื่อให้สามารถทำงานได้จะต้องมีบริการอื่น ๆ ทั้งหมด คุณเห็นด้วยหรือไม่? เบ็ค: ดูเหมือนว่าชุดการค้าขายเดียวกันกับการมีชั้นเรียนใหญ่ ๆ Binstock: ใช่ฉันเดาว่าที่นี่คุณต้องใช้ mocks จำนวนมากเพื่อให้สามารถตั้งค่าระบบที่คุณสามารถทดสอบบริการที่กำหนดได้ เบ็ค: ฉันไม่เห็นด้วย หากอยู่ในรูปแบบที่จำเป็นคุณต้องใช้ mocks มาก ในรูปแบบการใช้งานที่มีการรวบรวมการพึ่งพาจากภายนอกเข้าด้วยกันในระดับสูงขึ้นในห่วงโซ่การโทรฉันไม่คิดว่ามันจำเป็น ฉันคิดว่าคุณสามารถได้รับความครอบคลุมมากจากการทดสอบหน่วย เขาหมายถึงอะไร สไตล์การทำงานจะช่วยปลดปล่อยคุณจากการล้อเลียนการพึ่งพาจากภายนอกได้อย่างไร?

2
เหตุใดจึงไม่เหมาะสมที่จะใช้ไดอะแกรม UML เพื่อวางแผนว่าจะจัดระเบียบรหัสของคุณอย่างไร
ดังนั้นใช่ไดอะแกรมอาจไม่เหมาะสมในบางครั้ง เมื่อใดที่ไม่เหมาะสม เมื่อคุณสร้างพวกเขาโดยไม่มีรหัสเพื่อตรวจสอบพวกเขาแล้วตั้งใจที่จะติดตามพวกเขา ไม่มีอะไรผิดปกติกับการวาดไดอะแกรมเพื่อสำรวจความคิด การพัฒนาซอฟต์แวร์แบบว่องไว: หลักการรูปแบบและการปฏิบัติ - Robert C. Martin สิ่งนี้หมายความว่าอย่างไร UML ไม่ได้ออกแบบมาเพื่อช่วยวางแผนวิธีจัดโครงสร้างโค้ดของคุณก่อน "ลงมือดำน้ำ" หรือไม่? อะไรคือจุดประสงค์ของการใช้มันถ้าคุณไม่ทำตามไดอะแกรมที่คุณคิดขึ้นมา บริบท: ในบทนี้ลุงบ็อบจัดทำแผนภาพ UML สำหรับผู้รักษาคะแนนของเกมโบว์ลิ่ง จากนั้นเขาก็ไปพัฒนาโปรแกรมในลักษณะทดสอบการขับเคลื่อนโดยไม่ปรึกษาแผนภาพ UML โปรแกรมที่ได้นั้นไม่มีอะไรเหมือนกับแผนภาพ UML และลุงบ๊อบก็มาถึงข้อสรุปที่กล่าวไว้ข้างต้น

3
การพัฒนาขับเคลื่อนทดสอบข้ามภาษา
คำถามสั้น ๆ : คุณติดตามการพัฒนาที่ขับเคลื่อนด้วยการทดสอบในโครงการที่ครอบคลุมหลายภาษาได้อย่างไร โดยเฉพาะฉันเขียนเว็บแอปพลิเคชันที่ใช้ JavaScript และ PHP และฉันต้องการที่จะปฏิบัติตามหลักการ TDD แต่ฉันไม่แน่ใจว่าจะรวมพวกเขาได้อย่างไร ฉันจะรันชุดทดสอบแยกต่างหากสำหรับส่วน JS และ PHP และใช้ mocks ในชุด JS เพื่อจำลองการตอบสนองของเซิร์ฟเวอร์หรือไม่ มีเทคนิคสำหรับการทดสอบหน่วยทั้งสองส่วนประกอบในการทดสอบครั้งเดียวหรือไม่? นี่เป็นประสบการณ์ครั้งแรกของฉันในการใช้การพัฒนาที่ขับเคลื่อนด้วยการทดสอบดังนั้นคำแนะนำใด ๆ ที่คุณสามารถแบ่งปันเกี่ยวกับวิธีทำให้มันน้อยลง เหตุผลที่ฉันเลือกคือเมื่อฉันสร้างต้นแบบเสร็จข้อกำหนดก็เปลี่ยนไปทำให้ฉันต้องเปลี่ยนการออกแบบ ฉันคิดว่าถ้าฉันเริ่มต้นฉันต้องการที่จะเขียนรหัสที่สามารถขยายได้มากขึ้นด้วยการทดสอบการถดถอยในตัวตั้งแต่เริ่มต้น ฉันกำลังเขียนการทดสอบ PHP ของฉันใน SimpleTest และการทดสอบ JavaScript ของฉันใน JsTestDriver ฉันคุ้นเคยกับกระบวนทัศน์เชิงวัตถุดังนั้นฉันจึงมีบางคลาสใน PHP และฉันทำสิ่งที่คล้ายกันใน JavaScript โดยใช้การสืบทอดต้นแบบ ฉันก็เริ่มอ่านหนังสือเล่มนี้เกี่ยวกับ TDD ใน Pythonและหนังสือเล่มนี้เกี่ยวกับ TDD ใน JavaScriptแต่จากสิ่งที่ฉันได้เห็นสิ่งเหล่านี้ไม่ได้อธิบายการทดสอบแอปพลิเคชันแบบเต็ม (นอกการใช้บางอย่างเช่น Selenium หรือไดรเวอร์เว็บอื่น เพื่อทำการทดสอบการยอมรับแบบ …

2
เราควรเลียนแบบเอนทิตีและวัตถุที่มีค่าเมื่อทำ DDD หรือไม่
หลังจากที่อ่านไม่กี่ บทความเกี่ยวกับnewable VS ฉีดวัตถุและวิธีการแนวความคิดเหล่านี้เกี่ยวข้องกับ DDD บริการหน่วยงานและวัตถุค่าฉันถูกทิ้งให้อยู่กับข้อสงสัยบางอย่างเกี่ยวกับการใช้ newables ในรหัสของฉันโดยเฉพาะอย่างยิ่งในการทดสอบหน่วยของฉัน ผู้สมัครหลักสำหรับ newables คือ Entities และ Value objects หมายถึงแทนที่จะฉีดการขึ้นต่อกันเหล่านี้ไปยังอ็อบเจกต์อื่นเราควรnewเป็นเพียงตัวอย่างของอ็อบเจกต์เหล่านี้และใช้มันโดยตรงในโค้ด อย่างไรก็ตามแนวปฏิบัติที่ดีของ DDD สนับสนุนการมอบหมายความรับผิดชอบให้แก่หน่วยงานและวัตถุที่มีค่าหากพวกเขาเห็นว่าเหมาะสม ดังนั้นเอนทิตีและวัตถุค่าจะสิ้นสุดลงด้วยตรรกะทางธุรกิจที่ร้ายแรงบางอย่างในนั้น ตอนนี้ถ้าบริการทำงานบนเอนทิตีหรือวัตถุที่มีค่าฉันควรล้อเลียนเอนทิตีหรือวัตถุที่มีค่าและส่งจำลองไปยังบริการ (การเยาะเย้ยจะต้องมีinterfaceสำหรับวัตถุค่าหรือหน่วยงานที่ดูเหมือนจะสนับสนุน) หรือฉันควรnewเป็นเพียงแค่เอนทิตี / ค่าวัตถุและผ่านการใช้งานที่เป็นรูปธรรมไปยังบริการและทำให้เป็นการละเมิดหลักการทดสอบหน่วยของการทดสอบเพียงหนึ่งหน่วย?

4
ภาษาใหม่จะมีลักษณะอย่างไรถ้ามันถูกออกแบบมาตั้งแต่เริ่มต้นจนถึง TDD ง่าย?
ด้วยบางภาษาที่พบบ่อยที่สุด (Java, C #, Java, ฯลฯ ) บางครั้งดูเหมือนว่าคุณกำลังทำงานกับภาษาเมื่อคุณต้องการ TDD รหัสของคุณอย่างเต็มที่ ตัวอย่างเช่นใน Java และ C # คุณจะต้องการเยาะเย้ยการพึ่งพาใด ๆ ของชั้นเรียนของคุณและกรอบการเยาะเย้ยส่วนใหญ่จะแนะนำให้คุณจำลองการเชื่อมต่อไม่ได้เรียน บ่อยครั้งซึ่งหมายความว่าคุณมีอินเทอร์เฟซมากมายกับการใช้งานเพียงครั้งเดียว (เอฟเฟกต์นี้จะสังเกตได้ชัดเจนยิ่งขึ้นเพราะ TDD จะบังคับให้คุณเขียนคลาสที่มีขนาดเล็กกว่า) โซลูชันที่ให้คุณจำลองคลาสคอนกรีตอย่างถูกต้องทำสิ่งต่าง ๆ เช่นดัดแปลงคอมไพเลอร์หรือแทนที่ตัวโหลดคลาส ฯลฯ ซึ่งน่ารังเกียจ แล้วภาษาจะเป็นอย่างไรถ้ามันถูกออกแบบมาตั้งแต่เริ่มต้นจนถึงเป็น TDD ที่ยอดเยี่ยม? อาจเป็นไปได้ที่ภาษาระดับวิธีการอธิบายการพึ่งพา (แทนที่จะผ่านอินเตอร์เฟซไปยังตัวสร้าง) และความสามารถในการแยกอินเทอร์เฟซของชั้นเรียนโดยไม่ทำอย่างชัดเจน?

1
ฉันจะเริ่มต้นใช้ TDD เพื่อเขียนโค้ดฟังก์ชันการทำงานแบบง่ายได้อย่างไร
ฉันมีส่วนสำคัญของ TDD ฉันขายมันมีประโยชน์และฉันมีคำสั่งที่สมเหตุสมผลของกรอบ MSTEST อย่างไรก็ตามจนถึงวันนี้ฉันยังไม่สามารถเปลี่ยนเป็นวิธีการพัฒนาหลักได้ ส่วนใหญ่ฉันใช้เป็นตัวแทนในการเขียนแอปคอนโซลเป็นไดรเวอร์ทดสอบ (วิธีดั้งเดิมของฉัน) สิ่งที่มีประโยชน์ที่สุดสำหรับฉันคือวิธีที่มันดูดซับบทบาทของการทดสอบการถดถอย ฉันยังไม่ได้สร้างอะไรเลยที่แยกพฤติกรรมทดสอบต่าง ๆ โดยเฉพาะซึ่งเป็นอีกส่วนใหญ่ของภาพที่ฉันรู้ ดังนั้นคำถามนี้เพื่อขอคำแนะนำเกี่ยวกับสิ่งที่การทดสอบครั้งแรกที่ฉันอาจเขียนสำหรับงานพัฒนาต่อไปนี้: ฉันต้องการผลิตรหัสที่ห่อหุ้มการดำเนินงานในแบบของผู้ผลิต / ผู้บริโภค ฉันหยุดและตัดสินใจที่จะเขียนคำถามนี้หลังจากที่ฉันเขียนรหัสนี้ (สงสัยว่าถ้าฉันสามารถใช้ TDD จริงในเวลานี้) รหัส: interface ITask { Guid TaskId { get; } bool IsComplete { get; } bool IsFailed { get; } bool IsRunning { get; } } interface ITaskContainer { Guid AddTask(ICommand action); …
9 c#  tdd 

4
สิ่งที่เข้าใจภายใต้“ หน่วย” ในการทดสอบหน่วย
ตามที่ฉันเข้าใจในทฤษฎีภายใต้ "หน่วย" คนหมายถึงวิธี (ใน OOP) แต่ในการทดสอบการปฏิบัติซึ่งยืนยันว่าวิธีการแยกบางอย่างนั้นเป็นการทดสอบพฤติกรรมที่บอบบางมาก (ไม่ได้ตรวจสอบผลลัพธ์ แต่เป็นข้อเท็จจริงที่เรียกวิธีการพึ่งพาบางอย่าง) ดังนั้นฉันเห็นผู้คนจำนวนมากที่เรียนเป็นกลุ่มเข้าใจคลาสเล็ก ๆ ที่เกี่ยวข้องอย่างใกล้ชิด ในกรณีนี้มีเพียงการอ้างอิงภายนอกเท่านั้นที่จะถูกล้อเลียน / ขัดและสำหรับการอ้างอิงที่อยู่ภายในการใช้งานจริงของหน่วย ในกรณีนี้มีสถานะมากขึ้นมีความหมาย (ตามข้อกำหนด) และการทดสอบที่ไม่เปราะบาง ดังนั้นคำถามคือคุณรู้สึกอย่างไรเกี่ยวกับวิธีการเหล่านี้และมันถูกต้องหรือไม่ที่จะเรียกการทดสอบหน่วยวิธีที่สองหรืออาจเป็นการทดสอบบูรณาการระดับต่ำ หากคุณเห็นข้อควรพิจารณาบางประการเกี่ยวกับการใช้ TDD ด้วยวิธีการทดสอบวิธีใดวิธีหนึ่งเหล่านี้ฉันจะขอบคุณสำหรับความคิดของคุณ

3
BDD: เริ่มต้น
ฉันเริ่มต้นด้วย BDD และนี่คือเรื่องราวของฉัน: Feature: Months and days to days In order to see months and days as days As a date conversion fan I need a webpage where users can enter days and months and convert them to days. ฉันมีข้อสงสัยบางอย่าง ... ฉันควรเขียนสถานการณ์ของฉันก่อนที่จะเขียนโค้ดอะไรหรือฉันควรเขียนสถานการณ์ก่อนแล้วจึงเขียนรหัสเขียนสถานการณ์อีกครั้งแล้วเขียนรหัสและอื่น ๆ ... ? ถ้าฉันควรเขียนสถานการณ์ของฉันก่อนหน้านี้ขั้นตอนของฉันจะได้รับการอนุมัติและรหัสการผลิตยังไม่เสร็จ เมื่อใดที่ฉันควรทำการปรับเปลี่ยนรหัสของฉัน หลังจากเสร็จสิ้นคุณสมบัติหรือหลังจากการนำแต่ละสถานการณ์ไปใช้

4
ชื่อใหม่สำหรับการทดสอบหน่วย [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันไม่เคยชอบทดสอบหน่วย ฉันคิดเสมอว่ามันเพิ่มปริมาณงานที่ฉันต้องทำ กลายเป็นว่าเป็นเพียงความจริงในแง่ของจำนวนบรรทัดของรหัสที่คุณเขียนจริงและยิ่งไปกว่านั้นสิ่งนี้จะถูกชดเชยโดยการเพิ่มจำนวนบรรทัดของโค้ดที่มีประโยชน์ที่คุณสามารถเขียนในหนึ่งชั่วโมงด้วยการทดสอบและการพัฒนาแบบทดสอบ ตอนนี้ฉันชอบการทดสอบหน่วยเพราะพวกเขาอนุญาตให้ฉันเขียนโค้ดที่มีประโยชน์ซึ่งค่อนข้างบ่อยครั้งแรกที่ใช้งานได้! (เคาะบนไม้) ฉันพบว่าผู้คนลังเลที่จะทำการทดสอบหน่วยหรือเริ่มต้นโครงการด้วยการพัฒนาด้วยการทดสอบหากพวกเขาอยู่ภายใต้เส้นเวลาที่เข้มงวดหรือในสภาพแวดล้อมที่คนอื่นไม่ทำดังนั้นพวกเขาจึงไม่ทำ ค่อนข้างชอบปฏิเสธวัฒนธรรมที่จะลอง ฉันคิดว่าหนึ่งในสิ่งที่ทรงพลังที่สุดเกี่ยวกับการทดสอบหน่วยคือความมั่นใจที่จะทำให้คุณทำการปรับโครงสร้างใหม่ นอกจากนี้ยังให้ความหวังใหม่ที่ฉันสามารถมอบรหัสให้ผู้อื่นเพื่อปรับปรุง / ปรับปรุงและถ้าการทดสอบหน่วยของฉันยังคงใช้งานได้ฉันสามารถใช้ไลบรารี่เวอร์ชันใหม่ที่พวกเขาแก้ไขได้โดยไม่ต้องกลัว นี่เป็นแง่มุมสุดท้ายของการทดสอบหน่วยที่ฉันคิดว่าต้องการชื่อใหม่ การทดสอบหน่วยเป็นเหมือนสัญญาของสิ่งที่รหัสนี้ควรทำตอนนี้และในอนาคต เมื่อฉันได้ยินคำทดสอบฉันคิดว่าหนูเป็นกรงด้วยการทดลองหลายครั้งเพื่อให้เห็นถึงประสิทธิภาพของสารประกอบ นี่ไม่ใช่สิ่งที่การทดสอบหน่วยเราไม่ได้ลองใช้รหัสที่แตกต่างกันเพื่อดูว่าอะไรคือวิธีที่มีความรู้สึกมากที่สุดเรากำลังกำหนดสิ่งที่เราคาดหวังกับสิ่งที่อินพุต ในตัวอย่างของหนูการทดสอบหน่วยเป็นเหมือนคำจำกัดความของการทำงานของจักรวาลเมื่อเทียบกับการทดลองที่ทำกับหนู ฉันกำลังแตกหรือไม่มีใครเห็นการปฏิเสธที่จะทำการทดสอบและพวกเขาคิดว่ามันเป็นเหตุผลที่คล้ายกันที่พวกเขาไม่ต้องการที่จะทำมันได้หรือไม่ คุณ / คนอื่น ๆ ให้เหตุผลอะไรเพื่อไม่ทำการทดสอบ คุณคิดว่าแรงจูงใจของพวกเขาไม่ใช่การทดสอบหน่วย? และในฐานะชื่อใหม่สำหรับการทดสอบหน่วยที่อาจผ่านการคัดค้านบางอย่างแล้ว jContract ล่ะ? (Java เป็นศูนย์กลางฉันรู้ว่า :) หรือหน่วยสัญญาหรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.