Proje sonunda bir hatayı düzeltmek önemli ölçüde masraflı mı?


21

In Andrew Hay tarafından bir blog yayınında , aşağıdaki aksiyomu konuyordu:

Projenin sonunda bir hatayı düzeltmek, projede daha önce aynı hatayı düzeltmek için yapması gereken maliyeti oldukça fazladır.

Bununla birlikte, bu kesin olarak görünmüyor, özellikle Less Wrong ile ilgili bir blog yazısını okuduktan sonra ve bunu yedeklediğim veriler çok eski.

Bu hala aksiyom bugün doğru mu?


@StefanHendriks Morendil'den yazdığınız makaleye bağlantınızdaki yorumlar gerçekten sorabileceğiniz her şeyi kapsar; BENİM NACİZANE FİKRİME GÖRE. Orada harika bilgiler.
Aaron McIver

@AaronMcIver niyetim bu konuda daha fazla insanın bilmesini sağlamak. Sözcüğü yaymak ve gerçek verileri elde etme şansını arttırmak gibi. Ben gerçek bir tartışma aramıyorum; makalede harika olanlar tutuluyor (sizin de bildiğiniz gibi :)).
Stefan Hendriks

2
Merhaba Stefan, bu bir tartışma panosu değil, ne de bir sabun kutusu: Yorumunuzu sorudan çıkardım. Yazılım geliştirmenin özelliklerini açıklamaya yardımcı olabiliriz, ancak bu siteyi fikirlerinizi tanıtmak veya beğendiğiniz blog yayınlarını paylaşmak için bir araç olarak kullanmak istiyorsanız yanlış yerdesiniz.

Bunun kesinlikle programlama ile ilgisi olmasına rağmen, sorunun doğası aslında critics.stackexchange.com'da daha uygun hale getirebilir.
StriplingWarrior

Yanıtlar:


16

Gördüğüm tek zor veri Boehm ve Papaccio, Yazılım Maliyetlerini Anlama ve Kontrol Etme .

Bu 1988'e dayanıyor ve yaklaşık 80 yazılım projesinin bir çalışmasıydı. Erken ve düzeltilmiş bir kararın erken düzeltilmiş olsaydı alacağının 50-200 katına mal olabileceği sonucuna vardılar. Ancak bahsettiği çok erken kararlar, hangi işletim sistemi üzerinde çalışacağını ve hangi dili ve veritabanını kullanacağını.

Dolayısıyla, bu rakamların günümüzün yazılım gelişimiyle ilgili olarak aşırı okunması olabilir. Bununla birlikte, şu anda bu alanda çok fazla deneyime sahibiz ve içgüdüsel olarak hâlâ bir noktaya sadık kaldığını biliyoruz.

Aşırı, üretimden hemen önce gereksinimlerdeki bir başarısızlığın yakalanması durumunda, bunun çok fazla tekrarlanmaya neden olduğunu ve projenin ertelendiğini ya da gerçekten iptal edildiğini, herhangi bir iş yapılmadan önce yakalandığı takdirde biliyoruz. iyi olurdu.

Düzenleme: Doc Brown yorumunda iyi bir noktaya değindi.

Boehm'in araştırması, derleme ve çalıştırma zamanlarının gülünç derecede yavaş olduğu bir zamanda COBOL ve FORTRAN projeleri üzerinde yapıldı. Kariyerime 90'lı yılların başında COBOL'de başladım ve derleme ve test döngüsü o kadar uzun sürdü ki, döngüden geçmeden önce (ya da en azından yapım aşamasında, sadece kod aşamasında) kuru test etme çabasına değdi. bir şeyi yakalayabilir ve erken iptal ederek kendinizi bir saat kadar tasarruf ettirebilirsiniz).

Buna karşılık, patronlarımız şikayetlerimizde gülerdi, çünkü çok uzun zaman önce sunucu odasına bir kutu elle zımba kartı taşımak zorunda kalıyorlardı ve bir gün orada bırakıyorlardı.

Bu yüzden şimdi olduğundan çok daha doğru oldu .

