DW'nin cevabı harika , ama bir noktaya genişlemek istiyorum. Spesifikasyon sadece kodun doğrulandığı bir referans değildir. Resmi bir spesifikasyona sahip olmanın nedenlerinden biri, bazı temel özellikleri kanıtlayarak bunu doğrulamaktır. Tabii ki, şartname tamamen doğrulanamaz - onaylama şartnamenin kendisi kadar karmaşık olacaktır, bu yüzden sonsuz bir süreç olacaktır. Ancak doğrulama, bazı kritik özellikler için daha güçlü bir garanti almamızı sağlar.
Örneğin, bir araba otopilotu tasarladığınızı varsayalım. Bu, birçok parametreyi içeren oldukça karmaşık bir şeydir. Otopilotun doğruluk özellikleri “araba duvara çarpmayacak” ve “araba gittiği söylenen yere gidecek” gibi şeyleri içerir. “Araba duvara çarpmayacak” gibi bir özellik gerçekten çok önemli, bu yüzden bunu kanıtlamak istiyoruz. Sistem fiziksel dünyada çalıştığından, bazı fiziksel kısıtlamalar eklemeniz gerekir; hesaplama sisteminin asıl özelliği “malzeme bilimi ile ilgili bu varsayımlar altında ve otomobilin sensörleri tarafından engellerin algılanmasıyla ilgili bu varsayımlar altında, araba bir duvara çarpmayacak” gibi bir şey olacaktır. Ancak buna rağmen, sonuç açıkça arzu edilen nispeten basit bir özelliktir.
Bu özelliği koddan kanıtlayabilir misiniz? Sonuçta, eğer tamamen resmi bir yaklaşım izliyorsanız, olan budur¹. Ancak kodun birçok farklı bölümü vardır; frenler, kameralar, motor vb. bağımsız olarak kontrol edilir. Frenlerin doğruluk özelliği, “'fren uygula' sinyali açıksa frenler uygulanır” gibi bir şey olacaktır. Motorun bir doğruluk özelliği “debriyaj sinyali kapalıysa, motor tekerlekleri sürmezse” olacaktır. Hepsini bir araya getirmek çok üst düzey bir görüş gerektirir. Bir spesifikasyon, sistemin farklı bileşenlerinin birlikte ifade edilebildiği bir ara katmanlar oluşturur.
Aslında, bir araba otopilotu gibi karmaşık bir sistem, değişen miktarlarda iyileştirmelerle birlikte birkaç spesifikasyon seviyesine sahip olacaktır. Tasarımda genellikle bir arıtma yaklaşımı kullanılır: “araba duvara çarpmayacak” gibi bazı üst düzey özelliklerle başlayın, daha sonra bunun sensörler ve frenler gerektirdiğini anlayın ve sensörler, frenler için bazı temel gereksinimleri öğrenin ve pilot yazılımı, daha sonra bu temel gereklilikleri bileşenin bir tasarımında (sensör için bir radar, bir DSP, bir görüntü işleme kütüphanesi, vb.) ihtiyacım olacak şekilde geliştirin. Resmi bir geliştirme sürecinde, her bir spesifikasyon seviyesinin, en üst seviye özelliklerden koda kadar, üstteki seviyenin belirlediği gereksinimleri karşıladığı kanıtlanmıştır.
Spesifikasyonun doğru olduğundan emin olmak imkansızdır. Örneğin, fiziği yanlış anladıysanız, fren kodunu resmi gerekliliklerle ilişkilendiren matematik doğru olsa bile frenler etkili olmayabilir. Gerçekten 5000kg'ınız varsa, molaların 500kg yük ile etkili olduğunu kanıtlamak iyi değildir. Ancak 500kg'ın fren kodunun içinde, aracın fiziksel parametreleri için yeterince iyi olmayacaklarını görmek yanlış olduğunu görmek daha kolaydır.
¹ tamamen biçimsel yaklaşımın tersidir “Ben bu işleri sanırım, ama emin olamaz”. Hayatınızı üzerine koyduğunuzda, bu çok iyi görünmüyor.