Makale Özeti

Visual Studio Team System ile Yazılım Süreç Yönetimi makale serisinin, 5. Makalesi, yazılım geliştiricilere daha kaliteli kod geliştirmek için sunulan araçlar hakkındadır.

Makale

 

VISUAL STUDIO TEAM SYSTEM (VSTS) İLE

YAZILIM SÜREÇ YÖNETİMİ

Bölüm 5: Yazılım geliştirici araçları

04.09.2007

 

 

 

Makale özeti

 

Visual Studio Team System tanıtımı ile ilgili makale serisinin beşincisi, yazılım geliştiriciler tarafından kullanılacak, geliştireceğimiz yazılımın daha kaliteli olmasını sağlayacak araçlar hakkındadır. 

 

Yazılım geliştiriciler için VSTS sürümü ile gelen, statik ve dinamik kod analizleri, birim testleri (Unit Testing), test edilen kod kapsamı (Code coverage) gibi konularda bilgi sahibi olacağız. Yazılım geliştiricileri yakından ilgilendirdiği için, Sınıf tasarım aracı için de kısa bir bilgi sunmaya çalışacağız.

 

İçindekiler

 

Yazılım geliştiriciler için VSTS

Sınıf tasarım aracı (Class Designer)

Statik kod analizi

Dinamik kod analizi

Birim testleri (Unit testing)

Değerlendirme

Kaynaklar

 

Yazılım geliştiriciler için VSTS

 

Yazılım geliştiriciler, tüm projelerde anahtar role sahipler. Yazılım sistemlerinin karmaşıklaşması ile, daha organize proje ekipleri kurulana kadar, yazılımcılar kendi başlarına çalışıyorlardı. Tüm süreçten sorumlu idiler. Yazılım geliştirme sürecinde uzmanlaşma gerçekleşti. Yazılım mimarlarından, test uzmanlarına kadar bir çok rol projeye dahil oldu. Proje ekibindeki herkes, sorumlu olduğu bölümde daha derinleşmeye firsat buldu. En önemli hedef ise, süreç içindeki uzmanlaşma ile, daha kaliteli yazılım geliştirebilmek. Yazılım geliştiriciler için VSTS sürümü ile, statik kod analizi, performans yönetimi,kod kapsamının belirlendiği ve tam entegre birim testleri alt yapısı (Framework)  araçları bu hedefe götürecek araçlar.

 

Visual Studio çok yaygın kullanılan ve geniş özellikleri olan bir yazılım geliştirme ortamı. Ağırlıklı olarak yazılım geliştiriciler tarafından kullanılıyordu. Yani Visual Studio ürün ailesine baktığımızda, daha çok yazılım geliştiriciler için araçlar sunulmuştu. Yazılım geliştiriciler için VSTS sürümünü, Visual Studio sürümü ile birlikte değerlendirmekte fayda var. Visual studio normal ihtiyaçlara cevap verecek tarzda ilerlerken, Yazılım Geliştiriciler için VSTS sürümü ile daha çok kod kalitesini yükseltmeye yönelik araçları sunulacaktır. Bu ürünler zaman içersinde, ticari bakış açısı ile de birleştirilebilir.

 

Birim testleri alt yapısı, Test uzmanları için VSTS sürümü ile de paylaşılmış. Bu testlerin kim tarafından hazırlanacağı ve çalıştırılacağı belirlenmesi gereken bir nokta.

 

 

 

Sınıf tasarım aracı

 

Sınıf tasarım aracı, sınıfların dikdörtgen şekiller ile gösterildiği ve ilişkilerin belirlendiği bir grafik modelleme aracıdır. Bu şekiller içinde, sınıfa ait özellikler, metodlar gösteriliyor. Daha geniş bir kullanımı olduğu için Visual Studio sürümleri (Standart,Professional, Visual Studio Tools for Office) ile birlikte geliyor. Yani VSTS’nin rol bazlı araçları arasında değil. Yazılım geliştirme sürecindeki önemine istinaden burada biraz açıklamayı uygun gördüm. Microsoft modelleme vizyonu içersinde yer alan DSL (Domain Specific Languages) alt yapısı ile geliştirilmiş bir araç. (Yazılım mimarları için VSTS bölümünde açıklanan araçlar ile, aynı alt yapı üzerine bina edilmiş.)

 

Sınıf tasarım aracının en önemli özelliği, diagram (model) ve kod dosyaları arasında senkronizasyonu sağlaması. Diagram veya kod üzerinde yapılan değişiklikler diğer dosyaya yansıtılmakta ve bu şekilde, diagram ve kod dosyaları arasında güncelleme zorluğu aşılmış. Koddan model üretilmesi de (Reverse Engineering) mümkün. UML Sınıf diagramlarının, Visual studio ortamına taşınması için, bu yöntemi takip edebiliriz. Aşağıdaki resimde, örnek bir sınıf diagramı sunulmuştur :

 

 

