Statik program analizi - Static program analysis

Yazılım geliştirme
Çekirdek aktiviteleri
Paradigmalar ve modeller
Metodolojiler ve çerçeveler
Destekleyen disiplinler
Uygulamalar
Araçlar
Standartlar ve Bilgi Yapıları
Sözlükler
Anahatlar

Statik program analizi ... bilgisayar yazılımı analizi bu, programları fiilen çalıştırmadan gerçekleştirilir. dinamik analiz, programlar yürütülürken üzerinde gerçekleştirilen analizdir.[1][2] Çoğu durumda analiz, bazı sürümlerinde gerçekleştirilir. kaynak kodu ve diğer durumlarda, bir şekilde nesne kodu.

Terim genellikle bir otomatik araç insan analizine program anlayışı denir, programın anlaşılması veya kod incelemesi. Yazılım incelemeleri ve yazılımda izlenecek yollar ikinci durumda da kullanılır.

Gerekçe

Araçlarla gerçekleştirilen analizin karmaşıklığı, yalnızca münferit ifadelerin ve bildirimlerin davranışını dikkate alanlardan eksiksiz olanı içerenlere kadar değişir. kaynak kodu analizlerinde bir programın. Analizden elde edilen bilgilerin kullanımları, olası kodlama hatalarının (örneğin, tüy aracı) resmi yöntemler belirli bir programla ilgili özellikleri matematiksel olarak kanıtlayan (ör. davranışı, spesifikasyonunun davranışıyla eşleşir).

Yazılım ölçümleri ve tersine mühendislik statik analiz biçimleri olarak tanımlanabilir. Yazılım ölçütlerinin türetilmesi ve statik analiz, özellikle gömülü sistemlerin oluşturulmasında, sözde tanımlanarak giderek daha fazla birlikte kullanılmaktadır. yazılım kalitesi hedefleri.[3]

Statik analizin artan ticari kullanımı, kullanılan yazılımın özelliklerinin doğrulanmasıdır. Emniyet açısından kritik bilgisayar sistemleri ve potansiyel olarak konumlandırma savunmasız kodu.[4] Örneğin, aşağıdaki endüstriler, gittikçe karmaşıklaşan ve karmaşıklaşan yazılımların kalitesini iyileştirmenin bir yolu olarak statik kod analizinin kullanımını tanımlamıştır:

  1. Tıbbi yazılım: Birleşik Devletler Gıda ve İlaç İdaresi (FDA), tıbbi cihazlar için statik analiz kullanımını belirlemiştir.[5]
  2. Nükleer yazılım: Birleşik Krallık'ta Nükleer Düzenleme Ofisi (ONR), statik analizin kullanılmasını önermektedir. reaktör koruma sistemleri.[6]
  3. Havacılık yazılımı (ile birlikte dinamik analiz )[7]

VDC Research tarafından 2012 yılında yapılan bir araştırma, ankete katılan yerleşik yazılım mühendislerinin% 28,7'sinin şu anda statik analiz araçlarını kullandığını ve% 39,7'sinin bunları 2 yıl içinde kullanmayı beklediğini bildirdi.[8]2010 yılında yapılan bir araştırma, Avrupa araştırma projelerinde görüşülen geliştiricilerin% 60'ının en azından kendi temel IDE yerleşik statik analizörlerini kullandıklarını ortaya koydu. Bununla birlikte, yalnızca yaklaşık% 10'u ek bir başka (ve belki de daha gelişmiş) analiz aracı kullandı.[9]

