Code Công cụ kiểm thử độ bao phủ: Kiểm thử câu lệnh, nhánh và quyết định

⚡ Tóm tắt thông minh

Code Độ phủ mã là một phép đo hộp trắng báo cáo mức độ mã nguồn đã được thực thi bởi bộ kiểm thử.ping Các nhóm sẽ xác định các câu lệnh, nhánh, điều kiện và đường dẫn chưa được kiểm thử mà các lỗi tiềm ẩn có thể ẩn chứa.

  • 🎯 Định nghĩa: Code Độ phủ (coverage) định lượng mức độ mã nguồn mà các bài kiểm thử thực sự thực thi.
  • 📊 Phương pháp: Có năm phương pháp: bao phủ câu lệnh, bao phủ quyết định, bao phủ nhánh, bao phủ điều kiện và bao phủ máy trạng thái hữu hạn.
  • 🧩 Câu lệnh so với nhánh: Phạm vi bảo hiểm sao kê kiểm tra các dòng lệnh, trong khi phạm vi bảo hiểm chi nhánh kiểm tra mọi kết quả quyết định.
  • ⚖️ Code So với chức năng: Code Các biện pháp đo lường độ bao phủ mã đã thực thi; các biện pháp đo lường độ bao phủ chức năng đã bao phủ các yêu cầu.
  • 🛠️ Công cụ: Cobertura, OpenCloverEMMA và Sonar tự động hóa việc đo lường phạm vi phủ sóng.
  • 🤖 Hỗ trợ AI: Các công cụ AI tự động tạo ra các bài kiểm tra và phát hiện các lỗ hổng bảo mật chưa được kiểm tra, có rủi ro cao.

Code Hướng dẫn về phạm vi phủ sóng

Là gì Code Phủ sóng?

Code bảo hiểm Đây là một thước đo mô tả mức độ kiểm thử mã nguồn của một chương trình. Nó là một hình thức của... kiểm thử hộp trắng Công cụ này tìm ra các vùng của chương trình chưa được kiểm thử bởi một tập hợp các trường hợp kiểm thử. Nó cũng giúp tạo thêm các trường hợp kiểm thử để tăng độ bao phủ và xác định thước đo định lượng về độ bao phủ mã.

Trong hầu hết các trường hợp, hệ thống đo độ phủ mã thu thập thông tin về chương trình đang chạy. Sau đó, nó kết hợp thông tin đó với thông tin mã nguồn để tạo ra báo cáo về độ phủ mã của bộ kiểm thử.

Tại sao sử dụng Code Kiểm thử độ phủ?

Dưới đây là một số lý do chính cho việc sử dụng phạm vi bảo hiểm mã:

  • Nó giúp bạn đo lường hiệu quả của việc triển khai kiểm thử.
  • Nó cung cấp một phép đo định lượng về quá trình thử nghiệm.
  • Nó xác định mức độ mà mã nguồn đã được kiểm tra.

Code Phương pháp phủ sóng

Dưới đây là các phương pháp đo độ phủ mã chính:

  • Bảo hiểm Tuyên bố
  • Phạm vi quyết định
  • Bảo hiểm chi nhánh
  • Toggle Bảo hiểm
  • Bảo hiểm FSM

Bảo hiểm Tuyên bố

Bảo hiểm Tuyên bố Kiểm thử hộp trắng là một kỹ thuật kiểm thử trong đó tất cả các câu lệnh có thể thực thi trong mã nguồn đều được thực thi ít nhất một lần. Nó được sử dụng để tính toán số lượng câu lệnh trong mã nguồn đã được thực thi. Mục đích chính của Kiểm thử câu lệnh là bao phủ tất cả các đường dẫn, dòng và câu lệnh có thể có trong mã nguồn.

Độ phủ câu lệnh được sử dụng để xây dựng các kịch bản dựa trên cấu trúc của mã cần kiểm thử.

Bảo hiểm Tuyên bố

Trong kiểm thử hộp trắng, người kiểm thử tập trung vào cách phần mềm hoạt động. Nói cách khác, người kiểm thử tập trung vào hoạt động bên trong của mã nguồn liên quan đến biểu đồ luồng điều khiển hoặc sơ đồ khối.

Thông thường trong bất kỳ phần mềm nào, nếu bạn xem mã nguồn, bạn sẽ thấy rất nhiều thành phần khác nhau như toán tử, hàm, v.v.pingCác trình xử lý ngoại lệ, v.v. Tùy thuộc vào dữ liệu đầu vào của chương trình, một số câu lệnh có thể không được thực thi. Mục tiêu của việc kiểm thử bao phủ câu lệnh là bao phủ tất cả các đường dẫn, dòng và câu lệnh có thể có trong mã.

