Upload
ugur-tilikoglu
View
801
Download
1
Embed Size (px)
DESCRIPTION
Visual Studio Developer Tools eğitiminden sonra, şirket içerisinde yaptığımız özet sunum
Citation preview
Visual Studio Developer Tools
Tema Mağazacılık BT Yazılım Geliştirme Departmanı
İçerikStatic Code AnalysisCode MetricsProfilingIntelliTrace
Static Code AnalysisCode 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.
Static Code AnalysisVisual 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
Static Code AnalysisArka 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.
Static Code Analysis
Sorular???
Code MetricsYazdığımız kodun yönetilebilirliği hakkında
bazı bilgiler edinmemizi sağlar.Maintainability IndexCyclomatic ComplexityClass CouplingLines of CodeDepth of Inheritance (*)Otomatik üretilen kodlar bu değerlendirme
dışında kalır.
Maintainability Index0 – 10 arası düşük yönetilebilirlik10 – 20 arası orta yönetilebilirlik20 – 100 arası yüksek yönetilebilirlik
Cyclomatic ComplexityKodun 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.
Depth of InheritanceBase class’ı her extend eden seviye için bir
artar
Depth of InheritanceRakam 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.
Class CouplingBir sınıfın bağımlı olduğu her sınıf için bir
artar
Class CouplingPrimitive 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.
Lines of CodeYaklaşı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.
Code MetricsHer 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.
Code Metrics
Sorular???
ProfilingProfiling; 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.
Visual Studio ProfilerPerformance SessionSampling vs InstrumentationSampling; 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.
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ırToplanan veri analiz edilirTespit 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.
Profiling TipleriMemory profilingConcurrency profiling
Profiling TipleriWindows uygulamalarıASP.NETUnit TestJavaScript
Dikkat Edilmesi GerekenlerInstrumentation 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.
Profiling
Sorular???
IntelliTraceTest 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.
IntelliTraceVisual 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.
IntelliTraceIntelliTrace, ç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)
IntelliTraceProduction ortamlarında KULLANILAMAZ.Sistem izleme amaçlı KULLANILAMAZ.
IntelliTrace
Sorular???