나는 Wikipedia의 요약에 다소 부분적이다 .
레거시 시스템은 새로운 기술이나 작업을보다 효율적으로 수행 할 수있는 방법이 있더라도 여전히 사용자의 요구에 맞게 작동하기 때문에 계속 사용되는 기존의 방법, 기술, 컴퓨터 시스템 또는 응용 프로그램입니다.
다른 사람들이 답변에 설명하는 많은 부분이 코드가 "레거시"가 되는 이유 입니다. 그러나 중요한 질문 자체는 다음과 같습니다.
그러나 여전히 프로덕션 시스템에서 사용되므로 실제로 레거시입니까? 그리고 무엇이 레거시입니까?
그것이 여전히 프로덕션 환경에서 사용되고 있다는 사실 은 정확하게 레거시를 만드는 것 입니다. 코드가 제대로 작동하지 않거나 더 이상 프로덕션에서 사용되지 않으면 해당 코드는 각각 "손상"또는 "종료"됩니다. 레거시 는 여전히 사용 중이며 제대로 작동하지만 더 이상 일반적으로 사용되지 않는 디자인이나 기술을 통합 함을 의미합니다.
(a) 업그레이드 / 업데이트를 원하지만 업그레이드 할 수 없거나 (b) 여전히 업그레이드 도중에있는 모든 코드 또는 시스템은 레거시 시스템입니다. 이것은 리팩토링 이나 일반적인 코드 정리를 의미하지 않으며 , 새로운 프레임 워크 나 새로운 플랫폼을 사용하여 디자인을 크게 변경 하는 것을 의미 합니다.
시스템이나 코드 가 레거시 가 되는 이유는 여러 가지가 있습니다 .
정기 유지 관리 또는 소프트웨어 부패가 없습니다 . 응용 프로그램을 정기적으로 유지 관리하지 않으면 소프트웨어 환경의 주요 변경 사항에 보조를 맞출 수 없습니다. 이는 단순한 소홀 때문일 수도 있고 비즈니스 우선 순위 또는 예산 제약에 따라 의도적으로 선택할 수도 있습니다.
테스트 부족. 또 다른 답변 은 레거시 코드 인 테스트에서 다루지 않는 코드에 대한 대중 저자의 쌍곡 주장을 언급합니다. 이건 정말 정확한 정의가 아니라 그것은 이다 가능한 근본 원인; 좋은 테스트 (자동 또는 수동)없이 개발자는 소심하고 무언가를 깨뜨리는 것에 대해 걱정하여 위의 "소프트웨어 썩음"을 초래하기 때문에 주요 변경을 두려워합니다.
대형 오픈 소스 라이브러리 또는 프레임 워크를 사용하는 프로젝트에서 특히 교묘 한 간과하는 요소 인 Rev-locking (상업용 도구에서도 마찬가지 임). 종종 프레임 워크 / 라이브러리에 대한 주요 사용자 정의가 수행되어 업그레이드가 엄청나게 어렵거나 비쌉니다. 따라서 시스템은 구식 (더 이상 지원되지 않는) 플랫폼에서 실행되기 때문에 레거시가됩니다.
소스 코드는 더 이상 사용할 수 없습니다. 즉, 시스템을 추가하거나 변경할 수 없습니다. 점진적 / 반복적으로 수정되는 것과는 달리 업그레이드를 위해 이러한 시스템을 다시 작성해야하므로 많은 회사들이 귀찮게하지 않을 것입니다.
코드베이스에 대한 업데이트를 느리게하거나 중지시키는 것은 해당 코드베이스가 레거시가 될 수 있습니다.
이제 별도의 통계는 없지만 암시적인 질문은 레거시 코드의 문제점은 무엇입니까? 그것은 종종 중대한 용어로 사용되기 때문에 질문 :
완벽하게 작동하는이 코드의 부주의 한 라벨링을 피해야합니까?
대답은 '아니오'입니다. 라벨링 이 보증되며 용어 자체는 기능 코드를 명확하게 의미합니다. 요점은 그것이 기능 이라는 것이 아니라 그것이 어떻게 기능 하는가 입니다.
어떤 경우에는 레거시 코드에 아무런 문제가 없습니다. 나쁜 말이 아닙니다. 레거시 코드 / 시스템은 악이 아닙니다. 그들은 때때로 약간, 때로는 많은 먼지를 모았습니다.
레거시 된다 오래된 시스템이 더 이상 고객의 요구 (모두의) 역할을 할 수 없습니다 때. 그 레이블은 우리가 조심해야 할 레이블입니다. 그렇지 않으면 단순히 비용 / 이익 방정식 일뿐입니다. 업그레이드 비용이 혜택 비용 (미래의 유지 관리 비용 절감 포함)보다 낮 으면 업그레이드하고 그렇지 않은 경우에는 그대로 두십시오. 일반적으로 "세무 감사"를 위해 예약 한 것과 같은 톤으로 "레거시"라는 단어를 내뱉을 필요가 없습니다. 완벽하게 괜찮은 상황입니다.