ฉันอยากถามคำถามนี้เพื่อดูว่ามี บริษัท กี่แห่งที่ฝึกซ้อม TDD
ในช่วง 11 ปีที่ผ่านมาฉันได้เขียนโปรแกรมอย่างมืออาชีพเฉพาะสององค์กรที่ผ่านมาได้ตระหนักถึง TDD (ซึ่งครอบคลุมถึงเกือบ 5 ปีก่อนหน้านี้เวลาที่ TDD ไม่ได้รับความนิยมเท่ากับวันนี้) ฉันจะตัดการไล่ล่าและตอบคำถามของคุณก่อนที่จะเจาะเข้าไปในสนามขายของฉันสำหรับ TDD :)
ที่ บริษัท สุดท้ายที่ฉันทำงานให้กับ (ผู้เผยแพร่ทางวิชาการด้านมนุษยศาสตร์และวิทยาศาสตร์ออนไลน์) เรารู้ว่าเราจำเป็นต้องฝึกฝน TDD แต่เราไม่เคยไปถึงที่นั่น ในการป้องกันของเราเรามีฐานรหัส 250k ดังนั้นการเพิ่มการทดสอบลงในฐานรหัสที่ไม่สามารถทดสอบได้ของขนาดนั้นรู้สึกไม่สามารถเอาชนะได้ (ฉันรู้สึกผิดที่พิมพ์ตอนนี้!) แม้แต่ที่ดีที่สุดของเราทำผิดพลาด
ใครก็ตามที่ทำแม้กระทั่ง TDD เพียงเล็กน้อยก็รู้ดีว่าการทดสอบการเดินที่เจ็บปวดไปยังรหัสสีน้ำตาลที่ไม่สามารถทดสอบได้นั้นเป็นสาเหตุที่สำคัญที่สุดคือการอ้างอิงโดยนัย (คุณไม่สามารถดึงคันโยกทั้งหมดเพื่อยืนยันผลลัพธ์จากรหัสได้ สถานการณ์) และการละเมิดหลักการความรับผิดชอบเดียว (การทดสอบมีความซับซ้อนประดิษฐ์วางแผนต้องมีการตั้งค่ามากเกินไปและยากที่จะเข้าใจ )
เราขยายทีมงาน QA ของเราชั่วคราว (จากคนหนึ่งอาจเป็นสองคนครึ่งโหลหรือมากกว่านั้น) เพื่อทดสอบแพลตฟอร์มก่อนที่จะมีการเปิดตัว มันใช้เวลาค่อนข้างแพงทั้งในด้านการเงินและทางการเงินบางรุ่นอาจใช้เวลาสามเดือนในการ 'ทดสอบ' แม้แล้วเราก็รู้ว่าเรากำลังจัดส่งด้วยปัญหาพวกเขาก็ไม่ได้ 'บล็อค' หรือ 'สำคัญ' เพียงแค่ 'ลำดับความสำคัญสูง'
หากคุณได้ประสบการณ์ในเชิงพาณิชย์ปีคุณจะชื่นชมว่าทุก บริษัท อ้างที่สำคัญงานแล้วประดิษฐ์ระดับความสำคัญสูงกว่านั้นและมีแนวโน้มมากที่สุดคนหนึ่งดังกล่าวข้างต้นที่มากเกินไป - โดยเฉพาะอย่างยิ่งเมื่อมีคนจากข้างต้นจะผลักดันคุณลักษณะ / แก้ไขข้อผิดพลาด ฉันเชือนแช ...
ฉันดีใจที่ได้รายงานว่าฉันกำลังฝึกซ้อม TDD ใน บริษัท ปัจจุบันของฉัน (การสื่อสารโทรคมนาคมเว็บและบ้านพัฒนาแอพมือถือ) ควบคู่กับ Jenkins CI เพื่อให้รายงานการวิเคราะห์แบบคงที่อื่น ๆ (การครอบคลุมรหัสเป็นประโยชน์มากที่สุดหลังจากยืนยันชุดทดสอบผ่าน) . โครงการที่ฉันใช้ TDD เป็นระบบการชำระเงินและระบบประมวลผลกริด
สนามขาย ...
มันอาจเป็นการต่อสู้ที่ยากลำบากเนื่องจากการทดสอบอัตโนมัติกับสมาชิกในทีมที่ไม่ใช่ด้านเทคนิค การทดสอบการเขียนจะเพิ่มงานให้กับกระบวนการพัฒนามากขึ้น แต่ ... เวลาที่คุณลงทุนในการทดสอบตอนนี้คุณจะประหยัดในการบำรุงรักษาในภายหลัง คุณแค่ยืมเวลาจริงๆ ยิ่งใช้ผลิตภัณฑ์นานขึ้นเท่าไหร่คุณก็ยิ่งประหยัดได้มากเท่านั้นและจะช่วยให้คุณไม่ต้องเขียนซ้ำอีกมาก
ทดสอบก่อนหมายความว่าคุณกำลังเขียนรหัสเจตนาของคุณก่อนจากนั้นยืนยันรหัสของคุณเติมเต็มเจตนานั้น สิ่งนี้จะให้ความสำคัญและกลั่นกรองรหัสของคุณเพื่อทำในสิ่งที่ตั้งใจและไม่มากเท่านั้น เป็นข้อกำหนดและเอกสารประกอบการใช้งานได้ในเวลาเดียวกัน (หากการทดสอบของคุณเขียนได้ดีและการทดสอบควรอ่าน / ทำความสะอาดได้ดีเท่ากับรหัสระบบของคุณถ้าไม่มากขึ้น!)
ผู้เขียนโปรแกรมที่ไม่ใช่ (มัก) จะไม่มีความเข้าใจด้านนี้และดังนั้น TDD จึงไม่ถือค่ามากนักและถูกมองว่าเป็นทางลัดที่ใช้แล้วทิ้งไปจนถึงวันที่วางจำหน่ายก่อนหน้านี้
การเขียนโปรแกรมเป็นโดเมนของเราและในใจของฉันสิ่งนี้ทำให้เรามีความรับผิดชอบในฐานะผู้เชี่ยวชาญในการให้คำแนะนำในการปฏิบัติที่ดีที่สุดเช่น TDD ไม่ได้สำหรับผู้จัดการโครงการที่จะตัดสินใจว่าจะทำเพื่อลดเวลาในการพัฒนาก็ออกมาจากเขตอำนาจของตน ในทำนองเดียวกันพวกเขาไม่ได้บอกคุณว่าจะใช้เฟรมเวิร์กแคชโซลูชันหรืออัลกอริทึมการค้นหาอย่างไรพวกเขาไม่ควรบอกคุณว่าคุณควรใช้การทดสอบอัตโนมัติ
ในความคิดของฉันอุตสาหกรรมการพัฒนาซอฟต์แวร์ (โดยรวม) ในปัจจุบันขาดความจริงที่ว่าการทดสอบซอฟต์แวร์ของคุณไม่ใช่บรรทัดฐาน
ลองนึกภาพสิ่งนี้ในอุตสาหกรรมอื่น ๆ : ทางการแพทย์, การบิน, รถยนต์, เครื่องสำอางค์, ของเล่นนุ่ม ๆ , เครื่องดื่มแอลกอฮอล์ ฯลฯ ฉันขอคู่หมั้นของฉันตั้งชื่ออุตสาหกรรมที่พวกเขาไม่ได้ทดสอบผลิตภัณฑ์และเธอทำไม่ได้!
บางทีมันอาจไม่ยุติธรรมที่จะบอกว่าไม่มีการทดสอบเกิดขึ้นเพราะมันเป็น ... แต่ใน บริษัท ที่ไม่มีการทดสอบอัตโนมัติมันเป็นกระบวนการที่ต้องใช้คน / คน (อ่าน clunky และมักจะเกิดข้อผิดพลาดได้ง่าย)
จุดหนึ่งที่ฉันจะโต้แย้งในคำถามของคุณ ...
พวกเขาต้องการให้การพัฒนาเริ่มต้นทันทีหรือหลังจากการออกแบบระยะสั้น คล้ายกับ Agile
การเป็น "เปรียว" ไม่ได้กำหนดให้ดำเนินการต่อโดยไม่มีการทดสอบสมาชิกรายแรกที่อยู่ในagilemanifesto.orgคือKent Beckผู้สร้าง XP และ TDD!
ฉันขอแนะนำหนังสือสองเล่มถ้าคุณสนใจ TDD หรือแค่ยังไม่ได้อ่านและเป็นโปรแกรมเมอร์ที่กระตือรือร้น
การพัฒนาซอฟต์แวร์เชิงวัตถุเชิงนำโดยการทดสอบ
Clean Code - Robert C Martin ("ลุงบ็อบ") ซีรี่ส์
หนังสือสองเล่มนี้ชมเชยกันและย่อความรู้สึกลงในหลาย ๆ หน้า
ขอบคุณที่ถามคำถามนี้ :)