코드는 "레거시"는 언제입니까? [닫은]


63

우리는 모두 그것을 해왔으며, 일부 코드 (종종 우리가 상속 한 것들)를 "레거시"라고 라벨링 했습니까? 그러나 여전히 프로덕션 시스템에서 사용되므로 실제로 레거시입니까? 그리고 무엇이 레거시입니까? 완벽하게 작동하는이 코드의 부주의 한 라벨링을 피해야할까요? 라벨링이 새로운 편의를 통해 최고 경영진을 행복하고 행복하게 해줄 수있는 순수한 편의성이란 무엇입니까?


답변 요약

답을 살펴보면 네 가지 일반적인 주제를 볼 수 있습니다. 여기 고장이 보입니다.

  1. 전달 된 모든 코드 : 6
  2. 죽은 시스템 : 2.5
  3. 단위 테스트 없음 : 2
  4. 개발자는 주위에 없습니다 : 1.5


1
제공되고 작동하자마자 레거시 코드입니다.
Martin Beckett

23
작성하지 않으면 레거시 코드입니다. ;-)
Steven A. Lowe

20
이 코드를 작성한 모든 사람이 퇴직하거나 사망 한 경우, 기존 코드는 계속 유지하고있는 사람들이 원하는 경우입니다. 그렇지 않으면 기존 코드베이스라고합니다.
unpythonic

3
@ StevenA.Lowe는 충분한 시간을 주어, 내가 경우에도 레거시 코드의 을 작성합니다.
Kyralessa

답변:


43

나는 Wikipedia의 요약에 다소 부분적이다 .

레거시 시스템은 새로운 기술이나 작업을보다 효율적으로 수행 할 수있는 방법이 있더라도 여전히 사용자의 요구에 맞게 작동하기 때문에 계속 사용되는 기존의 방법, 기술, 컴퓨터 시스템 또는 응용 프로그램입니다.

다른 사람들이 답변에 설명하는 많은 부분이 코드가 "레거시"가 되는 이유 입니다. 그러나 중요한 질문 자체는 다음과 같습니다.

그러나 여전히 프로덕션 시스템에서 사용되므로 실제로 레거시입니까? 그리고 무엇이 레거시입니까?

그것이 여전히 프로덕션 환경에서 사용되고 있다는 사실 은 정확하게 레거시를 만드는 것 입니다. 코드가 제대로 작동하지 않거나 더 이상 프로덕션에서 사용되지 않으면 해당 코드는 각각 "손상"또는 "종료"됩니다. 레거시 는 여전히 사용 중이며 제대로 작동하지만 더 이상 일반적으로 사용되지 않는 디자인이나 기술을 통합 함을 의미합니다.

(a) 업그레이드 / 업데이트를 원하지만 업그레이드 할 수 없거나 (b) 여전히 업그레이드 도중에있는 모든 코드 또는 시스템은 레거시 시스템입니다. 이것은 리팩토링 이나 일반적인 코드 정리를 의미하지 않으며 , 새로운 프레임 워크 나 새로운 플랫폼을 사용하여 디자인을 크게 변경 하는 것을 의미 합니다.

시스템이나 코드 레거시 가 되는 이유는 여러 가지가 있습니다 .

  • 정기 유지 관리 또는 소프트웨어 부패가 없습니다 . 응용 프로그램을 정기적으로 유지 관리하지 않으면 소프트웨어 환경의 주요 변경 사항에 보조를 맞출 수 없습니다. 이는 단순한 소홀 때문일 수도 있고 비즈니스 우선 순위 또는 예산 제약에 따라 의도적으로 선택할 수도 있습니다.

  • 테스트 부족. 또 다른 답변 은 레거시 코드 인 테스트에서 다루지 않는 코드에 대한 대중 저자의 쌍곡 주장을 언급합니다. 이건 정말 정확한 정의가 아니라 그것은 이다 가능한 근본 원인; 좋은 테스트 (자동 또는 수동)없이 개발자는 소심하고 무언가를 깨뜨리는 것에 대해 걱정하여 위의 "소프트웨어 썩음"을 초래하기 때문에 주요 변경을 두려워합니다.

  • 대형 오픈 소스 라이브러리 또는 프레임 워크를 사용하는 프로젝트에서 특히 교묘 한 간과하는 요소 인 Rev-locking (상업용 도구에서도 마찬가지 임). 종종 프레임 워크 / 라이브러리에 대한 주요 사용자 정의가 수행되어 업그레이드가 엄청나게 어렵거나 비쌉니다. 따라서 시스템은 구식 (더 이상 지원되지 않는) 플랫폼에서 실행되기 때문에 레거시가됩니다.

  • 소스 코드는 더 이상 사용할 수 없습니다. 즉, 시스템을 추가하거나 변경할 수 없습니다. 점진적 / 반복적으로 수정되는 것과는 달리 업그레이드를 위해 이러한 시스템을 다시 작성해야하므로 많은 회사들이 귀찮게하지 않을 것입니다.

