“Wydobycie Decyzje, Dalsi Koszty”


Original: http://www.stevemcconnell.com/articles/art08.htm

Copyright: Steve Macconnell

“Jak myślisz, wersja 3.0 będzie?” Kim poprosił zebranych członków zespołu projektowego. Ona została przypisana prowadzić ważne uaktualnienie do programu arkusza kalkulacyjnego podpisu Square-Calc, Square-Tech. Square-Calc 3,0 użyłby Square-Calc 2.5 ‘s bazy kodu jako wypadową dla serii wielkich ulepszeń.

“Po sprawdzeniu poszczególnych funkcji ostrożnie,” José powiedział. “To wygląda na to, że to trwa około 6 miesięcy dla naszego 4-osobowego zespołu rozwoju w celu wdrożenia tej funkcjonalności od podstaw. I nie był zaangażowany w wersji 2,5, a ja nie miałem okazji, aby spojrzeć na bazie kodu, ale z punktu widzenia użytkownika, produkt wygląda całkiem dobrze, więc myślę, że 6 miesięcy to bezpieczny szacunek. ”

“Nie chciałbym być zbyt pewni, że” powiedział George. George był starszy programista, który pracował nad kilkoma projektami Square-Tech. “I nie działa na Square-Calc 2.5, ale wiem, że ten zespół miał problemy. Programista kontrakt, który był odpowiedzialny za aktualizacje graficznych dostarczonych jego kod 2 miesiące późno. Następnie zespół miał problemy integracji jego kod z resztą kodeksu, i zajęło kolejny miesiąc stabilizacji oprogramowania. Wydali dobry produkt, ale nie wiem, co się stanie, gdy zaczniemy zmiany kodu. Jeśli zajęłoby 6 miesięcy w celu wdrożenia w wersji 3.0 funkcje od podstaw , chciałbym zapewnić co najmniej 8 miesięcy, aby dodać te same funkcje do istniejącego kodu base-zwłaszcza, że ​​nikt z nas nie pracował na wersji 2.5. ”

“Powiem szefowi, że potrzebujemy co najmniej 6 miesięcy, ale że powinien być przygotowany do przyjęcia 2-miesiące przekroczenia,” Kim powiedział. “Jak chcesz, aby kontynuować specyfikacji wymagań i projektu?”

“Firma jest na tej ziemi przed,” Bob, trzeci deweloper, powiedział. “Myślę, że wszyscy mamy dość dobry pomysł, co program powinien wyglądać. Ja nie widzę sensu tracić czasu na ogromnym, dokumentu biurokratycznych wymogów.”

“To jest OK ze mną, José powiedział.” Kiedyś do pracy w wojskowych projektów oprogramowania, a te rząd specyfikacji znajdują się: całkowita strata czasu. Miejmy tylko stworzyć listę kontrolną cech i wdrożenie oprogramowania w oparciu o listy. ”

“Myślę, że formalna konstrukcja jest tak bezużyteczny jako wymogi formalne,” powiedział Bob. “Wszyscy wiemy, co robimy. Możemy tylko Noodle kilka pomysłów wokół na tablicy. Myślę, że będzie dobry.”

“Brzmi dobrze,” José powiedział.

“OK,” Kim powiedział. “Chodźmy do pracy.”

Członkowie zespołu zdecydował wcześniej, że muszą poczynić szybkie postępy w celu uzyskania wyższej kadry zarządzającej zaufanie, więc kodowane garść najprostszych funkcji w pierwszej kolejności. Niektóre funkcje trwało nieco dłużej niż oczekiwano, ale one przypisane, że do nauki pracy z nieznanym kodzie. Zrobili swoje pierwsze wewnętrzne uwolnienie 2 miesięcy do 6 miesięcy ich harmonogramu, a następnie rozpoczął pracę na funkcji meatier.

José odwrócił pierwszy dodając dwa nowe wykresy. Po pracy na kilka tygodni, zespół spotkał się stanie. José zgłaszane napotykają kilka problemów. “Kod grafiki jest naprawdę niestabilny,” powiedział. “Robię co mogę z nim, ale to powoli idzie. I nie wydają się dodać jakieś nowe wykresy bez zerwania wszystkich istniejących wykresów. Że wykonawca Kod z wersji 2,5 jest straszne. Nie wynika z projektu kodowania konwencje, a ja nie wiem, jak oni kiedykolwiek dostał większość z nich do pracy w ogóle. ” Bob i George poinformował, że kod pracowali na mniej problematyczny, a oni robi postępy.

