Co sprawia, że kod jest dziedziczony?

Słyszałem, że wielu programistów określa kod jako "legacy". W większości przypadków jest to kod, który został napisany przez kogoś, kto nie pracuje już nad projektem. Co sprawia, że kod, legacy code?

Update in response to: "Coś przekazanego od przodka, poprzednika lub z przeszłości" http://www.thefreedictionary.com/legacy najwyraźniej chciałeś wiedzieć coś jeszcze. Czy możesz wyjaśnić lub rozszerzyć swoje pytanie? S. Lott

Szukam objawów starszego kodu, który czyni go bezużytecznym lub koszmarem do pracy. Kiedy lepiej to wyrzucić? Moim zdaniem kod powinien być wyrzucany częściej, a wymyślanie na nowo koła jest cenną częścią rozwoju. Akademicki ideał nie wymyślania koła na nowo jest ładny, ale nie jest zbyt praktyczny.

Z drugiej strony istnieje oczywiście kod legacy, który warto zachować.

 39
Author: Chris de Vries, 2009-01-26

20 answers

Poprzez użycie sprzętu, oprogramowania, interfejsów API, języków, technologii lub funkcji, które nie są już obsługiwane lub zostały zastąpione, zazwyczaj połączone z niewielką lub żadną możliwością zastąpienia tego kodu, zamiast używania go do czasu, aż system umrze.

 40
Author: cletus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 12:19:36

Co sprawia, że kod, legacy code?

Jak w przypadku zwykłego Dziedzictwa, gdy autor nie żyje lub zaginął, Ty jako spadkobierca dostajesz cały lub część jego kodu.

Wylewasz łzy i próbujesz wymyślić, co zrobić z tymi wszystkimi śmieciami.
 23
Author: Quassnoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 12:18:20

Michael Feathers ma ciekawą definicję w swojej książce Working Effectively with Legacy Code. Według niego kod legacy to kod bez automatycznych testów.

 21
Author: Brian Rasmussen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 12:22:38

Jest to bardzo ogólne (i często nadużywane określenie), ale każdy z następujących powodów byłby uzasadniony, aby nazwać aplikację legacy:

  1. Baza kodu opiera się na języku/platformie, która jest całkowicie nieobsługiwana przez producenta oryginalnego produktu (często mówi się, że producent wycofał się z działalności).

  2. (naprawdę 1a) baza kodu lub platforma, na której jest zbudowany jest tak stary, że uzyskanie wykwalifikowanych lub doświadczonych programistów dla systemu jest zarówno trudne i drogie.

  3. Aplikacja obsługuje pewien aspekt biznesu, który nie jest już aktywnie rozwijany i dla którego zmiany są niezwykle rzadkie, zwykle w celu naprawienia go, jeśli coś całkowicie nieoczekiwanego zmieni się wokół niego (kanonicznym przykładem jest problem Y2K) lub jeśli jakaś Regulacja/nacisk zewnętrzny wymusza go. Ponieważ oba powody są pilne i zwykle nieuniknione, ale nie nastąpił znaczący rozwój w projekcie jest prawdopodobne, że ci ludzie przypisani do czynienia z będzie to nieznane systemowi (i jego zakumulowane zachowania i zawiłości). W takich przypadkach byłoby to często powodem zwiększenia postrzeganego i planowanego ryzyka związanego z projektem.

  4. System został/lub jest zastępowany innym. Jako taki system może być używany znacznie mniej niż pierwotnie zakładano, lub być może tylko jako sposób przeglądania danych historycznych.

 17
Author: ShuggyCoUk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 12:25:09

Legacy ogólnie odnosi się do kodu, który nie jest już rozwijany - co oznacza, że jeśli go używasz, musisz używać go na jego oryginalnych warunkach - nie możesz go po prostu edytować, aby wspierać dzisiejszy świat. Na przykład, starszy kod musi działać na sprzęcie, który może obecnie nie istnieć - lub nie jest już obsługiwany.

 12
Author: user17541,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 12:21:30

Według Michaela Feathersa, autora doskonałego pracującego efektywnie z Legacy Code , legacy code jest kodem, który nie ma żadnych testów. Kiedy nie ma sposobu, aby wiedzieć, co się psuje, gdy ten kod się zmienia.