코드베이스에 대한 업데이트를 느리게하거나 중지시키는 것은 해당 코드베이스가 레거시가 될 수 있습니다.

이제 별도의 통계는 없지만 암시적인 질문은 레거시 코드의 문제점은 무엇입니까? 그것은 종종 중대한 용어로 사용되기 때문에 질문 :

완벽하게 작동하는이 코드의 부주의 한 라벨링을 피해야합니까?

대답은 '아니오'입니다. 라벨링 보증되며 용어 자체는 기능 코드를 명확하게 의미합니다. 요점은 그것이 기능 이라는 것이 아니라 그것이 어떻게 기능 하는가 입니다.

어떤 경우에는 레거시 코드에 아무런 문제가 없습니다. 나쁜 말이 아닙니다. 레거시 코드 / 시스템은 악이 아닙니다. 그들은 때때로 약간, 때로는 많은 먼지를 모았습니다.

레거시 된다 오래된 시스템이 더 이상 고객의 요구 (모두의) 역할을 할 수 없습니다 때. 레이블은 우리가 조심해야 할 레이블입니다. 그렇지 않으면 단순히 비용 / 이익 방정식 일뿐입니다. 업그레이드 비용이 혜택 비용 (미래의 유지 관리 비용 절감 포함)보다 낮 으면 업그레이드하고 그렇지 않은 경우에는 그대로 두십시오. 일반적으로 "세무 감사"를 위해 예약 한 것과 같은 톤으로 "레거시"라는 단어를 내뱉을 필요가 없습니다. 완벽하게 괜찮은 상황입니다.


즉, 세금 감사는 완벽하게 괜찮은 상황이어야합니다.
Florian Margaine

나는 말할 것입니다 : 더 이상 기존 기술 스택으로 확장 할 수없는 시스템.
Ramiz Uddin

40

일반적으로 언어로 작성되었거나 일반적으로 새로운 개발을 수행하지 않는 시스템을 기반으로한다는 의미입니다.

예를 들어 대부분의 장소는 Cobol에서 새 프로그램을 작성하지 않습니다. 그러나 비즈니스의 많은 부분이 Cobol로 작성된 앱에서 실행될 수 있습니다. 따라서 해당 앱에는 "레거시"라는 레이블이 붙어 있습니다.


이 답변에 가장 동의합니다. 레거시는 지원하지 않으려는 성가신 (아직 현대적인) 코드가 아닌 구식 플랫폼에 붙어 있습니다. 레거시 코드는 종종 꽤 좋으며 (그렇지 않으면 아무도 신경 쓰지 않을 것입니다!)하지만 일반적으로 폐기 된 하드웨어 및 구식 언어 / 라이브러리 / 데이터베이스 등으로 혼잡합니다.
Satanicpuppy

3
@Satanicpuppy : 나는 단순히 동의 할 수 없다-나는 어떤 특정 하드웨어, 라이브러리 또는 데이터베이스에 묶이지 않은 Java를 (예를 들어) 다루었 다. Java로 다시 작성되므로 언어도 문제가되지 않았습니다). 또한 일부 코드 처리 한 특정 하드웨어에 묶여 있지만, 여전히 한 간신히 은 "기존의"범주에 테두리.
Jerry Coffin

4
@ jerry : 그래서 무엇이 유산이 되었습니까? 레거시는 "나쁜"의 동의어가 아닙니다.
Satanicpuppy

1
내가 생각하는 경우에는 상당히 큰 분산 시스템이었습니다 (BEA Tuxedo를 중심으로 구축 됨). 디자인은 동기화가 필요한 횟수 / 장소 를 최대화 하여 동기화에 대해 가르치기위한 교과서 시나리오를 기반으로 한 것 같습니다 . 그것은 교과서에는 의미가 있지만 실제 디자인 에는 끔찍 합니다. 교체를 설계하는 것조차도 다년간의 프로젝트 일 정도로 충분히 컸습니다. 시스템은 비즈니스 에 완전히 필요 했기 때문에 가동 중지 시간없이 단계적으로 교체해야했습니다 .
Jerry Coffin