Ve yine de, çok yakın bir zamanda, blogları Steve McConnell'in bu problemi görselleştirmesini ( 1996 tarihli ref ) yeniden kullanıyor gibiydim , sanki grafik çok zor rakamlara dayanıyordu. Değil. Bu sadece amacını açıklamak için bir görselleştirme.

Morendil’in öncülünün OP’de alıntılanan makalesinde iyi olduğunu düşünüyorum. Bu konuda sahip olduğumuz bilim fakir ve modası geçmiş ve henüz kanon gibi davranıyor. Ama ben bunun iyi durduğunu ve kulağa doğru geldiğini düşünüyorum çünkü acı deneyimlerden hala doğru olduğunu biliyoruz, en azından bir noktaya kadar. Ve bence onun dramatik "hastalıklı disiplini" ifadesi ona hiçbir şey yapmıyor.


3
+1. Bence, Boehm'in araştırmasının hata düzeltme sürümleri oluşturma ve dağıtma maliyetlerinin bugün olduğundan çok daha yüksek olduğu bir zamanda yapıldığını da eklemeliyim.
Doktor Brown

@DocBrown: İyi nokta. Katma. Ek bir ramble ile birlikte.
pdr

Referans için +1, görselleştirme için +1 (çok kötü, sadece bir puan verebilirim.) Harika cevap, teşekkürler!
Stefan Hendriks

15

Bu iddiayı destekleyecek herhangi bir kesin veri veya başka kanıtın farkında olmasam da, en azından , bunun mantıklı olduğunu anlıyorum.

Bunu bu şekilde düşünün. Bağımlı alt sistemlere sahip karmaşık bir sisteminiz varsa (önemsiz uygulamaların çoğunda olduğu gibi), sistemlerden herhangi birinde yapılan değişikliklerin sonucu olarak ortaya çıkabilecek sorunları düşünün. Alt sistemleri (birim testler aracılığıyla ve benzeri) doğru olduğu kanıtlanmış ve erken sabit ise, nakavt-ons kaynaklanıyor edilecek hataların sayısı tek başına erken sabitleyerek basitçe azalma sağlanmaktadır.

Ayrıca, hataları erken düzeltiyorsanız, uygulama geliştiricinin zihninde hala tazedir. Herhangi bir projenin uzunluğuna bağlı olarak, sonunda hataları düzeltiyorsanız, geliştiricinin yazdıklarını ve (belki de) kodlarının bağlı olduğu alt sistemlerin nasıl çalıştığını bulmak için zaman harcaması gerekecektir. Bunu yeniden öğrenmek için harcanan zaman = $.


1
Bu yüzden temel olarak bir hatayı daha sonra (veya daha erken) düzeltmek için harcadığınız çabadan bahsediyoruz. Daha sonra düzelirse, böcekleri daha pahalı hale getiren diğer faktörleri düşünebilirim. Fakat bu sizin hata tanımınıza bağlıdır. Belki de önce üzerinde anlaşılacak bir şey var. Kitabımda aynı zamanda “bu sürümdeki eşleşme beklentisi” de değil. Gibi, eksik bir işlevsellik. Bu gerçek paraya mal olabilir, o zaman daha açıktır. Bazı özellikler olsa da (web siteleri için olduğu gibi, CSS değişir mi?) Şimdi daha erken maliyetlere sahip olmayabilir. Veya, önemli ölçüde daha fazla değil. Yine de verilerim yok.
Stefan Hendriks

@StefanHendriks: Talep edilen düzeltmelerin ortaya çıkardığı yeni hataların yanı sıra harcadığı çaba miktarından da söz ediyoruz . Gerçek verileri elde etmek için muhtemelen proje sonrası ipoteklerini (her iki yöntemi de kullanmış olanlar) incelemelisiniz.
Demian Brecht

2
@AaronMcIver: Makaleden aldığım paket daha iyi bir yöntem değil, sonraki raporlardaki iddiayı ve yanlış yorumlamaları desteklemek için kullanılan araştırma ve zor verilerin. Cevabım kamuya açık verilere dayanmamakla birlikte, oldukça karmaşık sistemlerle uğraşan 10+ yıllık mesleki deneyime dayanıyor.
Demian Brecht

