SonarQube Nedir?
Bu yazımda SonarQube kullanımı ve kavramları üzerine değinmek istiyorum. SonarQube statik kod analiz aracı ve clean code gibi unsurları içinde barındıran open source güvenlik aracıdır. Peki statik kod analizi ve dinamik kod analizi arasındaki temel fark nedir? Statik kod analizi kodun derlemeden yapılan analizdir. Dinamik kod analizi ise run time esnasında yapılan analizidir.

SonarQube ci/cd pipeline’larını bağlayarak kod kalitesini arttırabilirsiniz. Ci akışında mevcut kod, bir önceki yada geçmiş gün kodla statik kod karşılaştırmasını yaparak production ortama giden kodun kalitesinin artması noktasında yardımcı olacaktır. SonarQube üzerinde projelerin değerlendirmesi harf dereceleri ile yapılır. Yazılım kalitesi dediğimizde; performans, güvenlik, sağlamlık ve bakım olarak düşünebiliriz. Sonar uygulaması kendi içerisinde ön tanımlı kural setleri ile birlikte geliyor. Kural setleri yazılım dillerine göre gruplara ayrılıyor. Uygulama versiyonu güncellediğinizde bu kural setlerinde azalma yada çoğalma olabilir. Kural setlerinin referans alındığı kurumlar;
- CISQ (Consortium for IT Software Quality)
- CWE (Common Weakness Enumeration)
- OWASP (Open Software Security Community)
SonarQube kaynak kodu analiz etme aşamasında kullandığı yöntemler;
- Architecture Design
- Unit Tests
- Duplicated Code
- Potential bugs
- Complex code
- Coding standards
- Clean code
Community versiyonun desteklediği diller başında Java, C#, JavaScript, TypeScript, CloudFormation, Terraform, Kotlin, Ruby, Go, Scala, Flex, Python, PHP, HTML, CSS, XML ve VB.NET gelmektedir. Eğer mobil teknolojiler için kullanmak istiyorsanız IOS, Swift vs ürünün develop yada daha üst seviyelerdeki lisansı satın almanız gerekiyor. Sonar community tarafında plugin desteği oldukça fazla olduğunu söyleyebiliriz. Kullandığınız versiyona bağlı olarak dillerin kural setleri ön tanımlı olarak gelmektedir. Uygulamanın versiyonlarına bağlı olarak bu sayılar da değişiklik olabilir.

Sonar uygulamasının en güzel yanı size hatanızı göstermede yardımcı olurken aynı zamanda size çözüm yada yaklaşımda göstermektedir. Aşağıdaki örnekte Atomic sınıflarda değer karşılaştırmada .equals kullanmanın doğru olmadığını bizlere söylüyor.

Sonar uygulaması üzerinde kendinize ait profile bilgileri tanımlayıp şirket kültürünüze bağlı olarak taramalar da yapabilirsiniz. Aynı zamanda tarama esnasında pas geçilmesini istediğiniz özel yada crypto dosyalar varsa bunlar için exclude yaklaşımını kullanabiliriz. Gate’ler üzerinden test coverage değerlerine bağlı olarak pipeline akışı sağlayabilirsiniz.

Yukarıdaki proje ekranında yer alan bazı kavramları biz ING Türkiye DevOps takımı olarak aşağıdaki gibi tanımladık;
Bugs: taranan kod içerisinde düzeltilmesi gereken, ileri zamanlarda soruna yol açabilecek noktaları işaretler.
Code Smells: Kodun sürdürülebilirliği için düzeltmeleri işaret eder. İlerleyen zamanlarda kodda bakım ve okunabilirlik maliyetlerini düşürmek için çözümlenmesi gereken, temiz kod için gerekn noktaları işaretler.
Debt: Code smell’lerin düzeltilmesi için yaklaşık zaman maliyetini gösterir.
Security Hotspot: Göz geçirilmesi gereken varsayımsal güvenlik bulgularını gösterir. Güvenlik açığı oluşmasını engellemek için review şartı koşar.
Vulnerability: Best practise güvenlik kurallarına göre arka kapı oluşturabilecek bulguları gösterir.
Coverage: Kodun yüzde kaçının unit test ile test edildiğini gösterir.
Dublication: kaynak kodda ne kadar bloğun birebir kopyalanmış olduğunu gösterir.
Maintainbility: bu projeyi rahat bir şekilde güncelleyebilir ve yeni teknolojiler ile kullanabilirim.
Birazda daha Quality Gate kavramına bakacak olursak projelerimizin sonar taraması sonucunda başarılı mı yoksa başarısız mı olduğuna karar vermek için Gated yaklaşımına başvurabiliriz. SonarQube ilk kurulumda best practise olan Sonar Way Gate ile gelmektedir. Buradan clone alarak proje bazlı yada dil bazlı yeni Quality Gate’ler tanımlayabiliriz.

Son olarak SonarQube ile en çok karıştırılan SonarLint ise IDE ile birlikte kullanabileceğimiz kalite sorunlarını tespit etme ve öneride bulunan yazılımcı seven plugin dir. Desteklediği IDE’ler arasında Visual Studio, Intellij, VsCode ve Eclipse olduğunu belirtebiliriz.