Yazılım Geliştirme · e-bergi
Yazılım geliştirme, kullanıcının istediği ürünü, yazılım ürünü haline getirme işidir. Basit bir yemek yapma işinde bile, önce tarifi kafamızda tasarlayıp, sonra elimizdeki ürünleri kontrol edip eklenmesi gerekenleri bulup, sonra da belli bir sırayla yemeği yapmamız gibi, yazılım geliştirme sürecinde de belirli yöntemler kullanılır.
Bu yazımda, sizlere yazılım geliştirmeyi özetlemeye çalışacağım.
Bu ilk görüşmeden sonra; kapsamlı olarak geliştirilecek yazılımı düşünüp, bunun için gereksinimleri ortaya çıkarıp bir dokümana yazmanız gerekir. Bu dokümana “gereksinim raporu” denir. Gereksinim raporunda, geliştirilecek yazılım anlatılır, diyagramlarla* anlatım görselleştirilip daha anlaşılır olması sağlanır.
Gereksinim raporunu oluşturmak için “gereksinim mühendisliği” diye bir çalışma alanı bulunmaktadır, tabi ülkemizde ne kadar yaygın olduğu hakkında derin şüphelerim mevcut :)
Gereksinim raporu müşteriye teslim edilip onay alındıktan sonra daha detaylı çalışmalar başlar ve yine dokümanlaştırılır. Bu yeni dokümanda, daha fazla teknik ayrıntı bulunur. Projenin hangi platformda, hangi dille geliştirileceğinden tutun, geliştireceğiniz kodda kullanacağınız classlar ya da veritabanında tutacağınız tablolar, hatta yazacağınız methodlar bile ayrıntılarıyla anlatılır. Detaylı Dizayn raporu olarak adlandırılan bu raporda, gereksinim raporunda olduğu gibi diyagramlar* kullanılır.
Dizayn raporu, ufak tefek yeni özellikler eklenebilecek esneklikte, yıllar sonra başkaları tarafından okunduğunda da anlaşılabilir, geliştirilebilir, tekrar kullanılabilir ve güvenli olmalıdır. Kısaca, geliştirilen yazılımla ilgili ne ararsak bu dokümanın içinde bulabilmeliyiz.
Dizayn raporu için de onay aldıktan sonra, sıra projenin mimarisini somutlaştırmaya gelir ki bu projemizin programlanması ve -varsa- donanımının üretilmesidir. Daha önce yazılan raporlarda belirtilen yöntemler, diller ve veriler kullanılarak, müşterinin istediği yazılım ürünü geliştirilmeye başlanır. Projenin büyüklüğüne göre, bu aşamada da farklı araçlar ve yöntemler kullanılabilir. Özellikle bu aşamada, ürünün kullanımına göre, hızlı olması , güvenilir olması, anormal durumlarda kendini koruyabilmesi gibi önemli konularda dikkatli olmak gerekir. Ürünü geliştirirken, geliştiren kişi, doğru işi yapıp yapmadığını anlamak için ufak testler yazabilir.
Ürünü geliştirme aşamasından sonra, ürünü test etme aşaması başlar. Yazılım testi de başlı başına bir konudur ve yine “yazılım test mühendisliği” diye ayrı bir çalışma alanı vardır. Ülkemizde, özellikle savunma sanayii alanında yazılım test mühendisleri çalışmaktadır.
Yazılım testini özetle anlatmak gerekirse, geliştirilen ürünün her yerinin teker teker doğru çalışıp çalışamadığının kontrol edilmesidir. Bunun için en basitinden açma - kapama, ya da “a“ tuşuna basınca ekranda “a” harfi görünecek mi? denemesi de yapılır, en karmaşık girdiler verilip, sistem bu girdilere karşı kendini koruyor mu diye kontrolü de yapılır.
Yazılım testi için bir çok yöntem ve araç mevcuttur. Geliştirilen ürünün teslim edilmesinden önceki son aşama olduğundan, en riskli dönem olarak da adlandırabiliriz. Test zamanında bulunan hatalar, geliştiricilere raporlanır ve gerekli düzeltmeler yapılarak tekrar test edilir. Ama unutulmamalıdır ki, yapılan bütün testlerden geçen ürün, sorunsuz ürün demek değildir.
Sanmayın ki yazılım geliştirmek benim yukarıda anlattığım kadarıyla bitiyor. Ürün geliştirme ve test etme aşamasında, konfigurasyon yönetimi ve yazılım kalite grubu, sizleri sürekli denetler ve yaptığınız veya yapma ihtimaliniz olan hatalara karşı sizleri uyarır. Bu da, hem ürün geliştirme aşamasında, hem de daha sonrasında karşılaşabileceğiniz hatalara karşı sizleri korur.
Test işlemlerinden sonra yapılacak iş, ürünün müşteriye teslimi, gerekiyorsa kurulumunun yapılması ve bir süre de bakımının üstlenilmesidir (artık aranızdaki anlaşma neyse ona göre :) )
Siz bir projeyi daha teslim etmiş olmanın haklı gururunu yaşarken, müşteri de yeni aldığı ürünü kurcalamaya başlayacak, belki de ilerleyen günlerde başınızı ağrıtacatır :)
(*) Bu diyagramlar, çok geniş bir konu olduğu için ayrıntılara değinmedim. Özetlemek gerekirse, sistemin akışını, sistemdeki yapıların birbirleriyle olan ilişkilerini, ve sistemin yapısını görsel olarak anlatan diyagramlar kullanılır (use case, class, state diagram...vb). Bu diyagramların bazıları sadece belirli raporlarda kullanılabilirken bazıları hepsinde kullanılabilir.
Yazılım Geliştirme Yaklaşımında Sessiz Çığır