1
BTW CSS değişikliklerinin bundan muzdarip olmadığına katılıyorum. Diğer tüm pikselleri mükemmel bir duruma getirdikten ve bir çok şeyi kırmanız gerekebileceğini öğrendikten sonra bir yerleşim sorununu çözmeyi deneyin
Andrea

1
@DemianBrecht Cevabınız çok öznel, bu yüzden soruyorum. Bu bir spekülasyon ve içgüdüsel bir his. Bunlar kesinlikle ağırlık tutabilse de, sorun, makalenin işaret ettiği gibi gerçekliğin yanlış bir temsilinden daha sık olabileceği yönündedir. Neden daha fazla maliyetli olabileceği konusundaki kriterleriniz olarak sağduyu kullanmak da tersine çevrilebilir. Bir hata düzeltmesinde yer alan birey sayısının, geliştiricilerin gerçek çabasını göz ardı ederek maliyetinin artmasının ya da olmaması maliyetinin asıl faktörü olabileceğini iddia edebilirsiniz.
Aaron McIver

12

Bunu ölçmenin bilimsel olarak katı bir yolunu bulmanın mümkün olacağından şüpheliyim - buna dahil olan çok fazla faktör var ve iki projenin vaka incelemelerinden daha fazla hizmet verecek kadar kıyaslanamaz. Mantıksal düşünme size uzun bir yol kat etmeli. Birkaç argüman:

  • Bir projedeki toplam kod miktarı sonuna kadar artma eğilimindedir. Bir hatayı düzeltmeyi ne kadar beklerseniz, dokunmanız gereken kod tabanı o kadar büyük olur.
  • Bir projeye eklenen yeni kodun kalitesi, en azından baskı varsa (genellikle verilen), sonuna kadar azalır: Bir süre bitme tarihi, insanları sadece zamanında gemiye göndermek için denize en iyi uygulamaları attırır. Bu, bir hatayı ne kadar sonra düzeltirseniz, elemek için o kadar fazla kötü kod bulunması anlamına gelir.
  • Kod çoğaltması genellikle kaşlarını çatmasına rağmen, her zaman gerçekleşir ve kopya yapıştırması kolay, ancak yinelenen kod bölümlerini yeniden birleştirmek zordur, bir kez kopya yapıştırılan kod miktarı tipik olarak kullanım ömrü boyunca artar. projesi. Daha fazla kopya yapıştırılmış kod, hatalarınızın çoğaltılması ve birkaç kez bulunması ve düzeltilmesi gerektiğine dair daha yüksek bir şans anlamına gelir (ve sonuç olarak, bazı olayların fark edilmediği daha yüksek bir şanstır).
  • Bir hatayı düzeltmek bir kod tabanında yapılan bir değişiklik; işleri daha iyi hale getirmeyi umuyorsunuz, ancak bir değişiklik her zaman risk taşır. Aylar süren bir projede ciddi sorunlara neden olan bir değişiklik, hasar yönetimi için bol miktarda kafa boşluğu bırakmalıdır, ancak sevkıyattan iki gün önce, ciddi bir sorun yaşarsınız.
  • Böceğin kendisi ne kadar uzun olursa, uygulamanın diğer bölümlerinin hatalı davranışlarına güvenmeye başlaması o kadar muhtemeldir. Sonra, onu düzelttikten sonra, aniden, fonksiyonunuzun gerçekten doğru belgelenmiş sonuçları vermesini beklemeyen kodda bir sürü ikincil böceği serbest bırakırsınız.

+1. Mükemmel cevap. Hata içeren kodların kopyalanması ve yapıştırılması, ona bağlı modüllere bağlı olarak daha fazla hata üretir.
Karthik Sreenivasan,

2

Bu, sistem mühendisliğinden temel kabul görmüş bir şeydir - ve her türlü teknik gelişme için geçerlidir (köprü, füze, savaş gemisi veya yazılım kurmak gibi).

Temel olarak, şeylerin maliyeti, gelişim aşamaları boyunca ilerledikçe yaklaşık bir büyüklük düzeyinde artar.

