Czy metodologia testowania oprogramowania opiera się na błędnych danych?

45

Powszechnie wiadomo w inżynierii oprogramowania, że ​​koszt naprawy błędu rośnie wykładniczo w miarę wykrycia błędu. Potwierdzają to dane opublikowane w Code Complete i dostosowane w wielu innych publikacjach.

Okazuje się jednak, że te dane nigdy nie istniały . Dane cytowane przez Code Complete najwyraźniej nie pokazują takiej korelacji kosztów / czasu rozwoju, a podobne opublikowane tabele pokazały korelację tylko w niektórych szczególnych przypadkach i płaską krzywą w innych (tj. Brak wzrostu kosztów).

Czy istnieją niezależne dane, które mogłyby to potwierdzić lub obalić?

A jeśli to prawda (tzn. Jeśli po prostu nie ma danych na poparcie tego wykładniczo wyższego kosztu późno wykrytych błędów), jak wpływa to na metodologię tworzenia oprogramowania?

Konrad Rudolph
źródło
Brzmi to logicznie, ponieważ wykrycie błędu w większości przypadków wiąże się również z uszkodzeniem danych. Co więcej, posiadanie uszkodzonych danych kosztuje firmy dużo, jeśli odkryje to później w procesie naprawy błędu.
EL Yusubov,
8
@ElYusubov To prawda. Ale zdrowy rozsądek może być bardzo zwodniczy. Nasze umysły łatwo dają się zwieść pozornej logice, kiedy jest odwrotnie. Dlatego inżynieria oprogramowania oparta na dowodach jest tak ważna.
Konrad Rudolph,
2
Dla przypomnienia (i wspomnianego w mojej odpowiedzi) najwcześniejsza wzmianka o tym, jaką udało mi się znaleźć, była na długo przed ukończeniem Code Complete. Praca Fagana i Stephensona (niezależnie) z 1976 r. Jest najwcześniejszym odniesieniem do tego, co mogę znaleźć. Pierwsze wydanie Code Complete zostało opublikowane dopiero w 1993 roku, prawie 20 lat później. Spodziewałbym się, że praca Barry'ego Boehm'a w latach 80. doprowadziła do wzrostu popularności tego pomysłu - praca Boehm'a miała duży wpływ na proces inżynierii oprogramowania w latach 80., a nawet pod koniec 2000 r.
Thomas Owens
1
Aksjomatyczne jest, że każde stwierdzenie dotyczące statystyk inżynierii oprogramowania jest błędne, w tym również to. (Błędy, które znajdziesz później, są na ogół bardziej skomplikowanymi błędami. Naprawianie ich komplikuje bardziej „kontrola” wprowadzona w późniejszych okresach.)
Daniel R Hicks

Odpowiedzi:

25

Czy metodologia testowania oprogramowania opiera się na błędnych danych?

Tak, wyraźnie. Analiza krzywej zwinnego kosztu zmiany pokazuje, że część pracy Kenta Becka nad XP (nie jestem pewien, czy była to część jego motywacji, czy uzasadnienia) polegała na „spłaszczeniu krzywej” kosztów wad, w oparciu o wiedzę o „ krzywa wykładnicza ”leżąca za tabelą Code Complete. Tak więc, praca nad co najmniej jedną metodologią - tą, która najbardziej spopularyzowała tworzenie pierwszego testu - jest przynajmniej częściowo oparta na błędnych danych.

Czy istnieją niezależne dane, które mogłyby to potwierdzić lub obalić?

Tak, z pewnością są inne dane, na które możesz spojrzeć - największym badaniem, jakie znam, jest analiza wad przeprowadzona w Hughes Aircraft w ramach programu oceny CMM . Raport stamtąd pokazuje, w jaki sposób koszty defektów zależały od fazy dla nich : chociaż dane w tym raporcie nie zawierają odchyleń, więc musisz uważać na wyciąganie zbyt wielu wniosków „ta rzecz kosztuje więcej niż to”. Należy również zauważyć, że niezależnie od metodologii nastąpiły zmiany w narzędziach i technikach w latach 80. i dziś, które podważają zasadność tych danych.

Zakładając, że nadal mamy problem z uzasadnieniem tych liczb:

jak wpływa to na metodologię tworzenia oprogramowania?

Fakt, że polegamy na liczbach, których nie można zweryfikować, nie powstrzymał ludzi od robienia postępów na podstawie anegdot i doświadczenia: w ten sam sposób, w jaki uczy się wielu transakcji mistrz-uczeń. Nie wydaje mi się, żeby w średniowieczu istniał Journal of Evidence-Based Masonry , ale mimo to udało się zbudować całą masę dużych, imponujących i trwałych budynków z zauważalnym powodzeniem. Oznacza to, że naszą praktykę opieramy głównie na „tym, co zadziałało dla mnie lub ludzi, których spotkałem”; nic złego, ale być może nie najskuteczniejszy sposób na ulepszenie pola milionów ludzi, którzy stanowią kamień węgielny obecnego wieku technologicznego.

