Makale Özeti

Yazılım geliştirme sürecini denetlemek ve geliştirilen yazılım projesi ile ilgili olarak nicel değerler elde edebilmek, yazılım geliştirme sürecinin kalitesini arttırmak ve mevcut projelerin durumu ile ilgili olarak anlık verileri izleyebilmek, yazılım proje yöneticileri ve diğer proje paydaşları açısından önemli bir konu haline gelmekte. Artık birçok yazılım geliştirme takımı, yazılım konfigürasyon yönetimi, gereksinim yönetimi, proje yönetimi, sürüm çıkarma yönetimi, test yönetimi gibi gereksinimler için bilgisayar destekli yazılım mühendisliği araçlarını kullanıyor ve bu araçlar, yazılım geliştirme sürecinde verimliliği, kaliteyi ve performansı önemli ölçüde arttırıyor.

Makale

Giriş


Yazılım geliştirme sürecini denetlemek ve geliştirilen yazılım projesi ile ilgili olarak nicel değerler elde edebilmek, yazılım geliştirme sürecinin kalitesini arttırmak ve mevcut projelerin durumu ile ilgili olarak anlık verileri izleyebilmek, yazılım proje yöneticileri ve diğer proje paydaşları açısından önemli bir konu haline gelmekte. Artık birçok yazılım geliştirme takımı, yazılım konfigürasyon yönetimi, gereksinim yönetimi, proje yönetimi, sürüm çıkarma yönetimi, test yönetimi gibi gereksinimler için bilgisayar destekli yazılım mühendisliği araçlarını kullanıyor ve bu araçlar, yazılım geliştirme sürecinde verimliliği, kaliteyi ve performansı önemli ölçüde arttırıyor.

 Microsoft dünyasında, özellikle .NET teknolojileri kullanan yazılım geliştirme takımları, bütünleşik geliştirme ortamı olarak de-facto standart olan Visual Studio kullanıyor. Sunucu tarafında ise, konfigürasyon yönetimi anlamında VSS (Visual SourceSafe) kullanılıyordu ancak, Microsoft’un TFS (Team Foundation Server) ortamını sunması ile birlikte birçok yazılım geliştirme takımı, TFS’in sağladığı kaynak kontrol yönetimi yanı sıra, süreç yönetimi, sürüm çıkarma yönetimi, proje yönetimi araçlarını kullanmaya başladı. Microsoft tarafından sağlanan VSSDK sayesinde Microsoft iş ortakları ve diğer yazılım geliştirme ekipleri, VS ve TFS’in sağladığı geniş framework desteği sayesinde, TFS’in out-of-box sağlamadığı bir çok ara ihtiyacı karşılamaya başladılar. Örneğin, Türkiye’de Microsoft tarafından satın alınan ilk şirket olan devBiz firmasının sağladığı TeamPlain Web Access aracı, TFS’in out-of-box sağlamadığı gereksinim olan TFS sunucularına web üzerinden bağlanan bir web uygulaması geliştirerek, önemli bir açığı kapatmışlardı. Keza uluslararası arenada TFS’in sağlamadığı bir çok ara gereksinim, farklı firmalar tarafından sağlanmaya devam ediyor.

Bu noktada Codart olarak, TFS’in yine out-of-box sağlamadığı bir gereksinim olan, yazılım metriklerinin ölçülmesi ve bu değerlerin TFS veri ambarında saklanarak, yazılım geliştirme süreci içinde, proje paydaşlarına raporlanmasını sağlayacak dev \ efor isimli aracımızı 2007 Aralık ayında geliştirme başladık.

Problem Analizi


“Ölçemiyorsanız, kontrol edemezsiniz.” Bu cümle aslında birçok şeyi özetliyor. Karmaşıklık Ölçütü (Cyclomatic Complexity) metriğinin mucidi Thomas McCabe tarafından ortaya konan bu cümle, Karmaşıklık Ölçütünü anlattığı makalesinde, yazılım metriklerinin neden ölçülmesi gerektiğini ve bu değerlerin aslında ne anlattığını özetliyordu. Dolayısı ile yazılım metriklerinin ölçümü, özellikle büyük yazılım geliştirme ekiplerini yöneten proje liderleri tarafından bir ihtiyaç haline gelmiştir. Kuş bakışı bir seviyeden, mevcut projelerin gidişatı ile ilgili olarak genel bir fikir edinmek isteyen proje yöneticisi, varolan projelerin yazılım metriklerini ölçerek, projenin mevcut durumu ile ilgili olarak istatistikler elde ediyor ve bu değerleri yorumluyordu. Bu değerlerin ölçümü, belli başlı bir çok akreditasyon kurumu tarafından da önemli bulunmuştur. Örneğin, TickIT, ISO 9001, BOOTSTRAP, CMM, ISO/IEC 12207, ISO/IEC TR , 15504 (SPICE), Unified Process (UP) bunlardan bazılarıdır.

Problem ise, bu metriklerin ölçümünü nasıl otomasyona bağlanacak olmasıdır ? Bu anlamda bir çok uluslararası şirket ve akademi, ortaya bazı somut ürünler koymuş olsa da, bu ürünlerin süreç içinde yarattığı katmadeğer sorgulanmaktadır. Zira, yazılım metriklerinin ölçümü ile ilgili olarak gereken akış, tipik olarak şu şekilde olmaktadır:

