Özet:
Yazılım maliyet tahmini bir yazılım mühendisliği projesini geliştirmek için gerekli olan her türlü kaynağın önceden tahmin edilmesi işlemidir. Yazılım efor tahmini kavram olarak basit olsa da gerçekte zor ve karmaşıktır. Bu yüzden birçok yazılım projesi öngörülen zamanda bitirilmemiş ya da proje masrafları düşünülen miktardan çok fazla olmuştur. Yazılım projelerinin farklı aşamalarında yapılan bütçe çalışmalarında, maliyet tahmin zorlukları dolayısıyla, satış tutarı ve maliyet analizleri gerçekçi hesaplanamamaktadır. Bu zorluklar, projenin kendine özgü özelliklerinden kaynaklandığı gibi, kontrol dışı bilgi eksikliğinden, bilgilerin değerlendirilmesindeki öznel yorumlardan, maliyet analiz çalışmalarında ortaya çıkan direkt ve endirekt maliyet ayrım hatalarından ve proje risklerinin tam olarak doğru tahmin edilmemesinden kaynaklı olabilmektedir. Yazılım projesine başlarken projenin ne kadar sürede biteceği, proje maliyeti, projede çalışacak kişi sayısı gibi birçok etmen önceden tahmin edilerek proje oluşturulmalıdır. Yazılım projelerinde kullanılacak olan kaynakların önceden tahmin edilmesinin doğruluğu ve güvenilirliği yazılım projesinin gidişatı için çok önemlidir. Yazılım geliştirme teknolojisinin sürekli değişen senaryolar içinde olması efor tahminini daha zorlu
hale getirmektedir. Yazılım projeleri için yapılan efor tahminin doğruluğu ve güvenilirliği yazılım şirketlerinin rekabeti açısından önemlidir. İyi tahminler yazılım projeleri yönetiminde çok önemli bir rol oynamaktadır. Yazılımın etkili ve verimli gelişimi doğru tahminler gerektirir. Bu çalışmada yazılım maliyetini hesaplamak için üç farklı model geliştirilmiştir. Her model için farklı veri seti kullanılmıştır. Yazılım maliyetini hesaplamak için geliştirilen birinci model regresyon tabanlı bir modeldir. Bu modelde Cocomo81, Cocomonasa ve Cocomonasa2 veri setleri kullanılmıştır. Bu model ağırlıklandırılmış lineer regresyon, logaritmik regresyon, üstel regresyon, polinomsal regresyon ve çoklu polinomsal regresyon yöntemleri kullanılmıştır. Bu yöntemler uygulanırken en küçük kareler metodu kullanılmıştır. Geliştirdiğimiz modelin başarısını ortaya koymak için hata fonksiyonları kullanılmıştır. Ayrıca ortaya çıkan sonuçların regresyon tabanlı yazılım maliyeti yapan Cocomo (Constructive Cost Model) modeline göre sonuçları ortaya konulmuştur. Yazılım maliyet tahmininde sunduğumuz ikinci model ise yapay sinir ağları tabanlı modeldir. Bu modelde Cocomo81, Cocomonasa ve Cocomonasa2 veri setleri kullanılmıştır. Bu modelde ise klasik çözümlerden farklı olarak veri setlerinin özellikleri gruplandırıldı ve veri setinin elde edilen formu üzerinden yapay sinir ağı (YSA) modeli geliştirildi. Böylece yazılım maliyetine farklı bir yapay sinir ağı yaklaşımı ile çözüm ortaya konuldu. Yazılım maliyeti tahmininde sunulan üçüncü model ise gerçekleştirilen yazılımın metodolojisini dikkate alınarak geliştirilmiştir. Ayrıca bu modelde makine öğrenme algoritmaları kullanıldı. Bu model ile Scrum metodolojisi ile geliştirilen yazılımlar için regresyon tabanlı makine öğrenme algoritmalarını kullanarak yazılım maliyet tahmini gerçekleştirilmeye çalışılmıştır. Bu modelde Destek Karar Regresyon (Suppport Vector Regression-SVR), Gradyan Artırma (Gradient Boosted Machine-GBM), Rastgele Orman (Random Forest) ve Çok Katmanlı Perseptron (Multi-Layer Perceptron) gibi regresyon tabanlı algoritmalar kullanılmıştır. Bu Model’de Apache, JBoss, JIRA, Spring ve MongoDB projelerinde hazırlanan özelleştirilmiş Çevik veri setleri kullanılmıştır. Burada ham veri üzerinde normalleştirme ve iyileştirme işlemleri gerçekleştirilmiştir. Bu model de projeler 4 farklı faza ayrılmıştır. Her bir faz için maliyet tahmini gerçekleştirilmiştir. Son adımda ise toplam maliyet tahmini ortaya konmuştur. Bu modelde regresyon tabanlı olan gradyan artırma algoritması, destek vektör regresyon, çok katmanlı perseptron ve rastgele orman algoritmaları kullanılmıştır.
Bu tez çalışmasında yazılım maliyet tahmini için bütüncül bir yazılım maliyet tahmin modeli ortaya konulmuştur. Böylece yazılım geliştiriciler ve karar vericiler, projeye başlamadan önce daha doğru bir yazılım efor tahmini ile daha başarılı sonuçlar ortaya koyabileceklerdir.