Rozczarowuje mnie to, że w tak zwanej dyscyplinie inżynieryjnej nie ma lepszych podstaw w empiryzmie i podejrzewam (choć wyraźnie nie mogę udowodnić), że moglibyśmy osiągnąć lepszy, wyraźniejszy postęp w ulepszaniu naszych technik i metodologii. ten fundament istnieje - tak jak wydaje się, że medycyna kliniczna została przekształcona przez praktykę opartą na dowodach. Opiera się to jednak na kilku dużych założeniach:

  • że zastrzeżony charakter większości praktyk inżynierii oprogramowania nie uniemożliwia gromadzenia wystarczającej liczby użytecznych i odpowiednich danych;
  • że wnioski wyciągnięte z tych danych mają ogólne zastosowanie (ponieważ inżynieria oprogramowania to zawód wykwalifikowany, osobiste różnice w doświadczeniu, umiejętnościach i smaku mogą mieć wpływ na taką możliwość);
  • inżynierowie oprogramowania „w terenie” są w stanie i zmotywowani do wykorzystania uzyskanych w ten sposób wyników; i
  • że tak naprawdę wiemy, jakie pytania powinniśmy zadać. Jest to oczywiście najważniejszy punkt tutaj: kiedy mówimy o ulepszaniu inżynierii oprogramowania, co chcemy poprawić? Jaki jest pomiar Czy poprawa tego pomiaru rzeczywiście poprawia wynik, czy też gra w system? Na przykład załóżmy, że kierownictwo mojej firmy zdecydowało, że zmniejszymy stosunek rzeczywistych kosztów projektu do przewidywanych kosztów projektu. Mógłbym po prostu zacząć pomnożyć wszystkie moje szacunki kosztów przez współczynnik krówki i osiągnąłem ten „cel”. Czy zatem powinno stać się standardową praktyką branżową fałszowanie wszystkich szacunków?

źródło
Niesamowita meta-odpowiedź na temat inżynierii opartej na dowodach. Dzięki.
Konrad Rudolph
4
Cholera, właśnie zdałem sobie sprawę, że to pochodzi prosto z pyska konia. Hehe Niesamowite.
Konrad Rudolph
1
Mam wrażenie, że każdy interpretuje użycie „wadliwych danych” jako „całkowicie nieprawdziwe, prawda jest odwrotna”, ale mam wrażenie, że twoja pozycja polega po prostu na wskazaniu, że może to być nieprawda. Czy to jest poprawne?
Daniel B
3
@DanielB Prawidłowo. Pokaż mi dowody, że tak naprawdę jest źle i że mogę zmienić zdanie; do tego czasu wiem tylko, że nie jest to wyraźnie słuszne.
1
@GrahamLee Rozumiem twój punkt widzenia (po prostu myśl, że frazowanie mogło być nieco niepotrzebnie agresywne). Z ciekawości znalazłem tutaj artykuł Fagana , w którym napisano: „… pozwala na przeróbkę… w pobliżu ich pochodzenia… 10 do 100 razy tańszy niż w ostatniej połowie procesu”. Nie widzę jednak żadnych cytatów w pobliżu tego tekstu.
Daniel B
8

Z mojej strony odpowiedź na „jak wpływa to na metodologię tworzenia oprogramowania” brzmi „niewiele”.

Niezależnie od tego, czy zostanie złapany przez programistę czy użytkownika końcowego, czy potrzeba więcej pieniędzy, aby go naprawić po złapaniu przez użytkownika, czy nie, pozostaje faktem, że w systemie znaleziono błąd. Mam nadzieję , że jeśli zostanie złapany przez programistę, jest to szybka naprawa. Ta sama nadzieja dotyczy błędów wykrytych przez użytkownika.

Niezależnie od faktycznych godzin pracy programisty na naprawienie błędu wykrytego przez użytkownika końcowego, istnieje niematerialny koszt utrzymania stereotypu, że koderzy są do niczego. Gdy użytkownik znajdzie błąd, jest to wina programisty. Dlatego każdy błąd znaleziony przez użytkownika końcowego zmniejsza zaufanie użytkownika do systemu. To jak zwiedzanie domu, który chcesz kupić, i zobaczenie plamy po wodzie, która widać przez sufit w jednym z rogów domu. To samo w sobie jest łatwym rozwiązaniem, ale zastanawiasz się, co go spowodowało i co jeszcze mogło mieć wpływ na tę pierwotną przyczynę. Ile wart jest twój spokój? Być może będziesz musiał zburzyć ściany z powrotem do kołków i wizualnie sprawdzić wszystko, aby upewnić się, że plama pochodzi z izolowanego incydentu, który został naprawiony. Świadomość, że może to być możliwe, nie sprawia, że ​​czujesz się pewnie w domu. Podobnie,

