Şey ... evet aslında, her yol “geçilirse” program test edilir. Ancak bu, tüm değişkenler dahil olmak üzere programın sahip olabileceği tüm olası durumların tüm alanı boyunca olası her yol anlamına gelir. Oldukça basit, statik olarak derlenmiş bir program için bile - eski bir Fortran sayı kırıcısı - bu en azından düşünülebilecek olsa da mümkün değildir: sadece iki tamsayılı değişkeniniz varsa, temelde noktaları bağlamak için tüm olası yollarla uğraşıyorsunuzdur. iki boyutlu bir ızgara; Aslında Seyahat Satış elemanı gibi görünüyor. For n böyle değişkenler, bir uğraştığımız n boyutlu uzayda, bu nedenle herhangi bir gerçek program için, görev tamamen kolay işlenebilir olduğunu.
Daha da kötüsü: ciddi şeyler için, yalnızca belirli sayıda ilkel değişkene sahip değilsiniz , aynı zamanda fonksiyon çağrıları sırasında değişkenler yaratın ya da değişken boyut değişkenleri ... ya da bunun gibi bir Turing-complete dilinde mümkün olan herhangi bir değişken yaratın. Bu durum, uzaysal alanı sonsuz boyutta yapar ve saçma bir şekilde güçlü test ekipmanları verilse bile tüm kapsama alanını ümit eder.
Dedi ki ... aslında işler pek de kasvetli değil. İse mümkün proove doğru olduğu bütün programları, ancak birkaç fikir vazgeçmek gerekecek.
İlk olarak: bildirimsel bir konuşmaya geçmeniz şiddetle tavsiye edilir. Zorunlu diller, bir nedenden ötürü, her zaman en popüler olanlardır, ancak algoritmaları gerçek dünya etkileşimleriyle bir araya getirme şekilleri , “doğru” ile ne demek istediğinizi söylemeyi bile zorlaştırır .
Tamamen işlevsel programlama dillerinde çok daha kolay : bunlar matematiksel işlevlerin gerçek ilginç özellikleri ile gerçekte hiçbir şey söyleyemeyeceğiniz bulanık gerçek dünya etkileşimleri arasında açık bir ayrım yapar . İşlevler için, “doğru davranış” tanımlaması çok kolaydır: tüm olası girişler için (bağımsız değişken türlerinden) karşılık gelen istenen sonuç çıkarsa, işlev doğru davranır.
Şimdi, bunun hala inatçı olduğunu söylüyorsunuz ... sonuçta, olası tüm argümanların alanı da genel olarak sonsuz boyuttadır. Doğru - tek bir işlev için, naif kapsama testi bile, zorunlu bir programda beklediğinizden çok daha fazlasını sağlar! Bununla birlikte, oyunu değiştiren inanılmaz güçlü bir araç var: evrensel niceleme / parametrik polimorfizm . Temel olarak, bu, çok genel veri türlerine fonksiyon yazmanıza olanak tanır, verinin basit bir örneği için çalışırsa, mümkün olan herhangi bir girdi için çalışacağını garanti eder.
En azından teorik olarak. Bunu gerçekten kanıtlayabilmeniz için gerçekten genel olan doğru tipleri bulmak kolay değildir - genellikle, bağımlı bir şekilde yazılmış bir dile ihtiyacınız vardır ve bunların kullanımı oldukça zordur. Ancak, parametrik polimorfizm ile işlevsel bir tarza sahip tek başına yazmak, zaten “güvenlik seviyenizi” büyük ölçüde artırıyor - tüm böcekleri mutlaka bulamayacaksınız, ancak derleyiciyi görememeleri için onları oldukça iyi saklamanız gerekecek!