답의 한 부분은 리팩토링 입니다.
먼저 실수로 변경 사항을 위반하지 않도록 단위 테스트 작성을 시작하십시오. 그런 다음 작은 단계에서 디자인 개선, 중복 제거 등을 시작하고, 각 단계 후에 단위 테스트를 실행하고, 테스트에 실패하면 문제를 해결하거나, 쉽게 해결할 수있는 것보다 더 큰 문제가 발생하면 즉시 되돌립니다.
다른 부분은 교육 입니다.
사람들은 잘못된 코드를 남기지 않도록 배워야합니다. 습관과 사고 과정이 변화하기 어려우며 (때로는 불가능하기 때문에) 이것은 확실히 장기적인 싸움 이다. 그러나 그것 없이는 리팩토링을 위해 계속해서 나쁜 코드 비명 소리가 계속 나옵니다.
좋은 코딩 습관과 나쁜 코딩 습관에 대한 토론을 시작하고 전자의 장점을 전파하기 위해 그룹 코드 검토를 수행 할 수 있습니다. "이와 같은 코드를 작성해서는 안됩니다"라고 말하는 것만으로는 충분하지 않으며 사람들에게 논리와 어려운 사실을 설득해야합니다. 마찬가지로 "당신이있는 경우에 방법이 조각은 코드베이스를 통해 중복 N 번, 당신은 기회가 버그가 그 방법이 발견되면,이 방법은 코드의 각 사본에서 수정 될 것입니다 무엇을 생각하십니까?"
귀사 는 컨설턴트에 대한 인센티브 및 수용 기준 을 수정 해야 할 수도 있습니다. 만약 실수로 코드를 작성하지 않아도된다면 더 쉬운 길을 계속 선택하게 될 것입니다. 회사가 장기적인 유지 보수성에 대해 "빠른 배송"을 계속 평가한다면 아무것도 변하지 않을 것입니다 :-( 따라서이를 관리 담당자 와 논의해야 할 수도 있습니다. 이해하고 유지. 생략 리팩토링은 신용 카드에 하는것 부채처럼. 잠시 동안 그것을 벗어날 수는 있지만 구매 습관과 부채를 적극적으로 관리하지 않으면 언젠가는 어깨에 부딪 칠 것입니다. 소프트웨어 프로젝트의 수명 동안 파산은 프로젝트를 유지 보수 할 수 없게되었을 때입니다. 기존 코드베이스에 새 기능을 추가하는 것보다 처음부터 다시 작성하는 것이 더 쉬워집니다. 또는 사용자는 열등한 수준의 지원 및 기능에 익숙해 져서 단순히 경쟁 업체로 전환 할 수 있습니다.