2010-07-08 42 views
12

Tình huống: hàng triệu dòng mã, hơn một trăm nhà phát triển và các lỗi thường gặp. Chúng tôi muốn tránh lặp lại lỗi và chúng tôi muốn cải thiện thiết kế mã (ai không?).Làm cách nào để bạn có thể triển khai thử nghiệm phát triển theo hướng thử nghiệm với mã cũ?

Kiểm tra phát triển theo hướng (thử nghiệm đơn vị đầu tiên, sau đó mã) âm thanh lý tưởng: viết một trường hợp thử nghiệm cho từng chức năng.

Nhưng với quá nhiều mã được viết, TDD có thể được triển khai như thế nào? Bạn bắt đầu từ đâu - với các chức năng cấp thấp?

Hoặc chúng ta có quá muộn để bắt đầu TDD không?

Trả lời

21

Bắt đầu với Working Effectively with Legacy Code.

Nó không thực sự TDD nếu bạn đang bắt đầu với mã di sản - nhưng tất cả mã hóa của bạn có thể là TDD. Khi bạn giải quyết một vấn đề mới, hãy viết một bài kiểm tra cho nó. Nếu bạn không thể, bởi vì các lớp kế thừa là quá khó để kiểm tra, sau đó bắt đầu viết các bài kiểm tra cho chúng, cắt bỏ các bit, và bao gồm các bit với các bài kiểm tra.

Refactor the Low-Hanging Fruit.

Để tránh các lỗi lặp lại: được đưa ra một lỗi ví dụ, viết một bài kiểm tra thể hiện nó. Nó có thể là một thử nghiệm tương đối rộng mà chỉ mô phỏng hoạt động của người dùng; chưa thử nghiệm đơn vị. Đảm bảo kiểm tra không thành công. Làm nghiên cứu của bạn; tìm ra lý do tại sao thử nghiệm không thành công. Bây giờ - điều này là quan trọng - trước khi sửa lỗi, viết một bài kiểm tra đơn vị thể hiện lỗi. Sửa lỗi, và bây giờ bạn đã có hai bài kiểm tra, ít nhất một trong số chúng nhanh, bảo vệ bạn khỏi các hồi quy.

+2

+1: Chìa khóa ở đây là * không * thử và toàn diện trang bị thêm các thử nghiệm đơn vị. – Richard

+1

@Carl - tóm tắt tốt đẹp. Tôi đặc biệt thích làm thế nào bạn đã có một bài kiểm tra đơn vị và một văn bản hệ thống ra khỏi lỗi. – Wikis

+0

@Richard - Tôi đang bối rối - không phải là điều ngược lại với những gì Carl đang nói? – Wikis

2

Vì Carl đề xuất một cuốn sách tôi sẽ đề xuất một cuốn sách khác: Roy Osherove's Art of Unit Testing có toàn bộ chương về "Làm việc với mã cũ". Tôi chưa đọc chương đó, nhưng 5 chương đầu tiên là tuyệt vời, và tôi mong chờ nó.

+0

FYI Tôi rất thích so sánh các định nghĩa của Osherove đối với mã di sản: "mã nguồn liên quan đến công nghệ không còn được hỗ trợ" "bất kỳ ứng dụng nào cũ hơn đang được bảo trì" "mã không có kiểm tra" (từ cuốn sách của Feathers) – orbfish

+0

@Carl cảm ơn vì liên kết C2, thật vui nhộn. – orbfish

+0

@Orbfish - Cảm ơn mẹo. Có lẽ khi bạn đọc nó, bạn sẽ quay lại và chia sẻ một số hiểu biết? – Wikis

Các vấn đề liên quan