Wiki Eclipse

SonarQube Nedir?

Akın Çetin
turkcell
Published in
4 min readDec 20, 2022

--

SonarQube SDLC(Yazılım Geliştirme Yaşam Döngüsü) için kritik bir değere sahip, statik kod analizi ve Clean Code gibi maddeleri içeren Open Source(Açık kaynak) bir güvenlik aracıdır. Statik kod analizi kodunuzun derlenmeden yapılan analizdir. Dinamik kod analizi ise run time anında yapılan analizdir.

SonarQube Pipeline (Turkcell Standart DevSecOps Pipeline)

SonarQube CI/CD Pipeline’larına entegre edilerek kod kalitenizi arttırmanız mümkündür. CI akışınızda geliştirilen kod, bir önceki veya daha önceki kodlarınızla statik kod karşılaştırması yaparak Production(Canlı) ortamınıza gidecek olan kodun kalitesini arttırmanızda önemli bir rol oynayacaktır. SonarQube üzerinde projelerinizin kalitesi harf derecelendirmesi ile yapılmaktadır. Yazılım kalitesi söz konusu olduğunda bu kaliteyi kodunuzun performansı, güvenliği, sağlamlığı ve bakımı olarak sınıflandırabiliriz.

SonarQube kendi içerisinde tanımlı kural setleri bulunmaktadır. Bu kural setleri yazılım diline göre gruplara ayrılmaktadır. Uygulamanın versiyonu güncellendiğinde bu kural setlerinde değişiklik meydana gelebilir. Kural setlerinin referans alındığı başlıca kurumlar vardır. Bunlar; CISQ (Consortium for IT Software Quality), CWE (Common Weakness Enumeration) ve OWASP (Open Software Security Community) olarak örneklendirilebilir.

SonarQube Source Kodunuzu analiz etme aşamasında, Architecture Design, Clean Code, Unit Tests, Coding Standarts, Duplicated Code, Complex Code ve Potential Bugs yöntemlerini kullanmaktadır.

Community versiyonu bir çok dili desteklemektedir. Bu dillere Java,C#, Pyhton, PHP, HTML, CSS, XML, JavaScript, TypeScript, CloudFormation, Terraform, Kotlin, Ruby, Go, Flex ve Scala örnek verilebilir. Mobil yazılım dillerinde geliştirme yapmak istiyorsanız IOS ve Swift için SonarQube’un develop veya daha üst seviyelerdeki lisansını satın almanız gerekmektedir. Fakat Sonar kullanıcıları Jenkins üzerinde bazı plugin’ler ile bu sorunu bir nebze de olsa aşmaktadır.

Kullanılan versiyona bağlı olarak yazılım dillerinin kural setleri tanımlı olarak gelmektedir. Uygulamanın versiyonlarına bağlı olarak bu sayılar değişmektedir. Kural setlerinin çoktan aza doğru sıralanmış hali aşağıdaki gibidir.