Chúng ta hãy cùng hiểu điều này thông qua một ví dụ về cách tính độ phủ câu lệnh. Ở đây, chúng ta sẽ xem xét hai kịch bản khác nhau để kiểm tra tỷ lệ độ phủ câu lệnh cho mỗi kịch bản.

nguồn Code:

Prints (int a, int b) {                       ------------  Printsum is a function
    int result = a + b;
    If (result > 0)
        Print ("Positive", result)
    Else
        Print ("Negative", result)
    }                                        -----------   End of the source code

Kịch bản 1: Nếu A = 3, B = 9

Kịch bản phạm vi bảo hiểm báo cáo 1

Các câu lệnh được đánh dấu màu vàng là những câu lệnh được thực thi theo kịch bản. Số câu lệnh được thực thi = 5, Tổng số câu lệnh = 7, do đó Độ phủ câu lệnh = 5/7 = 71%.

Kịch bản 2: Nếu A = -3, B = -9

Kịch bản phạm vi bảo hiểm báo cáo 2

Các câu lệnh được đánh dấu màu vàng là những câu lệnh được thực thi theo kịch bản. Số câu lệnh được thực thi = 6, Tổng số câu lệnh = 7, do đó Độ phủ câu lệnh = 6/7 = 85%.

Nhưng nhìn chung, nếu bạn để ý, tất cả các tuyên bố đều được đề cập trong cả hai trường hợp. Vì vậy, chúng ta có thể kết luận rằng phạm vi bao phủ tuyên bố tổng thể là 100%.

Bảo hiểm Tuyên bố bao gồm những gì?

  1. Báo cáo chưa sử dụng
  2. Đã chết Code
  3. Các nhánh không sử dụng
  4. Thiếu báo cáo

Kiểm tra phạm vi quyết định

Phạm vi quyết định Kiểm thử hộp trắng là một kỹ thuật kiểm thử báo cáo kết quả đúng hoặc sai của mỗi biểu thức boolean trong mã nguồn. Mục tiêu của kiểm thử độ phủ quyết định là bao phủ và xác thực tất cả mã nguồn có thể truy cập bằng cách kiểm tra và đảm bảo rằng mỗi nhánh của mỗi điểm quyết định có thể được thực thi ít nhất một lần.

Trong loại kiểm thử độ phủ này, các biểu thức có thể trở nên phức tạp, khiến việc đạt được độ phủ 100% trở nên khó khăn. Đó là lý do tại sao người ta sử dụng nhiều phương pháp khác nhau để báo cáo chỉ số này. Các phương pháp này ưu tiên các tổ hợp quan trọng nhất. Mặc dù tương tự như độ phủ nhánh, nhưng nó cung cấp độ nhạy cao hơn đối với luồng điều khiển.

Kiểm tra phạm vi quyết định

Ví dụ về phạm vi bao phủ quyết định

Hãy xem xét đoạn mã sau:

Demo(int a) {
    If (a > 5)
        a = a * 3
    Print (a)
    }

Kịch bản 1: Giá trị của a là 2. Kết quả “Không” của quyết định Nếu (a>5) được chọn, thì Độ bao phủ quyết định = 50%.

Kịch bản 2: Giá trị của a là 6. Kết quả “Có” của quyết định nếu (a>5) được chọn, do đó Độ bao phủ quyết định = 50%.

Trường hợp thử nghiệm Giá trị của A Đầu ra Phạm vi quyết định
1 2 2 50%
2 6 18 50%

Kiểm tra phạm vi chi nhánh

Bảo hiểm chi nhánh Đây là phương pháp kiểm thử hộp trắng, trong đó mọi kết quả đầu ra từ một mô-đun mã (câu lệnh hoặc vòng lặp) đều được kiểm tra. Mục đích của việc đo độ phủ nhánh là để đảm bảo rằng mỗi điều kiện quyết định từ mỗi nhánh được thực thi ít nhất một lần. Nó giúp đo lường tỷ lệ các đoạn mã độc lập và tìm ra các phần không có nhánh.

Ví dụ: nếu kết quả là nhị phân, bạn cần kiểm tra cả kết quả Đúng và Sai.

Công thức tính Độ bao phủ Chi nhánh:

Công thức phạm vi phủ sóng nhánh

Ví dụ về phạm vi chi nhánh

Để tìm hiểu về độ phủ nhánh, hãy xem xét ví dụ đã sử dụng trước đó. Độ phủ nhánh sẽ xem xét cả nhánh không điều kiện.

Trường hợp thử nghiệm Giá trị của A Đầu ra Phạm vi quyết định Bảo hiểm chi nhánh
1 2 2 50% 33%
2 6 18 50% 67%

