복사-붙여 넣기가 훌륭하고 DRY는 복사 된 템플릿이나 사본을 향후에 유지 관리하거나 발전시킬 필요가없는 프로그램을 만드는 것이 중요하지 않습니다. 이 두 소프트웨어 구성 요소의 수명주기가 완전히 다른 경우 공통 코드를 리팩토링하여 자체 개발중인 자체 라이브러리에 리팩토링하여 이들을 함께 결합하면 실제로는 노력에 예측할 수없는 영향을 줄 수 있습니다. 반면에 하나의 프로그램 또는 프로그램 시스템 내에서 코드 섹션을 복사 할 때 일반적으로이 모든 부분은 동일한 수명주기를 갖습니다. DRY 및 프로젝트 관리에 이것이 무엇을 의미하는지 아래에서 설명하겠습니다.
예를 들어, 컴퓨터 게임 산업은 최대 몇 개월 또는 1 년 동안 짧은 기간 동안 유지해야하는 많은 프로그램을 생성하고, 그 시간이 지나면 복사 붙여 넣기를 수행합니다. 유지 보수 기간이 끝난 이전 게임의 오래된 코드를 새 게임의 코드 기반으로 완벽하게 처리하면 속도가 빨라질 수 있습니다.
불행히도, 지난 몇 년 동안 처리해야했던 대부분의 프로그램의 수명주기는 그와 매우 다릅니다. 나에게 도착한 요구 사항 또는 버그 수정 요청의 98 %가 변경 요청 이었습니다.기존 프로그램의 경우 또한 기존 소프트웨어에서 무언가를 변경해야 할 때마다 "프로젝트 관리"또는 계획은 테스트 및 디버깅 노력이 매우 적을 때 가장 잘 작동합니다. 이는 한 곳에서 무언가를 변경하더라도 복사로 인해 발생하지 않습니다. 붙여 넣은 비즈니스 로직을 사용하면 코드베이스에서 다른 12 곳을 변경해야한다는 것을 쉽게 잊을 수 있습니다. 모든 장소를 찾더라도 모든 장소를 변경하고 변경 사항을 테스트하는 시간은 변경해야 할 장소가 한 곳인 것처럼 훨씬 높습니다. 따라서 변경 사항을 정확하게 예측하여 프로젝트 예산과 쉽게 충돌 할 수있는 비용보다 수십 배 높은 비용이 발생할 수 있습니다.
TLDR-원본 또는 사본의 버그 수정 및 유지 관리가 필요하지 않은 프로그램을 개발할 때마다 자유롭게 복사하십시오. 그러나 귀하, 귀하의 팀 또는 회사가 책임을 지거나 책임을지는 경우 가능할 때마다 DRY를 적용하십시오.
예
부록으로, "버그 수정 및 유지 관리"의 의미와 실제 사례를 통해 특히 하나의 제품 내부에서 계획을 예측할 수없는 방법에 대해 설명하겠습니다. 실제로 이러한 종류의 일이 실제로는 100 인스턴스가 아니라 실제로 발생하는 것을 보았지만 복제 인스턴스가 하나만 있으면 문제가 시작될 수도 있습니다.
작업 : 응용 프로그램에 대해 100 개의 서로 다른 보고서를 작성합니다. 각 보고서는 매우 유사하게 보이며, 보고서 간의 요구 사항 차이, 논리가 다르지만 전혀 차이가 없습니다.
이 작업을 수행하는 개발자는 첫 번째 작업을 생성하고 (3 일이 소요될 수 있음) QA 및 고객 검사가 완료되어 일부 버그가 수정되거나 사소한 버그 수정이 완료된 후 정상적으로 실행되는 것 같습니다. 그런 다음 전체 내용을 복사하여 붙여넣고 다음 보고서를 수정하여 다음 보고서를 작성하기 시작했으며 새 보고서마다 평균 ~ 1 일이 필요했습니다. 언뜻보기에 매우 예측 가능합니다 ...
이제 100 개의 보고서가 "준비"되면 프로그램이 실제 프로덕션으로 이동하고 QA 중에 간과 된 몇 가지 문제가 발생합니다. 성능 문제가 있거나, 보고서가 정기적으로 충돌하거나, 다른 작업이 의도 한대로 작동하지 않을 수 있습니다. 이제 DRY 원칙을 적용했을 때 코드 기반을 한 곳에서 변경하면 이러한 문제의 90 %를 해결할 수 있습니다. 그러나 복사-붙여 넣기 방식으로 인해 문제는 한 번이 아니라 100 번 해결되어야합니다. 한 보고서에서 다른 보고서로 변경 사항이 이미 적용되어 있기 때문에 개발자는 첫 번째 보고서에 대한 수정 사항을 다른 보고서에 신속하게 복사하여 붙여 넣을 수 없습니다. 그는 100 개의 보고서를 모두보고 수정하여 변경 사항을 번역해야합니다. 보고, 테스트 및 개별적으로 디버깅 할 수 있습니다. PM의 경우 이것은 정말 어려워지기 시작합니다. 그는 물론 "일반적인"버그 수정 (3 시간이라고하자)에 시간을 걸리고 이것을 100으로 곱할 수 있지만, 실제로 이것은 아마도 잘못된 추정 일 것입니다. 다른 사람보다 만들기가 더 쉬울 수 있습니다. 그리고이 추정이 정확하더라도 디버깅 비용이 필요한만큼 100 배나 높아지면 회사에 많은 비용이 들게됩니다.
다음에 고객이 모든 보고서에서 회사 엠블럼의 색상을 변경하거나 페이지 크기를 구성 할 수 있도록하거나 비슷한 방식으로 모든 보고서에 영향을 미치는 다른 새로운 요구 사항을 요구할 때도 마찬가지입니다. 따라서 이러한 상황이 발생하면 비용을 추정하고 코드가 건조되었을 때 지불해야 할 가격의 100 배를 고객에게 청구 할 수 있습니다. 그러나 이것을 몇 번 시도하면 고객은 엄청난 진화 비용을 기꺼이 지불하지 않기 때문에 프로젝트를 취소합니다. 그리고 아마도 그 시점에서 누군가가 왜 이런 일이 발생했는지 질문 하고이 카피 붙여 넣기 프로그래밍을 결정한 사람을 손가락으로 가리킬 것입니다.
내 요점은 : 당신이 다른 사람들을 위해 소프트웨어를 생산할 때, 당신은 항상 일을 작동시키고, 버그를 수정하고, 변화하는 요구 사항에 프로그램을 적응시키는 등의 책임을 항상 단기간 동안 가지고 있습니다. 그린 필드 프로젝트에서도, 부품은 초기에 계획된 개발 노력보다 훨씬 더 빠르게 추가 할 수 있습니다. 특히 복사하여 붙여 넣은 모든 코드가 하나의 제품에 포함 된 경우 책임 기간은 모든 부분에 대해 동일합니다. 더 이상 사용되지 않는 죽은 프로젝트에서 일부 오래된 코드를 복사하여 붙여 넣은 상황과는 다릅니다. 적극적인 유지 관리.