Makine Öğrenmesi tabanlı yazılım maliyet tahmini yöntemlerinin karşılaştırmalı analizi
A comparive analysis of machine learning based software cost estimation methods
Yazar: MUAZ GÜLTEKİN
Danışman: PROF. DR. OYA KALIPSIZ
Yıldız Teknik Üniversitesi / Fen Bilimleri Enstitüsü / Bilgisayar Mühendisliği Ana Bilim Dalı / Bilgisayar Mühendisliği Bilim Dalı
Derece: Doktora, 2019
Konu: Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control

Ö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 bitirilememiş 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 edilememesinden kaynaklanabilmektedir. 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 alarak 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.

Abstract:
Software effort estimation is the process of estimating the resources required to develop various kinds of software project in advance. Software effort estimation, although simple in concept, is practically difficult and complex process. So many software projects could not be completed in the estimated time or the cost of the project has been much more than the amount that is considered. Planning the budget for each stage of software development life cycle is difficult due to software development phase characteristics. So, that brings more uncertainty in computation of the total budget estimation such as sales amount and analysis effort. These difficulties may arise from the lack of out-of-control information, subjective interpretations in the evaluation of information, direct and indirect cost discrimination errors in cost analysis studies and inaccurate estimation of project risks, as a result of the specific features of the project. Before the start the project there are many factors must be defined and estimated correctly such as time, cost, scope and the number of the people. The accuracy of the estimate effort of software projects and software reliability is very important for the progress of the project. The estimation effort of the software development is constantly changing. This is sourcing from technological improvment which force the decision makers to adopt new scenarios. The accuracy of the estimate effort of software projects is crucial for the competitiveness of software companies and reliability. In this thesis three model were developed for software effort estimation. Each model was run on different dataset. The first Effort Estimation model is regression based. Cocomo81, Cocomonasa and Cocomonasa2 dataset were used in this model. Weighted linear regression, logarithmic regression, exponential regression, power regression, polynomial regression and multiple polynomial regression algorithms were used. In this model the least square fitting solution used to represent the success of each algorithms. Finally, the result of each algorithms is compared to Cocomo model and the success of each algorithm represented according to Cocomo model. The second proposed software effort estimation model is artificial neural network based. Cocomonasa and Cocomonasa2 datasets were used in this model. This model is different from traditional solution. In this Model, as first step features are grouped according their types. After that Artificial Neural Network is developed and the success of the model is represented. The third model of software cost estimation is developed considering the methodology of the software. In addition, this model has used machine learning algorithms. In this model, software cost estimation has been tried to be realized by using regression-based machine learning algorithms for software developed with Scrum methodology. In this model Apache, JBoss, JIRA, Spring and MongoDB and Customized Agile data sets were used. In this model, normalization and improvement on raw data has been carried out. The projects in this model are divided into 4 different phases. Cost estimation was performed for each phase. In the last step, the total cost estimate has been established with suggested aggregaiton function. Gradient Boosting Algorithm, Support Vector Regression, Multi-Layer Perceptron and Random Forest Regression algorithms are used by this model. In this thesis, an integrated software cost estimate for software cost estimation models have been revealed. Thus, software developers and decision makers will be able to achieve more successful results with a more accurate software effort estimate before starting the project.