1
@Cawas : @Chad의 대답은 새 시스템이 다른 언어로 수행되거나 다른 하드웨어 등을 사용하는 경우 / 적용 될 때 나타납니다. 이것은 여전히 ​​Java를 사용하여 여전히 Tuxedo 등을 사용하여 다시 개발되고 있습니다. 나는 그것을 적용하는 것으로 보지 않습니다.
Jerry Coffin

28

레거시 (Legacy)는 작업하는 것 보다 대체하려는 코드를 의미합니다 . 대부분의 프로그래머가 대부분의 기존 코드에 대한 태도를 고려할 때 일반적으로 현재 적극적으로 작성하는 것을 제외하고 거의 모든 것을 포함합니다 (그리고 냉동 된 디자인으로 코딩 해야하는 대규모 프로젝트, 심지어는 순간도 포함될 수 있습니다).

  1. "오히려"라는 강조는 레거시 코드가 그렇지 않더라도 코드를 계속 사용한다는 것을 의미합니다. 그래도 강조가 충분하지는 않습니다. 그 이유는 다양 할 수 있습니다. 일부는 실제로 교체하기에는 너무 크고 복잡합니다. 다른 것은 다른 시스템에 대한 인터페이스입니다. 또 다른 사람들은 정치와 성격에 의해 움직입니다 (예를 들어, 코드는 끔찍하지만 부스 아가씨는 훌륭했습니다).
  2. 내가 충분히 강조하지 않은 또 다른 요점은 코드 품질 이 한 요소 있지만 유일한 요소는 아니며, 특히 중요한 요소는 아니라는 것입니다.
  3. 유일한 결정 요인 으로 단위 테스트 를 추진하는 사람들 은 아내가 귀고리를 떨어 뜨린 귀걸이의 가로등 아래를 보는 사람과 같다고 생각합니다 . 빛이 더 나을지 모르지만 여전히 잘못된 위치를보고 있습니다. 쿨 에이드마시기 전에 생각하십시오 .
  4. (3의 추론) 일부 사람들은 자신이 실제로 원하는 것보다 자신이 원하는 방식에 대해 더 많이 이야기하고있는 것 같습니다. 경우 존 Conways ' 생활의 게임 에 대한 애플 IIc 형 플러스는 기존 아니다 그것이 처음부터 다시 구현에 쉽게 충분히 작고 간단 때문입니다. 지금까지 작성된 가장 완벽한 단위 테스트는 단일 iota를 변경하지 않습니다 .

마지막 요점은 종종 사실이라고 생각하는 다른 두 가지 요점으로 이어집니다.

첫째, 코드는 실제로는 안되는 경우에도 종종 레거시로 유지됩니다. 상위 수준의 관리자는 일반적으로 시스템을 다시 구현하는 데 초기 구현보다 많은 비용이들 것으로 가정합니다.

둘째, 단위 테스트는 양날의 검입니다. 구현의 현지화 된 변경이 실제로 중요하다고 생각하기가 너무 쉽습니다. 더 큰 시스템에서 크게 개선하기 위해서는 많은 (대부분은 아니더라도) 많은 단위 테스트와 관련이없는 전체 디자인을 자주 (일반적으로?) 변경해야합니다. 불행히도, 단위 테스트의 존재와 그들이 일으키는 태도는 실제로 필요한 변화를 무시하기가 너무 쉽습니다.

아마도 그 예가 도움이 될 것입니다 : 프로그램 에 훌륭한 단위 테스트 가있는 UI 라이브러리와 해당 라이브러리를 사용하는 여러 프로그램이 있다고 가정 해 봅시다 . 고위 경영진의 누군가는 "웹 가능"이 중요하다는 것을 확신하게됩니다. 신중하게 검토 한 후 중간 관리자는 현재 단위 테스트가 로컬 운영 체제의 창 기능을 통해 표시되는 사용자 인터페이스에서 HTML / CSS / AJAX를 통해 원격으로 표시하고 원래의 모든 입력 유효성 검사를 유지하면서 변경하기에 충분하다는 것을 알았습니다.

대단하지 않습니까? 단위 테스트가 얼마나 유용한 지 보여줍니다. 전체 UI의 전체 구현을 교체했지만 모양, 느낌 및 기능이 거의 일관되게 유지되고 모든 사용자 입력이 데이터 무결성을 보장하도록 검증되었습니다. 단위 테스트로 하루를 절약했습니다!