Najważniejsze, co wyróżnia legacy code od non-legacy code is testy, a raczej brak testów. My można to wyczuć z odrobiną eksperyment myślowy: jak łatwo byłoby być, aby zmodyfikować bazę kodu, jeśli może odgryźć, gdyby mógł tell you kiedy popełniłeś błąd? Byłoby całkiem proste, prawda? Większość z strach związany z dokonywaniem zmian w duże bazy kodu to strach przed wprowadzenie subtelnych błędów; strach przed zmiana rzeczy nieumyślnie. Z testy, możesz zrobić wszystko lepiej z bezkarność. Dla mnie różnica jest taka krytyczne, przytłacza wszelkie inne rozróżnienie. Dzięki testom możesz dokonać jest lepiej. Bez nich po prostu Nie wiem czy coś się zaczyna lepiej czy gorzej.

 10
Author: Igal Tabachnik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 12:26:17

Kod źródłowy jest kodem źródłowym, który odnosi się do nieistniejącego już systemu operacyjnego lub innej technologii komputerowej.

 7
Author: Galwegian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 12:20:34

Kolega powiedział mi kiedyś, że legacy code to każdy kod, którego sam nie napisałeś.

Prawdopodobnie jest to po prostu pejoratywne określenie kodu, którego już nie lubimy z jakiegokolwiek powodu (zazwyczaj dlatego, że nie jest fajny lub modny, ale działa).

Brygada TDD może sugerować, że każdy kod bez testów jest kodem legacy.

 7
Author: Dan Dyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 14:25:10

Http://en.wikipedia.org/wiki/Legacy_code

"Legacy code to kod źródłowy, który odnosi się do nie-już obsługiwane lub produkowane"

 5
Author: Sergio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 12:19:58

Dowolny kod z brakującym wsparciem (lub dokumentacją). Być:

  • inline comments
  • Dokumentacja techniczna
  • Dokumentacja mówiona (osoba, która ją napisała)
  • testy jednostkowe dokumentujące działanie kodu
 5
Author: Gerrie Schenck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 12:22:23

Dla mnie legacy code to kod, który został napisany przed jakąś zmianą paradygmatu. Może nadal być bardzo w użyciu, ale jest w trakcie refakturowania, aby dostosować go do siebie.
np. stary kod proceduralny wiszący w innym systemie OO.

 5
Author: meouw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 14:47:59

Nikt tego nie przeczyta, ale wydaje mi się, że inne odpowiedzi nie pasują do siebie:

  1. ma wartość, gdyby nie był użyteczny, dawno by go wyrzucili
  2. its hard to reason about because either of
    1. brak dokumentacji,
    2. oryginalnego autora nie można znaleźć lub zapomnieć (tak 2 miesiące później Twój kod może być również kodem legacy!!),
    3. brak testów lub typesystem
    4. nie podąża za nowoczesnymi praktykami (tzn. nie ma kontekstu, aby trzymać się too)
  3. istnieje wymóg, aby go zmienić lub rozszerzyć. Jeśli nie ma wymogu, aby go zmienić, nie jest to kod starszy skoro nikogo to nie obchodzi. Robi swoje i nie ma nikogo / align = "left" /
 4
Author: Jappie Kerk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-06 15:48:36

Kod (lub cokolwiek innego, naprawdę) staje się" dziedzictwem", gdy został zastąpiony przez coś nowszego/lepszego, a mimo to nadal jest używany i utrzymywany przy życiu"w dziczy".

 2
Author: Wayne Molina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 14:41:26

Zachowanie kodu źródłowego nie jest tak bardzo akademickim ideałem, jak zachowanie kodu, który działa, bez względu na to, jak słabo. W wielu konserwatywnych sytuacjach korporacyjnych byłoby to uważane za bardziej praktyczne niż odrzucenie go i rozpoczęcie od nowa od zera. Lepiej diabeł, którego znasz...

 2
Author: Relic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 15:22:52

Uznaję kod "legacy", jeśli którykolwiek z poniższych warunków ma zastosowanie:

  • został napisany przy użyciu języka lub metodologii, która jest generacją stojącą za obecnymi standardami
  • kod jest kompletny bałagan bez planowania lub projektu za nim
  • jest napisany w przestarzałych językach i w przestarzałym, nie zorientowanym obiektowo stylu
  • trudno znaleźć programistów, którzy znają ten język, ponieważ jest on tak stary

