Statik Program Analizi
Statik program analizi, bir değişkenin hangi değerleri alabileceği veya bir hatanın meydana gelip gelemeyeceği gibi özellikleri çıkarmak için kaynak veya ara kodu, çalıştırmadan inceler.
Tanım
Statik program analizi, bir programın olası davranışları hakkında yaklaşık ancak sağlam bilgilerin, programı çalıştırmadan, doğrudan kodundan hesaplanmasıdır; bu genellikle soyut durumların bir kafesi üzerinde veri akışı denklemlerini çözerek gerçekleştirilmektedir.
Kapsam
Bu konu, kontrol akış grafikleri üzerindeki veri akışı analizini, kafes tabanlı sabitleme noktası hesaplamasını, prosedürler arası analizi, işaretçi ve takma ad analizini, çağrı grafiği ve kontrol akışı analizini kapsamaktadır. Analizlerin hassasiyet boyutlarını (akışa, bağlama ve yola duyarlılık), sağlamlığını ve bunların optimizasyon ve hata tespitindeki kullanımlarını ele almaktadır.
Temel sorular
- Program özellikleri, kontrol akış grafiği üzerinde olgular yayılarak nasıl hesaplanmaktadır?
- Akışa, bağlama ve yola duyarlılık, hassasiyeti ve maliyeti nasıl etkilemektedir?
- Sağlam analiz, prosedür çağrıları arasında nasıl taşınmaktadır?
- İşaretçi analizi, takma adlandırma ve dolaylı adresleme ile nasıl başa çıkmaktadır?
Temel kuramlar
- Kafes üzerinde sabitleme noktası olarak veri akışı analizi
- Kildall, küresel program optimizasyonlarını, bir kafes üzerindeki veri akışı denklemlerinin bir sabitleme noktasının hesaplanması olarak birleştirerek, statik analizler için genel çerçeveyi sağlamıştır.
- Grafik erişilebilirliği aracılığıyla prosedürler arası analiz
- Reps, Horwitz ve Sagiv, geniş bir hassas prosedürler arası veri akışı problemi sınıfını grafik erişilebilirliğine indirgeyerek, prosedür sınırları arasında verimli bağlama duyarlı analizi mümkün kılmıştır.
- Analiz ilkeleri ve boyutları
- Nielson, Nielson ve Hankin, veri akışı, kısıt tabanlı ve tip tabanlı analizleri ve tasarımlarını yöneten hassasiyet-maliyet dengelerini sistemleştirmiştir.
Klinik önem
Statik analiz, derleyici optimizasyonlarını, hata ve güvenlik açığı bulma araçlarını, kod denetleyicilerini (linters) ve IDE özelliklerini yönlendirmektedir. Sağlam analizler, belirli hataların yokluğunu doğrulayabilirken, ölçeklenebilir sezgisel analizler, geliştirmenin erken aşamalarında kusurları yakalamak için yaygın olarak kullanılmaktadır.
Tarihçe
Veri akışı analizi, optimize edici derleyicilerden doğmuştur; Kildall'ın 1973'teki kafes çerçevesi ve Allen-Cocke analizleri teorik temeli sağlamıştır. Prosedürler arası ve işaretçi analizleri, 1980'ler ve 1990'lar boyunca, Reps-Horwitz-Sagiv erişilebilirlik formülasyonu da dahil olmak üzere ilerlemiş ve statik analiz daha sonra çok büyük kod tabanlarında endüstriyel hata bulma için ölçeklenmiştir.
Tartışmalar
- Hassasiyet ve ölçeklenebilirlik
- Analiz tasarımcıları, yanlış pozitifleri azaltan bağlama ve yola duyarlılık gibi hassasiyet boyutlarını, analiz edilebilecek programın büyüklüğünü sınırlayan hesaplama maliyetine karşı sürekli olarak dengelemektedir.
Öne çıkan isimler
- Gary Kildall
- Thomas Reps
- Susan Horwitz
- Flemming Nielson
- Hanne Riis Nielson
İlgili konular
Temel eserler
- kildall1973
- reps1995
- nielson1999
Sıkça sorulan sorular
- Statik bir analizin sağlam olması ne anlama gelmektedir?
- Sağlam bir analiz, kontrol ettiği özelliğin gerçek bir oluşumunu asla kaçırmaz: belirli bir türde hata bildirmezse, o tür hata gerçekten meydana gelemez, ancak yanlış alarmlar da verebilmektedir.
- İşaretçi analizi neden zordur?
- İşaretçiler ve referanslar, birden fazla adın aynı belleği işaret ettiği takma adlandırmayı (aliasing) ortaya çıkarmaktadır; bu nedenle analiz, her işaretçinin hangi konumları hedefleyebileceğini yaklaşık olarak belirlemelidir, bu da hassasiyet ile ölçeklenebilirlik arasında bir denge gerektiren bir problemdir.