Kiedy nie można naprawiać uszkodzonych okien?


21

Czy w odniesieniu do uszkodzonych okien najlepiej jest zostawić refaktoryzację do przyszłej działalności?

Na przykład, jeśli projekt dodania nowych funkcji do istniejącego systemu wewnętrznego zostanie przypisany zespołowi, który do tej pory nie pracował z systemem, i otrzyma krótki harmonogram, z którym można pracować - czy kiedykolwiek będzie to uzasadnione odroczyć poważne refaktoryzacje do istniejącego kodu w celu zachowania terminu w tym scenariuszu?


6
Czasami szef decyduje, że rozbite okna nie zostaną naprawione, ponieważ wie, że zarobi znacznie więcej pieniędzy, naprawiając cały dom później.
mouviciel

1
zasada podstawowa: zadłużenie techniczne jest w porządku, aby osiągnąć termin, ale ostatecznie musi zostać zrekompensowane, a im szybciej, tym lepiej
JF Dion

4
Gratulacje! Doskonale opisałeś „filozofię projektowania” PHP.
ThomasX


4
Jutro nigdy nie nadejdzie ...
Eric King,

Odpowiedzi:


25

Refaktoryzacja jest - i powinna być - ciągłym procesem. Nie wystarczy po prostu spełnić wymagania dzięki działającej i przetestowanej implementacji, która wciąż jest nieco niekompletna.

„Spraw, by działało, a następnie spraw, aby działało lepiej” .

Nie pamiętam, gdzie przeczytałem ten cytat, ale jest to klucz do dobrego zastosowania refaktoryzacji i uważam to za nieprofesjonalne, aby zrobić inaczej.

Ciągłe refaktoryzowanie jest jak wycieranie rozlanych płynów podczas gotowania i czyszczenie naczyń po zjedzeniu posiłku. Ukierunkowane refaktoryzacja jest jak znalezienie brudnej kuchni, ale tylko czas na umycie brudnej szklanki lub dwóch. Czy wolisz mieszkać z ciągle brudną kuchnią, czy wolisz utrzymywać porządek w czystości?

Dostajesz kod do działania, a następnie refaktoryzujesz kod, aby zapewnić najlepszą możliwą implementację. Jeśli robisz coś znajomego, być może za pierwszym razem wdrażasz najlepszy kod, jednak upewnienie się wymaga czasu. Jeśli wygląda na to, że możesz poprawić swój kod, to spróbuj refaktoryzować, aby upewnić się, że Twój kod jest co najmniej tak ubogi i czysty, jak to tylko możliwe. Oznacza to, że redukujesz kwotę długu technicznego, który pozostawiasz za sobą, a także ułatwiasz czytanie i refaktoryzację, gdy następnym razem zajdzie potrzeba załatwienia kodu. Jest to podstawowa wartość mantry TDD „Red-Green-Refactor”, z tym wyjątkiem, że w TDD refaktoryzujesz przede wszystkim w celu usunięcia duplikacji, opłaca się również przejrzeć inne elementy, które można zrefaktoryzować, takie jak duże klasy, długie metody

Jeśli znajdziesz się w obliczu poważnego przeprojektowania, być może możesz go odłożyć na chwilę, szczególnie jeśli masz mało czasu w harmonogramie. Jest to jednak możliwe pod warunkiem, że funkcjonalność Twojego kodu nie zostanie naruszona, a także pod warunkiem, że implementacja będzie nadal spełniać wymagania. Tego rodzaju sytuacja powinna być rzadka i możesz pomóc w zapewnieniu, że będzie to jeszcze rzadsze, jeśli będziesz ciągle refaktoryzować w trakcie. Jeszcze ważniejsze jest jednak to, że nie możesz ryzykować zbyt długiego pozostawienia poważnych zmian, w przeciwnym razie później stworzysz jeszcze większe obciążenie, które może być o wiele bardziej kosztowne do naprawienia, lub może skończyć się jeszcze bardziej kosztownym niepowodzenie projektu.