Resim13.1: Sınıf tasarımı

 

Sınıfların detaylarını izlemek ve üzerinde daha kolay işlem yapabilmek için, sınıf detay penceresi geliştirilmiş. Aşağıdaki resimde, sınıf detay penceresi sunulmuştur :

 

 

Resim13.2: Sınıf detay penceresi

 

Statik Kod analizi

 

Statik kod analizi, kodun geliştirilme aşamasında belirli bazı kurallara göre analiz edilmesi işlemidir. .NET framework yazılması süresinde kullanılmış, FXCOP üzerine bina edilmiş. .NET ortamında olmayan kodlar (Unmanaged) Prefast aracı kullanılmaktadır. Bu analiz işleminde, tanımlı olan kurallara uymayan bölümler tespit edilmektedir. Derlenmiş kod üzerinde çalışıyor. Bilinen hatalar ve zayıf programlama tekniklerini çözmek hedeflenmiş. Kurumsal yazılım geliştirme aşamasındaki isimlendirme standartlarının yerleştirilmesi için de kullanılabilir.

 

.NET ile geliştirilmiş kodun analizi için, kod analiz işleminin aktif hale getirilmesi gerekiyor. Aşağıda, bu işlemin aktif edildiği ve iş kurallarının yönetildiği ekran görüntüsü sunulmuştur :

 

Resim14: Statik kod analizi özelliğinin aktif hale getirilmesi.

 

Bu seçenek ile, bir çok kural hali hazırda tanımlanmış. Kodlama standartlarından, güvenlik ile ilgili hususlara kadar birçok kural var. Kurallar aktif hale getirilmiş. Projeye uymayan kurallar pasif hale getirilebilir.Özel durumlar için yeni kurallar geliştirilebilir.İş kuralına uymayan bir durum tespit edildiğinde, duruma göre bir uyarı mesajı veya hata mesajı verilmektedir. Bu hatalar üzerinden, iş takip nesneleri (Work Items : Bugs,Tasks) oluşturulabilmektedir.

 

Değiştirilen kodun, kaynak kod veritabanı yüklenmesi (Check-In) işleminde, iş kuralı olarak kod analizi yapılması istenebilir. Ayrıca, ürünleştirme (Build Process) aşamasında da çalıştırılabilir.

 

Dinamik analiz

 

Kod geliştirilip, test edildikten ve bilinen hatalar için kontrol yapıldıktan sonra, kodun çalışma zamanı ile ilgili bilgi toplama ve değerlendirme (profiling) zamanı gelmiştir. Kodun nasıl çalıştığı ve zamanın nerelerde harcandığı tespit edilebilmektedir. Yazılım geliştiriciler tarafından takip edilen, uygulamanın performansına bakan önemli bir işlem. Çoğu zaman gerçek ortamda karşımıza gelen performans problemlerine, daha önce bakabilme imkanını sağlamaktadır. Değerli yazılım geliştirme vaktimizi, nerede harcamamızı belirlememize imkan sunmaktadır.

 

Uygulamaların çalışma esnasında performansı ile ilgili bilgileri toplamak için 2 tane yöntem var. Bunlar,  Örnekleme (Sampling) ve Daha doğru ölçme (Instrumentation) teknikleridir.

 

Örnekleme tekniğinde, belirli periyotlarda uygulama analiz edilip, uygulamanın performansı ile ilgili bilgi toplanıyor. Hangi fonksiyonların çalıştırıldığı belirlenmeye çalışılıyor. Uygulama durdurulduğunda, bu örnek veriler üzerinden bir rapor üretiliyor ve değerlendirme yapılıyor. İstatiksel bir yaklaşım olması sebebiyle, tam belirleyici değil.

 

Daha doğru ölçme tekniği (Instrumentation) tekniği ile, uygulama hakkında kapsamlı bilgi alınabiliyor. Bunun için, prosedür ve metod çağırılan yerlere ek kodlar konuluyor. Uygulama çalıştığında, bu fonksiyonlar belirleyici performans ölçüm parametrelerini topluyorlar. Bir metodun çalışma süresi, çağırılma sıklığı gibi değerler toplanıyor. İşlem durdurulduğunda, uygulama, toplanan değerler üzerinden rapor üretiliyor. Bu yöntem, eklenen satırlardan ve toplanan bilgilerden dolayı uygulama performansını azaltacaktır. Aşağıda, bu yöntemin sonuçlarını gösteren bir ekran görüntüsü sunulmuştur :

 

