2009-10-14 29 views
7

Tôi có một dự án mà tôi đang xây dựng mà tôi phải thay đổi một phương pháp để hành xử hơi khác nhau. Tôi có một số bài kiểm tra đơn vị đã được xây dựng dựa trên phương pháp đó, nhưng tôi sẽ cần phải thêm nhiều hơn để trang trải hành vi mới mà tôi sẽ thêm vào đó. Có phải dạng tốt để thay đổi/thêm các bài kiểm tra đó trước khi thực hiện thay đổi mã hay bạn thay đổi mã của mình, sửa các bài kiểm tra bị hỏng và thêm các bài kiểm tra mới để bao gồm hành vi mới?Nếu bạn thay đổi mã có kiểm tra đơn vị đối với nó, bạn sẽ thay đổi mã nào trước?

Trả lời

6

Tốt hơn là nên cập nhật các thử nghiệm trước và để chúng không thành công và sau đó quay lại và cập nhật mã cho đến khi kiểm tra vượt qua. A.K.A kiểm tra phát triển theo định hướng hoặc thử nghiệm phát triển đầu tiên.

13

Nếu bạn theo dõi TDD thực tiễn, trước tiên bạn nên cập nhật các thử nghiệm của mình. Bạn sẽ có các trường hợp thử nghiệm bị hỏng mà hy vọng sẽ được khắc phục khi bạn sửa mã của mình.

+1

s/hy vọng/chắc chắn/ –

+0

Từ được chọn với ý định :) –

-1

Điều tôi làm trước tiên là tạo mã và sau đó tạo thử nghiệm sau. Vì bạn có thể có một trường hợp mà bạn lập trình thử nghiệm của bạn để làm việc một cách nào đó và sau đó khi bạn mã bạn nhận ra bạn không thể làm điều đó. Vì vậy, bạn sẽ cần phải thay đổi các xét nghiệm một lần nữa.

+6

Theo kinh nghiệm của tôi, điều này dẫn đến các thử nghiệm được thiên về mã được viết chứ không phải yêu cầu. Viết các bài kiểm tra đầu tiên là cách tốt nhất để có được bài kiểm tra thích hợp, và các bài kiểm tra thích hợp là rất hữu ích trong việc có được mã chính xác. –

+0

Chúng có thể là có. Vì vậy, nó là một cái gì đó tôi tìm ra cho. Những gì tôi kiểm tra là tất cả các đường dẫn mã. –

+0

Viết thử nghiệm sau khi mã mang giả định ngầm rằng mã là chính xác. Nếu đây là giả định của bạn, viết bài kiểm tra là một sự lãng phí thời gian. Trong trường hợp tầm thường, điều này thậm chí có thể là giả định an toàn, nhưng a) Tôi cho rằng bạn đang xử lý rất nhiều trường hợp không tầm thường trong công việc hàng ngày của mình, và b) nếu mã đó là tầm thường, viết các bài kiểm tra không sử dụng thời gian của bạn một cách khôn ngoan. Viết các bài kiểm tra đầu tiên * xác định * hành vi đúng, thay vì dán cao su "PASS" sau khi thực tế. – bradheintz

3

Nếu bạn đang làm thử nghiệm phát triển đầu tiên, ở mức tối thiểu bạn phải viết một bài kiểm tra mới để biện minh cho sự thay đổi. Sự thay đổi sau đó có thể phá vỡ các thử nghiệm cũ và bạn có thể sửa chúng sau khi bạn thấy chúng thất bại, nếu sự thay đổi là ngẫu nhiên để thử nghiệm. Tuy nhiên, nếu bạn biết rằng bài kiểm tra được sử dụng để kiểm tra hành vi cũ và nó chỉ cần thay đổi cho hành vi mới, không có lý do gì để không chỉ thay đổi bài kiểm tra đó thay vì viết bài kiểm tra mới. Nó không phải là giá trị nỗ lực (theo quan điểm của tôi) để tìm ra những thử nghiệm sẽ phá vỡ với sự thay đổi và thay đổi tất cả đầu tiên bởi vì các Á hậu thử nghiệm sẽ cho bạn biết rằng sau khi bạn thực hiện thay đổi.

