C kodundaki hataları tespit etmek için bir araç olan ControlFlag 1.0'ın piyasaya sürülmesi

Intel, büyük miktarda mevcut kod üzerinde eğitilmiş bir makine öğrenimi sistemi kullanarak kaynak kodundaki hataları ve anormallikleri tanımlamanıza olanak tanıyan ControlFlag 1.0 aracının ilk büyük sürümünü yayınladı. Geleneksel statik analizörlerden farklı olarak ControlFlag, olası tüm seçeneklerin sağlanmasının zor olduğu hazır kuralları uygulamaz, ancak çok sayıda mevcut projede çeşitli dil yapılarının kullanımına ilişkin istatistiklere dayanır. ControlFlag kodu C++ dilinde yazılmıştır ve MIT lisansı altında açık kaynaklıdır.

Sistem, GitHub ve benzeri halka açık depolarda yayınlanan açık kaynaklı projelerin mevcut kod dizisinin istatistiksel bir modelinin oluşturulmasıyla eğitilir. Eğitim aşamasında sistem, koddaki yapıların oluşturulmasına yönelik tipik kalıpları belirler ve bu modeller arasında programdaki kod yürütme akışını yansıtan sözdizimsel bir bağlantı ağacı oluşturur. Sonuç olarak, analiz edilen tüm kaynak kodların geliştirme deneyimlerini birleştiren bir referans karar verme ağacı oluşturulur. İncelenmekte olan kod, referans karar ağacına göre kontrol edilen kalıpların belirlenmesine yönelik benzer bir süreçten geçer. Komşu dallarla büyük farklılıklar, kontrol edilen modelde bir anormalliğin varlığını gösterir.

C kodundaki hataları tespit etmek için bir araç olan ControlFlag 1.0'ın piyasaya sürülmesi

ControlFlag'in yeteneklerine bir örnek olarak geliştiriciler, OpenSSL ve cURL projelerinin kaynak kodlarını analiz etti:

  • Anormal yapılar “(s1 == NULL) ∧ (s2 == NULL)” ve “(s1 == NULL) | (s2 == NULL)" , yaygın olarak kullanılan kalıpla eşleşmeyen "(s1 == NULL) || (s2 == BOŞ)". Kod aynı zamanda "(-2 == rv)" (eksi bir yazım hatasıydı) ve "BIO_puts(bp, ":") <= 0)" ifadelerinde de anormallikler belirledi (işlem işleminin başarıyla tamamlandığını kontrol etme bağlamında). fonksiyonun “== 0") olması gerekirdi.
  • cURL'de, sayısal tipteki "s->keepon" yapı elemanı kullanıldığında statik analizörler tarafından tespit edilemeyen ancak TRUE boolean değeriyle karşılaştırılan bir hata keşfedildi.

ControlFlag 1.0 sürümünün özellikleri arasında C dili için standart şablonlara tam destek ve koşullu “if” ifadelerindeki anormallikleri tespit etme yeteneği bulunmaktadır. Örneğin “if (x = 7) y = x;” kod parçasını analiz ederken Sistem, "if" ifadesinin sayısal değerleri karşılaştırmak için genellikle "değişken == sayı" yapısını kullandığını belirleyecektir, dolayısıyla "if" ifadesindeki "değişken = sayı" ifadesinin bir yazım hatasından kaynaklanmış olma ihtimali yüksektir. Kit, GitHub'daki mevcut C dili havuzlarını indirmenize ve bunları modeli oluşturmak için kullanmanıza olanak tanıyan bir komut dosyası içerir. Kodu hemen kontrol etmeye başlamanıza olanak tanıyan hazır modeller de mevcuttur.

Kaynak: opennet.ru

Yorum ekle