Mam wrażenie, że wiele osób często mylić definicje Refaktoryzacja i re-engineering . Te dwa terminy opisują strategie radzenia sobie z bardzo różnymi sytuacjami. Jeśli chcesz przeprojektować, zobowiązujesz się dokonać drastycznej zmiany, która zmieni zachowanie systemu. Spowoduje to unieważnienie niektórych testów, a także będzie wymagać nowych testów. Po dokonaniu refaktoryzacji upewniasz się, że system nadal zachowuje się dokładnietak samo jak przed zmianą, ale zapewniasz również, że Twój kod będzie miał długowieczność i że będzie łatwiej utrzymać go z czasem. Do cholery nie „wypychasz” swojego kodu, zobowiązujesz się do profesjonalnego standardu czystego kodu, który zmniejszy ryzyko niepowodzenia i zapewni, że Twój kod pozostanie przyjemnością do pracy, i profesjonalnym standardem .

Wracając do analogii zepsutych okien, jeśli rozbisz okno, powinieneś je natychmiast naprawić. Jeśli nie zauważyłeś, że okno jest zepsute, musisz zdecydować o kosztach, jeśli pozostawisz okno zepsute. Teraz powtórzyć poprzednie dwa zdania, ale substytutem Bug za oknem. W końcu potrzebujesz innej strategii. Jeśli stworzyłeś błąd podczas kodowania, naprawisz go od razu lub zobaczysz, czy zmiany będą wymagały ponownego zaprojektowania i podejmiesz komercyjną decyzję, kiedy najlepiej będzie rozwiązać problem. Aby uniknąć problemów, nie dokonujesz refaktoryzacji, refaktoryzujesz, aby łatwiej było znaleźć i naprawić problemy. Nie obchodzi mnie, jak zdumiewający jest twój kod, złożone systemy zawsze będą miały problemy, z którymi trzeba będzie się uporać. Na tym właśnie polega dług techniczny i dlaczego refaktoryzacja musi być procesem ciągłym podczas wdrażania kodu , a nie pozostawiona na jakiś arbitralny przyszły czas.

Krótko mówiąc, odpowiedź, że w rzadkich przypadkach akceptowalne może być odroczenie poważnych zmian w kodzie w celu dotrzymania terminu, nie należy jednak uważać za normalną praktykę traktowania refaktoryzacji jako ćwiczenia niezależnego od codziennej pracy wdrożeniowej, a na pewno nigdy nie wykorzystywane jako wymówka dla zespołów niezaznajomionych z bazą kodu jako opcja, aby uniknąć zapewnienia, że ​​ich implementacja jest tak uproszczona i czysta, jak to możliwe, w danych okolicznościach.


Jak cytat.
Marjan Venema

1
W zbyt wielu miejscach „rzadkie czasy” są normą.
ozz

2
Gdyby tylko „projektanci” PHP rozpoznali ten cytat ...
ThomasX

1
Świetny cytat, Pomyśl o tym - czy chcesz, aby malarz samochodu zastosował tę samą logikę przy naprawie swojej Toyoty w 1999 r. - a jeśli tak, czy jesteś gotowy zapłacić za lakier Roll Roll'a na lakieru za 1000 USD?
mattnz

@mattnz Twoja analogia nie jest prawdziwa w przypadku tworzenia oprogramowania. To nie jest przypadek „pozłacania”, jest to stosunkowo niska cena zaliczki, aby zapewnić maksymalny zwrot z inwestycji. Kradnąc analogię do malowania, jest to również różnica między nakładaniem farby na samochód szerokim pędzlem lub używanie kabiny lakierniczej, aby uzyskać ładne, równe wykończenie. Dostajesz to, za co płacisz, więc czy chcesz zapłacić stawkę profesjonalisty i otrzymać w połowie ukończoną pracę? Zmniejszenie narożników może nieco zaoszczędzić w krótkim okresie, ale w dłuższej perspektywie spowoduje większe zadłużenie techniczne.
S.Robins

11

Niektórzy programiści twierdzą, że „naprawiają rozbite okna”, a tak naprawdę „przestawiają leżaki w Titanicu”. Kod refaktoryzacji, który działa, ale obraża zmysł węchu, jest stosunkowo łatwy. Jeśli zauważysz, że powracasz do tego rodzaju zadań zamiast dodawać nowe możliwości dla użytkowników lub zwiększać użyteczność aplikacji (optymalizacja oznacza, że ​​aplikacja działa szybciej, dobrze tutaj, optymalizacja oznacza, że ​​kod jest bardziej czytelny) inny) to może zbyt dużo sprzątacie. Nie dlatego, że porządkowanie jest złe, ale dlatego, że firma płaci za rozwój, aby coś rozwinąć. Z pewnością nie chcą kruchego, trudnego do odczytania, źle zaprojektowanego rozwiązania, ale nie chcą też dopracowanego i pięknego pół-rozwiązania.

