การทดสอบหน่วยมีบางสิ่งที่ลึกลับเกี่ยวกับมันในทุกวันนี้ ผู้คนปฏิบัติต่อมันราวกับว่าการทดสอบครอบคลุม 100% นั้นเป็นจอกศักดิ์สิทธิ์และราวกับว่าการทดสอบหน่วยเป็นหนทางหนึ่งที่แท้จริงในการพัฒนาซอฟต์แวร์
พวกเขากำลังพลาดจุด
การทดสอบหน่วยไม่ใช่คำตอบ การทดสอบคือ
ตอนนี้เมื่อใดก็ตามที่การสนทนานี้เกิดขึ้นใครบางคน (มักเป็นฉัน) จะพูดคำพูดของ Dijkstra ว่า: "การทดสอบโปรแกรมสามารถแสดงให้เห็นถึงการปรากฏตัวของข้อบกพร่อง Dijkstra นั้นถูกต้อง: การทดสอบไม่เพียงพอที่จะพิสูจน์ว่าซอฟต์แวร์ทำงานตามที่ตั้งใจไว้ แต่มีความจำเป็น : ในบางระดับจะต้องมีความเป็นไปได้ที่จะแสดงให้เห็นว่าซอฟต์แวร์กำลังทำสิ่งที่คุณต้องการ
หลายคนทดสอบด้วยมือ แม้กระทั่งผู้ที่ชื่นชอบอย่างแข็งขัน TDD จะทำการทดสอบด้วยตนเองถึงแม้ว่าบางครั้งพวกเขาจะไม่ยอมรับมัน ไม่สามารถช่วยได้: ก่อนที่คุณจะเข้าไปในห้องประชุมเพื่อสาธิตซอฟต์แวร์ของคุณให้กับลูกค้า / หัวหน้า / นักลงทุน / อื่น ๆ คุณจะต้องดำเนินการด้วยมือเพื่อให้แน่ใจว่ามันจะทำงานได้ ไม่มีอะไรผิดปกติและในความเป็นจริงมันคงจะบ้าถ้าคุณคาดหวังว่าทุกอย่างเป็นไปอย่างราบรื่นโดยไม่ต้องผ่านการทดสอบด้วยตนเอง - นั่นคือการทดสอบแม้ว่าคุณจะมีการทดสอบครอบคลุม 100% และความมั่นใจสูงสุดในการทดสอบของคุณ .
แต่การทดสอบด้วยตนเองแม้ว่ามันจะเป็นสิ่งที่จำเป็นสำหรับซอฟต์แวร์อาคารจะไม่ค่อยเพียงพอ ทำไม? เพราะการทดสอบด้วยตนเองนั้นน่าเบื่อและใช้เวลานานและดำเนินการโดยมนุษย์ และมนุษย์ก็มีชื่อเสียงที่ไม่ดีในการทำงานที่น่าเบื่อและใช้เวลานาน: พวกเขาหลีกเลี่ยงการทำเมื่อใดก็ตามที่เป็นไปได้และพวกเขามักจะทำไม่ดีเมื่อพวกเขาถูกบังคับ
เครื่องใช้บนมืออื่น ๆ ที่เป็นที่ยอดเยี่ยมในการปฏิบัติงานที่น่าเบื่อและใช้เวลานาน นั่นคือสิ่งที่คอมพิวเตอร์คิดค้นขึ้นมา
ดังนั้นการทดสอบจึงมีความสำคัญและการทดสอบอัตโนมัติเป็นวิธีเดียวที่สมเหตุสมผลเพื่อให้แน่ใจว่าการทดสอบของคุณจะได้รับการว่าจ้างอย่างสม่ำเสมอ และเป็นสิ่งสำคัญในการทดสอบและทดสอบซ้ำตามที่ซอฟต์แวร์ได้รับการพัฒนา คำตอบที่นี่อีกตั้งข้อสังเกตถึงความสำคัญของการทดสอบการถดถอย เนื่องจากความซับซ้อนของระบบซอฟต์แวร์การเปลี่ยนแปลงส่วนที่ดูเหมือนไร้เดียงสาบ่อยครั้งในส่วนหนึ่งของระบบทำให้เกิดการเปลี่ยนแปลงที่ไม่ตั้งใจ (เช่นข้อบกพร่อง) ในส่วนอื่น ๆ ของระบบ คุณไม่สามารถค้นพบการเปลี่ยนแปลงเหล่านี้โดยไม่ได้ตั้งใจหากไม่ได้ทำการทดสอบ และหากคุณต้องการมีข้อมูลที่เชื่อถือได้เกี่ยวกับการทดสอบของคุณคุณต้องทำการทดสอบอย่างเป็นระบบซึ่งหมายความว่าคุณต้องมีระบบทดสอบอัตโนมัติบางประเภท
สิ่งทั้งหมดนี้เกี่ยวกับการทดสอบหน่วย? การทดสอบหน่วยนั้นดำเนินการโดยเครื่องไม่ใช่โดยมนุษย์ ดังนั้นหลายคนที่อยู่ภายใต้การแสดงผลผิดว่าการทดสอบอัตโนมัติเท่ากับหน่วยทดสอบ แต่นั่นไม่เป็นความจริง: การทดสอบหน่วยเป็นเพียงการทดสอบอัตโนมัติขนาดเล็กพิเศษ
ทีนี้มูลค่าของการทดสอบอัตโนมัติขนาดเล็กพิเศษคืออะไร? ข้อดีคือพวกเขาทดสอบส่วนประกอบของระบบซอฟแวร์ในการแยกซึ่งจะช่วยให้แม่นยำมากขึ้นการกำหนดเป้าหมายของการทดสอบและช่วยในการแก้จุดบกพร่อง แต่การทดสอบหน่วยไม่ได้หมายความว่าการทดสอบคุณภาพสูงขึ้นอย่างแท้จริง มันมักจะนำไปสู่การทดสอบที่มีคุณภาพสูงขึ้นเนื่องจากมันครอบคลุมซอฟต์แวร์ในระดับรายละเอียดปลีกย่อย แต่มันเป็นไปได้ที่จะทดสอบพฤติกรรมของระบบที่สมบูรณ์แบบเท่านั้นไม่ใช่ส่วนประกอบและยังคงทดสอบอย่างละเอียด
แต่ถึงแม้จะครอบคลุมการทดสอบหน่วย 100% ระบบยังอาจไม่ได้รับการทดสอบอย่างละเอียด เนื่องจากแต่ละส่วนประกอบอาจทำงานแยกกันได้อย่างสมบูรณ์ แต่ก็ยังล้มเหลวเมื่อใช้ร่วมกัน ดังนั้นการทดสอบหน่วยในขณะที่มีประโยชน์สูงไม่เพียงพอที่จะตรวจสอบให้แน่ใจว่าซอฟต์แวร์ทำงานตามที่คาดไว้ แท้จริงแล้วนักพัฒนาหลายคนเสริมการทดสอบหน่วยด้วยการทดสอบการรวมอัตโนมัติการทดสอบการทำงานโดยอัตโนมัติและการทดสอบด้วยตนเอง
หากคุณไม่เห็นคุณค่าในการทดสอบหน่วยบางทีวิธีที่ดีที่สุดในการเริ่มต้นคือการใช้การทดสอบอัตโนมัติชนิดอื่น ในสภาพแวดล้อมทางเว็บการใช้เครื่องมือทดสอบเบราว์เซอร์อัตโนมัติเช่นSeleniumมักจะให้รางวัลใหญ่สำหรับการลงทุนที่ค่อนข้างเล็ก เมื่อคุณจุ่มนิ้วเท้าลงน้ำคุณจะสามารถเห็นการทดสอบอัตโนมัติที่มีประโยชน์มากขึ้น และเมื่อคุณมีการทดสอบอัตโนมัติการทดสอบหน่วยทำให้รู้สึกได้มากขึ้นเนื่องจากมันให้การตอบสนองที่เร็วกว่าการทดสอบแบบรวมหรือแบบ end-to-end ขนาดใหญ่เนื่องจากคุณสามารถกำหนดเป้าหมายการทดสอบที่ส่วนประกอบที่คุณกำลังทำงานอยู่
TL; DR: ไม่ต้องกังวลกับการทดสอบหน่วยในตอนนี้ เพียงแค่กังวลเกี่ยวกับการทดสอบซอฟต์แวร์ของคุณก่อน