Fikri anlama noktasında düzeltilmesi 10 dolar olan bir şey ...

Spesifikasyonda bir güncelleme yapmanız gerekirse 100 $ 'a mal olacak.

Ya da bir şey uygulandıysa ve bu noktada değişiklik yapmanız gerekiyorsa (ve spesifikasyonu güncelleyin ve onayları almanız gerekiyorsa) yaklaşık 1000 $ 'a maloldu, ancak bir tür resmi kabul / satma testinden geçmedi

Ya da bir şey uygulandıysa ve müşteri kabul ederse 10000 $ 'a maloldu ve bu noktada değişiklikler yapmanız gerekiyor (ve spesifikasyonu güncelleyin ve onayları alın ve müşteri kabul ve kalifikasyonunu yeniden test edip yeniden çalıştırın)

Ve dağıtım / devrilme / hizmete sokma işleminden sonraki maliyet daha da fazla.

Bunlara örnekler ve bunların anlaşılması kolaydır: Kapsamı 25.000 çalışanı kullandıktan sonra yapılan ciddi kapsam değişikliği olan bir bankacılık sistemi, yeniden eğitim süresi içerisinde bir pakete mal olacak ... hatta kapsam, kodlama, test, regresyon düşünmeden önce, Vb vb.

GELECEĞE, kilometreniz değişecektir: Fred Nurke'nin elektronik çorap ısınma e-ticaret web sitesini değiştirmenin maliyeti ve etkileri, bir uçak uçuş kontrol bilgisayarındaki değişen yazılım maliyetlerinden biraz farklıdır.


1
Diyelim ki, her ay kullanıcılarınıza yeni bir yazılım sürümü yayınlarsınız (ya da MS’in Windows için yaptığı gibi sadece yamalar). Şimdi iki hata ortaya çıkıyor, biri iki yıl önce yazılıma, biri de geçen ay ortaya çıkıyor. Bu iki hatayı düzeltmenin ve yeni sürümü açmanın maliyeti neredeyse aynı olabilir. Bu hatalardan herhangi birinin neden olduğu sorunları çözmenin maliyeti farklı bir şey olabilir, ancak bu hatanın kendisine de çok bağlıdır.
Doktor Brown

Tam olarak aynı şey değil - bu nakliye sonrası. Gönderimden sonraki maliyetler büyük ölçüde benzerdir (hepsinin güncellemeye, teste, uygulamaya ihtiyacı vardır.) Yukarıda belirttiğim şey, maliyetlerin piyasaya çıktıktan sonra çarpıcı biçimde artmasıdır.
Çabuk_şimdi

1
"sürüm sonrası", gömülü yazılım için, shrink-wrap yazılımı için bir dereceye kadar ve (yanlış yönlendirilmiş!) bir şelale modelinde geliştirilen yazılım için geçerli bir durumdur. Diğer yazılım türleri artımlı olarak geliştirilip piyasaya sürülürken, "sürüm sonrası" süresi ürünün ömrüne kıyasla neredeyse küçüktür. Bu özellikle web uygulamaları için geçerlidir.
Doktor Brown,

Web uygulamaları için geçerli olabilir, ancak bütün evren bu değil. Peki ya çamaşır makineleri? Arabalar? Füzeler? PC işletim sistemleri? Güç istasyonları? PLC'ler çimento fabrikaları işletiyor mu? Açık ve açık ve listede gidiyor.
Çabuk_şimdi

2

Zor verilere veya gerçeklere erişemiyorum, bu yüzden BT'deki son 20 senemden beri size anekdotlu gözlemler sunabiliyorum.

Çoğu geliştiricinin bugün 20 yıl öncesine kıyasla yazılım yaratma yöntemi arasında büyük bir fark olduğuna inanıyorum. Çevik hareketin çok fazla ivme kazanmasıyla, özellikle son 5-6 yılda, işyerindeki tutumlarda gerçek bir değişim gördüm. Öyle ki, yaptığımız işin niteliği her yıl artıyor ve sınırlanıyor gibi görünüyor ve projeden projeye öğrendiğimiz dersleri uygularken her projeyle. İlk test geliştirmeye odaklanan yalın süreçler, tartışmalı olmaktan çok yaygın hale geldi. Öyle ki, bugün birçok şirkete girmek için, Çevik ile rahat değilseniz, size kapıyı göstermezlerse şanslısınız.

