Pek çok kurumda eskiden hazırlanmış ve üzerinde güncelleme yapılması gereken yazılımlar bulunuyor. Bu tür yazılımlarda güncelleme yaparken yaşadığım tecrübeleri not etmek istiyorum.

Nasıl yeni bir yazılım geliştirme sürecinde gereksinimlerin analizi, tasarım, kodlama ve test aşamaları varsa yazılım bakım sürecinde de benzer süreçler var. Her aşama için kabaca yapılması gerekenleri açıklamaya çalışacağım.

Gereksinim Analizi: Bu aşamada yazılımda istenen güncellemeler analiz edilmelidir. İstenen güncelleme iş sürecinde nereye oturuyor. Neden gerekli? Güncelleme olmadığı durumda hangi sorunlar ortaya çıkıyor. Güncelleme yapılırsa ne tür sorunlar ortaya çıkabilir? Güncelleme sonunda ne tür faydalar sağlanabilir? Mevcut sistemin birden fazla kullanıcı olduğundan  istenen güncelleme ile ilgili kullanıcıların kendi içinde konsensüs sağlanmamış olabilir. Sistemin kullanıcılarının yanında sistemi kullanmayan ancak müşteri tarafında bulunan yetki ve sorumluların güncellemelerle ilgili farklı düşünceleri olabilir. Bunun yanında geliştirici ekibin de güncellemelerle ilgili farklı düşünceleri olabilir. Kısaca toparlarsak mevcut kullanılan yazılımda istenen güncellemelerde kullanıcıların, sistemin kullanıcısı olmayan müşterilerin, geliştirme ekibinin konsensüsü sağlanmalıdır. Burada çok ciddi bir yönetim işi bulunmaktadır. Mümkünse müşteri tarafından yetkili birinin bu konsensüsü sağlaması uygun olacaktır. Bunun yanında istenen güncellemeler gereksinim kriterlerini sağlayacak şekilde dokümante edilmelidir. Bu iş için de gereksinim yazma bilgi ve kabiliyetinde analiste ihtiyaç bulunmaktadır. Analist güncelleme istekleri arası çelişkileri ve olası sorunları belirlemeli bu sorun ve çelişkileri düzeltecek şekilde istekleri değiştirmelidir. İsteklerin önceliği belirlenmelidir. Bu sürecin sonucunda gereksinim dokümanı çıkarılmalıdır.

Tasarım: Bu aşamada öncelikle mevcut yazılımın tasarımı öğrenilmelidir. Her bir gereksinim için(analiz edilmiş, detaylandırılmış güncelleme isteği )  sistemin nerelerini etkileyeceğinin belirlenmelidir. Ayrıca tasarımda yapılması gereken değişiklikler belirlenmelidir. Bu değişiklikler önceki tasarımdaki uygunsuzluklar olabileceği gibi, müşteri istekleri sonucunda teknoloji,mimari değişiklikleri de olabilir.  Tasarımda yapılan değerlendirmeler sonrasında her bir değişiklik isteği için süre, efor, maliyet   tahmini yapılmalıdır. Bu tahminler ve güncelleme isteklerinin önceliklerine göre müşteri yönetimi ve geliştirici ekip yönetiminin konsensüsü sağlanmalıdır. Bu süreç sonucunda güncellenmiş tasarım dokümanı ve aktivite seviyesinde detaylandırılmış proje planı çıkarılmalıdır.

Kodlama: Önceki aşamalarda belirlenen, önceliklendirilen güncelleme istekleri ile ilgili kod değiştirme, kod geliştirme faaliyetleri yürütülmelidir. Kodlama aşamasında ortaya çıkan yeni sorunlar ve bilgilerle gereksinim dokümanı, tasarım dokümanı ve proje planı güncellenmelidir. Kodlama için versiyon yönetim aracı kullanılmalı ve her değişiklik isteği için ayrı revizyon oluşturularak değişiklik yapılmalıdır. Değişiklik tamamlandıktan ve test edildikten sonra ana revizyon ile birleştirilmelidir.

Test: Test için mevcut test prosedürleri gereksinim analiz aşamasında güncellenmeli ve test aşamasında da testraporları oluşturulmalıdır.

 

Build alma ve Kurulum: Tamamlanan ve test edilen değişikiklerden belirlenen kümeleri içerecek şekilde build alınmalıdır. Kurulum yapılırken özellikle veritabanında mevcut veride gerekli güncellemeleri yapacak scriptlerin hazırlanması ve çalıştırılması önemlidir.

Bunlar olması gereken süreçler. Bakım işlerinin büyüklüğü yeterince görülmediğinden daha çok kodlama yapılacak şekilde planlanmaktadır. Kodlama için görevlendirilen kişinin kodlamanın yanında informal olarak gereksinim analizi, tasarım, test ve kurulum yapması beklenmektedir. Bunun yanında önceki geliştirme sürecinin eksikliğinden elde herhangi bir gereksinim dokümanı, tasarım dokümanı, test prosedürü, geliştirici kılavuzu bulunmamaktadır. Bu durumda geliştirici hiç bilmediği bir ortama atılmakta ve iğneyle kuyu kazmaktadır. Geliştiriciden beklentiler çok yüksek olmaktadır. Mevcut bir yazılımda güncelleme yapmak yeni bir yazılım geliştirmekten daha zor olmasına rağmen beklenti yeni yazılım geliştirmeye göre daha fazla olmaktadır. “Zaten çalışan birşeyler var sadece biraz değiştirilecek” diye düşünülmektedir. Yeni yazılım geliştirirken teknolojide bilmediğiniz konuları Internet’ten rahatlıkla öğrenebilirsiniz. Çözüm sizin çözümünüz olduğundan ya da aktif olarak çözüme katıldığınızdan sistemi bilirsiniz. Ancak mevcut yazılımda en büyük problem daha önce yapılan işi anlamaktır. Bunu da Internet’te onlarca kaynaktan yapamıyorsunuz. Eğer varsa (pek çok durumda olmuyor) tasarım dokümanından anlamaya çalışıyorsunuz. Bu dokümanlar da ya yeterinde detaylı olmuyor ya da güncel olmuyor. Üzerinizde çalışan birşeyi bozma baskısıyla çalışmak ayrı bir problem Yaptığınız herhangi bir değişiklik haberiniz olmadan çok farklı bir yerde soruna yolaçabilir. Bir yandan iş ile boğuşurken ilerlemenizden menuniyetsiz yöneticinizin baskı ve suçlamaları ile mücadele edersiniz.  Sonuç olarak zordur mevcut yazılımda güncelleme yapmak.