Te koszty niematerialne są unikane, im szybciej błąd zostanie wykryty, co jest deklarowanym celem metodologii w stylu TDD. Błąd wykryty podczas pisania przez programistę lub partnera w parze, jeden wykryty podczas kompilacji lub jeden wykryty podczas testów jednostkowych / integracyjnych (warstwa dodana przez TDD), jest błędem, o którym użytkownik nigdy nie musi wiedzieć, że twój kierownik projektu nigdy nie musi przepraszać i że nie musisz być odciągany od tego, co robisz w tej chwili, aby przełączyć bieg w tryb naprawy usterek w części systemu, o której myślałeś, że pozostawiłeś za sobą tygodnie temu.

KeithS
źródło
3
Ciekawa odpowiedź. Staram się, aby moi użytkownicy rozumieli, że programowanie jest procesem iteracyjnym lub zarówno udoskonalaniem, jak i ulepszaniem. Mogę dać im coś bardzo szybko, a jeśli znajdą problemy lub chcą ulepszeń, mogę je też bardzo szybko zmienić (minuty lub godziny, a nie dni lub tygodnie). System z czasem staje się bardziej stabilny, ale okazuje się, że ufają procesowi rozwoju i wynikowi końcowemu, a nie procesowi specyfikacji i pierwszej kompilacji. (oczywiście zależy od środowiska, w którym pracujesz - piszę aplikacje biznesowe, więc jeśli się zepsują, zostaną naprawione).
Kirk Broadhurst
Niestety, pierwotne dowody - że błędy wymagań wykryte podczas wystawiania produktu są droższe niż błędy implementacyjne wykryte podczas wystawiania produktu - implikują potrzebę lepszej weryfikacji, a nie lepszej weryfikacji. TDD - wykorzystanie testów do weryfikacji produktu pod kątem wymagań - po prostu nie ma znaczenia dla znalezienia tych błędów.
Pete Kirkham
6

Przedmówię to faktem, że większość tego, co znajduję, pochodzi z lat siedemdziesiątych i wczesnych osiemdziesiątych. W tym czasie sekwencyjne modele procesów były znacznie bardziej powszechne niż podejścia iteracyjne i / lub przyrostowe (model spiralny lub metody zwinne). Wiele z tych prac opiera się na tych modelach sekwencyjnych. Nie sądzę jednak, by niszczyło to związek, ale jedną z korzyści podejścia iteracyjnego / przyrostowego jest szybkie uwalnianie funkcji (całego pionowego wycinka aplikacji) i rozwiązywanie problemów przed wstrzyknięciem zależności i złożonością każdej fazy jest wysoko.


Właśnie wyciągnąłem kopię Software Engineering Economics i znalazłem odniesienie do danych zawartych w tym wykresie w rozdziale 4. Przytacza „Projektowanie i kontrole kodu w celu ograniczenia błędów w rozwoju programu” autorstwa ME Fagana ( IEEE , PDF z UMD ), EB Daly's „Management of Software Engineering”, WE Stephenson's „Analiza zasobów wykorzystywanych w programowaniu oprogramowania Safeguard System Software” ( ACM ) oraz „kilka projektów TRW”.

... względny koszt korekty błędów oprogramowania (lub wprowadzenia innych zmian oprogramowania) w zależności od fazy, w której dokonywane są poprawki lub zmiany. Jeśli błąd wymagań oprogramowania zostanie wykryty i skorygowany podczas fazy planów i wymagań, jego korekta jest względnie prostą kwestią aktualizacji specyfikacji wymagań. Jeśli ten sam błąd nie zostanie naprawiony do fazy konserwacji, korekta obejmuje znacznie większy spis specyfikacji, kodu, instrukcji obsługi i konserwacji oraz materiałów szkoleniowych.

Ponadto późne korekty obejmują o wiele bardziej formalny proces zatwierdzania i kontroli zmian oraz o wiele szersze działania mające na celu ponowne sprawdzenie poprawności. Czynniki te łącznie powodują, że błąd zazwyczaj jest 100 razy droższy do skorygowania w fazie konserwacji w dużych projektach niż w fazie wymagań.

Bohem przyjrzał się również dwóm mniejszym, mniej formalnym projektom i stwierdził wzrost kosztów, ale o wiele mniej znaczący niż 100-krotny wzrost zidentyfikowany w większych projektach. Biorąc pod uwagę tabelę, różnice wydają się 4 razy większe, aby naprawić wadę wymagań po uruchomieniu systemu niż w fazie wymagań. Przypisał to mniejszej inwentaryzacji elementów składających się na projekt i zmniejszonej formalności, która doprowadziła do możliwości szybszego wdrożenia prostszego rozwiązania.

