나는 실제로 내 경력에서 상당히 중요한 리팩토링을 세 번 겪었습니다. 코드가 붕괴되는 경향이 있으므로 코드 기반이 충분히 길면 큰 리 팩터를 피할 수 없습니다. 내 모든 예제는 개인 코드베이스에 있었으며 공개 예제를 찾기 어려운 이유를 설명 할 수 있습니다.
처음은 도트 매트릭스 프린터에서만 작동하는 기본 아키텍처를 가진 응용 프로그램이었습니다. 회사에서 더 이상 리본을 공급할 공급 업체를 찾을 수 없을 때 레이저 프린터와 함께 작동하도록 지정했습니다.
두 번째는 C에서 Java로 수백 개의 자동 테스트 스크립트를 마이그레이션하는 것이 었습니다. 부분적으로 더 나은 크로스 플랫폼 기능이 필요했고, 일부는 새로운 C 개발자를 고용하기가 어려웠 기 때문입니다.
세 번째로 여전히 중간에 있습니다. 커플 링을 줄이고 플랫폼 간 목적으로 단위 테스트를 수행 할 수 있도록 거대한 단일 응용 프로그램을 모듈화하고 있습니다.
나는 산을 등반하려는 노력을 비교합니다. 당신은이 거대한 목표를 앞두고 있지만, 거시적 차원에서는 다루지 않습니다. 한 번에 하나의 손잡이를 가져 가고 항상 대체 위치를 유지하고 다음 안전 장치가 제자리에 올 때까지 이전 안전 장치를 분리하지 마십시오. 작은 점진적으로 개선하기 시작하고 잠시 후 돌아 서면이 아름다운 전망이 나타납니다.
예를 들어 60,000 개의 고 결합 코드 파일이 있다고 가정 해 봅시다. 단위 테스트를 시작하기를 원하지만 종속성으로 인해 불가능합니다. 어떻게 고치나요? 하나의 파일을 분리 합니다. 자동화 된 테스트를 추가합니다. 계속하기 전에 안정된 땅으로 돌아옵니다. 59,999 번 반복하십시오.
단순하게 들리면 간단하기 때문 입니다 . 쉽지는 않지만 간단합니다. 처음에는 어떤 진전도 눈치 채기가 어렵습니다. 우리는 불가능한 리팩터링에 대해 2 년을 보냈고, 끝날 때까지 몇 년을 앞질렀을 것입니다. 그러나 되돌아 보면 코드가 이미 얼마나 나아 졌는지 갑자기 깨닫고 새로운 기능을 계속 제공 할 수있었습니다. 그 동안 고객에게
다른 두 번 같은 방식으로 작동했습니다. 응용 프로그램을 항상 작동 상태로 유지하면서 취할 수있는 가장 작은 안전한 단계를 찾으십시오. 당신은 올바른 방향으로 가고 있는지 확인하기 위해 큰 그림에 대해서만 걱정합니다. 모든 행동은 작고 꾸준하며 점진적입니다.