EDIT (để trả lời nhận xét): Tôi thích viết bài kiểm tra trước, nhưng đó là kiểu TDD. Trong trường hợp đó, thử nghiệm sẽ thúc đẩy thiết kế. Ngoài ra còn có một nhịp điệu và khuôn mẫu cho loại phát triển đó (red-green-refactor). Cách khác xung quanh là cách thử nghiệm đơn vị thuần túy hơn, bạn đã thiết kế và triển khai thực hiện những gì bạn muốn, bây giờ bạn đang thử nghiệm nó. Không có gì sai với điều đó, nó là một cách tiếp cận phát triển khác và sự lựa chọn không phụ thuộc vào sự tồn tại của các xét nghiệm khác. Nó thực sự là một cách tiếp cận phát triển nói chung.

+0

Im trường hợp cụ thể của tôi, các xét nghiệm cũ nên tất cả vẫn làm việc khi chúng được viết. Tôi chỉ đơn giản là thêm một tập hợp các chức năng bổ sung cho một phương pháp cụ thể mà không được kích hoạt bởi bất kỳ thử nghiệm hiện có, vì vậy tôi phải viết các bài kiểm tra mới để trang trải điều đó. Bạn có viết những bài kiểm tra đó trước, hoặc thực hiện thay đổi và sau đó viết mã các bài kiểm tra mới? Tôi đang cho rằng tất cả các bài kiểm tra cũ nên tất cả vẫn còn làm việc. – Jason

+0

Tin tốt là, bạn không cần phải chấp nhận nó - bạn có thể chạy thử nghiệm. Vì tôi thấy quy trình TDD hữu ích trong công việc của riêng tôi, tôi khuyên bạn nên viết các bài kiểm tra đầu tiên - định nghĩa định lượng những gì bạn muốn mã làm trước khi bạn triển khai. Xem câu trả lời của tôi để biết thêm chi tiết. – bradheintz

-1

Cá nhân tôi thích viết chức năng đầu tiên và sau đó thực hiện các kiểm tra đơn vị (nếu thích hợp với chức năng cụ thể). Nếu đó là một cái gì đó không thực sự đáng thử nghiệm đơn vị tôi thường bỏ qua nó. Tôi đã thấy rằng, thường là lãng phí thời gian để thêm bài kiểm tra đơn vị vào mã số all mà bạn viết. Có chắc chắn là nơi mà nó rất hữu ích để có nó, nhưng điều đó hầu như không kéo dài đến tất cả các mã của bạn.

Thật dễ dàng để phát hiện năng suất lãng phí khi bạn refactor một cái gì đó, và nhận ra rằng bạn đã bị hỏng một nửa các bài kiểm tra đơn vị mà không thực sự thêm bất kỳ giá trị để bắt đầu; vì một lỗi có thể dễ dàng bị phát hiện ngay từ đầu. Vì vậy, tất cả những nỗ lực đó là một sự lãng phí thời gian. Nếu bạn làm việc trong môi trường không có động lực để phân phối nhanh và thích ứng nhanh, thì tôi đoán có rất nhiều bài kiểm tra đơn vị là khả thi. Nếu không, bạn chỉ cần tăng chi phí của mình lên một nhóm mà không cần thêm nhiều giá trị hơn nữa cho người dùng của mình.

+0

Nếu bạn phá vỡ một nửa các bài kiểm tra của mình, bạn sẽ không tái cấu trúc; bạn đang thực hiện các thay đổi chức năng. Tái cấu trúc không thay đổi hành vi quan sát của phần mềm. – bradheintz

2

Tôi sẽ thừa nhận rằng đôi khi tôi lừa dối. Nếu một sự thay đổi đủ đơn giản mà tôi có thể biết kết quả một cách chắc chắn, đôi khi tôi sẽ thay đổi mã, sau đó kiểm tra. Giống như nếu tôi nhân một số với hằng số và tất cả những gì tôi đang làm là thay đổi hằng số, tôi sẽ tiếp tục với thay đổi và cập nhật trường hợp kiểm tra sau đó.

Nếu bạn đang làm bất cứ điều gì thậm chí còn phức tạp hơn một chút, tuy nhiên, tôi khuyên bạn nên gắn bó với chính thống TDD và thay đổi kiểm tra trước. Xác định những gì bạn muốn làm trước khi thực hiện.Ngoài ra, tôi khuyên bạn nên đặt thử nghiệm mới sau kiểm tra trước đó, để kiểm tra liên quan đến chức năng hiện tại mà bạn muốn được bảo quản được chạy trước tiên, đảm bảo với bạn rằng bạn chưa bị hỏng (hoặc cảnh báo bạn càng sớm càng tốt bạn có).

+0

+1 cho sự trung thực và thực dụng. –

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