Nói chung ảnh hưởng đến mức độ phù hợp là như nhau.
Công cụ mã nguồn có thể cung cấp kết quả báo cáo cao cấp, đơn giản vì thiết bị mã byte không thể phân biệt bất kỳ cấu trúc nào trong các dòng nguồn, vì độ chi tiết khối mã chỉ được ghi lại theo dòng nguồn.
Hãy tưởng tượng tôi có hai câu lệnh lồng nhau (hoặc tương đương, nếu (a & & b) ... *) trong một dòng. Một mã nguồn instrumenter có thể nhìn thấy chúng, và cung cấp thông tin bảo hiểm cho nhiều nhánh trong if, bên trong dòng nguồn; nó có thể báo cáo các khối dựa trên các dòng và cột. Một mã byte instrumenter chỉ thấy một dòng bọc quanh các điều kiện. Liệu nó báo cáo dòng là "được bảo hiểm" nếu điều kiện thực hiện, nhưng là sai?
Bạn có thể cho rằng đây là một trường hợp hiếm hoi (và có thể là) và do đó không hữu ích. Khi bạn nhận được bảo hiểm không có thật về nó theo sau là một trường thất bại, bạn có thể thay đổi suy nghĩ của bạn về tiện ích.
Có một số nice example and explanation of how byte code coverage makes getting coverage of switch statements right, vô cùng khó khăn.
Một mã nguồn instrumenter cũng có thể đạt được thực hiện kiểm tra nhanh hơn, bởi vì nó có trình biên dịch giúp tối ưu hóa mã được thiết kế. Đặc biệt, một đầu dò được chèn vào bên trong một vòng lặp bởi một công cụ nhị phân có thể được biên dịch bên trong vòng lặp bởi một trình biên dịch JIT.Một trình biên dịch Java tốt sẽ thấy thiết bị tạo ra một kết quả bất biến vòng lặp và nâng thiết bị ra khỏi vòng lặp. (Một trình biên dịch JIT cũng có thể làm điều này, câu hỏi đặt ra là liệu chúng có thực sự làm như vậy) hay không.
Nguồn
2013-03-06 23:17:30
Tôi nghĩ bạn muốn có liên kết đến tài liệu Clover? – sharakan
Có. Tôi quên thêm liên kết. Xong ngay. Cảm ơn bạn đã tìm hiểu vấn đề. –
Hiện tại cobertura hỗ trợ cả Java 7 và Java 8 –