Peki, bunun ne etkisi oldu? Öncelikle, sorunların çok daha erken tespit edildiğini fark ettim. Genellikle, eğer sorun çok büyük görünmüyorsa, bazen süresiz olarak beklemeye alınabilir. Nadir görülen bir avuçta, daha sonra ele alındığında önemsiz olduğu düşünülen hataların, o zamanlar dikkate alınmayan bazı temel sorunların ortaya çıkması nedeniyle ciddi sorunlar haline geldiğini gördüm. Bazen bu, bir sabitleme döngüsünün ortaya çıkmasına neden olabilir ve bir dereceye kadar maliyetli olabilir, ancak bu maliyet genellikle kaynak bulma açısından daha az ve daha sık olarak müşteri ile geliştirici arasındaki ilişki üzerindeki etki açısından ölçülür. Müşteriler, sonuçları eski günlerde olduğundan daha hızlı döndüren bu Çevik düşünme biçimine alışmaya başlıyorlar. yüksek yinelemeli gelişim sprintleri ve talepler ile uygulama arasında hızlı geri dönüşler sayesinde, bizden çok şey beklemeye başladılar. Ve gerçek hatalar söz konusu olduğunda, bir hatayı düzeltmek için gereken zaman, değişiklikleri desteklemek için sağlam bir testler paketi ve içgörü ile çözümler sağlayacak yeni testler oluşturma kabiliyetinin bir sonucu olarak daha fazla azalır. bildirilen sorunlara.

Sonuç olarak, sağlam bir testler takımı varsa, çoğu durumda hataları gidermek için genel çabaların azaldığı ve testin geliştiricinin yaptığı şeyin odağı olarak kalmaya devam etmesini sağlayacak prosedürler olduğu görülüyor bazı yönlerden en azından uygulamadan, işletmenin diğer alanlarına kaymıştır, çünkü bazı yönlerden odaklanma aynı zamanda saf arz ve talepten ilişki yönetimine de kaymıştır.

Ortaya çıkan bir başka şey, Çevik olmanın bakım döngülerimizi azaltacağını ileri süren içgüdülerimizin birkaç yıl önceki içgüdülerinin hem doğru hem de yanlış olduğunu kanıtlamış olmasıdır. Sağlam testler, kodumuzu büyük ölçüde hata ayıklamayı ve düzeltmeyi ve genel olarak üretim koduna bırakılan hata sayısını azaltmayı ve şu anda ihtiyaç duymamak için daha fazla çalışmakta olduğumuzun yanlış olduğunu anlamayı sağlar. sürekli kodları yeniden düzenleyerek ve mimariyi iyileştirerek, sıfırdan tamamen yeni ürünler geliştirmemiz gereken hale geldikçe, eski kodunuzu koruyun.

Sonunda, OP'nin sorusu açısından bunun anlamı nedir? Şey, cevabın gerçekten bir zamanlar düşündüğümüz kadar kesin ve kuru olmadığı anlamına gelir. 15 yıl önce muhtemelen soruyu Evet olarak cevaplardım.Ancak şimdi ampirik olarak ölçmenin gerçekten zor olduğunu söylemenin daha gerçekçi olduğunu düşünüyorum, çünkü yazılım geliştirmek için yaptığımız şeyin niteliği kendimize OP'nin sorusunu ilk sorduğumuzda sorduğumuzdan büyük ölçüde değişti. Bazı yönlerden, bir endüstri olarak tekniklerimizi ve becerilerimizi ne kadar fazla ilerletirsek, soru o kadar kesin bir evetden büyür ki, kısa bir süre içinde önemli olmadığını söyleyeceğimizden şüphelendiğim bir noktaya hataları düzelttiğimizde, testlerimiz ve süreçlerimiz çok daha güçlü olacağından, hata düzeltmelerinin zamanlaması bütçelerimizi koruma çabalarıyla daha az, müşterilerimizin ihtiyaçlarını karşılamaya yönelik öncelikler ve buna bağlı olarak maliyetler daha az olacaktır. bağlamsal olarak neredeyse anlamsız hale gelir.

