Yazılım Projeleri Nasıl Yönetilmelidir..!
Yaşadığımız dünyayı geçtiğimiz yüz hatta on yıllar ile kıyasladığımızda teknolojik gelişmelerin logaritmik olarak arttığını görüyoruz.
Alpplas Ar-Ge Mühendisi Gömülü Yazılım
Ebru ÜstünbaÅŸ
YaÅŸadığımız dünyayı geçtiÄŸimiz yüz hatta on yıllar ile kıyasladığımızda teknolojik geliÅŸmelerin logaritmik olarak arttığını görüyoruz. Çok deÄŸil 2000’li yılların başındaki teknoloji ile günümüz teknolojisini kıyasladığımızda bile aradaki fark yadsınamayacak kadar fazla. Beyaz eÅŸyalarımızın internete baÄŸlandığı, kol saatlerimizden telefon bildirimlerimizi alabildiÄŸimiz, otonom araçların, yapay zeka uygulamalarınının gündemde olduÄŸu yıllardayız. Daha mevcut teknolojinin geldiÄŸi noktayı anlayamadan kendimizi o teknolojiyi kullanırken buluyor ya da o teknolojinin çoktan evrilerek daha üst seviyelere ulaÅŸtığını görüyoruz.
DüÅŸünsenize elinizde altın kaplamalı bir cep telefonu var. Ancak o kadar yavaÅŸ çalışıyor ki menüde gezinmeniz bile dakikalar alıyor. Bu durumda telefonun altın kaplamalı olması fonksiyonel açıdan yetersizliÄŸini tolere edebilir mi? Elbette hayır. Bu yüzden teknolojonin ilerleme hızını ivmelendiren en önemli unsur ÅŸüphesiz ki yazılım. Bugün ÅŸehirlerde, sokaklarda, evlerimizde, ceplerimizde bile yazılım ile kuÅŸatılmış yeni teknoloji ürünleri yer alıyor. Yalnızca günlük yaÅŸantımızda deÄŸil fizik, kimya, biyoloji bilimlerinde de modelleme ve simülasyon metotlarında yine yazılım sayesinde birçok problem ve bilinmezlik çözüme kavuÅŸmakta.
Mademki teknolojinin ve bilimin birçok alanında yazılım bu denli önemli, öyleyse yazılım geliÅŸtiren tüm firmaların yazılıma dolayısıyla da yazılım projelerine ekstra önem ve öncelik vermesi gerekir öyle deÄŸil mi? Ne yazık ki gerçekte durum pek de düÅŸünüldüÄŸü gibi deÄŸil. Amerika’da Standish Group tarafından yapılan bir araÅŸtırmaya göre yazılım projelerinin; %33’ü bitmeden iptal edilmekte, %53’ünde maliyet tahminleri % 189 oranında aşılmakta, proje süre aşımı ortalama olarak % 222 oranındadır. Bir projenin baÅŸarılı olmasını belirlenen zaman ve bütçe dahilinde, koÅŸulan performans gerekliliklerini yerine getirmesi ÅŸeklinde tanımlayacak olursak; araÅŸtırma verileri gösteriyor ki aslında yazılım projeleri çoÄŸunlukla baÅŸarısız sonuçlanmaktadır.
Yazılım projelerindeki baÅŸarısızlıklara birçok sebep göstermek mümkün. Öncelikle yazılım, diÄŸer mühendislik alanlarına göre oldukça yeni bir alan. Dolayısıyla yazılım süreçlerinin ve metodolijisinin oturmuÅŸ kurallarından bahsetmek güç. Bununla beraber birçok yazılım dili ve yazılım geliÅŸtirme aracı bulunmakta. Tüm bu sebepler birçok yazılımcının, yazılım faaliyetlerini kendi kurallarına ve doÄŸrularına göre gerçekleÅŸtirmesine sebep olmakta. Hepimiz iÅŸ hayatında çalışan bir kodun yeterli olduÄŸu yorumuna veya süreçlerin tanımlanması, ihtiyaç duyulan bilgi ve dokümanların temini, risklerin belirlenmesi, süreçlerin ve iÅŸ karmaşıklığının tanımlanması, faaliyet adımlarının dokümante edilmesi gibi proje alt adımlarının fazladan iÅŸ yükü veya oyalayıcı iÅŸler olarak nitelendirildiÄŸine ÅŸahit olmuÅŸuzdur. Bu yorum ve tanımlar bir projenin baÅŸarılı bir ÅŸekilde yürütülmesini ve tamamlanmasını direkt olarak engellemektedir. Yazılım projeleri de diÄŸer projeler gibi tanımlanan hedeflerine uygun olarak, kalite standartlarının göz önünde bulundurulması mecburi, sürdürülebilir, belli bir disiplin ile gerçekleÅŸtirilmesi gereken adımlardan oluÅŸmaktadır. Dolayısıyla çalışan bir kod aslında sadece o günü kurtarır! Yurtiçi ve yurtdışında birçok proje doÄŸru yürütülmediÄŸi için herhangi bir müdahale ihtiyacında düzeltilememekte veya geliÅŸtirilememektedir. Bunun yerine ister o yazılımın ilk geliÅŸtiricileri, isterse yeni devralan bir geliÅŸtirici çoÄŸunlukla yazılımı en baÅŸtan yapmak zorunda kalır. Bu da ekstra zaman, enerji ve maliyet anlamına gelmektedir. Martin Fowler’ın “Herhangi bir insan bilgisayarın anlayabileceÄŸi kod yazabilir. İyi programcılar ise insanların anlayabileceÄŸi kod yazarlar. “ sözü belki de bu duruma verilebilecek en güzel cevaplardan biridir. AraÅŸtırmacılar günlük hayatta da sıkça karşımıza çıkan yazılım projelerinin baÅŸarısız olma sebeplerini 4 temel baÅŸlıkta ele almışlardır. Bunlar;
- Teknik nedenler; kullanıcı gereksinimlerinin doÄŸru belirlenmemesi, geçmiÅŸe yönelik yazılım ölçüm verilerinin bulunmaması, uygun olmayan, yetersiz veya disiplinsiz test yöntemlerinin kullanılması, yazılım geliÅŸtirme faaliyetinin yeniden kullanılabilir bileÅŸenler ile yapılmaması
- Yönetimsel nedenler; gerçekçi olmayan zaman planı ve sürekli zaman baskısı, proje sorumlusunun ve/veya proje takımının doÄŸru belirlenmemesi, ilgisizliÄŸi veya teknik olarak yetersizliÄŸi, kalite kontrol yaklaşımlarının az kullanılması veya hiç kullanılmaması, problemlerin doÄŸru iletiÅŸimin saÄŸlanamaması nedeni ile geç farkedilmesi
- Sosyal nedenler; hataların sonuçlarının deneyimsizlikten ötürü öngörülememesi veya paylaşılmaması, takım içi iletiÅŸimin zayıf olması, bölüm ve birimler arası iletiÅŸimin zayıf olması
- DiÄŸer nedenler; proje ekibindeki kiÅŸilerde sıkça yaÅŸanan deÄŸiÅŸiklikler, hem yazılım hem de donanımın eÅŸzamanlı olarak birlikte geliÅŸtirildiÄŸi hibrid projelerin fazla karmaşık olması, teknik personelin genel becerilerinin dışındaki alanlarda projeler yürütülmesi olarak sıralanmaktadır.
Yazılım projelerinin baÅŸarısız olma sebepleri incelendiÄŸinde aslında kaçınılması gereken durumların da doÄŸal olarak tanımlanmış olduÄŸu görülüyor. Bir yazılım projesinin baÅŸarılı sonuçlanması için her adımının doÄŸru tanımlanması ve yürütülmesi gerekmektedir. Projenin hedeflerinin yalnızca proje ekibi tarafından anlaşılması yeterli bir parametre deÄŸildir. Öncelikle tüm isterler ve senaryolar o proje ile ilk kez karşılaÅŸan bir kiÅŸinin dahi anlayabileceÄŸi ÅŸekilde dokümante edilmelidir. Bununla beraber yazılım tasarım dokümanı gibi geliÅŸtirilecek yazılımın mantıksal algoritmasını içeren dokümanlar hazırlanmalıdır. Yazılım geliÅŸtirme iÅŸinin yapılabilmesi için ihtiyaç duyulan tüm teknik dokümanlar saÄŸlanmalıdır ki herhangi bir adım yoruma açık deÄŸil istenen veya ihtiyaç duyulan çıktı ile doÄŸrudan örtüÅŸebilsin. Hazırlanan veya temin edilen tüm datalar mutlaka yedeklenen bir ortamda, açık ve anlaşılır ÅŸekilde klasörlenerek muhafaza edilmelidir. Aynı zamanda yazılım geliÅŸtirilirken versiyonlamanın doÄŸru yapılması, versiyon geçmiÅŸinin açık ve anlaşılır ÅŸekilde kaydedilmesi gerekmektedir. Böylece herhangi bir müdahale ihtiyacında kolay ve hızlı iÅŸlem yapılabilir. Yazılım geliÅŸtirme adımları modüler geliÅŸtirilmelidir. Bu sayede yazılımın herhangi bir bölümünde yapılan deÄŸiÅŸiklik genelini etkilememeiÅŸ olur. Yazılım ekibi belirledikleri periyotlarda mutlaka bir araya gelerek geçmiÅŸ projelerin kazanımları olan öÄŸrenilmiÅŸ dersler (lesson learned) veya iyi uygulama (best practices) örneklerini de göz önünde bulundurarak; gerçekleÅŸtirilen iÅŸ adımları, mevcut durum ve sonraki iÅŸ adımları hakkında görüÅŸmeli, yaÅŸanan veya öngörülen problemler hakkında açık iletiÅŸim kurmalıdır. Yapılan toplantıların, görüÅŸmelerin sonuçları proje yöneticisine doÄŸru ve açık bir ÅŸekilde sunulmalıdır. Bu sayede önceden aksiyon almak, yanlış zaman planı yapmanın önüne geçmek, gerekli bölüm veya birimleri zamanında bilgilendirmek mümkün olacaktır. Aynı zamanda bu görüÅŸmelerin çıktısı olan toplantı notlarının, mevcut projenin öÄŸrenilmiÅŸ ders veya iyi uygulama kaynağı olacağı göz önünde bulundurulmalı bu sebeple mutlaka toplantı notları da kayıt altına alınmalıdır. Yazılımın geliÅŸtirme adımları kadar test adımları da projenin baÅŸarısı için önemlidir. Yazılım testleri doÄŸru tanımlanmış disiplinli bir sınama niteliÄŸinde olmalıdır. Yazılım testleri, yazılım projelerinin kalite kontrol adımlarının belki de önemli bileÅŸenidir. Yapılan testler, sonuçları, testler sırasında karşılaşılanlar ve akabinde alınan aksiyonlar da kayıt altına alınmalıdır ki bir sonraki proje için bir alt yapı ve bilgi birikimi olarak aktarılabilsin.
Yazılım projelerinin baÅŸarıya ulaÅŸması için projenin bir sistematiÄŸinin olması mecburidir. Bunun için yazılım süreçlerinin doÄŸru ve anlaşılır tanımlanması gerekir ancak yalnızca süreçleri tanımlamak elbette yeterli deÄŸildir. Sürdürülebilir bir baÅŸarı; yazılımcının yaratıcılığını ön plana çıkartmak, ona bir saha açmak, aynı zamanda belirlenen sistematiÄŸin uygulanmasını saÄŸlamak ile mümkündür. Süreçlerin tanımlanması; ekibe katılan veya mevcutta iÅŸlerini yürüten bir yazılımcının izleyeceÄŸi yolların, kiÅŸiye veya yoruma baÄŸlı deÄŸil önceden belirlenmiÅŸ kurallar dahilinde ilerlemesini saÄŸlar. Bu yazılımcıların sistematiÄŸi uygulaması için kolaylık saÄŸlarken; müdahale edilmesi gereken eski veya yeni baÅŸlayacak bir proje daha az zaman kaybı ve kolaylıkla ilerletilmiÅŸ olur. Unutulmamalıdır ki yazılım geliÅŸtirmeyi iÅŸ olarak yapmakla, bunu severek,tutkulu bir ÅŸekilde yapmak tamamen farklı ÅŸeylerdir. Bununla ilgili olarak en sık karşılaşılan problemlerden biri de yazılım ekibinin sürekli benzer iÅŸler ve problemler üzerinde çalışmasıdır. Bu kiÅŸilerin, projelerin dolayısıyla da firmaların geliÅŸimini olumsuz etkileyen durumlardan biridir. Sürekli aynı problemler veya birbirine çok benzer iÅŸler ile uÄŸraÅŸan bir yazılımcı hem kendini geliÅŸtirmeye hem de yeni ÅŸeyler öÄŸrenmeye zaman yaratamazken, yazılımcının yaratıcılığını kullanacak bir fırsat yakalaması da güçleÅŸir. Bu yüzden önceden tanımlanan süreç ve izlenecek adımların olabildiÄŸince kolay ve pratik ilerlemesi gerekir. Bunun için iÅŸ adımlarının gerçekleÅŸtirilmesini ve takibini kolaylaÅŸtıran uygulamalardan yararlanılabilir. ÖrneÄŸin; otomatik versiyonlama, girilen verilere göre otomatik dokümantasyon gibi. Süreçlerin tanımlanması ve uygulanmasının yanında yazılımcılara doÄŸru görev paylaşımı yapmak da projenin baÅŸarısı ile doÄŸrudan ilgilidir. ÖrneÄŸin daha az tecrübeli bir yazılımcı küçük bir projeyi ÅŸevkle yerine getirirken, tecrübe ve becerilerine göre karmaşık bir proje hem kendisinin hem de projenin baÅŸarısız olmasına yol açar. Bunun yerine kiÅŸilere mutlaka bilgi, tecrübe ve yeteneklerine göre görev paylaşımı yapmak gerekir. Bu hem projenin baÅŸarısı hem de çalışanların mesleki tatminleri ve motivasyonları için bir gerekliliktir. Hem firmalar hem de yazılım proje ekipleri, geliÅŸimin teknoloji ile paralel olarak ilerlemesi gerekliliÄŸini göz önünde bulundurmalıdır. Bu yüzden yazılım proje ekibinin teknolojiyi yakından takip etmesi, alanı ile ilgili sürekli okuması ve araÅŸtırması, sürekli geliÅŸmesi ve geliÅŸtirmesi gerekir. Firmaların da bu geliÅŸim için gereken imkanları saÄŸlaması kaçınılmaz bir gerekliliktir.
Sonuç olarak yazılım projeleri yalnızca kod geliÅŸtirme ve kodun çalışması olarak deÄŸerlendirilemeyecek kadar karmaşık ve önemlidir. Yazılım projelerinin baÅŸarılı olması için tüm anlatılanlardan önce bu anlatılanların gerekliliÄŸine inanmak gerekir.




