คำตอบของ DW นั้นยอดเยี่ยมแต่ฉันต้องการขยายในจุดหนึ่ง สเปคไม่ได้เป็นเพียงการอ้างอิงกับรหัสที่ได้รับการตรวจสอบ หนึ่งในเหตุผลที่มีคุณสมบัติเป็นทางการคือการตรวจสอบโดยการพิสูจน์คุณสมบัติพื้นฐานบางอย่าง แน่นอนว่าข้อมูลจำเพาะไม่สามารถตรวจสอบได้อย่างสมบูรณ์ - การตรวจสอบจะมีความซับซ้อนเท่ากับข้อกำหนดของตัวเองดังนั้นจึงเป็นกระบวนการที่ไม่มีที่สิ้นสุด แต่การตรวจสอบช่วยให้เราได้รับการรับประกันที่แข็งแกร่งขึ้นในคุณสมบัติที่สำคัญบางอย่าง
ตัวอย่างเช่นสมมติว่าคุณกำลังออกแบบนักบินรถยนต์ นี่เป็นสิ่งที่ค่อนข้างซับซ้อนซึ่งเกี่ยวข้องกับพารามิเตอร์จำนวนมาก คุณสมบัติความถูกต้องของหม้อแปลงไฟฟ้ารวมถึงสิ่งต่าง ๆ เช่น "รถจะไม่ชนกับกำแพง" และ "รถจะขับไปตามที่มันบอกให้ไป" คุณสมบัติเช่น“ รถยนต์จะไม่ชนกับกำแพง” เป็นสิ่งสำคัญจริง ๆ ดังนั้นเราจึงต้องการพิสูจน์ว่า เนื่องจากระบบทำงานในโลกทางกายภาพคุณจะต้องเพิ่มข้อ จำกัด ทางกายภาพบางอย่าง คุณสมบัติที่แท้จริงของระบบการคำนวณจะเป็นเช่น“ ภายใต้สมมติฐานเหล่านี้เกี่ยวกับวิทยาศาสตร์วัสดุและสมมติฐานเหล่านี้เกี่ยวกับการรับรู้ถึงสิ่งกีดขวางโดยเซ็นเซอร์ของรถยนต์รถจะไม่ชนกับผนัง” แต่ถึงกระนั้นผลลัพธ์ก็เป็นคุณสมบัติที่ค่อนข้างง่ายซึ่งเป็นที่ต้องการอย่างชัดเจน
คุณสามารถพิสูจน์คุณสมบัตินี้จากรหัสได้หรือไม่? ท้ายที่สุดนั่นคือสิ่งที่เกิดขึ้นถ้าคุณทำตามแนวทางที่เป็นทางการทั้งหมด แต่รหัสมีส่วนต่าง ๆ มากมาย; เบรค, กล้อง, เครื่องยนต์ ฯลฯ ล้วนควบคุมด้วยตนเอง คุณสมบัติความถูกต้องของเบรกจะเป็นอย่างเช่น“ ถ้าสัญญาณ 'ใช้เบรก' เปิดอยู่จะมีการใช้เบรก” คุณสมบัติความถูกต้องของเครื่องยนต์คือ“ หากสัญญาณคลัตช์ปิดอยู่เครื่องยนต์จะไม่ขับล้อ” ต้องใช้มุมมองระดับสูงมากในการรวมเข้าด้วยกัน ข้อมูลจำเพาะจะสร้างเลเยอร์กลางที่ส่วนประกอบต่าง ๆ ของระบบสามารถเชื่อมต่อเข้าด้วยกัน
อันที่จริงแล้วระบบที่ซับซ้อนเช่นเดียวกับหม้อแปลงไฟฟ้ารถยนต์จะมีคุณสมบัติหลายระดับด้วยการปรับแต่งที่หลากหลาย มักจะใช้วิธีการปรับแต่งในการออกแบบ: เริ่มต้นด้วยคุณสมบัติระดับสูงเช่น "รถจะไม่ชนกับผนัง" จากนั้นคิดว่าต้องใช้เซ็นเซอร์และเบรกและทำงานตามข้อกำหนดพื้นฐานสำหรับเซ็นเซอร์เบรก และซอฟต์แวร์นำร่องจากนั้นปรับแต่งข้อกำหนดพื้นฐานเหล่านั้นอีกครั้งในการออกแบบองค์ประกอบ (สำหรับเซ็นเซอร์ฉันจะต้องใช้เรดาร์, DSP, ห้องสมุดประมวลผลภาพ, ... ) ฯลฯ ในกระบวนการพัฒนาที่เป็นทางการ แต่ละระดับของข้อมูลจำเพาะได้รับการพิสูจน์แล้วว่าเป็นไปตามข้อกำหนดที่กำหนดโดยระดับที่สูงกว่ามันตลอดจนคุณสมบัติจากระดับสูงสุดจนถึงรหัส
เป็นไปไม่ได้ที่จะตรวจสอบให้แน่ใจว่าข้อกำหนดถูกต้อง ตัวอย่างเช่นหากคุณทำผิดฟิสิกส์เบรกอาจไม่มีประสิทธิภาพแม้ว่าคณิตศาสตร์ที่เกี่ยวข้องกับรหัสเบรกกับความต้องการอย่างเป็นทางการนั้นถูกต้อง ไม่ดีที่จะพิสูจน์ว่าตัวแบ่งมีผลกับโหลด 500 กิโลกรัมถ้าคุณมีน้ำหนักจริง 5000 กิโลกรัม แต่มันง่ายกว่าที่จะเห็นว่า 500 กก. นั้นผิดไปกว่าที่จะเห็นภายในรหัสเบรกว่ามันจะไม่ดีพอสำหรับพารามิเตอร์ทางกายภาพของรถ
¹ ตรงกันข้ามกับแนวทางที่เป็นทางการคือ“ ฉันเดางานนี้ แต่ฉันไม่แน่ใจ” เมื่อคุณวางเดิมพันชีวิตของคุณมันก็ดูไม่ดีนัก