=Paper=
{{Paper
|id=Vol-1980/UYMS17_paper_15
|storemode=property
|title=Kaynak Kod Degisikliklerinin Denetimlerden
Gecip Gecmeyeceginin Tahmin Edilmesi(Automatically Determining Whether a Software
Change Request Will Be Approved)
|pdfUrl=https://ceur-ws.org/Vol-1980/UYMS17_paper_15.pdf
|volume=Vol-1980
|authors=Zeki Mazan,Cagdas Evren Gerede
|dblpUrl=https://dblp.org/rec/conf/uyms/MazanG17
}}
==Kaynak Kod Degisikliklerinin Denetimlerden
Gecip Gecmeyeceginin Tahmin Edilmesi(Automatically Determining Whether a Software
Change Request Will Be Approved)==
Kaynak Kod Değişikliklerinin Denetimlerden Geçip Geçmeyeceğinin Tahmin Edilmesi Zeki Mazan, Çağdaş Evren Gerede TOBB Ekonomi ve Teknoloji Üniversitesi, Ankara, Türkiye Web Page: http://cegerede.etu.edu.tr Özet. Yazılım projelerinde, kaynak kodda yapılmak istenen değişiklik önerilerini bir denetim sürecinden geçirmek ortaya çıkan yazılımların hem kalitesine hem de ömrüne olumlu etkide bulunmaktadır. Kod denetim süreçleri zaman zaman uzun süreler almakta ve hem yazılım geliştirme maliyetine hem de çalışanların iş memnuniyetine olumsuz olarak yansı- maktadır. Bir kod değişikliği önerisini denetleyen denetçilerin denetleme sürecinde ne tür yanıtlar vereceğini ve önerinin ne gibi revizyon taleple- rine maruz kalacağını önceden tahmin edebilen mekanizmaları oluştura- bilmek bu problemlerin ortaya çıkacağı durumları azaltacaktır. Zira öne- riyi yapan geliştirici bu mekanizmalar sayesinde değişiklik önerisini denetle- meyi başlatmadan daha fazla olgunlaştırabilir ve sonucunda da öneriyi daha hızlı şekilde denetlemeden başarıyla geçebilecek hale getirebilir. Bu çalışmada bu amaca doğru ilk adım olarak geçmiş denetleme verilerini kullanarak bir değişiklik önerisinin denetlenmesi sonucunun ne olacağını ve herhangi bir revizyon talebine maruz kalıp kalmayacağını tahmin eden çözümler geliştirmeye çalıştık. Anahtar Kelimeler: Kaynak kod denetimi, Gerrit, Denetim onayı tah- mini 411 Automatically Determining Whether a Software Change Request Will Be Approved Zeki Mazan, Çağdaş Evren Gerede TOBB University of Economics and Technology, Ankara, Turkey Web Sayfası: http://cegerede.etu.edu.tr Abstract. In software projects, pushing software change request pro- posals through a code review process improves the quality and life time of the resulting software. Such processes sometimes take long periods of time and this reflects on the cost of the software development and the work satisfaction of developers negatively. The presence of mechanisms which can determine the types of revision requests the reviewers may re- quest on a particular proposal can help a developer to prevent or reduce long code review cycles. This is because the developer can improve the revision further before starting the process to hear from the reviewers. In this study, as a first step towards this goal, we attempt to develop a mechanism that automatically determines whether a change proposal would be approved or undergo revisions. Keywords: Source code reviews, Gerrit, Review approval prediction 1 Giriş Kaynak kod denetimleri (İng. code reviews) kaliteli ve güvenilir yazılım sistem- leri inşa etmek için yapılması gereken önemli aktivitelerden bir tanesidir [10, 13, 18]. Günümüzde bir yazılım projesinde herhangi bir kod değişikliği önerisinin projenin kod havuzuna(İng. repository) entegre edilebilmesi için öncelikle kod denetiminden geçmesi istenir. Şekil 1’de Gerrit[4] adlı web tabanlı kod dene- tim aracından bir ekran görüntüsü yer almaktadır. Burada açık kaynak kodlu Android işletim sistemi projesinde yapılmak istenen bir değişiklik görülmekte- dir. Bu ekran vasıtasıyla değişikliği yapmak isteyen kişinin adı (İng. owner), değişikliği değerlendirecek kişilerin adları (İng. reviewers), değişikliğin yapıldığı dosyalar (ekranın alt tarafında), değişikliğe neden olan hata raporu (İng. bug), değişikliğin kısa özeti, tarihi, ait olduğu proje ve dal (ing. branch) isimleri gibi birçok bilgiye ulaşmak mümkündür. Şekil 2 ise değişiklik önerisinin bir parçası olan bir dosyadaki içerik değişikliğinin Gerrit tarafından nasıl görsellendiğini göstermektedir. Kod denetlemesi yapan kişiler değişikliği inceleyip değişikliği olduğu gibi onaylayabilirler. Aksi halde değişiklikte beğenmedikleri yerleri, değişiklik önerisi yapan geliştiriciye, denetleme aracının arayüzü yardımıyla bildirebilirler. Şekil 2’de sarı arkafonlu kutularda geliştirici ile denetleyiciler arasında yapılan tartış- maya dair bir mesaj dizisi de görülmektedir. Değişikliği öneren geliştirici bu du- rumda geri bildirime dair yeni düzenlemeler yapar ve yeniden değerlendirilmek 412 Şekil 1. Gerrit[4] kaynak kod denetim aracı ekran görüntüsü[7] Şekil 2. Bir dosyada önerilen değişikliklerin dosyanın orijinal halinden farklılıkları şek- linde gösterilmesi[6] 413 üzere değişiklik önerisini günceller. Bu iterasyon değişiklikler kabul edilene kadar devam eder. Bazı durumlarda geri bildirimler sonucu değişiklik önerisinden vaz geçilir. Çoğunlukla ise iterasyonlar sonucu değişiklik önerisi olgun bir hal alır ve sonunda projenin kod havuzuna entegre edilir. Şekil 3’de bir değişiklik önerisinin içinde bulunabildiği durumlar ve bu durumlarda alınabilen eylemler görülebilir. Şekil 3. Değişiklik Önerisi Durum Diyagramı Kod denetimi, yazılımlar içerisinde hataların erken bulunmasını sağlar; ko- dun okunaklılığını ve bakımını kolaylaştırır. Dolayısıyla kod denetimi yapmak, yazılımın hem kalitesine hem de ömrüne pozitif olarak etki etmektedir. Diğer taraftan denetim süreçlerinin uzaması yazılım geliştirme maliyetlerinin artmasına ve geliştiricilerin iş memnuniyetlerinin azalmasına yol açar. Özellikle fiziksel olarak birbirinden uzaktaki, hatta bazen farklı kıtalardaki takımların beraber geliştirdikleri yazılımlarda değişikliğin yazarı ile denetleyiciler farklı saat dilim- lerinde bulunabilmektedir. Böyle durumlarda önerilen bir değişiklik için geri bildirim alınması ve değişikliğin onaylanarak sonuçlandırılması günler sürebilir. Dolayısıyla önerilen bir değişikliğin başka geliştiriciler tarafından nasıl bir reak- siyonla karşılaşacağını kestirmek ve buna göre denetim sürecini başlatmadan bir takım önlemler almak süreci kısaltacaktır. Örneğin, değişiklikleri denetimcilerin daha kolay anlayacağı ve daha emin şekilde onaylayabileceği ufak ardışık değişik- liklere bölmek izlenebilecek bir yöntemdir. Fakat bu ve bunun gibi yöntemler ancak yeterli tecrübe kazanıldıktan sonra efektif olarak uygulanabilir. Beraber çalışılan takım üyelerini tanımak, bu kişilerin neye önem verdiğini anlamak ve kaynak kodda izlenen takım içi geleneklere aşina olmak, o projede uzun zaman çalışmış olmayı gerektirir. Dolayısıyla önerilen bir kod değişikliğine denetimcilerin nasıl reaksiyon vere- ceğini tahmin edebilecek bir araç, geliştiricilerin değişikliklerini denetime aç- madan önce daha fazla olgunlaştırabilmelerine ve onaylanması daha olası olacak 414 şekilde değişiklik önerilerini yapmalarına yardımcı olacaktır. Böylece denetim sürecinin süresi kısalacak ve yol açtığı maddi maliyet azalacaktır. Aynı zamanda geliştiricinin, yapmak istediği değişiklikleri daha hızlı bir şekilde yazılıma entegre edebilmesi, kişinin iş memnuniyetini arttıracaktır. Bu çalışmada bu amaca doğru ilk adım olarak iki probleme cevap aramaya çalıştık: 1. Bir değişiklik önerisinin denetim süreci sonunda onaylanıp onaylanmaya- cağını tahmin edebilir miyiz? 2. Bir değişiklik önerisinin denetim süreci içerisinde herhangi bir revizyona uğramayıp doğrudan kabul mü olacağını, yoksa revizyona(lara) uğradıktan sonra mı kabul olacağını tahmin edebilir miyiz? İlk soruyu başarıyla cevapladığımızda onaylanmayacak bir değişiklik önerisini denetim sürecine girmeden durdurabiliriz. İkinci soruyu cevapladığımızda ise re- vizyona uğrayarak kabul edilecek bir değişiklik önerisini yine denetim sürecine girmeden durdurabiliriz ve yazarın değişikliği olgunlaştırmasına hızlı bir şekilde olanak sağlayabiliriz. Tabii ki bir önceki paragrafta anlattığımız amaca ulaşıla- bilmesi için değişiklik önerisinin yazarına kabul/ret gibi ikili bir tahmin sonucu vermenin ötesinde, değişiklik önerisinin neden onaylanmayacağının veya neden revizyonlara uğraması gerektiğinin sebeplerinin bildirilmesi ve de ilgili kod böl- gelerine işaret edilmesi gerekir. Daha önce de belirttiğimiz gibi bu iddialı amaca bir adım daha yaklaşmak üzere bu çalışmada yukarıda tanımladığımız iki alt probleme odaklandık. 2 İncelenen Veri Kümesi Veri olarak açık kaynak kodlu Android işletim sisteminin geliştirilmesi sırasında ortaya çıkan kod denetimlerini incelemeye karar verdik. Android projesinde kod denetimi için bildirinin giriş bölümünde bahsettiğimiz web tabanlı Gerrit[4] aracı kullanılmıştır[2]. Tüm Gerrit verilerine Gerrit sunucusu üzerinden bir REST API vasıtasıyla ulaşılabilmektedir[5]. Sunucunun cevapları JSON formatındadır. Hamasaki vd.[13] yaptıklari bir çalışmada REST API yoluyla 21 Ekim 2008 ile 27 Ocak 2012 tarihleri arasında yapılan 11, 633 değişiklik önerisinin kod denetimlerinde ortaya çıkan verileri indirmiş, bazı basit transformasyonlar uygu- ladıktan sonra1 benzer çalışmalara yardımcı olmak amacıyla internet üzerinden yayımlamıştır[1]. Bu çalışmamızda bu veri kümesinden faydalandık. 2.1 Veride Bulunan Kolonlar Bu veri kümesinde her bir değişiklik önerisine ait 35 tane öznitelik kolonu bulun- maktadır. Bu kolonlardan öncelikle her iki problemin de çözümü sırasında kul- lanımı mantıklı olmayacak olanları veriden çıkardık. Bu kolonların bazıları her 1 Örneğin, bir değişikliğe atanmış denetleyicilerin adları kaldırılıp, yerine toplam atanan denetleyici sayısı bilgisi yerleştirilmiştir 415 değişiklik için eşsiz bir değere sahip, bir kısmı da denetim süreci başında henüz bilinmeyen değerleri göstermekte: Değişikliğik önerisinin belirteci (Change ID), önerinin web adresi (Link), denetim sürecinde yapılmış toplam mesajlaşma sayısı (#Comments), denetim sürecinde dosya içlerinde yapılmış toplam mesajlaşma sayısı (InlineComments), yamalar içerisinde bulunan toplam dosya sayısı (#FilesIn- Patch). Geriye kalan kolonları dört temel guruba ayırabiliriz: 1. Değişiklik önerisi sahibine ait denetleme süreçleri sonucu oluşmuş istatikler: Yazara ait açık / terkedilmiş / birleştirilmiş / onaylanmış / doğrulanmış du- rumdaki değişiklik önerisi sayısı; yazarın yaptığı kod denetimi sayısı;yazarın kod denetimlerinde toplam mesajlaşma miktarı vb. 2. Değişiklik önerisinin denetlenmesi sırasında değişik rollerde kaç kişinin yer alacağı ile ilgili rakamlar: Değişiklik için kaç denetleyici atanmış; kaç kişinin denetimi onaylaması gerekiyor; kaç kişinin denetimi doğrulaması gerekiyor vb. 3. Değişiklik ile ilgili üstveri sayılabilecek öznitelikler: Değişikliğin hangi proje için yapıldığı; değişikliğin versiyon sistemi açısından projenin hangi dalında (İng. branch) yapıldığı vb. 4. Değişikliğin içeriği ile ilgili istatistikler: Değişiklik sonucu eklenen / silinen / değişen satır sayısı; eklenen / silinen / değişen / ismi değişen dosya sayısı vb. Bu kolonların dışında veride iki kolon daha mevcuttur: 1. Status: Değişiklik önerisinin denetim sonucunun birleştirilmiş mi (İng. merged) yoksa terk edilmiş mi (İng. abandoned) olduğu2 ; 2. PatchSets: Önerinin maruz kaldığı toplam yama sayısı. Buraya kadar anlattığımız terminoloji ışığında üzerinde çalışacağımız iki prob- lemi şu şekilde yeniden tanımlayabiliriz: Bir değişiklik önerisi verildiğinde bu değişiklik önerisinin yukarıda verilen dört kate- gorideki değerlerini göz önünde bulundurarak şunları ne kadar başarılı bir şekilde tahmin edebiliriz?: – (1. Problem) Status kolonunun son değeri – (2. Problem) PatchSets kolonundaki son değerin bir mi, birden büyük mü olacağı 2.2 Veri Kümesinin Temizlenmesi Çalışmalara başlamadan önce veriden gürültü sayılabilecek aykırı değerleri çıkardık. Bu ayıklama sırasında kullandığımız kısıtlar şu şekildeydi: 2 1 seneden fazladır durumu “açık” olanları da terkedilmiş var saydık 416 – Bir alt projeye ait değişiklik önerisi sayısı 100’den az ise bu alt projenin kısa/deneysel olduğunu ve projeye özel bir denetleme kültürünün oluşması için projenin yeterli bir ömrünün olamamış olacağını varsaydık. – Bir değişiklik önerisinde toplam satır değişikliği sayısı 500’den fazla ise bu değişikliğin bir otomasyon vasıtasıyla yapılmış kod göçünün bir parçası olduğunu, dolayısıyla yaşanan denetleme sürecinin ortalama bir değişiklik önerisini değerlendirmekte temel alınamayacağını varsaydık. Bu ayıklama sonucu 11 bin değişiklik önerisinden geriye yaklaşık 9 bin öneri kaldı. Son olarak ikinci problemde kullanmak üzere, terkedilmiş (abandoned) olarak işaretlenmiş değişiklik önerilerinin PatchSets kolonu değerini sonsuz olarak değiştirdik. 3 Denetim Sonucu Tahmini Bu bölümde, bir değişiklik önerisi verildiğinde bu değişiklik önerisinin “Status” kolonunun son değerini etkili bir şekilde tahmin edip edemeyeceğimizi inceledik. Çözümümüzde Weka[9] isimli içerisinde makine öğrenme algoritmaları içeren veri madenciliği yazılımını kullandık. 3.1 Baskın Özniteliklerin Seçimi İlk adım olarak verimizdeki kolonlar üzerinden Status kolon değerini belirlemede en baskın olanları tespit etmeye çalıştık (İng. feature selection). Bunun için üç farklı yöntem uyguladık: 1) karşılıklı ilişkilere bakma (CorrelationAttributeEval), 2) bilgi kazanımına bakma (InfoGainAttributeEval), ve 3) öğrenici kullanma (Learner olarak J48 ağacı ve arama metodu olarak BestFirst arama metodu ile). Bu yöntemler sonucu ortaya Tablo 1’de görülen sonuçlar çıktı. Bu sonuçlara göre bir sonraki adımda kullanmak üzere her üç yöntemin önemli olduğunu düşündüğü veya bir yöntem içerisinde önem değeri (karşılıklı ilişki değeri veya bilgi kazanımı değeri) oldukça yüksek olan öznitelikleri seçtik. 3.2 Öğrenme Yöntemlerinin Uygulanması Seçtiğimiz öznitelikleri kullanarak veri modelini eğitmek için üç farklı öğrenme yöntemi uyguladık: Bayesian Network, SVM ve Random Forest. Bu yöntemler ile eğitilen modellerin tahmin konusunda başarısını 10 katlı çapraz doğrulama (İng. 10-fold cross validation) tekniği kullanarak ölçtük. Başarı ölçümü için şu metrikleri kullandık: – Doğruluk (İng. accuracy): Değişim önerilerinden ne kadarının denetim sonucu doğru tahmin edilmiştir – Tutturma (İng. precision): Birleşmiş (İng. merged) olacağı tahmin edilen değişim önerilerinin kaçta kaçı gerçekten birleşmiştir. Benzer şekilde terkedilmiş (İng. abandoned) olacağı tahmin edilen değişim önerilerinin kaçta kaçı gerçek- ten terkedilmiştir. 417 Tablo 1. Denetim Sonucunu Belirleyen En Baskın öznitelikler Yöntem Özellikler Açıklama Approvers, CodeReviewers, Dev_#approved, Dev_#assigned, Karşılıklı ilişki değeri CorrelationAttributeEval Dev_#authors, Dev_#merges, 0.3’ten büyük olanlar Dev_#submitted, Dev_RealReviewer, Dev_#verified, Verifiers Approvers, CodeReviewers, Dev_#authors, Dev_#committed, Bilgi kazanımı değeri InfoGainAttributeEval Dev_#merges, Dev_#owners, 0.25’ten büyük olanlar Dev_#PostComments„ Verifiers Branch, Approvers, AssignedReviewers, CodeReviewers, Learner Tabanlı DelFiles, Dev_#merges, Dev_#submitted, Dev_#verified, Dev_RealReviewer, Verifiers Doğru Pozitif (DP): Gözlem pozitif, tahmin edilen pozitif Yanlış Pozitif (YP): Gözlem negatif, tahmin edilen pozitif Doğru Negatif (DN): Gözlem negatif, tahmin edilen negatif Yanlış Negatif (YN): Gözlem poizitif, tahmin edilen pozitif DP doğru olarak pozitif tahmin edilenler T utturma = = DP + Y P tüm pozitif tahmin edilenler – Bulma (İng. recall): Birleşmiş olan değişim önerilerinin kaçta kaçının birleşe- ceği tahmin edilmiştir. Benzer şekilde terkedilmiş olan değişim önerilerinin kaçta kaçının terkedileceği tahmin edilmiştir. DP doğru olarak pozitif tahmin edilenler Bulma = = DP + Y N tüm pozitif gözlemlenenler Tablo 2 her bir yöntem için elde edilen başarım değerlerini göstermekte- dir. Tüm yöntemlerde başarım oranının oldukça yüksek olduğunu görüyoruz. Sonuçları detaylı incelediğimizde öğrenme yöntemlerinin aslında denetim sonu- cunu iki kategorideki özniteliklere göre belirlediğini anlıyoruz: 1. Değişiklik önerisini yapan yazarın geçmiş istatistikleri (ne kadar değişiklik yaptığı, kaç denetimden geçtiği vb.) yani tecrübesi: Tecrübe ile ilişkili öznite- liklerin değerleri arttıkça denetim sürecinin başarıyla sonuçlanacağı tahmin ediliyor. 2. Denetim sürecine katılacak kişilerin sayısı (denetleyiciler, doğrulayıcılar, onaylayıcılar vb.): Denetime katılan kişi sayısı azaldıkça denetim sürecinin başarıyla sonuçlanacağı tahmin ediliyor. 418 Tablo 2. Denetim Sonucunu Tahmin Başarısı Yöntem Doğruluk Tutturma Bulma Sınıf 0.96 0.98 Birleşmiş Bayesian Network %96.43 0.96 0.93 Terkedilmiş 0.97 0.98 Birleşmiş SVM %97.26 0.97 0.94 Terkedilmiş 0.97 0.99 Birleşmiş Random Forest %97.89 0.98 0.95 Terkedilmiş Buna göre eğer deneyimsiz bir yazar çok sayıda denetleyicinin denetim ya- pacağı bir değişiklik önerisinde bulunursa, yüksek oranda bu denetimin başarısı- zlıkla sonuçlanacağı tahmin edilecektir. 4 Değişiklik Önerisinin Revizyona Uğrayıp Uğramayacağının Tahmin Edilmesi Bu bölümde, bir değişiklik önerisi verildiğinde bu değişiklik önerisinin birden fazla revizyona uğrayıp uğramayacağını tahmin etmeye çalışacağız. Bir değişiklik önerisinin “PatchSets” adlı kolonuna bakarak denetim süreci sırasında kaç tane yama (İng. patch) güncellemesine maruz kaldığını görebilmekteyiz. Her değişik- lik önerisi bir yama ile başlamaktadır. Eğer denetleyiciler tarafından revizyon talepleri olursa, o zaman önerinin yazarı bunları gerçekleştirip yeni bir yama ile öneriyi güncellemektedir. Bu problemin çözümü için ilk probleme benzer bir yaklaşım izleyerek önce- likle PatchSets kolonu değerlerini belirleyen en etkili öznitelikleri seçtik. Bu öznitelikleri kullanarak yine üç farklı yöntemle veri üzerinde eğitim yaptık ve daha sonra çapraz doğrulama ile tahmin başarısını ölçtük. Tablo 3, uyguladığımız her öğrenme yöntemi için elde ettiğimiz başarım değerlerini göstermektedir. Tablo 3. Revizyona Maruz Kalma Tahmin Başarısı Yöntem Doğruluk Tutturma Bulma Sınıf 0.71 0.86 Uğramaz Bayesian Network %80.54 0.89 0.76 Uğrar 0.84 0.96 Uğramaz SVM %91.47 0.97 0.88 Uğrar 0.94 0.92 Uğramaz Random Forest %94.59 0.94 0.96 Uğrar Sonuç olarak ilk problemdeki sonuca benzer bir şekilde başarı oranının yüksek olduğunu ve yazarın deneyimi ile denetim sürecine dahil olan kişilerin sayısının tahmin sonucuna etki ettiğini görüyoruz. 419 5 Yazar ve Denetimci Sayısından Bağımsız Tahmin Yapılması Her iki problemde de geliştirdiğimiz tahmin mekanizmaları yazarın deneyimini ve denetim sürecinde yer alacak kişi sayısını öne çıkarmaktadır. Dolayısıyla bu mekanizmalar deneyimsiz bir geliştiricinin yazarı olduğu ve çok sayıda denetim- cinin yer aldığı bir değişiklik önerisinin reddolacağı veya revizyonlara maruz kala- cağı yönünde tahminde bulunmaktadır. Bu bölümde yazar ve denetimci sayısı verilerini çıkarıp, yalnızca değişikliğin içeriği ile ilgili verilere bakarak, başarılı tahminlerde bulunup bulunamayacağımızı inceledik. Veri kümesinde değişiklik önerilerinin içeriği ile ilgili iki tip öznitelik bulun- makta: 1. Eklenen/silinen/değişen toplam satır sayısı; 2. Eklenen/silinen/değişen/ismi değişen dosya sayısı. Yalnızca bu öznitelikler kullanılarak RandomForest öğrenme yöntemi uygu- landığında ikinci problem ile ilgili tahmin başarısı Tablo 4’de görülmektedir. Tablo 4. Yazar ve Denetimci Sayısı Bağımsız Revizyona Maruz Kalma Tahmin Başarısı Yöntem Doğruluk Tutturma Bulma Sınıf 0.78 0.79 Uğramaz RandomForest %83 0.86 0.85 Uğrar Başarım daha önceki yaklaşıma göre bir miktar düşmüş olsa da halen oldukça yüksek bir düzeyde. Bununla beraber bu defa tahmin mekanizmasının değişiklik büyüklüğü üzerinden tahmin yaptığını gözlemlemekteyiz. Diğer bir değişle bir değişiklik önerisinde toplam değişen satır sayısı ve dosya sayısı büyük olduğunda önerinin revizyona maruz kalacağı tahmin edilir. 6 Değişim İçeriğinin Tahmin İçin Kullanılması Bir önceki bölümün sonucuna göre, yalnızca bir satır değişiklik içeren bir öneri yapıldığında bu önerinin herhangi bir revizyona uğramadan kabul olacağının tah- min edilmesi muhtemeldir. Fakat değişiklik aslında kodun kritik bir yerinde ise revizyonlara maruz kalabilir. Bu tip durumların üstesinden daha iyi gelebilmek için bu bölümde alternatif bir yaklaşım denedik. Buna göre kod dosyalarında yapılan değişikliklerin ne tür değişiklik oldukları bilgisini üretip bu bilgileri tah- min için kullanmaya çalıştık. Kod dosyalarındaki değişikliklerin türünü anlamak için ChangeDistiller[3] adı verilen Fluri vd. [12] tarafından üretilen aracı kul- landık. Bu araç bir Java dosyasının iki versiyonu arasındaki farkı hesap edip bu farkı 48 ayrı değişiklik sınıfına sınıflandırmaktadır. Bu sınıflardan bazıları şöyle: 420 yorum silinmiş, yorum eklenmiş, şart ifadesi değişmiş, ifade silinmiş, ifade eklen- miş, ifade sırası değişmiş. Tüm sınıf listesine https://goo.gl/KeCxce adresin- den ulaşılabilir. Bu aracı kullanmak için öncelikle, veri kümesinde bulunan her bir değişik- lik önerisi için, veri önerisi içerisinde bulunan kaynak dosyalarının orijinal hal- lerini ve değişim önerisi ile yapılmak istenen değişikliği Gerrit üzerinden indirdik. Her bir dosyanın orijinal ve yeni halini ChangeDistiller’a verdik ve ChangeDis- tiller’dan dönen değişiklik ile ilgili tespit edilen sınıfları kaydettik. Böylece her bir değişiklik önerisi için 48 değişiklik sınıfından kaçar tane olduğunu bulduk. Daha sonra bu veriyi öğrenme yöntemlerinde tahmin modelimizi eğitmek için kullandık ve yalnızca bu veri kullanılarak her iki problemi de çözmeye çalıştık. Maalesef deney sonuçları bu yaklaşımın henüz etkin olmadığını gösterdi. Buna sebep olarak ChangeDistiller değişiklik sınıflarının değişiklikleri karak- terize etmekte yetersiz kalmış olabileceğini düşünüyoruz. Yaklaşımımızın man- tıklı olduğuna inanıyoruz; bu yüzden, gelecekteki çalışmalarımızda değişiklik sınıflarının arttırılması ve değişiklikleri tanımlama açısından sınıfların derinleşti- rilmesi üzerinde çalışmayı düşünüyoruz. 7 İlgili Çalışmalar Giderek kod denetimi verilerinin açık kaynak kodlu projeler vasıtasıyla halka açık hale gelmeye başlaması ile beraber bu veriler üzerinde faydalı veri madenciliği faaliyetleri yapılabileceğini işaret eden öncü çalışmalar yapılmıştır. Mukadam vd. [17] çalışmasında Android projesinin Gerrit üzerindeki kod denetim verisinin genel yapısını incelenmiştir. Hamasaki vd. [13] ise bu gibi verileri indirmek ve işlemek üzerine bir yaklaşım önermiş; toplam 3 projeden topladıkları verileri yayınlamıştır[8]. Bu bildiride çalıştığımıza benzer, kod denetimi sürecinde kod değişikliğini öneren yazara yardımcı olmaya yönelik bazı geri bildirimlerin yapılabileceği fikri Jeong vd. [15] ile Hellendoorn vd. [14] tarafından da incelenmiştir. Jeong vd. [15] Firefox ve Mozilla projelerinde Bugzilla sistemi üzerinden kod denetim verilerini inceleyerek hem bir kod değişim önerisinin denetimden geçip geçmeyeceğini tah- min etmeye çalışmış hem de bir değişiklik için en iyi denetimi yapabilecek kişi- leri tahmin etmeye çalışmıştır. Hellendoorn vd. [14] dil modelleri kullanarak bir değişiklik önerisinin projede daha önce kabul edilen değişikliklere ne kadar ben- zediğini hesaplayarak değişikliğin onaylanıp onaylanmayacağını değerlendirmeye çalışmıştır. Kod denetimi yaparken denetimcinin işini kolaylaştırmaya yönelik çalışmalar da yapılmıştır. Zhang vd. [19] kod denetimi sürecinde denetim yapanların değişik- liklerin etkilerini daha kolay anlamalarını sağlamak için bir yama inceleme aracı geliştirmiştir. Bosu vd. [11] kod denetimlerinde denetimcilerin verdiği geri bildirim- lerden faydalı olanların ne tür karakteristikleri olduğunu incelemiş ve buna daya- narak bir geri bildirimin sürece faydalı olup olmayacağını ayırt edebilen bir sınıflandırma modeli geliştirmiştir. 421 Genel olarak kod denetimi süreçlerinin incelenmesi ve iyileştirilmesine yöne- lik çabalar da bulunmaktadır. Rigby vd. [18] 10’dan fazla projenin kod denetim verilerini inceleyerek denetimlerin ne kadar sürdüğü, kaç kişinin denetimlerde görev aldığı, denetim süreçlerinin ne kadar etkin olduğu gibi sorulara cevaplar aramaya çalışmıştır. Kitagawa vd. [16] kod denetim süreçlerinde denetimcilerin davranışlarını daha iyi anlamak için denetim sürecini bir oyun teorisi modeli kullanarak tanımlamış ve bu modelin geçerliliğini Gerrit veri kümeleri üzerinde doğrulamıştır. Bird vd. [10] Microsoft firması içerisinde gerçekleşen kod dene- timi bilgilerini toplayan ve bu bilgiler üzerinden bir takım metrikler üreterek bunları geliştirme takımlarına sunan bir analiz sistemi geliştirmiştir. Bu sistem yardımıyla takımların denetim süreçlerini daha iyi yönettikleri bildirilmiştir. 8 Sonuçlar ve Gelecek Çalışmalar Kod denetimleri yapmak yazılım sistemlerinin kalitesine ve ömrüne olumlu etki etmektedir. Zaman zaman kod denetimleri uzun süreler alır. Bu durum çalışan- ların memnuniyetini olumsuz etkiler ve kod denetiminin yazılım geliştirmeye olan maliyetini arttırır. Kod değişikliğine denetimcilerin ne tür yanıt vereceğini önce- den tahmin edebilmek ve buna göre denetime girecek bir değişikliği öncesinde daha fazla olgunlaştırmak bu problemin ortaya çıkacağı durumları azaltacaktır. Bu amaca doğru ilk adım olarak denetleme verilerini kullanarak denetleme süreci sonucunu ve değişiklik önerisinin revizyona maruz kalıp kalmayacağını tahmin eden çözümler geliştirmeye çalıştık. Geliştirdiğimiz tahmin modellerinin, büyük oranda, değişikliği yapan yazarın ne kadar tecrübeli olduğuna ve denetimde kaç kişinin yer alacağına bakarak tahmin yaptığını gördük. Değişikliğin içeriğini kul- lanarak tahmin yaptığımızda ise, değişikliğin büyüklüğünün tahmini etkilediğini gözlemledik. Değişiklik içeriklerini ChangeDistiller adlı araç vasıtasıyla değişiklik sınıfları ile etiketleyip buna göre tahmin yapmayı denediğimizde ise maalesef bek- lediğimiz sonucu alamadık. Bunun ana sebebinin değişiklik sınıflarının değişiklik- leri yeterli oranda karakterize edecek derinliğe sahip olmaması olduğunu düşünü- yoruz. İleriki çalışmalarımızda ChangeDistiller sınıflarına benzer, fakat kod deği- şimlerini daha derinlemesine temsil edebilecek sınıflar geliştirmeyi ve denetim sonucunu bu şekilde tahmin etmeyi düşünüyoruz. Ayrıca kabul/ret gibi bir tah- minin yanında, değişikliğin yazarına, revizyona neden olacak kod bölgelerinin neler olduğunu bildirebilecek mekanizmalar üzerinde çalışmayı planlıyoruz. Kaynakça 1. Android gerrit veri kümesi (jun 2017), http://sdlab.naist.jp/reviewmining/ 2. Android projesi gerrit web arayüzü (jun 2017), https://android-review. googlesource.com 3. Changedistiller aracı kaynak kodu (jun 2017), https://bitbucket.org/sealuzh/ tools-changedistiller/wiki/Home 4. Gerrit (jun 2017), https://www.gerritcodereview.com/ 5. Gerrit rest api (jun 2017), https://gerrit-review.googlesource.com/ Documentation/rest-api.html 422 6. Gerrit Örnek dosya farkı ekranı (jun 2017), https://goo.gl/3MGPKs 7. Gerrit Örnek kod denetimi (jun 2017), https://android-review.googlesource. com/\#/c/419959/ 8. Review mining (jun 2017), http://sdlab.naist.jp/reviewmining/ 9. Weka (jun 2017), http://www.cs.waikato.ac.nz/ml/weka/ 10. Bird, C., Carnahan, T., Greiler, M.: Lessons learned from building and deploying a code review analytics platform. In: 12th IEEE/ACM Working Conference on Mining Software Repositories, MSR 2015, Florence, Italy, May 16-17, 2015. pp. 191–201 (2015), https://doi.org/10.1109/MSR.2015.25 11. Bosu, A., Greiler, M., Bird, C.: Characteristics of useful code reviews: An empirical study at microsoft. In: Proceedings of the 12th Working Conference on Mining Software Repositories. pp. 146–156. MSR ’15, IEEE Press, Piscataway, NJ, USA (2015), http://dl.acm.org/citation.cfm?id=2820518.2820538 12. Fluri, B., Wuersch, M., PInzger, M., Gall, H.: Change distilling: Tree differencing for fine-grained source code change extraction. IEEE Trans. Softw. Eng. 33(11), 725–743 (Nov 2007), http://dx.doi.org/10.1109/TSE.2007.70731 13. Hamasaki, K., Kula, R.G., Yoshida, N., Cruz, A.E.C., Fujiwara, K., Iida, H.: Who does what during a code review? datasets of oss peer review repositories. In: Proceedings of the 10th Working Conference on Mining Software Reposi- tories. pp. 49–52. MSR ’13, IEEE Press, Piscataway, NJ, USA (2013), http: //dl.acm.org/citation.cfm?id=2487085.2487096 14. Hellendoorn, V., Devanbu, P.T., Bacchelli, A.: Will they like this? evaluating code contributions with language models. In: 12th IEEE/ACM Working Conference on Mining Software Repositories, MSR 2015, Florence, Italy, May 16-17, 2015. pp. 157–167 (2015), https://doi.org/10.1109/MSR.2015.22 15. Jeong, G., Kim, S., Zimmermann, T., Yi, K.: Improving code review by predicting reviewers and acceptance of patches. Research on Software Analysis for Error-free Computing Center Tech-Memo (ROSAEC MEMO 2009-006) pp. 1–18 (2009) 16. Kitagawa, N., Hata, H., Ihara, A., Kogiso, K., Matsumoto, K.: Code review partic- ipation: Game theoretical modeling of reviewers in gerrit datasets. In: Proceedings of the 9th International Workshop on Cooperative and Human Aspects of Soft- ware Engineering. pp. 64–67. CHASE ’16, ACM, New York, NY, USA (2016), http://doi.acm.org/10.1145/2897586.2897605 17. Mukadam, M., Bird, C., Rigby, P.C.: Gerrit software code review data from android. In: Proceedings of the 10th Working Conference on Mining Software Repositories. pp. 45–48. MSR ’13, IEEE Press, Piscataway, NJ, USA (2013), http://dl.acm.org/citation.cfm?id=2487085.2487095 18. Rigby, P.C., Bird, C.: Convergent contemporary software peer review practices. In: Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering. pp. 202–212. ESEC/FSE 2013, ACM, New York, NY, USA (2013), http://doi. acm.org/10.1145/2491411.2491444 19. Zhang, T., Song, M., Pinedo, J., Kim, M.: Interactive code review for systematic changes. In: Proceedings of the 37th International Conference on Software Engi- neering - Volume 1. pp. 111–122. ICSE ’15, IEEE Press, Piscataway, NJ, USA (2015), http://dl.acm.org/citation.cfm?id=2818754.2818771 423