W przeciwieństwie do innych opinii tutaj widziałem wiele nowoczesnych aplikacji, które działają przyzwoicie bez testów jednostkowych. Testy jednostkowe wciąż nie wszystkim przypadły do gustu. Być może za dziesięć lat następna generacja programistów spojrzy na nasze obecne aplikacje i uzna je za "dziedzictwo", ponieważ nie zawierają testów jednostkowych, tak jak ja uważam aplikacje nie zorientowane obiektowo za dziedzictwo.

Jeśli trzeba wprowadzić kilka zmian w starszej bazie kodowej, lepiej po prostu zostawić ją tak, jak jest i iść z prądem. Jeśli aplikacja wymaga drastycznych zmian funkcjonalności, przeglądu GUI i / lub nie można znaleźć nikogo, kto zna język programowania, nadszedł czas, aby wyrzucić i zacząć od nowa. Słowo ostrzeżenia: przepisywanie od zera może być bardzo czasochłonne i trudno jest wiedzieć, czy replikowano wszystkie funkcje. Prawdopodobnie będziesz chciał mieć przypadki testowe i testy jednostkowe napisane dla starszej i nowej aplikacji.

 1
Author: davogones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-01 04:08:31

Legacy code to kod, który jest bolesny/drogi, aby utrzymać aktualność przy zmieniających się wymaganiach.

Mogą do tego dojść na dwa sposoby:

  1. kod nie nadaje się do zmiany
  2. semantyka kodu została zamieniona na silikon

1) jest łatwiejszy do rozpoznania. Jest to oprogramowanie, które ma podstawowe ograniczenia, dzięki czemu nie jest w stanie nadążyć za ekosystemem wokół niego. Na przykład, system zbudowany wokół algorytmu O (n^2) nie będzie skalowany poza pewien punkt i musi być ponownie napisane, jeśli wymagania poruszają się w tym kierunku. Innym przykładem jest kod wykorzystujący biblioteki, które nie są obsługiwane w najnowszych wersjach systemu operacyjnego.

2) jest trudniejszy do rozpoznania, ale cały kod tego rodzaju ma tę cechę, że ludzie boją się go zmienić. Może to być dlatego, że został źle napisany/udokumentowany na początku, ponieważ jest nieprzetestowany lub dlatego, że jest nietrywialny i oryginalni autorzy, którzy go zrozumieli, opuścili zespół.

The Znaki ASCII / Unicode składające się na żywy kod mają znaczenie semantyczne, "dlaczego", " co "i do pewnego stopnia "jak", w umysłach ludzi z nim związanych. Starszy kod nie jest własnością lub właściciele nie mają znaczenia związanego z dużymi jego częściami. Gdy to się stanie (a może się zdarzyć następnego dnia z naprawdę źle napisanym kodem), aby zmienić ten kod, ktoś musi się go nauczyć i zrozumieć. Proces ten jest znaczącym ułamkiem czasu potrzebnego do napisania go w pierwsze miejsce.

 1
Author: David Gladfelter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-01 22:49:58

Dzień, w którym boisz się refaktoryzacji kodu, jest dniem, w którym twój kod stał się dziedzictwem.

 1
Author: Mikhail Kholodkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-14 10:48:50

Szczerze mówiąc, legacy code to każdy kod, framework, api, innego oprogramowania, thta nie jest już "cool". Na przykład COBOL jest jednomyślnie uważany za dziedzictwo, podczas gdy APL nie jest. Teraz można też wywnioskować, że COBOL jest legacy, A APL nie dlatego, że ma około 1m razy bazę instalacyjną jako APL. Jeśli jednak powiesz, że musisz pracować nad kodem APL, odpowiedź nie będzie brzmiała "oh no, that legacy stuff", ale raczej "oh my god, guess you won' t be doing anything for the next wieku " widzisz różnicę?

 0
Author: klyde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-26 15:06:03

Legacy code to wszystko napisane ponad miesiąc temu : -)

 0
Author: Roger Lipscombe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-23 13:52:45

To często każdy kod, który nie jest napisany w modnym języku skryptowym du jour, a ja tylko pół żartem.

 0
Author: Alan B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-07 09:28:10