1.Amaç

Bu belgenin amacı CppCheck uygulaması ile statik kod analizini anlatmaktır. CppCheck uygulaması Eclipse içinde çalışabildiği için Eclipse ortamında kurulumu ve kullanımı da anlatılacaktır. 

2.Statik Test / Statik Analiz Nedir, Ne İşe Yarar?

Statik test kodumuzun çalıştırılmadan testidir. Aslında bu işe çok yabancı değiliz. Her kod derlemesinde karşımıza çıkıyor. Derleyiciler kodu derlemeden önce kontrol eder ve sonuçlarını verir. En basitinden warning: unused variable ‘z’ uyarısını almışızdır. İşte bu bir statik test örneğidir. 

Statik testin ana hedefi hatayı en erken seviyede pre-compiler seviyesinde bulmaktır. Bu seviyede bulunan hatanın düzeltilmesini maliyeti 0 dır. Evet tam olarak 0. Maliyeti sıfır olan ve kaarı paha biçilemeyecek kadar olan bu işlem adımını gerçekleştirmemek kelimenin tam anlamıyla intihardır. Ben kodumu dikkatli yazıyorum, ben yazılım kurallarına uyuyorum, ben şöyle yazıyorum, böyle dikkat ediyorum demek yerine statik test yapılmalıdır. Aksi durumda itibar ve para kaybı, stres dolu günler bizi bekler.

Ne işe yarar: Statik analiz yazılımı oluşturan parçaların, kod veya veri, çoğunlukla çeşitli araçlar kullanılarak test edilmesi olarak ifade edilebilir. Statik Kod Analizi, temiz (clean) kod yazmanın en önemli bacağı olarak değerlendirilmelidir. Bu araçları kullanarak clean kod yazmak için gerekli olan,

  • Kodlama standartlarına uygunluk
  • Tekrardan kaçınma
  • Birim testlerinin yeterliliği
  • Karmaşıklığın doğru dağılımı
  • Spagetti olmayan tasarım
  • Yeterli yorum frekansı

gibi kriterleri sağlamak çok daha kolay olmakta.

3.CppCheck Kurulumu

CppCheck uygulamasını indirip kurmak için aşağıdaki linkten faydalanabilirsiniz.
http://cppcheck.sourceforge.net/
Kurulum tamamlandıktan sonra “Preferences” penceresinden gerekli ayarları ya da değişiklikleri kendinize göre yapabilirsiniz.

Kullandığım ayarlar aşağıda gibidir.

Kurulum ve ayarlar bittikten sonra ilk olarak yeni bir proje oluşturulması gerekiyor. Bu oluşturulacak proje kontrol edeceğiniz kodun bağlantı linklerini içermektedir. Proje oluşturulduktan sonra kontrol edilecek kod dosyalarının dizini gösterilmelidir.

Proje olarak değil de sadece tek bir dosyayı kontrol ettirmek istediğimizde Analyze->Files adımları sonrasında istenilen dosya gösterilir. Aşağıdaki gibi bir çıktı görülür.

4.CppCheck Eclipse İçinde Çalıştırılması

CppCheck kendi grafik penceresi üzerinden çalıptırılabildiği gibi Eclipse yüklenerek Eclipse üzerinden de çalıştırılabilir. Açıkçası benim tercih ettiğim yöntem bu. Çünkü kod yazarken hızlıca bulunduğun dosya için sonuçları görmek ve var ise sorunun olduğu yere gitmek işleri oldukça kolaylaştırıyor. CppCheck sonuçlarının hepsi Eclipse Problems sekmesinde görünüyor. Örnek resim aşağıda bulunmaktadır.

CppCheck’ in nasıl Eclipse yükleneceğine gelelim. İlk olarak Eclipse’de Help->Install New Software adımlarını yapıp açılan pencerede “work with” girdisi için https://dl.bintray.com/cppcheclipse/p2/updates/ linki verilir. Daha sonra alt pencereden cppcheclipse seçilerek kurulum yapılır. Kurulum bittikten sonra Eclipse yeniden başlatılması gerekir. Örnek resim aşağıda görülmektedir.

Eclipse yeniden başladıktan sonra Window->Preferences adımlarından sonra açılan pencerede cppcheclipse başlığı tıklanarak cppcheck ayarlamaları yapılır.

Yukarıdaki sayfada “chppcheck binary path” girdisi için cppcheck kurulumunun yapıldığı yerdeki cppcheck.exe dosyası gösterilmelidir. Cppcheckgui.exe isminin girilmemesine dikkat edilmelidir. Bu adımdan sonra Settings seçeneği altında gerekli ayarlamalar yapılmalıdır. Benim kullandığım ayarlar aşağıdaki gibidir.  Daha sonra ele alınacak problemlerin listesini görmek için Problems sekmesine geçilir. Ben bu sayfada herhangi bir şey değiştirmeden tüm seçenekler aktif olarak kullanıyorum.

Eclipse ortamında tüm bu kurulum ve ayarlamalardan sonrasında cppcheck kullanıma hazırdır. Artık tek yapmamız gereken kontrol etmek istediğimiz proje ya da dosya üzerinde sağ tıklayıp cppcheck->Run cppcheck seçmektir.

Proje ya da dosya üzerinde cppcheck koşmanın kısa yolu ise Ctrl+Shift+C. Bu tuş kombinasyonu ile hızlıca sonuçlar görülebilir. Console penceresinde sonuçlar aşağıdaki gibi görülebilir. Ayrıca Problems sayfasından da sonuçlar hızlıca görülüp ilgili satıra gidilebilir.

5.Sonuç

Yazılım projelerinde iki ana hedef vardır diyebiliriz. En azından ben içinde bulunduğum projeleri o şekilde ele alıyorum. Birincisi ürünün hedefi/gereksinimleri ikincisi ise yazılımın hedefi. Yazılım hedefi içinde birçok başlık bulunmaktadır. Taşınabilirlik, okunabilirlik, geliştirmeye/genişletmeye açıklık, modüler yapı, temiz kod gibi başlıklar bulunmaktadır. Her ne kadar cppcheck gibi harici uygulamalar yazılımcıya bu hedeflerine ulaşmak için yardımcı olsa da bazı konularda yazılımcı kendi bilgi ve becerileri ile yazılım hedeflerine ulaşır. Örneğin Taşınabilirlik, modüler yapı gibi konularda cppcheck bize yardımcı olamaz. Yada bir başka yazılımcının ürün hedefine giden yazılımı kolayca görüp anlayabilmesini yine cppcheck bize sağlayamaz. 

Neticede Bug olmayan kod yoktur. Ama bunları en aza indirmek bizim elimizdedir. Bunun için yapılacaklar özetele oku/öğren ve test et olarak sınıflandırılabilir. Test etmek adımı var olan bug yakalamak içindir, bug önlemek için değil. Fakat Oku/Öğren adımı ise bug oluşumunu önlemek içindir. Daha temiz, güvenli ve hatasız kodlama için bu konular için yazılmış kitaplar okunmalıdır. 

Aşağıda linklerde iki kitap paylaşıyorum. Umarım faydalı olur.

  1. Clean Code-Robert C.Martin

https://drive.google.com/file/d/1q4o4W8kxMeMK-Jpyr8tlZCmx7S5AxLNN/view?usp=sharing

  1. Hatasiz Kodlama

https://drive.google.com/open?id=0B3H6hT4V5l7lVThwTWotLXNWTFU

Son olarak da cppcheck için aşağıda linki bulunan video seyretmenizi öneririm. Yazıyı pdf olarak buradan indirebilirsiniz.