아님! 매우 유연하고 신중하게 단위 테스트를 거친 UI 라이브러리는 사용자와의 시장에서이 프로그램에 대해 웹 기반 UI가 전혀 잘못 작동한다는 사실에 관련된 모든 사람들을 맹목적으로 돕습니다. 실제로 필요한 것은 RESTful 인터페이스 가 있고 웹 자체가 전혀 없는 웹 서비스입니다 .

이제 단위 테스트가 사람들이 시장을 이해하거나 실제로 필요한 것을 깨닫는 능력을 제거하지는 않는다는 것은 사실입니다. 동시에 망치와 못에 관한 오래된 선은 사실상 떠 오릅니다. 당신이뿐만 아니라 때 더 악화 될 수 있는 망치를,하지만이 많은 이 망치로 경험을, 그리고 많은 다른 상황에서 믿을 수 없을만큼 잘 작동 정말 높은 품질의 망치 알고있다. 그것이 많은 상황에서 너무 많은 것들에 아주 좋다는 사실은 그것이 그것이 현재 직무에있어 잘못된 도구 일 때를 인식하기 어렵게 만듭니다.


3
지금, 나는 이것을 표시할지 안할지 모르겠다. 슬프게도 이것이 사실이지만, 그것이 우리가
떠나야

+1. 나는 같은 정도로 대답하려고했다. 레거시는 적극적으로 유지 관리되지 않고 사용되는 모든 코드입니다.
Denis de Bernardy

@Nim : "우리"가 멀어져 야하는 태도라고 생각하지 않습니다. 그것은 명백한 것에 대한 단순한 진술입니다. :-) 잠시 생각하고 새로운 환경에 도착한다면 레거시 코드로 생각할 것이 무엇인지 궁금해하십시오. 적극적으로 개발되고있는 새롭고 멋진 것들을 제외한 모든 것이 될 것입니다.
Denis de Bernardy

@ 제리, 그럼 당신은 단위 테스트를 좋아하지 않습니까? ;)
Nim

1
@Nim : 그렇지 않습니다. 그것들이 유용하다고 생각하지만 자주 묘사되는 만병 통치약 보다 훨씬 짧습니다.
Jerry Coffin 1

17

레거시 코드는 일반적으로 어떤 식 으로든 분리됩니다. 그것을 이해 한 유일한 개발자 인 수석 개발자는 버스에 부딪 쳤으며 그의 노트는 현재 모국어 인 자국어 인 우크라이나어 방언으로 작성되었습니다. 또는 Visual Basic 6.0으로 작성된 내용을 사용할 수도 있습니다.

나는 항상 레거시 코드를 사용합니다. 특성은 다음과 같습니다.

  • 많은 노력 없이는 확장 할 수 없습니다
  • 새 하드웨어로 쉽게 마이그레이션 할 수 없습니다
  • 쉽게 교체하기에는 너무 중요한 비즈니스입니다

그러한 특성이 없다면 아마도 레거시가 아닐 것입니다. 전임자의 Perl 스크립트가 마음에 들지 않으면 동정심을 느끼지만 레거시라고 생각하지 않습니다. 나는 최근에 오래된 Sybase 데이터베이스 에 결합 된 15 세의 Perl 스크립트를 현대화했습니다 . 그것은 신의 코볼 회계 시스템을 아주 조금만 바꾸는 것과 비교할 때 케이크였습니다 .


무서운, 우리의 수석 개발자도 우크라이나 인입니다 ... haha ​​... 나는 당신의 답변의 중간 부분에 동의합니다. 첫 번째 요점은별로 아닙니다. 나는 그것이 개발 팀이 어떻게 구성되어 있는지에 달려 있다고 생각합니다.
Nim

1
lol, 아마도 한 단락에서 모두 버스 드라이버, 우크라이나어 및 VB6 개발자를 화나게했을 것입니다. 그러나 젠장, 나는 웃었다 :)
Darknight

저는 1999 년부터 시간 여행자입니다. Visual Basic 6은 2011 년 이후부터 레거시 를 의미 합니까?
hjk

@hjk 2005 년 C # / asp.net의 출현 이후 거의 모든 것이 흔들릴 것이라고 말하고 싶지만, 2008 년에 Microsoft의 지원이 끝났을 때 확실히
말입니다

12

