2010-07-06 34 views
6

Có cách nào để xác định tập hợp các kiểm tra đơn vị có khả năng thực thi một dòng mã nhất định không? Nói cách khác, bạn có thể tự động xác định không chỉ liệu một dòng nhất định có được bao trả hay không, nhưng tập hợp thử nghiệm thực tế bao gồm nó?Xác định thử nghiệm nào bao gồm một dòng mã

Hãy xem xét một cơ sở mã lớn với các bài kiểm tra đơn vị 50K. Rõ ràng, nó có thể mất một thời gian dài để chạy chúng tất cả - giờ, nếu không phải ngày. Làm việc trong cơ sở mã như vậy, bạn muốn có thể thực hiện một số tập hợp con của tất cả các bài kiểm tra đơn vị, bao gồm các bài kiểm tra chỉ bao gồm dòng (hoặc dòng) mà bạn vừa mới chạm vào. Chắc chắn, bạn có thể tìm thấy một số bằng tay và chạy chúng, nhưng tôi đang tìm cách để làm điều đó nhanh hơn, và toàn diện hơn.

Nếu tôi đang suy nghĩ về điều này một cách chính xác, nó sẽ là có thể. Một công cụ có thể duyệt qua tất cả các đường dẫn mã dẫn ra khỏi mỗi bài kiểm tra đơn vị và đưa ra một phần của chương trình có thể truy cập từ bài kiểm tra đó. Và sau đó, bạn có thể tính toán tập các bài kiểm tra đơn vị bao gồm một dòng nhất định trong slice của họ, có nghĩa là dòng có thể được thực hiện bởi phép thử đó ("có thể" thay vì "sẽ" vì đường dẫn mã thực tế sẽ chỉ được xác định tại thời gian chạy dựa trên đầu vào hoặc các điều kiện khác). Một dòng mã nhất định có thể có một số lượng lớn các thử nghiệm thực thi nó (nói, mã trong một thư viện được chia sẻ), trong khi các dòng khác có thể có vài (hoặc không) thử nghiệm bao gồm chúng.

Vì vậy:

  1. là âm thanh lập luận của tôi về ý tưởng này? Nó có thể được thực hiện về mặt lý thuyết hay không, hay có thứ gì đó tôi đang bỏ đi?

  2. Đã có một công cụ ở đó có thể thực hiện việc này không? Hay, đây có phải là một điều phổ biến với cái tên mà tôi chưa từng gặp? Con trỏ đến các công cụ trong thế giới java, hoặc để nghiên cứu chung về chủ đề này, sẽ được đánh giá cao.

Trả lời

2

Tôi chắc chắn Clover sẽ cho bạn biết thử nghiệm nào xác thực từng dòng mã. Vì vậy, bạn có thể tự thực hiện các bài kiểm tra bằng cách xem các báo cáo bảo hiểm. Họ cũng có một API mới mà bạn có thể sử dụng để viết một plugin IDE cho phép bạn thực hiện các thử nghiệm bao gồm một dòng mã.

+0

xác thực từng dòng mã = ​​Clover có thể thực hiện việc này - tab Đóng góp thử nghiệm. Clover cũng có một tính năng mới để chỉ thực hiện các thử nghiệm liên quan đến các thay đổi của bạn. Tôi đã không sử dụng nó tuy nhiên (chuyển đến. NET và thực sự mất Clover) http://www.atlassian.com/software/clover/tour/test-optimization.jsp –

1

presentation sau đây sẽ thảo luận cách tính toán lát chương trình được thực hiện bằng kiểm tra đơn vị. Nó trả lời câu hỏi, "bạn có thể xác định phạm vi kiểm tra mà không thực hiện chương trình không?" và về cơ bản phác thảo ý tưởng bạn mô tả ... với một chút công việc để thực sự triển khai nó.

Bạn có thể lưu ý rằng việc tính toán một lát chương trình không phải là một tác vụ tính toán giá rẻ. Tôi đoán rằng tính toán một lát (một tính toán biểu tượng) thường chậm hơn so với thực hiện một bài kiểm tra đơn vị, vì vậy tôi không chắc chắn rằng bạn sẽ tiết kiệm bất cứ lúc nào làm điều này. Và một lát là bảo thủ gần đúng của phần bị ảnh hưởng của chương trình, vì vậy câu trả lời bạn nhận được sẽ bao gồm các phần chương trình thực sự không được thực thi.

Bạn có thể nên sử dụng tốt hơn để chạy tất cả 50.000 bài kiểm tra đơn vị đó một lần và thu thập dữ liệu mức độ phù hợp cho từng bài kiểm tra. Trong trường hợp này, khi một số đoạn mã được cập nhật, có thể xác định tĩnh cho dù mã kiểm thử cụ thể có bao gồm mã bạn đã thay đổi hay không, và do đó bạn có thể xác định các thử nghiệm phải được thực hiện lại. Bạn có thể bỏ qua việc thực hiện phần còn lại của các bài kiểm tra.

Công ty của tôi xây dựng một family of test coverage tools. Bản phát hành tiếp theo của các công cụ này sẽ có khả năng kiểm tra hồi quy gia tăng này.

2

JetBrains's dotCover cũng hiện có tính năng này cho mã .NET. Nó có thể được truy cập từ menu dotCover với tùy chọn "Show cover tests" hoặc bằng cách nhấn Ctrl + Alt + K.

0

Đây là tính năng mà công cụ Bảo hiểm JMockit (cho Java) cung cấp, mặc dù nó cho thấy các thử nghiệm đã làm bao gồm một dòng mã sản xuất nhất định trong lần chạy cuối cùng, không phải là các thử nghiệm "có khả năng sẽ thực thi một dòng mã nhất định".

Thông thường, tuy nhiên, bạn sẽ có một Jenkins (hoặc bất kỳ) xây dựng của dự án, nơi tất cả các bài kiểm tra được thực hiện và một báo cáo bảo hiểm HTML được tạo ra. Sau đó, nó sẽ chỉ là một vấn đề kiểm tra báo cáo để xem những bài kiểm tra hiện đang bao gồm một dòng mã nhất định.

Báo cáo mức độ phù hợp mẫu hiển thị danh sách kiểm tra cho mỗi dòng mã sản xuất là available online.

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