Skip to main content
search

Kod Kalitesi ve Kod Analizi yazı dizimizin bu haftaki sayısında Dinamik Kod Analizi konusunu ele alacağız. Önceki haftalarda yayınlanmış yazılarımıza ulaşmak için linkleri takip edebilirsiniz: Static Code Analysis, X-Driven Development, Clean Code.

Dinamik Kod Analizi nedir? Ne işe yarar?

Dinamik kod analizi, yazılımın çalıştırılarak (execute edilerek) method, kod satırı gibi seviyelerde kontrol edilmesi aktivitesidir. Dinamik analiz birincil olarak, özellikle run-time esnasında oluşabilecek hataların tespitini hedeflemektedir. Yazılım üzerinde, bulunduğu donanımın göstereceği performans veya belirli girdiler alması sonrasında oluşacak güvenlik açıkları bu konudaki iyi örneklerdendir.

Dinamik Kod Analizi ne zaman gerçekleştirilmelidir?

Dinamik analiz aktiviteleri, kodun geliştirilmesinin hemen sonrasında statik analiz kontrollerinin yapılması ve derlenmesi ardından gerçekleştirilmelidir. Zira, statik analizler ile dinamik analizde tespit edilebilecek sorunların daha basit bir şekilde çözülmesi mümkün olabilir.

Örneğin, yazılmış yüksek karmaşıklığa sahip bir kod bloğu (O^3 diyelim) çalıştırılmadan önce olası performans problemleri tespit edilerek çözümlenebilir. Özetle, çalıştırıldıktan sonra yapılacak, görece olarak daha zorlu profiling/load generation işlemlerine gerek kalmadan hatalar ortadan kaldırılabilir. Ancak bu durum, tüm hataların statik analiz ile tespit edilmesinin mümkün olabildiği anlamına gelmemektedir. Bu aşamada dinamik analiz ile beraber kullanımı oldukça faydalı olacaktır.

Profiling nedir?

Bahsettiğimiz gibi dinamik analiz ile farklı problemlerin kök sebep analizi yapılabilir. Bunlardan en sık gerçekleştirilenlerinden biri ise “Dinamik Performans Analizi”dir.

Yazılımlar, performans açısından analiz edilmek için Profiling adı verilen işleme tabi tutulurlar. Profiling, farklı seviye ve şekilde yapılabildiği üzere, esas olarak kodu enstrumante edilerek, oldukça düşük seviyede (method veya kod satırı gibi) analiz edilmesi çalışmasıdır. Genel yaklaşım mantığı aşağıda “Before” ve “After” olarak belirtilen kod parçalarında görülebilir.

Before

public class MyClass { public Object doSomething() { // do something } }

After

public class MyClass {

   private static final MethodHandler handler = HandlerFactory.getHandler(...);

   public Object doSomething() {

       handler.onMethodStart(this);

       long startTime = Clock.getTime();

       try {

           Object result = real_renamed_doSomething(); // call your method

           handler.onMethodFinish(this, Clock.getTime() – startTime, null);

       } catch(Throwable e) {

           handler.onMethodFinish(this, Clock.getTime() – startTime, e);

       throw e;

       }

   }

   public Object real_renamed_doSomething() { // do something }

}

Dinamik Analiz Araçları: Performans

Performans amaçlı dinamik kod analizi için Java ekosisteminde kullanılabilecek, önde gelen araçlar aşağıdaki gibidir.

  • Visual VM
  • JProfiler
  • Java Mission Control
  • YourKit
  • NetBeans Profiler
  • JProbe
  • XRebel

Bunlar arasından VisualVM ve JProfiler en sık kullanılan iki uygulama olarak öne çıkmaktadır.

Visual VM

Bir Java uygulamasını çalıştırıp, ayağa kaldırdıktan sonra projemiz Visual VM’de gözükmektedir. Monitör bölümünde anlık olarak değişen grafikler bulunmaktadır. CPU, Classes, Threads, Heap ve Metaspace gibi bilgilendirmeler verilmektedir.

JProfiler

Bu analiz aracı da genel itibariyle Visual VM aracıyla benzerlik göstermektedir. Görselde de görüldüğü üzere Memory, Heap, CPU, Threads ve Databases gibi alanlarda kodları analiz edip, sonuçları göstermektedir.

Berk Dülger
Keytorc – Kıdemli Danışman

Mehmet Tanlak
Keytorc – Yazılım Test Otomasyon Mühendisi – SDET

Close Menu