เราเขียนการทดสอบเพื่อตรวจสอบความถูกต้องของพฤติกรรมของโปรแกรม
การตรวจสอบความถูกต้องของพฤติกรรมของโปรแกรมโดยการตรวจสอบเนื้อหาของคำสั่งเอาต์พุตโดยใช้สายตาของคุณเป็นคู่มือหรือโดยเฉพาะอย่างยิ่งภาพกระบวนการ
คุณสามารถโต้แย้งได้
งานตรวจสอบภาพได้ฉันตรวจสอบว่าโค้ดทำในสิ่งที่ควรทำสำหรับสถานการณ์เหล่านี้และเมื่อฉันเห็นว่าถูกต้องเราก็พร้อมที่จะไป
ก่อนอื่นขอแนะนำให้คุณสนใจว่ารหัสทำงานถูกต้องหรือไม่ นั่นเป็นสิ่งที่ดี คุณมาก่อนโค้ง! น่าเศร้าที่มีปัญหานี้เป็นแนวทาง
ปัญหาแรกในการตรวจสอบภาพคือคุณประสบอุบัติเหตุจากการเชื่อมที่ไม่ดีเนื่องจากไม่สามารถตรวจสอบความถูกต้องของรหัสได้อีกเลย
ปัญหาที่สองคือดวงตาคู่ที่ใช้อยู่คู่กับมันสมองของเจ้าของดวงตาอย่างแน่นหนา หากผู้เขียนรหัสเป็นเจ้าของดวงตาที่ใช้ในกระบวนการตรวจสอบด้วยภาพกระบวนการตรวจสอบความถูกต้องจะขึ้นอยู่กับความรู้เกี่ยวกับโปรแกรมที่อยู่ภายในสมองของผู้ตรวจสอบภาพ
เป็นเรื่องยากสำหรับตาคู่ใหม่ที่จะเข้ามาและตรวจสอบความถูกต้องของรหัสเพียงเพราะพวกเขาไม่ได้ร่วมมือกับสมองของผู้เขียนโค้ดดั้งเดิม เจ้าของดวงตาคู่ที่สองจะต้องสนทนากับผู้เขียนโค้ดต้นฉบับเพื่อที่จะเข้าใจรหัสที่เป็นปัญหาอย่างเต็มที่ การสนทนาเป็นวิธีการแบ่งปันความรู้เป็นเรื่องที่ไม่น่าเชื่อถือ จุดที่สงสัยหาก Original Coder ไม่พร้อมใช้งานกับดวงตาคู่ใหม่ ในกรณีนั้นดวงตาคู่ใหม่จะต้องอ่านรหัสเดิม
การอ่านรหัสของผู้อื่นที่ไม่ครอบคลุมในการทดสอบหน่วยนั้นยากกว่าการอ่านรหัสที่มีการทดสอบหน่วยที่เกี่ยวข้อง การอ่านรหัสของคนอื่นให้ดีที่สุดนั้นเป็นงานที่ยุ่งยากที่เลวร้ายที่สุดนี่เป็นงานที่ยุ่งยากที่สุดในวิศวกรรมซอฟต์แวร์ มีเหตุผลที่นายจ้างเมื่อโฆษณาตำแหน่งงานว่างเน้นว่าโครงการเป็นกรีนฟิลด์ (หรือใหม่เอี่ยม) การเขียนโค้ดตั้งแต่เริ่มต้นทำได้ง่ายกว่าการแก้ไขโค้ดที่มีอยู่และด้วยเหตุนี้จึงทำให้งานที่โฆษณาดูน่าสนใจยิ่งขึ้นสำหรับพนักงานที่มีศักยภาพ
ด้วยการทดสอบหน่วยเราแบ่งโค้ดออกเป็นส่วนส่วนประกอบ สำหรับแต่ละองค์ประกอบแล้วเราก็กำหนดไว้คอกของเราระบุวิธีการที่โปรแกรมควรประพฤติ การทดสอบแต่ละหน่วยจะบอกเล่าเรื่องราวว่าส่วนนั้นของโปรแกรมควรทำหน้าที่อย่างไรในสถานการณ์เฉพาะ การทดสอบแต่ละหน่วยเป็นเหมือนประโยคในสัญญาที่อธิบายถึงสิ่งที่ควรเกิดขึ้นจากมุมมองของรหัสลูกค้า
นั่นหมายความว่าดวงตาคู่ใหม่มีสองเส้นที่ถ่ายทอดสดและเอกสารที่ถูกต้องเกี่ยวกับรหัสที่เป็นปัญหา
ก่อนที่พวกเขามีรหัสของตัวเองดำเนินการวิธีการรหัสที่ได้กระทำ ; ประการที่สองพวกเขามีความรู้ทั้งหมดที่ผู้เขียนโค้ดดั้งเดิมอธิบายไว้ในชุดของข้อความที่เป็นทางการซึ่งบอกเล่าเรื่องราวว่าโค้ดนี้ควรจะทำงานอย่างไร
การทดสอบหน่วยจะจับภาพและอธิบายอย่างเป็นทางการเกี่ยวกับความรู้ที่ผู้เขียนต้นฉบับมีอยู่เมื่อพวกเขาใช้ชั้นเรียน พวกเขาให้คำอธิบายว่าคลาสนั้นทำงานอย่างไรเมื่อใช้โดยไคลเอนต์
คุณถูกต้องที่จะตั้งคำถามถึงประโยชน์ของการทำเช่นนี้เนื่องจากเป็นไปได้ที่จะเขียนการทดสอบหน่วยที่ไม่มีประโยชน์ไม่ครอบคลุมโค้ดทั้งหมดที่เป็นปัญหาค้างหรือล้าสมัยเป็นต้น เราจะแน่ใจได้อย่างไรว่าการทดสอบหน่วยไม่เพียง แต่เลียนแบบ แต่ยังปรับปรุงกระบวนการของผู้เขียนที่มีความรู้และมีวิจารณญาณในการตรวจสอบคำสั่งเอาต์พุตของโค้ดที่รันไทม์ เขียนการทดสอบหน่วยก่อนจากนั้นเขียนรหัสเพื่อให้ผ่านการทดสอบ เมื่อคุณทำเสร็จแล้วปล่อยให้คอมพิวเตอร์ทำการทดสอบพวกเขาทำได้อย่างรวดเร็วพวกเขาทำได้ดีมากในการทำงานซ้ำ ๆ ซึ่งเหมาะกับงานนั้น ๆ
ตรวจสอบคุณภาพการทดสอบโดยตรวจสอบทุกครั้งที่คุณแตะรหัสที่ทดสอบและเรียกใช้การทดสอบสำหรับแต่ละรุ่น หากการทดสอบล้มเหลวให้แก้ไขทันที
เราดำเนินขั้นตอนการเรียกใช้การทดสอบโดยอัตโนมัติเพื่อให้มีการรันทุกครั้งที่เราสร้างโครงการ นอกจากนี้เรายังจัดทำรายงานการครอบคลุมโค้ดโดยอัตโนมัติซึ่งจะให้รายละเอียดว่าโค้ดครอบคลุมและใช้การทดสอบกี่เปอร์เซ็นต์ เรามุ่งมั่นเพื่อเปอร์เซ็นต์ที่สูง บาง บริษัท จะป้องกันไม่ให้ตรวจสอบการเปลี่ยนแปลงโค้ดในการควบคุมซอร์สโค้ดหากพวกเขาไม่มีการทดสอบหน่วยที่เพียงพอที่เขียนขึ้นเพื่ออธิบายการเปลี่ยนแปลงพฤติกรรมของโค้ด โดยปกติแล้วดวงตาคู่ที่สองจะตรวจสอบการเปลี่ยนแปลงโค้ดร่วมกับผู้เขียนการเปลี่ยนแปลง ผู้ตรวจสอบจะดำเนินการเปลี่ยนแปลงเพื่อให้แน่ใจว่าการเปลี่ยนแปลงนั้นเข้าใจได้และครอบคลุมเพียงพอโดยการทดสอบ ดังนั้นกระบวนการตรวจสอบจึงเป็นแบบแมนนวล แต่เมื่อการทดสอบ (การทดสอบหน่วยและการรวมและการทดสอบการยอมรับของผู้ใช้) ผ่านกระบวนการตรวจสอบด้วยตนเองนี้จะกลายเป็นส่วนหนึ่งของกระบวนการสร้างอัตโนมัติ สิ่งเหล่านี้จะทำงานทุกครั้งที่มีการเช็คอินการเปลี่ยนแปลง Aบูรณาการอย่างต่อเนื่อง เซิร์ฟเวอร์ดำเนินงานนี้โดยเป็นส่วนหนึ่งของกระบวนการสร้าง
การทดสอบที่มีการทำงานโดยอัตโนมัติรักษาความสมบูรณ์ของพฤติกรรมของรหัสและช่วยในการป้องกันการเปลี่ยนแปลงในอนาคตที่จะฐานรหัสจากการทำลายรหัส
ในที่สุดการจัดเตรียมการทดสอบจะช่วยให้คุณสามารถแยกตัวประกอบโค้ดซ้ำได้อย่างจริงจังเนื่องจากคุณสามารถทำการปรับปรุงโค้ดครั้งใหญ่ได้อย่างปลอดภัยโดยทราบว่าการเปลี่ยนแปลงของคุณไม่ทำลายการทดสอบที่มีอยู่
มีข้อแม้ในการทดสอบการพัฒนาแบบขับเคลื่อนและนั่นคือคุณต้องเขียนโค้ดด้วยตาเพื่อให้สามารถทดสอบได้ สิ่งนี้เกี่ยวข้องกับการเข้ารหัสอินเทอร์เฟซและการใช้เทคนิคต่างๆเช่น Dependency Injection เพื่อสร้างอินสแตนซ์อ็อบเจ็กต์ที่ทำงานร่วมกัน ตรวจสอบผลงานของKent Beckที่อธิบาย TDD ได้เป็นอย่างดี ค้นหาการเข้ารหัสอินเทอร์เฟซและศึกษารูปแบบการออกแบบ