Testedilebilir Gereksinimler (Testable Requirements) Mehmet Mustafa GÜRSUL AB ‘12 – Uşak Üniversitesi 1-3 Şubat 2012
İçerik Sorun Tanım Yapılan Hatalar İyi Gereksimlerin Özellikleri Test Edilebilir Gereksinimlerin Özellikleri
Yazılım Kusurlarının (Defect) Dağılımı Araştırma - 1 Araştırma - 2 Kaynak : http://conferences.embarcadero.com/article/32152 Kaynak : http://www.isixsigma.com/industries/software-it/software-defect-prevention-nutshell/ Şekilde; projelerdeki kusurların (defect), proje safhalarına göre dağılımı gösterilmektedir. Dikkat edilecek durum, bulunan kusurların yarısından fazlasının gereksinim süreci ile ilgili olmasıdır. Gereksinimlerden kaynaklanan ve yaklaşık olarak da tüm kusurların yarısı kadar olan kusurlar; gereksinimlerin belirsiz (ambiguous), tam açık olmayan, doğru olmayan, kısaca zayıf bir biçimde ifade edilmesinden kaynaklanmaktadır.
Gereksinim Nedir? Eksikliği duyulan şey, ihtiyaç. (www.tdk.gov.tr) Belirli bir sistemin sahip olması gereken yetenekler ile yapması gerekenleri içeren ve kullanıcıların ihtiyaçlarını karşılayan yazılı olan belirtimlerdir.
Ne anlama geliyor? Yazılana kadar, verilen cevaplar gereksinim değildir. İstenilenler ihtiyaç değilse gereksinim değildir. Eğer hiçkimse istenilen özelliği detaylı bir biçimde açıklayamıyorsa gereksinim değildir.
Yapılan Hatalar - 1 Yanlış ya da kesin olmayan terminoloji kullanımı. Kaçınılması gereken kelimeler: v.b (etc.) basit (simple) birkaç (several) hızlı (rapid) çeşitli (various) etkin (efficient) yanısıra (as well as) yeterli (sufficient) kolay (easy) güvenilir (reliable) gelişmiş (improved) en uygun (optimal) kullanıcı dostu (user-friendly) bunlarla sınırlı olmamak (not limited to) herhangi (any) tekniğin son durumuna göre (state of the art) Yukarıdaki gibi kişiden kişiye anlamı değişen yani subjektif kelimelerden kaçınmak gerekmektedir.
Yapılan Hatalar - 2 Tasarımı zorlamak. Örneğin: X Sistemi uçuş bilgilerini veri tabanında saklayacaktır ve saklanan bu bilgiler kullanıcıya gösterilecektir. Yerine; X Sistemi uçuş bilgilerini saklayacaktır ve saklanan bu bilgiler kullanıcıya gösterilecektir. Gereksinimler neye ihtiyaç olduğunu belirtmelidir, nasıl olması gerektiğini ifade etmemelidirler. Örnekte verilende denildği gibi uçuş bilgileri büyük ihtimal veritabanında saklanacaktır fakat burada veritabanı belirtilerek tasarım bu yönde kısıtlanmaktadır. Belki de XML şeklinde dosya sisteminde veriler saklanacaktır bu nedenle tasarımı kısıtlamamak gerekmektedir.
Yapılan Hatalar - 3 Sistemin kullanıcı için ne yapması gerektiğinden çok kullanıcının sistemi nasıl kullanacağı ile ilgili belirtimler. Örneğin: Kullanıcı, sistemi sadece sistemdeki uçuş paneli aktif olduğu durumda kullanabilecektir. Yerine; Sistem, sadece uçuş paneli aktif olduğu durumda çalışacaktır.
Yapılan Hatalar - 4 Gereksinimlere sorumlu atamada yapılan hatalar. Örneğin: Sistemde hatalı bir durumla karşılaşıldığında, sistem güvenli moda döndürülecektir. Yerine; Sistemde hatalı bir durumla karşılaşıldığında, sistemin kendisi güvenli moda dönecektir. ”...sistem güvenli moda döndürülecektir.” Edilgen bir yapıda kurulan bu cümlede kimin sistemi güvenli moda geçireceği ile ilgili bir bilgi barındırmamaktadır.
Yapılan Hatalar - 5 Gereksinimlerde aşırı belirtimlerde bulunmak. Örneğin: Tüm kaynak kodu müşteriye verilmeden önce, güvenlik mühendisi tarafından kontrol edilecektir. Yerine; Kaynak koddaki tüm güvenlik kritik bölümler, kaynak kod müşteriye verilmeden önce, güvenlik mühendisi tarafından kontrol edilecektir. Sistemde güvenlik kritik olmayan kod parçaları olacaktır ve bu kısımların güvenlik mühendisleri tarafından kontrolü fazladan kaynak kullanımına neden olacaktır.
Neler Gereksinimi İyi Yapar? 1- Doğruluk Gereksinimi yaratmak için kullanılan bilgiler gerçeği yansıtmalıdır. Doğruluk Gereksinim doğru olmak zorundadır. Gereksinimi yaratmak için kullanılan bilgiler gerçeği yansıtmalıdır. Genel olarak gereksinimin doğru olup olmadığını yazılım geliştirici bilemez, bunun yerine tecrübeli analistler ya da mühendisler gereksinimler dondurulmadan önce gerekesinimleri gözden geçirmelidirler.
Neler Gereksinimi İyi Yapar? 2 - Gereklilik Gereksinim çıkarıldığında sistemde değişiklik olmuyorsa, gereksinim gerekli değildir. Gereklilik Gereksinimler gerekli olmak zorundadır. Eğer gereksinim çıkarıldığında, istenen sistemde bir değişiklik olmuyorsa ve bu konuda kullanıcılar ile anlaşma sağlanıyorsa bu gereksinim gerekli değildir.
Neler Gereksinimi İyi Yapar? 3 - Odaklanma Bir gereksinim, birden fazla ihtiyacı karşılayacak şekilde yazılmamalıdır. Örneğin; “Sistemdeki hız göstergesi en düşük 0 km/s i ve en yüksek de 220 km/s i göstermelidir.” Demek yerine; “Sistemdeki hız göstergesi en düşük 0 km/s i göstermelidir.” “Sistemdeki hız göstergesi en yüksek 220 km/s i göstermelidir.” şeklinde iki gereksinim yazmak daha uygundur. Odaklanma Gereksinim sadece bir tek şeye odaklanmalıdır. Bir gereksinim, birden fazla ihtiyacı karşılayacak şekilde yazılmamalıdır. Bunun yerine gereksinim bölünerek birkaç gereksinim yazılmalıdır. “Sistemdeki hız göstergesi en düşük 0 km/s i ve en yüksek de 220 km/s i göstermelidir.” Demek yerine; “Sistemdeki hız göstergesi en düşük 0 km/s i göstermelidir.” “Sistemdeki hız göstergesi en yüksek 220 km/s i göstermelidir.” şeklinde iki gereksinim yazmak daha uygundur.
Neler Gereksinimi İyi Yapar? 4- Uygulanabilirlik İstenilen; bütçe, zaman, kaynaklar ile yapılabilir olmalıdır. Uygulanabilirlik Gereksinim uygulanabilir olmalıdır. Eğer istenilen; verilen bütçe, bitirilmesi gereken zaman, eldeki kaynaklar ve projede yer alan diğer kısıtlamalar ile yapılamayacak ise ya bu gereksinim bırakılmalıdır ya da proje zaten başarısızlıkla sonuçlanacağı kabul edilmiştir. Tasarımcılar ve yazılım geliştiriciler bu durumları belirlemek için analistlerle ortak çalışmalıdırlar.
Test Edilebilir Gereksinimin Özellikleri 1 - Deterministik Verilen başlangıç koşulu ve bir dizi girdi ile kullanıcının tam olarak beklenen çıktılara karar verebilmesidir.
Test Edilebilir Gereksinimin Özellikleri 2 – Tutarlı (Consistent) Birbiri ile uyumsuz gereksinimler olmamalıdır.
Test Edilebilir Gereksinimin Özellikleri 3 –Açık (Explicit) Herkes tarafından aynı şekilde anlaşılır olmalıdır.
Test Edilebilir Gereksinimin Özellikleri 4 – Tam (Complete) İhtiyaçlar tam ve eksiksiz bir biçimde belirtilmelidir.
Test Edilebilir Gereksinimin Özellikleri 5 – İzlenebilir (Traceable) Gereksinimin kaynağı dokümente edilmelidir. Tekil bir şekilde numaralandırılmalıdır. Tasarım, geliştirme ve test süreçlerinde gereksinimlere iki yönlü izlenebilirlik kurulabilmelidir.
Sorular?
Kaynaklar [1] Writing Testable and Code-Able Requirements, Murat Guvenc, Borland Software, Ağustos 15, 2004 [2] Writing Good Requirements, Jerry Karasz, Apogen Technologies, Inc. Eylül, 2005 [3] Writing Testable Requirements, Bill Rinko - Gay Karasz, QAI/QAAM 2011 Conference, Inc. Eylül, 2011 [4] İyi Gereksinim Yazma Teknikleri, Kasım Şen
© STM 2010 All Rights Reserved ANKARA TEKNOLOJİ GELİŞTİRME BÖLGESİ, BİLKENT CYBERPARK, E BLOK 5.CADDE NO: 6/A 06800, ANKARA, TURKIYE TEL : 0 312 266 35 50 FAKS : 0 312 266 35 51 www.stm.com.tr © STM 2010 All Rights Reserved Bu doküman ve içerdiği tüm bilgiler STM AŞ’nin fikri mülkiyetidir. Bu dokümanın dağıtımı veya sunumu ile bu haklar ortadan kalkmış olmaz. STM AŞ’nin yazılı izni olmadan bu dokümanın ve içerdiği bilgilerin üçüncü kişilere aktarımı, çoğaltımı ve dağıtımı yapılamaz. Bu doküman ve içeriği hazırlanma amacının dışında kullanılamaz. This document and all information contained herein is the sole property of STM AŞ. No intellectual property rights are granted by the delivery of this document or disclosure of its content. This document shall not be reproduced or disclosed to a third party without the express written consent of STM AŞ. This document and its content shall not be used for any other purpose other than for which it is supplied.