2010-03-23 31 views
8

Tôi hiện đang xây dựng một tập lệnh xây dựng CI cho một ứng dụng cũ. Có các bài kiểm tra JUnit lẻ tẻ và tôi sẽ tích hợp thực hiện JUnit của tất cả các bài kiểm tra vào bản xây dựng CI. Tuy nhiên, tôi tự hỏi phải làm gì với những thất bại 100'ish mà tôi gặp phải trong các bài kiểm tra JUnit không được duy trì. Tôi:Xóa hoặc nhận xét các thử nghiệm JUnit không hoạt động?

1) Bình luận chúng ra khi họ dường như có lý, nếu bỏ dở, logic kinh doanh trong họ với hy vọng rằng ai đó cuối cùng uncomments họ và sửa chữa chúng

2) Xóa chúng như khó xảy ra của nó mà bất cứ ai sẽ sửa chúng và mã nhận xét sẽ chỉ bị bỏ qua hoặc lộn xộn cho mãi mãi

3) Theo dõi những người đã để lại mớ hỗn độn này trong tay tôi và đánh vào đầu bằng các bản in mã (do mùi phương pháp dài sẽ phù hợp với nhiệm vụ) trong khi rao giảng các lợi ích của một cơ sở mã được duy trì tốt và được kiểm tra đơn vị

+0

Bạn muốn đánh bại những người đã cung cấp cho bạn mã hoặc người đã viết các bài kiểm tra đơn vị? P.S. Các lập trình viên xấu chỉ có thể hiểu các phương pháp dài. – IAdapter

Trả lời

2
  • Hãy nhận xét để chúng có thể được khắc phục sau.
  • Tạo báo cáo phủ sóng thử nghiệm (ví dụ: Cobertura). Các phương pháp được cho là được bao phủ bởi các bài kiểm tra mà bạn đã nhận xét sau đó sẽ được chỉ ra là không được đề cập trong các bài kiểm tra.
+3

Không cần phải bình luận ra mọi thứ, đó là những gì kiểm soát sửa đổi được cho. xóa chúng hoặc @Tìm hiểu chúng. Bình luận chúng ra chỉ để lại nhiều tàu tuần dương hơn. – thekbb

1

Nếu chúng biên dịch nhưng không thành công: hãy để chúng vào. Điều đó sẽ giúp bạn có được lịch sử cải tiến kiểm tra tốt theo thời gian khi sử dụng CI. Nếu các bài kiểm tra không biên dịch nhưng phá vỡ bản dựng, hãy bình luận chúng và chọc các nhà phát triển để sửa chúng.

Điều này rõ ràng không loại trừ bằng cách sử dụng tùy chọn 3 (đánh chúng trên đầu), bạn nên làm điều đó anyway, bất kể những gì bạn làm với các bài kiểm tra.

4

Nếu bạn sử dụng Junit 4, bạn có thể chú thích các thử nghiệm đó với @Ignore annotation.

Nếu bạn sử dụng JUnit 3, bạn chỉ có thể đổi tên thử nghiệm để chúng không bắt đầu với test.

Ngoài ra, hãy thử sửa các kiểm tra cho chức năng bạn đang sửa đổi để không làm cho mớ code trở nên lớn hơn.

+0

Chú thích @Ignore thú vị. Đối với việc loại bỏ kiểm tra khỏi tên phương thức, bạn phải cẩn thận và thêm nhận xét để giải thích rằng đây không phải là phương thức bị lãng quên/không sử dụng (nếu không ai đó có thể xóa), nhưng phương pháp thử phải được sửa . –

+0

Bạn có thể đổi tên phương thức thành một cái gì đó như fixItLaterTestBlahBlah, phải không? – uthark

+0

Chúng tôi sử dụng JUnit 3 và tôi đã xem xét đổi tên các bài kiểm tra thành brokenSuchAndSuch, nhưng với tôi điều này đòi hỏi nhiều người làm việc hơn trong tương lai phải hiểu những gì tôi đã làm và tại sao tôi làm điều đó. Với nhận xét ra hoặc xóa, nó nhiều hơn nữa trong khuôn mặt của bạn. –

0

Tôi không biết vị trí của bạn trong công ty, nhưng nếu có thể hãy để chúng vào và gửi các vấn đề như lỗi trong hệ thống vé của bạn. Hãy để các nhà phát triển sửa lỗi hoặc xóa các bài kiểm tra.

Nếu điều đó không có tác dụng loại bỏ chúng (bạn có quyền kiểm soát phiên bản, phải không?) Và đóng vé với một nhận xét như 'các bài kiểm tra junit không bị xóa mà dường như sẽ không được sửa' hoặc một chút lịch sự hơn.

Vấn đề là, kiểm tra junit là mã ứng dụng và như vậy sẽ hoạt động. Đó là những gì các nhà phát triển được trả tiền cho. Nếu một thử nghiệm không thích hợp nữa (một cái gì đó không tồn tại nữa đã được thử nghiệm) các nhà phát triển nên báo hiệu và loại bỏ các thử nghiệm.

3

