YAZILIM GELİŞTİRME VE TEST ETME YAZILIMIN GELİŞTİRİLMESİ VE TEST EDİLMESİ Uygun analiz ve tasarımlar gerçekleştikten sonra, sistemin kullanacağı yazılımın geliştirilmesine geçilir. Bu aşama bir çok etkeni göz önüne alarak ve yazılım geliştirme ilkesine uyularak gerçekleştirilir. Geliştirilen yazılımın sistem için geçerli, güvenli ve verimli bir yazılım olup olmadığının kontrolü gerekmektedir. Bu durum ise yazılımın test edilmesi ile sağlanabilmektedir. YAZILIMIN TASARIMI Bu aşamada çok detaylı planlamalar yapılması zorunludur. Parasal ve zamansal maliyet hesaplamaları göz önünde bulundurularak sistem gereksinimlerine uygun bir yazılım için bu planlama ve tasarım oldukça önemlidir. Yazılım tasarımına yön veren bir çok etken bulunmaktadır; 1. Yazılımın Doğru Çalışması Geliştirilecek olan yazılımın her türlü durumda çalışabilecek ve doğru bir şekilde çalışabilecek bir yazılım olması beklenir. Bu bağlamda yazılım geliştirme sürecinde yazılım sürekli ve çok değişik testlerle sınanmalıdır. 2. Yazılımın Gereksinimleri Karşılaması Yazılım gereksinimlerinin karşılandığından emin olmak için tasarımlar iyi incelenmeli ve detaylı bir yazılım geliştirme süreci gerçekleştirilerek bütün gereksinimlerin karşılanmasıyle ilgili testler gerçekleştirilmelidir. 3. Veri ve Zaman Açısından Uygunluk Yazılımın veri üzerindeki işlemleri uygun bir şekilde ve kabul edilir bir zaman diliminde gerçekleştirebiliyor olması gerekmektedir. Verilerin uygun güvenlik sınırları içerisinde tutulması da yazılımın görevlerinden bir diğeridir. İşlemleri gerçekleştirirken belli bir süre harcanır. Bu sürenin çok uzun olması sistem işleyişini yavaşlatır ve kullanıcılar yazılımdan memnun kalmazlar. 4. Yazılımın Geliştirilebilir Olması Gün geçtikçe bilişim alanında yenilikler ve değişimler meydana gelmektedir. Sistemler de bu yeniliklere uyum sağlayabilmelidir. Bir sistem için yazılım geliştirilirken değişim etkeni göz önünde bulundurulmalı ve yazılımın değişime uygun olarak geliştirilmelidir. Yazılım yeniliklere açık olmalıdır. 5. Kullanım Kolaylığı Bir yazılımı iyi bir yazılım yapan en büyük ve en etkili etken müşteri memnuniyetidir. Yani müşterilerin sistemin tüm olanaklarına kolaylıkla ulaşması ve kullanması. Bu yüzden yazılımcılar, yazılım geliştirme sürecinde, sürekli kullanıcılarla iletişim ve etkileşim kurarak yazılımın kullanım kolaylığını üst seviyede tutması gerekmektedir. 6. Test Etme ve Yaşama Geçirilme Kolaylığı Sistemin yaşamına geçirilecek yazılım için kullanıcıların bilgilendirilmeleri ve yazılımı kullanabilecek duruma gelmeleri gerekmektedir. Yazılım bu ilkelere uygun geliştirilmemişse bu süreç uzun ve zor bir sürece dönüşür, ve dolayısı ile sistemin geçiş sürecinin yavaşlamasına sebep olur. Bu yüzden kullanıcılarla sürekli iletişim ve bilgi paylaşımı içinde olunmalıdır. 7. Verimli Kaynak Kullanımı Birçok durumda kaynakların verimli kullanımı, kullanılan donanıma göre değişmektedir. Bazı sistemlerde veri için ayrılan yer büyük fakat veri işlemleri için kullanılan birim özellikleri düşük olabilmektedir, bazı durumlarda ise tam tersidir. Veri için ayrılan yer ve harcanan zamanın uygun bir şekilde dengelenmesi gerekmektedir. DOĞRULAMA VE ONAYLAMA Yazılım geliştirme sürecinin başlangıcında bir takim sözleşmeler yapılmaktadır. Bu sözleşmeler yazılımı isteyen firma ile yazılımı geliştiren firma arasında yapılmaktadır. Bu sözleşmelerin kapsamı, sistemin gereksinim ile isteklerine ve gereken geliştirme işlemleri ile ilgilidir. Yazılım geliştirme sürecinin başlangıcında yapılan sözleşmelere Doğrulama (Verification) denmektedir. DOĞRULAMA VE ONAYLAMA Doğrulama sözleşmelerine benzer sözleşmeler yazılım geliştirme sürecinde veya sürecin sonunda da yapılabilmektedir. Bu sözleşmelerin amacı yapılan işlerin doğruluğunun kabul gördüğünü belgelemektir. Bu sözleşmelerin yapılması genellikle yazılım geliştirici firma tarafından istenir. Geliştirilen yazılımın istenen özelliklerde geliştirilip geliştirilmediği denetlenebilmektedir. Bu tür sözleşmelere Onaylama (Validation) adı verilmektedir. YAZILIM GELİŞTİRME STRATEJİLERİ Kullanılacak olan strateji, yazılım firmasının yaklaşımına, sistem gereksinimlerine ve yazılımın özelliklerine göre değişebilmektedir. Diğer taraftan yazılım sektöründe en büyük etken yazılımcıların yaklaşımıdır. Yazılım sürecinin nasıl gerçekleştiği, ne kadar sürdüğü, elde edilen yazılımın niteliği kullanılan stratejiden doğrudan etkilenmektedir. YAZILIM GELİŞTİRME STRATEJİLERİ Yazılım geliştirmede kullanılan üç temel strateji bulunmaktadır; Yukarıdan-Aşağıya (Top-Down) Aşağıdan-Yukarıya (Bottom-Up) Merkezden Dışa (Middle-Out) şeklinde adlandırılabilir. YAZILIM GELİŞTİRME STRATEJİLERİ Yukarıdan Aşağıya Merkezden Dışa Aşağıdan Yukarıya 1. Yukarıdan Aşağıya Yazılım Geliştirme Bu stratejiye göre başlangıçta çözülmesi gereken problem (geliştirilecek yazılım) bir bütün olarak ele alınır. Daha sonra bu bütün bölüneceği birden fazla alt probleme bölünür. Bu bölümlerden her biri kendi başına kolaylıkla çözülebilecek kadar alt ve küçük bölümlere ayrılana kadar yukarıdan aşağıya hareket devam eder. 1. Yukarıdan Aşağıya Yazılım Geliştirme İlk ürünü olarak yazılımın arayüzü oluşturulmuş olur, hiç bir işlem bulunmamaktadır. İlerleyen aşamalarda arayüz üzerinden hareketle, bütün daha küçük parçalar durumunda düşünülür, fonksiyonlar ve prosedürler işlevsel olabilecek duruma gelirler. En sonunda yazılımın tamamı işlevsel duruma gelir ve geliştirilmiş olur. Yazılımın içinde bütünlük ve tutarlılığın sağlanması bu stratejinin üstünlüklerindenken, bir bütün olarak projenin değerlendirilmesi büyük, karmaşık ve çok yönlü olabilmektedir. 2. Aşağıdan-Yukarıya Yazılım Geliştirme Bu stratejiye göre ilk önce en küçük ve en alt düzeyde yer alan işlemlerin gerçekleştirilmesi gerekmektedir. Prosedürler ve fonksiyonların geliştirilmesi ile bunların bir arada kullanılabilecekleri bir üst düzeydeki yazılım bölümleri oluşturulur ve en sonunda da yazılımın tamamı geliştirilmiş olur. Yazılım bütün işlevselliği ile tanımlandıktan sonra arayüz geliştirme işlemleri yapılır. Bu stratejinin üstünlüğü yazılımın kendi içinde daha sağlam bir yapıda, birbirinden bağımsız ve güvenilir yazılım parçacıklarından oluşmasıdır. Fakat daha uzun zamanda geliştirilirler. 3.Merkezden Dışa Yazılım Geliştirme Bu yaklaşım ilk iki stratejinin üstünlerinden yararlanmaktadır. Yazılım bir bütün olarak değerlendirilir. Geliştirilme aşamasında ise parçacıklar olarak düşünülür. Ve geliştirmeye de en alt düzeyden başlanmaz. YAZILIMI TEST ETME Yazılımın test edilmesi aşaması, doğrulama ve onaylama işlemlerinin gerçeklesmesine yön veren etkenler olarak düşünülebilir. Geliştirilen yazılımın, sistem için doğru bir yazılım olup olmadığı ve bu yazılımın kabul edilebilirliği yazılım testleri ile ortaya çıkmaktadır. YAZILIMI TEST ETME Yazılımlar üzerinde gerçeklestirilebilecek birçok test bulunmaktadır. Günümüzde bu testlerin her biri için ayrıca geliştirilmiş test yazılımları da bulunabilmektedir. Hangi testlerin hangi yazılıma ve hangi test araçları ile yapilabileceği yazılımın niteliklerine ve kullanılabilecek test yazılımının özelliklerine göre değişebilmektedir. Geliştirilen bütün yazılımlar için yapılabilecek temel testler aşağıda yer almaktadır. Birim Testleri (Unit Testing) Kaynak kodlarındaki küçük birimlerin doğrulama testi olarak nitelendirilebilir. Örneğin bir fonksiyonun test edilmesi. Test türlerinin en düşük kapsamlı olanıdır. Java ve .Net kendi birim testleri olan yazılım ortamlarına örnektir. Birim testleri sadece küçük bir parçanın üzerinde gerçekleştirildiklerinden yazılımın tamamı açısından pek belirleyici değillerdir. Bütünlük Testleri (Integration Testing) Bütünlük testleri yazılımın birleştirilmiş yazılım parçaları üzerinde yapılan testlerdir. Bu parçaların birleşiminin doğru işlevsellikte olup olmadığı bütünlük testi ile ortaya çıkmaktadır. İşlev Testleri (Function Testing) İşlevsel bölümler kendilerine uygun verileri alıp, işleyip sonuç olarak uygun bir çıktı/bilgi üretmek durumundadırlar. İşlev testleri yazılımın her işlevsel bölümünün işlevini yerine getirip getirmediğinin test edilmesini sağlarlar. Bazı kaynaklarda işlev testlerine “Kara Kutu Testleri” de denir. İşlev Testleri (Function Testing) Girdi Çıktı Beklenen Sistem Testleri (System Testing) Sistem testleri yapısal açıdan işlev testleri ile benzerlik göstermektedirler ancak sistem testlerinde bu durum yazılımın tamamı için geçerlidir. Sistemin gereksinimlerinin karşılanıp karşılanmadığı test edilir. Yazılım sisteme uygun ve eksiksiz geliştirilmiş ise testin sonucu olumlu olur, aksi ise olumsuz olur. Sistem Testleri (System Testing) GEREKSINIM ANALIZ TASARIM UYGULAMA SISTEM TESTI Test Sonucu Kullanıcı Onayı Testleri (User Acceptance Testing) Bu teste kullanıcı testi de denebilir. Kullanıcı tarafından kabul görmesi, özel sektörde istenen bir özelliktir. İlk önce yazılım yüklenir ve kullanıcının kullanımına sunulur. Daha sonra test planı yapılır. Test planından sonra test tasarımı ve test için kullanılacak araç ve ortamlar hazırlanır ve test işlemleri gerçekleştirilir. Kullanıcı Onayı Testleri (User Acceptance Testing) Daha sonra kullanıcıdan gelen test sonuçları değerlendirilir. Kullanıcıların testlerden ve alınan sonuçlardan tatmin olması kullanıcı onay testinin sonucunun başarılı olduğunu gösterir.