ScholarGate
Asistan

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.

PaperMind ile konu bulYakındaMakale ve konu bul
Tools & resources
Slaytları indir
Learn & explore
VideoYakında

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.

Bu kavram için yöntemler

İlgili kavramlar