Posprzątaj, kiedy musisz zrobić coś prostego „na start”, lub gdy czekasz na inny zespół, który powie ci, czy twój problem jest rzeczywiście ich winą, lub kiedy czekasz na decyzję. Będzie wiele możliwości. Jeśli masz szansę przesunąć całą aplikację do przodu, weź ją, chyba że zaczynasz czuć, że cała sprawa stała się krucha. Prawdopodobnie nie. Otrzymasz szansę na refaktoryzację - nie musisz się tym martwić.

Wracając do drugiej połowy pytania, sprintu w celu dodania funkcji w krótkim horyzoncie czasowym, błędem byłoby powiedzieć „i nie będziemy robić żadnych refaktoryzacji, nie ma czasu”. Błędem byłoby również powiedzieć „Wiem, że minęło 6 tygodni i wygląda dokładnie tak samo dla użytkowników, ale te zepsute okna naprawdę musiały zostać naprawione”. Dopasuj refaktoryzację do luk, które występują w każdym projekcie. Nie szukaj schronienia w sprzątaniu kosztem osiągnięcia celu projektu.


4
Niektórzy programiści twierdzą, że „naprawiają rozbite okna”, podczas gdy tak naprawdę „przestawiają leżaki na Titanicu” - w rzeczywistości często wydaje się, że programiści mają trudności z odróżnieniem „zadłużenia technicznego” od „nie w taki sposób, jak bym to zrobił” Zrobiłem to ”
RevBingo

9

Z perspektywy biznesowej refaktoryzacja to inwestycja spekulacyjna - inwestowanie czasu i wysiłku (pieniędzy) teraz w nadziei, że pozwoli zaoszczędzić więcej czasu i wysiłku (pieniędzy) w przyszłości.

Bez wchodzenia w debatę na temat tego, ile wysiłku przy refaktoryzacji zaoszczędzi w przyszłości (zależy to od zbyt wielu zmiennych, aby była to sensowna dyskusja tutaj), jasne jest, że czas na refaktoryzację to moment, w którym „wartość bieżąca netto” kosztu pozostawiania go przekracza koszt teraz.

To proste, ale nie masz pojęcia, ile będzie kosztować przyjazd. Musisz także uwzględnić wszystkie zwykłe pomysły dotyczące planowania finansowego, takie jak zwrot z inwestycji, zarządzanie ryzykiem (wartość marki, odpowiedzialność prawna, ryzyko ubezpieczalne kontra ryzyko nieubezpieczone), koszty operacyjne itp.

W większości przypadków decyzję o tym, kiedy dokonać refaktoryzacji, najlepiej pozostawić osobom zarządzającym firmą. Pomimo tego, że wiele plakatów na tym forum wokalizuje, menedżerowie zwykle wiedzą więcej na temat prowadzenia firmy niż programiści. Mają na myśli szerszy obraz, który obejmuje maksymalizację zwrotu dla akcjonariusza. Rzadko zdarza się, że naprawianie nieuszkodzonych elementów przyczynia się do tego, kod nie jest wyjątkiem.

Edycja: Przeczytałem interesujący artykuł o harmonogramach przeglądów infrastruktury krytycznej. Istotą jest to, że ruch jest z dala od rutynowej konserwacji (refaktora) do naprawy w razie potrzeby (naprawianie błędów). Główną różnicą są poziomy monitorowania - na przykład elektrownia jądrowa monitoruje bardzo szczegółowo i naprawia, gdy jest „zepsuta”, ale na długo przed awarią. Stwierdzono, że przymocowanie do schematu konserwacji nie tylko kosztuje więcej, ale jest mniej niezawodne z powodu awarii spowodowanych przez program konserwacji. Podobny pomysł jest wymagany w przypadku oprogramowania - refaktoryzacji bitów, które mają się złamać - które można poznać tylko poprzez pomiar.


4
+1 pomimo błędów ortograficznych :); w większości przypadków klient nie płaci za czysty kod - płaci za wynik. Jeśli masz czysty kod i nie masz żadnych wyników, nie otrzymasz zapłaty i nie będziesz refaktoryzować zbyt długo.
jasonk