Thực hiện theo nguyên tắc no broken windowthực hiện một số hành động hướng tới giải pháp của sự cố. Nếu bạn không thể sửa chữa các thử nghiệm, ít nhất:

  1. Bỏ qua chúng từ các bài kiểm tra đơn vị (có nhiều cách khác nhau để thực hiện việc này).
  2. Nhập nhiều vấn đề cần thiết và chỉ định mọi người để sửa các bài kiểm tra.

Sau đó, để ngăn chặn tình huống như vậy xảy ra trong tương lai, cài đặt một plug-in tương tự như Hudson Game Plugin. Mọi người được chỉ định điểm trong quá trình tích hợp liên tục, ví dụ:

  • -10 phá vỡ xây dựng < - tồi tệ hơn
  • -1 phá vỡ một thử nghiệm
  • 1 sửa chữa một thử nghiệm
  • , vv

công cụ Thực sự mát mẻ để tạo ra một cảm giác của trách nhiệm về các xét nghiệm đơn vị trong một nhóm.

+0

Liên kết plugin trò chơi Hudson tạm thời ngừng hoạt động. Đây là một liên kết khác http://clintshank.javadevelopersjournal.com/ci_build_game.htm – ewernli

1

Bạn chắc chắn nên tắt chúng theo cách nào đó ngay bây giờ. Cho dù đó là thực hiện bằng cách bình luận, xóa (giả sử bạn có thể nhận được chúng trở lại từ kiểm soát nguồn) hoặc một số phương tiện khác là tùy thuộc vào bạn. Bạn không muốn những thử nghiệm thất bại này là một trở ngại cho những người đang cố gắng gửi những thay đổi mới.

Nếu có đủ ít bạn cảm thấy bạn có thể tự khắc phục, tuyệt vời - hãy làm. Nếu có quá nhiều người trong số họ, thì tôi sẽ có khuynh hướng sử dụng cách tiếp cận "crowdsourcing". Nộp một lỗi cho mỗi bài kiểm tra thất bại. Hãy cố gắng gán các lỗi này cho các chủ sở hữu/tác giả thực sự của mã kiểm tra/thử nghiệm nếu có thể, nhưng nếu quá khó để xác định thì việc chọn ngẫu nhiên là tốt miễn là bạn yêu cầu mọi người phân công lại các lỗi đã gán sai cho họ. Sau đó khuyến khích mọi người sửa những lỗi này bằng cách cho họ thời hạn hoặc định kỳ thông báo cho mọi người về tiến trình và khuyến khích họ sửa tất cả các lỗi.

1

Hệ thống CI có màu đỏ ổn định là khá vô giá trị. Lợi ích chính là duy trì một thanh chất lượng, và điều đó đã gây khó khăn hơn nhiều nếu không có sự chuyển tiếp để đánh dấu sự sụt giảm chất lượng.

Vì vậy, các nỗ lực ngay lập tức nên là vô hiệu hoá các thử nghiệm không thành công và tạo một mục theo dõi/công việc theo dõi cho từng mục. Mỗi người trong số đó được giải quyết tuy nhiên bạn phải phân loại - nếu không ai quan tâm đến bài kiểm tra, hãy loại bỏ nó. Nếu thất bại đại diện cho một vấn đề mà cần phải được giải quyết trước khi tàu, sau đó để kiểm tra vô hiệu hóa. Khi bạn ở trạng thái này, bây giờ bạn có thể dựa vào hệ thống CI để cho bạn biết rằng hành động khẩn cấp là cần thiết - quay trở lại thay đổi cuối cùng, hoặc ngay lập tức đặt một nhóm về sửa chữa vấn đề, hoặc bất cứ điều gì.

4

Các thử nghiệm JUnit không chỉ ra rằng một trong hai

  1. Mã nguồn được kiểm tra đã được làm việc trên mà không có sự kiểm tra được duy trì. Trong trường hợp này, tùy chọn 3 chắc chắn đáng xem xét hoặc
  2. Bạn có lỗi chính hãng.

Dù bằng cách nào bạn cần khắc phục/xem xét các thử nghiệm/nguồn. Vì có vẻ như công việc của bạn là tạo ra hệ thống CI và không sửa chữa các bài kiểm tra, ở vị trí của bạn tôi sẽ để lại một quả bom thời gian trong các bài kiểm tra. Bạn có thể nhận được rất ưa thích với các phương pháp chú thích với JUnit 4 (cái gì đó như @IgnoreUntil(date="2010/09/16")) và Á hậu tùy chỉnh, vì vậy hoặc bạn chỉ có thể thêm một một câu lệnh if để dòng đầu tiên của mỗi bài kiểm tra:

if (isBeforeTimeBomb()) { 
    return; 
    } 

đâu isBeforeTimeBomb() có thể đơn giản kiểm tra ngày hiện tại dựa vào ngày bạn chọn trong tương lai.Sau đó, bạn làm theo lời khuyên của những người khác ở đây và thông báo cho nhóm phát triển của bạn rằng bản dựng có màu xanh lá cây, nhưng có khả năng phát nổ trong X ngày trừ khi các thử nghiệm timebombed được cố định.

+0

Yêu thương khái niệm timebomb! –

Các vấn đề liên quan