Kural Setleri (https://community.sonarsource.com/)

SonarQube uygulaması Kaynak kodunuzdaki hatayı size gösterirken aynı zamanda çözümü konusunda da yönlendirmede bulunmaktadır. Aşağıdaki örnekte yakalanan bir güvenlik açığının riski hakkında bilgi ve çözümü hakkında yönlendirme bulunmaktadır.

Çözüm Önerisi(Turkcell SonarQube Örnek Proje)

SonarQube üzerinde kendinize veya şirketinize ait profil bilgileri tanımlayıp şirketinize bir kültür yaratarak buna bağlı taramalar yapılabilmektedir. Kaynak kod içerisinde tarama esnasında, taramaya dahil olmayıp pas geçilecek özel veya büyük boyutlu dosyalar varsa bunları exclude (hariç tutup) edip tarama kalitenizi arttırabilirsiniz. Gate’ler üzerinde test coverage değerlerine bağlı olarak akışı devam ettirebilir veya sonlandırabilirsiniz.

Projelere ait ekranda yer alan Bugs, Code Smells, Debt, Security Hotspot, Vulnerability, Coverage, Dublication ve Maintainbility değerleri incelenerek Kaynak kod daha kaliteli ve güvenli bir hale getirilmektedir.

SonarQube Overall Code(Turkcell Örnek Proje)

Yukarıdaki örnek proje ekranında bulunan kavramlar Turkcell Core DevOps ekibi olarak aşağıdaki şekilde yorumlanmaktadır;

Bugs: Taranan kod içerisinde çalıştığı zaman soruna yol açabilecek, proje içerisinde düzeltilmesi gereken kod ve kod parçalarıdır.

Code Smells: Kodunuzun devamlılığı için yapılması gereken düzeltmeler, alınması gereken aksiyonları belirtmektedir. Kodunuz geliştirmeye devam edildikçe kodun okunabilirliği ve bakım maliyeti artacaktır. Bu sebeple kokuşmuş kod olarak çevrilen kodların temizlenmesi çok önemlidir.

Debt: Code Smell’lerin temizlenmesi için yaklaşık adam/gün cinsinden zaman maliyetini gösterir. Temizliğin tamamlanması için yaklaşık olarak ihtiyaç duyulan efora işaret etmektedir. Minimum tutulmasında fayda bulunmaktadır.

Security Hotspot: Kontrol edilmesi gereken varsayılan güvenlik bulgularına işaret etmektedir. Güvenlik açıklarının önüne geçmek için review (gözden geçirme) şarkı koşarak güvenlik açıklarının kapatılması hedeflenmektedir.

Vulnerability: Güvenlik zafiyetine sebep olacak kod parçacıklarını belirtmektedir. Buradaki güvenlik zafiyetleri arka kapı oluşturabileceği gibi, müşteri verilerinin sızmasını da engellemektedir. Örneğin; debug modda alert olarak gösterilen hata, production ortamda hassas verilerin gösterilmesi riski taşıdığı için zafiyet olarak adlandırılmaktadır.

Coverage: Kodunuzun yüzde kaçının unit teste tabi tutulduğunu ve test edildiğini göstermektedir. %0 ve kırmızı olarak belirtilen değer, unit test yazılmadığını ifade etmektedir.

Duplications: Projenizdeki tekrar eden kod satırlarının toplam kod satırına oranını ifade etmektedir. 20.000 satır kod için %10 olarak belirtilen değer 2.000 satırlık tekrarlı koda işaret etmektedir. Orta ve büyük ölçekli projelerde bu oran daha da artmaktadır ve kodun kalitesi için düşük tutulması gerekmektedir.

Quality Gate: Projelerin SonarQube taraması sonucunda başarılı mı yoksa başarısız mı olduğuna karar vermek için Quality Gate kullanılmaktadır. Bu Gate yaklaşımı ile başarısız olan projelerin paket çıkması veya deployment olması kesilebilir. Bu sayede kalitesiz kod tekrar geliştirilmek üzere geri gönderilir.

SonarQube Görselleştirme

SonarQube, projeleri görselleştirmek ve daha iyi takip edebilmek için Prometheus ve Grafana entegrasyonları kullanılmaktadır. Prometheus içerisinde eklenen Target’lar SonarQube projelerini takip etmektedir.

Turkcell Örnek Prometheus Target

SonarURL/api/prometheus/metrics üzerinden takip edilen projeler Grafana ile entegre edilmektedir. Bu entegrasyon sonrası Grafana üzerinden Projelere ait tüm verilere erişilebilmektedir. Başlıkların altındaki değerlere eklenen standart linkler sayesinde tıklanan değerler üzerinden SonarQube ortamında ilgili projenin Bugs, Code Smells, Debt ekranlarına yönlendirme sağlanabilmektedir.

Turkcell Örnek Grafana Ekranı

--

--