Ưu điểm của phạm vi phủ sóng của Chi nhánh:

  • Cho phép bạn xác thực tất cả các nhánh trong mã.
  • Giúp bạn đảm bảo rằng không có nhánh nào dẫn đến bất kỳ sự bất thường nào trong hoạt động của chương trình.
  • Khắc phục các sự cố phát sinh do kiểm thử độ phủ câu lệnh.
  • Cho phép bạn tìm ra những khu vực chưa được kiểm tra bằng các phương pháp kiểm tra khác.
  • Cho phép bạn tìm ra thước đo định lượng về độ phủ mã.
  • Tính năng bao phủ nhánh bỏ qua các nhánh nằm bên trong các biểu thức boolean.

Kiểm tra phạm vi điều kiện

Bảo hiểm tình trạngKiểm thử điều kiện, hay còn gọi là kiểm thử độ phủ biểu thức, là một phương pháp kiểm thử được sử dụng để kiểm tra và đánh giá các biến hoặc biểu thức con trong một câu lệnh điều kiện. Mục tiêu của kiểm thử độ phủ điều kiện là kiểm tra kết quả riêng lẻ cho mỗi điều kiện logic. Kiểm thử độ phủ điều kiện cung cấp độ nhạy tốt hơn đối với luồng điều khiển so với kiểm thử độ phủ quyết định. Trong kiểm thử độ phủ này, chỉ những biểu thức có toán hạng logic mới được xem xét.

Ví dụ, nếu một biểu thức có các phép toán Boolean như AND, OR hoặc XOR, điều đó cho biết tổng số khả năng. Độ bao phủ điều kiện không đảm bảo độ bao phủ quyết định đầy đủ.

Công thức tính Bao phủ Điều kiện:

Công thức bảo hiểm bệnh tật

Đối với một biểu thức có hai toán hạng, có bốn tổ hợp khả thi: TT, FF, TF và FT. Xét đầu vào X=3, Y=4 (x b) SAI, điều này dẫn đến Tỷ lệ bảo hiểm điều kiện là 1/4 = 25%.

Bảo hiểm máy trạng thái hữu hạn

Kiểm tra độ phủ máy trạng thái hữu hạn chắc chắn là loại kiểm tra độ phủ mã phức tạp nhất. Điều này là do nó hoạt động trên hành vi của thiết kế. Trong phương pháp kiểm tra độ phủ này, bạn cần xem xét số lần các trạng thái cụ thể được truy cập hoặc chuyển đổi. Nó cũng kiểm tra xem có bao nhiêu chuỗi được bao gồm trong một máy trạng thái hữu hạn.

Loại nào của Code Các gói bảo hiểm để lựa chọn

Đây chắc chắn là câu trả lời khó nhất. Để lựa chọn phương pháp đo độ phủ mã, người kiểm thử cần kiểm tra xem:

  • Mã đang được kiểm thử có một hoặc nhiều lỗi chưa được phát hiện.
  • chi phí của khoản phạt tiềm năng,
  • chi phí thiệt hại về danh tiếng,
  • chi phí do doanh thu bị mất, v.v.

Khả năng sai sót sẽ gây ra thất bại sản xuất tốn kém càng cao thì mức độ bảo hiểm bạn cần chọn càng nghiêm trọng.

Code Phạm vi bao phủ so với phạm vi bao phủ chức năng

Code Toàn Diện Bảo hiểm chức năng
Cho biết mã nguồn đã được kiểm thử bởi hệ thống kiểm thử của bạn tốt đến mức nào. Đo lường mức độ đáp ứng đầy đủ chức năng của thiết kế bởi hệ thống thử nghiệm của bạn.
Không bao giờ sử dụng bản đặc tả thiết kế. Sử dụng bản đặc tả thiết kế.
Được thực hiện bởi các nhà phát triển. Do các chuyên viên kiểm thử thực hiện.

Code Công cụ phạm vi phủ sóng

Dưới đây là danh sách các công cụ đo độ phủ mã quan trọng:

