Câu trả lời:
Phạm vi mã là một phép đo xem có bao nhiêu dòng / khối / cung của mã của bạn được thực thi trong khi các kiểm tra tự động đang chạy.
Phạm vi bảo hiểm được thu thập bằng cách sử dụng một công cụ chuyên dụng để tạo các nhị phân để thêm các cuộc gọi truy tìm và chạy một bộ đầy đủ các thử nghiệm tự động đối với sản phẩm được đo. Một công cụ tốt sẽ cung cấp cho bạn không chỉ tỷ lệ phần trăm của mã được thực thi mà còn cho phép bạn truy sâu vào dữ liệu và xem chính xác dòng mã nào đã được thực thi trong một thử nghiệm cụ thể.
Nhóm của chúng tôi sử dụng Magellan - một bộ công cụ bao trùm mã nội bộ. Nếu bạn là một cửa hàng .NET, Visual Studio có các công cụ tích hợp để thu thập phạm vi bảo hiểm mã. Bạn cũng có thể cuộn một số công cụ tùy chỉnh, như bài viết này mô tả.
Nếu bạn là một cửa hàng C ++, Intel có một số công cụ chạy cho Windows và Linux, mặc dù tôi chưa sử dụng chúng. Tôi cũng đã nghe nói có công cụ gSc cho GCC, nhưng tôi không biết gì về nó và không thể cung cấp cho bạn một liên kết.
Về cách chúng tôi sử dụng nó - phạm vi bảo hiểm mã là một trong những tiêu chí thoát của chúng tôi cho mỗi cột mốc. Chúng tôi thực sự có ba số liệu bảo hiểm mã - phạm vi bảo hiểm từ các thử nghiệm đơn vị (từ nhóm phát triển), thử nghiệm kịch bản (từ nhóm thử nghiệm) và phạm vi bảo hiểm kết hợp.
BTW, trong khi phạm vi bảo hiểm mã là một thước đo tốt về số lượng thử nghiệm bạn đang thực hiện, nó không nhất thiết là một thước đo tốt về mức độ bạn đang thử nghiệm sản phẩm của mình. Có các số liệu khác bạn nên sử dụng cùng với phạm vi bảo hiểm mã để đảm bảo chất lượng.
Bảo hiểm mã về cơ bản kiểm tra xem bao nhiêu mã của bạn được bảo hiểm trong các thử nghiệm. Vì vậy, nếu bạn có phạm vi bảo hiểm mã 90% thì có nghĩa là có 10% mã không được bảo hiểm trong các thử nghiệm. Tôi biết bạn có thể nghĩ rằng 90% mã được bao phủ nhưng bạn phải nhìn từ một góc độ khác. Điều gì đang ngăn bạn nhận được bảo hiểm mã 100%?
Một ví dụ tốt sẽ là:
if(customer.IsOldCustomer())
{
}
else
{
}
Bây giờ, trong đoạn mã trên có hai đường dẫn / nhánh. Nếu bạn luôn nhấn vào nhánh "CÓ" thì bạn sẽ không bao gồm phần khác và nó sẽ được hiển thị trong kết quả Bảo hiểm Mã. Điều này là tốt bởi vì bây giờ bạn biết rằng những gì không được bảo hiểm và bạn có thể viết một bài kiểm tra để bao gồm các phần khác. Nếu không có bảo hiểm mã thì bạn chỉ đang ngồi trên một quả bom hẹn giờ để phát nổ.
NCover là một công cụ tốt để đo lường phạm vi bảo hiểm.
Chỉ cần nhớ rằng, có "phạm vi bao phủ 100% mã" không có nghĩa là mọi thứ đều được kiểm tra hoàn toàn - trong khi điều đó có nghĩa là mọi dòng mã đều được kiểm tra, điều đó không có nghĩa là chúng được kiểm tra trong mọi tình huống (phổ biến) ..
Tôi sẽ sử dụng phạm vi bảo hiểm mã để làm nổi bật các đoạn mã mà tôi có lẽ nên viết thử nghiệm. Ví dụ: nếu bất kỳ công cụ bao phủ mã nào hiển thị myImportantFunction () không được thực thi trong khi chạy các bài kiểm tra đơn vị hiện tại của tôi, thì có lẽ chúng nên được cải thiện.
Về cơ bản, phạm vi bảo hiểm mã 100% không có nghĩa là mã của bạn là hoàn hảo. Sử dụng nó như một hướng dẫn để viết các bài kiểm tra (đơn vị-) toàn diện hơn.
x
và trả về x/x
và bạn đã chạy thử nghiệm bằng my_func (2), bạn sẽ có phạm vi bảo hiểm 100% (vì mã của hàm sẽ được chạy) nhưng bạn đã bỏ lỡ một vấn đề lớn khi 0 là tham số. Tức là bạn đã không kiểm tra tất cả các kịch bản cần thiết ngay cả với phạm vi bảo hiểm 100%.
Bổ sung một vài điểm cho nhiều câu trả lời trước:
Bảo hiểm mã có nghĩa là, bộ kiểm tra của bạn bao phủ mã nguồn của bạn tốt đến mức nào. tức là ở mức độ nào thì mã nguồn được bao phủ bởi tập hợp các trường hợp thử nghiệm.
Như đã đề cập trong các câu trả lời ở trên, có nhiều tiêu chí bảo hiểm khác nhau, như đường dẫn, điều kiện, chức năng, câu lệnh, v.v. Nhưng các tiêu chí bổ sung cần được đề cập là
Lưu ý: Phân tích mã tĩnh sẽ tìm thấy nếu có bất kỳ mã không thể truy cập hoặc mã treo, tức là mã không nằm trong bất kỳ lệnh gọi chức năng nào khác. Và bảo hiểm tĩnh khác. Ngay cả khi phân tích mã tĩnh báo cáo rằng mã 100% được bảo hiểm, nó sẽ không cung cấp báo cáo về bộ thử nghiệm của bạn nếu tất cả phạm vi bảo hiểm mã có thể được kiểm tra.
Mã bảo hiểm đã được giải thích tốt trong các câu trả lời trước. Vì vậy, đây là nhiều hơn một câu trả lời cho phần thứ hai của câu hỏi.
Chúng tôi đã sử dụng ba công cụ để xác định phạm vi bảo hiểm mã.
Chúng tôi sử dụng những công cụ này để
Bảo hiểm mã chỉ đơn giản là thước đo của mã được kiểm tra. Có nhiều tiêu chí bảo hiểm có thể đo lường được, nhưng thông thường, đó là các đường dẫn, điều kiện, chức năng và tuyên bố khác nhau trong một chương trình trang điểm cho tổng phạm vi bảo hiểm. Chỉ số bảo hiểm mã chỉ là một tỷ lệ phần trăm của các thử nghiệm thực hiện từng tiêu chí bảo hiểm này.
Theo như cách tôi đi theo dõi phạm vi kiểm tra đơn vị theo dõi các dự án của mình, tôi sử dụng các công cụ phân tích mã tĩnh để theo dõi.
Đối với Perl, có mô-đun Devel :: Cover tuyệt vời mà tôi thường sử dụng trên các mô-đun của mình.
Nếu việc xây dựng và cài đặt được quản lý bởi Module :: Build, bạn có thể chỉ cần chạy ./Build testcover
để có được một trang web HTML đẹp cho bạn biết phạm vi bảo hiểm trên mỗi phụ, dòng và điều kiện, với màu sắc đẹp giúp dễ dàng xem đường dẫn mã nào không được che.
Trong các câu trả lời trước Bảo hiểm mã đã được giải thích tốt. Tôi chỉ bổ sung một số kiến thức liên quan đến các công cụ nếu bạn đang làm việc iOS
và OSX
nền tảng, Xcode cung cấp phương tiện để kiểm tra và giám sát phạm vi bảo hiểm mã.
Liên kết tham khảo:
https://medium.com/zendesk-engineering/code-coverage-and-xcode-6b2fb8756a51
Cả hai đều là các liên kết hữu ích để tìm hiểu và khám phá phạm vi bảo hiểm mã với Xcode.
Đối với PHP, bạn nên xem Github từ Sebastian Bergmann
Cung cấp chức năng thu thập, xử lý và kết xuất cho thông tin bao phủ mã PHP.