Uygulama güvenliği endüstrisinde adı Statik Uygulama Güvenliği Testi (SAST) da kullanılır. SAST, Microsoft tarafından tanımlanan SDL gibi Güvenlik Geliştirme Yaşam Döngülerinin (SDL'ler) önemli bir parçasıdır[10] ve yazılım şirketlerinde yaygın bir uygulama.[11]

Araç türleri

OMG (Nesne Yönetim Grubu ) için gerekli olan yazılım analizi türlerine ilişkin bir çalışma yayınladı yazılım kalitesi ölçme ve değerlendirme. "Dayanıklı, Güvenli, Verimli ve Kolay Değiştirilen BT Sistemlerinin CISQ Önerilerine Göre Nasıl Sağlanacağı" hakkındaki bu belge, yazılım analizinin üç seviyesini açıklamaktadır.[12]

Birim Seviyesi
Belirli bir program veya alt rutin içinde, o programın bağlamına bağlanmadan gerçekleşen analiz.
Teknoloji Düzeyi
Sorunları bulmak ve bariz yanlış pozitiflerden kaçınmak için genel programın daha bütünsel ve anlamsal bir görünümünü elde etmek için ünite programları arasındaki etkileşimleri dikkate alan analiz. Örneğin, izin hatalarını bulmak için Android teknoloji yığınını statik olarak analiz etmek mümkündür.[13]
Sistem seviyesi
Belirli bir teknoloji veya programlama diliyle sınırlı olmaksızın, birim programlar arasındaki etkileşimleri hesaba katan analiz.

Daha ileri düzeyde bir yazılım analizi tanımlanabilir.

Misyon / İşletme Seviyesi
İşletme veya program / görev katmanı faaliyetlerinin bir parçası olarak çalışması için yazılım sistemi içinde uygulanan iş / görev katmanı terimlerini, kurallarını ve süreçlerini dikkate alan analiz. Bu öğeler, belirli bir teknoloji veya programlama diliyle sınırlandırılmadan uygulanır ve çoğu durumda birden çok dile dağıtılır, ancak görev güvencesi için sistem anlayışı için statik olarak çıkarılır ve analiz edilir.

Biçimsel yöntemler

Biçimsel yöntemler, analiz için kullanılan terimdir. yazılım (ve bilgisayar donanımı ) sonuçları tamamen katı matematiksel yöntemler kullanılarak elde edilenler. Kullanılan matematiksel teknikler şunları içerir: gösterimsel anlambilim, aksiyomatik anlambilim, operasyonel anlambilim, ve soyut yorumlama.

Basit bir indirgeme ile durdurma sorunu bunu kanıtlamak mümkündür (herhangi biri için Turing tamamlandı dil), rastgele bir programdaki olası tüm çalışma zamanı hatalarını bulmak (veya daha genel olarak, bir programın nihai sonucuna ilişkin bir spesifikasyonun herhangi bir tür ihlali) karar verilemez: rastgele bir programın çalışma zamanı hataları gösterip göstermeyeceğini her zaman doğru şekilde yanıtlayabilecek mekanik bir yöntem yoktur. Bu sonuç şu eserlere dayanmaktadır: Kilise, Gödel ve Turing 1930'larda (bakınız: Durma sorunu ve Rice teoremi ). Karar verilemeyen birçok soruda olduğu gibi, yine de yararlı yaklaşık çözümler üretilmeye çalışılabilir.

Biçimsel statik analizin bazı uygulama teknikleri şunları içerir:[14]

  • Soyut yorumlama, her ifadenin soyut bir makinenin durumu üzerindeki etkisini modellemek için (yani, yazılımı her bir ifadenin ve bildirimin matematiksel özelliklerine dayanarak 'çalıştırır'). Bu soyut makine, sistemin davranışlarına fazla yaklaşır: soyut sistem, bu nedenle, masrafları pahasına analiz etmek daha basit hale getirilir. eksiklik (Orijinal sistemdeki her özellik, soyut sistem için doğru değildir). Düzgün yapılırsa, soyut yorumlama ses (soyut sistemin gerçek her özelliği, orijinal sistemin gerçek bir özelliğine eşlenebilir).[15] Frama-C değer analizi eklentisi ve Polyspace soyut yoruma büyük ölçüde güveniyor.
  • Veri akışı analizi olası değerler kümesi hakkında bilgi toplamak için kafes tabanlı bir teknik;
  • Hoare mantığı, bir resmi sistem hakkında titiz bir şekilde muhakeme yapmak için bir dizi mantıksal kural ile bilgisayar programlarının doğruluğu. Bazı programlama dilleri için araç desteği vardır (ör. SPARK programlama dili (altkümesi Ada ) ve Java Modelleme Dili —JML — kullanma ESC / Java ve ESC / Java2, Frama-C WP (en zayıf ön koşul ) ACSL ile genişletilmiş C dili için eklenti (ANSI / ISO C Belirtim Dili ) ).
  • Model kontrolü, sahip olan sistemleri dikkate alır sonlu durum veya sonlu duruma indirgenebilir soyutlama;
  • Sembolik uygulama, koddaki belirli noktalarda mutasyona uğramış değişkenlerin değerini temsil eden matematiksel ifadeleri türetmek için kullanıldığı gibi.

Veriye dayalı statik analiz

Veriye dayalı statik analiz, kodlama kurallarını anlamak için büyük miktarda kod kullanır.[16][daha iyi kaynak gerekli ] Örneğin, iyi bir analiz stratejisi öğrenmek için GitHub'daki tüm Java açık kaynaklı paketleri kullanılabilir. Kural çıkarımı, makine öğrenimi tekniklerini kullanabilir.[17] Örneğin, nesne yönelimli bir API kullanma biçiminde çok fazla sapma yapıldığında, bunun bir hata olma olasılığının yüksek olduğu gösterilmiştir.[18] Ayrıca çok sayıda geçmişteki düzeltme ve uyarılardan ders almak da mümkündür.[16][daha iyi kaynak gerekli ]

Ayrıca bakınız

Referanslar

  1. ^ Wichmann, B. A .; Canning, A. A .; Clutterbuck, D. L .; Winsbarrow, L. A .; Ward, N. J .; Marsh, D.W.R (Mart 1995). "Statik Analiz Üzerine Endüstriyel Perspektif" (PDF). Yazılım Mühendisliği Dergisi. 10 (2): 69–75. doi:10.1049 / sej.1995.0010. Arşivlenen orijinal (PDF) 2011-09-27 tarihinde.
  2. ^ Egele, Manuel; Scholte, Theodoor; Kirda, Engin; Kruegel, Christopher (2008-03-05). "Otomatikleştirilmiş dinamik kötü amaçlı yazılım analizi teknikleri ve araçları hakkında bir anket". ACM Hesaplama Anketleri. 44 (2): 6:1–6:42. doi:10.1145/2089125.2089126. ISSN  0360-0300.
  3. ^ "Kaynak Kod için Yazılım Kalite Hedefleri" Arşivlendi 2015-06-04 at Wayback Makinesi (PDF). Bildiriler: Gömülü Gerçek Zamanlı Yazılım ve Sistemler 2010 Konferansı, ERTS2010.org, Toulouse, Fransa: Patrick Briand, Martin Brochet, Thierry Cambois, Emmanuel Coutenceau, Olivier Guetta, Daniel Mainberte, Frederic Mondot, Patrick Munier, Loic Noury, Philippe Spozio, Frederic Retailleau.
  4. ^ Hassas Statik ve Çalışma Zamanı Analizi ile Yazılım Güvenliğini İyileştirme Arşivlendi 2011-06-05 de Wayback Makinesi (PDF), Benjamin Livshits, bölüm 7.3 "Statik Güvenlik Teknikleri". Stanford doktora tezi, 2006.
  5. ^ FDA (2010-09-08). "FDA'da İnfüzyon Pompası Yazılım Güvenliği Araştırması". Gıda ve İlaç İdaresi. Arşivlendi 2010-09-01 tarihinde orjinalinden. Alındı 2010-09-09.
  6. ^ Bilgisayar tabanlı güvenlik sistemleri - dijital bilgisayar tabanlı koruma sistemlerinin yazılım yönlerini değerlendirmek için teknik rehberlik, "Bilgisayar tabanlı güvenlik sistemleri" (PDF). Arşivlenen orijinal (PDF) 4 Ocak 2013. Alındı 15 Mayıs, 2013.
  7. ^ Konum Kağıdı CAST-9. Yazılım Güvencesine Yönelik Güvenlik Mühendisliği Yaklaşımlarını Değerlendirmeye İlişkin Hususlar Arşivlendi 2013-10-06'da Wayback Makinesi // FAA, Sertifika Yetkilileri Yazılım Ekibi (CAST), Ocak 2002: "Doğrulama. Statik ve dinamik analizlerin bir kombinasyonu başvuru sahibi / geliştirici tarafından belirlenmeli ve yazılıma uygulanmalıdır."
  8. ^ VDC Araştırması (2012-02-01). "Gömülü Yazılım Kalitesi için Otomatik Hata Önleme". VDC Araştırma. Arşivlendi 2012-04-11 tarihinde orjinalinden. Alındı 2012-04-10.
  9. ^ Prause, Christian R., René Reiners ve Silviya Dencheva. "Yüksek oranda dağıtılmış araştırma projelerinde araç desteğinin ampirik çalışması." Küresel Yazılım Mühendisliği (ICGSE), 2010 5. IEEE Uluslararası Konferansı. IEEE, 2010 http://ieeexplore.ieee.org/ielx5/5581168/5581493/05581551.pdf
  10. ^ M. Howard ve S. Lipner. Güvenlik Geliştirme Yaşam Döngüsü: SDL: Gösterilebilir Şekilde Daha Güvenli Yazılım Geliştirme Süreci. Microsoft Press, 2006. ISBN  978-0735622142
  11. ^ Achim D. Brucker ve Uwe Sodan. Statik Uygulama Güvenliği Testini Büyük Ölçekte Dağıtma Arşivlendi 2014-10-21 de Wayback Makinesi. GI Sicherheit 2014'te. Bilişimde Ders Notları, 228, sayfa 91-101, GI, 2014.
  12. ^ "Arşivlenmiş kopya" (PDF). Arşivlendi (PDF) 2013-12-28 tarihinde orjinalinden. Alındı 2013-10-18.CS1 Maint: başlık olarak arşivlenmiş kopya (bağlantı)
  13. ^ Bartel, Alexandre; Klein, Jacques; Monperrus, Martin; Le Traon, Yves (1 Haziran 2014). "Büyük Ölçekli Bir Çerçevenin İzin Kontrollerini Çıkarmak için Statik Analiz: Android'i Analiz Etmenin Zorlukları ve Çözümleri". Yazılım Mühendisliğinde IEEE İşlemleri. 40 (6): 617–632. arXiv:1408.3976. doi:10.1109 / tse.2014.2322867. S2CID  6563188.
  14. ^ Vijay D'Silva; et al. (2008). "Biçimsel Yazılım Doğrulaması için Otomatik Teknikler Araştırması" (PDF). CAD Üzerindeki İşlemler. Arşivlendi (PDF) 2016-03-04 tarihinde orjinalinden. Alındı 2015-05-11.
  15. ^ Jones, Paul (2010-02-09). "Tıbbi cihaz yazılım analizine yönelik Biçimsel Yöntemlere dayalı bir doğrulama yaklaşımı". Gömülü Sistem Tasarımı. Arşivlenen orijinal 10 Temmuz 2011. Alındı 2010-09-09.
  16. ^ a b "Başkalarının hatalarından öğrenmek: Veriye dayalı kod analizi". www.slideshare.net.
  17. ^ Oh, Hakjoo; Yang, Hongseok; Yi Kwangkeun (2015). "Bayes optimizasyonu yoluyla bir program analizini uyarlamak için bir strateji öğrenmek". 2015 ACM SIGPLAN Uluslararası Nesne Tabanlı Programlama, Sistemler, Diller ve Uygulamalar Konferansı Bildirileri - OOPSLA 2015. s. 572–588. doi:10.1145/2814270.2814309. ISBN  9781450336895. S2CID  13940725.
  18. ^ Monperrus, Martin; Mezini Mira (2013). "Eksik yöntem çağrılarının tespit edilmesi, çoğunluk kuralı ihlalidir". Yazılım Mühendisliği ve Metodolojisine İlişkin ACM İşlemleri. 22 (1): 1–25. arXiv:1306.0762. doi:10.1145/2430536.2430541. S2CID  1212778.

daha fazla okuma

Dış bağlantılar