Oparta na Boehm in Software Engineering Economics, tabela w Code Complete jest raczej rozdęta (dolna granica zakresów jest często zbyt wysoka). Koszt wprowadzenia jakiejkolwiek zmiany w fazie wynosi rzeczywiście 1. Ekstrapolując z rysunku 4-2 w Software Engineering Economics, zmiana wymagań powinna wynosić 1,5-2,5 razy w architekturze, 2,5-10 w kodowaniu, 4-20 w testowaniu i 4 100 w konserwacji. Kwota zależy od wielkości i złożoności projektu, a także formalności zastosowanego procesu.


W załączniku E do Barry Boehm i Richarda Turnera Balansująca zwinność i dyscyplina zawiera niewielką część na temat empirycznych ustaleń dotyczących kosztu zmiany.

Pierwsze akapity cytują Extreme Programming Kent wyjaśnił, cytując Becka. Mówi, że jeśli koszty zmian rosną powoli w miarę upływu czasu, decyzje byłyby podejmowane możliwie późno i wdrażane byłyby tylko to, co było potrzebne. Nazywa się to „płaską krzywą” i to właśnie napędza programowanie ekstremalne. Jednak poprzednią literaturą była „stroma krzywa”, przy małych systemach (<5 KSLOC) o zmianie 5: 1 i dużych systemach o zmianie 100: 1.

Sekcja cytuje Centrum Inżynierii Oprogramowania na Uniwersytecie Maryland (sponsorowane przez National Science Foundation). Przeszukali dostępną literaturę i stwierdzili, że wyniki zwykle potwierdzają stosunek 100: 1, a niektóre wyniki wskazują na zakres od 70: 1 do 125: 1. Niestety były to zazwyczaj projekty „dużego projektu z góry”, którymi zarządzano w sposób sekwencyjny.

Istnieją przykłady „małych komercyjnych projektów Java” uruchamianych za pomocą Extreme Programming. Dla każdej historii śledzono wysiłek związany z naprawianiem błędów, nowym projektem i refaktoryzacją. Dane pokazują, że wraz z rozwojem systemu (wdrażanie kolejnych historii użytkowników) średni wysiłek zwykle rośnie w nie-trywialnym tempie. Wysiłek w refaktoryzacji wzrasta o około 5%, a wysiłki w kierunku ustalania nakładów - o około 4%.

Uczę się, że złożoność systemu odgrywa ogromną rolę w wymaganym nakładzie pracy. Budując pionowe przekroje przez system, spowalniasz tempo krzywej, powoli dodając złożoność zamiast dodając ją w stosy. Zamiast zajmować się masą złożoności wymagań, a następnie niezwykle złożoną architekturą, a następnie niezwykle złożoną implementacją itd., Zaczynasz bardzo prosto i dodajesz.

Jaki to ma wpływ na koszt naprawy? W końcu może niewiele. Ma jednak tę zaletę, że pozwala na większą kontrolę nad złożonością (poprzez zarządzanie długiem technicznym). Ponadto częste rezultaty często kojarzone z agile oznaczają, że projekt może zakończyć się wcześniej - zamiast dostarczać „system”, części są dostarczane do momentu zaspokojenia potrzeb biznesowych lub drastycznej zmiany w stosunku do nowego systemu (a zatem nowego projektu) jest potrzebne.


Metryki i modele Stephena Kana w inżynierii jakości oprogramowania mają rozdział w rozdziale 6 na temat opłacalności usuwania wad fazowych.

Zaczyna od cytowania artykułu Fagana z 1976 r. (Cytowanego także w Software Engineering Economics), aby stwierdzić, że przeróbki wykonane w projektowaniu wysokiego poziomu (architektura systemu), projektowaniu niskiego poziomu (projektowanie szczegółowe), a wdrożenie może być od 10 do 100 razy tańsze niż praca wykonana podczas testowania na poziomie komponentów i systemu.

Przytacza także dwie publikacje Freedmana i Weinberga z 1982 i 1984 r., Które omawiają duże systemy. Pierwszy to „Podręcznik solucji, inspekcji i przeglądów technicznych”, a drugi to „Recenzje, solucje i inspekcje”. Zastosowanie recenzji na wczesnym etapie cyklu programowania może zmniejszyć liczbę błędów, które docierają do faz testowania 10-krotnie. To zmniejszenie liczby wad prowadzi do obniżenia kosztów testowania o 50% do 80%. Musiałbym przeczytać badania bardziej szczegółowo, ale wydaje się, że koszt obejmuje również znalezienie i naprawę wad.

