Performans

Android Projelerde Kod Analiz Yöntemleri

Yazılım geliştirme sürecinde kod analizi yaparak kodlar içerisindeki hataları ve güvenlik açıklarını bulma, kod kalitesini artırma gibi adımları uygulamak projenizi iyileştirmek için çok önemlidir.

Bu makalede Android projelerinde kod analiz ve kontrollerini otomatikleştiren yapılardan bahsedip, hata ve güvenlik açıklarını bularak kod kalitesinin nasıl arttırılacağını anlatacağım.

Yazılım Kod Kontrol Türleri

Kod analizi 2 farklı türde yapılır.

  • Uygulama çalıştırılmadan yapılan Statik kod analizi
  • Uygulama çalışırken yapılan kod analizi

Android uygulama geliştirmede statik olarak yazılan (statically-typed) Java ve Kotlin adındaki derlenmiş dilleri kullanırız.  Bu dillerin avantajı; kodu çalıştırmak zorunda kalmadan analiz yapılmasını sağlamalarıdır. Bu tür analizlere statik denir.

Kod Analiz Yöntemleri

Checkstyle

Checkstyle,  yazılımcıların Java dili standardına uygun kodlama yapıp yapmadığını kontrol etmek için kullanılan çok güçlü ve esnek bir çözümdür. Java kodunu kontrol etme sürecini otomatikleştirir. Bu yapı, Java kodlama standardını uygulamak isteyen projeler için idealdir. Checkstyle eklentisi, projenizin Java kaynak dosyaları üzerinde Checkstyle kullanarak kalite kontrolleri gerçekleştirir ve bu kontrollerden raporlar oluşturur.

Ktlint

ktlint, sorunu otomatik düzeltme yaparak çözmeniz yanında bu yapıya kendi kurallarınızı ekleyebilmenizdir. Böylece yazılımcı sorunu kolayca çözebilir. Dezavantajı sadece Kotlin dilinde kullanabilmektedir. XML dosyaları için kurallar yazmanıza müsaade etmemektedir.

Ayrıca sorunları Android Studio’da görselleştirerek incelemek istiyorsanız bir eklenti yüklemeniz gerekir. Bunun için dilerseniz https://plugins.jetbrains.com/plugin/15057-ktlint-unofficial-  eklentisini kullanabilirsiniz.

Android Lint Tool

Android Lint, Android projelerinizi analiz etmek için Android ekibinin resmi çözümüdür. Projedeki herhangi bir dosyayı kontrol edebilirsiniz: Java, Kotlin, Gradle, XML vb. Bu aracın avantajı, analizin yalnızca tek bir dosyada değil, aynı proje içindeki dosyalar arasında da gerçekleştirilebilmesidir.

Örneğin, XML kaynak dosyalarınızda kullanılmayan ad alanları içeriyorsa, bu yer kaplar ve gereksiz işlemeye neden olur. Kullanımdan kaldırılan öğelerin kullanımı veya target API sürümleri tarafından desteklenmeyen API çağrıları gibi diğer yapısal sorunlar, kodun doğru şekilde çalışmamasına neden olabilir. Lint, bu sorunları temizlemenize yardımcı olabilir.

Android Lint, kendi kurallarınızı oluşturmanıza ve bunları AAR arşivinin bir parçası olarak kitaplıklarınızla kolayca paketlemenize olanak tanır.

Android studio yazacağınız komut satırı sayesinde Lint Tool aktif edebilirsiniz. Detaylar https://developer.android.com/studio/write/lint linkinden ulaşabilirsiniz.

detekt

Kotlin için bir statik kod analizi çözümü istiyorsanız, tercihiniz Detekt. Yardımcı program sürekli gelişiyor, mevcut kontroller iyileştiriliyor ve yeni kontroller ekleniyor. Herhangi bir denetimi etkinleştirebilir/devre dışı bırakabilir ve kendiniz için özelleştirebilirsiniz. Ayrıca kendi kurallarınızı yazıp dağıtabilirsiniz.

