ฉันได้นำการทดสอบหน่วยไปใช้กับรหัสฐานที่ไม่เคยมีมาก่อน โครงการใหญ่ครั้งสุดท้ายที่ฉันเกี่ยวข้องกับที่ที่ฉันทำสิ่งนี้ผลิตภัณฑ์ได้ทำการผลิตแล้วโดยไม่มีการทดสอบหน่วยเมื่อฉันมาถึงทีม เมื่อฉันออกจาก - 2 ปีต่อมา - เรามีการทดสอบมากกว่า 4,500 ครั้งขึ้นไปให้ผลการครอบคลุมรหัส 33% ในฐานรหัสด้วย LOC การผลิต 230,000+ รายการ (แอปพลิเคชันชนะทางการเงินแบบเรียลไทม์) สิ่งนั้นอาจฟังดูต่ำ แต่ผลลัพธ์ก็คือการปรับปรุงคุณภาพโค้ดและอัตราข้อบกพร่องอย่างมีนัยสำคัญรวมถึงขวัญกำลังใจและผลกำไรที่ดีขึ้น
สามารถทำได้เมื่อคุณมีทั้งความเข้าใจที่ถูกต้องและความมุ่งมั่นจากฝ่ายที่เกี่ยวข้อง
ก่อนอื่นสิ่งสำคัญคือต้องเข้าใจว่าการทดสอบหน่วยเป็นทักษะในตัวเอง คุณสามารถเป็นโปรแกรมเมอร์ที่มีประสิทธิผลมากได้ด้วยมาตรฐาน "ทั่วไป" และยังคงพยายามเขียนการทดสอบหน่วยในลักษณะที่ปรับขนาดในโครงการขนาดใหญ่
นอกจากนี้และสำหรับสถานการณ์ของคุณโดยเฉพาะการเพิ่มการทดสอบหน่วยในฐานรหัสที่มีอยู่ซึ่งไม่มีการทดสอบก็เป็นทักษะเฉพาะในตัวเอง ถ้าคุณหรือใครบางคนในทีมของคุณมีประสบการณ์ที่ประสบความสำเร็จในการแนะนำการทดสอบหน่วยกับฐานรหัสที่มีอยู่ฉันจะบอกว่าการอ่านหนังสือของ Featherเป็นข้อกำหนด (ไม่แนะนำหรือไม่แนะนำอย่างยิ่ง)
การเปลี่ยนเป็นหน่วยทดสอบรหัสของคุณเป็นการลงทุนในผู้คนและทักษะเช่นเดียวกับคุณภาพของรหัสฐาน การเข้าใจสิ่งนี้มีความสำคัญมากในแง่ของความคิดและการจัดการความคาดหวัง
ตอนนี้สำหรับความคิดเห็นและคำถามของคุณ:
อย่างไรก็ตามฉันกังวลว่าฉันจะจบลงด้วยการขาดภาพรวมและจบการทดสอบพื้นฐานที่ขาดหายไปซึ่งจะรวมอยู่ด้วยหากฉันใช้ TDD จากการเดินทาง
คำตอบสั้น ๆ : ใช่คุณจะพลาดการทดสอบและใช่ในตอนแรกพวกเขาอาจดูไม่เหมือนสิ่งที่พวกเขาจะต้องอยู่ในสถานการณ์สีเขียว
คำตอบระดับลึกคือ: มันไม่สำคัญ คุณเริ่มต้นโดยไม่มีการทดสอบ เริ่มเพิ่มการทดสอบและสร้างซ้ำตามที่คุณไป เมื่อระดับทักษะดีขึ้นให้เริ่มเพิ่มแถบสำหรับโค้ดที่เพิ่งเขียนใหม่ทั้งหมดที่เพิ่มในโครงการของคุณ ปรับปรุงอย่างต่อเนื่อง ฯลฯ ...
ตอนนี้การอ่านระหว่างบรรทัดที่นี่ฉันได้รับความประทับใจที่มาจากความคิดของ "ความสมบูรณ์แบบเป็นข้อแก้ตัวที่ไม่ดำเนินการ" ความคิดที่ดีกว่าคือการมุ่งเน้นความเชื่อมั่นในตนเอง ดังนั้นในขณะที่คุณอาจไม่รู้ว่าต้องทำยังไงคุณจะรู้วิธีที่จะทำและเติมลงในช่องว่าง ดังนั้นจึงไม่มีเหตุผลที่จะต้องกังวล
อีกครั้งมันเป็นทักษะ คุณไม่สามารถผ่านการทดสอบแบบศูนย์ไปจนถึงความสมบูรณ์แบบ TDD ได้ใน "กระบวนการ" หรือ "ขั้นตอน" ในการทำหนังสือแบบเส้นตรง มันจะเป็นกระบวนการ ความคาดหวังของคุณจะต้องทำให้ความคืบหน้าและการปรับปรุงและการปรับปรุง ไม่มียาวิเศษ
ข่าวดีก็คือว่าเมื่อผ่านไปหลายเดือน (และหลายปี) รหัสของคุณจะค่อยๆกลายเป็น "เหมาะสม" และได้รับการทดสอบอย่างดี
ในฐานะที่เป็นบันทึกด้านข้าง คุณจะพบว่าอุปสรรคหลักในการแนะนำการทดสอบหน่วยในฐานรหัสเก่าคือการขาดการติดต่อกันและพึ่งพามากเกินไป คุณอาจจะพบว่าทักษะที่สำคัญที่สุดจะกลายเป็นวิธีที่จะทำลายการอ้างอิงที่มีอยู่และรหัสการแยกตัวแทนที่จะเขียนการทดสอบหน่วยที่แท้จริง
มีกระบวนการ / ขั้นตอนใดบ้างที่ควรปฏิบัติตามเพื่อให้แน่ใจว่าโซลูชันที่มีอยู่นั้นได้รับการทดสอบอย่างถูกต้องตามหน่วยงาน
ยกเว้นว่าคุณมีอยู่แล้วให้ตั้งค่าเซิร์ฟเวอร์สร้างและตั้งค่าโครงสร้างการรวมอย่างต่อเนื่องที่ทำงานในทุกการเช็คอินรวมถึงการทดสอบหน่วยทั้งหมดที่มีรหัสครอบคลุม
ฝึกคนของคุณ
เริ่มต้นที่ไหนสักแห่งและเริ่มเพิ่มการทดสอบในขณะที่คุณดำเนินการจากมุมมองของลูกค้า (ดูด้านล่าง)
ใช้การครอบคลุมโค้ดเพื่อเป็นแนวทางในการอ้างอิงว่าฐานรหัสการผลิตของคุณอยู่ระหว่างการทดสอบเท่าใด
เวลาบิลด์ควรเป็น FAST เสมอ หากเวลาสร้างของคุณช้าทักษะการทดสอบหน่วยของคุณจะล้าหลัง ค้นหาการทดสอบที่ช้าและปรับปรุง (แยกรหัสการผลิตและการทดสอบแยก) เขียนได้ดีคุณควรจะมีหลายพันหน่วยทดสอบและยังคงสร้างใน 10 นาที (~ 1 - ไม่กี่ ms / ทดสอบเป็นแนวทางที่ดี แต่หยาบมากบางข้อยกเว้นบางอย่างอาจใช้เช่นรหัสโดยใช้การสะท้อน ฯลฯ )
ตรวจสอบและปรับตัว
ฉันจะมั่นใจได้อย่างไรว่าการทดสอบนั้นมีคุณภาพดีและไม่ใช่แค่กรณีของการทดสอบใด ๆ นั้นดีกว่าไม่มีการทดสอบ
การตัดสินใจของคุณจะต้องเป็นแหล่งที่มาหลักของความเป็นจริงของคุณ ไม่มีตัวชี้วัดที่สามารถแทนที่ทักษะได้
หากคุณไม่มีประสบการณ์หรือคำพิพากษาดังกล่าวให้ลองทำสัญญากับคนที่ทำเช่นนั้น
ตัวบ่งชี้รองหยาบสองตัวครอบคลุมรหัสทั้งหมดและสร้างความเร็ว
มันคุ้มค่ากับความพยายามในการแก้ปัญหาที่มีอยู่ในการผลิตหรือไม่?
ใช่. เงินส่วนใหญ่ที่ใช้ไปกับระบบหรือโซลูชันที่สร้างขึ้นเองนั้นถูกใช้ไปหลังจากที่ได้ผลิต และการลงทุนด้านคุณภาพผู้คนและทักษะไม่ควรมีสไตล์
จะดีกว่าหรือไม่ที่จะเพิกเฉยต่อการทดสอบสำหรับโครงการนี้และเพิ่มในการเขียนในอนาคตที่เป็นไปได้?
คุณจะต้องคำนึงถึงไม่เพียง แต่การลงทุนในคนและทักษะเท่านั้น แต่ที่สำคัญที่สุดคือค่าใช้จ่ายโดยรวมในการเป็นเจ้าของและเวลาชีวิตที่คาดหวังของระบบ
คำตอบส่วนบุคคลของฉันจะเป็น "ใช่แน่นอน" ในกรณีส่วนใหญ่เพราะฉันรู้ดีกว่ามาก แต่ฉันรู้ว่าอาจมีข้อยกเว้น
สิ่งที่จะเป็นประโยชน์มากขึ้น ใช้เวลาสองสามสัปดาห์ในการเพิ่มการทดสอบหรือไม่กี่สัปดาห์ที่จะเพิ่มฟังก์ชั่น?
ทั้ง วิธีการของคุณควรจะเพิ่มการทดสอบในฐานรหัสของคุณในขณะที่คุณกำลังดำเนินการในแง่ของการทำงาน
อีกครั้งเป็นการลงทุนในคนทักษะและคุณภาพของรหัสฐานและเช่นนั้นจะต้องใช้เวลา สมาชิกในทีมต้องเรียนรู้วิธีการแบ่งการพึ่งพาการเขียนการทดสอบหน่วยเรียนรู้ habbits ใหม่ปรับปรุงวินัยและการรับรู้ที่มีคุณภาพวิธีการออกแบบซอฟต์แวร์ที่ดีขึ้น ฯลฯ เป็นสิ่งสำคัญที่จะต้องเข้าใจว่าเมื่อคุณเริ่มเพิ่มการทดสอบสมาชิกในทีมของคุณ มีทักษะเหล่านี้ในระดับที่พวกเขาต้องการเพื่อที่จะประสบความสำเร็จดังนั้นการหยุดความก้าวหน้าในการใช้เวลาตลอดเวลาเพื่อเพิ่มการทดสอบจำนวนมากก็ไม่ได้ผล
นอกจากนี้การเพิ่มการทดสอบหน่วยในฐานรหัสที่มีอยู่ของขนาดโครงการใด ๆ ที่มีขนาดใหญ่คือการดำเนินการขนาดใหญ่ซึ่งต้องใช้ความมุ่งมั่นและความอดทน คุณไม่สามารถเปลี่ยนสิ่งพื้นฐานได้คาดหวังการเรียนรู้มากมายเกี่ยวกับวิธีการและขอให้สปอนเซอร์ของคุณไม่คาดหวัง ROI จากการหยุดยั้งการไหลของมูลค่าทางธุรกิจ มันจะไม่บินและไม่ควรพูดตรงๆ
ประการที่สามคุณต้องการปลูกฝังค่านิยมของธุรกิจในทีมของคุณ คุณภาพไม่เคยมาด้วยค่าใช้จ่ายของลูกค้าและคุณไม่สามารถไปอย่างรวดเร็วหากไม่มีคุณภาพ นอกจากนี้ลูกค้ากำลังอยู่ในโลกที่เปลี่ยนแปลงและงานของคุณคือทำให้เขาปรับตัวได้ง่ายขึ้น การจัดตำแหน่งลูกค้าต้องการคุณภาพและการไหลของมูลค่าทางธุรกิจ
สิ่งที่คุณกำลังทำคือชำระหนี้ทางเทคนิค และคุณกำลังทำเช่นนั้นในขณะที่ยังคงให้บริการลูกค้าที่เปลี่ยนแปลงความต้องการ สถานการณ์จะดีขึ้นและง่ายขึ้นในการให้บริการลูกค้าได้ดีขึ้นและให้มูลค่าที่มากกว่า เป็นต้นโมเมนตัมเชิงบวกนี้เป็นสิ่งที่คุณควรตั้งเป้าหมายเพราะมันเป็นการขีดเส้นใต้หลักการของการก้าวที่ยั่งยืนและจะรักษาและปรับปรุงคุณธรรม - สำหรับทีมพัฒนาลูกค้าและผู้มีส่วนได้เสียของคุณ
หวังว่าจะช่วย