การพูดในชีวิตประจำวันแง่การปฏิบัติผมคิดว่ามันทั้งหมดขึ้นอยู่กับบริบท
ในทีมขนาดใหญ่ที่ทำงานด้วยมาตรฐานสูง / สูงมาก (คิดว่าธนาคารทหารขนาดใหญ่งบประมาณสูงหรือระบบธุรกิจที่สำคัญ) จากนั้นฉันคิดว่า"การดีบัก"อย่างชัดเจนควรเป็น "ผลลัพธ์ของการทดสอบ"และชัดเจนสิ่งที่แตกต่างกันมาก การทดสอบในอุดมคติจะนำไปสู่การแก้ไขข้อบกพร่อง (ในสภาพแวดล้อมการจัดเตรียม) และในการผลิตเราจำเป็นต้องใกล้เคียงกับศูนย์ทั้งสอง
การทดสอบมีขอบเขตกว้างปกติและเป็นทางการมาก - ในขณะที่การดีบักเป็นกระบวนการเฉพาะที่เกิดขึ้นเป็นครั้งคราวเมื่อมีความจำเป็นต้องแก้ไขข้อผิดพลาดเฉพาะ - ซึ่งไม่ชัดเจนและต้องมีการตรวจสอบการทำงานของระบบและผลลัพธ์ผลลัพธ์
ที่นี่ในการทดสอบความคิดของฉันเป็นสิ่งที่จำเป็นในขณะที่การแก้จุดบกพร่องเป็นเครื่องมือเฉพาะที่จำเป็นเฉพาะเมื่อการแก้ปัญหาความล้มเหลวเป็นทึบแสง
ฉันเข้าใจถึงยูทิลิตี้ที่เห็นได้ชัดใน TDDสำหรับทีมและระบบขนาดใหญ่โดยสิ้นเชิง นอกจากนี้ยังชัดเจนว่าเหมาะสมสำหรับระบบที่ซับซ้อน (มักจะเป็น "แบ็คเอนด์") หรือหากมีสัดส่วนของความซับซ้อนในโค้ดสูงเมื่อเทียบกับเอาต์พุต จากนั้น "การทดสอบ" มีโอกาสที่เป็นจริงในการแจ้งเวลาและสาเหตุที่ความล้มเหลวเกิดขึ้น ระบบที่ทำงานที่ซับซ้อนจำนวนมากและหรือส่งผลให้เกิดผลลัพธ์ที่วัดได้อย่างชัดเจนโดยทั่วไปสามารถทดสอบได้และดังนั้นการทดสอบจึงแตกต่างจากการดีบัก ในกรณีเหล่านี้การทดสอบอย่างยิ่งบ่งบอกถึงขั้นตอนตามวิธีการยืนยันอย่างเป็นทางการหรือยืนยันการจับคู่ของความคาดหวังและเอาท์พุทที่เกิดขึ้นจริง การทดสอบเกิดขึ้นตลอดเวลาและแจ้งให้เราทราบถึงความจำเป็นในการดีบัก
มันจะน่ารักถ้านี่เป็นความจริงที่แพร่หลายฉันจะรักถ้ารอบ dev ของฉันถูกคั่นด้วยเอาท์พุทไบนารีที่กำหนดไว้อย่างชัดเจน (สีแดงสีเขียว) แต่ ...
ในกรณีของฉัน (ซึ่งเป็นที่ยอมรับโดยเฉพาะ - การทำงานเดี่ยว 98% บนเว็บขนาดกลางขนาดเล็กที่ได้รับการสนับสนุนต่ำข้อมูลเน้นระบบการดูแลระบบขององค์กร) ฉันแค่ไม่สามารถเห็นได้ว่า TDD จะช่วยฉันได้อย่างไร หรือมากกว่า "การดีบัก" และ "การทดสอบ" จะเหมือนกันทุกประการ
ส่วนใหญ่แม้ว่าการใช้คำว่า "การทดสอบ" หมายถึง / เกี่ยวข้องอย่างใกล้ชิดกับวิธีการของ TDD
ฉันรู้ว่านี่เป็นสิ่งที่ไร้เดียงสาอย่างสิ้นเชิงโดยสิ้นเชิง "หลีกเลี่ยงผู้ที่ไม่เชื่อชุนชุน" ซึ่งเป็นสิ่งที่ไม่ควรพูด แต่คิดเกี่ยวกับบริบทของฉันด้วยหมวกที่ใช้งานได้จริงฉันไม่ได้คลุมเครือในจินตนาการที่ดุร้ายที่สุดของฉันดูว่า TDD จะช่วยฉันส่งมอบคุณค่าที่คุ้มค่าให้กับลูกค้าของฉันได้อย่างไร
หรือค่อนข้างฉันไม่เห็นด้วยอย่างยิ่งกับสมมติฐานทั่วไปที่ว่า "การทดสอบ" เป็นกระบวนการที่ใช้รหัสอย่างเป็นทางการ
การคัดค้านพื้นฐานของฉัน (ใช้ในบริบท * โดยเฉพาะของฉัน) คือ ...
ถ้าฉันลาดเทเขียนโค้ดที่ทำงานได้อย่างน่าเชื่อถือ - แล้วว่านรกฉันควรจะเขียนโค้ดที่ทำงานได้อย่างน่าเชื่อถือในการทดสอบกล่าวว่ารหัสสันนิษฐานย่อยมาตรฐาน
ให้ฉันฉันไม่เคยเห็นตัวอย่างใด ๆ หรือโต้แย้งว่า (ในบริบทเฉพาะของฉัน) ชวนผมพอที่จะได้รำคาญคิดเกี่ยวกับการเขียนการทดสอบเดียวผมอาจจะเขียนโค้ดทดสอบบางอย่างไร้สาระหาญในขณะนี้อาจจะ "ไม่กลับมาเก็บข้อมูลของฉันผู้ใช้ เอนทิตีที่มีชื่อ == X เมื่อฉันขอให้มัน - และอย่างเดียว - นั่น? "แต่อาจมีประโยชน์มากกว่าสำหรับฉันในการเขียนการสตรีมนี้อาจจะ - อินเทอร์เน็ต - จริงๆ - เป็น - แค่ - บริสุทธิ์ - โง่ - spouting- ขยะมูลฝอยอย่างเดือดดาล แต่กลับกลายเป็นเรื่องไร้สาระ แต่ฉันแค่รู้สึกถึงความจำเป็นที่จะต้องแสดงความสนับสนุนของปีศาจที่นี่ (ชนิดของความหวังใครบางคนจะแสดงให้ฉันเห็นแสงและแปลงฉันอาจจะจบลงด้วยการให้ลูกค้าของฉันคุ้มค่าเงินกว่านี้?)
บางครั้ง "debugging" อาจเหมือนกับ "การทดสอบ" จากนี้ฉันหมายถึงว่าในชีวิตการทำงานทุกวันฉันใช้เวลาอย่างน้อยหนึ่งในสามของเวลาที่ฉันเล่นกับระบบท้องถิ่นในเบราว์เซอร์ที่แตกต่างกันพยายามอย่างยิ่งที่จะลองทำสิ่งแปลกประหลาดต่าง ๆ เพื่อพยายามทำลายงานของฉัน สาเหตุที่ทำให้มันล้มเหลวและแก้ไขให้ถูกต้อง
ฉันเห็นด้วย 100% กับยูทิลิตี้ที่เห็นได้ชัดในมนต์ TDD "สีแดง / สีเขียว / refactor" แต่สำหรับฉัน (ทำงานในงบประมาณต่ำ med, เดี่ยว dev RIA ที่ดิน) ฉันจริง ๆ รักใครสักคนที่จะโปรดแสดงให้ฉันเห็นว่าฉันสามารถอาจเป็นไปได้อย่างมีเหตุผลและมีเหตุผล ได้รับมูลค่าเพิ่มเติมใด ๆจากการเขียนมากขึ้น ( เช่นเดียวกับรหัสทดสอบที่มีข้อบกพร่อง ) มากกว่าที่ฉันทำจากการโต้ตอบกับผลลัพธ์เต็มรูปแบบ (และเป็นหลักเท่านั้น) ของความพยายามของฉัน
สำหรับฉันเมื่อนักพัฒนาพูดถึง "การทดสอบ" โดยทั่วไปแล้วมันหมายถึง TDD
ฉันพยายามเขียนโค้ดราวกับว่ามีการทดสอบฉันคิดว่ารูปแบบ / แนวปฏิบัติและแนวโน้มทั้งหมดที่การพัฒนาที่เน้นการทดสอบทั้งหมดได้รับการสนับสนุนนั้นยอดเยี่ยมและสวยงาม แต่สำหรับฉันในโลกน้อยของฉัน "การทดสอบ" ไม่ได้เขียนโค้ดมากขึ้น การทดสอบในโลกแห่งความเป็นจริงจะส่งออกมันในลักษณะที่ใกล้เข้ามาจริงและนั่นก็เหมือนกับการแก้ไขจุดบกพร่องหรือการเปลี่ยนแปลงที่ใช้งานอยู่ที่นี่คือ "การดีบั๊ก" ซึ่งเป็นผลโดยตรงจากการทดสอบของมนุษย์ นี่เป็นสิ่งที่ตรงกันข้ามกับมุมมองที่ยอมรับกันโดยทั่วไปของ "การทดสอบ" เป็นสิ่งที่เป็นระบบอัตโนมัติและเป็นทางการและ "การดีบั๊ก" เป็นสิ่งที่มนุษย์และแบบเฉพาะกิจหรือไม่มีโครงสร้าง
หากเป้าหมายคุ้มค่ากับเงิน / ความพยายามและคุณกำลังสร้างแอพพลิเคชั่นแบบโต้ตอบบนเว็บดังนั้นผลลัพธ์ของความพยายามก็คือหน้าเว็บและที่สำคัญคือพวกเขาตอบสนองต่อการป้อนข้อมูลของมนุษย์อย่างไรดังนั้น "การทดสอบ" ทำได้ดีที่สุดโดยการทดสอบ หน้าเว็บเหล่านั้นผ่านการมีปฏิสัมพันธ์กับมนุษย์จริง เมื่อการโต้ตอบนี้นำไปสู่ผลลัพธ์ที่ไม่คาดคิดหรือไม่พึงประสงค์จะเกิด "debugging" การดีบักยังเกี่ยวข้องกับแนวคิดของการตรวจสอบเวลาจริงของสถานะโปรแกรม การทดสอบมักเกี่ยวข้องกับระบบอัตโนมัติซึ่งฉันคิดว่ามักจะเป็นสมาคมที่โชคร้าย
หากเป้าหมายคุ้มค่าสำหรับความพยายามจริงๆและการทดสอบอัตโนมัตินั้นมีประสิทธิภาพและเป็นประโยชน์อย่างมากในขณะที่การดีบักเป็นเพียงผลลัพธ์ของการทดสอบนั้นหรือการทดแทนที่ไม่ดีสำหรับการทดสอบอัตโนมัตินั่นคือเหตุผลว่าทำไมเว็บไซต์ที่มีผู้เข้าชมมากเป็นอันดับสองของโลก ) บ่อยครั้งที่เต็มไปด้วยข้อบกพร่องที่เห็นได้ชัด (กับผู้ใช้ แต่ไม่ชัดเจนทีมทดสอบและรหัสการทดสอบ) ข้อบกพร่อง?
อาจเป็นเพราะพวกเขาให้ความสำคัญกับแสงสีเขียวที่ให้ความมั่นใจและลืมที่จะใช้ผลงานของพวกเขาจริงเหรอ?
นักพัฒนาหลายคนคิดว่าการทดสอบเป็นสิ่งที่คุณทำกับรหัสและการดีบั๊กเป็นสิ่งที่คุณทำกับ IDE เป็นครั้งคราวเพราะไอคอนเปลี่ยนเป็นสีแดงและคุณไม่สามารถหาสาเหตุได้ว่าทำไม? ฉันคิดว่าคำเหล่านี้มีการตัดสินมูลค่าที่โชคร้ายที่เกี่ยวข้องกับพวกเขาซึ่งโดยทั่วไปปิดบังความเป็นจริงในทางปฏิบัติของสิ่งที่เราควรมุ่งเน้นเพื่อปิดช่องว่างระหว่างความคาดหวังและผลลัพธ์