Thông thường, các bản vá / thay đổi "phức tạp" là những thứ làm nhiều việc khác nhau cùng một lúc. Có mã mới, mã đã xóa, mã được cấu trúc lại, mã di chuyển, thử nghiệm mở rộng; nó làm cho nó khó nhìn thấy bức tranh lớn
Một manh mối phổ biến là bản vá rất lớn nhưng mô tả của nó rất nhỏ: "Triển khai $ FOO."
Một cách hợp lý để xử lý một bản vá như vậy là yêu cầu nó được chia thành một loạt các mảnh nhỏ hơn, khép kín. Giống như nguyên tắc trách nhiệm đơn lẻ nói rằng một chức năng chỉ nên làm một việc, một bản vá cũng chỉ tập trung vào một việc.
Ví dụ, các bản vá đầu tiên có thể chứa các phép tái cấu trúc cơ học hoàn toàn không có thay đổi chức năng, và sau đó bản vá cuối cùng có thể tập trung vào việc triển khai và thử nghiệm thực tế của $ FOO với ít phiền nhiễu và bầy đỏ hơn.
Đối với chức năng yêu cầu nhiều mã mới, mã mới thường có thể được giới thiệu trong các đoạn có thể kiểm tra, không thay đổi hành vi của sản phẩm cho đến khi bản vá cuối cùng trong chuỗi thực sự gọi mã mới (lật cờ).
Đối với việc thực hiện điều này một cách khéo léo, tôi thường coi đó là vấn đề của mình và sau đó yêu cầu sự giúp đỡ của tác giả: "Tôi gặp khó khăn khi theo dõi mọi thứ đang diễn ra ở đây. Bạn có thể chia bản vá này thành các bước nhỏ hơn để giúp tôi hiểu mọi thứ phù hợp như thế nào không cùng với nhau?" Đôi khi cần phải đưa ra đề xuất cụ thể cho các bước nhỏ hơn.
Vì vậy, bản vá lớn như "Thực hiện $ FOO" biến thành một loạt các bản vá như:
- Giới thiệu một phiên bản mới của Frobnicate có một cặp vòng lặp bởi vì tôi sẽ cần phải gọi nó bằng các chuỗi khác ngoài vector để thực hiện $ FOO.
- Chuyển tất cả những người gọi hiện có của Frobnicate để sử dụng phiên bản mới.
- Xóa Frobnicate cũ.
- Frobnicate đã làm quá nhiều. Yếu tố bước kết hợp vào phương pháp riêng của mình và thêm các bài kiểm tra cho điều đó.
- Giới thiệu Zerzify, với các bài kiểm tra. Chưa được sử dụng, nhưng tôi sẽ cần nó với $ FOO.
- Triển khai $ FOO theo Zerzify và Frobnicate mới.
Lưu ý rằng các bước 1-5 không thực hiện thay đổi chức năng cho sản phẩm. Chúng không quan trọng để xem xét, bao gồm đảm bảo rằng bạn có tất cả các bài kiểm tra phù hợp. Ngay cả khi bước 6 vẫn "phức tạp", ít nhất thì nó cũng tập trung vào $ FOO. Và nhật ký tự nhiên cung cấp cho bạn một ý tưởng tốt hơn nhiều về cách $ FOO được triển khai (và tại sao Frobnicate được thay đổi).