W badaniu z 1983 r. Przeprowadzonym przez Remusa, „Integrated Software Validation in View of Inspections / Review”, przeanalizowano koszty usuwania defektów na różnych etapach, w szczególności kontroli projektu / kodu, testów i konserwacji, z wykorzystaniem danych z Santa Teresa Laboratory IBM w Kalifornii. Cytowane wyniki wskazują na stosunek kosztów w wysokości 1:20:82. Oznacza to, że defekt wykryty podczas inspekcji projektu lub kodu ma koszt zmiany wynoszący 1. Jeśli ta sama defekt ucieknie do testowania, będzie kosztować 20 razy więcej. Jeśli ucieknie aż do użytkownika, podwoi koszt naprawy do 82. Kan, korzystając z przykładowych danych z firmy Rochester w Minnessocie, stwierdził, że koszt usunięcia defektu dla projektu AS / 400 jest podobny o 1:13:92. Wskazuje jednak, że wzrost kosztów może wynikać ze zwiększonej trudności ze znalezieniem usterki.

Wspomniane są publikacje Gilba z 1993 r. ( „Kontrola oprogramowania” ) i 1999 („Optymalizacja specyfikacji inżynierii oprogramowania i procesów kontroli jakości”) dotyczące kontroli oprogramowania w celu potwierdzenia innych badań.


Dodatkowe informacje można znaleźć na stronie Construx w temacie Wzrost kosztów defektów , który zawiera szereg odniesień do wzrostu kosztów naprawy defektów. Należy zauważyć, że Steve McConnell, autor Code Complete, założył i pracuje dla Construx.


Niedawno wysłuchałem przemówienia Real Software Engineering , wygłoszonego przez Glenna Vanderburga na konferencji Lone Star Ruby Conference w 2010 roku. Wygłosił to samo wystąpienie na szkockiej konferencji Ruby Conference i Erubycon w 2011 roku, QCon San Francisco w 2012 roku i O'Reilly Software Architecture Conference w 2015 r . Słuchałem tylko Konferencji Rubinowej Lone Star, ale rozmowa ewoluowała z czasem, gdy jego pomysły zostały dopracowane.

Venderburg sugeruje, że wszystkie te dane historyczne faktycznie pokazują koszt naprawy wad w miarę upływu czasu, niekoniecznie w miarę, jak projekt przechodzi przez kolejne fazy. Wiele projektów zbadanych we wspomnianych wcześniej artykułach i książkach było sekwencyjnymi projektami „wodospadu”, w których faza i czas poruszały się razem. Jednak podobny wzór pojawiłby się w projektach iteracyjnych i przyrostowych - jeśli defekt zostałby wstrzyknięty podczas jednej iteracji, naprawienie tej iteracji byłoby stosunkowo niedrogie. Jednak w miarę postępu iteracji dzieje się wiele rzeczy - oprogramowanie staje się bardziej złożone, ludzie zapominają o drobnych szczegółach dotyczących pracy w poszczególnych modułach lub częściach kodu, zmieniają się wymagania. Wszystko to zwiększy koszt naprawy wady.

Myślę, że jest to prawdopodobnie bliższe rzeczywistości. W projekcie wodospadu koszt wzrasta ze względu na liczbę artefaktów, które należy poprawić z powodu problemu z prądem. W projektach iteracyjnych i przyrostowych koszty rosną z powodu wzrostu złożoności oprogramowania.

Thomas Owens
źródło
@AndresF. jednym z problemów, które znalazłem podczas śledzenia tych cytatów, jest to, co Bossavit opisał jako problem „igły w stogu siana” w książce, z którą się łączyłeś. Powoływanie się na książkę jest świetnym zaciemnieniem - nawet jeśli nadal jest drukowane, gdy idziesz czytać cytat, masz kilkaset stron do przeczytania w poszukiwaniu małego samorodka, który popiera twierdzenie autora cytowania.
3

To po prostu prosta logika.

Błąd wykryty w specyfikacji.

Case : Error found while reviewing UseCase/Function spec.
Actions:
        Rewrite paragraph in error.

Case : Error found during unit test.
Actions:
        Fix code.
        (Possibly) rewrite paragraph in spec.
        rerun unit test.

Case : Error found in integration test.
        Fix code.
        (possibly) rewrite paragraph in spec.
        rerun unit test.
        build new release.
        rerun integration test for whole system.

Case : Error found in UAT
        Fix code.
        (possibly) rewrite paragraph in spec.
        rerun unit test.
        build new release.
        rerun integration test for whole system.
        deploy release to UAT.
        rerun UAT tests.


Case : Error found in production
        Fix code.
        (possibly) rewrite paragraph in spec.
        rerun unit test.
        Build release.
        rerun integration test for whole system.
        deploy release to UAT.
        rerun UAT tests.
        deploy release to production.

