2009-03-24 38 views
18

Có bất kỳ công cụ/thư viện nào tính phần trăm "độ bao phủ điều kiện/quyết định" của mã python hay không. Tôi chỉ tìm thấy coverage.py nhưng nó chỉ tính toán phần trăm của "bảo hiểm sao kê".điều kiện bảo hiểm trong python

Trả lời

7

Coverage.py now includes branch coverage.

Đối với tò mò: mã không được sửa đổi trước khi chạy.Hàm theo dõi theo dõi các dòng nào theo đó trong thực thi và so sánh thông tin đó với phân tích tĩnh của mã byte được biên dịch để tìm các khả năng đường dẫn không được thực thi.

2

Bạn đang tìm kiếm cyclomatic complexity (Wikipedia)? Về cơ bản nó tính toán số lượng đường dẫn thông qua một đoạn mã. Có một số dự án để tính toán mã Python, ví dụ: PyMetrics hoặc this one. Google chắc chắn sẽ mang lại nhiều hơn nữa.

Nhưng tôi không biết phải tích hợp thêm nữa với các bài kiểm tra đơn vị sẽ cho bạn thấy mức độ phù hợp.

+0

> Bạn đang tìm kiếm sự phức tạp về chu trình (Wikipedia)? No. Cảm ơn thông tin thú vị. > Nhưng tôi không biết về việc tích hợp thêm nữa với các bài kiểm tra đơn vị sẽ cho bạn thấy mức độ phù hợp. Tôi cũng vậy;) –

+0

Độ phức tạp của chu trình cơ bản không liên quan đến phạm vi điều kiện. –

2

Tôi không biết về bất kỳ công cụ bảo hiểm chi nhánh nào cho Python, mặc dù tôi đã dự tính viết một công cụ. Suy nghĩ của tôi là bắt đầu với AST và chèn thêm thiết bị cho mỗi điểm nhánh. Nó có thể thực hiện được, nhưng có một số trường hợp phức tạp.

Ví dụ,

raise SomeException(x) 

bảo hiểm chi nhánh cho điều này cần phải kiểm tra SomeException đó (x) đã được khởi tạo đầy đủ và không tăng ngoại lệ riêng của mình.

assert x, "Oh No!: %r" % (x, y) 

Điều này cần kiểm tra xem văn bản ở bên phải câu lệnh xác nhận có được đánh giá đầy đủ hay không.

return args.name or os.getenv("NAME") or die("no name present") 

Mỗi một trong hai cụm từ đầu tiên phải được kiểm tra cho đúng/sai đường dẫn, nhưng không phải là cuối cùng. Trong thực tế, người cuối cùng có thể thậm chí không trở lại.

Có rất nhiều trường hợp phải lo lắng và tôi không cần phải nhấn vào nó ngoài sự tò mò nên tôi không đi đâu hết. Tôi cũng tự hỏi liệu tôi có nhận được nhiều điều sai trái hay không, nơi tôi sẽ cần một số cách để kìm nén những cảnh báo cụ thể.

Nếu bạn muốn thử tuyến đường này, hãy bắt đầu với Python 2.6 hoặc 3.0. Trong những phiên bản này, mô-đun AST được ghi lại và bạn có thể tạo các nút AST của riêng bạn trước khi tạo mã hoặc tệp .pyc.

+0

"hoặc chết" ví dụ là khá thú vị để đọc, và khá có thể là thú vị để viết;) – myroslav

+0

Tôi là một lập trình viên Perl trước khi tôi chuyển sang Python. Đó là một Perl-ism. Perl không bao giờ được biết đến như một ngôn ngữ nhàm chán. –

1

Trình bảo trì rất giống nhau của bảo hiểm.py có bài viết thảo luận một cách để get coverage information at the bytecode level. Phương pháp này là một chút kludgey: nó liên quan đến việc tái lắp ráp các tệp .pyc với số dòng được tinh chỉnh. Tuy nhiên, nó cung cấp nhiều chi tiết về đo lường mức độ phù hợp như bạn có thể yêu cầu.

2

Tôi chưa tự mình sử dụng, nhưng nếu bạn sẵn sàng thay thế phân tích vùng phủ sóng bằng mutation testing, tôi đã nghe nói về một thử nghiệm đột biến được gọi là "pester".

Trong khi tôi đang làm googling, tôi cũng đi qua a list of python testing tools đề cập đến một số công cụ bảo hiểm mã có thể có.

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