“Po prostu zobaczyć, jak pracuje się trochę dłużej,” Kim powiedział José. “Jeśli biec do problemów, Bob czy George może ci pomóc.”

Kilka tygodni później, zespół spotkał się ponownie. “Używam do nawet więcej problemów niż wcześniej” José zgłaszane. “Wydaje się, że za każdym razem to naprawić jeden błąd w tym starym kodem graficznym, I odkryć dwa lub trzy więcej. Myślę, że cały silnik graficzny musi być zapisane.”

“Bob, możesz poświęcić trochę czasu, aby pomóc Jose?” Kim zapytała.

“Używam do problemów sobie,” powiedział Bob. “Pracuję w sprawie przyspieszenia silnika przeliczenia arkusza kalkulacyjnego. Myślałem podejście wybrałem będzie działać, ale Zabrakło mi wada w mojej konstrukcji, i muszę przepisać spory kawałek, co już zakodowane “.

“Jak o tobie George?”

“Robiłem własne prace projektowe, jak przejść dalej,” George powiedział: “więc nie napotkasz żadnych większych problemów. Jednak pracując z tym starym kodem jest trudne. Kod jest bardzo kruche, więc trzeba uczynić moje zmiany ostrożnie. Istnieją squirrelly obejścia, że ​​wersja 2,5 zespół wykorzystywane do włamywania integrację z tym wykonawcy kodu graficznego. Gdy José zmienia, że ​​kod, trzymam konieczności zmiany mojego kodu. Nie sądzę, że robię postępy wystarczająco szybko, aby być w stanie pomóc Jose. ”

“OK, będziemy trzymać przypisania, ponieważ są one” Kim zdecydowała.

Ponieważ projekt nosił na, twórcy stwierdzili, że wzór powolnego postępu nie zmienia. José ostatecznie zrobił przepisać podsystemu graficznego i przeprojektowanie tego kodu spowodowane George przepisać wiele interfejsów do kodu, że został pracuje. Praca Boba na silniku przeliczenia nadąża z grubsza prac graficznych José, i zespół osiągnął swój fabularny pełny etap po 9 miesiącach. W tym momencie, dział marketingu recenzja oprogramowanie i znaleźć kilka “istotne” cechy, które nie zostały uwzględnione. Deweloperzy spędzili 2 więcej miesiąc dodanie tych możliwości. Deweloperzy potrzebne 2 miesiące po tym, aby ustabilizować oprogramowania, i wreszcie wydany Square-Tech 3,0 po 13 miesiącach.

Jak szybko można pływać pod prąd?

Chociaż Square-Calc studium przypadku jest fikcyjna, ogólny wzór jest jeden, który był powtarzany wiele razy. Zespoły programistów skróty na początku projektu, aby zaoszczędzić czas, a na końcu te skróty wrócić prześladować zarówno bieżącą zespołu projektowego i zespołów projektowych na temat przyszłych projektów, które starają się rozszerzyć te projekty i kodu.

Będziesz czasami słychać doświadczonych programistów mówić o “oddolnych” i “odgórnych” części projektu oprogramowania. Słowo “upstream” odnosi się do początku części projektu i “dół” odnosi się do w dalszej części. Znalazłem to rozróżnienie między “przed” i “dół”, aby być całkowicie skuteczny sposób, aby myśleć o projektów oprogramowania. Twórcy prac wykonać na początku projektu wpada do dalszej części projektu. Dobry wczesne prace ustawia projekt dla delikatnego pływaka przez spokojnych wodach downstream. Zły jakość pracy ustawia projekt dla bijatyką podróż przez skaliste downstream Whitewater.

Barry Boehm i Philip Papaccio że błąd stworzony na początku projektu, na przykład podczas specyfikacji wymagań i architektury, kosztuje od 50 do 200 razy tyle późno, aby poprawić w projekcie, jak do skorygowania blisko punktu, w którym został utworzony . Rysunek 1 przedstawia ten efekt.

Rysunek 1.

Wzrost kosztów ubytku jako czas między tworzenia defektów i zwiększenie korekcji wad. Efektywna praktyka projekty “powstrzymywanie faza”-wykrywanie i usuwanie usterek w tej samej fazie są one tworzone.

