종종 "복잡한"패치 / 변경 목록은 한 번에 많은 다른 작업을 수행하는 것입니다. 새로운 코드, 삭제 된 코드, 리팩토링 된 코드, 이동 된 코드, 확장 된 테스트가 있습니다. 큰 그림을보기가 어렵습니다.
일반적인 단서 힌트는 패치가 크지 만 설명이 작다는 것입니다 : "Implement $ FOO".
그러한 패치를 처리하는 합리적인 방법은 패치를 일련의 더 작은 독립된 조각으로 나누는 것입니다. 단일 책임 원칙에 따르면 함수가 한 가지만 수행해야한다고하는 것처럼 패치도 한 가지에만 중점을 두어야합니다.
예를 들어, 첫 번째 패치에는 기능적 변경을하지 않는 완전히 기계적인 리팩토링이 포함될 수 있으며, 마지막 패치는 산만 함과 청어가 적고 $ FOO의 실제 구현 및 테스트에 중점을 둘 수 있습니다.
많은 새로운 코드가 필요한 기능의 경우, 시리즈의 마지막 패치가 실제로 새로운 코드 (플래그 플립)를 호출 할 때까지 제품의 동작을 변경하지 않는 테스트 가능한 청크로 새 코드를 도입 할 수 있습니다.
이것을 재치있게 수행하는 것에 관해서는, 나는 보통 그것을 내 문제라고 말한 다음 저자의 도움을 요청한다. 함께?" 더 작은 단계에 대해 구체적인 제안을해야하는 경우가 있습니다.
"Implement $ FOO"와 같은 큰 패치는 다음과 같은 일련의 패치로 바뀝니다.
- $ FOO를 구현하기 위해 vector 이외의 시퀀스로 호출해야하므로 한 쌍의 반복자를 사용하는 새 버전의 Frobnicate를 소개합니다.
- Frobnicate의 기존 발신자를 모두 전환하여 새 버전을 사용하십시오.
- 이전 Frobnicate를 삭제하십시오.
- Frobnicate는 너무 많은 일을하고있었습니다. 리플 럼핑 단계를 자체 방법으로 인수 화하고 테스트를 추가하십시오.
- 테스트와 함께 Zerzify를 소개하십시오. 아직 사용하지는 않았지만 $ FOO에 필요합니다.
- Zerzify 및 새로운 Frobnicate 측면에서 $ FOO를 구현하십시오.
1-5 단계는 제품의 기능을 변경하지 않습니다. 그들은 당신이 모든 올바른 시험을 가지고 있는지 확인하는 것을 포함하여 사소한 검토입니다. 6 단계가 여전히 "복잡한"경우에도 최소한 $ FOO에 중점을 둡니다. 그리고 로그는 당연히 $ FOO가 어떻게 구현되었는지 (그리고 Frobnicate가 변경된 이유)에 대한 더 나은 아이디어를 제공합니다.