3. Static Code Analysis
Code review, akıl yordamıyla farkedilebilecek hataları
ya da iyileştirmeleri tespit amaçlı yapılır.
Static code analysis, standartlara oturtulabilecek
durumları tespit etmeye ve ileride karşılaşacağımız
problemlerin sayısını düşürmeye yarar.
Static code analysis, otomatikleştirilebilir.
4. Static Code Analysis
Visual Studio 2010 üzerinde, bir proje için static code
analysis özelliğini aktif hale getirme
Kural setlerinin tanımlanması ya da kendi kural
setimizin oluşturulması
Proje üzerinde static code analysis çalıştırılması ve
sonuçların incelenmesi
Uyarı ya da hatanın giderilmesi
5. Static Code Analysis
Arka plandaki tüm işi FxCop yapmaktadır.
Microsoft tarafından geliştirilmiştir.
IDE içerisinde yapılabilen herşey ve daha fazlası FxCop
ile command line üzerinden yapılabilir.
Reflection yerine, Introspection tekniğini
kullanmaktadır.
Introspection engine, mevcut kurallar ve custom rule
geliştirmeye yarayan tüm araçlar [VS]/Team
Tools/Static Analysis Tools/FxCop klasörü içerisinde
bulunmaktadır.
7. Code Metrics
Yazdığımız kodun yönetilebilirliği hakkında bazı
bilgiler edinmemizi sağlar.
Maintainability Index
Cyclomatic Complexity
Class Coupling
Lines of Code
Depth of Inheritance (*)
Otomatik üretilen kodlar bu değerlendirme dışında
kalır.
8. Maintainability Index
0 – 10 arası düşük yönetilebilirlik
10 – 20 arası orta yönetilebilirlik
20 – 100 arası yüksek yönetilebilirlik
9. Cyclomatic Complexity
Kodun yapısal karmaşıklığını ifade eder.
Program içerisinde oluşan farklı pathlerin
hesaplanması ile bulunur.
if-else, switch, while, for, foreach gibi kontrol
statementların her birisinin içerisindeki her mantıksal
kontrol, +1 karmaşıklık ifade eder.
Kod ne kadar karmaşık ise, o kod için yazılacak unit
test sayısı da o kadar fazla olmalıdır.
11. Depth of Inheritance
Rakam büyüdükçe, anlaşılırlık zorlaşmaktadır.
Namespace ve proje bazındaki değer, içerisinde
barındırdığı en derin hiyerarşiye eşittir.
13. Class Coupling
Primitive tipler (int, double vs) ve built-in yapılar
(string, object vs) için hesaplanmaz.
İyi dizayn edilmiş bir yazılım, düşük class coupling
değerlerine sahip olmalıdır.
Yüksek class coupling değerlerine sahip yazılımı,
içerdiği bağımlılıklardan dolayı başka yerlerde
kullanmak çok zordur.
14. Lines of Code
Yaklaşık kod satırı sayısını ifade eder.
Kod dosyasındaki sayıyı değil, IL kodu içerisindeki
satır sayısına göre hesaplanır.
Boşluk, comment, parantez, tanımlama (değişken,
method, namespace) bu sayıya dahil edilmez.
Bir sınıf ya da method üzerinde kod satırının yüksek
olması, o parçanın çok fazla iş yaptığına ve bölünmesi
gerektiğine işaret eder.
15. Code Metrics
Her bir kod metriği için, statik kod analizi kuralı
mevcuttur. Bu kurallar, proje için aktif hale getirilerek
her build esnasında kontrol edilmesi sağlanabilir.
17. Profiling
Profiling; bir uygulamanın belli davranışlarının
izlenmesi ve bazı metriklerin toplanması sürecine
verilen isimdir.
Genellikle, yavaş çalışan ya da yüksek bellek tüketen
uygulamaları incelemek için kullanılır.
Genellikle hotspotları tespit etme amacıyla kullanılır.
Hotspot; bir uygulamada uzun süre ya da sıklıkla
çalışan kısımlara verilen isimdir.
18. Visual Studio Profiler
Performance Session
Sampling vs Instrumentation
Sampling; belli aralıklar ile uzun süre boyunca rastgele
veri toplama ve bu veriyi inceleme suretiyle yapılan
profiling türüdür.
Instrumentation; performans problemi yaşanan hedef
noktalar için kısa süreli, fakat tüm veriyi toplama ve
inceleme türüdür.
Instrumentation esnasında, hedef assemblyler
üzerinde değişiklik yapılır.
19. Profiling Yaklaşımı
Hangi tür yaklaşım sergileneceği (sampling vs
instrumentation) ve bu esnada hangi verilerin
toplanacağı belirlenir.
Uygulama çalıştırılarak veri toplanır
Toplanan veri analiz edilir
Tespit edilen noktalardaki problemler giderilir.
Değiştirilen parça için tekrar profiling çalıştırılır ve
değişiklik olup olmadığı tespit edilir.
Toplanan veriler karşılaştırılarak performans artış
raporu hazırlanır.
22. Dikkat Edilmesi Gerekenler
Instrumentation uygulanan projede aynı zamanda
code coverage açık olmamalı.
ASP.NET 2.0 ve üzerinde profiling çalıştırılabilir.
Remote makinalar üzerinde profiling çalıştırılamaz.
Profile edilecek uygulama ile aynı yerde çalıştırılması
gerekir.
Profile edilecek makinada Visual Studio kurulmak
istenmiyor ise, command line araçları kullanılabilir.
Performance session, başka bir ortamda çalıştırılamaz.
CPU ve ortam spesifik değerler barındırmaktadır.
24. IntelliTrace
Test esnasında karşılaşılan bir hatanın, developer
ortamında tekrar üretilmesi mümkün olmayabilir.
Genellikle developer, «bu benim makinamda çalışıyor»
diyerek bu bugı sonlandırır. (no repro)
Eğer hata hakkında detaylı bir log bulunmuyor ise, bu
hata sonsuza kadar tester-developer arasında gidip
gelebilir.
25. IntelliTrace
Visual Studio debugging esnasında, breakpoint
koyarız, adım adım ilerleyerek değişkenlerin
durumunu ve uygulamanın davranışını izleriz.
Hatayı yakaladığımız, fakat yanlışlıkla es geçtiğimiz
zamanda, geri dönmek mümkün olmayabilir, bu
durumda debugging işlemini en baştan yapmak
zorunda kalırız.
26. IntelliTrace
IntelliTrace, çalışan uygulama hakkında arka planda
bazı veriler toplar.
Bu veriler, uygulamanın çalışma esnasında hangi
veriler ile hangi pathlerden geçtiği gibi bir çok bilgi
barındırabilir.
Böylelikle, geçmişte yaşanan bir hatayı şu anda, ileri-
geri oynatarak debug edebiliriz.
Normal debug esnasında erişemediğimiz noktalar
hakkında da bilgi toplar. (file operasyonları, registry
operasyonları vs)