Yazılım İnşası ve Kalitesi
Yazılım inşası ve kalitesi, çalışan kodun disiplinli bir şekilde oluşturulması ile yazılımın gereksinimlerini ve kalite hedeflerini karşıladığını belirleyen ve güvence altına alan test, doğrulama, inceleme ve ölçüm gibi tekniklerle ilgilenmektedir.
Tanım
Yazılım inşası, kodlama, doğrulama, birim testi ve hata ayıklama yoluyla çalışan yazılımın detaylı olarak oluşturulmasıdır; yazılım kalitesi ise, yazılımın belirtilen ve ima edilen gereksinimlerini ne ölçüde karşıladığı olup, doğrulama, geçerlilik ve kalite yönetimi faaliyetleri ile güvence altına alınmaktadır.
Kapsam
Bu alan, kodlama standartları, savunmacı programlama ve birim testi dahil olmak üzere yazılım inşası uygulamalarını; yazılım test seviyelerini ve tekniklerini; doğrulama ve geçerliliği; statik ve dinamik analizi; kod incelemesini ve yeniden düzenlemeyi (refactoring); yazılım kalite niteliklerini ve metriklerini; ve doğruluğu kanıtlamak için resmi yöntemleri kapsamaktadır. Güvenilir yazılım üreten ve güvence altına alan faaliyetleri bir araya getirmektedir.
Alt konular
Temel sorular
- Hangi uygulamalar doğru, okunabilir ve sürdürülebilir kod üretmektedir?
- Kusurlar test, inceleme ve analiz yoluyla nasıl tespit edilmektedir?
- Yazılım kalitesi nasıl tanımlanmakta, ölçülmekte ve güvence altına alınmaktadır?
- Doğruluk, yalnızca test yerine resmi kanıtla ne zaman sağlanabilmektedir?
Temel kuramlar
- Test, kusurların yokluğunu değil, varlığını ortaya koyar
- Test, kusurların var olduğunu gösterebilmekte ancak yokluğunu kanıtlayamamaktadır; bu nedenle etkili test, kapsamlı yürütme yerine sistematik vaka seçimi yoluyla hata bulma olasılığını en üst düzeye çıkarmayı hedeflemektedir.
- Doğrulama ve geçerlilik
- Doğrulama, yazılımın kendi spesifikasyonuna göre doğru bir şekilde inşa edildiğini kontrol ederken, geçerlilik ise kullanıcı ihtiyaçlarını karşılamak üzere doğru yazılımın inşa edildiğini kontrol etmektedir; birlikte yaşam döngüsü boyunca incelemeleri, analizi ve testi kapsamaktadırlar.
- Kalite test edilerek değil, inşa edilerek sağlanır
- Kalite, son aşamadaki denetimden ziyade inşa uygulamaları, tasarım ve süreç disiplininden kaynaklanmaktadır; kusur önleme ve erken tespit, geç düzeltmeden çok daha ekonomiktir.
Klinik önem
İnşa ve kalite faaliyetleri, bir sistemin güvenilirliğini, güvenliğini ve sürdürülebilirliğini belirlemekte ve kusurların maliyetine hakim olmaktadır; erken ve sistematik doğrulama, saha arızalarını ve yeniden işleme ihtiyacını azaltmakta olup, bu da güvenilir yazılım sunmanın merkezinde yer almaktadır.
Kanıt ve kılavuzlar
ISO/IEC 25010 bir yazılım ürün kalite modelini tanımlamakta olup, SWEBOK'un Yazılım İnşası, Test ve Kalite bilgi alanları, uzlaşmaya dayalı referans rehberlik sağlamaktadır.
Tarihçe
Sistematik test, 1970'lerde Myers tarafından ifade edilmiş, yapısal programlama ve doğrulama aynı dönemde Dijkstra ve Hoare tarafından geliştirilmiş, inşa ustalığı ise 1990'larda McConnell tarafından ele alınmıştır; ISO/IEC 25010 gibi kalite modelleri ve standartları, kalite niteliklerini ve ölçümünü birleştirmiştir.
Tartışmalar
- Test etme ve resmi doğrulama
- Doğruluğa olan güvenin kapsamlı testlere mi yoksa resmi kanıta mı dayanması gerektiği tartışılmaktadır; test büyük sistemlere ölçeklenebilmekte ancak doğruluğu garanti edememektedir, oysa resmi yöntemler daha yüksek maliyetle güçlü garantiler sunmakta ve kritik bileşenler için ayrılmaktadır.
Öne çıkan isimler
- Glenford Myers
- Steve McConnell
- C. A. R. Hoare
- Edsger Dijkstra
İlgili konular
Temel eserler
- myers2011
- mcconnell2004
- swebok2014
Sıkça sorulan sorular
- Test, bir programın doğru olduğunu kanıtlayabilir mi?
- Hayır. Test, sonlu bir girdi kümesini kullanır ve kusurları ortaya çıkarabilmekte ancak yokluklarını gösterememektedir; tüm girdiler için doğruluğu kanıtlamak, yalnızca bir sistemin kısıtlı veya kritik kısımları için uygulanabilir olan resmi doğrulama gerektirmektedir.
- Kalite, hataların yokluğu ile aynı mıdır?
- Hayır. Yazılım kalitesi çok boyutludur; işlevsel doğruluğun yanı sıra güvenilirlik, performans, güvenlik, kullanılabilirlik ve sürdürülebilirlik gibi nitelikleri de kapsamaktadır; az sayıda hatası olan bir program, sürdürülemez veya güvensiz ise yine de düşük kalitede olabilmektedir.