Bu konunun çoğunu 1970'lerden ve 1980'lerin başlarından geldiği gerçeğiyle ortaya çıkaracağım. Bu süre zarfında, sıralı işlem modelleri, yinelemeli ve / veya artımlı yaklaşımlardan (Spiral model veya çevik yöntemler) çok daha yaygındı. Bu çalışmanın çoğu bu ardışık modeller üzerine kuruludur. Bununla birlikte, ilişkinin zarar verdiğini sanmıyorum, ancak yinelemeli / artımlı yaklaşımların faydalarından biri, bağımlılıklar enjekte edilmeden ve her bir fazın karmaşıklığından önce, özellikleri (bir uygulamanın dikey bir dilimi) serbest bırakmak ve bunun içindeki sorunları düzeltmektir. yüksektir.
Sadece benim kopyasını çıkardı Yazılım Mühendisliği İktisadi ve O ME Fagan (tarafından "Tasarım ve Kod Denetimler Programı Geliştirmede Hataları Azaltmak İçin" değinir 4. Bölümde bu grafikle arkasında verilere başvuru buldum IEEE , UMD PDF ), EB Daly'nin "Yazılım Mühendisliği Yönetimi", WE Stephenson'ın "Koruma Sistem Yazılımı Geliştirmede Kullanılan Kaynakların Bir Analizi" ( ACM ) ve "birkaç TRW projesi".
... düzeltmelerin veya değişikliklerin yapıldığı fazın bir fonksiyonu olarak yazılım hatalarını düzeltme maliyetinin (veya başka yazılım değişikliklerinin yapılmasının). Bir yazılım gereksinimleri hatası planlar ve gereksinimler aşamasında algılanır ve düzeltilirse, düzeltilmesi gereksinim belirtiminin güncellenmesi nispeten basit bir konudur. Aynı hata, bakım aşamasına kadar düzeltilmezse, düzeltme çok daha büyük bir spesifikasyon envanteri, kod, kullanıcı ve bakım kılavuzları ve eğitim materyali içerir.
Ayrıca, geç düzeltmeler, çok daha resmi bir değişiklik onayı ve kontrol sürecini ve düzeltmeyi yeniden doğrulamak için çok daha kapsamlı bir faaliyet içerir. Bu faktörler, hatayı büyük projelerdeki bakım safhasında düzeltmek için gereksinim safhasına göre genellikle 100 kat daha pahalı yapmak için bir araya gelir.
Bohem ayrıca iki küçük, daha az resmi projeye baktı ve maliyeti artırdı, ancak daha büyük projelerde belirlenen 100 kattan çok daha az önemliydi. Grafik göz önüne alındığında, sistem operasyonel olduktan sonra bir şartlar arızasını gidermek için farklar 4 kat daha büyük görünmektedir. Bunu, projeyi oluşturan daha küçük ürün envanterine ve daha basit bir şekilde daha hızlı sabitleme yeteneğine yol açan düşük formaliteye bağladı.
Yazılım Mühendisliği Ekonomisindeki Boehm'e göre, Kod Tamamlama'daki tablo oldukça şişirilmiş (aralıkların düşük ucu genellikle çok yüksek). Aşama dahilinde herhangi bir değişiklik yapmanın bedeli aslında 1. Yazılım Mühendisliği Ekonomisinde Şekil 4-2'den yapılan ekstrapolasyonda, gereksinim değişikliği mimaride 1,5-2,5 kat, kodlamada 2,5-10, testte 4-20 ve 4 olmalıdır. 100 bakımda. Miktar, projenin boyutuna ve karmaşıklığına ve kullanılan sürecin formalitesine bağlıdır.
Barry Boehm ve Richard Turner'ın Dengeleme Çevikliği ve Disiplini'nin Ek E bölümünde değişimin maliyeti ile ilgili ampirik bulgular hakkında küçük bir bölüm bulunmaktadır.
Açılış paragrafları, Beck'in alıntı yaptığı Kent Beck'in Extreme Programming Explained'a atıfta bulundu. Değişikliklerin maliyeti zaman içinde yavaşça artarsa, kararların mümkün olduğunca geç alınacağını ve sadece ihtiyaç duyulanın uygulanacağını söylüyor. Bu "düz eğri" olarak bilinir ve Extreme Programming'i yönlendiren şeydir. Bununla birlikte, önceki literatürün bulduğu şey "dik eğri" idi, 5: 1 değişikliğe sahip küçük sistemler (<5 KSLOC) ve 100: 1 değişikliğe sahip büyük sistemler.
Bu bölüm, Maryland Üniversitesi'nin (Ulusal Bilim Vakfı sponsorluğunda) Ampirik Tabanlı Yazılım Mühendisliği Merkezi'ni içermektedir. Elde edilebilir bir literatür taraması yaptılar ve sonuçların 100: 1 oranını onaylama eğiliminde olduklarını ve bazı sonuçların 70: 1 ila 125: 1 arasında olduğunu gösterdi. Ne yazık ki, bunlar tipik olarak "büyük tasarım ön" projelerdi ve sıralı bir şekilde yönetiliyorlardı.
Extreme Programming kullanılarak çalıştırılan "küçük ticari Java projeleri" örnekleri var. Her Öykü için, hata düzeltme, yeni tasarım ve yeniden düzenleme çalışmalarındaki çaba izlendi. Veriler, sistem geliştikçe (daha fazla kullanıcı öyküsü uygulandığında), ortalama çabanın önemsiz bir oranda artma eğiliminde olduğunu göstermektedir. Yeniden yapılanmadaki çaba yaklaşık% 5 artar ve çaba sağlama çabaları yaklaşık% 4 artar.
Öğrendiğim şey, sistem karmaşıklığının gereken çaba miktarında büyük bir rol oynadığı. Sistemin içine dikey dilimler oluşturarak, eğri hızını yığınlara eklemek yerine yavaşça karmaşıklık ekleyerek yavaşlatırsınız. İhtiyaçların kitlesel karmaşıklığı ile uğraşmak yerine, ardından son derece karmaşık bir mimari izler, ardından son derece karmaşık bir uygulama izler, vb. Çok basit bir şekilde başlar ve eklersiniz.
Bunun onarım maliyeti üzerindeki etkisi nedir? Sonunda, belki fazla değil. Bununla birlikte, karmaşıklık üzerinde daha fazla kontrole izin verme avantajları vardır (teknik borç yönetimi yoluyla). Buna ek olarak, genellikle çeviklikle ilişkili sık teslimler, projenin daha erken biteceği anlamına gelir - "sistemi" teslim etmek yerine, iş ihtiyaçları tatmin olana veya yeni bir sistemin (ve dolayısıyla yeni bir projenin) ciddi şekilde değişmesine kadar parçalar teslim edilir. gereklidir.
Stephen Kan'ın Yazılım Kalitesi Mühendisliğindeki Metrikleri ve Modelleri, Bölüm 6'da faz hatası gideriminin maliyet etkinliği ile ilgili bir bölüme sahiptir.
Yüksek seviye tasarım (sistem mimarisi), düşük seviye tasarım (ayrıntılı tasarım) ve uygulamanın 10 ila 100 kat daha ucuz olabileceğini belirtmek için Fagan'ın 1976 makalesini (Yazılım Mühendisliği Ekonomisi'nde de bahsedilmiştir) atıfta bulunarak başladı. bileşen ve sistem seviyesi testi sırasında yapılan çalışmalardan daha fazla.
Ayrıca Freedman ve Weinberg tarafından büyük sistemleri tartışan 1982 ve 1984'ten iki yayına da yer veriyor. Birincisi "Gözden Geçmeler, İncelemeler ve Teknik İncelemeler El Kitabı" ve ikincisi "Gözden Geçirme, Yürütmeler ve İncelemeler" dır. Gözden geçirme sürecinin başlarında incelemelerin uygulanması, test aşamasına ulaşan hata sayısını 10'luk bir faktörle azaltabilir. Hata sayısındaki bu azalma, test maliyetlerinin% 50 ila% 80 oranında azalmasına neden olur. Çalışmaları daha ayrıntılı okumak zorunda kalacağım, ancak maliyetin kusurları bulma ve çözmeyi de içerdiği anlaşılıyor.
1982'de Remus tarafından yapılan "İnceleme / İnceleme Açısından Bütünleşik Yazılım Doğrulama" adlı bir araştırma, IBM'in Kaliforniya'daki Santa Teresa Laboratuarı'ndan gelen verileri kullanarak, özellikle farklı aşamalardaki kusurları gidermenin maliyetini araştırdı. Alıntılanan sonuçlar, 1:20:82 maliyet oranını göstermektedir. Diğer bir deyişle, tasarım veya kod denetimlerinde bulunan bir kusurun değiştirme maliyeti 1'dir. Aynı kusur testten kaçarsa, 20 kat daha pahalı olur. Bir kullanıcıya tamamen çıkarsa, düzeltilmesi gereken maliyeti 82'ye kadar katlar. Kan, IBM'in Rochester, Minnessota tesisindeki örnek verileri kullanarak, AS / 400 projesinin kusur giderim maliyetinin benzer olduğunu buldu. 1:13:92 Bununla birlikte, maliyetteki artışın bir kusur bulma zorluğundan kaynaklanabileceğini de belirtti.
Yazılım incelemesine ilişkin Gilb'in 1993 ( "Yazılım Denetimi" ) ve 1999 ("Yazılım Mühendisliği Şartnamesi ve Kalite Kontrol Süreçlerini Optimize Etme") yayınlarında diğer çalışmaları onaylamak için bahsedilmiştir.
Construx'un Arıza Maliyet Artışı hakkındaki sayfasında, onarım onarım maliyetindeki artışla ilgili bir takım referanslar sağlayan ek bilgiler bulunabilir . Code Complete'in yazarı Steve McConnell'in Construx için kurduğu ve çalıştığı unutulmamalıdır.
Geçenlerde , 2010'da Lone Star Ruby Konferansında Glenn Vanderburg tarafından verilen Real Software Engineering (Gerçek Yazılım Mühendisliği) adlı bir konuşmayı dinledim. Aynı konuşmayı 2011'de Scottish Ruby Konferansı ve Erubycon , 2012'de QCon San Francisco ve O'Reilly Yazılım Mimarisi Konferansı'nda verdi. 2015 yılında . Sadece Lone Star Ruby Konferansı'nı dinledim, ancak fikirleri rafine edildiğinde konuşma zaman içinde gelişti.
Venderburg, tüm bu tarihsel verilerin hepsinin, bir proje aşamalarında ilerledikçe, zaman içerisinde ilerledikçe hataları düzeltme maliyetini gösterdiğini öne sürüyor. Daha önce belirtilen kağıtlarda ve kitaplarda incelenen projelerin çoğu, faz ve zamanın birlikte hareket ettiği sıralı "şelale" projeleriydi. Bununla birlikte, benzer bir örnek yinelemeli ve artımlı projelerde ortaya çıkar - bir yinelemeye bir kusur enjekte edildiyse, bu yinelemede düzeltmek nispeten ucuz olacaktır. Bununla birlikte, yinelemeler ilerledikçe, birçok şey olur - yazılım daha karmaşık hale gelir, insanlar belirli modüllerde veya kodun bazı bölümlerinde çalışma ile ilgili bazı küçük ayrıntıları unuturlar, gereksinimler değişir. Bunların hepsi, arızayı düzeltme maliyetini artıracak.
Bunun muhtemelen gerçeğe daha yakın olduğunu düşünüyorum. Bir şelale projesinde, yukarı havza problemi nedeniyle düzeltilmesi gereken yapay eserlerin miktarı nedeniyle maliyet artar. Yinelemeli ve artımlı projelerde, yazılımdaki karmaşıklığın artması nedeniyle maliyet artar.