=Paper= {{Paper |id=Vol-2201/UYMS_2018_paper_88 |storemode=property |title=Cevik Model Kullanan Projelere Ait Veri Seti Ile Is Gucu Kestirimi(Software Effort Estimation in Agile Environment) |pdfUrl=https://ceur-ws.org/Vol-2201/UYMS_2018_paper_88.pdf |volume=Vol-2201 |authors=Seyma Nur Kolak,Gizem Cavus,Muaz Gultekin,Oya Kalipsiz }} ==Cevik Model Kullanan Projelere Ait Veri Seti Ile Is Gucu Kestirimi(Software Effort Estimation in Agile Environment)== https://ceur-ws.org/Vol-2201/UYMS_2018_paper_88.pdf
Çevik Model Kullanan Projelere Ait Veri Seti ile İş
              Gücü Kestirimi

    Şeyma Nur Kolak1, Gizem Çavus1, Muaz Gültekin1, Oya Kalıpsız1
              1 Yıldız Teknik Üniversitesi, Bilgisayar Mühendisliği,

                      İstanbul, Türkiye
              {seymanur.kolak, gizem,cavus,
muaz.gultekin}@std.yildiz.edu.tr ,oya@ce.yildiz.edu.tr




Özet. Bilgi teknoloji alanında yapılan birçok projede bilgi yetersizliğinden ve
müşteri ile yeteri kadar iletişim halinde kalınmadığından dolayı birçok proje ba-
şarısızlıkla sonuçlanmaktadır. Burada önemli olan nokta projenin başlangıcında
yazılımın büyüklüğünü, yazılımı geliştirmek için gereken kişi sayısını ve yazı-
lımın maliyetini doğru bir şekilde öngörüp planlama yapabilmektir. Yazılım
projelerinin kaynak tahminin 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 senar-
yolar içinde olması efor tahminini daha zorlu hale getirmektedir. Yazılım proje-
lerinin efor tahminin doğruluğu ve güvenilirliği yazılım şirketlerinin rekabeti
açısından önemlidir. Modern yazılım projeleri, yazılım geliştirme sürecinin her
yinelemesi için hızlı, artan bir şekilde teslim edilmesini gerektirdiğinden, yine-
lemenin yürütülmesini izlemek ve iterasyon ilerledikçe kaliteli ürünler sunmak
basariyi arttıracaktır. Bugüne kadar yazılım maliyet kestirimi için birçok model
geliştirilmiştir. Bu modellerin çoğu yazılım geliştirme sürecinden bağımsızdır.
Bu nedenle yazılım geliştirme metodolojisine bağlı olarak efor ve maliyet tah-
minin yapılması projenin basarisini arttıracaktır. Bu çalışmada scrum metodolo-
jisi kullanılarak geliştirilen yazılım projeleri için maliyet tahmini yapmaya ça-
lıştık. Geliştirdiğimiz model de gradient boosting algoritmasını kullanarak oluş-
turulan scrum veri seti üzerinde başarılı sonuçlar elde ettik.




Anahtar Kelimeler: Çevik Süreçler, Scrum Metodolojisi, Maliyet Kestirimi,
Makine Öğrenmesi, Regresyon, Sınıflandırma
       Software Effort Estimation in Agile Environment

           Şeyma Nur Kolak1, Gizem Çavus1, Muaz Gultekin1, Oya Kalipsiz1
                   1Yıldız Technical University, Computer Engineering,
                                   Istanbul, Turkey

            {seymanur.kolak, gizem,cavus, muaz.gultekin}@std.yildiz.edu.tr
                               ,oya@ce.yildiz.edu.tr




       Abstract. Many projects in the field of information technology are failing due
       to lack of information and they also fail because project decision makers are not
       in contact with the customer. The important point is predicting the size of the
       software, predicting the number of people required to develop the software and
       predicting the cost of the software accurately at the beginning of the project.
       The accuracy and reliability of the software resource estimate for the project is
       very important for the progress of software projects. The fact that software de-
       velopment technology is in constantly changing scenarios makes effort estima-
       tion more challenging. The accuracy of the effort estimates of software projects
       and the reliability of the software projects are so important for software compa-
       nies because of the competitiveness. As modern software projects need to be
       delivered quickly and incrementally for each iteration of the software develop-
       ment process, it will be more successful to monitor the execution and provide
       quality products as the iteration progresses. To date, many models have been
       developed for software cost estimation. Most of these models are independent
       of the software development process. For this reason, making effort and cost es-
       timation based on software development methodology will increase the success
       of the project. In this study, we tried to estimate effort for software projects
       which is developed in scrum environment. We have achieved successful results
       on the scrum dataset created using the gradient boosting algorithm.




       Keywords: Agile, Scrum Methodologies, Effort Estimation, Machine Learning,
       Regression, Clustering




1 Giriş

Yazılım ölçümü, yazılım mühendisliğinin önemli bir bileşenidir. Tasarımın yüksek
kalitede olup olmadığını ve uygulamaya geçişten önce, gereksinimlerin tutarlı ve ek-
siksiz olduğunu görebilmek için yazılımların özellikleri ölçülmelidir. Etkin proje yö-
netimi gerçekleştirmek amacıyla yazılım teslim süresi ve maliyet kestirimi için süreç
ve ürünlerin nitelikleri ölçülür. [1] Tahmin riski, kaynaklar, maliyet ve program için
belirlenen niceliksel tahminlerdeki belirsizlik derecelendirme ile ölçülür. [3] Proje
kapsamı yeterince anlaşılmamışsa veya proje gereksinimleri değişiyorsa, belirsizlik ve
tahmin riski tehlikeli derecede yüksek olur.
    Yazılım projeleri maliyet ve zamanlamayı aşma eğilimindedir. 2012 yılında
McKinsey ve Oxford Üniversitesi tarafından, 5400 büyük ölçekli Bilgi Teknoloji (BT)
projelerine yapılan çalışmada, bu projelerin ortalama %66’ sının maliyet kestiriminin
üzerinde olduğu ve %33’ ünün planlanan zamanın üzerine çıktığı tespit edilmiştir.
Yazılım projelerinin %82’ sinin planlanan program ve zamanda tamamlanamadığı
tespit edilmiştir. Bu tür problemlerin nedeni, proje yöneticilerinin maliyet kestirimini
ve riskleri doğru yönetememesidir. [2]
    Geç teslimat ve maliyet aşımları uzun yıllar yazılım projelerinde sıkça karşılaşılan
sorunlardan olmuştur. Modern yazılım geliştirme, geliştiricilerinin önceki bölümlerin
veya sürümlerin geliştirilmesi sırasında öğrenilenlerden faydalanmasına olanak sağla-
yan, artımlı ve yinelemeli bir yaklaşıma dayanmaktadır. Yazılımı artan ve yinelemeli
geliştirmek, Birleştirilmiş Süreç (Rational), XP, Scrum ve diğer çevik yazılım geliş-
tirme yöntemleri gibi birçok popüler yazılım geliştirme metodolojisinin önemli parça-
larıdır [3]. Bu çalışmada, çalışma miktarı, bir iterasyonun sonunda teslim edilip edi-
lemeyeceği konusunda teslimat yeteneğini tahmin etmek hedeflenmektedir. Apache
ortamında geliştirilmiş açık kaynak projesine ait veri seti ile çalışma gerçekleştirilmiş-
tir. Bu projede, her iterasyonda, bir dizi iş (konu, issue) tamamlanması gerekir. Proje-
nin tamamlanmasına göre 4 ayrı zaman dilimi bulunmaktadır. Bu zaman dilimleri
projenin başlangıç halindeki, projenin %30-%50-%80 lik kısmının bittiği andan son-
raki iterasyonlar ve iterasyonlara ait konuları içermektedir. Bu zamanlarda yer alan
iterasyonlara ait konuların hikâye noktası (story point) tahminleri ayrı ayrı hesaplan-
mıştır. Yazılım projelerinin maliyet kestiriminde kullanılan yöntemler makine öğren-
me algoritmaları, veri madenciliği algoritmaları ve regresyon tabanlı algoritmalar
olarak 3 başlık altında toplanmıştır. Bu çalışmada bir iterasyona ait konuların ölçümle-
rini tahmin edebilecek doğru modeller geliştirilmiştir. Tahmine dayalı modellerden
regresyon tabanlı yöntemler seçilmiş ve Stokastik Gradient Artırma Makineleri (Gra-
dient Boosting Maching, GBM) örneklenmiştir. Bu yöntem, hız farkını ve hikâye
noktasını (story point) tahmin etmeye dayanır. Tahmin modellerini oluşturmak için hız
farkı ve hikâye noktası parametreleri gerekecektir. Bu bildirinin yazım organizasyonu
şu şekildedir; Bölüm 2’de; maliyet tahmini konusunda yapılan benzer çalışmalar anla-
tılacaktır. Bölüm 3’te; belirlenen regresyon tabanlı öğrenme algoritmalarının tanımla-
ması yapılacak ve bu algoritmalar üzerine optimizasyon işleminin nasıl gerçekleştiril-
diği açıklanacaktır. Bölüm 4’te; uygulama ve testler incelenecektir. Bölüm 5’te; başa-
rılı bir şekilde sonlanan uygulamanın sonuçları incelenecek ve gelecek araştırmalar
için tavsiyeler ele alınacaktır.



2 İlgili Çalışmalar

Yapılan çalışmaya benzer literatür taraması yapılmıştır. Yazılım geliştirmede iş gücü
tahmin için makine öğrenimi algoritmaları kullanan çalışmalar ele alınmıştır.
2.1  Makine Öğrenimi Algoritmalarını Kullanarak Yazılım Geliştirmede Is
Gücü Tahmin Yöntemleri

Yazılım boyutu tahmini, bir yazılım ürünü geliştirmek için gereken çabayı belirlemek
için önemli bir özelliktir. Yetersiz, sorgulanabilir ve usulsüz veriler ışığında kalkınma
görevlerini oluşturmak veya sürdürmek için gerekli olan en pratik efor ölçüsünü (bi-
reysel saat ya da sermaye olarak iletilen) öngörme metodolojisidir. Yazılım Çaba
Tahminleri (Software Effort Estimation-SEE), yazılımı geliştirmek veya sürdürmek
için gereken çabanın en makul şekilde kullanılmasını öngörme prosedürüdür. SEE, bir
yazılım projesini tamamlamak için gereken toplam çabayı tahmin etme faaliyetidir. Bu
çalışmada web uygulama projeleri üzerinde iş gücü tahmini yapılmıştır.
   Web uygulamalarının çabuk tahmin edilmesi için geçmiş web geliştirmenin veri
kümesi projeler ISBSG veri kümesinden toplanmıştır. Benzer şekilde, çevik projeler
söz konusu olduğunda, Story Point Approach (SPA), bir kullanıcı hikayesini uygula-
mak için gereken çabayı ölçmek için kullanılır. Bir iterasyon sırasında bitirilen kulla-
nıcı hikayelerinin tahminlerini ekleyerek (hikâye noktası tekrarı), proje hızı elde edilir.
CPA, UCP, Web ve SPA veri setleri kullanılarak elde edilen modellerin verimliliği,
üzerlerinde belirli akıllı teknikler kullanılarak geliştirilebilir. Önerilen araştırma ça-
lışması, EBM, UCP, Web üzerinden Karar Ağacı (DT), Stokastik Gradient Yükseltme
(SGB), Rasgele Orman (RF) ve Destek Vektör Regresyon (SVR) kernel yöntemleri
gibi çeşitli makine öğrenimi (ML) tekniklerinin uygulanmasını ele almaktadır. Bu veri
kümeleri, veri kümesi üzerinde iş gücü tahmini sürecini kullanmak için içeriklerine ve
alaka düzeyine göre seçilir. Makine öğrenme tekniklerini uyguladıktan sonra elde
edilen çeşitli modellerin sonuçları, performanslarını değerlendirmek amacıyla, litera-
türdeki mevcut sonuçların yanı sıra birbirleriyle karşılaştırılmıştır. [4]




3 Metodoloji

Bu çalışmada, Scrum ile geliştirilen projeye ait veri seti, iş gücü tahmini için kullanıl-
mıştır. Scrum projelerinde geçen hikâye noktası kavramı, konuyu çözmeye yönelik
tüm iş gücü, karmaşıklığını, kesinlik olmamayı ve riskleri içerir. Her bir iterasyonda
bir konuya hikâye noktası atanır. Tüm iş bittiğinde o iterasyondaki tüm hikâye nokta-
ları toplamı da hız(velocity) olarak adlandırılır. Veriler, kullanım için sınıflandırıcılar
tarafından anlamlı hale getirilmiştir. Bu amaçla veri setinde bazı düzenlemeler yapıl-
mıştır. Böylece, veri madenciliği yöntemleri ile bir model elde edilir.Geliştirilen uygu-
lamada, model oluşturmak için veri kümesi üzerinde çalışılacak algoritmalar incelen-
miştir. Bu algoritmalardan Stokastik Gradient Yükseltme (GBM) algoritması seçilmiş-
tir. Uygulama için yazılım tasarımı Bölüm 3.1’ de, seçilen algoritma ile ilgili kısa
açıklamalar Bölüm 3.2 de, veri seti tasarımı ise Bölüm 3.3’ de yer almaktadır. Siste-
min genel mimarisi ise Şekil 1’ de yer almaktadır.
3.1 Yazılım Tasarımı

İş gücü tahmini için gereken tüm özellikler tek bir dosyada birleştirilir ve üzerinde
algoritmalar çalıştırılır. Bu işlem için adımlar aşağıda listelenmiştir.
    ▪ Bir projenin iş gücü tahmini için gerekli olan özellikler 3 veri seti üzerinden
         belirlenmiştir.
    ▪ Bu seçili özellikler tek bir veri setinde birleştirildi.
    ▪ Sınıflandırmada kullandığımız özellikler bu veri setinde belirlenir.
    ▪ İş gücünü tahmin etmek için kullandığımız algoritmalar belirlenir.
    ▪ Algoritmalar bu belirtilen özellikte çalışmaya başlar.

     Her bir proje için, bir tahmin tablosu elde etmek için regresyon algoritmaları 4
farklı zamanda çalıştırılmıştır. Tahmin edilen değerler test verilerindeki gerçek değer-
ler ile karşılaştırılarak hata sonuçları elde edildi. Bu modele genel bakış Şekil-1’ de
gösterilmiştir.




                           Sekil 1. Sistemin Genel Mimarisi


3.2 Gradyan Artırma Algoritması

Gradyan güçlendirme makineleri, çok çeşitli pratik uygulamalarda önemli başarı gös-
teren güçlü bir makine öğrenme tekniğidir. Farklı kayıp fonksiyonlarına göre öğren-
mek gibi, uygulamanın belirli ihtiyaçlarına göre özelleştirilebilir. Teorik bilgi, gradyan
artırma model tasarımının tüm aşamalarını kapsayan betimsel örnekler ve çizimlerle
tamamlanır. Gradyan artırma, tahmin modelleri oluşturmak için en güçlü tekniklerden
biridir.
   Rasgele Orman algoritması bağımsız karar ağaçları yetiştirir (bu da paralel olarak
yapılabilir) ve sadece bu ağaçların ürettiği tahminlerin ortalamasını nihai tahmin ola-
rak alır. Öte yandan, gradyan takviye makineleri ağaçları üretir ve bunları sıralı bir
şekilde topluluğa ekler. İlk ağaç, Rasgele Ormanlarda yapıldığı gibi üretilir. Buradaki
temel fark, ilk ağacın ürettiği tahmin hatalarını en aza indirmeyi amaçlayan ikinci
ağacın üretilmesidir. Hem birinci hem de ikinci ağaçlar topluluğa eklenir ancak her
birine farklı ağırlıklar verilir. Bu süreç birden çok kez tekrarlanır: her adımda, öğreni-
len tüm topluluğun hatalarına göre yeni bir ağaç eğitilir ve daha sonra topluluğa ekle-
nir.
   Son topluluk, yeni girdilerin sonucunu kestirmek için bir model olarak kullanılır.
Rasgele Ormanların aksine, GBM'lerde düşük bir öğrenici sadece regresyon ağaçları
değil, sinir ağları veya doğrusal regresyon gibi diğer regresyon öğrenme algoritmaları
da olabilir. Uygulamada regresyon ağaçları düşük öğreniciler olarak kullanılmış ve
100 ağaç üretilmiştir


3.3 Veri Seti Tasarımı

Scrum Veri Kümesi, Apache’den gelen veri kümesini içerir. Bu veri kümesi .csv uzan-
tılı dosya türünde tutulur. Her proje için 3 ayrı veri seti mevcuttur. Bunlardan ilki, her
iterasyona ait konuların genel özelliklerini ve hikâye noktası bilgisini tutar. İkinci veri
seti, projedeki her bir iterasyonun özellikleri ve hız farkı (velocity different) değeri
tutulur. Sonuncusunda ise konular arasındaki ilişkiyi gösteren değerler mevcuttur. Bu
veri setlerinin örnekleri Şekil 2, 3 ve 4'te gösterilmiştir.




                             Sekil 2. Apache Issue Veri Seti
                          Sekil 3. Apache Iterasyon Veri Seti




                          Sekil 4. Apache Issue link Veri Seti
   Şekil 5 ‘te regresyon tabanlı makine öğrenmesi tekniklerinin denendiği veri seti
görülmektedir. Burada dikkat edilmesi gereken nokta tüm özelliklerin nümerik olması
gerektiğidir. Bu sebeple de Şekil 6’da görülen işlemler yapılarak veri setinde düzen-
lemeye gidilmiştir. Bu veri setine ait özelliklerin bir projede nasıl kullandıklarını an-
lamak önemlidir. Bunun için veri setinin özellikleri ile ilgili açıklamalar aşağıda mad-
deler halinde açıklanmıştır.
    ▪ Type: Her bir konuya, konunun çözülmesiyle ilgili görevin niteliğini belirten
         bir tür (ör. Görev (Task), Hata (Bug), Yeni özellik (new feature), İyileştirme
         (Improvement) ve İşlev Testi (Function Test)) atanır.
    ▪ Priority: Konunun önceliğini, bir konunun diğer konulara ilişkin olarak ka-
         tılması gereken sırayı göstermektedir. Örneğin, engelleyici öncelikli konular,
        büyük veya küçük öncelikli konulardan daha fazla endişelendirmelidir. En-
        gelleyici önceliği, tamamlanacak diğer sorunları engelleyen bir sorundur. Bu
        çalışmada, beş öncelik seviyesini dikkate alınmıştır: önemsiz, küçük, büyük,
        kritik ve engelleyici.
    ▪   Number of Comment:Tahmin sırasında geliştiricilerin yorum sayısı ekip işbir-
        liği derecesinin göstergesidir.
    ▪   Number of FixVersion: Her bir konudaki düzeltme sürümü alanı, sorunun gi-
        derildiği (veya alınacağı) sürümü gösterir. Çok sayıda düzeltme sürümü olan
        sorunlar, geliştirme, test etme ve bütünleştirme açısından daha fazla dikkat
        gerektirir.
    ▪   Number of Affect Version: Bir konunun bulunduğu sürümleri belirtir.




                            Sekil 5. Kategorik Veri Seti

Düzenlenmiş veri setleriyle GBM algoritması denenmiş ve sonuçları kaydedilmiştir.




                    Sekil 6. Kategorik Verinin Düzenlenmiş Hali



4 Uygulama ve Test

We Çalışmanın uygulaması R dili gerçekleştirilmiştir. Uygulamanın çalıştırılması için
en az 2GB RAM ve 400MB Disk alanına ihtiyaç duyulmaktadır. Kullanıcı ara yüzü
Şekil 7, Şekil 8 ve Şekil 9’da gösterilmiştir.
                              Sekil 7. Uygulama Giriş Ekranı




                             Sekil 8. Uygulama Secim Ekranı




                        Sekil 9. GBM Algoritmasının Sonuç Ekranı
   Uygulamanın ilk açılan sayfası Şekil 7’ de verilmiştir. Burada veri setinin içeriği
görülmektedir. Daha sonra regresyon algoritma bölümünden GBM algoritması seçilir.
GBM algoritmasının parametreleri kullanıcı tarafından girilecek şekilde ayarlanmıştır.
Seçilen veri setinin 0-30-50-80 için ayrı ayrı veri setleri üzerine algoritma çalıştırıl-
mıştır. Veri setinin ne kadarlık kısmı eğitim ne kadarlık kısmı test için kullanılacağı da
kullanıcı tarafından belirlenecektir. En ideal olarak %70’ i eğitim, %30’ u test olarak
seçilmiştir. Ağaç sayısı olarak 100 ağaç türetilmiştir. Her bir düğümdeki yaprak sayısı
5 olarak, öğrenme oranı 0.05, ağaç derinliği de 10 olarak seçilmiştir. Bu değerlere
göre algoritmanın ürettiği hikâye noktaları Şekil 9’ da görülmektedir.



5 Sonuçlar ve Yapılacak Çalışmalar

Uygulanan GBM algoritmasının sonuçları Şekil 10‘daki gibidir




                    Sekil 10. GBM Algoritmasının RMSE Değerleri


   Burada RMSE (Root Mean Square Error) değerleri esas alınmıştır. Regresyon ta-
banlı makine öğrenmesi teknikleri uygulanması durumunda doğruluk oranlarından çok
hata oranlarının karesel değerleri bizi daha doğru sonuçlara götüreceğinden dolayı bu
değerler kullanılmıştır. Şekil 11’de Apache ortamından elde edilmiş projelere ait
RMSE değerlerinin zamanla iterasyona bağlı artışları görülmektedir.




                 Sekil 11. Apache Veri Seti Üzerinde RMSE Gösterimi
  Bu grafiklerden de görüldüğü üzere RMSE değerleri iterasyon sayısı arttıkça düş-
mektedir. Eğitim veri setleriyle kendini eğiten sistem zamanla daha iyi öğrenir ve daha
doğru tahminlerde bulunur. Burada işlemler 300 iterasyona kadar test edilmiştir. Bir
süre sonra sistemin eğitiminin durduğu iterasyon sayısının arttırımının gereksiz olduğu
gözlenmiştir
   Gelecek çalışmalarda regresyon tabanlı makine öğrenme tekniklerine devam edile-
bilir aynı zamanda Yapay Sinir Ağları modelleriyle de testler yapılabilir. Bir sonraki
çalışma olarak Deep Learning ile Yapay Sinir Ağları teknikleri kullanılması öngörül-
müştür




Kaynaklar

1. B. Flyvbjerg and A. Budzier “Why Your IT Project May Be Riskier Than You Think”, Har-
   vard Business Review, 2011
2. B. Michael, S. Blumberg, and J. Laartz, “Delivering large-scale IT projects on time, on
   budget, and on value,” Tech. Rep., 2012.
3. Olcaysoy Buharalı, A. Kalıpsız, O.: Bilişim Projelerinde Yazılım Risk Yönetimi: Telekomü-
   nikasyon Örneği, 2015
4. Shashank Mouli Satapathy, Effort Estimation Methods in Software Development using
   Machine Learning Algorithm(2016)
5. L. Williams,"What agile teams think of agile principles”, Communications of the ACM,2012
6. M. Cohn,"Agile estimating and planning", 2005, Pearson Education.
7. Brischoux, Francois and Legagneux, Pierre "Don't Format Manuscripts”, The Scientist,2009
8. Roger S. Pressman ,"Software Engineering A Practitioner's Approach", McGraw.Hill Inter-
   national Edition
9. https://en.wikipedia.org/wiki/Gradient_boosting
10.https://www.cprime.com/resources/what-is-agile-what-is-scrum/
11.http://www.statisticshowto.com/rmse/