Yazılım Mühendisliği Bilgi Birikimi Kılavuzu’nun (Guide to the Software Engineering Body of Knowledge -SWEBOK) üçüncü versiyonu 2013 yılının sonunda yayınlandı. SWEBOK v3’te daha önce 10 olan bilgi alanı (knowledge area) sayısı 15’e çıkmış. Kılavuzun son versiyondaki bilgi alanları orijinal sırasıyla şöyle:
- Software requirements
- Software design
- Software construction
- Software testing
- Software maintenance
- Software configuration management
- Software engineering management (Engineering management)
- Software engineering process
- Software engineering models and methods
- Software quality
- Software engineering professional practice – Software engineering professionalism
- Software engineering economics
- Computing foundations
- Mathematical foundations
- Engineering foundations
Listede görüleceği üzere, önceki versiyonlarda da olduğu gibi, ‘Yazılım Gereksinimleri (Software Requirements)’ bir numaralı başlık olarak kılavuzdaki yerini almıştır. Bilgi alanının alt başlıklarıysa şu şekilde sunulmuştur:
- Yazılım Gereksinimlerinin Temelleri (Software Requirements Fundamentals)
- Gereksinim Süreci (Requirements Process)
- Gereksinimleri Meydana Çıkarma (Requirements Elicitation)
- Gereksinimlerin Analizi (Requirements Analysis)
- Gereksinimlerin Belirtimi (Requirements Specification)
- Gereksinimlerin Doğrulanması (Requirements Validation)
- Uygulamayla Dair Konular (Practical Considerations)
Bu yazıdaki amacım, yukarıdaki bir numaralı başlık olan ‘Yazılım Gereksinimlerinin Temelleri’ üzerinden giderek ‘yazılım gereksinimi’ kavramına açıklık getirmektir.
SWEBOK, yazılım gereksinimini tanımlamaya şöyle başlıyor:
“Yazılım gereksinimi en temelinde, gerçek dünyadaki bir sorunu çözmek için sergilenmesi gereken bir özelliktir.”
Kılavuz ‘yazılım’ı esas aldığı için, yukarıdaki cümlede bahsedilen problemin yazılımlar tarafından çözümlenecek konular olduğunun altını çiziyor ve tanımı biraz daha detaylandırıyor.
“Yazılım gereksinimi, belirli bir sorunu çözmek için geliştirilen ya da adapte edilen bir yazılım tarafından sergilenmesi gereken bir özelliktir.”
SWEBOK, gereksinim tanımını yukarıdaki gibi yaptıktan sonra, kavramın daha iyi anlaşılması için alt başlıklarda çeşitli karşılaştırmalar ve detaylandırmalara gidiyor.
İlk olarak ürün (product) ve süreç (process) gereksinimlerinden bahsediyor. Kılavuzun tanımına göre geliştirilecek olan yazılımla ilgili parametreleri ortaya koyan gereksinimler ürün gereksinimleridir. Örneğin, “Yazılım, öğrencilerin bir derse kayıt olmadan önce, öğrencinin o dersle ilgili tüm ön gereksinimleri yerine getirdiğini kontrol etmelidir”. Süreç gereksinimi ise yazılım geliştirme aşamasındaki kısıtları ifade eder. Örneğin, “Yazılım, Microsoft .NET teknolojisi kullanılarak geliştirilmelidir”.
Daha sonra hepimizin bildiği işlevsel / işlevsel olmayan gereksinim ayrımına gidiyor. SWEBOK işlevsel gereksinimleri (functional requirements) yazılımın gerçekleştirmesi gereken işlevler olarak (functions that the software is to execute) tanımlıyor. Örneğin bir metnin biçimlendirilmesi, iki sayının toplanması ya da başvuru bilgilerinin sisteme kaydedilmesi yazılımın işlevselliğiyle ilgilidir. İşlevsel olmayan gereksinimlerse, genellikle performans, bakım, güvenlik, sağlamlık gibi başlıklarla karşımıza çıkar, şeklinde özetleniyor.
SWEBOK’ta, gereksinimler anlatılırken bahsedilen bir diğer konu da “Emergent Properties.” Bu kavramı çevirmekte zorlandığım için orijinal haliyle bırakmaya karar verdim. Emergent Properties, yazılımın tek bir bileşeni tarafından yerine getirilemeyecek, birden fazla bileşenin bir araya gelerek ortaya koyacağı, tek başına tanımlanması mümkün olmayan özellikleri ifade etmektedir.
Kılavuzun beşinci başlığı “ölçülebilir gereksinimler” (Quantifiable Requirements) olarak tanımlanmış. SWEBOK bu başlıkta gereksinimlerin mümkün olduğunca ölçülebilir ve test edilebilir şekilde tanımlanması gerektiğine dikkati çekiyor. Belirsiz ve doğrulanamayacak gereksinimlerden kaçınılması gerektiğini vurguluyor. Örneğin, “yazılım güvenilir olmalı”, “yazılım kullanıcı dostu olmalı” gibi. Nasıl kodlanacağı ve geliştirileceği belli olmayan bu gereksinimlerin aynı zamanda test edilemeyeceğine de dikkati çekiyor.
Son olarak sistem ve yazılım gereksinimleri karşılaştırılması yapılıyor. Sistem, belirli bir amacı gerçekleştirmek üzere gerekli olan öğelerin ve bunlar arasındaki etkileşimin kombinasyonu olarak tanımlanıyor. Dolayısıyla sistem denilen şeyin içine donanım, yazılım, insanlar, bilgi, teknik, ortam, servisler ve diğer tüm destekleyici öğeler de giriyor.
Tüm bunları kısaca toparlayacak olursak:
- Gerçek yaşam problemlerini çözmek için çeşitli sistemler tanımlarız.
- Günümüz dünyasında bu sistemlerin bir parçası da yazılım olarak karşımıza çıkar.
- Yazılım gereksinimleriyle çalışırken şunları da dikkate almak gerekiyor:
- Sistem gereksinimleri
- Yazılım gereksinimleri
- İşlevsel gereksinimler
- İşlevsel olmayan gereksinimler
- Emergent properties
- Gereksinimlerin ölçülebilir ve test edilebilir olması
- Süreç gereksinimleri
- Ürün gereksinimleri
Bu yazıda SWEBOK v3’ü referans aldım. Kılavuzun online versiyonunahttp://www.computer.org/portal/web/swebok linkinden ulaşabilirsiniz.