Dlaczego są błędy o wiele bardziej kosztowne rozwiązania niższego szczebla? Jedno zdanie w specyfikacji wymagań może łatwo przekształcić się w kilku schematów konstrukcyjnych. Później w projekcie, te schematy, może prowadzić do setek linii kodu źródłowego, dziesiątki testów, wiele stron dokumentacji dla użytkownika końcowego, ekrany pomocy, instrukcje personelu wsparcia technicznego, i tak dalej.

Jeśli zespół projektowy ma okazję do poprawienia błędu w czasie wymagania, gdy tylko prace, które zostały wykonane jest stworzenie jednego zdania rachunku wymogów, będzie to mądry, aby skorygować jedno zdanie, zamiast czekać, aż również musi poprawić wszystkie różne przejawy z wymogów downstream problemowych. Pomysł ten jest czasem nazywany “powstrzymywanie moon”, który odnosi się do wykrywania i korygowania wad w tej samej fazie, w której są one stworzone.

Nauka pływania

Square-Calc team 3,0 padł ofiarą poważnej upstream problemu: Nie wykonuje działalności wydobywczej rozwoju wymagań i projektowania, co oznaczało, że nie daje sobie możliwość wykrywania i poprawiania upstream problemy tanio. To może rozwiązać problemy tylko w dół rzeki, w trakcie kodowania, i tylko wielkim kosztem.

Dobrze zarządzany projektów oprogramowania wykorzenić problemy na początku. Tworzą możliwości skorygowania upstream problemy. Rozwijają się one i opisz swoje wymagania dokładnie skorygować jak wiele wymagań problemów, jak się da “w fazie”. Rozwijają i przeglądu swoich projektów z opieki tylko tyle. W studium przypadku, Bob nie powinien przez kilka tygodni pisania nowego kodu na Przelicz silnika przed odkryciem wadę konstrukcyjną. Że wada powinna zostać skorygowana tanio podczas upstream przeglądu projektu.

Ponieważ kod nie jest generowany gdy te działalności wydobywczej prowadzone są działania te mogą się wydawać jakby opóźniają “prawdziwą pracę” projektu. W studium przypadku, Bob był chętny, aby rozpocząć kodowanie. Pokusa, aby rozpocząć kodowanie przed gwoździ wymogi lub myślenia poprzez wysokie wzorów poziomu jest silna pokusa dla programistów, którzy korzystają z kodowania (w tym mnie). Ale działalności wydobywczej rozwoju wymagań i projektowania nie zwlekaj projektu; położyli podwaliny dla powodzenia projektu, i nie powinien być skracany.

Możesz martwić się o błądzących po stronie spędzać zbyt dużo czasu w pracy i zwiększenia wydobycia tego projektu napowietrznych. To jest niewielkie ryzyko, ale bardzo niewiele projektów błądzić po tej stronie. Bardziej poważne ryzyko błądzących z boku za mało pracy, który pozwala upstream wady prześlizgnąć się przez które muszą być usuwane przy 50 do 200 razy koszt ich usunięcia wcześniej. Smart Money błądzi po stronie zbyt dużo upstream pracy niż za mało.

Ratunkowe dla projektów alimentacyjnych

Zespoły projektowe tworzenie oprogramowania pod presją harmonogramu, która prowadzi ich do podjęcia skróty i produkują niskiej jakości konstrukcja i podstaw kodu. Kiedy zespół projektu ostatecznie stabilizuje oprogramowania na tyle, aby go zwolnić, członkowie zespołu dźwignąć ogromne westchnienia ulgi i krzyżują palce, mając nadzieję, że następny projekt będzie działać lepiej.

Kolejny projekt rzadko działa lepiej. Mimo że zespół projektu wie, że stare wzory i kodu są chwiejne, z powodu presji, aby zwolnić na czas modernizacji będzie nadal budować kolejną wersję swojego produktu na tym niepewnym fundamencie. Projekt płaci wysoką cenę za korzystanie z tej poprzedniej projektu kod niskiej jakości. Nowo dodany kod będzie wystawiać wady ukryte w starym kodem, który musi zostać skorygowana. Debugowanie jest czasochłonne, ponieważ nowe błędy mogą wynikać z zarówno nowym kodem i niskiej jakości kodu starego. Jako Mount problemy, zespół projektu uświadamia sobie, że pojęcie używania słabą bazę kodu jakości wspierać szybki rozwój jest okrutny żart, w rzeczywistości robi, że poważnie hobbles zespołu projektu zdolność do rozszerzenia swojego oprogramowania i ostatecznie opóźnia oprogramowania w dostawie. José może mieć rację, że wdrożenie Square-Calc 3.0 “funkcjonalność s od podstaw zajmie tylko 6 miesięcy, ale jej realizacji w kontekście Square-Calc 2.5 ‘s istniejącej niskiej jakości bazy kodu trwało znacznie dłużej.

