Là thử nghiệm đơn vị có giá trị nỗ lực? [đóng cửa]


572

Tôi đang làm việc để tích hợp thử nghiệm đơn vị vào quá trình phát triển trong nhóm tôi làm việc và có một số người hoài nghi. Một số cách tốt để thuyết phục các nhà phát triển hoài nghi về nhóm giá trị của Kiểm thử đơn vị là gì? Trong trường hợp cụ thể của tôi, chúng tôi sẽ thêm Đơn vị kiểm tra khi chúng tôi thêm chức năng hoặc sửa lỗi. Thật không may, cơ sở mã của chúng tôi không cho vay để kiểm tra dễ dàng.


25
Làm thế nào bạn có thể yêu cầu một điều như vậy .. Đơn vị thử nghiệm rất hông :)? Nghiêm túc ... ý tưởng chung là như nhau ... hãy thử nghiệm đơn vị nếu bạn cảm thấy lợi ích đó vượt xa chi phí ... nếu bạn có lý do để tin khác .. hãy tìm thứ khác có ích.
Gishu

14
(xác nhận thường xuyên với gỡ lỗi \ phát hành bản dựng + giao diện sạch cho các lớp + trình kiểm tra giả chuyên dụng)> kiểm tra đơn vị
Viktor Sehr

110
Đã từng ở một vài đội có cùng thái độ, kinh nghiệm của tôi là bạn đang lãng phí thời gian. Những người hoài nghi chỉ cho bạn chạy trốn, và sẽ phá hoại và ném đá bạn cho đến khi bạn thất vọng và chuyển đến một tổ chức chia sẻ giá trị của bạn. Đó có lẽ là những gì bạn nên làm. Nếu "người dẫn đầu" của đội là một trong những người hoài nghi, hãy suy nghĩ nghiêm túc về việc thoát ra. Tôi đã thấy loại kháng cự này đối với thử nghiệm đơn vị chỉ là phần nổi của tảng băng thực hành phát triển xấu.
Cướp

7
@ViktorSehr: các bài kiểm tra đơn vị không đối lập với các giao diện sạch, thực tế chúng ngược lại khi áp dụng TDD. Hoặc là, hoặc ghế lái + vô lăng> nhà để xe.
Jonas Byström

5
Kiểm thử đơn vị là một sự lãng phí thời gian lớn mà hiếm khi phát hiện ra lỗi nhưng lại ăn mất 30% thời gian và ngân sách sửa lỗi và phát triển
Dominic

Câu trả lời:


722

Mỗi ngày trong văn phòng của chúng tôi có một cuộc trao đổi diễn ra như thế này:

"Man, tôi chỉ thích thử nghiệm đơn vị, tôi vừa có thể thực hiện một loạt các thay đổi về cách thức hoạt động của một cái gì đó, và sau đó có thể xác nhận rằng tôi đã không phá vỡ bất cứ điều gì bằng cách chạy thử nghiệm lại ..."

Các chi tiết thay đổi hàng ngày, nhưng tình cảm thì không. Các thử nghiệm đơn vị và phát triển dựa trên thử nghiệm (TDD) có rất nhiều lợi ích tiềm ẩn và cá nhân cũng như những lợi ích rõ ràng mà bạn không thể thực sự giải thích cho ai đó cho đến khi chính họ làm điều đó.

Nhưng, bỏ qua điều đó, đây là nỗ lực của tôi!

  1. Kiểm tra đơn vị cho phép bạn thực hiện các thay đổi lớn để mã nhanh chóng. Bạn biết nó hoạt động ngay bây giờ vì bạn đã chạy thử nghiệm, khi bạn thực hiện các thay đổi bạn cần thực hiện, bạn cần làm cho các thử nghiệm hoạt động trở lại. Điều này tiết kiệm hàng giờ.

  2. TDD giúp bạn nhận ra khi nào nên ngừng mã hóa. Các bài kiểm tra của bạn cho bạn sự tự tin rằng bạn đã làm đủ bây giờ và có thể ngừng điều chỉnh và chuyển sang điều tiếp theo.

  3. Các thử nghiệm và mã làm việc cùng nhau để đạt được mã tốt hơn. Mã của bạn có thể là xấu / lỗi. KIỂM TRA của bạn có thể là xấu / lỗi. Trong TDD, bạn đang giao dịch với khả năng cả hai đều xấu / lỗi thấp. Thường thì đó là bài kiểm tra cần sửa nhưng đó vẫn là một kết quả tốt.

  4. TDD giúp chống táo bón mã hóa. Khi phải đối mặt với một công việc lớn và nan giải trước khi viết các bài kiểm tra sẽ giúp bạn di chuyển nhanh chóng.

  5. Kiểm thử đơn vị giúp bạn thực sự hiểu thiết kế mã bạn đang làm việc. Thay vì viết mã để làm một cái gì đó, bạn đang bắt đầu bằng cách phác thảo tất cả các điều kiện bạn đang tuân theo mã và những kết quả đầu ra mà bạn mong đợi từ đó.

  6. Các bài kiểm tra đơn vị cung cấp cho bạn thông tin phản hồi trực quan ngay lập tức, tất cả chúng ta đều thích cảm giác của tất cả các đèn xanh khi chúng ta thực hiện. Nó rất thỏa mãn. Cũng dễ dàng hơn nhiều để chọn nơi bạn rời đi sau khi bị gián đoạn vì bạn có thể thấy nơi bạn đã đến - đèn đỏ tiếp theo cần sửa.

  7. Trái ngược với thử nghiệm đơn vị niềm tin phổ biến không có nghĩa là viết mã nhiều gấp đôi, hoặc mã hóa chậm hơn. Nó nhanh hơn và mạnh hơn mã hóa mà không cần kiểm tra một khi bạn đã hiểu rõ về nó. Bản thân mã kiểm tra thường tương đối tầm thường và không thêm chi phí lớn cho những gì bạn đang làm. Đây là một điều bạn sẽ chỉ tin khi bạn làm nó :)

  8. Tôi nghĩ rằng chính Fowler đã nói: "Các bài kiểm tra không hoàn hảo, chạy thường xuyên, tốt hơn nhiều so với các bài kiểm tra hoàn hảo không bao giờ được viết cả". Tôi diễn giải điều này như cho phép tôi viết các bài kiểm tra trong đó tôi nghĩ chúng sẽ hữu ích nhất ngay cả khi phần còn lại trong phạm vi bảo hiểm mã của tôi không đầy đủ.

  9. Kiểm tra đơn vị tốt có thể giúp tài liệu và xác định những gì cần phải làm

  10. Kiểm tra đơn vị giúp sử dụng lại mã. Di chuyển cả mã của bạn các thử nghiệm của bạn sang dự án mới của bạn. Tinh chỉnh mã cho đến khi các bài kiểm tra chạy lại.

