Jakie są dobre podejścia do czyszczenia starych projektów?

11

Mam oprogramowanie, które napisałem około 2 lata temu i muszę do niego dodać kilka funkcji. Uświadomiłem sobie, że jest w strasznym bałaganie, i mam ochotę wszystko przenieść, posprzątać itp. Przeczytałem artykuł Joela na temat oprogramowania , żeby nie zaczynać od nowa , więc jaki jest najlepszy sposób?

billy.bob
źródło
Z którymi decyzjami nie zgadzasz się dzisiaj?

Odpowiedzi:

21

Masz trzy podstawowe opcje:

  1. Jeśli aplikacja jest bardzo mała i stanowi prawdziwy bałagan , rozpoczęcie od nowa może być najlepszym wyborem.

  2. Refaktor .

  3. Żyj z bałaganem i włamuj się w dodatkowych funkcjach.

Zazwyczaj opcja (2) jest najlepszym wyborem.

To, ile faktycznie zrobisz refaktoryzacji, będzie zależeć od zasobu, który włożysz, od wartości, którą wydostaniesz. Pytania, które należy zadać, obejmują:

  1. Która godzina / budżet jest dostępny?
  2. Jakiej modyfikacji oczekujesz w przyszłości?
  3. Kto jeszcze zobaczy kod? (tj. czy niechlujny kod zaszkodzi Twojej reputacji?)
  4. Czy ktoś jeszcze powinien zachować kod?
  5. Jakie narzędzia refaktoryzacyjne są dostępne, aby Ci pomóc?
  6. Jakie jest Twoje doświadczenie z refaktoryzacją?
  7. Jakie doświadczenie zdobędziesz dzięki refaktoryzacji?
  8. Jakie rodzaje refaktoryzacji przyniosą Ci najwięcej korzyści?
  9. Jakie testy automatyczne już istnieją? Potrzebujesz napisać?
  10. Ile będzie wymaganych testów ręcznych?
  11. Jak się poczujesz, jeśli zostawisz kod bez zmian?

Z mojego doświadczenia wynika, że bardzo łatwo jest wpaść w chaos podczas sesji refaktoryzacji. Najważniejsze lekcje, których się nauczyłem, to:

  1. Rób jedną rzecz na raz.
  2. Rób małe kroki.
  3. Dobrze wykorzystaj kontrolę źródła (często melduj się + dołączaj komentarze).
  4. Skorzystaj z automatycznych narzędzi refaktoryzacyjnych.
  5. Poznaj IDE.
Kramii
źródło
6
Chciałbym również dodać, aby uniknąć zbyt długiego stanu zepsucia. Widziałem, jak wiele projektów typu open source szybko umiera podczas ambitnego przepisywania / przeprojektowywania. Niefunkcjonalny projekt szybko zabija motywację.
LennyProgrammers,
2
Absolutnie. Jeśli chodzi o ambitne przepisywanie / projekty, popełniłem ten błąd wielokrotnie. Teraz staram się robić rzeczy w mniejszych krokach. Dodałem tę sugestię do mojej odpowiedzi.
Kramii
Dodam również, że nie powinieneś refaktoryzować niczego, co nie ma na to testu. Oprzyj się pragnieniu naprawy wszystkiego i skup się na obszarach, które należy zmienić, aby dodać nowe funkcje. Gdy to zrobisz, zdecyduj, ile dodatkowego wysiłku chcesz włożyć w resztę.
TMN
1
@TMN: Idealnie tak. Jednak nie zawsze potrzebujesz automatycznego testu. (1) Jeśli kod został opracowany bez testów automatycznych, może nie być łatwo / możliwe ponowne dopasowanie testów jednostkowych, dopóki nie dokonasz już refaktoryzacji (2) Pisanie testów przed wprowadzeniem trywialnych, zlokalizowanych zmian może być kosztowne. (3) Zautomatyzowane narzędzia refaktoryzujące + funkcje IDE mogą pomóc zapobiec łamaniu kodu w wyniku refaktoryzacji.
Kramii
2
Dodałbym - w twojej kontroli źródła, umieść wszystkie refaktoryzacje na osobnej ODDZIALE. Pomaga to w przeprowadzaniu rozsądnych porównań krokowych i dużych bloków. Może to być nieocenione, jeśli rzeczy zamieniają się w krem ​​(KTÓRE BĘDĄ).
szybko_niedz.
5

Cóż, przynajmniej wystarczająco refaktoryzuj, aby nowa funkcja mogła zostać bezpiecznie dodana. Nie pogarszaj tego jeszcze. Reszta zależy od motywacji, budżetu i ograniczeń czasowych - ale pamiętaj, że pełne wyczyszczenie bałaganu może potrwać dłużej niż jego pierwotne utworzenie.

użytkownik 281377
źródło
1
Jest to oczywiście słynna reguła Boyscout: zawsze pozostawiaj kod w lepszym stanie, niż go znalazłeś.
Jörg W Mittag,
2

Tym razem przy naprawianiu upewnij się, że to udokumentujesz. Następnym razem, gdy zobaczysz kod, łatwiej będzie sobie przypomnieć rzeczy.

Manoj R.
źródło
1

Zależy, czy utrzymanie go będzie kosztowało więcej czasu, ponieważ jest to bałagan, czy przepisanie go, aby nie było bałaganu i łatwe do utrzymania. Teraz osobiście przez to przechodzę, konwertuję stronę intranetową do ASP.Net MVC3, ponieważ stary kod był kupą badziewia (który napisałem), ponieważ miał być jednorazowy (tak, powinienem wiedzieć lepiej ). Stary stos bzdur wciąż tu jest, a ból głowy dodaje funkcje i naprawia błędy. MVC jest piękne i sprawia, że ​​praca nad nim jest naprawdę przyjemna, więc dostaje przepisanie.

Czarny lód
źródło