Yazılım kalitesi dendiğinde aklınıza ilk neler geliyor bilmiyorum ama benim uzun bir süre bir çok soru geldi aklıma. Mesleğim ve yaptığım iş dolayısıyla uzun bir süre cidden kafa yordum kendimce. Bazen hala sorguluyorum…Yazılım nedir? Kalite nedir? Neden gerekli? Kaliteli olduğunu gösteren kriterler neler? gibi formal bir şekilde bir kaç tanesini yazabilirim…Çok fazla bu soruların içerisine girmeden, fark etmiş olacağınız üzere yazılım kalitesi ile ilgili bir kaç şey karalayacağım bu sefer…Biraz sesli düşünüp, insanlar neleri nasıl düşünüyoru da görmeyi planlıyorum açıkcası…Neyse dağılmayalım çok…
Öncelikle yazılım kalitesinin ne olduğunu oldukça basite indirgeyip, daha sonra karmaşıklaştırmayı düşünüyorum. Genelde komplike yaklaşımlar ile bazı şeyleri anlamakta kendi kendimize işimizi zorlaştırdığımızı düşünüyorum. Yazılım kalitesi, yazılımın çözmeye çalıştığı problemlerin başarı derecesidir. En basitinden bu şekilde düşünebiliriz. Bir problemimizi çözmek, ya da başka bir ifade ile; bir ihtiyacımızı karşılamak adına yazılımın, ihtiyaçlarımızı karşılama derecesi olarak biraz daha karmaşıklaştırabiliriz bu tanımı.
Genelde yazılım kalitesi diyince, esneklik,hız,taşınabilirlik falan gibi özellikleri başlıyoruz saymaya…Ancak bu özellikler bir yazılımın her zaman kaliteli olmasını sağlar gibi bir şey söyleyemeyiz. Ya da bunlar olmazsa yazılımın kalitesiz olduğunu da söyleyemeyiz. Bu özellikler, kalite derecesinin belirlenebilmesi için, ihtiyaçlar doğrultusunda ortaya çıkan özelliklerdir. Bu iki kavramın tam olarak anlaşılmadan, çok iç içe alındığını ve bazen, farklı durumlarda sorunlara yol açtığını gözlemliyorum. Bundan dolayı yazılım kalitesi ve kalite özelliklerinin birbirinden ayrı kavramlar olduğunun altını çizmek isterim.
Bir yazılım projesinin geliştirme aşamasında, her yazılımcı, kaliteli olacağını düşündüğünden yukarıda saydığım bir kaç özelliğe direkt dikkat ederek geliştirmeye başlar. “Hızlı olsun”…”Esnek olsun, yarın başka modüller yazarım”…”Kodu okunabilsin”…”Veri katmanını, tüm veritabanı sistemleri ile uyumlu çalışacak şekilde yazim ki, başka sistemlerle de uyumlu olsun”…Bunlar sadece bir kaçı…Hepimizin düşündüğü, bir şekilde yapmaya çalıştığı şeyler…İyi güzel de, bunlar gerçekten gerekli mi? Kodu okunamayan, tek veritabanı ile çalışan, çok hızlı olmayan bir yazılım kaliteli olamaz mı? Olur, hem de çok güzel olur…
Yukarıda dediğim gibi ihtiyaçları sorunsuz bir şekilde karşıladığı sürece, problemleri kolaylıkla çözdüğü sürece yazılım kaliteli olarak nitelendirilebilir. Nitelendirilebilir diyerekten özellikle ucu açık bir ifade kullandım. Bu noktada da ‘Kime göre kaliteli?’ sorusu ortaya çıkıyor çünkü. Yazılım kalitesi, yazılımın kullanıcıları açısından farklı şekilde yorumlanabilir. Yazılımı yazan kişiler açısından, yazılımı kullanan kişiler açısından ve yazılıma bakım yapacak kişiler açısından kalite derecesi değişiklik gösterecektir.
Biraz basit ve belki saçma gelebilecek bir örnek üzerinden gidiyor olacağım, ama yukarıda bahsetmiş olduğum farklılıkların netleşmesi adına daha anlamlı olacağını düşünüyorum. 2013’e yeni girdiğimiz şu günlerde, yılın ilk günlerinde bir çok kişi milli piyango heyecanı yaşamıştır sanırım. Her senenin ilk saatlerinde, bu piyango çekilişini yapacak bir uygulama yazmamız gereksin. İhtiyaç oldukça basit…Yedi tane düğme olacak, her birine basınca 0 ile 9 arasında bir sayıyı gösterecek. Çıkan sayılar da veritabanına yazılacak. Oldukça basit…Görsel olarak hiç bir özelliğinin olmasına da gerek yok. Bu ihtiyaçları tam anlamadan, bu ihtiyaçların çıktığı noktaları iyi çözümlemeden bu kadar basit bir yazılım projesini geliştirmeye başlarsak, kalite özellikleri içerisinde kendimizi kaybetmemiz çok mümkün. Mesela bu uygulamanın hızlı olmasına hiç gerek yok…Yılbaşı eğlence telaşı zaten herkes sabah bakıyor (: 1 sayıyı 10 dakikada hesaplasa da olur…Kullanışlı olmasına da gerek yok, sadece bir düğme olacak, sayıyı gösterecek ekstra bir şeye gerek yok…Görsel olarak yanar dönerli bir arayüze de gerek yok…Çıkan sayıları yazarız bir kartona, 2-3 kadın ve erkek şık bir şekilde sunar (: …Genişletilebilir de olmasına gerek yok, 7 tane sayı hesaplayacak sadece… Vermiş olduğum örnekler çok basit örnekler olsada, burada altını çizmek istediğim nokta, kalite özeliklerinin, ihtiyaçlar doğrultusunda şekillenmesi gerektiği. Bu uygulamayı ortada olmayan bir ihtiyaca göre, yarın öbür gün sayılsal loto içinde kullanılabilir diye esnek ve genişletilebilir bir şekilde yapmaya çalışırsanız, geliştirme süresini gereksiz bir şekilde riske atıyor olup, var olan ihtiyaçları karşılamakta da büyük sıkıntılar yaşayabilirsiniz. Kısacası yazılımın kalitesi için, kalite özelliklerinden kaç tanesini karşıladığı değil, nasıl karşıladığı daha önemli.
Yazılım geliştirirken, genelde analiz süreci iyi işletilmez ise, daha geniş bir bakış açısı ile düşünülmeye gidiliyor. Bazen iyi, bazen kötü bir şey aslında bu…Yani; basit problemler iyi anlaşılmadığından, daha geniş bir perspektif ile bakılıp, “işte şunu da sağlayalım, bunu bu şekilde yapalım ki ileride başka birşey geldiğinde sağlamış oluruz” gibi, kulağa güzel gelen ama karmaşıklığa yol açabilecek durumlar ortaya çıkabiliyor. Bu durum mevcut geliştirilmekte olan yazılım projesinin kalitesine olumsuz bir şekilde yansıyabilir, hatta büyük bir ihtimal kesin yansır. Ayrıca bir müşteri için geliştirdiğiniz bir projeyi, kaliteli olması adına genişletilebilir olarak düşünüp, başka müşterilere de, başka modüller ile satabiliriz belki diye ekstra bir çaba içerisine girdiğinizde, bu çabanın gerçekten karşılığının olması da gerekmektedir. Cidden başka müşterilere, başka modülleri satabilecek satış ekibinin de olabilmesi ve kaliteli olması adına yapmış olduğunuz bu geliştirmeyi pazarlayabilmesi önemlidir. Yoksa kaliteli olduğuna inandığınız yazılımın, kalite özelliğinin hiç bir önemi olmaz.
Kısacası yazılımın kalitesi, yazılımın ortaya çıkma nedenleri ile birebir olarak alakı bir kavramdır. Kaliteli bir yazılım için, ihtiyaçların çok iyi analiz edilmesi ve bu ihtiyaçların sebeplerinin anlaşılması gereklidir. Aksi takdirde sıkıntılı durumların oluşması çok muhtemel…Şimdilik bu kadar…Bu konu ile ilgili aklıma başka sorular geldiğinde yine bu şekilde sesli(?) düşünüyor olurum herhalde…