2009-01-05 23 views
12

Mã không thể thực sự làm phiền tôi. Những điều sau đây làm oo-code untestable:Dấu hiệu cảnh báo cho mã không thể đọc được

  • bang toàn cầu, ví dụ, các mẫu Singleton Thiết kế
  • phương pháp tĩnh mà làm một số ưa thích công việc ví dụ như truy cập cơ sở dữ liệu
  • cây thừa kế sâu
  • làm việc trong constructor ví dụ báo cáo kiểm soát
  • các lớp vi phạm Nguyên tắc về trách nhiệm duy nhất

Có nhiều dấu hiệu cảnh báo hơn không?

+0

Are bất kỳ trong số này không mã có mùi? –

Trả lời

6

Các phụ thuộc được mã hóa cứng.

+0

đó không phải là quá nhiều untestable như là một thất bại của TDD phát triển nói chung – annakata

+1

Vâng, TDD là một cách tiếp cận thiết kế (và phát triển), nhưng bạn có thể kiểm tra mã mà không sử dụng, hoặc thậm chí thích, TDD :) – orip

4
  • Không lập trình giao diện
  • Newing lên đối tượng intead của việc sử dụng các nhà máy/IOC
+0

Không lập trình để giao diện là lớn một theo ý kiến ​​của tôi. Bằng cách đặt các phụ thuộc đằng sau một giao diện nội bộ, bạn giả lập các phụ thuộc bên ngoài trong thử nghiệm của bạn. –

11

Không ai trong số những điều làm cho mã untestable. Họ có thể làm cho việc tìm ra lỗi trường hợp khó hơn nhưng với điều kiện bạn đã chỉ định đầy đủ các tiêu chí thành công để thử nghiệm (và phát triển theo hướng kiểm tra sẽ giúp giảm bớt điều này), tất cả những gì bạn phải làm là vượt qua các tiêu chí.

TDD có thể áp dụng cho hành vi của các bộ phận cụ thể cũng như dự án nói chung, vì vậy bạn có thể dễ dàng kiểm tra các thành phần rất nhỏ. Nhưng, nó có nghĩa là để kiểm tra kết quả, không phải là các phương tiện thu được kết quả đó.

Cung cấp các bài kiểm tra được thông qua, bạn đã đáp ứng các yêu cầu. Nếu có lỗi sau đó, đây là một vấn đề với các bài kiểm tra, không phải là mã đang được thử nghiệm (trong trường hợp đó các bài kiểm tra nên được sửa đổi để nắm bắt vấn đề không lường trước được trước đây).

Bạn không nên quan tâm (về mặt phân phối chức năng) cho dù có một tuyên bố trong một trong các nhà thầu của bạn. Bạn nên tự hỏi mình yêu cầu nghiệp vụ nào? Tôi mạnh mẽ nghi ngờ khách hàng của bạn sẽ cung cấp một danh sách các yêu cầu bao gồm "thừa kế được giới hạn ở 4 cấp độ". Họ cũng có thể liệt kê "không có lỗi" như một yêu cầu nhưng bạn sẽ phải thương lượng chúng xuống một :-).

+0

Mặc dù chúng không thể làm cho nó không thể thực hiện được, những thứ như phương pháp tĩnh ưa thích, làm cho nó gần như không thể giả lập các tài nguyên bên ngoài, điều này có thể khiến các kiểm tra đơn vị chạy mất nhiều thời gian hơn để chạy. Trong TDD, kiểm tra đơn vị không nên chạm vào tài nguyên bên ngoài. – Erlend

+0

+1, nhưng đối với một cái nhìn thú vị về lý do tại sao nó xấu để làm "công việc thực sự" trong một nhà xây dựng thấy một bài tốt của Miško Hevery: http://misko.hevery.com/code-reviewers-guide/flaw-constructor- không thực hiện công việc/ – orip

+0

Có thể không phải là "không thể kiểm chứng" nhưng chắc chắn "khó kiểm tra", điều này sẽ làm chậm trễ việc phân phối. –

1

Làm việc trong các lớp GUI không liên quan gì đến bản trình bày. GUI nên được tách hoàn toàn khỏi mô hình cơ bản.

1

Mã không thể thực hiện được miễn là bạn không thể sửa đổi nó. Nếu bạn có khả năng cấu trúc lại dự án, không có mã nào là không thể thực hiện được. Thông thường, chỉ cần sửa đổi rất nhỏ để thực hiện kiểm tra dễ dàng hơn. Và chúng có thể được biện minh bởi vì chúng làm tăng chất lượng của mã.

Ngay cả trong trường hợp bạn mô tả, mã không nhất thiết là không thể thực hiện được. Nó chỉ khó kiểm tra hơn. Ví dụ, nó dễ dàng hơn để kiểm tra mã nếu bạn có thể cô lập truy cập cơ sở dữ liệu và tránh chúng trong các thử nghiệm đơn vị của bạn. Nhưng nếu bạn phải, bạn có thể đặt một cơ sở dữ liệu chuyên dụng để chạy thử nghiệm của bạn.

1

Tôi sẽ nói rằng không có thứ nào trong số đó làm cho mã không thể đọc được.Họ làm cho thử nghiệm đơn vị khó khăn, bởi vì mỗi người trong số đó làm tăng sự khớp nối trong việc triển khai của bạn.

Trong số phiền toái khác mà làm cho đơn vị thử nghiệm khó khăn:

  • đồ họa mã giao diện người sử dụng trộn lẫn với mã logic kinh doanh
  • tất cả anti-mô hình, nhưng đối tượng Thiên Chúa nói riêng (http://en.wikipedia.org/wiki/God_object)
  • dọc theo cùng các dòng, hàm rất lớn cũng rất khó chịu

Nói chung, mọi đề xuất bạn có thể nghe về việc tạo mã tốt hơn cũng là đề xuất ation cho dễ dàng hơn để kiểm tra đơn vị mã.

0

thiếu lớp, thừa khớp nối ... nghĩa là lớp Y đã được viết để biết về X, nhưng không nên, X có thể sử dụng lại được. Có một mối quan hệ mạnh mẽ giữa khả năng kiểm tra và khả năng sử dụng lại.

1

Cơ sở dữ liệu! Đặc biệt là những người có trình kích hoạt!

Tôi biết rằng bạn có thể giả lập cơ sở dữ liệu, nhưng tôi luôn thấy rằng hầu hết các lỗi trong mã của tôi (chủ yếu là ứng dụng CRUD) là các vấn đề về dữ liệu/bản đồ và nếu bạn giả lập cơ sở dữ liệu bạn không tìm thấy lỗi.

1

Hướng dẫn Miško Hevery về Writing Testable Code nêu chi tiết các lỗi làm cho mã khó kiểm tra. Danh sách của anh trùng lặp với bạn một chút nhưng lại đi vào chi tiết đáng kinh ngạc.

  • Constructor làm Bất động làm việc
  • Đào vào Cộng tác viên
  • Giòn toàn cầu Nhà nước & Singletons
  • Lớp Có quá nhiều
Các vấn đề liên quan