Michael Feathers는 자신의 저서 인 레거시 코드로 효과적으로 작업하기에서 레거시 코드 를 단위 테스트에서 다루지 않는 코드로 정의합니다. 그것은 내가 동의하는 하나의 정의입니다. 또한 레거시 코드는 오래되었지만 여전히 사용할 수 있다고 생각합니다.


24
이것은 "내가 선택한 방법론을 따르지 않는 것"을 "레거시"로 정의하려고 시도한 경우에 필자가 놀랐다. 싸구려 토론 전술에 불과합니다. 기본적으로 Godwin의 법칙을 따르고 독자가 따르지 않는 모든 사람을 지원하지 않는 (그리고 종종 지원할 수없는) 공격에 불과하다는 것을 즉시 인식하지 못하도록 언어를 간신히 유지하기에 충분합니다. 그의 취향.
Jerry Coffin

4
@ 제리 : 나는 깃털의 정의에 동의합니다. 단위 테스트가없는 코드는 작업하기에 공포입니다. 추론하기 쉽도록 일부를 리팩토링하기로 결정했다면 잊어 버리십시오! 어쨌든 버그와 코드를 소개 할 수 있습니다. 어쨌든 테스트 할 수없는 방법입니다! Feather의 정의가 틀에 박힌 것은 아니지만 레거시 코드로 생생하게 작업 한 사람입니다.
삼키는 엘리시움

10
@devoured : 단위 테스트는 코드 작업 능력에 대한 정확한 리트머스 테스트가 아닙니다. 단위 테스트가 없었지만 산들 바람과 단위 테스트가 있었지만 여전히 악몽이었던 코드를 처리했습니다. 궁극적으로 단위 테스트는 그 자체로는 아무것도 해결하지 못합니다. (예를 들어) 단위로의 나눗셈이 제대로 수행되지 않은 설계에 대한 단위 시험은 여전히 ​​가치가 없으며, 모든 시험 (시험 포함)은 유용한 것을 생산하기 위해 교체되어야합니다.
Jerry Coffin

6
Jerry의 의견에 동의합니다. 단위 테스트의 부재는 단지 코드의 무리 중 하나가 어떤 냄새입니다 (또는 수도 없습니다 ) 불량을 나타냅니다.
smci

4
나는 다시 깃털의 정의와 삼키지 않은 것에 동의합니다. 단위 테스트가 없다는 것은 가장 아름다운 코드 스 니펫조차도 사양이 빠져 있음을 의미하기 때문에 모든 것 입니다. 단위 테스트는 문서의 51 %와 코드 사양의 100 %입니다. 대부분이 누락 된 코드는 문서이며 모든 사양은 레거시로 분류되어야합니다.

8

기술적으로 레거시는 준비된 모든 코드입니다. 따라서 프로덕션 환경에서 바로 레거시입니다. 이미 가치가 있기 때문에 버릴 수는 없습니다. 처리해야합니다.

"시간이되기 전에"이지만 "여전히 두통" 입니다.


5

레거시 코드는 코드 기반에만 남아있는 코드로, 그렇지 않으면 많은 작업이 중단 될 수 있습니다. 다시 말해, 이전 버전과의 호환성이 유일한 이유입니다.

오히려 그것을 바꾸거나 버릴 수도 있지만 그것에 의존하는 모든 코드를 깨뜨릴 수는 없습니다 (적절하게 적응 할 수없는 코드 일 수 있습니다). 따라서 유지해야하고 때로는 유지 관리해야하지만 모든 새 코드를 작성하지 않기를 바랍니다.

예를 들어 라이브러리 API에서 사용되지 않는 메소드가 있습니다. 그들은 여전히 ​​거기에 있으므로 라이브러리를 업데이트하는 사람이 여전히 그의 프로젝트를 빌드 할 수는 있지만 더 이상 사용되지 않는 것으로 표시되어 컴파일러에 경고를 표시해야합니다.

또 다른 예로는 완전히 폐기 된 OS 버전 용으로 작성된 프로그램을 실행하기 위해 Microsoft가 수행하는 모든 이상한 트릭이 있습니다. 이것의 절정 :

나는 히트 게임 SimCity의 개발자 중 한 명이 자신의 응용 프로그램에 치명적인 버그가 있다고 말했습니다. 사용 가능한 메모리가 실행중인 다른 응용 프로그램에 의해 즉시 포착 될 가능성이있는 Windows에서는 작동하지 않습니다. Windows 팀의 테스터는 다양한 인기있는 응용 프로그램을 검토하여 제대로 작동하는지 테스트했지만 SimCity는 계속 충돌했습니다. 그들은 이것을 SimCity를 분해하고 디버거에서 단계별로 버그를 발견 한 후 SimCity가 실행 중인지 확인한 특수 코드를 추가 한 경우 Windows 개발자에게보고했습니다. 메모리를 비운 후에도 여전히 메모리를 사용할 수 있습니다.
-소프트웨어의 Joel