Jak widać, im później błąd zostanie wykryty, im więcej osób będzie zaangażowanych, tym więcej pracy trzeba wykonać ponownie, aw każdym „normalnym” środowisku praca papierkowa i biurokracja gwałtownie rosną po uderzeniu w UAT.

To wszystko bez uwzględnienia kosztów, jakie firma może ponieść z powodu błędu w oprogramowaniu produkcyjnym (utrata sprzedaży, nadmierne zamawianie, włamanie do klientów itp.)

Nie sądzę, aby ktokolwiek kiedykolwiek napisał nietrywialny system, który nigdy nie miał błędów w produkcji, ale wszystko, co możesz zrobić, aby wcześnie wykryć błędy, zaoszczędzi ci czasu i wysiłku na dłuższą metę. Przeglądy specyfikacji, recenzje kodu, obszerne testy jednostkowe, używanie różnych koderów do pisania testów itp. Itd. To sprawdzone metody wczesnego wykrywania błędów.

James Anderson
źródło
2
Dotyczy to tylko jednego przypadku: błąd wykryty w specyfikacji, tj. Błąd wprowadzany na samym początku. Ale błędy mogą być wprowadzane na wszystkich etapach rozwoju (w tym naprawianie błędów po wdrożeniu), a usuwanie tych błędów będzie znacznie łatwiejsze, ponieważ prawdopodobnie wpłyną one na mniejszą część systemu.
Konrad Rudolph,
2
Problem polega jednak na tym, że poprawki błędów mogą mieć nieoczekiwane skutki uboczne, więc jeśli nie można absolutnie zagwarantować, że poprawka wpłynie tylko na określony podzespół, utkniesz przy ponownym wprowadzaniu SIT UAT itp. Również ślad papieru pozostaje równie uciążliwy, bez względu na to, jak mały jest zmiana.
James Anderson
2
Nadal nie jestem przekonany, że pokazuje to, że błędy zawsze będą droższe, gdy zostaną wykryte późno. Twierdziłbym, że błąd staje się droższy do naprawy z upływem czasu po jego wprowadzeniu . Tzn. Błąd wprowadzony późno, wykryty wkrótce i naprawiony jest tańszy niż błąd wprowadzony bardzo wcześnie i wykryty wcześnie (ale z dłuższym opóźnieniem niż w pierwszym przypadku). Przynajmniej mogłem sobie wyobrazić, że tak to działa.
Konrad Rudolph,
@KonradRudolph Czy mógłbyś opracować? Ten post jest również moim rozumieniem i nie rozumiem, dlaczego czas miałby mieć znaczenie, ale faza nie. Dla mnie miarą czasu w projekcie jest twoja bieżąca faza (a czasem twoja iteracja timeboxowana, aby przejść przez wszystkie fazy). Nie widzę różnicy między pracą wykonaną w Dniu 3 szczegółowego projektu a Dniem 300 - produkt do szczegółowego projektu nie został użyty do wytworzenia żadnych innych produktów, więc wada wprowadzona do szczegółowego projektu istnieje tylko w jednym miejscu i tylko wymaga zmiany. Nie rozumiem, jak ważny jest upływ dni.
Thomas Owens
3
@Thomas Jestem tylko hipotezą. Ale czas ma znaczenie, ponieważ większość wprowadzonych elementów kodu lub specyfikacji będzie wpływać na kolejne komponenty w miarę upływu czasu, chyba że będą one wysoce wyspecjalizowane i nic innego nie będzie od nich zależeć, bezpośrednio ani pośrednio. Tak więc błąd, który będzie obecny przez długi czas, niezależnie od fazy, w której został wprowadzony, potencjalnie wpłynie na wiele części systemu, a jego usunięcie wymaga upewnienia się, że żaden inny komponent nie zostanie uszkodzony przez ten proces.
Konrad Rudolph,
2

Wierzę, że dotyczy to i zawsze było związane z zarządzaniem ryzykiem i ekonomią. Jaki jest koszt zmniejszenia liczby wad w stosunku do bieżącej wartości wpływu przyszłych wad. Trajektoria żółtego ptaka znajdującego się nieco w Angry Birds nie jest równa trajektorii lotu rakiety Tomahawk podczas lotu. Twórcy oprogramowania w obu projektach nie mogą podejmować decyzji na podstawie tej tabeli. Pod tym względem nic się nie zmienia.