2
Chciałbym tylko zauważyć, że to dość powszechne, że Manager lepiej rozumie całą firmę. Niestety, często mają DUŻE poczucie, że zły kod będzie kosztował w przyszłości, więc upewnij się, że Twój menedżer ma jakieś rozsądne dane dotyczące kosztów do pracy, jeśli zamierzasz zaufać menedżerowi, że podejmie tę decyzję.
Michael Kohne,

Innym sposobem patrzenia na Refaktoryzację nie jest coś, co należy podjąć jako zadanie docelowe, ale środek, który zapewni, że nie potkniesz się o siebie podczas opracowywania systemu. Często słaby kod jest powodem, dla którego ciągle modyfikujesz testy i próbujesz gasić pożary. W rezultacie może to kosztować więcej klientów. Utrzymanie kodu w czystości nie powinno być postrzegane jako pozłacanie kodu, ale jako utrzymanie profesjonalnego standardu w celu zapewnienia pomyślnych rezultatów.
S.Robins

1
@ S.Robins Mówimy o refaktoryzacji, a nie o słabo rozłożonym kodzie (moim zdaniem drugi problem jest problemem, pierwszy miło jest mieć).
jasonk

5

Dopuszczalne jest, gdy szkoda dla firmy przez naprawienie ich jest większa niż przez ich nie naprawienie.

Sytuacje, w których to występuje, mogą być:

  • gdzie termin lub okazja biznesowa mogą zostać pominięte z powodu czasu potrzebnego na naprawę
  • gdzie fragment kodu (rzeczywiście) ma zostać wycofany w bardzo krótkim czasie, dlatego jego przeredagowanie nie przynosi prawie żadnych korzyści.

I takie sytuacje się zdarzają - sytuacje handlowe często wymuszają sztuczne terminy, które muszą być dotrzymane w przypadku, gdy minęła możliwość ich negocjacji, oraz wymogi, które mają element czasowy - na przykład zmiana ustawodawstwa lub przepisów podatkowych, które wchodzą w życie konkretna data - istnieją.

Sztuką jest identyfikowanie tych sytuacji i ich właściwa ocena. Kod, który ma zostać wycofany, będzie często pozostawał przez lata. Konieczne może być dotrzymanie sztucznych terminów, ale często mogą one być dotrzymywane na różne sposoby (na przykład oprogramowanie może być prezentowane, prezentowane i „uruchamiane” w danym dniu bez konieczności finalnej wersji ostatecznej wersji do późniejszego końca).

Kiedy masz do czynienia z tego rodzaju rzeczami, musisz podejść do tego z otwartym umysłem, ale zawsze pytaj, czy to się pojawia? Czy związane z tym założenia są realistyczne? Czy istnieje inny sposób osiągnięcia celu bez wysyłania niestandardowego kodu? Jeśli nie ma, jak najlepiej wykorzystać dostępny mi czas?

A jeśli nie ma alternatywy, zawsze dobrze, ale kiedy to naprawimy?

Ponieważ powinno prawie, prawie, prawie zawsze być kiedy , a nie jeśli .


Re: sztuczne terminy; W idealnym świecie każdy porządny projekt powinien mieć termin. Słyszałem o tym, że zespoły produktowe są w porządku, gdy spadają o tydzień (tydzień to nic wielkiego, prawda?) - nie zdając sobie sprawy z motywacji biznesowej - że to stawia cię po czarnej sobocie , a nie wcześniej. Zły ruch.
jasonk

3

Jeśli menedżerowie zdecydują, że chcą narastać dług techniczny . Jest to słuszna decyzja, jeśli na przykład chcesz, aby niektórzy początkowi klienci otrzymali wczesny prototyp, aby uzyskać wczesną informację zwrotną.


4
Zdarza się to zbyt często, gdy menedżerowie zezwalają na naliczanie długu technicznego w celu dotrzymania napiętego terminu, ale zamiast spłacić dług tak szybko, jak to możliwe, widzą nadchodzący następny termin i zamiast harmonogramu na zbliżającą się pracę i wcześniejsze zadłużenie , dług jest ignorowany, a potrzebny czas wypełniony dodatkowymi nowymi funkcjami wydania. Innymi słowy, dług nigdy nie jest spłacany, a zanim zdasz sobie sprawę z głębokości projektu, jest już za późno, aby cokolwiek zrobić, aby uniknąć spirali problemów wymykającej się spod kontroli. Naliczanie długu jest w porządku, o ile faktycznie spłacasz je szybko.
S.Robins