Tên công cụ Mô tả Chi tiết
Cobertura Một công cụ đo độ phủ mã nguồn mở. Nó đo độ phủ kiểm thử bằng cách chèn mã vào cơ sở mã và phân tích xem dòng mã nào được thực thi và dòng nào không khi bộ kiểm thử chạy.
Clover Cỏ ba lá (OpenCloverĐiều này cũng giúp giảm thời gian kiểm thử bằng cách chỉ chạy các bài kiểm thử bao gồm phần mã ứng dụng đã được sửa đổi kể từ bản dựng trước đó.
Đối tác phát triển DevPartner cho phép các nhà phát triển phân tích Java mã hóa cho chất lượng và độ phức tạp của mã.
Emma EMMA hỗ trợ độ phủ mã theo lớp, phương thức, dòng và khối cơ bản, được tổng hợp ở cấp độ tệp nguồn, lớp và phương thức.
Kalistick Kalistick là một ứng dụng bên thứ ba phân tích mã nguồn từ nhiều góc độ khác nhau.
CoView và CoAnt Một công cụ đo độ phủ mã dành cho việc đo lường, tạo đối tượng giả lập, khả năng kiểm thử mã, độ phủ đường dẫn và nhánh, và hơn thế nữa.
Bullseye cho C++ BullseyeCoverage là một công cụ đo độ phủ mã dành cho... C++ và C.
Sonar Sonar là một công cụ mã nguồn mở giúp bạn quản lý chất lượng mã.

Ưu điểm và nhược điểm của việc sử dụng Code Toàn Diện

Ưu điểm Nhược điểm
Hữu ích để đánh giá định lượng mức độ bao phủ mã. Ngay cả khi một tính năng cụ thể không được triển khai trong thiết kế, báo cáo độ phủ mã vẫn cho thấy mức độ phủ 100%.
Cho phép bạn tạo thêm các trường hợp kiểm thử để tăng phạm vi bao phủ. Không thể xác định liệu tất cả các giá trị có thể có của một tính năng đã được kiểm thử hay chưa bằng cách sử dụng độ phủ mã.
Cho phép bạn tìm ra các vùng của chương trình chưa được kiểm thử bởi một tập hợp các trường hợp kiểm thử. Code Mức độ bao phủ không cho biết bạn đã bao quát logic của mình đến mức nào và tốt đến đâu.

Câu Hỏi Thường Gặp

Nhiều nhóm đặt mục tiêu thực tế là đạt được 70 đến 80%. Việc đạt 100% hiếm khi hiệu quả về mặt chi phí. Hãy tập trung vào việc bao phủ các logic quan trọng, có rủi ro cao thay vì theo đuổi một con số duy nhất trên toàn bộ mã nguồn.

Không. Độ phủ toàn diện chứng minh rằng mọi dòng lệnh đều được thực thi, chứ không phải mọi đầu vào, giá trị hoặc yêu cầu đều được xác thực. Các lỗi logic và các tính năng bị thiếu vẫn có thể không bị phát hiện, vì vậy độ phủ bổ sung chứ không thay thế cho thiết kế kiểm thử tốt.

Code Độ phủ kiểm thử đo lường mức độ mã nguồn được thực thi trong quá trình kiểm thử. Độ phủ kiểm thử rộng hơn, tracĐánh giá mức độ hiệu quả của các bài kiểm tra trong việc đáp ứng các yêu cầu, tính năng và rủi ro. Code Độ phủ kiểm thử là một trong những yếu tố đầu vào của độ phủ kiểm thử tổng thể.

Không. Bạn có thể đạt được độ phủ câu lệnh 100% ngay cả khi vẫn bỏ sót các nhánh chưa được kiểm thử, chẳng hạn như thiếu một đường dẫn else. Độ phủ nhánh (quyết định) mạnh hơn vì nó bao hàm độ phủ câu lệnh và kiểm tra mọi kết quả.

Trí tuệ nhân tạo (AI) phân tích mã nguồn và các bài kiểm tra hiện có để xác định các đường dẫn chưa được kiểm thử, có rủi ro cao, sau đó đề xuất hoặc tạo ra các trường hợp mới. Máy học cũng ưu tiên các bài kiểm tra cần chạy, rút ​​ngắn thời gian phản hồi trong khi vẫn duy trì hiệu quả.ping Độ phủ sóng cao.

Đúng vậy. Các công cụ AI như Diffblue Cover quét mã và tự động viết các bài kiểm tra đơn vị cho các logic chưa được bao phủ. Chúng nhắm mục tiêu vào các nhánh và điều kiện rủi ro, nâng cao độ bao phủ mã với ít nỗ lực thủ công hơn nhiều.

OpenClover Công cụ này đo lường độ bao phủ của câu lệnh, nhánh và phương thức, đồng thời thu thập hơn 20 chỉ số. Cobertura, EMMA, và JaCoCo còn có những lựa chọn miễn phí được sử dụng rộng rãi khác nữa Java dự án.

Phạm vi bao phủ điều kiện/quyết định được sửa đổi yêu cầu mỗi điều kiện trong một quyết định phải ảnh hưởng độc lập đến kết quả. Nó nghiêm ngặt hơn phạm vi bao phủ nhánh và là yêu cầu bắt buộc đối với phần mềm quan trọng về an toàn, chẳng hạn như hệ thống điện tử hàng không, theo tiêu chuẩn DO-178C.

Tóm tắt bài viết này với: