Đơn vị kiểm tra nhóm người mới cần kiểm tra đơn vị


37

Tôi đang làm việc với một nhóm mới trong lịch sử chưa thực hiện bất kỳ thử nghiệm đơn vị nào. Mục tiêu của tôi là nhóm cuối cùng sẽ sử dụng TDD (Test Driven Development) làm quy trình tự nhiên của họ. Nhưng vì TDD là một sự thay đổi tâm trí triệt để như vậy đối với một nhóm thử nghiệm không đơn vị, tôi nghĩ rằng tôi sẽ chỉ bắt đầu với việc viết các bài kiểm tra đơn vị sau khi mã hóa.

Có ai đã ở trong một tình huống tương tự? Cách hiệu quả để khiến một nhóm cảm thấy thoải mái với TDD khi họ chưa thực hiện bất kỳ thử nghiệm đơn vị nào? Liệu nó có ý nghĩa để làm điều này trong một vài bước? Hay chúng ta nên lặn ngay và đối mặt với tất cả những cơn đau ngày càng tăng ??

CHỈNH SỬA

Chỉ cần làm rõ, không có ai trong nhóm (ngoài bản thân tôi) có bất kỳ thử nghiệm / kinh nghiệm thử nghiệm đơn vị nào. Và chúng tôi đang lên kế hoạch sử dụng chức năng thử nghiệm đơn vị được tích hợp trong Visual Studio.


+1 Câu hỏi này phác thảo gần như chính xác tình huống mà tôi gặp phải, chỉ dành cho Dev PHP PHP thay vì VS.
canadiancreed

Không phải là một câu hỏi phù hợp cho diễn đàn này
Ryan

2
Rốt cuộc bạn đã làm gì? Thực sự muốn nghe làm thế nào điều này bật ra.
Snoop

Câu trả lời:


36

Thực hành về các lỗi / lỗi hiện có.

Đây là một tình huống thực sự khó khăn. Trước đây tôi chưa bao giờ đi đến TDD, nhưng theo kinh nghiệm của tôi, việc một nhóm đi từ không có bài kiểm tra đơn vị nào để chủ động viết chúng là một cách tiếp cận "từng bước một".

Đầu tiên, hãy để họ thoải mái viết bài kiểm tra đơn vị và biết thực sự họ là gì và lợi ích của họ. Đối với các đội của tôi, tốt nhất là viết bài kiểm tra đơn vị cho các lỗi hiện có. Các lỗi hiện tại trong hệ thống có hai điều bạn cần dạy mọi người viết bài kiểm tra đơn vị tốt:

  1. một điều kiện tiên quyết và hậu điều kiện
  2. một kết quả hiện tại không như mong đợi và vi phạm điều kiện tiên quyết / hậu điều kiện đó

Điều này cung cấp cho các thành viên ví dụ thực hành rất cụ thể. Họ có thể viết một bài kiểm tra trước khi sửa lỗi, để nó thất bại. Sau đó, họ có thể sửa mã để nó vượt qua và sửa lỗi. Khi họ cảm thấy thoải mái với điều này, thì bạn có thể đưa họ đi hết quãng đường còn lại để họ có thể viết bài kiểm tra đơn vị mà không cần mã trước và sau đó viết mã mới để vượt qua bài kiểm tra của họ.

Tôi nghĩ mẹo là cho họ một cái gì đó để thực hành ở nơi có phương pháp rõ ràng trước / sau điều kiện. Nếu các yêu cầu đối với các phương thức là mờ nhạt, thì ngay cả những người có kinh nghiệm về TDD cũng khó biết chính xác nên bắt đầu từ đâu. Thực hiện một bước tại thời điểm và bạn sẽ đến đó. Chúc may mắn!


Sẽ không viết một bài kiểm tra đơn vị cho một lỗi hiện có kết thúc là một bài kiểm tra đơn vị tệ hại, tức là nó sẽ kiểm tra cả đống thứ chứ không phải là một đơn vị? Thử nghiệm tích hợp có phù hợp hơn cho kịch bản này không?
Isaac Kleinman

viết kiểm tra lỗi, đó là lời khuyên tốt.
Amitābha

32

Tôi đã thuyết phục được toàn bộ công ty của mình chuyển sang TDD. Điều đó không dễ, nhưng nó cũng đáng nỗ lực: chất lượng mã tăng lên sau quá trình chuyển đổi, và bây giờ không ai tưởng tượng được việc quay lại thời kỳ mã hóa cao bồi khủng khiếp.

  1. Giải thích, giải thích, giải thích. Bạn không muốn nhóm của bạn viết bài kiểm tra. Bạn muốn nhóm của bạn muốn viết bài kiểm tra. Điều này có nghĩa là họ nên hiểu đầy đủ lý do tại sao họ nên làm việc đó, lợi ích là gì và làm thế nào điều này sẽ giúp công việc của họ dễ dàng hơn nhiều. Red, Green, Refactor , viết một bài kiểm tra hồi quy làm bằng chứng cho thấy một lỗi đã được sửa, v.v. Bạn phải thuyết phục họ toàn bộ điều có ý nghĩa trước khi bạn yêu cầu họ viết bất kỳ mã nào.

  2. Đi cho thực tế (thử nghiệm đầu tiên, sau đó mã). Viết các bài kiểm tra sau khi mã hầu như không có ý nghĩa gì, vì bạn sẽ không bao giờ biết nếu chúng thực sự hoạt động (và mọi người viết các trường hợp kiểm tra lỗi). Trực giác của tôi là số lượng nỗ lực bạn cần để đi từ không có bài kiểm tra đến bài kiểm tra trước ít hơn nhiều so với những gì bạn cần để không có bài kiểm tra thông qua mã trước để kiểm tra trước , vì vậy bạn cũng có thể bỏ qua bước giữa.

  3. Bắt đầu với các bài kiểm tra hồi quy. Đây là khá đơn giản để hiểu, và họ cung cấp cho sự hài lòng ngay lập tức. Tất nhiên, điều này giả định rằng mã được mô đun hóa đúng và dễ kiểm tra. Nếu không, bỏ qua bước này.

  4. Thực hiện các bước bé. TDD mất một thời gian để làm quen và có thể gây khó chịu lúc đầu. Cố gắng giới thiệu thử nghiệm trong một dự án hoặc thành phần hoàn toàn mới, lý tưởng nhất: một cái gì đó không quan trọng lắm. Bạn muốn tránh bằng mọi giá tình huống khi có một cái gì đó thực sự quan trọng phải được thực hiện nhanh chóng và các lập trình viên cảm thấy rằng TDD đang cản trở.

  5. Khi nhóm bắt đầu thoải mái, có tất cả chức năng mới được viết theo cách TDD. Điều này phụ thuộc vào quy mô dự án của bạn, nhưng sau một thời gian, bạn sẽ nhận được một phạm vi bảo hiểm khá tốt, chỉ với một số phần kế thừa của dự án của bạn được viết theo cách cũ.

  6. Đến thời điểm này, nhóm nên đã hiểu và nắm lấy TDD, và những thứ di sản (không phải TDD) nên được coi là khó khăn và gây khó chịu khi làm việc. Làm cho nó được tái cấu trúc: hầu hết các pople sẽ làm điều đó với niềm vui.

Một số điểm quan trọng khác:

  • Hãy chắc chắn rằng bạn đang sử dụng khung thử nghiệm tốt nhất hiện có. Sẽ khó khăn hơn nhiều để thuyết phục mọi người làm TDD nếu họ phải tương tác với một thư viện được viết kém.

  • Hãy chắc chắn rằng các bài kiểm tra dễ chạy và không mất nhiều thời gian để hoàn thành (hoặc gian lận, ví dụ như bằng cách sử dụng db trong bộ nhớ cho các bài kiểm tra).

  • Thiết lập một số phần mềm tích hợp liên tục, để các bài kiểm tra bị hỏng được tìm thấy ngay lập tức.


1
Có lẽ quan trọng nhất là để có được quản lý trên tàu.
Todd

18

Một cách để làm quen với TDD là viết bài kiểm tra tích hợp trước. Giới thiệu các đường nối thử nghiệm và thử nghiệm đơn vị thực sự sau.

Vấn đề với việc viết các bài kiểm tra đơn vị sau khi mã hóa là mã có thể không nhất thiết phải được thiết kế tốt để có thể kiểm tra được . Bạn có thể cần phải thực hiện một số tái cấu trúc hoặc có thể thiết kế lại để giới thiệu các đường nối thử nghiệm. Nhưng làm thế nào bạn có thể tái cấu trúc hoặc thiết kế lại một cách an toàn nếu bạn không có phạm vi kiểm tra dưới bất kỳ hình thức nào?

Kiểm tra tích hợp có thể cung cấp cho bạn bảo hiểm ban đầu. Mỗi khi bạn có một hồi quy hoặc một vấn đề sản xuất, hãy sửa nó trong mã và kiểm tra mã đó bằng một bài kiểm tra. Khi bạn có đủ mạng lưới an toàn được cung cấp bởi các thử nghiệm như vậy, bạn có thể giới thiệu các thử nghiệm đơn vị của các thành phần và / hoặc các lớp riêng biệt hơn, chi tiết hơn trong hệ thống của bạn.


6
Tôi nghĩ rằng đây là một cách tuyệt vời: Trước tiên hãy cho nhóm xem cách kiểm tra đầu cuối có thể được tự động hóa và chạy trên mọi bản dựng. Họ thậm chí không cần phải viết các bài kiểm tra, bạn có thể tự mình làm tất cả nếu nhóm khó thuyết phục. Ngay khi họ thấy phản hồi tự động tuyệt vời như thế nào mỗi khi họ thay đổi điều gì đó, họ sẽ là người hỏi bạn làm thế nào để làm được nhiều thứ hơn.
Sergio Acosta

1
Bạn para thứ hai là tại chỗ. Mã này khó kiểm tra nhưng vì nó dựa trên cơ sở mã kế thừa không có kiểm tra, nên bộ tái cấu trúc không phải là một tùy chọn. Việc kiểm tra sau đó có thể khó thực hiện đến nỗi nó khiến mọi người phải bận tâm.
Todd

3

TDD rất khó thực hiện và không phải lúc nào cũng là lựa chọn tốt nhất cho mọi nhóm phát triển. Trong công việc trước đây của tôi, nhóm đã tập trung rất nhiều vào TDD. Mô hình phát triển của chúng tôi hoàn toàn là TDD sử dụng phương pháp phát triển nhanh. Thử nghiệm được thực hiện thông qua các thử nghiệm đơn vị Visual Studio.

Nếu nhà phát triển không viết bất kỳ bài kiểm tra đơn vị nào cho tính năng của họ, họ sẽ gặp rắc rối với lãnh đạo kỹ thuật. Hơn nữa, nếu bất kỳ ai đăng ký bản dựng bị hỏng hoặc bất kỳ bài kiểm tra đơn vị nào, nhà phát triển sẽ cần khắc phục tất cả các vấn đề và thêm $ 1 vào bình đựng tiền của nhóm.


3

Chỉ cần một điều nhỏ để thêm, hình dung quá trình. Làm cho tích hợp liên tục chạy thử nghiệm tự động và kiểm tra phạm vi bảo hiểm mã. Liệt kê các mô-đun được thử nghiệm đầy đủ nhất trên một số trang bắt đầu mà mọi người có thể thấy. Điều đó sẽ khiến cuộc thi nhóm diễn ra.


2

Tôi đã đi từ không có kinh nghiệm JUnit thẳng đến TDD, và kinh nghiệm làm cho giá trị của TDD không thể nhầm lẫn rõ ràng. Tôi đã trở nên rất biết ơn về các bài kiểm tra đơn vị mà tôi nhanh chóng trở thành một nhà truyền giáo cho cách tiếp cận


0

Tôi đã ở trong các đội không thực hiện bất kỳ thử nghiệm đơn vị nào nhưng nó đã được giới thiệu và gần như trở nên phổ biến để có một số thử nghiệm ngay bây giờ. Tôi sẽ đề nghị khám phá làm thế nào để nhóm của bạn hiểu cơ bản về kiểm tra đơn vị cũng như những công cụ nào bạn muốn mang vào đây?

Trong trường hợp của tôi, nó đã mang lại nUnit cho một số mã .Net là sự pha trộn của logic nghiệp vụ, giao diện người dùng và chức năng back-end. Tôi sẽ đề nghị xem liệu có một số người sẽ muốn đến đó nhiều hơn những người khác để một vài người trong nhóm có được nó và nó có thể lan truyền tốt hơn một chút so với mặt trái nơi bạn cố gắng để có được tất cả mọi người để nhảy vào đây Bằng cách làm cho một số người làm tốt điều đó trước tiên, điều này cho phép một số đào tạo chéo để những người nhặt được nó có thể được kiểm tra xem họ có thể dạy nó cho người khác tốt đến mức nào.

Một điểm khác là xem xét đưa vào những người có chuyên môn hơn để cố gắng thể hiện điều này ở một mức độ nào đó. Suy nghĩ được đưa vào nơi tôi làm việc để cho chúng tôi thấy một số thứ mà một số trong đó đã được áp dụng rộng rãi và các phần khác không quá nhiều, nhưng tôi nghĩ rằng điều đó sẽ đúng ở hầu hết các nơ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.