2
Niektórzy menedżerowie (zwłaszcza nietechniczni) nie mają pojęcia, o czym mówisz, kiedy wspominasz o długach technicznych. Niektórzy nawet myślą, że próbujesz ich oszukać, aby po prostu odejść i bawić się rzeczami zamiast wykonywać prawdziwą pracę.
szybko_naz

Dlatego nasza organizacja nie ma menedżerów: Open-Org.com;)
David

1
Większość menedżerów nie jest wystarczająco inteligentna, aby zrozumieć wady długu technicznego, więc kończy się to długiem technicznym, który narasta do momentu bankructwa technicznego i jest zmuszony przepisać cały system.
Wayne Molina,

1

Możesz myśleć o tym w taki sam sposób, jak proszenie o kredyt. Czy można pożyczać pieniądze, aby inwestować w X w perspektywie krótkoterminowej i płacić za nie w perspektywie długoterminowej? Nie ma jednoznacznej odpowiedzi, może to być w najlepszym interesie organizacji (np. Aby spełnić obecne oczekiwania klientów), lub może być katastrofą, jeśli zostanie wykonane w sposób nieodpowiedzialny.

Wszystko sprowadza się do priorytetów, a kierownictwo powinno mieć świadomość, że chociaż priorytetem numer jeden jest sprawienie, by kod działał, wdrożenie nowych funkcji i spełnienie oczekiwań klienta, za każdym razem, gdy opuszczasz rozbite okna, spowalniasz priorytet numer jeden , trudniejsze i wymagające większej inwestycji zasobów. Ponadto w 99% przypadków nie można przestać opracowywać nowych funkcji i skoncentrować każdy wysiłek na „naprawie bazy kodu”.

Podsumowując, tak, czasami można zostawić rozbite okna, tak jak dopuszczalne jest poproszenie o pożyczkę ... pamiętaj tylko, że naprawdę, naprawdę musisz za to zapłacić w przyszłości. A w przyszłości czas na zrobienie tego najprawdopodobniej nie będzie znacznie większy niż czas, który masz teraz.


0

Zwykle, gdy możesz, powinieneś to naprawić. Pozwoli to uniknąć potencjalnego czasu poświęconego na konserwację. Jednak jakaś barbarzyńska nie zwinna praktyka pozwala pozostawić status quo tak długo, jak długo działa. Niektórzy menedżerowie obawiają się „nieprzewidzianych skutków” zmiany.

Uważam, że należy zostawić to tylko wtedy, gdy działa tak, jak powinno (tylko zepsute przez optymalizację, ale nie funkcjonalność) i nie masz czasu na przetestowanie go, jeśli dokonujesz refaktoryzacji. Należy jednak pamiętać, że należy to naprawić jak najszybciej.

Jeśli jest zepsuty przez funkcjonalność, a nowe funkcje zależą od niego, najlepiej byłoby to naprawić jak najszybciej.


0

Większość programistów zarabia pieniądze dla swojego pracodawcy. Kiedy zatem powinno się dokonać refaktoryzacji: kiedy przyniesie to firmie pieniądze. Refaktoryzacja to czas nie spędzony na innych projektach i czas zaoszczędzony w przyszłości na tym projekcie.

To, czy warto, zależy głównie od Twojego menedżera.


1
-1; Tego rodzaju postawa powoduje, że systemy oprogramowania się rujnują, ponieważ refaktoryzacja jest postrzegana jako „czas, który można poświęcić na nowe rzeczy”.
Wayne Molina,

1
Refaktoryzacja czasu IS nie jest wydawana na nowe rzeczy.
Pieter B

@Wayne M: Rzeczy to, że inżynierowie oprogramowania zwykle nie decydują o tym, co należy zrobić, robią to biznes i menedżerowie. Oczywiście, każdy chciałby się refaktoryzować, kiedy tylko chciał, ale tak naprawdę to nie jest rzeczywistość ... przynajmniej z mojego 7-letniego doświadczenia w zawodzie.
James

+1 Takie podejście zapewnia wartość każdemu, kto płaci twoją pensję. Bez tego cała Twoja praca mogłaby zostać zlecona na zewnątrz.
MarkJ

0

Programiści powinni poinformować stronę biznesową o wielkości długu technicznego, aby mogli podjąć świadomą decyzję. Jeśli potrzeba wcześniejszego wejścia na rynek przewyższa ryzyko związane z kodem, nie masz dużego wyboru. Brak przepływu gotówki przebije wiele decyzji technicznych.