Rất nhiều công việc tôi tham gia không phải là Kiểm tra đơn vị tốt (tương tác người dùng ứng dụng web, v.v.), nhưng ngay cả như vậy, tất cả chúng tôi đều kiểm tra bị nhiễm trong cửa hàng này và hạnh phúc nhất khi chúng tôi kiểm tra thử nghiệm. Tôi không thể đề nghị cách tiếp cận đủ cao.


Là bài thuyết trình bạn liên kết một .xul?
dùng2427

3
Câu hỏi là về thử nghiệm đơn vị. TDD là một điều hoàn toàn khác so với thử nghiệm đơn vị.
ZunTzu

421

Kiểm tra đơn vị rất giống như đi đến phòng tập thể dục. Bạn biết nó tốt cho bạn, tất cả các cuộc tranh luận đều có ý nghĩa, vì vậy bạn bắt đầu làm việc. Có một sự vội vàng ban đầu, điều này thật tuyệt, nhưng sau vài ngày bạn bắt đầu tự hỏi liệu nó có đáng để gặp rắc rối không. Bạn đang dành một giờ trong ngày để thay quần áo và chạy trên một chiếc bánh hamster và bạn không chắc mình có thực sự đạt được bất cứ thứ gì ngoài đau chân và tay.

Sau đó, sau khoảng một hoặc hai tuần, khi cơn đau nhức sắp hết, một Hạn chót lớn bắt đầu đến gần. Bạn cần dành mỗi giờ thức dậy để cố gắng hoàn thành công việc "hữu ích", vì vậy bạn cắt bỏ những thứ không liên quan, như đi đến phòng tập thể dục. Bạn đã bỏ thói quen và đến khi Big Deadline kết thúc, bạn sẽ quay lại quảng trường. Nếu bạn xoay sở để quay trở lại phòng tập thể dục, bạn sẽ cảm thấy đau như lần đầu tiên bạn đi.

Bạn đọc một số thứ, để xem bạn có làm gì sai không. Bạn bắt đầu cảm thấy một chút bất hợp lý bất chấp tất cả sự phù hợp, những người hạnh phúc thể hiện những đức tính của tập thể dục. Bạn nhận ra rằng bạn không có nhiều điểm chung. Họ không phải lái xe 15 phút trên đường đến phòng tập thể dục; Có một cái trong tòa nhà của họ. Họ không phải tranh luận với bất kỳ ai về lợi ích của việc tập thể dục; nó chỉ là thứ mà mọi người làm và chấp nhận là quan trọng. Khi Hạn chót lớn đến gần, họ không nói rằng tập thể dục là không cần thiết hơn là sếp của bạn sẽ yêu cầu bạn ngừng ăn.

Vì vậy, để trả lời câu hỏi của bạn, Kiểm tra đơn vị thường đáng để nỗ lực, nhưng số lượng nỗ lực cần thiết sẽ không giống nhau đối với mọi người. Kiểm thử đơn vị có thể đòi hỏi một nỗ lực rất lớn nếu bạn đang làm việc với cơ sở mã spaghetti trong một công ty không thực sự coi trọng chất lượng mã. (Rất nhiều nhà quản lý sẽ hát những lời khen ngợi của Kiểm thử đơn vị, nhưng điều đó không có nghĩa là họ sẽ kiên trì thực hiện khi có vấn đề.)

Nếu bạn đang cố gắng giới thiệu Kiểm thử đơn vị vào công việc của mình và không thấy tất cả ánh nắng mặt trời và cầu vồng mà bạn đã được mong đợi, đừng tự trách mình. Bạn có thể cần tìm một công việc mới để thực sự làm cho Kiểm thử đơn vị làm việc cho bạn.


15
giai thoại tuyệt vời!
Sander Versluys

68
Ý tưởng của bạn rất hấp dẫn với tôi và tôi muốn đăng ký nhận bản tin của bạn.
Christopher Parker

165
Crap, tôi đã thử nghiệm đơn vị nhưng bây giờ bạn làm cho tôi cảm thấy như tôi cần phải đi đến phòng tập thể dục.
Vince

16
Tôi cũng không thích. Tôi thất bại như một người đam mê và như một con người.
Greg

13
+1: Rất nhiều nhà quản lý sẽ hát những lời khen ngợi của Kiểm thử đơn vị, nhưng điều đó không có nghĩa là họ sẽ kiên trì thực hiện khi có vấn đề ... Bạn có thể cần tìm một công việc mới để thực sự làm cho Kiểm thử đơn vị làm việc cho bạn. - Điểm tuyệt vời. Rất đúng.
Jim G.

136

Cách tốt nhất để thuyết phục ... tìm một lỗi, viết một bài kiểm tra đơn vị cho nó, sửa lỗi.

Lỗi cụ thể đó khó có thể xuất hiện trở lại và bạn có thể chứng minh bằng thử nghiệm của mình.

Nếu bạn làm điều này đủ, những người khác sẽ nắm bắt nhanh chóng.


56
Điều này chỉ hoạt động nếu mã của bạn được xây dựng theo cách tạo điều kiện cho thử nghiệm đơn vị (hoặc bạn sử dụng TypeMock). Nếu không, bạn sẽ dành eons xây dựng bài kiểm tra. Hầu hết các mã không có kiểm tra đơn vị được xây dựng với các phụ thuộc cứng (tức là mới ở mọi nơi) hoặc các phương thức tĩnh. Điều này làm cho gần như không thể thực hiện một bài kiểm tra đơn vị nhanh chóng tại chỗ.
Andrew

7
@Rei - Báo cáo lỗi có thể chứng minh là tuyệt vời, nhưng bạn sẽ chỉ tái tạo lỗi ONCE. 2 năm sau, bài kiểm tra đơn vị của bạn vẫn sẽ kiểm tra mã, rất lâu sau khi báo cáo lỗi đã bị đóng và quên.
Orion Edwards

4
Nó lưu lỗi sửa lỗi 1 ... kiểm tra ... tốt. Người dùng tìm thấy lỗi 2 ... sửa ... kiểm tra ... tốt. Người dùng tìm thấy lỗi 1 lần nữa. Lót, rửa sạch, lặp lại. Điều này xảy ra bởi vì sửa lỗi của bạn cho một lỗi, gây ra lỗi khác và ngược lại.
CaffGeek

1
@Rei Miyasaka: "Có thể nếu bạn có nhiều người duy trì dự án" - Tôi muốn nói rằng hầu hết các dự án không tầm thường đều làm. Như "chỉ để lại một bình luận": Vấn đề là có thể (tức là ) sẽ có tương tác với các mã khác có thể khiến lỗi này xuất hiện trở lại. Đó là lý do tại sao bạn thực sự phải kiểm tra nó.
sleske

5
Tuy nhiên, lưu ý rằng các thử nghiệm để ngăn hồi quy thường là thử nghiệm tích hợp và không phải thử nghiệm đơn vị (vì theo kinh nghiệm của tôi, hầu hết các lỗi không chỉ nằm trong một phần của mã, mà phát sinh từ sự kết hợp của một số đoạn mã, do đó bạn chỉ có thể tái tạo chúng bằng cách kết hợp tất cả các mảnh này).
sleske

69

thetalkingwalnut hỏi:

Một số cách tốt để thuyết phục các nhà phát triển hoài nghi về nhóm giá trị của Kiểm thử đơn vị là gì?

Mọi người ở đây sẽ tập trung vào rất nhiều lý do vì lý do tại sao thử nghiệm đơn vị là tốt. Tuy nhiên, tôi thấy rằng thường thì cách tốt nhất để thuyết phục ai đó về điều gì đó là lắng nghe lập luận của họ và giải quyết từng điểm một. Nếu bạn lắng nghe và giúp họ kiểm chứng bằng lời nói của họ, bạn có thể giải quyết từng vấn đề và có thể chuyển đổi chúng theo quan điểm của bạn (hoặc ít nhất, để chúng không có chân để đứng lên). Ai biết? Có lẽ họ sẽ thuyết phục bạn tại sao các bài kiểm tra đơn vị không phù hợp với tình huống của bạn. Không có khả năng, nhưng có thể. Có lẽ nếu bạn đăng các đối số của họ chống lại các bài kiểm tra đơn vị, chúng tôi có thể giúp xác định các phản biện.

Điều quan trọng là lắng nghe và hiểu cả hai mặt của tranh luận. Nếu bạn cố gắng áp dụng các bài kiểm tra đơn vị quá nhiệt tình mà không quan tâm đến mối quan tâm của mọi người, bạn sẽ kết thúc bằng một cuộc chiến tôn giáo (và có lẽ là các bài kiểm tra đơn vị thực sự vô giá trị). Nếu bạn áp dụng nó từ từ và bắt đầu bằng cách áp dụng nó ở nơi bạn sẽ thấy lợi ích cao nhất với chi phí thấp nhất, bạn có thể chứng minh giá trị của các bài kiểm tra đơn vị và có cơ hội thuyết phục mọi người tốt hơn. Tôi nhận ra điều này không dễ như nghe - nó thường đòi hỏi một chút thời gian và số liệu cẩn thận để đưa ra một lập luận thuyết phục.

Các bài kiểm tra đơn vị là một công cụ, giống như bất kỳ công cụ nào khác, và nên được áp dụng theo cách sao cho lợi ích (bắt lỗi) vượt xa chi phí (nỗ lực viết chúng). Đừng sử dụng chúng nếu / nơi chúng không có ý nghĩa và hãy nhớ rằng chúng chỉ là một phần trong kho công cụ của bạn (ví dụ: kiểm tra, xác nhận, phân tích mã, phương pháp chính thức, v.v.). Những gì tôi nói với các nhà phát triển của tôi là:

  1. Họ có thể bỏ qua việc viết một bài kiểm tra cho một phương thức nếu họ có một lý lẽ tốt tại sao nó không cần thiết (ví dụ: quá đơn giản để có giá trị hoặc quá khó để có giá trị) và cách thức phương thức sẽ được xác minh (ví dụ: kiểm tra, xác nhận , phương pháp chính thức, kiểm tra tương tác / tích hợp). Họ cần xem xét rằng một số xác minh như kiểm tra và bằng chứng chính thức được thực hiện tại một thời điểm và sau đó cần phải được lặp lại mỗi khi mã sản xuất thay đổi, trong khi kiểm tra đơn vị và xác nhận có thể được sử dụng làm kiểm tra hồi quy (được viết một lần và được thực hiện lặp đi lặp lại sau đó ). Đôi khi tôi đồng ý với họ, nhưng thường thì tôi sẽ tranh luận về việc một phương pháp thực sự quá đơn giản hay quá khó để kiểm tra đơn vị.

    • Nếu một nhà phát triển lập luận rằng một phương pháp dường như quá đơn giản để thất bại, thì có đáng để mất 60 giây cần thiết để viết bài kiểm tra đơn vị 5 dòng đơn giản cho nó không? 5 dòng mã này sẽ chạy mỗi đêm (bạn thực hiện các bản dựng hàng đêm, phải không?) Cho năm tới hoặc hơn và sẽ đáng nỗ lực nếu chỉ một lần xảy ra để bắt gặp sự cố có thể mất 15 phút hoặc lâu hơn để xác định và gỡ lỗi. Bên cạnh đó, việc viết các bài kiểm tra đơn vị dễ dàng làm tăng số lượng bài kiểm tra đơn vị, điều này làm cho nhà phát triển trông ổn.

    • Mặt khác, nếu một nhà phát triển lập luận rằng một phương pháp có vẻ quá khó để kiểm tra đơn vị (không xứng đáng với nỗ lực đáng kể), có lẽ đó là một dấu hiệu tốt cho thấy phương pháp cần được chia ra hoặc tái cấu trúc để kiểm tra các phần dễ dàng. Thông thường, đây là các phương thức dựa vào các tài nguyên bất thường như singletons, thời gian hiện tại hoặc các tài nguyên bên ngoài như tập kết quả cơ sở dữ liệu. Các phương thức này thường cần được cấu trúc lại thành một phương thức lấy tài nguyên (ví dụ: gọi getTime ()) và một phương thức lấy tài nguyên làm đối số (ví dụ: lấy dấu thời gian làm tham số). Tôi để họ bỏ qua việc kiểm tra phương thức lấy tài nguyên và thay vào đó họ viết một bài kiểm tra đơn vị cho phương thức hiện lấy tài nguyên làm đối số. Thông thường, điều này làm cho việc viết bài kiểm tra đơn vị đơn giản hơn nhiều và do đó đáng để viết.

  2. Nhà phát triển cần vẽ một "đường thẳng trên cát" trong việc kiểm tra đơn vị của họ toàn diện như thế nào. Sau này trong quá trình phát triển, bất cứ khi nào chúng tôi tìm thấy một lỗi, họ nên xác định xem các bài kiểm tra đơn vị toàn diện hơn có bắt được vấn đề không. Nếu vậy và nếu các lỗi như vậy lặp đi lặp lại, chúng cần chuyển "dòng" sang viết các bài kiểm tra đơn vị toàn diện hơn trong tương lai (bắt đầu bằng việc thêm hoặc mở rộng kiểm tra đơn vị cho lỗi hiện tại). Họ cần tìm sự cân bằng phù hợp.

Quan trọng của nó để nhận ra các bài kiểm tra đơn vị không phải là một viên đạn bạc và có một điều chẳng hạn như kiểm tra đơn vị quá nhiều. Tại nơi làm việc của tôi, bất cứ khi nào chúng tôi làm một bài học kinh nghiệm, tôi chắc chắn nghe thấy "chúng tôi cần phải viết nhiều bài kiểm tra đơn vị hơn". Ban quản lý gật đầu đồng ý vì nó đã đập vào đầu họ rằng "kiểm tra đơn vị" == "tốt".

Tuy nhiên, chúng ta cần hiểu tác động của "nhiều bài kiểm tra đơn vị hơn". Một nhà phát triển chỉ có thể viết ~ N dòng mã một tuần và bạn cần tìm ra bao nhiêu phần trăm của mã đó nên là mã kiểm tra đơn vị so với mã sản xuất. Một nơi làm việc lỏng lẻo có thể có 10% mã khi kiểm tra đơn vị và 90% mã là mã sản xuất, dẫn đến sản phẩm có rất nhiều tính năng (mặc dù rất có lỗi) (nghĩ là MS Word). Mặt khác, một cửa hàng nghiêm ngặt với 90% đơn vị kiểm tra và 10% mã sản xuất sẽ có một sản phẩm rắn với rất ít tính năng (nghĩ "vi"). Bạn có thể không bao giờ nghe báo cáo về sự cố sản phẩm sau, nhưng điều đó có thể có liên quan đến sản phẩm không bán chạy nhiều như chất lượng của mã.

Tệ hơn nữa, có lẽ điều chắc chắn duy nhất trong phát triển phần mềm là "thay đổi là không thể tránh khỏi". Giả sử cửa hàng nghiêm ngặt (90% đơn vị kiểm tra / 10% mã sản xuất) tạo ra một sản phẩm có đúng 2 tính năng (giả sử 5% mã sản xuất == 1 tính năng). Nếu khách hàng xuất hiện và thay đổi 1 trong số các tính năng, thì thay đổi đó sẽ bỏ qua 50% mã (45% kiểm tra đơn vị và 5% mã sản xuất). Cửa hàng lax (10% đơn vị kiểm tra / 90% mã sản xuất) có một sản phẩm với 18 tính năng, không có tính năng nào hoạt động tốt. Khách hàng của họ hoàn toàn sửa đổi các yêu cầu cho 4 tính năng của họ. Mặc dù thay đổi lớn gấp 4 lần, chỉ một nửa số cơ sở mã bị vứt bỏ (~ 25% = ~ 4,4% đơn vị kiểm tra + 20% mã sản xuất).

Quan điểm của tôi là bạn phải thông báo rằng bạn hiểu sự cân bằng giữa quá ít và quá nhiều thử nghiệm đơn vị - về cơ bản là bạn đã nghĩ qua cả hai mặt của vấn đề. Nếu bạn có thể thuyết phục đồng nghiệp và / hoặc quản lý của bạn về điều đó, bạn có được sự tín nhiệm và có lẽ có cơ hội tốt hơn để chiến thắng họ.


47
Nếu Vi có rất ít tính năng, bạn không sử dụng nó. ;)
Stefan Mai

1
+20 cho Stefan, nếu tôi có thể :)
Rob Grant

1
Testivus về Bảo hiểm Kiểm tra - googletesting.blogspot.com/2010/07/ trên
Bert F

Một phân tích tốt, mặc dù hai điều tôi muốn nói. Bạn dường như cho rằng việc thay đổi một tính năng đòi hỏi phải viết lại tất cả mã mà nó dựa vào và đó là một giả định rằng có một mối quan hệ tuyến tính giữa thay đổi và 'số lượng mã' thay đổi. Ngoài ra, một sản phẩm có thử nghiệm thấp có nhiều khả năng có thiết kế kém hơn, do đó, sản phẩm 'nhiều tính năng' gần như chắc chắn sẽ mất nhiều thời gian hơn cho mỗi tính năng (vì hầu như không có thử nghiệm và thiết kế hoàn toàn xấu).
nicodemus13

viết trường hợp thử nghiệm cho khối mã đơn giản đóng vai trò là cơ chế hồi quy - chỉ có tiêu cực tôi đã thấy là thêm nhiều khung ngăn xếp ...
bss

38

Tôi đã chơi với đơn vị thử nghiệm một số lần, và tôi vẫn tin chắc rằng đó là giá trị nỗ lực cho tình huống của tôi.

Tôi phát triển các trang web, nơi phần lớn logic liên quan đến việc tạo, truy xuất hoặc cập nhật dữ liệu trong cơ sở dữ liệu. Khi tôi đã cố gắng "chế nhạo" cơ sở dữ liệu cho mục đích thử nghiệm đơn vị, nó đã trở nên rất lộn xộn và có vẻ hơi vô nghĩa.

Khi tôi đã viết các bài kiểm tra đơn vị xung quanh logic kinh doanh, nó chưa bao giờ thực sự giúp tôi về lâu dài. Bởi vì tôi chủ yếu làm việc trên các dự án một mình, tôi có xu hướng biết trực giác những lĩnh vực mã nào có thể bị ảnh hưởng bởi thứ gì đó mà tôi đang làm việc và tôi kiểm tra các khu vực này bằng tay. Tôi muốn cung cấp một giải pháp cho khách hàng của mình càng nhanh càng tốt và kiểm tra đơn vị thường có vẻ lãng phí thời gian. Tôi liệt kê các bài kiểm tra thủ công và tự mình đi qua chúng, đánh dấu chúng khi tôi đi.

Tôi có thể thấy rằng nó có thể có ích khi một nhóm các nhà phát triển đang làm việc trên một dự án và cập nhật mã của nhau, nhưng ngay cả khi đó tôi nghĩ rằng nếu các nhà phát triển có chất lượng cao, giao tiếp tốt và mã được viết tốt thường là đủ .


8
Tôi biết điều này rất cũ nhưng tôi buộc phải bình luận. Cá nhân tôi đã tìm thấy các bài kiểm tra viết thành công cho lớp kiên trì của tôi. Đơn giản chỉ cần bắt đầu một giao dịch trước khi thử nghiệm và cuộn lại sau đó. Không cần chế giễu. Đôi khi tôi có một lớp để kéo một mảng dữ liệu, sau đó tôi chuyển mảng dữ liệu đó sang một lớp thứ hai thực hiện "mọi thứ" cho dữ liệu. Lớp thứ hai này không chạm vào cơ sở dữ liệu. Trong trường hợp này, tôi nhóm các thử nghiệm của mình, các thử nghiệm của lớp đầu tiên và chạm vào cơ sở dữ liệu là 'các thử nghiệm chức năng' và chạy không thường xuyên, các thử nghiệm cho lớp sau là các thử nghiệm đơn vị & chạy thường xuyên.
Josh Ribakoff

4
Thử nghiệm là tất cả về hạnh phúc. Tôi đã có gói 3900 dòng (PL / SQL) xử lý các bài đăng tự động đến hệ thống sổ cái chung. Bây giờ, cá nhân tôi ghét giao dịch với kế toán - họ rất kén chọn những thứ nhỏ nhặt như đồng xu phân số và công cụ. Buncha hậu môn số học giữ lại ... tôi không biết. Gói kiểm tra đơn vị của tôi cho gói kế toán là khoảng 22000 dòng và chỉ chạy dưới 18000 bài kiểm tra. Điều này giữ cho Head Honcho trong Kế toán luôn vui vẻ, và miễn là cánh quạt trên chiếc mũ lưỡi trai nhỏ của anh ấy đang quay tròn vui vẻ, tôi rất vui ... :-)
Bob Jarvis - Tái lập lại

31

Một điều tuyệt vời về các bài kiểm tra đơn vị là chúng phục vụ như tài liệu về cách mã của bạn có nghĩa là hành xử. Các bài kiểm tra tốt giống như một triển khai tham chiếu và các đồng đội có thể nhìn vào chúng để xem cách tích hợp mã của họ với mã của bạn.


26

Thử nghiệm đơn vị là giá trị đầu tư ban đầu. Kể từ khi bắt đầu sử dụng thử nghiệm đơn vị một vài năm trước đây, tôi đã tìm thấy một số lợi ích thực sự:

  • kiểm tra hồi quy loại bỏ nỗi sợ thực hiện thay đổi mã (không có gì giống như ánh sáng ấm áp khi thấy mã hoạt động hoặc phát nổ mỗi khi thay đổi được thực hiện)
  • ví dụ mã thực thi cho các thành viên khác trong nhóm (và chính bạn sau sáu tháng nữa ..)
  • tái cấu trúc không thương tiếc - điều này là vô cùng bổ ích, hãy thử nó!

Đoạn mã có thể là một trợ giúp tuyệt vời trong việc giảm chi phí tạo ra các bài kiểm tra. Không khó để tạo các đoạn mã cho phép tạo ra một phác thảo lớp và một vật cố kiểm tra đơn vị liên quan trong vài giây.


25

Bạn nên kiểm tra càng ít càng tốt!

có nghĩa là, bạn nên viết bài kiểm tra đơn vị vừa đủ để tiết lộ ý định. Điều này thường được che đậy hơn. Đơn vị kiểm tra chi phí bạn. Nếu bạn thực hiện thay đổi và bạn phải thay đổi các bài kiểm tra, bạn sẽ nhanh nhẹn hơn. Giữ bài kiểm tra đơn vị ngắn và ngọt ngào. Sau đó, họ có rất nhiều giá trị.

Tôi thường thấy rất nhiều bài kiểm tra sẽ không bao giờ phá vỡ, lớn và vụng về và không mang lại nhiều giá trị, cuối cùng chúng làm bạn chậm lại.


23

Tôi đã không thấy điều này trong bất kỳ câu trả lời nào khác, nhưng một điều tôi nhận thấy là tôi có thể gỡ lỗi nhanh hơn rất nhiều . Bạn không cần đi sâu vào ứng dụng của mình chỉ với một chuỗi các bước phù hợp để tìm mã sửa lỗi, chỉ để thấy bạn đã mắc lỗi boolean và cần phải làm lại tất cả. Với một bài kiểm tra đơn vị, bạn có thể chỉ cần bước trực tiếp vào mã bạn đang gỡ lỗi.


21

[Tôi có một điểm để làm cho tôi không thể thấy ở trên]

"Mọi người kiểm tra đơn vị, họ không nhất thiết phải nhận ra điều đó - SỰ THẬT"

Hãy suy nghĩ về nó, bạn viết một hàm để có thể phân tích một chuỗi và loại bỏ các ký tự dòng mới. Là một nhà phát triển người mới, bạn có thể chạy một vài trường hợp thông qua nó từ dòng lệnh bằng cách triển khai nó trong Main () hoặc bạn kết hợp một mặt trước trực quan bằng một nút, gắn chức năng của bạn vào một vài hộp văn bản và một nút và xem chuyện gì xảy ra

Đó là kiểm thử đơn vị - cơ bản và kết hợp kém nhưng bạn kiểm tra đoạn mã cho một vài trường hợp.

Bạn viết một cái gì đó phức tạp hơn. Nó ném lỗi khi bạn ném một vài trường hợp (kiểm tra đơn vị) và bạn gỡ lỗi vào mã và theo dõi mặc dù. Bạn nhìn vào các giá trị khi bạn trải qua và quyết định xem chúng đúng hay sai. Đây là thử nghiệm đơn vị ở một mức độ nào đó.

Kiểm thử đơn vị ở đây thực sự thực hiện hành vi đó, chính thức hóa nó thành một mô hình có cấu trúc và lưu nó để bạn có thể dễ dàng chạy lại các thử nghiệm đó. Nếu bạn viết trường hợp kiểm tra đơn vị "phù hợp" thay vì kiểm tra thủ công, sẽ mất cùng một khoảng thời gian hoặc có thể ít hơn khi bạn có kinh nghiệm và bạn có thể lặp lại nhiều lần


16

Trong nhiều năm, tôi đã cố gắng thuyết phục mọi người rằng họ cần viết bài kiểm tra đơn vị cho mã của họ. Cho dù họ đã viết các bài kiểm tra trước (như trong TDD) hoặc sau khi họ mã hóa chức năng, tôi luôn cố gắng giải thích cho họ tất cả các lợi ích của việc kiểm tra đơn vị cho mã. Hầu như không ai đồng ý với tôi. Bạn không thể không đồng ý với điều gì đó hiển nhiên và bất kỳ người thông minh nào cũng sẽ thấy lợi ích của bài kiểm tra đơn vị và TDD.

Vấn đề với kiểm tra đơn vị là nó đòi hỏi phải thay đổi hành vi và rất khó thay đổi hành vi của mọi người. Với lời nói, bạn sẽ có rất nhiều người đồng ý với bạn, nhưng bạn sẽ không thấy nhiều thay đổi trong cách họ làm việc.

Bạn phải thuyết phục mọi người bằng cách làm. Thành công cá nhân của bạn sẽ thu hút nhiều người hơn tất cả những lý lẽ bạn có thể có. Nếu họ thấy bạn không chỉ nói về bài kiểm tra đơn vị hoặc TDD, mà bạn đang làm những gì bạn giảng, và bạn thành công, mọi người sẽ cố gắng bắt chước bạn.

Bạn cũng nên đảm nhận vai trò lãnh đạo vì không ai viết bài kiểm tra đơn vị ngay lần đầu tiên, vì vậy bạn có thể cần hướng dẫn họ cách thực hiện, chỉ cho họ cách và các công cụ có sẵn cho họ. Giúp họ trong khi họ viết bài kiểm tra đầu tiên, xem lại bài kiểm tra họ tự viết và chỉ cho họ các mẹo, thành ngữ và mẫu bạn đã học được qua kinh nghiệm của chính mình. Sau một thời gian, họ sẽ bắt đầu tự mình nhìn thấy những lợi ích và họ sẽ thay đổi hành vi của mình để kết hợp các bài kiểm tra đơn vị hoặc TDD vào hộp công cụ của họ.

Những thay đổi sẽ không xảy ra trong đêm, nhưng với một chút kiên nhẫn, bạn có thể đạt được mục tiêu của mình.


12

Một phần chính của sự phát triển dựa trên thử nghiệm thường được đề cập đến là việc viết mã thử nghiệm. Ban đầu có vẻ như là một sự thỏa hiệp nào đó, nhưng bạn sẽ khám phá ra rằng mã có thể kiểm tra được cuối cùng cũng là mô-đun, có thể duy trì và có thể đọc được. Nếu bạn vẫn cần giúp đỡ để thuyết phục mọi người thì đây là một bài thuyết trình đơn giản tốt đẹp về những lợi thế của kiểm tra đơn vị.


11

Nếu cơ sở mã hiện tại của bạn không cho vay để thử nghiệm đơn vị và nó đã được sản xuất, bạn có thể tạo ra nhiều vấn đề hơn bạn giải quyết bằng cách cố gắng cấu trúc lại tất cả mã của mình để có thể kiểm tra được đơn vị.

Thay vào đó, bạn có thể nên nỗ lực cải thiện thử nghiệm tích hợp của mình. Có rất nhiều mã ngoài đó đơn giản hơn để viết mà không cần kiểm tra đơn vị, và nếu QA có thể xác nhận chức năng đối với tài liệu yêu cầu, thì bạn đã hoàn thành. Vận chuyển nó.

Ví dụ kinh điển về điều này trong tâm trí tôi là một SqlDataReader được nhúng trong trang ASPX được liên kết với GridView. Mã này là tất cả trong tệp ASPX. SQL là trong một thủ tục được lưu trữ. Bạn làm bài kiểm tra gì? Nếu trang thực hiện những gì nó phải làm, bạn có thực sự nên thiết kế lại thành nhiều lớp để bạn có thể tự động hóa không?


10

Một trong những điều tốt nhất về kiểm thử đơn vị là mã của bạn sẽ trở nên dễ kiểm tra hơn khi bạn thực hiện. Mã có sẵn được tạo mà không có kiểm tra luôn là một thách thức bởi vì chúng không có nghĩa là được kiểm tra đơn vị, nên không có mức độ khớp nối cao giữa các lớp, các đối tượng khó định cấu hình trong lớp của bạn - như email gửi tài liệu tham khảo - và như vậy. Nhưng đừng để điều này làm bạn thất vọng! Bạn sẽ thấy rằng thiết kế mã tổng thể của bạn sẽ trở nên tốt hơn khi bạn bắt đầu viết bài kiểm tra đơn vị, và bạn càng kiểm tra, bạn sẽ càng tự tin hơn khi thực hiện nhiều thay đổi hơn cho nó mà không sợ làm hỏng ứng dụng hoặc giới thiệu lỗi .

Có một số lý do để kiểm tra đơn vị mã của bạn, nhưng khi thời gian trôi qua, bạn sẽ thấy rằng thời gian bạn tiết kiệm để kiểm tra là một trong những lý do tốt nhất để thực hiện. Trong một hệ thống tôi vừa giao, tôi khăng khăng thực hiện kiểm tra đơn vị tự động bất chấp các tuyên bố rằng tôi dành nhiều thời gian hơn để thực hiện các kiểm tra so với kiểm tra hệ thống theo cách thủ công. Với tất cả các thử nghiệm đơn vị của tôi đã hoàn thành, tôi đã chạy hơn 400 trường hợp thử nghiệm trong vòng chưa đầy 10 phút và mỗi lần tôi phải thực hiện một thay đổi nhỏ trong mã, tất cả tôi phải chắc chắn rằng mã vẫn hoạt động mà không có lỗi là mười phút Bạn có thể tưởng tượng thời gian người ta sẽ dành để chạy hơn 400 trường hợp thử nghiệm đó không?

Khi nói đến thử nghiệm tự động - có thể là thử nghiệm đơn vị hoặc thử nghiệm chấp nhận - mọi người đều nghĩ rằng thật lãng phí khi viết mã những gì bạn có thể làm thủ công và đôi khi điều đó đúng - nếu bạn dự định chỉ chạy thử nghiệm một lần. Phần tốt nhất của kiểm tra tự động là bạn có thể chạy chúng nhiều lần mà không cần nỗ lực và sau lần chạy thứ hai hoặc thứ ba, thời gian và công sức bạn đã lãng phí đã được trả cho.

Một lời khuyên cuối cùng là không chỉ đơn vị kiểm tra mã của bạn mà còn bắt đầu thực hiện kiểm tra trước (xem TDDBDD để biết thêm)


8

Các bài kiểm tra đơn vị cũng đặc biệt hữu ích khi tái cấu trúc hoặc viết lại một đoạn mã. Nếu bạn có phạm vi kiểm tra đơn vị tốt, bạn có thể tự tin tái cấu trúc. Nếu không có bài kiểm tra đơn vị, thường rất khó để đảm bảo rằng bạn đã không phá vỡ bất cứ điều gì.


7

Tóm lại - có. Họ đáng giá từng ounce nỗ lực ... đến một điểm. Các thử nghiệm, vào cuối ngày, vẫn là mã, và giống như sự tăng trưởng mã thông thường, các thử nghiệm của bạn cuối cùng sẽ cần phải được cấu trúc lại để có thể duy trì và bền vững. Có một tấn GOTCHAS! khi nói đến thử nghiệm đơn vị, nhưng người đàn ông ơi, không có gì, và ý tôi là KHÔNG NÊN trao quyền cho nhà phát triển thực hiện các thay đổi một cách tự tin hơn một bộ thử nghiệm đơn vị phong phú.

Tôi đang làm việc trên một dự án ngay bây giờ .... nó có phần TDD và chúng tôi có phần lớn các quy tắc kinh doanh được mã hóa dưới dạng thử nghiệm ... hiện tại chúng tôi có khoảng 500 thử nghiệm đơn vị. Lần lặp lại trước đây tôi đã phải tân trang lại nguồn dữ liệu của chúng tôi và cách giao diện ứng dụng máy tính để bàn của chúng tôi với nguồn dữ liệu đó. Mất vài ngày, tôi chỉ chạy thử nghiệm đơn vị để xem những gì tôi đã phá vỡ và sửa nó. Tạo sự thay đổi; Xây dựng và chạy thử nghiệm của bạn; sửa chữa những gì bạn đã phá vỡ. Rửa, rửa, lặp lại khi cần thiết. Theo truyền thống, những gì sẽ mất nhiều ngày của QA và vô số căng thẳng thay vào đó là một trải nghiệm ngắn và thú vị.

Chuẩn bị trước, một chút nỗ lực thêm và sẽ trả tiền gấp 10 lần sau khi bạn phải bắt đầu tìm kiếm các tính năng / chức năng cốt lõi.

Tôi đã mua cuốn sách này - đó là một cuốn Kinh thánh về xUnit Kiểm tra kiến ​​thức - đây có lẽ là một trong những cuốn sách được tham khảo nhiều nhất trên kệ của tôi và tôi tham khảo nó hàng ngày: liên kết văn bản


+1: nhưng người đàn ông ơi, người đàn ông ơi, không có gì, và ý tôi là KHÔNG NÊN trao quyền cho nhà phát triển thực hiện các thay đổi một cách tự tin hơn là một bộ thử nghiệm đơn vị phong phú. - Thật vậy. Tôi ước tôi tìm ra điều này sớm hơn.
Jim G.

7

Thỉnh thoảng, bản thân tôi hoặc một trong những đồng nghiệp của tôi sẽ mất vài giờ để tìm ra lỗi của một chút tối nghĩa và một khi nguyên nhân của lỗi được tìm thấy 90% thời gian mà mã không được kiểm tra. Kiểm tra đơn vị không tồn tại vì nhà phát triển đang cắt góc để tiết kiệm thời gian, nhưng sau đó mất điều này và gỡ lỗi nhiều hơn.

Dành một lượng nhỏ thời gian để viết một bài kiểm tra đơn vị có thể tiết kiệm hàng giờ để gỡ lỗi trong tương lai.


+1: Dành một lượng nhỏ thời gian để viết bài kiểm tra đơn vị có thể tiết kiệm hàng giờ để gỡ lỗi trong tương lai. - Ừ!
Jim G.

7

Tôi đang làm việc như một kỹ sư bảo trì của một cơ sở mã kém, tệ hại và tài liệu lớn. Tôi muốn những người đã viết mã đã viết các bài kiểm tra đơn vị cho nó.
Mỗi lần tôi thực hiện thay đổi và cập nhật mã sản xuất, tôi sợ rằng tôi có thể đưa ra một lỗi vì đã không xem xét một số điều kiện.
Nếu họ viết thử nghiệm, việc thay đổi cơ sở mã sẽ dễ dàng và nhanh hơn. (Đồng thời cơ sở mã sẽ ở trạng thái tốt hơn) ..

Tôi nghĩ các bài kiểm tra đơn vị chứng minh rất hữu ích khi viết api hoặc các khung phải tồn tại trong nhiều năm và được sử dụng / sửa đổi / phát triển bởi những người khác ngoài các lập trình viên gốc.


Bạn có thêm kiểm tra đơn vị cho mã mới hoặc sửa lỗi mà bạn thực hiện không?
oɔɯǝɹ

6

Kiểm thử đơn vị chắc chắn là giá trị nỗ lực. Thật không may, bạn đã chọn một kịch bản khó (nhưng không may phổ biến) để thực hiện nó.

Lợi ích tốt nhất từ ​​kiểm thử đơn vị bạn sẽ nhận được là khi sử dụng nó từ đầu - trên một số dự án nhỏ, tôi đã may mắn viết bài kiểm tra đơn vị của mình trước khi triển khai các lớp của mình (giao diện đã hoàn tất điểm). Với các bài kiểm tra đơn vị phù hợp, bạn sẽ tìm và sửa các lỗi trong các lớp của mình trong khi chúng vẫn còn trong giai đoạn trứng nước và không ở bất kỳ nơi nào gần hệ thống phức tạp mà chắc chắn chúng sẽ được tích hợp trong tương lai.

Nếu phần mềm của bạn được định hướng đối tượng vững chắc, bạn sẽ có thể thêm kiểm tra đơn vị ở cấp lớp mà không cần quá nhiều nỗ lực. Nếu bạn không may mắn, bạn vẫn nên cố gắng kết hợp kiểm tra đơn vị bất cứ nơi nào bạn có thể. Hãy chắc chắn rằng khi bạn thêm chức năng mới, các phần mới được xác định rõ ràng với các giao diện rõ ràng và bạn sẽ thấy việc kiểm tra đơn vị giúp cuộc sống của bạn dễ dàng hơn nhiều.


6

Khi bạn nói, "cơ sở mã của chúng tôi không cho vay để kiểm tra dễ dàng" là dấu hiệu đầu tiên của mùi mã. Kiểm tra đơn vị viết có nghĩa là bạn thường viết mã khác nhau để làm cho mã dễ kiểm tra hơn. Đây là một điều tốt theo quan điểm của tôi vì những gì tôi đã thấy trong nhiều năm qua khi viết mã mà tôi phải viết bài kiểm tra, nó buộc tôi phải đưa ra một thiết kế tốt hơn.


6

Tôi không biết. Rất nhiều nơi không làm bài kiểm tra đơn vị, nhưng chất lượng của mã là tốt. Microsoft thực hiện bài kiểm tra đơn vị, nhưng Bill Gates đã đưa ra một màn hình màu xanh trong bài thuyết trình của mình.


Lưu ý rằng đã gần 15 năm trước, khi thử nghiệm đơn vị không phổ biến như ngày nay.
fwielstra

1
Và Internet Explorer vẫn không lưu được nhiều trang web.
Cees Timmerman

5

Tôi đã viết một bài blog rất lớn về chủ đề này. Tôi thấy rằng việc kiểm tra đơn vị một mình không đáng để thực hiện và thường bị cắt giảm khi thời hạn đến gần hơn.

Thay vì nói về kiểm thử đơn vị theo quan điểm xác minh "kiểm tra sau", chúng ta nên xem giá trị thực được tìm thấy khi bạn bắt đầu viết một thông số / kiểm tra / ý tưởng trước khi thực hiện.

Ý tưởng đơn giản này đã thay đổi cách tôi viết phần mềm và tôi sẽ không quay lại cách "cũ".

Thử nghiệm phát triển đầu tiên đã thay đổi cuộc đời tôi như thế nào


1
+1 - và tôi phải nói rằng thật khó hiểu khi có bao nhiêu troll mà mục blog thu hút (trước khi bạn đăng bài ở đây, nếu tôi không nhầm).
Jeff Sternal

haha đồng ý :) </ reddit trang đầu có vẻ như>
Toran Billups

3

Có - Kiểm tra đơn vị chắc chắn là đáng nỗ lực nhưng bạn nên biết đó không phải là viên đạn bạc. Kiểm thử đơn vị là công việc và bạn sẽ phải làm việc để giữ cho bài kiểm tra được cập nhật và có liên quan khi thay đổi mã nhưng giá trị được cung cấp xứng đáng với công sức bạn phải bỏ ra. Khả năng tái cấu trúc không bị trừng phạt là một lợi ích rất lớn vì bạn luôn có thể xác thực chức năng bằng cách chạy thử nghiệm của bạn sau khi bất kỳ mã thay đổi. Mẹo nhỏ là đừng quá bận tâm vào chính xác đơn vị công việc bạn đang thử nghiệm hoặc cách bạn yêu cầu kiểm tra giàn giáo và khi kiểm tra đơn vị thực sự là một thử nghiệm chức năng, v.v. Mọi người sẽ tranh luận về công cụ này trong nhiều giờ cuối cùng và thực tế là bất kỳ thử nghiệm nào bạn làm như mã viết của bạn tốt hơn là không làm nó. Tiên đề khác là về chất lượng chứ không phải số lượng - Tôi đã thấy các cơ sở mã với 1000 ' Các bài kiểm tra về cơ bản là vô nghĩa vì phần còn lại không thực sự kiểm tra bất cứ điều gì hữu ích hoặc bất kỳ nội dung cụ thể nào như quy tắc kinh doanh, v.v. Tôi cũng đã thấy các cơ sở mã với độ bao phủ mã 30% nhưng các thử nghiệm có liên quan, có ý nghĩa và thực sự tuyệt vời khi họ đã kiểm tra chức năng cốt lõi của mã được viết và thể hiện cách sử dụng mã.

Một trong những thủ thuật yêu thích của tôi khi khám phá các khung hoặc cơ sở mã mới là viết các bài kiểm tra đơn vị cho 'nó' để khám phá cách mọi thứ hoạt động. Đó là một cách tuyệt vời để tìm hiểu thêm về một cái gì đó mới thay vì đọc một tài liệu khô khan :)


3

Gần đây tôi đã trải qua cùng một trải nghiệm tại nơi làm việc của tôi và thấy hầu hết trong số họ biết lợi ích lý thuyết nhưng phải bán cho họ những lợi ích cụ thể, vì vậy đây là những điểm tôi đã sử dụng (thành công):

  • Chúng tiết kiệm thời gian khi thực hiện kiểm tra âm tính, trong đó bạn xử lý các đầu vào không mong muốn (con trỏ null, ngoài các giá trị giới hạn, v.v.), vì bạn có thể thực hiện tất cả những điều này trong một quy trình.
  • Họ cung cấp phản hồi ngay lập tức tại thời điểm biên dịch liên quan đến tiêu chuẩn của các thay đổi.
  • Chúng rất hữu ích để kiểm tra các biểu diễn dữ liệu nội bộ có thể không bị lộ trong thời gian chạy bình thường.

và cái lớn ...

  • Bạn có thể không cần kiểm tra đơn vị, nhưng khi có người khác đến và sửa đổi mã mà không hiểu đầy đủ, nó có thể bắt được rất nhiều lỗi ngớ ngẩn mà họ có thể mắc phải.

+1: • Bạn có thể không cần thử nghiệm đơn vị, nhưng khi có người khác đến và sửa đổi mã mà không hiểu đầy đủ, nó có thể bắt được rất nhiều lỗi ngớ ngẩn mà họ có thể mắc phải. - Ừ. Và với số lượng doanh thu trong ngành công nghiệp phần mềm, đây là một lợi ích rất lớn.
Jim G.

3

Tôi đã phát hiện ra TDD một vài năm trước đây và kể từ đó đã viết tất cả các dự án thú cưng của tôi bằng cách sử dụng nó. Tôi đã ước tính rằng TDD sẽ mất khoảng thời gian tương đương với dự án TDD khi cùng với cao bồi, nhưng tôi đã tăng sự tự tin vào sản phẩm cuối cùng đến mức tôi không thể giúp cảm giác hoàn thành.

Tôi cũng cảm thấy rằng nó cải thiện phong cách thiết kế của tôi (theo định hướng giao diện nhiều hơn trong trường hợp tôi cần phải chế giễu mọi thứ cùng nhau) và, như bài đăng màu xanh lá cây ở trên cùng, nó giúp "táo bón mã hóa": khi bạn không biết gì để viết tiếp, hoặc bạn có một nhiệm vụ khó khăn trước mặt, bạn có thể viết nhỏ.

Cuối cùng, tôi thấy rằng cho đến nay, ứng dụng hữu ích nhất của TDD là trong việc gỡ lỗi, nếu chỉ vì bạn đã phát triển một khung công tác thẩm vấn mà bạn có thể thúc đẩy dự án tạo ra lỗi theo cách lặp lại.


3

Một điều chưa ai đề cập đến là nhận được cam kết của tất cả các nhà phát triển để thực sự chạy và cập nhật bất kỳ thử nghiệm tự động hiện có nào. Các thử nghiệm tự động mà bạn quay lại và thấy bị hỏng vì sự phát triển mới làm mất rất nhiều giá trị và làm cho thử nghiệm tự động thực sự đau đớn. Hầu hết các thử nghiệm đó sẽ không chỉ ra lỗi do nhà phát triển đã kiểm tra mã theo cách thủ công, vì vậy thời gian cập nhật chúng chỉ là lãng phí.

Thuyết phục những người hoài nghi không phá hủy công việc mà những người khác đang làm trong bài kiểm tra đơn vị là điều quan trọng hơn nhiều để có được giá trị từ thử nghiệm và có thể dễ dàng hơn.

Dành hàng giờ để cập nhật các bài kiểm tra đã bị hỏng do các tính năng mới mỗi khi bạn cập nhật từ kho lưu trữ là không hiệu quả cũng không thú vị.


2

Nếu bạn đang sử dụng NUnit, một bản demo đơn giản nhưng hiệu quả là chạy (các) bộ thử nghiệm riêng của NUnit trước chúng. Nhìn thấy một bộ thử nghiệm thực sự cho một cơ sở mã hóa tập luyện có giá trị hàng ngàn từ ...


2

Kiểm thử đơn vị giúp rất nhiều trong các dự án lớn hơn bất kỳ nhà phát triển nào có thể giữ trong đầu. Chúng cho phép bạn chạy bộ kiểm tra đơn vị trước khi đăng ký và khám phá nếu bạn đã phá vỡ thứ gì đó. Điều này cắt giảm rất nhiều trường hợp phải ngồi và xoay ngón tay cái của bạn trong khi chờ người khác sửa lỗi mà họ đã kiểm tra hoặc gặp rắc rối trong việc hoàn nguyên thay đổi của họ để bạn có thể hoàn thành công việc. Nó cũng vô cùng có giá trị trong việc tái cấu trúc, vì vậy bạn có thể chắc chắn rằng mã được cấu trúc lại vượt qua tất cả các thử nghiệm mà mã gốc đã làm.


2

Với bộ kiểm thử đơn vị, người ta có thể thay đổi mã trong khi vẫn giữ nguyên các tính năng còn lại. Đó là một lợi thế lớn. Bạn có sử dụng bộ kiểm tra đơn vị kiểm tra và hồi quy đơn vị khi bạn hoàn thành mã hóa tính năng mới.


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.