คุณไม่ได้พูดถึงเครื่องมือทดสอบของคุณ หลายคนมีฟังก์ชั่น "รวม" ที่ให้คุณรวมผลลัพธ์ของการวิ่งหรือชุดหลายชุด หากคุณต้องการตัวชี้วัดความครอบคลุมโดยรวมให้สำรวจคุณลักษณะการรวมในเครื่องมือความครอบคลุมของคุณ
ทีนี้เราคุยเรื่องช้างในห้องได้ไหม?
ไม่มีช้อน. และไม่มี "เปอร์เซ็นต์ความครอบคลุมทั้งหมด" อย่างน้อยก็ไม่มีใครเรียบง่าย
เปอร์เซ็นต์ความครอบคลุมเป็นตัวชี้วัดที่เข้าใจง่ายซึ่งนำเสนอเพื่อช่วยให้เข้าใจขอบเขตความลึกและช่วงของชุดการทดสอบ แต่เช่นเดียวกับมาตรฐานง่ายๆมันง่ายมากที่จะกลายเป็นเป้าหมายที่จับจ้องอยู่ที่ค่านี้เพราะเครื่องรางของขลังบางประเภทของ "การทดสอบที่สมบูรณ์"
สมมติว่าคุณประสบความสำเร็จใน "การทดสอบที่ครอบคลุม 100%" เย้! แต่นั่นหมายความว่าอย่างไร มีการทดสอบโค้ดบรรทัด 100% ใช่ไหม ถ้าอย่างนั้นเส้นนี้ล่ะ
launch_missile = launch_authorized and launch_cmd_given else previous_launch_status
"การปกปิด" บรรทัดนั้นหมายถึงบางสิ่ง - แต่ไม่มากนักเพราะมีเงื่อนไขที่หลากหลายTrue
หรือFalse
มีความเป็นไปได้บางอย่าง แต่ไม่น่าเป็นไปได้ที่คุณจะทดสอบการรวมกันของเงื่อนไขเหล่านั้นทั้งหมด แม้ว่าบรรทัดนั้นจะครอบคลุมหลายสิบครั้ง แต่หากเงื่อนไขข้อใดข้อหนึ่งค่อนข้างผิดปกติคุณไม่ได้เข้าใกล้เพื่อทดสอบผลลัพธ์จริงทั้งหมดที่อาจเกิดขึ้นในทางปฏิบัติ เพื่อให้ชัดเจนยิ่งขึ้นนั้นเป็นตัวอย่างที่มีการสังเคราะห์มากขึ้น:
engage_laser = (laser_armed and safety_disengaged) or random.random() < 0.0000003
คุณจะต้องครอบคลุมหลายครั้งเพื่อทดสอบจริง ๆ มีกี่ครั้งที่คุณต้องครอบคลุมมันเพื่อทดสอบร่วมกับตัวแปรอื่น ๆ ทั้งหมดในโปรแกรม (ด้วยความน่าจะเป็นของพวกเขาเองที่หายากในทำนองเดียวกัน)?
ฉันไม่ได้บอกว่าการวัดความครอบคลุมนั้นไร้ประโยชน์ พวกเขายอดเยี่ยมจริงๆ พวกเขามุ่งเน้นประเด็นสำคัญประเด็นหนึ่ง: ระบบซอฟต์แวร์ของฉันผ่านการทดสอบอย่างกว้างขวางอย่างไร พวกเขาช่วยเปลี่ยนจาก "เรามีการทดสอบบางอย่าง" เป็น "เราได้ทำการทดสอบอย่างละเอียด"
แต่ในขณะที่คุณกำลังทำงานบน "คะแนนรวมที่" ความเป็นจริงว่าคะแนนของคุณโดยทั่วไปจะเป็น"คำสั่งคุ้มครอง" มากกว่า "เงื่อนไข", "กริยา" หรือ "เส้นทาง" ครอบคลุม ดังนั้นไม่ว่าคะแนนรวมคะแนนของคุณจะให้อะไรคุณก็ไม่น่าที่จะให้ภาพที่แท้จริงว่ามีสถานะทดสอบและสถานะผสมของโปรแกรมของคุณเท่าใด ในขณะที่คุณกำลังพยายามเพิ่มเปอร์เซ็นต์ความครอบคลุมของคุณให้พิจารณาการวัดความครอบคลุมภาคแสดงของคุณด้วย มันจะทำให้คุณมีความสมจริงยิ่งขึ้น - และเกือบจะคงเส้นคงวายิ่งกว่านั้นคือมุมมองของการทดสอบที่กว้างขวางยิ่งขึ้น