1.       1- Proje yöneticisi, Kaynak kod ambarından mevcut kodu çeker.

2.       2- Kaynak kodu, kod ölçüm aracına verir.

3.       3- Araç metrikleri ölçer.

4.       4- Araç, sonucu rapor olarak gösterir.

5.       5- Diğer toplanacak metrikler, manuel olarak elde edilir. (ör. Efor metrikleri)

6.       6- Sonucu, proje yöneticisi değerlendirir.

7.       7- Proje yöneticisi, sonuçları saklar.

Bu süreç, gereksiz seremoniler ortaya koymaktadır. Herhangi bir anda, mevcut yazılım projesinin yazılım ölçümünü yapmak ve bu verileri değerlendirmek bir iş yükü haline gelmiştir.

Oysa, günümüz şartlarında ideal bir süreç şu şekilde olmalıdır.

1.       1- Proje yöneticisi, devam eden proje ile ilgili yazılım metriklerinin değerlerini, istediği bir aralıkta anlık olarak raporlayabilir.

Bu kadar, diğer tüm aktiviteler bir otomasyon sürecine bağlanmalı ve metriklerin toplanması ve saklanması işlemi bir otomasyon sürecinde varolmalıdır.

Çözüm


Codart olarak bu probleme sunduğumuz çözüm, Visual Studio ve Team Foundation Server ortamına entegre eklentiler geliştirerek, metriklerin ölçümünü, saklanmasını ve raporlanmasını, varolan sürece herhangi bir müdahelede olmadan sağlayacak yapıyı ortaya koymaktır. dev \ efor, mimari açıdan şu şekilde tasarlanmıştır.

Temel olarak, Visual Studio’ya VSSDK ve dev \ efor client kütüphaneleri, VS’e entegre edilerek, geliştiricinin harcadığı eforu otomatik olarak ölçüp, kendi geliştirdiğimiz fail-safe bir iletişim protokolü ile, sunucu tarafında TFS Web Servislerine iletilmesi ve yine VSSDK & TFS kütüphaneleri ve dev \ efor sunucu kütüphaneleri yardımı ile, client’lardan alınan verileri konsolide edilerek, takım bazlı raporların alınmasını sağlamaktır.

dev \ efor, temel olarak 8 metrik toplamaktadır. Bunlardan 5’i kod metrikleri, 3’ü efor metrikleridir. Ölçülen metrikler şunlardır:

Kod Satır Sayısı ( Source Lines of Code ) : Proje için kaç satır kod yazıldığını ölçer. Ölçüm, dilden bağımsızdır ve sadece “işlenebilen” kod satır sayısını ölçer.

Karmaşıklık Ölçütü ( Cyclomatic Complexity ) : Projenin, toplam karmaşıklık değerini ölçer. Kodun içine dahil edilen ve yeni bir durum yaratan her sözdizim, karmaşıklığı bir arttırır. Örneğin, koda eklenen her  if , else if, while, foreachi for gibi sözdizimler, projenin karmaşıklığını arttırır.

Miras Derinliği ( Depth of Inheritance ) :  Projenin sahip olduğu sınıfların, ne kadar soyut yapıdan alındığını ölçer. Örneğin, Araç sınıfından türetilen araba, ve araba sınıfından türetilen spor araba sınıfı şeklindeki hiyerarşik bir yapı, miras derinliğini bir arttırır.

Çiftleşim  (Coupling) :  Projenin, sınıflar arasındaki coupling derecesini ölçer. Sınıfların birbirleri ile etkileşimi arttıkça, coupling değer artar.

Bakım İndisi ( Maintainability Index) : Projenin mevcut durumu ve yönetilebilirliği ile ilgili olarak bilgi verir. Bakım indisi, 100 ila 0 arasında değişir. Projenin bakım indisi 100 değerine ne kadar yakınsa, proje o kadar yönetilebilirdir, denir.

Görsel Zaman ( Relative Time ) :  Herhangi bir görev için, geliştiricinin VS üzerinde bildirdiği başlangıç ve bitiş tarihleri arasında geçen zaman.

Aktif Zaman ( Active Time ) :  Herhangi bir görev için, geliştiricinin VS’i aktif olarak kullandığı zaman.

Akış Zaman ( Flow Time) :  Geliştiricinin, çevresel etkilere maruz kalmadan ( örneğin gelen telefonlar, toplantı istekleri, diğer geliştiricilerin soru sorması ) VS ile çalışabildiği toplam zaman.

Sonuç


Günümüzde yazılım geliştirme aktiviteleri, yoğun bir süreç yönetimini, dolayısı ile iş yükünü  Bu bağlamda, Microsoft tarafından üretilen Visual Studio ve Team Foundation Server gibi araçlar, özellikle yazılım geliştiren ekipler için, süreç yönetim işini oldukça hafifleten ve proje paydaşlarına katma değeri yüksek veriler ve çözümler sunan bir çatıyı beraberinde getiriyor.

Bu bağlamda, mevcut yazılımın kalitesi ve projeyi geliştirmek için harcanan eforun saklanması, özellikle kurumsal bilgi anlamında, kurumlar için oldukça önem arzediyor. dev \ efor’un  bu açıdan .NET teknolojileri ile proje geliştiren yazılım ekiplerine, proje paydaşlarına ve kurumlara değer katacak verileri ortaya çıkarmasının, geri dönüşü çok hızlı ve yüksek bir yatırım olacağına inanıyoruz.