Myślę, że to działa w oparciu o informacje zwrotne, drogie błędy w terenie powodują, że firmy zaostrzają swoje procesy jakościowe, a brak skarg z zewnątrz powoduje, że firmy je rozluźniają. W miarę upływu czasu firmy opracowujące oprogramowanie będą dążyć do zbieżności lub oscylacji wokół czegoś, co działa dla nich (+/-). Kod Complete może wpływać na niektóre wartości początkowe lub może pociągać firmy w taki czy inny sposób. Firma, która poświęca zbyt wiele wysiłku na usuwanie wad, których nikt by nie zauważył, prawdopodobnie straci biznes dla konkurenta, który ma bardziej zoptymalizowane podejście. Z drugiej strony firma wypuszczająca produkty buggy również przestanie działać.

Kilka istotnych artykułów z szybkiego wyszukiwania (przeczytaj pełne artykuły, zrób więcej badań i sformułuj własną opinię):

Systematyczny przegląd literatury dotyczący badania kosztów jakości oprogramowania (2011)

„Chociaż społeczność opracowała w ten sposób solidne zrozumienie struktury dziedziny badawczej, często brakuje empirycznej weryfikacji. Tylko około jedna trzecia analizowanych artykułów przedstawia studium przypadku lub bardziej obszerne wyniki empiryczne. Wydaje się to niewystarczające do badania kosztów jakości oprogramowania , który silnie opiera się na danych ilościowych w celu wygenerowania nowych ustaleń. Istnieje zatem potrzeba nowatorskich podejść do gromadzenia danych o wysokiej jakości, a także ściślejszej współpracy między przemysłem a badaniami w celu udostępnienia takich danych ”.

Ocena kosztu jakości oprogramowania (1998)

„Wreszcie zauważyliśmy, że ważne jest monitorowanie kosztów zgodności oprogramowania i kosztów niezgodności, aby można było dostosować zasady zgodności w celu zmniejszenia całkowitych kosztów jakości oprogramowania”.

Zachowanie kosztowe wad oprogramowania (2004)

Streszczenie ... „Obecne badania próbują zaktualizować naszą wiedzę o sposobie, w jaki defekty i koszt ich naprawy (lub alternatywnie pozostawienie ich nieskorygowanych) wpływają na końcowy koszt oprogramowania„ ... ”nieskorygowane defekty stają się wykładniczo bardziej kosztowne z każdą fazą, w której są nierozwiązane ”

Pokrycie testowe i wady po weryfikacji: wielokrotne studium przypadku (2009)

„Stwierdzamy również, że wysiłek testowy rośnie wykładniczo wraz z pokryciem testowym, ale zmniejszenie problemów w terenie wzrasta liniowo wraz z pokryciem testowym. Sugeruje to, że w przypadku większości projektów optymalne poziomy pokrycia mogą być znacznie niższe niż 100%”.

Wypełnij lukę między procesem testowania oprogramowania a wartością biznesową: studium przypadku (2009)

Guy Sirton
źródło
0

Nie mogę odpowiedzieć na pierwszą część pytania, ponieważ po prostu tego nie sprawdziłem. Ale mogę sformułować odpowiedź na twoje drugie pytanie i być może wskazać możliwą odpowiedź na pierwsze.

Nie trzeba dodawać, że niektóre najważniejsze czynniki związane z kosztem naprawy błędu, wykluczające wewnętrznie trudne w użyciu narzędzia programistyczne, to wewnętrzna złożoność produktu i to, jak dobrze użytkownik może go zrozumieć.

Koncentrując się na sekundę na kodzie, przy założeniu, że kod jest zwykle pisany i utrzymywany przez programistów zdolnych do radzenia sobie z wewnętrzną złożonością ich kodu (co może nie być do końca prawdą i może zasługiwać na własną debatę), odważyłbym się zasugerować, że kluczowe znaczenie w konserwacji, a tym samym w naprawianiu błędów, to zdolność opiekunów do zrozumienia wspomnianego kodu.

Zdolność rozumienia kodu jest znacznie zwiększona dzięki zastosowaniu sprawdzonych narzędzi inżynierii oprogramowania, które są niestety najczęściej niedostatecznie lub niewłaściwie używane. Zastosowanie odpowiedniego poziomu abstrakcji, modułowości, zwiększenie spójności modułu i zmniejszenie sprzężenia modułów są kluczowymi narzędziami w radzeniu sobie ze złożonością, która wymaga właściwego użycia. Kodowanie do interfejsów lub, w OOP, unikanie nadmiernego wykorzystania dziedziczenia nad kompozycją, pakowanie według cech, to niektóre z technik, którym często przypisuje się niewystarczającą uwagę w kodowaniu.

Uważam, że realia konkurencji w branży negatywnie wpływają na stosowanie metod zwiększania jakości w tworzeniu oprogramowania, utrzymując niską jakość oprogramowania jako miernik ciągłego sukcesu.