Detekt’i Android Studio/IDEA ile entegre etmek için Detekt eklentisini kullanabilirsiniz.

Sonarqube

Size birçok çözümden bahsettim. Hepsini yönetmeniz ve kaliteyi izlemeniz çok zor olabilir. Bu nedenle bir tür yüksek kaliteli toplayıcıya ihtiyacınız var. Böyle bir araç, kendi kurallarına ek olarak, diğer araçların raporlarını anlayabilen ve bunları tek bir proje raporuna ekleyebilen SonarQube‘dir. Kendi kuralları harika yazılmış ve Java’da Android uygulamalarının geliştirilmesi sırasında, sorunların nedenlerinin ve nasıl düzeltileceğinin yüksek kaliteli açıklaması sayesinde çok şey öğrendim.

Sonarqube, Android geliştiricileri için yeterli olacak ücretsiz bir sürüme sahip ancak bunu kendi sunucunuzda kullanmanız veya buluttaki sürüm için ödeme yapmanız gerekecek. Bir Açık Kaynak projeniz varsa, bulut sürümünü kısıtlama olmaksızın kullanabilirsiniz – SonarCloud. Popüler Açık Kaynak projelerini analiz etmenin bir örneğini burada bulabilirsiniz.

Uygulamanın çalışma anında kullanılan kod analizi araçları

Uygulama çalışırken kodunuzu analiz eden yardımcı programlara geçiyoruz. Bunları yalnızca geliştirme sırasında etkinleştirmenizi şiddetle tavsiye ederim.

Android Strict Mode

StrictMode, uygulamanın ana iş parçacığında, yani UI iş parçacığında disk I/O  veya ağ erişimi gibi kodlama sorunlarını yakalamak için kullanılır. StrictMode, Android SDK’da Android 2.3’e kadar uzanan ve çeşitli kuralları etkinleştirmenize izin veren standart bir araçtır. Bir ihlal tespit edildiğinde ne olacağına karar verebilirsiniz. Örneğin, StrictMode.ThreadPolicy.Builder.penaltyLog() işlevini kullanarak, ihlalleri olduğu gibi görmek için uygulamanızı kullanırken adb logcat’in çıktısını izleyebilirsiniz.

LeakCanary

LeakCanary bir bellek sızıntısı tespit aracıdır. Temelde Heap bellek üzerinde kullanılan her bir nesnenin yaşam döngülerini takip ederek bir sızıntı düğüm grafiği oluşturmayı amaçlar. LeakCanary projeye dahil etmek ve sızıntı tespit günlüklerini izlemek için projenize kütüphanesini dahil etmeniz yeterlidir. Detayları https://square.github.io/leakcanary/getting_started/ linkinden ulaşabilirsiniz.

ANR-WatchDog

Bir Android uygulamasının UI iş parçacığı çok uzun süre engellendiğinde, “Uygulama Yanıt Vermiyor” (ANR) hatası tetiklenir. ANR uyarı penceresi, kullanıcıya uygulamadan çıkmaya zorlar.

Özellikle kullanıcının ANR diyaloğunu görmesi için hiç kimse uygulamanın yavaşlamasını istemez. ANR-WatchDog, ANR’lerin başınıza gelmemesini sağlar ve bu durumu Logcat’de yansıtır. Logcat’te bu tür sorunlar bulunursa, ayrıntılarla birlikte özel bir hata görüntülenecektir.

Projelerinizde sorun izlemeyi otomatikleştirme, kod kalitesi seviyesini koruma yöntemleriniz ve bunun için kullandığınız araçlar konularında farklı önerileriniz varsa yorumlarınızı bekliyorum.

Kaynak

https://developer.android.com/studio/write/lint
https://proandroiddev.com/automating-analyzing-of-code-in-android-projects-a60313569c53

Bülten
Bültene abone ol

Bültene abone olarak yeni makalelerimden haberdar olun.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir