Có phải là bình thường để dành càng nhiều, nếu không nhiều hơn, thời gian viết bài kiểm tra hơn mã thực tế?


211

Tôi thấy các bài kiểm tra khó hơn rất nhiều và khó viết hơn mã thực tế mà chúng đang kiểm tra. Không có gì lạ khi tôi dành nhiều thời gian để viết bài kiểm tra hơn mã mà nó đang kiểm tra.

Điều đó là bình thường hay tôi đang làm gì đó sai?

Các câu hỏi có phải là thử nghiệm đơn vị hoặc phát triển dựa trên thử nghiệm đáng giá? ”,“ Chúng tôi đang dành nhiều thời gian triển khai thử nghiệm chức năng hơn so với việc thực hiện hệ thống chính nó, là này bình thường không? Tôi và câu trả lời của họ là nhiều hơn về việc kiểm tra có đáng hay không (như trong "chúng ta có nên bỏ qua việc viết bài kiểm tra hoàn toàn không?"). Mặc dù tôi tin rằng các bài kiểm tra rất quan trọng, tôi tự hỏi liệu việc tôi dành nhiều thời gian cho các bài kiểm tra hơn mã thực tế là bình thường hay chỉ có tôi.

Đánh giá theo số lượt xem, câu trả lời và nâng cao câu hỏi của tôi nhận được, tôi chỉ có thể cho rằng đó là mối quan tâm chính đáng không được giải quyết trong bất kỳ câu hỏi nào khác trên trang web.


20
Giai thoại, nhưng tôi thấy tôi dành nhiều thời gian để viết bài kiểm tra như viết mã khi tôi TDD. Đó là khi tôi trượt lên và viết các bài kiểm tra sau khi thực tế là tôi dành nhiều thời gian cho các bài kiểm tra hơn là mã.
RubberDuck

10
Bạn cũng dành nhiều thời gian để đọc hơn là viết mã của bạn.
Thorbjørn Ravn Andersen

27
Ngoài ra, các bài kiểm tra mã thực tế. Bạn chỉ không gửi phần đó cho khách hàng.
Thorbjørn Ravn Andersen

5
Lý tưởng nhất là bạn sẽ dành nhiều thời gian để chạy hơn là viết mã của bạn. (Nếu không, bạn chỉ cần thực hiện nhiệm vụ bằng tay.)
Joshua Taylor

5
@RubberDuck: Đối diện kinh nghiệm ở đây. Đôi khi khi tôi viết các bài kiểm tra sau khi thực tế mã và thiết kế đã khá gọn gàng nên tôi không cần phải viết lại mã và các bài kiểm tra quá nhiều. Vì vậy, mất ít thời gian hơn để viết các bài kiểm tra. Nó không phải là một quy tắc, nhưng nó xảy ra với tôi khá thường xuyên.
Giorgio

Câu trả lời:


205

Tôi nhớ từ một khóa học về công nghệ phần mềm, một người dành ~ 10% thời gian phát triển để viết mã mới và 90% còn lại là gỡ lỗi, kiểm tra và tài liệu.

Vì các bài kiểm tra đơn vị nắm bắt được việc gỡ lỗi và thử nghiệm thử nghiệm mã (có khả năng tự động hóa), nên sẽ có nhiều nỗ lực hơn vào chúng; thời gian thực tế không nên nhiều hơn việc gỡ lỗi và kiểm tra sẽ làm mà không cần viết các bài kiểm tra.

Cuối cùng các bài kiểm tra cũng nên tăng gấp đôi như tài liệu! Người ta phải viết các bài kiểm tra đơn vị theo cách mã được sử dụng; tức là các bài kiểm tra (và cách sử dụng) nên đơn giản, hãy đặt những thứ phức tạp vào việc thực hiện.

Nếu bài kiểm tra của bạn khó viết thì mã họ kiểm tra có lẽ khó sử dụng!


4
Đây có thể là thời điểm tốt để xem xét lý do tại sao mã rất khó kiểm tra :) Hãy thử "hủy kiểm soát" các dòng đa chức năng phức tạp không thực sự cần thiết, như các toán tử nhị phân / ternary lồng nhau ồ ạt ... Tôi thực sự ghét nhị phân không cần thiết / toán tử ternary cũng có toán tử nhị phân / ternary là một trong những đường dẫn ...
Nelson

53
Tôi xin không đồng ý với phần cuối cùng. Nếu bạn đang nhắm đến phạm vi kiểm tra đơn vị rất cao, bạn cần bao gồm các trường hợp sử dụng rất hiếm và đôi khi hoàn toàn trái với mục đích sử dụng mã của bạn. Viết bài kiểm tra cho các trường hợp góc đó có thể là phần tốn thời gian nhất của toàn bộ nhiệm vụ.
otto

Tôi đã nói điều này ở nơi khác, nhưng kiểm thử đơn vị có xu hướng chạy lâu hơn, bởi vì hầu hết các mã có xu hướng tuân theo một kiểu mẫu "Nguyên tắc Pareto": bạn có thể bao quát khoảng 80% logic của mình với khoảng 20% ​​mã cần thiết bao gồm 100% logic của bạn (nghĩa là bao gồm tất cả các trường hợp cạnh mất khoảng năm lần so với mã kiểm tra đơn vị). Tất nhiên, tùy thuộc vào khung, bạn có thể khởi tạo môi trường cho nhiều thử nghiệm, giảm mã tổng thể cần thiết, nhưng thậm chí điều đó cần có kế hoạch bổ sung. Tiếp cận độ tin cậy 100% đòi hỏi nhiều thời gian hơn nhiều so với việc chỉ kiểm tra các đường dẫn chính.
phyrfox

2
@phyrfox Tôi nghĩ rằng điều đó quá thận trọng, nó giống như "99% mã khác là trường hợp cạnh". Điều đó có nghĩa là 99% các bài kiểm tra khác dành cho các trường hợp cạnh đó.
Móż

@Nelson Tôi đồng ý các toán tử ternary lồng nhau rất khó đọc, nhưng tôi không nghĩ họ làm cho việc kiểm tra trở nên đặc biệt khó khăn (một công cụ bảo hiểm tốt sẽ cho bạn biết nếu bạn đã bỏ lỡ một trong những kết hợp có thể). IMO, phần mềm khó kiểm tra khi được ghép quá chặt hoặc phụ thuộc vào dữ liệu cứng hoặc dữ liệu không được truyền dưới dạng tham số (ví dụ: khi một điều kiện phụ thuộc vào thời gian hiện tại và điều này không được truyền dưới dạng tham số). Điều này không liên quan trực tiếp đến mức độ "có thể đọc" của mã, mặc dù tất nhiên, tất cả những thứ khác bằng nhau, mã có thể đọc được là tốt hơn!
Andres F.

96

Nó là.

Ngay cả khi bạn chỉ thực hiện thử nghiệm đơn vị, không có gì bất thường khi có nhiều mã trong các thử nghiệm hơn mã thực tế được thử nghiệm. Không có gì là sai với nó.

Hãy xem xét một mã đơn giản:

public void SayHello(string personName)
{
    if (personName == null) throw new NullArgumentException("personName");

    Console.WriteLine("Hello, {0}!", personName);
}

Điều gì sẽ là các bài kiểm tra? Có ít nhất bốn trường hợp đơn giản để kiểm tra ở đây:

  1. Tên người là null. Là ngoại lệ thực sự ném? Đó là ít nhất ba dòng mã kiểm tra để viết.

  2. Tên người là "Jeff". Chúng ta có nhận được "Hello, Jeff!"phản hồi không? Đó là bốn dòng mã kiểm tra.

  3. Tên người là một chuỗi rỗng. Sản lượng nào chúng ta mong đợi? Sản lượng thực tế là gì? Câu hỏi phụ: nó có phù hợp với các yêu cầu chức năng không? Điều đó có nghĩa là bốn dòng mã khác cho bài kiểm tra đơn vị.

  4. Tên người đủ ngắn cho một chuỗi, nhưng quá dài để kết hợp với "Hello, "và dấu chấm than. Chuyện gì xảy ra vậy?

Điều này đòi hỏi rất nhiều mã thử nghiệm. Hơn nữa, các đoạn mã cơ bản nhất thường yêu cầu mã thiết lập để khởi tạo các đối tượng cần thiết cho mã đang được thử nghiệm, điều này cũng thường dẫn đến việc viết sơ khai và giả, v.v.

Nếu tỷ lệ này rất lớn, trong trường hợp đó bạn có thể kiểm tra một số điều:

  • Có sao chép mã qua các bài kiểm tra? Thực tế là mã kiểm tra không có nghĩa là mã phải được sao chép (dán sao chép) giữa các thử nghiệm tương tự: việc sao chép như vậy sẽ khiến việc duy trì các thử nghiệm đó trở nên khó khăn.

  • Có các bài kiểm tra dư thừa? Theo nguyên tắc thông thường, nếu bạn loại bỏ một bài kiểm tra đơn vị, phạm vi bảo hiểm của chi nhánh sẽ giảm. Nếu không, nó có thể chỉ ra rằng thử nghiệm là không cần thiết, vì các đường dẫn đã được bao phủ bởi các thử nghiệm khác.

  • Bạn đang kiểm tra chỉ mã bạn nên kiểm tra? Bạn không cần phải kiểm tra khung cơ bản của các thư viện bên thứ ba, mà chỉ riêng mã của dự án.

Với các thử nghiệm khói, thử nghiệm hệ thống và tích hợp, thử nghiệm chức năng và chấp nhận và thử nghiệm căng thẳng và tải trọng, bạn thêm nhiều mã thử nghiệm hơn, do đó, có bốn hoặc năm LỘC thử nghiệm cho mỗi LỘC của mã thực tế không phải là điều bạn nên lo lắng.

Một lưu ý về TDD

Nếu bạn lo lắng về thời gian cần thiết để kiểm tra mã của mình, có thể bạn đang làm sai, đó là mã trước, kiểm tra sau. Trong trường hợp này, TDD có thể giúp đỡ bằng cách khuyến khích bạn làm việc trong các lần lặp 15-45 giây, chuyển đổi giữa mã và kiểm tra. Theo những người đề xuất TDD, nó tăng tốc quá trình phát triển bằng cách giảm cả số lượng thử nghiệm bạn cần làm và quan trọng hơn là số lượng mã doanh nghiệp để viết và đặc biệt là viết lại để thử nghiệm.


Gọi nđộ dài tối đa của một chuỗi . Chúng ta có thể gọi SayHellovà chuyển qua tham chiếu một chuỗi có độ dài n - 1 sẽ hoạt động tốt. Bây giờ, tại Console.WriteLinebước, định dạng sẽ kết thúc bằng một chuỗi có độ dài n + 8, điều này sẽ dẫn đến một ngoại lệ. Có thể, do giới hạn bộ nhớ, ngay cả một chuỗi chứa n / 2 ký tự sẽ dẫn đến một ngoại lệ. Câu hỏi người ta nên đặt ra là liệu thử nghiệm thứ tư này có phải là thử nghiệm đơn vị không (trông giống như thử nghiệm này, nhưng có thể có tác động cao hơn nhiều về mặt tài nguyên so với thử nghiệm đơn vị trung bình) và nếu thử nghiệm mã thực tế hoặc khung cơ bản.


5
Đừng quên một người cũng có thể có tên null. stackoverflow.com/questions/4456438/
hy

1
@JacobRaihle Tôi giả sử @MainMa có nghĩa là giá trị của sự personNamephù hợp trong a string, nhưng giá trị personNamecộng với các giá trị được nối liền tràn string.
woz

@JacobRaihle: Tôi đã chỉnh sửa câu trả lời của mình để giải thích điểm này. Xem chú thích.
Arseni Mourzenko

4
As a rule of thumb, if you remove a unit test, the branch coverage should decrease.Nếu tôi viết tất cả bốn bài kiểm tra mà bạn đã đề cập ở trên, và sau đó loại bỏ bài kiểm tra thứ 3, liệu phạm vi bảo hiểm có giảm không?
Vivek

3
"đủ dài" → "quá dài" (ở điểm 4)?
Paŭlo Ebermann

59

Tôi nghĩ điều quan trọng là phải phân biệt giữa hai loại chiến lược thử nghiệm: thử nghiệm đơn vị và thử nghiệm tích hợp / chấp nhận.

Mặc dù thử nghiệm đơn vị là cần thiết trong một số trường hợp, nó thường được thực hiện quá mức vô vọng. Điều này trở nên trầm trọng hơn bởi các số liệu vô nghĩa buộc các nhà phát triển, như "phạm vi bảo hiểm 100%". http://www.rbcs-us.com/document/Why-Most-Unit-Testing-is-Waste.pdf cung cấp một lập luận hấp dẫn cho điều này. Xem xét các vấn đề sau với thử nghiệm đơn vị tích cực:

  • Rất nhiều thử nghiệm vô nghĩa không ghi nhận giá trị doanh nghiệp, mà chỉ đơn giản là tồn tại để tiến gần hơn đến phạm vi bảo hiểm 100% đó. Nơi tôi làm việc, chúng tôi phải viết các bài kiểm tra đơn vị cho các nhà máy không làm gì khác ngoài việc tạo ra các thể hiện mới của các lớp. Nó không thêm giá trị. Hoặc các phương thức .equals () dài này do Eclipse tạo ra - không cần phải kiểm tra các phương thức này.
  • Để làm cho việc kiểm tra dễ dàng hơn, các nhà phát triển sẽ phân chia các thuật toán phức tạp thành các đơn vị thử nghiệm nhỏ hơn. Nghe có vẻ như là một chiến thắng, phải không? Không, nếu bạn cần mở 12 lớp để theo một đường dẫn mã chung. Trong những trường hợp này, kiểm thử đơn vị thực sự có thể làm giảm khả năng đọc mã. Một vấn đề khác với điều này là nếu bạn cắt mã của mình thành các phần quá nhỏ, bạn sẽ có một lượng lớn các lớp (hoặc các đoạn mã) dường như không có lý do nào ngoài việc là một tập hợp con của một đoạn mã khác.
  • Tái cấu trúc mã được bảo hiểm cao có thể khó khăn, vì bạn cũng cần duy trì sự phong phú của các bài kiểm tra đơn vị phụ thuộc vào nó hoạt động như vậy . Điều này trở nên trầm trọng hơn bởi các bài kiểm tra đơn vị hành vi, trong đó một phần bài kiểm tra của bạn cũng xác minh sự tương tác của các cộng tác viên của một lớp (thường bị chế giễu).

Mặt khác, kiểm thử tích hợp / chấp nhận là một phần cực kỳ quan trọng của chất lượng phần mềm và theo kinh nghiệm của tôi, bạn nên dành một lượng thời gian đáng kể để làm cho chúng đúng.

Rất nhiều cửa hàng đã uống hỗ trợ kool TDD, nhưng như liên kết ở trên cho thấy, một số nghiên cứu cho thấy lợi ích của nó là không thuyết phục.


10
+1 cho điểm tái cấu trúc. Tôi đã từng làm việc trên một sản phẩm kế thừa đã được vá và kluged trong hơn một thập kỷ. Chỉ cần cố gắng xác định sự phụ thuộc cho một phương pháp cụ thể có thể chiếm phần tốt hơn trong một ngày, và sau đó cố gắng tìm ra cách chế giễu chúng có thể mất nhiều thời gian hơn. Không có gì lạ khi thay đổi năm dòng yêu cầu hơn 200 dòng mã kiểm tra và thực hiện phần tốt hơn trong một tuần để thực hiện.
TMN

3
Điều này. Trong bài kiểm tra câu trả lời 4 của MainMa không nên được thực hiện (bên ngoài bối cảnh học thuật), bởi vì hãy nghĩ về cách điều đó sẽ xảy ra trong thực tế ... nếu tên của một người gần với kích thước tối đa cho một chuỗi có gì đó không đúng. Không kiểm tra, trong hầu hết các trường hợp không có đường dẫn mã để phát hiện nó. Câu trả lời thích hợp là để cho khung công tác loại bỏ phần ngoại lệ ra khỏi bộ nhớ, bởi vì đó là vấn đề thực sự.
Móż

3
Tôi đang cổ vũ bạn cho đến khi "không cần phải kiểm tra các .equals()phương thức dài đó do Eclipse tạo ra." Tôi đã viết một khai thác thử nghiệm cho equals()compareTo() github.com/GlenKPeterson/TestUtils Hầu như mọi triển khai tôi từng thử nghiệm đều thiếu. Làm thế nào để bạn sử dụng các bộ sưu tập nếu equals()hashCode()không làm việc cùng nhau một cách chính xác và hiệu quả? Tôi đang cổ vũ một lần nữa cho phần còn lại của câu trả lời của bạn và đã bình chọn nó. Tôi thậm chí còn cho rằng một số phương thức bằng () được tạo tự động có thể không cần thử nghiệm, nhưng tôi đã có quá nhiều lỗi với việc triển khai kém đến mức khiến tôi lo lắng.
GlenPeterson

1
@GlenPeterson Đồng ý. Một đồng nghiệp của tôi đã viết EqualsVerifier cho mục đích này. Xem github.com/jqno/equalsverifier
Tohnmeister

@ Ӎσᶎ không, bạn vẫn phải kiểm tra đầu vào không được chấp nhận, đó là cách mọi người tìm thấy khai thác bảo mật.
gbjbaanb

11

Không thể khái quát.

Nếu tôi cần triển khai một công thức hoặc thuật toán từ kết xuất vật lý, thì rất có thể tôi đã dành 10 giờ cho các thử nghiệm đơn vị hoang tưởng, vì tôi biết lỗi nhỏ nhất hoặc không chính xác có thể dẫn đến các lỗi gần như không thể chẩn đoán, vài tháng sau .

Nếu tôi chỉ muốn nhóm một cách hợp lý một số dòng mã và đặt tên cho nó, chỉ được sử dụng trong phạm vi tệp, tôi hoàn toàn không thể kiểm tra nó (nếu bạn khăng khăng viết thử nghiệm cho mọi chức năng, không có ngoại lệ, lập trình viên có thể quay lại để viết càng ít chức năng càng tốt).


Đây là một quan điểm thực sự có giá trị. Câu hỏi cần nhiều bối cảnh hơn để được trả lời đầy đủ.
CLF

3

Vâng, đó là bình thường nếu bạn đang nói về TDDing. Khi bạn có các kiểm tra tự động, bạn bảo mật hành vi mong muốn của mã của mình. Khi bạn viết bài kiểm tra của mình trước, bạn xác định xem mã hiện có đã có hành vi bạn mong muốn chưa.

Điều này có nghĩa rằng:

  • Nếu bạn viết một bài kiểm tra thất bại, thì việc sửa mã với điều đơn giản nhất có thể làm việc ngắn hơn viết bài kiểm tra.
  • Nếu bạn viết một bài kiểm tra vượt qua, thì bạn không có thêm mã để viết, thực sự dành nhiều thời gian để viết bài kiểm tra hơn mã.

(Điều này không tính đến việc tái cấu trúc mã, nhằm mục đích dành ít thời gian hơn để viết mã tiếp theo. Nó được cân bằng bằng cách tái cấu trúc thử nghiệm, nhằm mục đích dành ít thời gian hơn để viết các bài kiểm tra tiếp theo.)

Cũng vậy nếu bạn đang nói về việc viết bài kiểm tra sau khi thực tế, thì bạn sẽ dành nhiều thời gian hơn:

  • Xác định hành vi mong muốn.
  • Xác định cách kiểm tra hành vi mong muốn.
  • Hoàn thành phụ thuộc mã để có thể viết các bài kiểm tra.
  • Sửa mã cho các bài kiểm tra thất bại.

Hơn bạn sẽ thực sự viết mã.

Vì vậy, có, nó là một biện pháp dự kiến.


3

Tôi thấy đó là phần quan trọng nhất.

Kiểm thử đơn vị không phải lúc nào cũng là "xem nó có hoạt động tốt không", đó là về học tập. Khi bạn kiểm tra một cái gì đó đủ, nó sẽ trở thành "mã hóa cứng" vào não của bạn và cuối cùng bạn giảm thời gian kiểm tra đơn vị của mình và có thể thấy mình viết toàn bộ các lớp và phương thức mà không cần kiểm tra bất cứ điều gì cho đến khi hoàn thành.

Đây là lý do tại sao một trong những câu trả lời khác trên trang này đề cập rằng trong một "khóa học", họ đã thực hiện 90% bài kiểm tra, bởi vì mọi người đều cần phải tìm hiểu những mục tiêu của họ.

Kiểm thử đơn vị không chỉ là việc sử dụng thời gian rất quý giá vì nó thực sự nâng cao kỹ năng của bạn, đó là một cách tốt để vượt qua mã của chính bạn một lần nữa và tìm ra một lỗi logic trên đường đi.


2

Nó có thể cho nhiều người, nhưng nó phụ thuộc.

Nếu bạn viết bài kiểm tra trước (TDD), bạn có thể gặp một số sự chồng chéo trong thời gian viết bài kiểm tra thực sự hữu ích để viết mã. Xem xét:

  • Xác định kết quả và đầu vào (tham số)
  • Quy ước đặt tên
  • Cấu trúc - nơi để đặt mọi thứ.
  • Suy nghĩ đơn giản

Khi viết bài kiểm tra sau khi viết mã, bạn có thể phát hiện ra mã của mình không dễ kiểm tra, do đó việc kiểm tra viết khó hơn / mất nhiều thời gian hơn.

Hầu hết các lập trình viên đã viết mã lâu hơn rất nhiều so với các bài kiểm tra, vì vậy tôi hy vọng hầu hết trong số họ sẽ không thông thạo. Ngoài ra, bạn có thể thêm thời gian để hiểu và sử dụng khung thử nghiệm của mình.

Tôi nghĩ rằng chúng ta cần thay đổi suy nghĩ về việc mất bao lâu để viết mã và cách kiểm thử đơn vị có liên quan. Không bao giờ nhìn vào nó trong ngắn hạn và không bao giờ chỉ so sánh tổng thời gian để cung cấp một tính năng cụ thể bởi vì bạn phải xem xét không chỉ bạn viết mã tốt hơn / ít lỗi hơn, mà mã còn dễ thay đổi hơn mà vẫn làm cho nó tốt hơn / ít lỗi hơn.

Tại một số điểm, tất cả chúng ta chỉ có khả năng viết mã rất tốt, vì vậy một số công cụ và kỹ thuật chỉ có thể cung cấp rất nhiều trong việc cải thiện kỹ năng của chúng tôi. Không giống như tôi có thể xây nhà nếu tôi chỉ có máy cưa dẫn đường bằng laser.


2

Có phải là bình thường để dành càng nhiều, nếu không nhiều hơn, thời gian viết bài kiểm tra hơn mã thực tế?

Vâng, đúng vậy. Với một số hãy cẩn thận.

Trước hết, đó là "bình thường" theo nghĩa là hầu hết các cửa hàng lớn hoạt động theo cách này, vì vậy ngay cả khi cách này hoàn toàn sai lầm và ngu ngốc, thì thực tế là hầu hết các cửa hàng lớn hoạt động theo cách này làm cho nó "bình thường".

Bằng cách này, tôi không có nghĩa là thử nghiệm nó là sai. Tôi đã làm việc trong các môi trường không có thử nghiệm, và trong các môi trường có thử nghiệm ám ảnh cưỡng chế, và tôi vẫn có thể nói với bạn rằng ngay cả thử nghiệm ám ảnh cưỡng chế vẫn tốt hơn là không thử nghiệm.

Và tôi chưa làm TDD, (ai biết, tôi có thể trong tương lai), nhưng tôi thực hiện phần lớn các chu trình sửa lỗi-chạy-gỡ lỗi của mình bằng cách chạy thử nghiệm, không phải ứng dụng thực tế, vì vậy, tôi làm việc rất nhiều trong các thử nghiệm của tôi, để tránh càng nhiều càng tốt để chạy ứng dụng thực tế.

Tuy nhiên, hãy lưu ý rằng có những nguy hiểm khi thử nghiệm quá mức, và cụ thể là trong khoảng thời gian dành cho việc duy trì các thử nghiệm. (Tôi chủ yếu viết câu trả lời này để chỉ ra điều này.)

Trong phần mở đầu của The Art of Unit tests (Manning, 2009) của Roy Osherove , tác giả thừa nhận đã tham gia vào một dự án thất bại phần lớn do gánh nặng phát triển to lớn do các bài kiểm tra đơn vị được thiết kế tồi phải duy trì trong suốt thời gian của nỗ lực phát triển. Vì vậy, nếu bạn thấy mình dành quá nhiều thời gian để làm gì ngoài việc duy trì các bài kiểm tra của mình, điều này không nhất thiết có nghĩa là bạn đang đi đúng hướng, bởi vì đó là "bình thường". Nỗ lực phát triển của bạn có thể đã đi vào một chế độ không lành mạnh, trong đó việc xem xét lại triệt để phương pháp thử nghiệm của bạn có thể là cần thiết để cứu dự án.


0

Có phải là bình thường để dành càng nhiều, nếu không nhiều hơn, thời gian viết bài kiểm tra hơn mã thực tế?

  • để viết bài kiểm tra đơn vị (Kiểm tra mô-đun cách ly) nếu mã được ghép nối cao (di sản, không đủ phân tách mối quan tâm , thiếu phụ thuộc tiêm , không phát triển tdd )
  • để viết các bài kiểm tra tích hợp / chấp nhận nếu logic cần kiểm tra chỉ có thể truy cập thông qua mã gui
  • Không được viết các bài kiểm tra tích hợp / chấp nhận miễn là mã gui và logic nghiệp vụ được tách riêng (Bài kiểm tra không cần phải tương tác với gui)
  • Không viết bài kiểm tra đơn vị nếu có sự lo ngại, tiêm phụ thuộc, mã đã được kiểm tra phát triển (tdd)
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.