อ้างมีประโยชน์สำหรับการบอกคุณเกี่ยวกับรัฐภายในของโปรแกรม ยกตัวอย่างเช่นว่าโครงสร้างข้อมูลของคุณมีสถานะที่ถูกต้องเช่นว่าโครงสร้างข้อมูลจะไม่ถือค่าของTime
25:61:61
เงื่อนไขการตรวจสอบโดยยืนยันคือ:
เงื่อนไขเบื้องต้นซึ่งรับประกันได้ว่าผู้โทรจะต้องรักษาสัญญาไว้
Postconditions ซึ่งรับประกันว่าผู้รักษาความปลอดภัยจะต้องรักษาสัญญาและ
ค่าคงที่ซึ่งรับรองว่าโครงสร้างข้อมูลจะเก็บคุณสมบัติบางอย่างเสมอหลังจากที่ฟังก์ชันส่งคืน ค่าคงที่คือเงื่อนไขที่เป็นเงื่อนไขก่อนกำหนดและมีเงื่อนไขภายหลัง
การทดสอบหน่วยมีประโยชน์สำหรับการบอกคุณเกี่ยวกับพฤติกรรมภายนอกของโมดูล คุณStack
อาจมีสถานะที่สอดคล้องกันหลังจากpush()
เรียกใช้เมธอด แต่ถ้าขนาดของสแต็กไม่เพิ่มขึ้นสามเท่าหลังจากเรียกว่าสามครั้งนั่นเป็นข้อผิดพลาด (ตัวอย่างเช่นกรณีเล็ก ๆ น้อย ๆ ที่การpush()
ใช้งานที่ไม่ถูกต้องจะตรวจสอบเฉพาะการยืนยันและออกเท่านั้น)
พูดอย่างเคร่งครัดความแตกต่างที่สำคัญระหว่างการทดสอบและการทดสอบหน่วยคือการทดสอบหน่วยมีข้อมูลการทดสอบ (ค่าเพื่อให้โปรแกรมทำงาน) ในขณะที่การทดสอบไม่ได้ นั่นคือคุณสามารถดำเนินการทดสอบหน่วยของคุณโดยอัตโนมัติในขณะที่คุณไม่สามารถพูดเหมือนกันสำหรับการยืนยัน เพื่อประโยชน์ของการสนทนานี้ฉันได้สมมติว่าคุณกำลังพูดถึงการดำเนินการโปรแกรมในบริบทของการทดสอบฟังก์ชั่นการสั่งซื้อที่สูงขึ้น (ซึ่งรันโปรแกรมทั้งหมดและไม่ขับโมดูลเช่นการทดสอบหน่วย) หากคุณไม่ได้พูดถึงการทดสอบฟังก์ชั่นอัตโนมัติเป็นเครื่องมือในการ "ดูปัจจัยการผลิตจริง" ให้ชัดเจนว่าค่านั้นอยู่ในระบบอัตโนมัติและดังนั้นการทดสอบหน่วยจะชนะ หากคุณกำลังพูดถึงเรื่องนี้ในบริบทของการทดสอบฟังก์ชั่น (อัตโนมัติ) ให้ดูด้านล่าง
อาจมีการทับซ้อนกันบ้างในสิ่งที่กำลังทดสอบ ตัวอย่างเช่นStack
postcondition ของจริงอาจยืนยันว่าขนาดสแต็คเพิ่มขึ้นหนึ่ง แต่มีข้อ จำกัด ในสิ่งที่สามารถทำได้ในการยืนยันนั้น: มันควรตรวจสอบว่าองค์ประกอบด้านบนเป็นสิ่งที่เพิ่งเพิ่ม?
สำหรับทั้งสองเป้าหมายคือการเพิ่มคุณภาพ สำหรับการทดสอบหน่วยเป้าหมายคือการหาจุดบกพร่อง สำหรับการยืนยันเป้าหมายคือการทำให้การดีบักง่ายขึ้นโดยการสังเกตสถานะโปรแกรมที่ไม่ถูกต้องทันทีที่เกิดขึ้น
โปรดทราบว่าเทคนิคไม่ได้ตรวจสอบความถูกต้อง ในความเป็นจริงหากคุณทำการทดสอบหน่วยโดยมีเป้าหมายเพื่อตรวจสอบว่าโปรแกรมนั้นถูกต้องคุณน่าจะได้รับการทดสอบที่ไม่น่าสนใจซึ่งคุณรู้ว่าจะใช้งานได้ มันเป็นผลทางจิตวิทยา: คุณจะทำทุกอย่างเพื่อให้บรรลุเป้าหมาย หากเป้าหมายของคุณคือการค้นหาข้อบกพร่องกิจกรรมของคุณจะสะท้อนให้เห็นว่า
ทั้งสองมีความสำคัญและมีจุดประสงค์ของตัวเอง
[ในฐานะที่เป็นโน้ตสุดท้ายเกี่ยวกับการยืนยัน: เพื่อให้ได้ค่ามากที่สุดคุณจะต้องใช้มันในทุกจุดวิกฤติในโปรแกรมของคุณและไม่ใช่ฟังก์ชั่นหลักบางอย่าง มิฉะนั้นแหล่งที่มาดั้งเดิมของปัญหาอาจถูกปิดบังและตรวจจับได้ยากโดยไม่มีการดีบักนานหลายชั่วโมง]
:-)