Hướng dẫn bao quát mã: Kiểm tra chi nhánh, tuyên bố và quyết định
Phạm vi bảo hiểm của Code là gì?
Độ phủ mã là một phép đo mô tả mức độ mà mã nguồn của chương trình đã được kiểm tra. Đây là một dạng kiểm tra hộp trắng tìm ra các khu vực của chương trình không được thực hiện bởi một tập hợp các trường hợp kiểm tra. Nó cũng tạo ra một số trường hợp kiểm tra để tăng độ phủ và xác định một phép đo định lượng về độ phủ mã.
Trong hầu hết các trường hợp, hệ thống bao phủ mã sẽ thu thập thông tin về chương trình đang chạy. Nó cũng kết hợp thông tin đó với thông tin mã nguồn để tạo báo cáo về phạm vi mã của bộ thử nghiệm.
Tại sao nên sử dụng Kiểm tra phạm vi mã?
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 thực hiện thử nghiệm
- Nó cung cấp một phép đo định lượng.
- Nó xác định mức độ mà mã nguồn đã được kiểm tra.
Phương pháp bao phủ mã
Sau đây là các phương pháp bao 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ố là một kỹ thuật kiểm thử hộp trắng trong đó tất cả các câu lệnh thực thi trong mã nguồn đượ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 Statement Coverage 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ạm vi câu lệnh được sử dụng để rút ra kịch bản dựa trên cấu trúc của mã đang được thử nghiệm.
In trắng Box Kiểm tra, người kiểm thử đang tập trung vào cách phần mềm hoạt động. Nói cách khác, người kiểm tra sẽ tập trung vào hoạt động nội bộ của mã nguồn liên quan đến biểu đồ luồng điều khiển hoặc biểu đồ luồng.
Nói chung trong bất kỳ phần mềm nào, nếu chúng ta nhìn vào mã nguồn, sẽ có rất nhiều phần tử như toán tử, hàm, vòng lặp, trình xử lý đặc biệt, v.v. Dựa trên đầu vào của chương trình, một số câu lệnh mã có thể không được thực thi . Mục tiêu của phạm vi bao phủ Câu lệnh là bao gồm tất cả các đường dẫn, dòng và câu lệnh có thể có trong mã.
Hãy hiểu điều này bằng một ví dụ, cách tính độ bao phủ của câu lệnh.
Kịch bản tính toán Phạm vi câu lệnh cho mã nguồn nhất định. Ở đây chúng tôi đang thực hiện hai kịch bản khác nhau để kiểm tra tỷ lệ phần trăm bao phủ câu lệnh cho từng kịch bản.
Mã nguồn:
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 = 9Các câu lệnh được đánh dấu màu vàng là những câu lệnh được thực hiện theo kịch bản
Số câu lệnh được thực thi = 5, Tổng số câu lệnh = 7
Bảo hiểm tuyên bố: 5/7 = 71%
Tương tự như vậy chúng ta sẽ thấy kịch bản 2,
Kịch bản 2:
Nếu A = -3, B = -9
Các câu lệnh được đánh dấu màu vàng là những câu lệnh được thực hiện theo kịch bản.
Số câu lệnh được thực thi = 6
Tổng số câu lệnh = 7
Bảo hiểm tuyên bố: 6/7 = 85%
Nhưng nhìn chung nếu bạn thấy, tất cả các tuyên bố đều được bao hàm trong cả hai kịch bản. Vì vậy, chúng tôi có thể kết luận rằng mức độ bao phủ của tuyên bố tổng thể là 100%.
Bảo hiểm Tuyên bố bao gồm những gì?
- Báo cáo chưa sử dụng
- Mã chết
- Các nhánh không sử dụng
- Thiếu báo cáo
Kiểm tra phạm vi quyết định
Phạm vi quyết định là một kỹ thuật kiểm thử hộp trắng báo cáo kết quả đúng hoặc sai của mỗi biểu thức boolean của mã nguồn. Mục tiêu của kiểm thử bao 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 hiện ít nhất một lần.
Trong loại phạm vi phủ sóng này, các biểu thức có thể trở nên phức tạp, khiến việc đạt được phạm vi phủ sóng 100% trở nên khó khăn. Đây là lý do tại sao nhiều phương pháp khác nhau được sử dụng để báo cáo số liệu này. Các phương pháp này ưu tiên các kết hợp quan trọng nhất. Mặc dù tương tự như phạm vi phủ sóng quyết định, nhưng nó cung cấp độ nhạy cao hơn đối với luồng điều khiển.
Ví dụ về phạm vi quyết định
Hãy xem xét đoạn mã sau đây:
Demo(int a) { If (a> 5) a=a*3 Print (a) }
Kịch bản 1:
Giá trị của a là 2
Mã được đánh dấu màu vàng sẽ được thực thi. Ở đây kết quả “Không” của quyết định Nếu (a>5) được chọn.
Phạm vi quyết định = 50%
Kịch bản 2:
Giá trị của a là 6
Mã được đánh dấu màu vàng sẽ được thực thi. Ở đây, kết quả “Có” của quyết định Nếu (a>5) được chọn.
Phạm vi 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 là phương pháp kiểm thử hộp trắng trong đó mọi kết quả từ một mô-đun mã (câu lệnh hoặc vòng lặp) đều được kiểm thử. Mục đích của phạm vi 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 hiện ít nhất một lần. Nó giúp đo các phân số của 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:
Ví dụ về phạm vi chi nhánh
Để tìm hiểu phạm vi chi nhánh, hãy xem xét ví dụ tương tự được sử dụng trước đó
Hãy xem xét đoạn mã sau đây:
Demo(int a) { If (a> 5) a=a*3 Print (a) }
Bảo hiểm chi nhánh cũng sẽ xem xét chi nhánh vô đ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:
Kiểm tra phạm vi chi nhánh mang lại những lợi ích sau:
- 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ó sự phân nhánh dẫn đến bất kỳ sự bất thường nào trong hoạt động của chương trình
- Phương pháp bao phủ nhánh loại bỏ các vấn đề xảy ra do kiểm tra phạm vi câu lệnh
- Cho phép bạn tìm những khu vực chưa được kiểm tra bằng các phương pháp kiểm tra khác
- Nó cho phép bạn tìm một thước đo định lượng về mức độ bao phủ mã
- Phạm vi nhánh bỏ qua các nhánh bên trong biểu thức Boolean
Kiểm tra phạm vi điều kiện
Bảo hiểm tình trạng hoặc phạm vi biểu thức là một phương pháp thử nghiệm được sử dụng để kiểm tra và đánh giá các biến hoặc biểu thức phụ trong câu lệnh điều kiện. Mục tiêu của việc bao phủ điều kiện là kiểm tra các kết quả riêng lẻ cho từng điều kiện logic. Phạm vi điều kiện cung cấp độ nhạy tốt hơn cho luồng điều khiển so với phạm vi quyết định. Trong phạm vi này, các biểu thức có toán hạng logic chỉ đượ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, XOR, biểu thị tổng số khả năng.
Phạm vi điều kiện không đảm bảo về phạm vi quyết định đầy đủ.
Công thức tính Bao phủ Điều kiện:
Ví dụ:
Đối với biểu thức trên, chúng ta có 4 kết hợp có thể
- TT
- FF
- TF
- FT
Hãy xem xét đầu vào sau đây
X = 3
Y = 4 |
(x | TRUE | Mức độ bao phủ điều kiện là ¼ = 25% |
A = 3
B = 4 |
(a>b) | KHÔNG ĐÚNG |
Bảo hiểm máy trạng thái hữu hạn
Phủ sóng máy trạng thái hữu hạn chắc chắn là loại phương pháp phủ sóng 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 phủ sóng này, bạn cần tìm xem có bao nhiêu trạng thái cụ thể theo thời gian được truy cập, chuyển tiếp. Nó cũng kiểm tra có bao nhiêu chuỗi được bao gồm trong một máy trạng thái hữu hạn.
Nên chọn loại bảo hiểm mã nào
Đây chắc chắn là câu trả lời khó đưa ra nhất. Để chọn một phương pháp bao phủ, người kiểm tra cần kiểm tra xem
- mã đang được kiểm tra có một hoặc nhiều lỗi chưa được phát hiện
- chi phí của hình phạt tiềm năng
- cái giá của việc mất danh tiếng
- chi phí bán hàng 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.
Bảo hiểm mã so với Bảo hiểm chức năng
Mã số bảo hiểm | Bảo hiểm chức năng |
---|---|
Phạm vi mã cho bạn biết mã nguồn đã được thử nghiệm tốt như thế nào trong băng ghế thử nghiệm của bạn. | Phạm vi chức năng đo lường mức độ chức năng của thiết kế được bao phủ bởi băng ghế thử nghiệm của bạn. |
Không bao giờ sử dụng đặc tả thiết kế | Sử dụng thông số thiết kế |
Thực hiện bởi nhà phát triển | Thực hiện bởi người kiểm tra |
Công cụ bảo hiểm mã
Dưới đây là danh sách các Công cụ bảo hiểm mã quan trọng:
Tên công cụ | Mô tả |
---|---|
Cobertura | Nó là một công cụ bao phủ mã nguồn mở. Nó đo lường phạm vi kiểm thử bằng cách trang bị cơ sở mã và phân tích dòng mã nào đang thực thi và dòng mã nào không được thực thi khi bộ kiểm thử chạy. |
Clover | Clover cũng giảm thời gian thử nghiệm bằng cách chỉ chạy các thử nghiệm bao gồm 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ã cho Chất lượng và Độ phức tạp của Mã. |
Emma | EMMA hỗ trợ phạm vi bao phủ lớp, phương thức, dòng và khối cơ sở, tệp nguồn tổng hợp, lớp và cấp độ phương thức. |
Kalistick | Kalistick là ứng dụng của bên thứ ba chuyên phân tích mã theo nhiều góc độ khác nhau. |
CoView và CoAnt | Phần mềm mã hóa là một công cụ bao quát mã cho các số liệu, tạo đối tượng mô phỏng, khả năng kiểm tra mã, phạm vi đường dẫn và nhánh, v.v. |
Bullseye cho C++ | BulseyeCoverage là một công cụ bao phủ mã cho C++ và C. |
Sonar | Sonar là một công cụ bao quát mã 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 bảo hiểm mã
Ưu điểm của phạm vi mã | Nhược điểm của phạm vi bảo hiểm mã |
---|---|
Hữu ích để đánh giá thước đo định lượng về mức độ bao phủ mã | Ngay cả khi bất kỳ tính năng cụ thể nào không được triển khai trong thiết kế, mức độ bao phủ mã vẫn báo cáo mức độ bao phủ 100%. |
Nó cho phép bạn tạo thêm các trường hợp thử nghiệm để tăng mức độ bao phủ | Không thể xác định liệu chúng tôi đã kiểm tra tất cả các giá trị có thể có của một tính năng với sự trợ giúp của phạm vi mã hay chưa |
Nó cho phép bạn tìm các khu vực của chương trình không được thực hiện bởi một tập hợp các ca kiểm thử | Phạm vi bảo hiểm mã cũng không cho biết bạn đã bao quát logic của mình bao nhiêu và tốt như thế nào |
Trong trường hợp chức năng được chỉ định chưa được triển khai hoặc không được đưa vào đặc tả thì các kỹ thuật dựa trên cấu trúc không thể tìm ra vấn đề đó. |
Tổng kết
- Phạm vi mã là thước đo mô tả mức độ mã nguồn của chương trình đã được kiểm tra
- Nó giúp bạn đo lường hiệu quả của việc thực hiện thử nghiệm
- Năm phương pháp bao phủ mã là 1.) Bao phủ câu lệnh 2.) Bao phủ điều kiện 3) Bao phủ nhánh 4) Toggle Bảo hiểm 5) Bảo hiểm FSM
- Phạm vi câu lệnh liên quan đến việc thực thi tất cả các câu lệnh thực thi trong mã nguồn ít nhất một lần
- Phạm vi quyết định báo cáo kết quả đúng hoặc sai của từng biểu thức Boolean
- Trong phạm vi nhánh, mọi kết quả từ mô-đun mã đều được kiểm tra
- Điều kiện sẽ tiết lộ cách đánh giá các biến hoặc biểu thức con trong câu lệnh điều kiện
- Phủ sóng máy trạng thái hữu hạn chắc chắn là loại phương pháp phủ sóng mã phức tạp nhất
- Để chọn phương pháp bảo hiểm, người kiểm tra cần kiểm tra chi phí của hình phạt tiềm ẩn, danh tiếng bị mất, doanh thu bị mất, v.v.
- Phạm vi bao phủ mã cho bạn biết mã nguồn đã được băng ghế thử nghiệm của bạn thực hiện tốt như thế nào trong khi phạm vi bao phủ Chức năng đo lường mức độ bao phủ chức năng của thiết kế
- Cobertura, JTest, Clover, Emma, Kalistick là một số công cụ kiểm soát mã quan trọng
- Phạm vi bảo hiểm mã cho phép bạn tạo thêm các trường hợp thử nghiệm để tăng phạm vi bảo hiểm
- Phạm vi mã không giúp bạn xác định liệu chúng tôi đã kiểm tra tất cả các giá trị có thể có của một tính năng hay chưa