Aby umieścić niektóre problemy w nietechnicznej perspektywie, zwróć uwagę na wydłużony czas na naprawę błędów i dodanie nowych funkcji. Jeśli kierownictwo ma doświadczenie sprzedażowe i marketingowe, może to zrozumieć. Nienawidzą konieczności informowania klientów, że to zajmie dłużej.

Jeśli zastanawiasz się nad powiększeniem zespołu, może to być dobry moment na zatrudnienie młodszego programisty. Pokrycie testowe będzie w tym przypadku ogromnym wybawcą. Nauczą się więcej, robiąc niż czytając dokumentację.


0

czy kiedykolwiek uzasadnione może być odroczenie poważnych zmian w istniejącym kodzie w celu zachowania terminu w tym scenariuszu?

  • Jeśli coś jest zepsute, najprawdopodobniej nie. Nie będziesz prowadzić samochodu z częściowo działającymi hamulcami, prawda? (Chyba że ryzyko nie dotarcia gdzieś na czas jest większe niż ryzyko wypadku z powodu wadliwych hamulców.) Daleko od idealnego rozwiązania, ale niestety tak się dzieje.

Jeśli jednak mówisz o ponownym faktorowaniu działającego kodu, rozważę następujące kwestie:

  • Gdyby to zależało od naszych starszych programistów lub dyrektora technicznego, nigdy nie wydalibyśmy żadnego oprogramowania. Zawsze staraliśmy się ponownie rozłożyć czynniki i dążyć do perfekcjonizmu.

  • Jeśli faktoring będzie miał negatywny wpływ na rentowność biznesu, należy go ponownie zaplanować.

  • Jeśli Twoja firma obiecała dostarczyć określoną funkcjonalność w określonym terminie, dokonaj refaktoryzacji później. Pomyśl o organizacji charytatywnej z okazji Czerwonego Nosa - co roku mogą zbierać datki przez okres 24 lub 48 godzin. Nie ma możliwości, aby zmienili fakturę swojej bazy kodów, jeśli pomyśleli, że może to powstrzymać ich od przyjmowania darowizn w tym czasie. Dodatkowo, jeśli jest rozbite okno, ale nie wpłynie to na ich zdolność do przyjmowania darowizn, jest całkiem prawdopodobne, że zdecydują się nie uwzględniać ponownie.

  • Zawsze znajdziesz lepszy sposób na zrobienie czegoś. To naturalny proces i bardzo ważne jest, aby móc narysować linię.


Byłoby miło uzyskać opinie na temat głosów oddanych: D
CodeART

2
Zgadzam się, z tyloma negatywnymi głosami, wygląda na to, że ktoś miał po prostu zły dzień, i przeforsował szereg głosów.
Sam Goldberg,

-1

W odpowiedzi na twoje pytanie dotyczące refaktoryzacji powiedziałbym „tak”. Jak ktoś inny wskazał w powyższych odpowiedziach, refaktoryzacja jest procesem ciągłym, a czasami podejmowane są taktyczne i biznesowe decyzje, które zastępują potrzebę przepisania kodu, który już działa (choć może w klugey sposób).

Jeśli chodzi o „rozbite okna”: ten termin pierwszy raz usłyszałem w kontekście tworzenia oprogramowania, około 10 lat temu. Ale w tym czasie używano go do opisania dopuszczania zepsutych testów jednostkowych . Opisywało to scenariusz, w którym ludzie mają pokusę, aby nie naprawiać uszkodzonych testów jednostkowych, ponieważ wydaje się celowe po prostu pamiętać, które testy są „w porządku, aby zakończyć się niepowodzeniem”, zamiast naprawiać uszkodzone testy (które zostały poprawnie zerwane z powodu interfejsu lub wymagań zmiany, na przykład).

Myślę, że zastosowanie metafory zepsutego okna do testów zepsutych jednostek jest bardziej odpowiednie i bardziej opisujące niebezpieczeństwo dopuszczenia „wybitych okien” w sąsiedztwie oprogramowania. Moim zdaniem, jeśli mówisz o uszkodzonych testach jednostkowych (jak rozbite okna), odpowiedzią byłoby, że nigdy nie jest w porządku. (Do tego stopnia, że ​​możemy powiedzieć: nigdy ...)


Jaki jest powód głosowania w dół? Coś tu powiedziane jest niepoprawne? A może po prostu mściwi redaktorzy?
Sam Goldberg

-1

