Một dòng chức năng thông thường của mã từ mã hóa đến các dòng mã của tỷ lệ mã hóa là gì?


27

Tôi khá mới mẻ với cách tiếp cận TDD và các thử nghiệm đầu tiên của tôi nói rằng viết 1 dòng mã chức năng có nghĩa là viết khoảng 2-3 dòng mã thử nghiệm. Vì vậy, trong trường hợp tôi sẽ viết 1000 LỘC, toàn bộ cơ sở mã bao gồm các bài kiểm tra sẽ giống như ~ 3500 LỘC.

Đây có được coi là bình thường? Tỷ lệ trong mã bạn viết là gì?


8
Yeap, TDD đi kèm với một thẻ đắt tiền!
EL Yusubov

6
số 2-3X của bạn là bảo thủ lúc tốt nhất, nó thực sự gần gũi hơn với 4-5X cho những thứ như C # / Java, Python / Ruby có thể gần gũi hơn với 2-3X, với một cái gì đó ngắn gọn như Erlang là gần gũi hơn với 1: 1. Phụ thuộc vào mức độ giáo điều của bạn về TDD, giáo điều càng nhiều, tỷ lệ đó càng lớn!

6
@tomwrong: Trong cuốn sách của Kent, ông đã trích dẫn Ward rằng bạn nên viết bài kiểm tra cho đến khi nỗi sợ hãi của bạn biến thành sự nhàm chán.
Herby

4
@ElYusubov: Tôi không đồng ý rằng nó "đắt" cả. Có vẻ như vậy đối với những người vẫn tính số lượng công việc ở LỘC. Nhưng giá không phải ở LỘC, mà là bằng tiền và theo thời gian. Và ở đó, TDD không đắt hơn bất kỳ quá trình phát triển hợp lý nào khác.
Herby

5
Các bạn, tại sao bạn bình luận thay vì đăng câu trả lời? Những gì bạn viết có ý nghĩa.
Andrey Agibalov

Câu trả lời:


18

1: 3 là bình thường với TDD.

Từ kinh nghiệm của tôi, và cũng từ những trích dẫn khác tôi nhớ.


12
... những trích dẫn nào?
TehShrike

... mơ hồ nhớ ... Tôi đã không nhớ nó ở đâu (có thể trong ví dụ TDD của Kent Beck, có thể ở đâu đó trong c2.com). Tôi nhớ ý nghĩa, mặc dù, mã thử nghiệm nhiều hơn ba lần so với mã sản xuất là ok.
Herby

Wow, chính xác như vậy trong kinh nghiệm của tôi, quá. (Tôi đang nhìn chằm chằm vào kết quả từ cloc ngay bây giờ và tôi đã tìm kiếm google để tìm bất kỳ bài đăng nào về tỷ lệ này)
Nikolay Tsenkov

9

Có các biến thể dựa trên các phong cách và ngôn ngữ mã hóa khác nhau. Tuy nhiên, bất kể ngôn ngữ bạn sử dụng, biến thể lớn nhất là bạn.

Robert Martin từng nói:

Khi các bài kiểm tra trở nên cụ thể hơn, mã trở nên chung chung hơn.

Điều đó làm tôi suy nghĩ. Kiểm tra cụ thể hơn có nghĩa là mã kiểm tra nhiều hơn. Mã sản xuất chung hơn có nghĩa là ít mã hơn, vì vậy tỷ lệ kiểm tra / mã sẽ tăng lên khi mã phát triển.

Nhưng chờ đã, điều đó cũng không tốt. Trong một số trường hợp cụ thể, ví dụ: khi bạn xác định một thuật toán nhất định, bạn có thể chỉ có 6-10 dòng mã chứa một vài "nếu", một lúc và có thể 2-3 lần thu hồi. Tôi có thể nói với bạn, mã đó có thể sẽ có hơn 100 dòng mã kiểm tra.

Trong một dự án thực tế, một cái gì đó lớn hơn chỉ là một vài thuật toán, tỷ lệ kiểm tra / mã phải nằm trong khoảng từ 1: 1 đến 2: 1. Nếu nó vượt quá 2: 1, đó là mùi mà bạn có các bài kiểm tra cần được cấu trúc lại hoặc xóa (hoặc có thể là mã khó kiểm tra). Bạn nên luôn luôn đầu tư cùng một lượng chăm sóc và tái cấu trúc trong các thử nghiệm của bạn như trong mã sản xuất của bạn.

Dù sao đi nữa, câu trả lời tốt nhất cho câu hỏi của bạn có lẽ là "Độ phức tạp theo chu kỳ" . Độ phức tạp chu kỳ của phương pháp của bạn càng cao, bài kiểm tra theo cấp số nhân bạn phải viết cho nó để bao quát tất cả các trường hợp.


3

Tỷ lệ sẽ thay đổi tùy thuộc vào kích thước của các phương pháp của bạn. Kích thước của các phương thức của bạn sẽ thay đổi theo phong cách lập trình, ngôn ngữ và miền vấn đề.

Nếu phương pháp của bạn ngắn thì 3: 1 là hợp lý. Nếu phương pháp của bạn dài thì 3: 1 ở phía cao.

Vì vậy, để trả lời câu hỏi của bạn, nó phụ thuộc. :-)


Nó phụ thuộc vào những gì bạn có nghĩa là "phương pháp dài". Hình ảnh nó tạo ra trong đầu tôi là các phương thức không cần thiết lâu, làm quá nhiều việc và có quá nhiều trách nhiệm (thường có quá nhiều tham số). Trong trường hợp đó, phương pháp này cần thiên lệch kết hợp để che bởi các xét nghiệm, vì vậy tôi không nghĩ rằng tỷ lệ này sẽ thay đổi nhiều ...
Herby

Giả sử trong giây lát bạn có thể thiết lập thử nghiệm, hãy gọi phương thức để được kiểm tra và kiểm tra kết quả trong ba dòng mã. Nếu phương thức bạn đang kiểm tra dài một dòng (như xảy ra trong Scala) thì thử nghiệm của bạn đối với tỷ lệ mã sản xuất là 3: 1. Nếu phương thức dài sáu dòng thì đó là 1: 2. Sáu dòng không quá dài.
Jon Strayer

2

Đối với ứng dụng quan trọng phần mềm, tỷ lệ thông thường là một ngày thử nghiệm cho mỗi 10 LoC chức năng.

Và đây không phải là tính TDD không phải về kiểm tra mà là về đặc điểm kỹ thuật.


1

Kích thước của mã kiểm tra của tôi là khoảng một nửa so với mã 'thực tế' nói chung. Làm khác đi là dấu hiệu cho thấy các bài kiểm tra của bạn quá phức tạp và / hoặc mã của bạn quá khó để kiểm tra và / hoặc mã của bạn quá dày đặc / phức tạp.

Hoặc bạn chỉ đơn giản là kiểm tra quá nhiều và lãng phí thời gian của bạn vào lợi nhuận giảm dần.

Cũng xem "khi nào kiểm tra đơn vị không phù hợp hoặc không cần thiết?"


-1

Tỷ lệ của tôi là khoảng 2-1 đến 10-1 (mã để kiểm tra). Hãy chắc chắn rằng bạn kiểm tra là về giá trị / hành vi và không thực hiện.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.