W związku z tym uważam, że w branży oprogramowanie jest bardziej narażone na koszty naprawiania błędów, im większy rośnie. W takich produktach błędy z czasem stają się trudniejsze do usunięcia, ponieważ system staje się trudniejszy do zrozumienia wraz z rozwojem. Obawy wprowadzone przez każdą funkcję są nadmiernie połączone z innymi problemami, co utrudnia zrozumienie. Lub nie zastosowano odpowiedniego poziomu abstrakcji, co utrudnia opiekunowi sformułowanie odpowiedniego modelu systemu i uzasadnienie tego. Brak dokumentacji z pewnością nie pomaga.

Istnieją wyjątki. Jestem pewien, że Google nie działa w swoim tempie bez solidnych praktyk popartych przez gwiezdnych programistów. Inni prawdopodobnie znajdują się w tej samej sytuacji. Ale dla większości oprogramowania, nie będę zaskoczony, jeśli dane nie faktycznie potwierdzają twierdzenie w Kodeksie pełna .

Mihai Danila
źródło
Podtrzymuję swoją odpowiedź nawet przy negatywnej ocenie. Niedawno przeprowadziłem wywiad z kandydatem, który utrzymuje narzędzie do bankowości internetowej jednego z najlepszych banków. Podczas zwykłego czatu sugerował, aby go nie używać, ze względu na duże ponowne użycie wklejania kopii i w inny sposób tandetną strukturę. W poprzednim zadaniu byłem programistą w firmie, pisząc narzędzia analityczne dla banków takich jak Lehman, MS, UBS, i musieliśmy działać jako eksperci w dziedzinie, wymyślając kolejną rzecz, którą należy umieścić w innym oddziale z co najmniej rzadkiej dokumentacji. Nawet jeśli nie zgadzają się z konkretnymi praktykami, ogólny przekaz dotyczący przemysłu jest prawdziwy.
Mihai Danila,
-1

Kolejna odpowiedź! Tym razem, aby odpowiedzieć na tytułowe pytanie „Czy morhtodoligia oprogramowania opiera się na błędnych danych”.

Prawdziwa odpowiedź brzmi: „nie ma danych”. Ponieważ nie ma dużego, wiarygodnego zbioru danych o projektach oprogramowania, wady, sukces na rynku itp.

Wszystkie próby gromadzenia takich danych były niedofinansowane, statystycznie błędne lub ,, tak specyficzne dla konkretnego projektu, że nie można wyciągnąć ogólnych wniosków.

Co więcej, nie sądzę, żeby kiedykolwiek tak się stało, proces tworzenia oprogramowania jest zbyt subiektywny i śliski dla ścisłego pomiaru. Organizacje, które najlepiej potrafią gromadzić takie dane (duże domy oprogramowania i integratorzy systemów) wiedzą w swoich sercach, że wszelkie liczby zebrane z ich działalności byłyby głęboko zawstydzające.

Jedynymi organizacjami, które publikują liczby na temat kosztów i powodzenia projektów oprogramowania,
są departamenty rządowe i tylko dlatego, że muszą, i tak, liczby te są głęboko zawstydzające, bez względu na to, jak bardzo masują liczby.

Podsumowując, wszystkie badania oprogramowania są z konieczności czysto subiektywne, ponieważ nie ma rzeczywistych danych, na których można by oprzeć obiektywne wnioski.

James Anderson
źródło
1
Nie, nie kupuję tego. Po pierwsze, nie jest dane, chociaż może mieć rację, że to błędna. Wymaga to jednak indywidualnej krytyki każdego zestawu danych, a nie ogólnej rezygnacji. Jestem głęboko podejrzliwy wobec twierdzenia, że ​​nigdy nie będzie danych, i z takich powodów, jak „to zbyt subiektywne”. Jest to zasadniczo argument braku wyobraźni . Nie udaję, że gromadzenie wiarygodnych statystyk tutaj jest łatwe, ale twierdzę, że jest to całkowicie wykonalne. W innych dziedzinach z powodzeniem analizowane są znacznie bardziej skomplikowane systemy.
Konrad Rudolph,
@Konrad - weź coś podstawowego i prostego, na przykład „liczbę defektów”, niektóre sklepy zliczają błędy testów jednostkowych, niektóre sklepy nie zaczynają śledzić defektów aż do UAT, niektóre sklepy tylko śledzą defekty w kodzie, niektóre sklepy zawierają dokumentację, konfigurację i skrypty wdrażania w procesie śledzenia defektów. Czy niewłaściwy kolor tła liczy się jako wada? Niektóre projekty będą go śledzić jako wadę, inne będą go ignorować.
James Anderson
Są to wszystkie problemy parafialne - to znaczy możliwe do rozwiązania. Nie nakładają podstawowych ograniczeń na to, co jest możliwe, po prostu dodają trudności, które wymagają rozwiązania.
Konrad Rudolph