4

유산에는 상속이 수반됩니다. 레거시 코드는 단순히 과거로부터 상속받은 코드입니다. 이전에 직접 작성한 경우에도 기존 코드입니다!

다른 모든 고려 사항은 기본적으로 현재 프로젝트를 위해 특별히 작성하지 않았다는 사실에서 비롯됩니다. 반드시 나쁜 것은 아닙니다.


과거는 1 일, 1 시간 또는 1 년일 수 있습니다. 그것이 레거시가되지는 않습니다.
빈스 파누치

2

내 의견은 레거시 코드로 간주되는 것은 여러 가지에 달려 있으며 '레거시'태그는 조직에 따라 다릅니다.

실행중인 하드웨어 / OS가 오래되었고 공급 업체가 중단 한 경우 (파업 1)

어떤 이유로 든 다시 작성하는 것보다 문제를 해결하는 것이 더 많은 경우

  • 원래 개발자가 사라졌습니다
  • 프로그램이 잘못 작성되었습니다
  • 최신 플랫폼에서 더 잘 수행 할 수 있으며 여전히 회사에 가치가 있습니다.

그렇게하기 위해

  • 원본 소스를 더 이상 사용할 수 없거나 누락 된 조각

스트라이크 2.

여러 조직을 하나로 합치기-Strike 3-한쪽은 레거시로 태그 지정 될 수 있습니다.

타사 응용 프로그램 및 / 또는 서비스로 판매되는 더 좋고 저렴한 대안이 있습니까?

조직이 매일 운영 할 때 신기술보다 일관성이 중요하게 여겨지는 병원이나 학군 같은 것입니까? 상용 / 경쟁 조직에서 동일한 애플리케이션에 비해 애플리케이션을 레거시로 간주하는 데 시간이 더 오래 걸립니다.

회사가 고객이 필요로하는 것을 수행하기 위해 응용 프로그램을 지속적으로 향상 / 지원하는 소규모 개발 회사 인 경우 레거시 코드 또는 '오래된'코드로 간주됩니다. 나는 Mc2Ok라는 회사를 알고 있습니다. 그들은 Windows 3.1과 같은 것으로 소프트웨어를 개발했으며 계속 발전시켜 나갔습니다. 여전히 Windows 3.1 모양과 느낌이 많이 있지만 웹 인터페이스도 추가되었습니다. 그것은 두 사람의 개발자 회사 (내 추측)이며, 그들이 일을 그만두면 레거시로 간주되고 그것을 사용하면 1 ~ 2 년 후에 마이그레이션 할 시간이라고 말할 것입니다. 그러나 그것은 또 다른 10 년 이상이 될 수 있습니다.

때로는 관리가 변경 될 때 많은 영향을 미치는 파동이 바뀔 수 있습니다. 새로운 관리의 영향력에 따라 많은 응용 프로그램이 기존의 다른 응용 프로그램으로 전환 될 수 있습니다.

각 조직은 '레거시 코드'가 무엇을 의미하는지 정의해야합니다. 나는 매주 일요일 시간 분류를 통해 어떤 조직이 찾고 있는지 알아 보았습니다. 그것은 더 이상 관련이없는 것, 즉 레거시에 대한 나의 기압계였습니다. 음, Sunday Times 는 더 이상 관련이 없습니다 :-) 그리고 우리는 COBOL이 레거시, ASP Classic 이 레거시 등으로 일반화 할 수 있습니다 ... 그러나 각 조직은 응용 프로그램이 레거시로 간주되는 시점을 결정해야한다고 생각합니다.


+1, 좋은 답변-조직의 관점에서 어떤 유산을 고려하는 것이 좋습니다 ...
Nim

0

코드는 변경하기를 두려워 할 때 레거시입니다. 해당 코드의 변경으로 전체 시스템이 혼동 될 때 훨씬 더 고통 스럽다.

이것이 Michael Feathers의 정의에도 동의하는 이유입니다. 단위 테스트가 좋은 코드는 두려움없이 바뀔 수 있습니다.

또한 레거시 코드는 오래된 코드와 관련이 없다고 생각합니다. 처음부터 레거시 코드를 작성할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.