Tôi đã làm việc trên một cơ sở mã rất lớn mà ban đầu không có bài kiểm tra đơn vị. Bằng cách làm theo một vài thực tiễn, chúng tôi bây giờ (sau vài năm) có hầu hết các cơ sở mã được kiểm tra.
Tất cả các mã mới phải có bài kiểm tra đơn vị.
Tất cả các mã thay đổi phải có các bài kiểm tra đơn vị được thêm vào nó.
Cách mà chúng tôi đã thêm các thử nghiệm vào mã cũ một cách an toàn mà không phá vỡ nó chủ yếu là sử dụng phương pháp cơ bản sau:
Chọn một phần nhỏ của mã mà bạn cần thay đổi chức năng của.
- Cố gắng tạo các thử nghiệm tích hợp cấp hệ thống để bao quanh mã. Do sự phức tạp của thử nghiệm ở cấp độ này, các thử nghiệm này sẽ chỉ tạo thành một thử nghiệm "khói" để nhận ra những sai lầm lớn.
Giới thiệu các giao diện bạn cần để có thể kiểm tra mã bạn đang thay đổi. Sử dụng các kỹ thuật Tái cấu trúc bao gồm các chuỗi thay đổi rất nhỏ mà bạn có độ tin cậy cao là chính xác. Cố gắng sử dụng công cụ hỗ trợ nếu có thể. Bạn có thể làm điều này bằng cách, ví dụ, di chuyển / trích xuất phương thức bạn đang thay đổi vào đối tượng của chính nó. Kiểm tra các thay đổi của bạn thường xuyên để bạn có thể hoàn nguyên. Thường xuyên xem xét lại cách bạn thực hiện các thay đổi bằng cách đi qua lịch sử kiểm soát sửa đổi.
Cố gắng thực hiện tối thiểu về các thay đổi được yêu cầu để phá vỡ các phụ thuộc đang ngăn bạn thêm các bài kiểm tra.
- Viết các bài kiểm tra đến mức có thể bao gồm chức năng của mã mà bạn sẽ thay đổi. Kiểm tra thường xuyên và xem xét ngang hàng tất cả các thay đổi.
- Viết bài kiểm tra cho sự thay đổi chức năng / chức năng mới.
- Thực hiện chức năng (đây là chu trình TDD bình thường của bạn)
- Đảm bảo tái cấu trúc các khu vực bạn đã thực hiện trong các thử nghiệm (red-green-refactor).
Chúng tôi thấy rằng chúng tôi càng làm điều này, nó càng dễ dàng hơn. Như mỗi lần bạn quay lại cơ sở mã, nó sẽ tốt hơn một chút.
Chúng tôi đã chứng kiến sự sụt giảm lớn về số lượng lỗi thông qua người kiểm tra QA của chúng tôi. Với các hồi quy chức năng hiện nay gần như chưa từng nghe thấy, vì vậy tôi nghĩ rằng nó đáng để nỗ lực cho chúng tôi.