การทดสอบหน่วยในระหว่างการตรวจสอบรหัสเป็นการทดแทนที่ไม่ดีสำหรับการทดสอบหน่วยในระหว่างการพัฒนา
สิ่งที่คุณแนะนำมีความหมายอย่างสมเหตุสมผล รีวิวมีไว้ทำอะไร? เพื่อตรวจสอบว่ารหัสนั้นดีหรือไม่ การทดสอบคืออะไร เพื่อตรวจสอบว่ารหัสนั้นดีหรือไม่ ดังนั้นทำไมไม่รวมทั้งสอง?
นี่คือเหตุผล
การนำรหัสภายใต้การทดสอบเป็นงานหนัก การเขียนโค้ดที่ใช้งานได้ในสิ่งเดียวที่ตั้งใจทำคือสิ่งหนึ่ง การเขียนโค้ดที่สามารถทดสอบได้อย่างมีประสิทธิภาพและมีประสิทธิภาพนั้นเป็นอีกสิ่งหนึ่ง ความจริงที่ว่ารหัสในขณะนี้ทำงานภายใต้สองสถานการณ์ - "งานจริง" และ "ทดสอบ" - ต้องการความยืดหยุ่นที่มากขึ้นต้องการรหัสนั้นสามารถยืนได้ด้วยตัวเองอย่างมีความหมาย
การเขียนโค้ดของคุณเพื่อให้สามารถทดสอบได้คือการทำงานและความสามารถพิเศษ การสร้างรหัสของคนอื่นเพื่อการทดสอบเมื่อไม่ได้เขียนด้วยความสามารถในการทดสอบในใจที่จะเริ่มต้นอาจเป็นงานที่สำคัญ
คุณพยายามทำซ้ำระหว่างผู้พัฒนาและผู้ตรวจสอบ สมมุตินักพัฒนาของคุณไม่ได้แจกรหัสของเขาในสำหรับการตรวจสอบโดยไม่ต้องอย่างน้อยบางส่วนระดับความเชื่อมั่นว่ามันเป็นที่ทำงาน เขาต้องการทดสอบโค้ดแล้ว ขณะนี้มีระดับและขอบเขตการทดสอบที่แตกต่างกัน QA ทดสอบโค้ดหลังจากผู้พัฒนาและผู้ตรวจสอบ แต่สิ่งที่ขอบเขตที่คุณคิดว่าเป็นที่เหมาะสมสำหรับนักพัฒนาและนักวิจารณ์มันทำให้รู้สึกสำหรับนักพัฒนาที่จะคิดออกว่าจะทดสอบรหัสในระดับที่ครั้งหนึ่งเคยเป็นแต่ให้การทดสอบของเขาใบปลิวและยากที่จะทำซ้ำแล้วนำมาในการวิจารณ์ไป พัฒนาแบบทดสอบอีกครั้งเวลานี้เป็นแบบอัตโนมัติและทำซ้ำได้ คุณแค่ให้พวกเขาทั้งคู่ลงทุนเวลาในการเขียนแบบทดสอบเดียวกัน - ครั้งเดียวไม่ดีก็ดี
คุณกำลังเปลี่ยนความเห็นให้กลายเป็นขั้นตอนที่ยาวนานและลำบากมากขึ้น หากการทดสอบเป็นส่วนสำคัญของกระบวนการทบทวนสิ่งที่เกิดขึ้นเมื่อการทดสอบบางอย่างล้มเหลว ? ผู้ตรวจสอบเป็นผู้รับผิดชอบในการรับการทดสอบทั้งหมดที่ทำงานอยู่หรือไม่ดังนั้นเธอจึงจำเป็นต้องดีบักรหัสด้วย หรือมันจะเป็นปิงปองไปมาการทดสอบการเขียนหนึ่งการทดสอบอื่น ๆ ที่ทำให้พวกเขาผ่าน
บางครั้งคุณสามารถเขียนการทดสอบทั้งกลุ่มซึ่งเป็นฉากฉากซึ่งกันและกันดังนั้นคุณจึงไม่จำเป็นต้องเล่นปิงปอง ผู้ตรวจสอบเขียนการทดสอบโหลครึ่งหนึ่งล้มเหลวนักพัฒนาแก้ไขข้อบกพร่องและการทดสอบทั้งหมดยังคงใช้ได้และผ่านไปตอนนี้ แต่ ... มีเวลามากที่คุณจะมีข้อบกพร่องของตัวบล็อกหรือข้อบกพร่องที่ต้องมีการออกแบบใหม่และการเปลี่ยนแปลง API หรืออะไรก็ตาม หากคุณต้องรับผิดชอบในการผ่านการทดสอบไปมาระหว่างผู้ตรวจสอบและผู้พัฒนาคุณจะไม่ได้อยู่ในขั้นตอนการตรวจสอบ คุณยังคงพัฒนา
จำเป็นต้องเขียนแบบทดสอบไม่ได้กระตุ้นให้มีการทบทวนอย่างละเอียดมากขึ้น นั่นหมายความว่ายิ่งคุณเข้าลึกยิ่งต้องทดสอบมากขึ้นเท่าไหร่และอาจจะเป็นการทดสอบที่ยากซึ่งต้องเจาะลึกเข้าไปในระบบ
เปรียบเทียบกับนักพัฒนาที่เขียนการทดสอบซึ่งสิ่งจูงใจของเขาคือ: ถ้าฉันไม่เขียนการทดสอบที่สำคัญผู้ตรวจสอบจะชี้ให้เห็นในการตรวจสอบ
แม้แต่ผู้ตรวจสอบก็จะมีความเข้าใจในระบบมากขึ้นถ้าเธอต้องการทดสอบโค้ดอย่างละเอียดจากนั้นถ้าเธอต้องตัดสินใจด้วยตัวเองเมื่อเธอสามารถหยุดเขียนการทดสอบแบบขุดลึกและเพียงแค่ตรวจสอบโค้ด
หากนักพัฒนาไม่ได้เขียนการทดสอบหน่วยผู้ตรวจทานก็จะไม่ทำเช่นนั้น มีอุปสรรคมากมายในการนำการทดสอบไปใช้เป็นวิธีปฏิบัติทั่วไป บางทีคุณอยู่ภายใต้แรงกดดันมากเกินไปและฐานรหัสของคุณยากที่จะนำมาทดสอบ บางทีคุณอาจไม่ได้มีประสบการณ์ในการทดสอบและรู้สึกว่าคุณไม่สามารถเรียนรู้ได้ บางทีคุณอาจมีนักฆ่าขวานที่ส่งข้อความที่คุกคามถึงคนที่เขียนบททดสอบ ฉันไม่รู้!
แต่ไม่ว่าจะเกิดจากสาเหตุใดก็ปลอดภัยที่จะเดิมพันว่าใช้ได้กับผู้ตรวจสอบและผู้พัฒนา หากทีมเน้นผู้ตรวจสอบจะไม่มีเวลามากไปกว่าที่นักพัฒนาทำ (ถ้าเธอทำให้แจกจ่ายงานใหม่เพื่อไม่ให้ผู้คนเครียด ) หากไม่มีใครรู้วิธีเขียนแบบทดสอบหน่วยผู้วิจารณ์อาจไม่ได้ทำเช่นนั้น (ถ้าเธอทำเธอควรนั่งลงและสอนเพื่อนร่วมทีม )
คำแนะนำนี้ดูเหมือนจะพยายามส่งผ่านเงินจากเพื่อนร่วมงานคนหนึ่งไปยังอีกคนหนึ่ง และฉันแค่ไม่เห็นวิธีใด ๆ ที่จะทำได้ดีก่อนอื่นเพราะมันยาก (และไม่แข็งแรง) เพื่อสร้างสถานการณ์ที่คนคนหนึ่งเป็นคนเดียวที่สามารถทำการทดสอบได้และคนอื่นไม่สามารถทำได้ การทดสอบใด ๆ เลย
สิ่งที่ไม่ทำงานจะมีการทดสอบการตรวจสอบเช่นเดียวกับปก หากนักพัฒนาซอฟต์แวร์ได้เขียนการทดสอบสิบข้อแล้วผู้ตรวจสอบสามารถช่วยแนะนำอีกสิบข้อได้มากกว่าผู้พัฒนาที่ไม่ได้เขียน
และถ้าการทดสอบมุมกรณีเป็นงานสำคัญมันอาจสมเหตุสมผลที่จะเผยแพร่สิ่งนั้นให้ทั่วทั้งทีมมากขึ้น ** เมื่อรหัสสามารถทดสอบได้ในตอนแรกการเขียนการทดสอบเพิ่มเติมจะกลายเป็นเรื่องง่ายมากขึ้น **
รีวิวเป็นเวลาที่ดีที่จะจุดกรณีมุม และหากผู้ตรวจสอบสามารถกระโดดเข้ามาและเขียนบททดสอบสำหรับกรณีมุมที่เธอพบแล้วเฮ้ - ดีกว่า! แต่โดยทั่วไปแล้วสมมติว่าผู้ตรวจทานสามารถเขียนแบบทดสอบที่ผู้พัฒนาไม่ได้ฟังดูเหมือนเป็นความคิดที่แย่มาก