Jeśli jest naprawdę zepsuty, należy go naprawić.

Ale czy to naprawdę zepsute? Czy jesteś pewien, że nie utożsamiasz „nie ładnego” ze złamanym.

Musisz zastosować obliczenie „wartości zatopionej”, zanim ponownie uwzględnisz działający kod, ponieważ nie podoba ci się styl lub, ponieważ uważasz, że spowoduje to problemy w przyszłości.

W przypadku ponownego faktorowania kodu napisanego w zeszłym tygodniu kosztem jest czas spędzony na kodowaniu go w zeszłym tygodniu, nie warto się martwić, czy kod zostanie znacznie ulepszony.

Kod refaktoryzacji, który przeszedł test jednostkowy. Teraz nie musisz tylko pisać od nowa, musisz ponownie zdefiniować i ponownie uruchomić wszystkie dotychczasowe testy, to zaczyna wyglądać na drogie.

Ponowny faktoring kodu, który trafił do produkcji. Jeszcze więcej testów do zrobienia, a także wdrożenie dla użytkowników, a także ryzyko dostarczenia czegoś, co nie działa tak dobrze, jak starej wersji. Musisz to uzasadnić i wyjaśnić to dużemu szefowi, zanim przejdziesz dalej.

Kod faktoringowy, który od dłuższego czasu jest w trakcie produkcji i został poddany kilku wydaniom i poprawkom. Jeśli nie wiesz, że oprogramowanie przestanie działać, nawet tam nie wchodź!


Zwykle „nie ładny” idzie w parze z „zepsuty”. Kod, który nie został poprawnie napisany, jest trudniejszy w utrzymaniu i dodaniu nowych funkcji, więc w końcu będziesz musiał przepisać ten kod, ponieważ po drodze zaniedbałeś refaktoryzację.
Wayne Molina,

2
Kod, który jest testowany i produkowany bez zaległych raportów błędów, działa kod. Zainwestowano dużo czasu i pieniędzy, aby wprowadzić go w ten stan. Ładny kod to po prostu - ładny kod.
James Anderson

Nie zgadzam się. Kod może działać, ale może być kłopotliwy w utrzymaniu i dodawaniu funkcji; taki kod jest zepsuty, ponieważ jest sztywny i „śmierdzi”. Prawidłowo napisany kod jest często ładny ORAZ przetestowany, a co ważniejsze, łatwy w utrzymaniu i ulepszeniu.
Wayne Molina

@Wayne M: Wow, Wayne, naprawdę nie masz pojęcia. Jeśli kiedykolwiek dotrzesz do PM, twoi programiści cię pokochają, ale Twoja kariera prawdopodobnie nie potrwa długo. W pewnym momencie musisz narysować linię. Rozumiem, że to ty przegłosowałeś wszystkich, którzy nie zgadzają się z twoimi marzeniami?
James

1
@WayneM - możesz więc zgłosić „defekt”, ponieważ nie podoba ci się wygląd kodu. Kod jest napisany, aby wykonać zadanie - jeśli wykonuje to zadanie, to działa. Koszty utrzymania mogą być wysokie, ale muszą być tańsze niż przepisywanie.
James Anderson

-2

Z mojego doświadczenia wynika, że ​​termin jest najważniejszy dla biznesu. To zależy od tego, kto będzie korzystał z Twojej aplikacji. W moim przypadku było to oprogramowanie na telefony komórkowe ... przekroczenie terminów oznaczało przekroczenie celów sprzedażowych i uderzeń cen akcji.

Podczas odziedziczenia kodu, który odziedziczyliśmy i wyraźnie trzeba go było zmienić, natrafiliśmy na wiele momentów WTF. Ponieważ jednak ten kod działał „prawie” (asynchroniczność jest słabo rozumiana), nie było zachęty dla kierownictwa, aby faktycznie zezwoliło na refaktoryzację, podczas gdy należało wypełnić zaległe zobowiązania. Dopiero po zauważeniu błędu „na wolności” pozwolono by nam cokolwiek zmienić, nawet jeśli sami moglibyśmy go łatwo złamać przez mało znane przypadki. Kiedyś przerobiłem około 10 000 wierszy kodu w swoim czasie i musiałem go wyrzucić. Czas potrzebny na testowanie i inne recenzje itp. Nie mógł być uzasadniony.


Cieszę się, że rzeczywistość tworzenia oprogramowania wydaje się być zagubiona u niektórych osób
James
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.