Yazılım Kalitesini Nasıl Yükseltebilirsiniz ?

 

Kalitesiz bir arabaya biner misiniz ? Peki kalitesiz bir yemek satın almak ister misiniz ? Burada bahsedilen kalite kavramının ne olduğu kişiden kişiye değişebilir ama ortak nokta kullanıcının gereksinimlerini tam olarak karşılanmasıdır diyebiliriz.

Peki kalite lüks mü ? Toyota kalite araba,  Cherry kalitesiz mi ? Kalite konusunun en büyük problemi tanımının belirsiz olmasıdır. Ama şurası kesindir:  Kalite birden çok bileşenin devreye girmesiyle oluşan bir kavramdır.

Yazılım ürünlerinde kaliteyi nasıl anlatırsınız ? Hataların (bug) az olması o yazılım kaliteli olduğu anlamına mı gelir ? Peki ya diğer hatalar; örneğin yeni isteklerin projeye kolay dahil edilememesi; ya da kullanıcıların ekranları zar zor kullanmaları da hata mıdır ?

Toplam kalite yönetimi (Total quality management (TQM)) uzun süreli müşteri tatminini sağlamak için çalışan birimlere denir.

(Metrics and Models in Software Quality Engineering, Second Edition- Stephen H. Kan)

Kalite yönetimi ve gelişimi için 3 farklı pencereden bakılabilir. Yukarıdaki şekil bunu göstermeye çalışmaktadır.

  • Müşteri gözüyle kalite
  • Süreçlerin geliştirilmesi
  • Kalitenin bir kültür haline getirilmesi.

Bu aşamalara gelmeden önce ilk adım yazılım hakkında istatistik toplama (metrics), yani ölçüleri almaktır. Örneğin birim (unit) testleri yazıyorsunuz, peki bu testlerin yazılımın yüzde kaçını test ettiğini biliyor musunuz? Ya da yazılım içindeki yorumların oranını nedir ? Yazılım içinde ki en karmaşık sınıfın hangisi olduğu hakkında bilginiz var mı ?

Proje devam ederken bu ölçülere sahip olmak ve projeyi daha yönetilebilir yapacaktır. Örneğin karışık sınıfı daha az karışık hale getirmeleri için yazılım mühendislerini uyarabilirsiniz.  Yönetilebilir proje kaliteli proje olma adayıdır.

İşte bu noktada sizlere işinize yarabileceğini düşündüğüm araçları tanıtmak istiyorum. Bu araçlar her ne kadar Java tabanlı projeler için olsalar da, .NET ve PHP , Ruby projeleri içinde karşılıkları mevcuttur.

  1. Jenkins :  Sürekli entegrasyon aracı;  yaptığı iş kısaca uygulamanızın kaynak kodlarını alıp, sizin istediğiniz süreçleden geçirip, inşa etmesidir.  Örneğin, kodları alır + derler + testlerinizi çalıştırır + istediğiniz sunucuya yükler + … + … Tüm zorlu işleri gerçekleştirir.
  2. Sonar : Projenizden bilgi toplama aracı. Web tabanlı çalışır. Bu yüzden kolayca erişilebilir. Jenkins ile ortaklaşa harika çalışabilir.
  3. Maven : Proje yapısını standart hale sokmak + kütüphane yönetimini sizin yerinize gayet rahat bir şekilde yapar.
  4. Nexus : Şirket içinde ortak çalıştırmayı kuvvetlendiren bir araç. Maven projeleri için çok iyidir. Çözdüğü problem; kısaca; şirket içinde ortak kütüphaneler oluşturabilirsiniz. Böylece “aa ben zaten xxx hesapayan modül yazmıştım neden benden  istemedin ki, bak boşuna uğraşmışsın …”  şeklinde ki  konuşmalar en az düzeye iner. Nexus + maven ile istenen kütüphaneler hemen projelere dahil olur.

 

 

Kalite için devamlı entegrasyon ve devamlı takip şarttır.  Gelelim Sonar’ın ne yaptığına

Sonar ve benzeri araçların yaptığı iş yazılımın içinden ölçüler (metrics) almaktır.  Bu ölçü almalar ve takip devamlı bir şekilde olmazsa bir işe yaramaz. İşte bu notada Jenkins çok büyük bir yardımcıdır. Versiyon kontrol sistemine commit (atılan) edilen her bir dosyada Jenkins , tüm süreçleri elbette Sonar’ı tetikleyebilir. Böylece yazılım kalitesinin ucu kaçmaz.

Bu araçlarla birlikte şirket içinde aşağıdaki adımların atılması da kalite kültürünü artıracaktır.

  • Kod gözden geçirmeleri – günden en fazla 20 dakika
  • Şirket içi bilgi aktarımı / eğitim – Örneğin Head first design patterns kitabını (ya da istediğiniz bir kitap) her bölümünü bir arkadaş çalışsın ve hafta bir gün herkes çıksın anlatsın.
  • Çiftli kod  (pair programming) yazma – Tecrübeli bir uygulama geliştiricinin yanına – bir yeni adam koyma
  • Tasarım ve mimari gözden geçirmeleri
Kalite bir kültürdür. Kültürün oturması için sabırlı olmak şarttır.
5 Comments

Post a Comment

Comment
Name
Email
Website