การออกแบบโดยContract®คืออะไร?

Design by Contract®เป็นวิธีที่ใช้ในการพัฒนาซอฟต์แวร์ที่ต้องอาศัยการกำหนดค่าพารามิเตอร์หรือสัญญาสำหรับส่วนต่าง ๆ ของโปรแกรม แม้ว่า Design by Contract®สามารถดูได้ว่าเป็นรูปแบบการพัฒนาแนวความคิดที่นำไปใช้ผ่านเอกสารหรือการสร้างแบบจำลอง แต่ก็มีการใช้กันอย่างแพร่หลายมากขึ้นในการอ้างถึงกลไกดั้งเดิมหรือบุคคลที่สามภายในภาษาการเขียนโปรแกรมบางอย่าง โปรแกรม. เป้าหมายในการใช้ Design by Contract®คือโปรแกรมจะได้รับการพัฒนาและในที่สุดก็เขียนโปรแกรมในรูปแบบที่สมบูรณ์มากขึ้นซึ่งจะขจัดข้อผิดพลาดเล็กน้อยมากขึ้นในขณะที่การบังคับใช้สัญญาโดยภาษาที่สนับสนุนทำให้เกิดข้อผิดพลาดที่เหลือ โปรแกรมที่ใช้สัญญาสำหรับฟังก์ชั่นและคลาสสามารถมีการออกแบบแบบแยกส่วนได้มากขึ้นซึ่งแต่ละคลาสสามารถนำกลับมาใช้ใหม่ได้อย่างง่ายดายในโปรแกรมอื่น ๆ เนื่องจากคำจำกัดความที่ชัดเจนของสัญญาของพวกเขา

พื้นฐานสำหรับปรัชญาการเขียนโปรแกรม Design by Contract®คือแนวคิดของสัญญาธุรกิจจริง ในโมเดลนี้แต่ละเมธอดและคลาสในโปรแกรมเชิงวัตถุจะกำหนดสัญญาโดยวิธีการหรือวัตถุอื่นใดที่โต้ตอบกับมันจะต้องปฏิบัติตาม แต่ละชั้นเรียนยังสามารถมีสัญญาที่เรียกว่าระดับคงที่ที่จะต้องปฏิบัติตามภายในเพื่อให้แน่ใจว่าสัญญานอกไม่ประนีประนอมความสามารถในการทำงาน

สัญญาทั้งสองส่วนที่สำคัญที่สุดระหว่างการออกแบบและการเข้ารหัสคือเงื่อนไขเบื้องต้นและเงื่อนไขภายหลัง ทั้งสองส่วนของโมเดล Design by Contract®จะกำหนดสถานะของโปรแกรมก่อนที่จะเรียกเมธอดและสถานะของโปรแกรมหลังจากที่เมธอดดำเนินการเสร็จสิ้น ส่วนอื่น ๆ ของสัญญาอาจแตกต่างกันไปตามการใช้งาน แต่อาจรวมถึงการอ้างอิงโยงไปยังโมดูลอื่น ๆ เงื่อนไขการซิงโครไนซ์และข้อกำหนดการสั่งซื้อของการดำเนินการ

โดยการพัฒนาสัญญาสำหรับแต่ละชั้นเรียนและวิธีการการโต้ตอบของส่วนต่าง ๆ ของโปรแกรมสามารถแมปและทำนายได้อย่างง่ายดาย การบังคับใช้สัญญาไม่ว่าจะโดยการใช้การยืนยันหรือกลไกอื่น ๆ ยังรับประกันว่าโปรแกรมจะไม่พยายามดำเนินการหากมีการละเมิดสัญญาเนื่องจากผลลัพธ์ที่ผลิตในรัฐนั้นจะไม่ถูกต้องในทางเทคนิค เมื่อใช้งานเป็นคุณสมบัติภาษาพื้นเมือง Design by Contract®สามารถช่วยให้มั่นใจได้ว่าผลิตภัณฑ์ขั้นสุดท้ายจะทำงานตามที่คาดไว้โดยมีโอกาสเล็กน้อยสำหรับข้อผิดพลาดที่ไม่คาดคิด

ภาวะแทรกซ้อนบางอย่างที่มาพร้อมกับการใช้ปรัชญาการออกแบบโดยContract®รวมถึงเวลาในการออกแบบที่ยาวนานขึ้นและการพัฒนาระบบที่ละเอียดยิ่งขึ้นก่อนที่จะเริ่มการเข้ารหัสซึ่งบางครั้งอาจเป็นเรื่องยากสำหรับโครงการขนาดใหญ่ ยิ่งไปกว่านั้นกลไกการตรวจสอบความถูกต้องตามสัญญาที่ใช้ในภาษาการเขียนโปรแกรมที่สนับสนุนสัญญาสามารถชะลอการทำงานของโปรแกรมได้ ความเข้าใจที่ไม่ดีของวิธีการออกแบบโดยContract®สามารถนำไปสู่โปรแกรมที่ใช้สัญญาเพื่อดำเนินการตรวจสอบข้อผิดพลาดพื้นฐานซึ่งอาจนำไปสู่แอปพลิเคชันที่มีแนวโน้มที่จะเกิดปัญหาอย่างกะทันหันหลังจากปล่อย