Ama dediğim gibi, bu veri destekli bir kanıt değil, sadece son birkaç yıldaki gözlemlerim ve bağırsaklarım bana, iş yapma biçimimizi geliştirecek daha fazla titrek titizliğin olacağını söyleyecektir.


1

Erken hatalar sistemin diğer kısımlarına yayılır, böylece hatayı düzelttikten sonra, sistemin kendisine bağlı olan bazı kısımlarını yeniden yazmaya zorlayabilirsiniz.

Zamanla, programın bazı bölümlerinin nasıl oluşturulduğunu göreceksiniz ve kendinize hatırlatmanız gerekecek. Bu bir tür teknik borçtur (projeyi erken aşamada alırsanız, aldığınız kısayollar nedeniyle bitirmekle ilgili sorunlarınız olur).

Bu kadar basit ve kanıtlayacak bir şey yok.

Çalışanınıza bir çalışma çözümü sunmak için projeyi olabildiğince çabuk çalıştırmaya çalışıyorsunuz. İyi haber, çok hızlı bir şekilde sahip olacağınız, kötü haber ise, mümkün olduğunca hızlı bir şekilde yazmaya devam ederseniz ve her şeyi birkaç ay içinde düzeltmeyi planlıyorsanız, muhtemelen tam bir yeniden yazma olmadan asla bitiremeyeceğinizdir. Muhtemelen bunu yeniden gözden geçiremezsin.


Evet, her şey mantıklı geliyor. Bununla birlikte, bunun daha sonra tamir etmekten önemli ölçüde farklı olup olmadığını merak ediyorum. Evet, bir şeyler yeniden öğrenmelisin. Ancak, belki tarafından değil bırakmadan önce bunu bu sorunu düzeltmek olacaktır maliyetinden daha fazla para kaybetti. Bu, bu sorunu gidermek için ucuz mu pahalı mı olurdu? Daha az işte olsa bile, çünkü başındaydı?
Stefan Hendriks

2
Zaten piyasaya sürülen sistemi düzeltmek çok daha karmaşık. Örneğin sadece veri yapılarını yeniden yazamazsınız. Kullanıcılara verilerini taşımaları için bir yol sağlamanız gerekir. Yine çok erken sürümde yayınlarsanız, bir karmaşa ile karşılaşırsınız, hataları düzeltmek yerine geçiş kodunu yazmakla zaman harcarsınız. Belki biraz para kaybedersiniz, müşterileri berbat bir yazılım sattığından dolayı kaybetmekten iyidir.
Slawek

>> ... bazı şeyleri yeniden öğrenmeniz gerekir ... Özellikle de uç durumlar önemsiz ve önemsiz hale gelir. Anında dışarıdaki etkileşimler, ayrıntılı, doğru ve korunan bir spesifikasyonunuz olmadığı sürece çabucak unutulur .
DaveE

1

Muhtemelen sana istediğin kesin kanıtı veremem, ama işimden son zamanlarda ortaya çıkan bir olayla ilgili olabilirim.

Ürünümüze iş akışı yönetimi yetenekleri sağlayan bir özellik ekledik. Tipik BDUF ürünleri, müşteri tarafından imzalanmış ve onaylanmış özellikler. Spec uygulandı. Dağıtım konusundaki 1. Günden gelen şikayetler.

Müşteriyle tam bir kullanılabilirlik yapmadık, istediklerini söyledik. Sonuç: yüzlerce saatlik çalışma - analiz, tasarım, uygulama ve KG yeniden yapılmalıydı. Tüm özellik, belirli kullanım durumlarını kaçırdığı için. Spesifikasyonda bir hata, eğer yapacaksanız.

Zincirdeki bir kişi son kullanıcı varsayımlarından farklı varsayımlar yaptığında önceki işlerde de benzer şeyler gördüm. Doğrudan kodlama hatalarının, meydana geldikleri zaman yakalanmaları durumunda ele alınması nispeten kolaydır, ancak tasarım hataları tüm sistemleri öldürebilir.


