2010-11-18 16 views
4

Statik analizörün kanıtlayamayacağını bildiğim belirli sözleşmeler var. Belirli türde bir sözleşme ihlali hatalarını tüm bir işlevden hariç tutabilirim, ancak bu çok geniş fırçalanmış. Belirli ihlal hatalarını baseline.xml işlevini kullanarak hariç tutabilirim, ancak bu durum bir ekip ortamında denetlemek veya belgelemek imkansızdır. KısacasıBazı sözleşmeleri statik analizden kolayca hariç tutabilir miyim?

mümkün statik analizör için çıkmaz gibi görünen 3 parti kütüphanelerde yapılan bazı sözleşmeler de vardır

Contract.Requires(DoesHalt() == true, ExcludeFromStaticAnalysis=true);

gibi bir şey yapmaktır. Statik analiz için bunları devre dışı bırakmak istiyorum. Favori bir örnek, .NET grafik kitaplığına yerleşik bir sözleşmedir. Grafikte hangi aralığın hangi aramaya başlayacağını belirten bir derinlik ilk arama fonksiyonu argümanı, bu noktanın grafiğin bir üyesi olmasını gerektiren bir Contract.Requires'a sahiptir. Mantıklı sözleşme, belki de bir hata ayıklama yapısında çalıştırmaya değer, ancak statik olarak kanıtlanabilir olmaktan çok uzun bir yol. Yine de, derinliği ilk aramayı kullandığımda, statik ihlali göz ardı etmenin bir yolunu bulmalıyım. (Bu, Contract.Assume ile de uyumlu değildir)

Elverişli şeyleri işlenemez şeylerden ayırma becerisi olmadan, küçük bir temiz kod tabanıyla bile çok fazla gürültülü olmak için statik analizi buluyorum.

+0

Neden "Contract.Requires (DoesHalt() = true veya AssumeTrueBecauseYouCantProveThis)" yazamıyorsunuz? [AssumeTrueBecauseYouCantProvethis, "true"] statik bir const değeridir. Herhangi bir iyi "atasözü", ayrılmanın bir kısmının önemsiz olduğunu ve bu noktada sözleşme kontrolü üzerinde çalışmayı bıraktığından mutlu olmalıdır. –

+1

Çalışma zamanı denetleyicisinin gerçekten denetimi yapması gerektiğinden. Kontrol her zaman '|| TRUE. –

cevap

0

Statik analiz için bunu yapmanın bir yolunu bilmiyorum. Çalışma zamanı denetleyicisi, bunun mümkün olabileceği, ancak statik denetleyici için özel bir çalışma zamanına sahiptir.

Yapabilecekleriniz "temel işlevselliği" adresinden yararlanabilir. Bu size statik denetleyicilerin belirli bir zamanda size verdiği tüm uyarıları gizleme olanağı sağlar. Bu uyarılar, temel işlevi devre dışı bırakana kadar bir XML dosyasında toplanır.

Bu, varolan bir kod tabanı için statik denetleyicinin gürültüsünü büyük ölçüde azaltabilir.

İlgili konular