2015-07-15 25 views
10

Điều này đã khiến tôi phát điên gần đây ...Làm cách nào để kiểm tra đơn vị refactor?

Tái cấu trúc là gì?

Mã refactoring là quá trình chuyển dịch cơ cấu mã hiện máy tính - thay đổi bao thanh toán - mà không thay đổi hành vi bên ngoài của nó.

Và làm cách nào để đảm bảo chúng tôi không phá vỡ bất kỳ điều gì trong khi tái cấu trúc?

Trước khi tái cấu trúc một phần mã, cần phải có một bộ kiểm tra đơn vị tự động. Các thử nghiệm được sử dụng để chứng minh rằng hành vi của mô-đun là chính xác trước khi tái cấu trúc.

Được rồi. Nhưng làm cách nào để tiếp tục nếu tôi tìm thấy một mã số có mùi trong các bài kiểm tra đơn vị mình? Nói, một phương pháp thử nghiệm có quá nhiều? Làm thế nào để chắc chắn rằng tôi không phá vỡ bất cứ điều gì trong khi tái cấu trúc các bài kiểm tra đơn vị?

Tôi có cần một số loại kiểm tra meta không? Nó là đơn vị kiểm tra tất cả các con đường xuống?

Hoặc làm các bài kiểm tra đơn vị đơn giản là không tuân thủ các quy tắc tái cấu trúc bình thường?

Trả lời

5

Theo kinh nghiệm của tôi, có two reasons to trust tests:

  • xét
  • Bạn đã thấy nó không thành công

Cả hai hoạt động này xảy ra khi thử nghiệm được viết. Nếu bạn tiếp tục kiểm tra không thay đổi, bạn có thể tiếp tục tin tưởng chúng.

Mỗi khi bạn sửa đổi một bài kiểm tra, nó sẽ trở nên kém đáng tin cậy hơn.

Bạn có thể giảm bớt vấn đề đó bằng cách lặp lại quy trình trên: xem lại các thay đổi đối với các thử nghiệm và tạm thời thay đổi Hệ thống đang kiểm tra (SUT) để bạn có thể xem các thử nghiệm không thành công như mong đợi.

Khi sửa đổi kiểm tra, hãy giữ nguyên SUT. Kiểm tra và mã sản xuất giữ cho nhau trong kiểm tra, do đó, thay đổi một trong khi giữ khác bị khóa là an toàn nhất.

3

Làm cách nào để đảm bảo rằng tôi không phá vỡ bất kỳ điều gì trong khi tái cấu trúc các bài kiểm tra đơn vị?

Giữ thử nghiệm cũ làm tham chiếu.


Xây dựng: kiểm tra đơn vị với vùng phủ sóng tốt có giá trị trọng lượng của họ trong kết quả. Bạn không giữ chúng cho cấu trúc chương trình tuyệt vời hoặc thiếu trùng lặp; về cơ bản chúng là tập dữ liệu của các cặp đầu vào/đầu ra hữu ích.

Vì vậy, khi kiểm tra "tái cấu trúc", nó chỉ thực sự quan trọng là chương trình được thử nghiệm với bộ mới cho thấy cùng một hành vi. Mọi khác biệt nên được cẩn thận, kiểm tra thủ công, bởi vì lỗi chương trình mới có thể đã được tìm thấy.

Bạn cũng có thể vô tình giảm mức độ phù hợp khi tái cấu trúc. Điều đó khó tìm hơn và yêu cầu các công cụ phân tích phạm vi chuyên dụng.

+0

Có lẽ bản trình bày tiếp theo của Rich Hickey sẽ được gọi là "Kiểm tra dưới dạng giá trị"? :) – fredoverflow

+0

@fredoverflow Ngẫu nhiên, hãy xem chỉnh sửa của tôi. –

+0

"Bạn cũng có thể vô tình giảm mức độ phù hợp khi tái cấu trúc" chính xác là những gì tôi sợ ... – fredoverflow

0

bạn không biết bạn sẽ không phá vỡ bất cứ điều gì. để tránh vấn đề 'ai sẽ kiểm tra thử nghiệm của chúng ta?' bạn nên giữ các xét nghiệm càng đơn giản càng tốt để giảm khả năng mắc lỗi.

khi bạn cấu trúc lại các bài kiểm tra bạn luôn có thể sử dụng refactoring tự động hoặc khác 'tin cậy' phương pháp như phương pháp khai thác, vv

bạn cũng thường sử dụng các khuôn khổ thử nghiệm hiện có. chúng được thử nghiệm bởi người sáng tạo của họ.vì vậy khi bạn bắt đầu xây dựng (một thậm chí đơn giản) khuôn khổ của riêng bạn, phương pháp helper phức tạp vv, bạn luôn có thể kiểm tra nó

4

Đối với vấn đề này là một bài đăng cũ hơn, nó đã được tham chiếu in a comment trên bài đăng của tôi về TDD in practice. Vì vậy, khi xem xét, tôi muốn ném vào hai xu của tôi.

Chủ yếu là bởi vì tôi cảm nhận được accepted answer làm báo cáo kết quả trơn:

Mỗi khi bạn thay đổi một thử nghiệm, nó trở nên ít đáng tin cậy.

Tôi gặp vấn đề với từ sửa đổi. Liên quan đến việc tái cấu trúc các từ như thay đổi, sửa đổi, v.v. thường tránh khi chúng mang các truy vấn tác động để tái cấu trúc.

Nếu bạn sửa đổi kiểm tra trong ý nghĩa truyền thống có nguy cơ bạn đã giới thiệu thay đổi làm cho thử nghiệm kém đáng tin cậy hơn.

Tuy nhiên, nếu bạn sửa đổi một thử nghiệm trong Refactor cảm giác sau đó kiểm tra nên không kém đáng tin cậy.

này mang lại cho tôi trở lại câu hỏi ban đầu:

Làm thế nào để cấu trúc lại các bài kiểm tra đơn vị?

Rất đơn giản, giống như bất kỳ mã nào khác - trong sự cô lập.

Vì vậy, nếu bạn muốn cấu trúc lại các thử nghiệm của mình, đừng thay đổi mã, chỉ cần thay đổi các thử nghiệm của bạn.

Tôi có cần thử nghiệm cho các thử nghiệm của mình không?

số Trong thực tế, Kent Beck giải quyết câu hỏi này chính xác trong Full Stack Radio interview của mình, nói:

Mã của bạn là thử nghiệm cho các bài kiểm tra của bạn

Đánh dấu SEEMANN cũng lưu ý này trong his answer:

Kiểm tra và mã sản xuất giữ cho nhau trong kiểm tra, do đó, thay đổi một trong khi giữ khác bị khóa là an toàn nhất.

Cuối cùng, đây không phải là quá nhiều về cách refactor kiểm tra nhiều như việc cấu trúc lại nói chung. Các nguyên tắc tương tự áp dụng, cụ thể là cấu trúc lại cấu trúc lại mã mà không thay đổi hành vi bên ngoài của nó. Nếu bạn không thay đổi hành vi bên ngoài, thì không tin tưởng nào bị mất.

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