Tez No İndirme Tez Künye Durumu
723330
Software defect prediction with a personalization focus and challenges during deployment / Kişiselleştirme odaklı yazılım hata tahmini ve entegrasyon zorlukları
Yazar:BEYZA EKEN
Danışman: DR. ÖĞR. ÜYESİ AYŞE TOSUN KÜHN
Yer Bilgisi: İstanbul Teknik Üniversitesi / Lisansüstü Eğitim Enstitüsü / Bilgisayar Mühendisliği Ana Bilim Dalı / Bilgisayar Mühendisliği Bilim Dalı
Konu:Bilgisayar Mühendisliği Bilimleri-Bilgisayar ve Kontrol = Computer Engineering and Computer Science and Control
Dizin:Hata tahmini = Error estimation ; Makine öğrenmesi = Machine learning ; Yapay zeka = Artificial intelligence ; Yazılım mühendisliği = Software engineering ; Öneri sistemleri = Suggestion systems
Onaylandı
Doktora
İngilizce
2022
227 s.
Yazılım sistemlerinin hayatımızın hemen her alanındaki yeri giderek artarken, hızlı gelişen doğaları gereği tipik bir sistemin büyüklüğü ve karmaşıklığı da zaman içerisinde hızla artabilmektedir. Dolayısı ile organizasyonlar tarafından uygulanan yazılım kalite güvencesi (YKG) aktivitelerinin karmaşıklığı da artmaktadır. Organizasyonların en önemli hedeflerinden biri kullanıcılara hatasız ve kaliteli bir yazılım sunabilmektir. Bu kapsamda en çok bütçe ve zaman ayırdığı aktivitelerden biri yazılımdaki hataların giderilmesidir. İçinde bulunduğumuz yapay zeka (YZ) çağında yazılım mühendisliği alanındaki araştırmacılar yazılım hatalarının tespitini otomatize eden, akıllı öneri sistemleri modellemeye odaklanmıştır. Bir yazılım hata tahmini (YHT) modeli tipik olarak, yazılım depolarından projeye dair geçmiş kodlama ve hata aktivitelerinin örüntülerini makine öğrenmesi (MÖ) yöntemleri ile öğrenir ve ekibin yeni geliştirdiği yazılım modüllerinin (örn., yazılım sınıfı, kod çevrimi) yazılım sisteminde bir hataya sebebiyet verme durumuna dair bir tahminde bulunur. Bu modeller yazılım geliştirme ortamının geliştirme, test ve kod inceleme gibi aşamalarına entegre edilerek ekibin riskli yazılım modüllerini daha kolay tespit edebilmesi ve karar verme mekanizmasını desteklemek için kullanılır. Örneğin kod inceleme için kısıtlı süresi olan bir ekip öncelik stratejisini YHT modelinin tahminlerine göre belirleyebilir. Araştırmacılar yaklaşık 20 senedir farklı açılardan yaklaşarak YHT modellerinin daha iyi tahmin performansına ulaşması için çeşitli yöntemler önermektedirler. Bu yöntemlerin çoğu probleme algoritmik (örn., MÖ algoritmalarının sonuçlarını birleştirmek, hiper-parametre kestirimi uygulamak) yada veri açısından yaklaşmaktadır (örn., yeni ölçütler önermek). Yazılım süreçlerinin ayrılmaz bir parçası olan kişi faktörünü modelleyen çalışmalar ise nispeten daha az sayıdadır. Kişi faktörünü ele alan çalışmalar ise ikiye ayrılmaktadır. Çoğunlukta olan ilk tip çalışmalar ekipteki yazılım geliştiricilerine dair bazı ölçütler elde ederek model eğitimi sırasında kullanmıştır. Bu ölçütlerin arasında bir yazılım modülüne katkıda bulunan geliştirici sayısı, bir geliştiricinin odağı (aynı anda değişiklik yaptığı modül sayısı), geliştiricinin tümleşik geliştirme ortamı ile olan etkileşimi (ne kadar süre bir modülde gezindiği) ve yazılım ekibinin birbirleri ile olan sosyo-teknik etkileşimleri bulunmaktadır. İkinci grup çalışmalar ise sayıca çok az olmakla birlikte (sadece iki) kişiselleştirilmiş YHT modellerine odaklanmıştır. Kişiselleştirilmiş YHT modelleri kişi faktörünü model eğitimine dahil etmek yerine, ekipteki her bir geliştirici için ayrı ve kişisel bir model kurmayı kapsamaktadır. Bunların yanı sıra, literatürdeki çalışmaların çoğu son yıllara kadar yüksek tahmin performanslı YTH modelleri kurmaya odaklanmıştır. Fakat bir tahmin modelinin başarılı ve efektif olabilmesi için tahmin modellerin hata tahmin doğruluklarının yanı sıra gerçek hayata uygulanabilirlikleri, tahmin performanslarının sürdürülebilirliği, tahminlerin kullanıcı perspektifinden yararlı ve güvenilir olması da önemlidir. YHT modellerinin pratik uygulanabilirliğine ve gerçek hayat senaryolarına odaklanan çalışmaların sayısı azdır ve üretilen YHT çözümlerinin gerçek hayat senaryolarındaki değerini değerlendirebilmek için bu çalışmalara ihtiyaç vardır. Biz bu tezde iki ana amaca odaklandık: 1) kişi faktörünün YHT modellerinin tahmin başarısına olan etkisi, ve 2) endüstriyel bir yazılım projesi için bir YHT çözümü geliştirmek ve gerçek geliştirmek ortamına entegre etmek. Tezin ilk analizinde, topluluk kokularının hata tahminine olan etkisini inceledik. %Bu araştırma bölümü, literatürde topluluk kokularının hata tahminine olan etkisini inceleyen ilk çalışmadır. ''Topluluk kokusu'' ekibin doğru iş birliği ve iletişim pratiklerini uygulamayı ertelediği durumlara ithafen ortaya atılmış bir kavramdır. Örneğin iki kişinin aynı yazılım modülünde çalışması fakat aralarında direk bir iletişim bağlantısı olmaması durumu bir topluluk kokusu olarak ele alınmaktadır. Çünkü bu durum işin çift yapılmasına ve kod tekrarı denilen istenmeyen bir duruma sebebiyet verebilmektedir. Ekipteki böyle kusurlu iletişim ve etkileşim pratiklerinin ekstra masrafa ve gecikmeye yol açabildiği gözlemlenmiştir. Ayrıca önceki çalışmalar topluluk kokularının, ''kod kokusu'' terimi ile tarif edilen kusurlu kodlama pratikleri ile aynı yazılım modüllerinde oluştuklarını göstermiştir. Dahası kod kokusu içeren yazılım sınıflarının hata içermeye daha meyilli olduğu gösterilmiştir. Bu duruma ve sosyo-teknik faktörleri YHT modellerine entegre ederek başarılı tahmin performanslarına ulaşan diğer çalışmalardan motivasyonumuzu alarak biz de topluluk kokularının YHT modellerine eğitimine dahil ederek hatalı yazılım sınıflarının tahminine olan etkisini deneysel olarak inceledik. Deneysel çalışmamızda topluluk kokularının hata tahminine olan katkısı kod kokusu ölçütlerinin katkısı ile karşılaştırılmıştır. Çalışmada temel model olarak ise son teknoloji ölçütleri (statik kod ölçütleri, nesneye yönelimli ölçütler, bir dosyada çalışan geliştirici sayısı ve geliştiricinin odağı) kullanan YHT modelleri baz alınmıştır. Sonuçlar göstermiştir ki eğri altında kalan alan kriterine göre topluluk kokuları temel modellerin hata tahminini başarısını %3, kod kokusu yoğunluğu ölçütü ise %17 artırmaktadır. Sonuç olarak bu analizde topluluk kokularını YHT model eğitimine dahil etmenin tahmin başarısını artırdığı fakat kod kokusu yoğunluğu ölçütü kadar tahmine katkısının olmadığı gözlemlenmiştir. Ayrıca veri toplama aşamasındaki deneyimlerimiz topluluk kokularını ölçmenin diğer metrikleri ölçmeye göre daha çok efor ve kaynak gerektirdiğini gösterdi. Mevcuttaki kullanılabilir araçlar iletişim örüntülerini sadece mail arşivlerinin analizi ile çıkarabilmektedir. Fakat her proje için takımın mail arşivlerine erişim olmayabilmektedir. Hatta organizasyonel iletişim mail haricinde bir araç ile yapılabilmekte ve organizasyonun iletişim örüntülerini yakalamak mümkün olmayabilmektedir. Bu durum bizi topluluk kokularını model eğitimine dahil etmek yerine sadece koddan ölçülen kod geliştirme becerileri bilgilerini kullanarak kişisel modeller oluşturmaya yönlendirmiştir. Tezin ikinci analizinde kişiselleştirilmiş YHT modellerinin hata tahmini performansına olan katkısını geniş kapsamlı olarak inceledik. Bu analizimizin arkasındaki motivasyonlardan biri kişi odaklı öneri yaklaşımlarının, arama motorları, sosyal medya siteleri, ve e-ticaret sistemleri gibi bir çok sistemde başarılı olması. Bir diğer motivasyonumuz ise ekipteki geliştiriciler kendilerine özgü geliştirme stillerine ve deneyimlere sahip olabilmesi ve bu durumun farklı geliştiricilerin geliştirdiği yazılım parçalarının farklı hata örüntülerine sahip olmasına sebep olabilmesidir. Kişilerin farklı hata örüntülerine sahip olmasına dayanarak, daha başarılı tahmin skorları sağlayabilmek adına, kişiselleştirilmiş YHT modelleri ortaya atılmıştır. Fakat önceki çalışmalar bir çok açıdan sınırlı kalmıştır. Örneğin veri setlerinin küçük olması, alandaki son model ölçütlerin çalışmaya dahil edilmemiş olması gibi sebeplerden ötürü bulgularının geçerliliği kısıtlıdır. Biz bu tezde ise çok daha zengin bir deneysel ortam kurarak kişisel modelleri geleneksel modeller ile karşılaştırmalı olarak etraflıca inceledik. Geleneksel yaklaşım, tüm ekibin geçmiş geliştirme aktiviteleri üzerinden eğitilmiş ve ekipteki herkes tarafından kullanılabilen tek bir YHT modeli geliştirmeyi kapsamaktadır. Kişiselleştirilmiş yaklaşım ise, ekipteki her bir geliştiriciye bireysel bir YHT modeli kurulmasını ve modellerin sadece ilgili kişinin geçmiş aktivitesi ile eğitilmesini kapsamaktadır. Tezin bu bölümünde geliştirilen YHT modelleri yazılım değişikliği seviyesinde çalışmaktadır. Değişiklik seviyesindeki YHT sistemlerinde, yazılımda bir geliştirme yapılarak kod deposuna çevrim (commit) olarak gönderildiğinde tahmin modeli devreye girer ve ilgili geliştiriciye yaptığı çevrimin yazılım sistemine hata enjekte ediyor olma ihtimaline dair geri bildirim verir. Bu tip YHT modellerinin avantajları ise yapılan değişiklik hafızada taze iken geliştiriciye anında geri bildirim vermesidir. Modellerin eğitimi sırasında yazılım depolarından toplanmış geçmişe dönük yazılım çevrimleri (commit) ve bu çevrimlerin yazılıma hata enjekte edip etmediği bilgisi kullanılmıştır. Ayrıca, toplanan çevrimlerden yazılım geliştirme sürecini tarihsel (örn., daha önce bir kaynak kod dosyasının kaç kere değiştiği), boyutsal (örn., kaynak kod dosyasında değiştirilen kod satır sayısı), dağılımsal (örn., ilgili çevrimin kaç dosyayı değiştirdiği) ve geliştirici tecrübesi (örn., önceki çevrimlerin sayısı) açısından yansıtan 13 adet ölçüt eğitimde kullanılmıştır. YHT modelleri bu alanda son teknoloji olan Naive Bayes (NB) ve Random Forest (RF) algoritmaları ve 10-katlı çapraz-doğrulama tekniği kullanarak eğitilmiştir. Eğitilen modellerin performans değerleri literatürde iyi bilinen yedi farklı kriter ile ölçülmüştür: hata yakalama olasılığı, yanlış alarm olasılığı, kesinlik, F1-skoru, eğri altında kalan alan, Matthews korelasyon katsayısı ve Brier Skoru. Altı adet açık kaynak kodlu projenin toplam 222 geliştiricisi üzerinde yapılan analiz gösterdi kişiselleştirilmiş modellerin hata yakalama olasılığı, geleneksel modellerinki ile karşılaştırılınca geliştiricilerin çoğunluğu (222 kişiden 184'ü) için %23'e kadar artırmaktadır. Aynı zamanda, geleneksel yerine kişisel yaklaşım tercih etmek 174 geliştirici için yanlış alarm olasılığını %12'ye kadar artırmıştır. Önceki çalışmalardan farklı olarak bu çalışma, bir geliştirici için kişisel modelin geleneksel modelden daha başarılı olmasına yada tam tersine vesile olan geliştirme karakteristiklerini incelemiştir. Sonuçlara göre, daha önce çok fazla geliştiricinin üzerinde çalıştığı yazılım modüllerinde katkıda bulunan geliştiricilerin hatalarını kişisel model daha iyi tahmin etmekte iken, projedeki tecrübesi fazla olan geliştiricilere geleneksek model daha doğru tahminler üretmiştir. Bununla birlikte, hata tahmininde önemli olan ölçütlerin kişiden kişiye ne ölçüde değiştiği incelenmiştir. Sonuçlara göre, farklı kişiler için eğitilmiş kişisel modeller tecrübe, dağılım, ve tarihsel ölçütlerden farklı oranlarda yararlanmaktadırlar. Fakat yine de büyük çoğunluğu için en önemli ölçüt bir çevrimdeki eklenen satır sayısıdır. Tezin üçüncü analizinde ise kişiselleştirilmiş YHT yaklaşımını bir akademi-sanayi iş birliği projesinde birlikte çalıştığımız sanayi partnerimizin seçilmiş bir yazılım projesi kapsamında değerlendirdik. Bu seçilmiş projeden elde edebildiğimiz altı geliştirici verisi üzerinde kurulan kişisel ve geleneksel modellerin karşılaştırılması gösterdi ki, geleneksel modeller hata yakalama olasılığı açısından daha başarılılar (%29 daha yüksek). Fakat aynı zamanda kişisel modellere göre daha çok yanlış alarm üretmektedirler (%40 daha yüksek). Yüksek yanlış alarm değerleri geliştiricileri gereksiz yere uyararak daha fazla kod inceleme eforuna sebep olabilmektedirler. Endüstriyel projeye ait veri kümesinin küçük ve tipik olarak gürültü içermesi sebebiyle çeşitli istatistiksel yaklaşımlar aracılığı ile mevcuttaki veri kaynaklarından daha çok bilgi ölçmenin YHT modellerine katkısı olup olmayacağı incelenmiştir. Matris ayrıştırma ile elde edilen gizli ölçütlerin eğitime dahil edilmesi ve logaritmik filtrelemenin ölçütler üzerinde kullanılması geleneksel modellerin yanlış alarm değerlerini %32 değerinde düşürmüştür. Bunlara ek olarak kod çevrim açıklamalarından elde edilen semantik bilgilerin de eğitime eklenmesi kişisel modellerin hata yakalama olasılığını %25 artırmıştır. Aynı zamanda ölçütlerin kişisel ve geleneksel modellerin hata tahminine olan katkıları incelenmiş ve iki yaklaşım için de benzer katkılara sahip oldukları gözlemlenmiştir. En çok yazılım süreci ölçütleri katkıda bulunurken, gizli ölçütler ikincil öneme sahiptir. Semantik ölçütlerin ise hata tahminine diğerleri kadar katkıda bulunmadığı gözlemlenmiştir. Analizler göstermiştir ki kişisel modeller geleneksellere üstün gelebilmekte iken, pratikte hangi yaklaşımın tercih edileceği, geliştiricinin yazılım geliştirme karakteristiği, performans ölçme kriterleri birçok faktöre bağlıdır. Hatta geliştiricinin ekibe yeni katılması ve/veya kendisine bir tahmin modeli kurulabilecek kadar geliştirme geçmişine sahip olmaması da literatürde soğuk başlangıç problemi olarak bilinen, tercihi zorunlu olarak geleneksel modele yönlendirecek bir durumdur. %Endüstriyel partnerimizin projesi özelinde ise ekipteki geliştirici deviri yüksek olduğu için kişiselleştirilmiş modeller kurulabilse bile pratikte kullanılamamışlardır. Analize dahil edilip kendilerine kişisel model oluşturulan geliştiriciler güncel ekipte bulunmamakta, aynı zamanda güncel ekip için de soğuk başlangıç problemi oluşmaktadır. Bu durum bize modellerin araştırma ortamındaki ulaştığı başarı değerleri kadar uygulanabilirliğinin de önemli olduğunu göstermiştir. Tezin dördüncü ve son analizinde ise endüstriyel partnerimizin projesi için prototiplenen YHT çözümünün gerçek geliştirme ortamına entegre edilmesine odaklanmış ve buna dair tecrübelerimiz paylaşılmıştır. Akıllı modelleri gerçek hayata entegre etmenin bir araştırma ortamında model prototiplemeye kıyasla kendine has bambaşka zorlukları vardır. Bu yüzden çevrimiçi bir değerlendirme ortamı kurularak modelin tahmin performansının gerçek hayata uygun bir analizinin yapılması ve modelin kullanışlılığının değerlendirilmesi önem kazanmaktadır. Model prototipleme yapılan araştırma ortamında (çevrimdışı ortam) kullanılan önceden toplanılmış veri kümesinde hataya sebebiyet veren kod çevrim bilgileri halihazırda mevcuttur ve modelin eğitimi için direk erişilebilmektedir. Fakat gerçek geliştirme ortamında hayatta (çevrimiçi ortam) anda yapılan kod çevrimlerinin hataya sebebiyet verip vermediği bilgisi gecikmeli (seçilen proje bazında ortalama yedi ay) olarak elde edilmektedir ve veride gürültüye sebebiyet vermektedir. Bu gecikme kod değişikliği bazında dizayn edilen YHT modellerinde yazılım hata yaşam döngüsünden kaynaklanan tipik bir durumdur. Gerçek geliştirme ortamına entegre edilen YHT modelinin sürdürülebilir bir tahmin performansına sahip olması önemlidir. Bu sebeple yazılım projelerinin hızlı değişen ve gelişen yapısına ayak uydurarak son geliştirme aktiviteleri ile yeniden eğitilerek güncellenmek zorundadır. Ayrıca model eğitim/güncelleme sırasında eğitim kümesindeki gürültülü verinin (henüz tespit edilmemiş fakat hataya sebebiyet veren kod çevrimleri) tahmin performansına etkisinin minimize edilmesi gerekmektedir. Modelin eğitiminde kullanılan kod çevrimleri ile hataya meyilleri tahmin edilecek çevrimler arasında zamansal bir aralık bırakmak modelin gürültülü veriden öğrenmesine karşı alınan tipik bir yöntemdir. Biz bu çalışmada, modelin gerçek hayattaki performansını simüle etmek için bir çevrimiçi tahmin ortamı tasarladık. Öncelikle çevrimdışı tahmin ortamındaki (prototipleme ortamı) performans değerlendirmelerimizin çevrimiçi tahmin ortamındaki (gerçek hayattaki) performanslarını yakalayıp yakalayamayacağını araştırdık. Sonuçlar gösterdi ki, modelin çevrimiçi değerlendirme performansı projenin ilk senesinde düşükken sonrasında çevrimdışı performansı ile benzer değerlere ulaşıyorlar. Bu da çevrimdışı değerlendirme tekniğinin modelin gerçek hayattaki potansiyel performansını yansıtabildiğini göstermektedir. Daha sonra çevrimiçi tahmin dizaynımızı kullanarak entegre edilecek modelin güncellenirken kullandığı eğitim kümesi ile hataya meyilleri tahmin edilecek kod çevrimleri arasında bırakılan farklı uzunluktaki zaman aralıklarının ve farklı model güncelleme periyotlarının tahmin performansına etkisini araştırdık. Sonuçlarımıza göre, modelin eğitimi sırasında eğitim ve tahmin kod çevrimleri arasında bırakılan zaman aralığı modelin hata yakalama olasılığını %37'ye kadar etkilemektedir. Modelin güncelleme periyodunu ayarlamak ise hata yakalama olasılığını %18'e kadar etkilemektedir. Bu sonuçlara göre, sekiz aylık bir eğitim-tahmin kümesi zaman boşluğu kullanımı ile modelin üç günde bir güncellenmesi en başarılı ve istikrarlı performans değerlerini üreten durumdur ve modelin entegrasyon ayarları bu şekilde yapılmıştır. Ayrıca tahmin çıktılarının daha anlaşılır ve aksiyon alınabilir olması için bir kod çevriminin yazılıma hata enjekte etme olasılığına ek olarak ilgili kod çevriminden hesaplanan ölçütler de (örn., çevrimden etkilenen kod dosyası sayısı) kullanıcıya sunulmuştur. Bu tezdeki analizler göstermiştir ki kişiselleştirilmiş YHT modellerinin geleceği parlak olmakla birlikte, performanslarını etkileyen faktörler üzerinden daha çok analize ihtiyaç vardır. Ayrıca gelecek çalışmalar transfer edilebilir profiller oluşturmaya ve benzer özelliklerine göre segmentlenmiş geliştiricilere özel grup modelleri geliştirmeye odaklanabilir. Diğer taraftan YHT modellerinin pratiğe uygulanabilirliği ve tahmin sonuçlarının yorumlanabilirliği önemlidir. Bir yazılım projesine YHT modeli geliştirilirken çevrimiçi bir değerlendirme ortamının kurulmasını desteklemekteyiz. Ayrıca projenin yapısına, takımın geliştirme alışkanlıklarına ve tahmin modelinden beklentilerine dikkat edilmeli.
Organizations apply software quality assurance techniques (SQA) to deliver high-quality products to their customers. Developing defect-free software holds a critical role in SQA activities. The increasing usage of software systems and also their rapidly evolving nature in terms of size and complexity raise the importance of effectiveness in defect detection activities. Software defect prediction (SDP) is a subfield of empirical software engineering that focuses on building automated and effective ways of detecting defects in software systems. Many SDP models have been proposed in two decades, and current state-of-the-art models mostly utilize artificial intelligence (AI) and machine learning (ML) techniques, and product, process, and people-related metrics which are collected from software repositories. So far now, the people aspect of the SDP has been studied less compared to the algorithm (i.e., ensembling or tuning machine learners) and data aspects (i.e., proposing new metrics). While the majority of people-focused studies incorporate developer or team related metrics into SDP models, recently personalized SDP models have been proposed. On the other hand, the majority of the SDP research so far now focuses on building SDP models that produce high rates of prediction performance values. Real case studies in industrial software projects and also the number of studies that research the applicability of SDP models in practice are relatively few. However, for an SPD solution to be successful and efficient, its applicability in real life is as important as its prediction accuracy. This thesis focus on two main goals: 1) assessing people factor in SDP to understand whether it helps to improve the prediction accuracy of SDP models, and 2) prototyping an SDP solution for an industrial setting and assessing its deployment performance. First, we made an empirical analysis to understand the effect of community smell patterns on the prediction of bug-prone software classes. The ''community smell'' term is recently coined to describe the collaboration and communication flaws in organizations. Our motivation in this part is based on the studies that show the success of incorporating community factors, i.e., sociotechnical network metrics, into prediction models to predict bug-prone software modules. Also, prior studies show the statistical association of community smells with code smells (which are code antipatterns) and report the predictive success of using code smell-related metrics in the SDP problem. We assess the contribution of community smells on the prediction of bug-prone classes against the contribution of other state-of-the-art metrics (e.g., static code metrics) and code smell metrics. Our analysis on ten open-source projects shows that community smells improve the prediction rates of baseline models by 3% in terms of area under the curve (AUC), while the code smell intensity metric improves the prediction rates by 17%. One reason for that is the existing ways of detecting community smell patterns may not be rich in terms of capturing communication patterns of the team since it only mines patterns through mailing archives of organizations. Another reason is that the technical code flaws (code smell intensity metric) are more successful in representing defect related information compared to community smells. Considering the challenging situation in extracting community patterns and the higher success of the code small intensity metric in SDP, we direct our research to focus on the code development skills of developers and the personalized SDP approach. Second, we investigate the personalized SDP models. The rationale behind the personalized SDP approach is that different developers tend to have different development patterns and consequently, their development may have different defect patterns. In the personalized approach, there is an SDP model for each developer in the team which is trained with the developer's own development history solely and its predictions target only the developer. Whereas in the traditional approach, there is a single SDP model that is trained with the whole team's development history, and its predictions target anyone in the team. Prior studies report promising results on the personalized SDP models. Still, their experimental setup is very limited in terms of data, context, model validation, and further explorations on the characteristics that affect the success of personalized models. We conduct a comprehensive investigation of personalized change-level SDP on 222 developers from six open-source projects utilizing two state-of-the-art ML algorithms and 13 process metrics collected from software code repositories that measure the development activity from size, history, diffusion, and experience aspects. We evaluate the model performance using rigorous validation setups, seven assessment criteria, and statistical tests. Our analysis shows that the personalized models (PM) predict defects better than general models (GM), i.e., increase recall by up to 24% for the 83% of developers. However, PM also increases the false alarms of GM by up to 12% for 77% of developers. Moreover, PM is superior to GM for those developers who contribute to the software modules that have been contributed by many prior developers. GM is superior to PM for the more experienced developers. Further, the information gained from various process metrics in prediction defects differs among individuals, but the size aspect is the most important one in the whole team. In the third part of the thesis, we build prototype personalized and general SDP models for our partner from the telecommunication industry. By using the same empirical setup that we use for the investigation of personalized models in open-source projects, we observe that GM detects more defects than PM (i.e., 29% higher recall) in our industrial case. However, PM gives 40% lower false alarms than GM, leading to a lower code inspection cost than GM. Moreover, we observe that utilizing multiple data sources such as semantic information extracted from commit descriptions and latent features of development activity and applying log filtering on metric values improve the recall of PM by up to 25% and lowers GM's false alarms by up to 32%. Considering the industrial team's perspective on prediction success criteria, we pick a model to deploy that produces balanced recall and false alarm rates: the GM model that utilizes the process and latent metrics and log filtering. Also, we observe that the semantic metrics extracted from the commit descriptions do not seem to contribute to the prediction of defects as much as process and latent metrics. In the fourth and last part of the thesis, we deploy the chosen SDP prototype into our industrial partner's real development environment and share our insights on the deployment. Integrating SDP models into real development environments has several challenges regarding performance validation, consistency, and data accuracy. The offline research setups may not be convenient to observe the performance of SDP models in real life since the online (real-life) data flow of software systems is different than offline setups. For example, in real life, discovering bug-inducing commits requires some time due to the bug life cycle, and this causes a data label noise in the training sets of an online setup. Whereas, an offline dataset does not have that problem since it utilizes a pre-collected batch dataset. Moreover, deployed SDP models need a re-training (update) with the recent commits to provide consistency in their prediction performance and to keep up with the non-stationary nature of the software. We propose an online prediction setup to investigate the deployed prototype's real-life performance under two parameters: 1) a train-test (TT) gap, which is a time gap between the train and test commits used to avoid learning from noisy data, and 2) model update period (UP) to include the recent data into the model learning process. Our empirical analysis shows that the offline performance of the SDP prototype reflects its online performance after the first year of the project. Also, the online prediction performance is significantly affected by the various TT gap and UP values, up to 37% and 18% in terms of recall, respectively. In deployment, we set the TT gap to 8-month and UP to 3-day, since those values are the most convenient ones according to the online evaluation results in terms of prediction capability and consistency over time. The thesis concludes that using the personalized SDP approach leads to promising results in predicting defects. However, whether PM should be chosen over GM depends on factors such as the ML algorithm used, the prediction performance assessment criteria of the organization, and developers' development characteristics. Future research in personalized SDP may focus on profiling developers in a transferable way instead of building a model for each software project. For example, collecting developer activity from public repositories to create a profile or using cross-project personalized models would be some options. Moreover, our industrial experience provides good insights regarding the challenges of applying SDP in an industrial context, from data collection to model deployment. Practitioners should consider using online prediction setups and conducting a domain analysis regarding the team's practices and prediction success criteria and project context (i.e., release cycle) before making deployment decisions to obtain good and consistent prediction performance. Interpretability and usability of models hold a crucial role in the future of SDP studies. More researchers are becoming interested in such aspects of SDP models, i.e., developer perceptions of SDP tools and actionability of prediction outputs.