Deweloperzy utrzymanie kod niskiej jakości pisali sami jest na tyle złe, ale Richard Thomas stwierdził, że dziesięć pokoleń programistów prac konserwacyjnych na średniej programu przed jego przerobionych. Jeśli kod jest także zaprojektowany i zapisywane w pierwszej kolejności, te 10 pokolenia programiści mają diabła czasie modyfikacji.

Ponieważ tak wiele pokoleń programistów pracować danego programu, nie jest zaskakujące, że każdy z nich ma zainwestować dużo czasu zrozumienie kodu oni rewizję. Krzykliwy Parikh i Nicholas Zvegintzov raport że programiści konserwacji wydać 50 do 60 procent swojego czasu po prostu stara się zrozumieć kod oni pracują. Tworzenie wysokiej jakości projektów i kodu na pierwszym miejscu, a 10 pokoleń programistów alimentacyjnych będzie dziękuję za to!

Uważaj na Undertow

Pragnienie, aby praca programistów konserwacja “łatwiej jest szlachetne, ale bardziej bezpośredni powód do rozwoju wysokiej jakości projektów i kodu jest to, że duże projekty jakościowe i kod, aby początkowy rozwój łatwiejsze. Oprogramowanie zmienia się znacznie podczas początkowego rozwoju. Kiedy wymagania się zmienić w środku wydaniu programiści znajdą się rewizji własnych wzorów i kodu w celu dostosowania zmian. Są one w dół rzeki od własnej pracy. W studium przypadku, marketing mieli deweloperzy, aby dwa miesiące warto zmian po ich już 9 miesięcy do swojego projektu. Nawet w dobrze zarządzanych projektów, Capers Jones informuje, że wymagania zmieniać pomiędzy 1 do 4 procent miesięcznie. Jeśli szukasz powodów do wysokiej jakości pracy upstream, uświadomić sobie, że “downstream” może być bliżej, niż się wydaje.

Inne dokumenty

Jeśli jesteś zainteresowany dowiedzieć się więcej o dalszych konsekwencjach upstream decyzji, książek i artykułów kilku mają więcej do powiedzenia na ten temat.

Barry W. Boehm i Philip N. Papaccio były jednymi z pierwszych osób, które zwracają uwagę na koszty wydobycia błędów w swoim artykule “Understanding i kontroli kosztów oprogramowania” (IEEE Transactions on Software Engineering, v. 14, no. 10 października 1988, str. 1462/77).

Projekt Steve’a McConnella Software Survival Guide odwzorowuje kurs przez cały projekt, którego celem jest zminimalizowanie liczby upstream wad bez dokonywania projekt biurokratyczny (Expected października 1997 r., Microsoft Press, ISBN??).

Capers Jones omawia dynamiczny wymogów Zmiany stosowanych pomiarów oprogramowania: Zapewnienie wydajności i jakości, 2d ed. (1997, McGraw-Hill).

Richard A. Thomas poinformował, że 10 pokoleń programistów alimentacyjnych opracowania programu zanim zostanie wyrzucony w jego 1984 artykule “Używanie Komentarze Pomocy Program Maintenance” (Byte, maj 1984, s. 415-422).

Choć nieco przestarzały, krzykliwy Parikh i kolekcji Nicholasa Zvegintzov w dokumentów zatytułowanych Samouczek na serwisowanie oprogramowania jest doskonałym źródłem podstawowych informacji o konserwacji oprogramowania (1983, IEEE Computer Society Press).

O autorze

Steve McConnell jest autorem Code Complete (1993), szybkiego rozwoju (1996), oraz licznych artykułów technicznych. Szybki rozwój otrzymała Łazienka Tech Journal gwiazdkowe wyróżnienie Tech za “wybitne innowacji, znaczenia i użyteczności.” Obecnie jest główny inżynier oprogramowania w Builders Construx Software, gdzie dzieli swój czas pomiędzy czołowymi niestandardowych projektów oprogramowania, doradztwo dla firm w shrink-wrap branży i pisać książki i artykuły. Jego najnowsza książka, Project Survival Guide Software, została wydana przez Microsoft Press na jesieni 1997. Steve może być osiągnięte w [email protected]

Comments are closed.