Resim18: Instrumentation profiling yönteminin sonuçları

 

Kötü performans çok pahalıdır. Geliştirme sürecinde, üzerinde çokça durulması gerekiyor.

 

Birim testleri (Unit Testing)

 

Geliştirilen kodun çalıştığından emin olmak için bir test alt yapısı gerekmektedir.  Bunu sağlamanın bir yolu, uygulamanın (fonksiyonlarının) çalıştırılması için, kodların üretilmesi ve gerek duyulduğunda  biraz daha kod geliştirerek, test projeleri oluşturmaktır. Uygulamanın her biriminin test edilmesi hedeflendiği için, birim testleri olarak adlandırılmış. Bu testlerin en önemli avantajı, her türlü değişiklikte tekrar tekrar çalıştırılabilir olması. En azından, fonksiyonel seviye de hataları yakalamak mümkün. Birim testlerinin proje bazlı takip edilmesi, üretilmesi ve çalıştırılması için bir alt yapı (Framework) sağlanmıştır.

 

Temel olarak birim testleri; iş fonksiyonlarının doğru çalıştığını, beklenen değerlerin elde edilmesi için test durumlarının tasarlamasını kapsıyor. Birim testleri ile metod seviyesinde test gerçekleştirildiği için, yazılım geliştiricinin sorumluluğunda gözüküyor. Araçlar Test uzmanı için VSTS sürümünde de yer alıyor.

 

VSTS kod üzerinden birim testleri ve birim test projelerini üretme imkanı sağlıyor. Sağ fare tuşu ile, “Birim test üret” kolaylığında. Takip edilen adımlarda, test projesi oluşturulup, birim test ile ilgili tüm kod yapısı üretilmektedir. Yazılım geliştiriciler, test kod ekleyerek işlemi detaylandırabilirler.

 

Test yönetim ekranından, birim testleri seçilerek çalıştırılabilir, test listeleri olarak organize edilebilir. Aşağıda, örnek bir Test Yönetim ekranı sunulmuştur :

 

Resim15: Test yönetim ekranı

 

Çalıştırılan testlerin sonuçları, bir pencerede (Test Results Window) gösterilmektedir. Test sonuçları üzerinden, iş takip nesneleri (Work Items : Bugs,Tasks) oluşturulabilir.

 

Test edilen kod kapsamı

 

Birim testlerin çalıştırılması ile kodun hangi bölümlerinin kapsam alanına girdiğinin tespit edilmesi işlemidir. Bu sonuçlar, tüm kodun testlerinin gerçekleştirilebilmesi için, yeni yazılması gereken birim testleri hakkında bilgi sunmaktadır. Test uzmanları için VSTS sürümü de bu özelliği desteklemektedir.

 

Aşağıdaki resimlerde, analiz işleminin sonuçları gösterilmektedir. Yeşil ile gösterilenler test işleminden geçenler, kırmızı olanlar hiç bir şekilde çalıştırılmayan kod satırlarını göstermektedir. Kod içersinde takip edilmeyen yolların da bu şekilde tespiti yapılabilir. Mesela, If cümleciği test edilirken, else bölümünün test edilmediği takip edilebilir. Aşağıda, kod kapsamı ile ilgili örnek ekranlar sunulmuştur :

 

Resim16: Kod penceresinde, test edilen kodun kapsamının gösterilmesi.

 

Click here for larger image.Resim17: Kod kapsamı ile ilgili istatistikler

 

 

 

Değerlendirme

 

Yazılım geliştirme sürecince, daha çok özellik yetiştirmek gayesiyle, kodumuzun kalitesi üzerinde duramıyoruz. Yazılım geliştirme aşamasında kullanacağımız bu araçlar sayesinde, yazılımımızdaki kaliteyi artıracağımız gibi, bakım süresince kazanacağımız artı zamanlar ile yeni versiyondaki özelliklere daha kolay eğilebiliriz.

 

Daha erken safhalarda tespit edilen problemin, çözüm maliyetinin çok daha düşük olduğunu ve kalitenin yazılımcı ile başladığını unutmayalım.

 

Ertan Deniz

Derya Bilgi Teknolojileri

Ertan.Deniz@deryabilgi.com

www.deryabilgi.com

 

Kaynaklar

 

Kaynaklar, bu serinin ilk makalesinde (Bölüm1:Giriş ve bileşenler), ortak yayınlanmıştır.

Bunlara ek olarak ;

 

 

1.      Delving into Visual Studio 2005 Team Edition for Software Developers

 

Brian A. Randell,Senior Consultant,MCW Technologies

 

2.      Building Robust and Reliable Software

 

Jason Anderson, Microsoft