1

Sürümün ardından hatayı düzeltirseniz, hatayı bulma ve düzeltme maliyetine sahip olursunuz - bu sürüm yayınlama için daha fazla zaman / maliyet gerektirebilir. Ancak, hesaba katılması gereken bir entegrasyon testi, regresyon testi, UA testi, serbest bırakma faaliyetleri vb. Hata düzeltme işlemi, başka bir dizi düzeltme veya sürüm güncellemesiyle yapılmazsa, ilk sürümdeki düzeltmeyi ekleyerek kaçınılacak olan test etme ve bırakma etkinlikleri için ek masrafa sahip olursunuz; çünkü bu maliyetler, birkaç düzeltmeleri / güncellemeler / özellik.

Ayrıca, hatanın kullanımda neden olacağı maliyeti de göz önünde bulundurun, sadece kozmetik ise, o zaman önemli değil, ancak bir işlev veya performans hatası, destek etkinlikleri veya düşük verimlilik veya yanlış hesaplamalar ile maliyet yaratabilir.


1

Intel'e Pentium Bug'ın onlara ne kadara mal olduğunu sor, Ariane 5 Roketi de bir başka güzel örnek. Bu hatalar projenin sonunda düzeltildi. Bir yazılım sürümündeki bir "girişimin" 6 rakamlı bir bütçeye sahip olduğu bir sistem üzerinde çalıştım. Bu aşırı durumlarda maliyeti görmek kolaydır. Diğer (çoğu?) Durumlarda, maliyet gürültüden gizlenir, ancak hala oradadır.

Kuşkusuz, böceklerin var oldukları zaman pahalıya mal olduklarına şüphe yoktur. Bir hata, Hata raporları, derleme için zaman ayırma, zaman aşımına uğrama ve iki katına yaklaşma, zaman paradır - bu nedenle açık bir hata sürekli maliyet yaratır. Bu nedenle, erteleme hata düzeltmeleri maliyetleri daha önce düzeltmekten daha fazla olması gerekir.

Eğer bir hata vahşi doğaya kaçarsa, maliyetin akıllıca atlaması bir adım olur ...... Yazılımın piyasaya çıkmasından önce veya sonra “projenin sonu” mu?


Gömülü dünyadaki yazılım hatalarının , proje sonunda düzeltilmesi kesinlikle daha pahalıdır. Motor kontrol modülündeki bazı yazılım hatalarından dolayı otomobilde bir geri çağırma yapmak zorunda olduğunuzu hayal edin.
Şubat'ta

Bahsettiğiniz hatalar erken bulunamadı ve bu nedenle erken düzeltilmedi.

@ Thorbjørn Gerçekten de haklısın - erken saptadığımız kusurları erken bulmamış olmanıza rağmen (Ariane Roketi örneğinde, böcek mevcut kodu yeniden kullandıkları için proje başlamadan önce da eklenmiştir). Maliyet, ekleme ve dağıtılmış düzeltme arasındaki süre ile orantılıdır, bulunduğunda veya sabitlendiğinde yapması gereken bir şey yoktur (Çoğu geliştirici, yama kod tabanına geldiğinde sabit olduğunu düşünür. Bir kusur, son kullanıcılar kuruluncaya kadar giderilmez. ). Bütün bunlar sadece IMHO olsa da - bunu destekleyecek hiçbir kanıtım yok.
mattnz

1

Bir zamanlar iki ilginç noktası olan bir makale okudum (ne yazık ki sahip olduğum referanslar çoktan gitti, bu yüzden burada daha ileri süreceğim). Yaptıkları ilk nokta, gereklilik belirtiminde tüm hataların yaklaşık% 50'sinin ve UAT veya Sistem testleri sırasında bulunan tüm hataların yaklaşık% 90'ının ortaya konmasıydı.

Sahip oldukları ikinci nokta, V-modelindeki her bir faz için maliyetin 10 kat artmasıydı. Faktörün doğru olup olmadığına göre bir tür anlamsız buluyorum, ancak en pahalı hatalar tasarımınızın yanlış bir varsayıma dayanmasıdır. Bu, büyük miktarda yeniden yazmaya yol açar. Bu varsayım nedeniyle çalışan ancak doğru varsayım uygulandığında başarısız olan tüm kodların yeniden yazılması gerekir.

Gereksinimler teknik özelliklerinde yanlış bir varsayım nedeniyle yeniden yazılması gereken tüm etki alanı modelini yaşadım. Eğer böyle bir hata erken yakalanırsa, yani şartname özelliklerini gözden geçirirken maliyeti çok düşüktür. Bu özel durumda, on satır metin alacaktır. UAT sırasında bulunursa (olduğu gibi) maliyet büyüktür (verilen örnekte proje maliyeti% 50 artırılmıştır)


1

İstatistiksel veri yok, ancak kişisel deneyim:

Üzerinde çalıştığım roket motoru kontrol kodunun bir çizgisi vardı powerCutoff = someCondition && debugOptions.cutoffIsAllowed;. Varsayılan seçenek, kesme işlemine izin verilmedi. 'Final' yapısının tüm hata ayıklama seçeneklerini kaldırması gerekiyordu, böylece satır değiştirildi powerCutoff = someCondition;.

Kod incelemesi sırasında hatayı yakaladınız mı? Yapmadık. İlk tetikleyici koşulu testte beklenmedik bir kesmeye neden olan ilk kez ilk uçuştan sadece birkaç ay önce oldu.

Bu hata, inceleme sırasında yakalandığında bir saatten daha az maliyetli olurdu. Entegrasyon sırasında yakalanırsa, bir test tekrarına neden olması bir veya iki gün tutabilir. Resmi yeterlilik sırasında yakalandıysa, yeni bir sürümle tam bir test serisinin yeniden başlamasına neden olarak bir veya iki haftaya mal olabilir.

Olduğu gibi, maliyet balooned. İlk önce, uçuş biriminin durumu tetikleyip tetikleyemeyeceğini belirlemek için testler yaptık ve test ettik. Gerçek bir olasılık olduğu tespit edildikten sonra, en iyi düzeltmenin mühendislik, yönetim ve müşteri analizi, yeni yapıyı piyasaya sürmek, yeni bir regresyon test planı oluşturmak ve uygulamak, birden fazla birim ve simülatörde sistem testi için maliyet vardı. Sonuçta, onbinlerce adam saati olmasa bile binlerce kişiye maloldu. Ayrıca orijinal 15 dakikayı gerçekten doğru kod değişikliğini yapmak için yapabilirsiniz.


0

Ne yazık ki, birçok şey gibi, buna bağlı.

Bir iletişim mesajı yanlış yazılmışsa, düzeltilmesi 'önemsiz olabilir' (güncelleme dizesi, yeniden oluşturma / paket, yeniden dağıtım). Veya mizanpajın güncellenmesi gerekiyorsa, bir .css dosyasındaki bir değişiklik yeterli olabilir.

Eğer hata 100+ sayfalık bir özelliğe sahip ve ispatın yanlış olduğu kritik bir yöntemin çıktısı ise, araştırmanın kendisi saatler ya da günler sürebilir. Eski 'aksiyomun' ifade ettiği şey budur ve diğer şeylerin yanı sıra TDD ve çevikten kaçınmaya çalıştığı şeydir (erken ve açıkça başarısız, güvenli artan ilerleme, yada).

Tek bir projede çok titizlikle çalışan ekiplerle ilgili son deneyimlerime göre, 'hatalar', genellikle özellik dallarının kararlı hale getirilmesinden dolayı bir sürümün sonunda ortaya çıkan birleştirme / entegrasyon sorunlarıdır. En kötüsü bunlar, takımlar kendi hedeflerini tamamlama telaşı içindeyken çatışmalar genellikle takımlar arası destek gerektiriyor, ancak meydana geldiklerinde meydana geldikleri gibi diğer böceklerden daha pahalı olduklarını bilmiyorum. Serbest bırakma, ancak en erken zamanda yapabilirler. Onları en kötü yapan şey budur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.