Độ phức tạp theo chu kỳ trong kiểm thử phần mềm (Ví dụ)

Độ phức tạp Cyclomatic của McCabe là gì?

Độ phức tạp theo chu kỳ trong kiểm thử phần mềm là một phép đo kiểm tra được sử dụng để đo độ phức tạp của một chương trình phần mềm. Đây là phép đo định lượng các đường dẫn độc lập trong mã nguồn của một chương trình phần mềm. Độ phức tạp theo chu kỳ có thể được tính bằng cách sử dụng biểu đồ luồng điều khiển hoặc liên quan đến các hàm, mô-đun, phương pháp hoặc lớp trong một chương trình phần mềm.

Đường đi độc lập được định nghĩa là đường đi có ít nhất một cạnh chưa được đi qua trước đó trong bất kỳ đường đi nào khác.

Số liệu này được Thomas J. McCabe phát triển vào năm 1976 và nó dựa trên cách trình bày luồng điều khiển của chương trình. Luồng điều khiển mô tả chương trình dưới dạng biểu đồ bao gồm Nút và Cạnh.

Trong biểu đồ, các Nút biểu thị các tác vụ xử lý trong khi các cạnh biểu thị luồng điều khiển giữa các nút.

Độ phức tạp Cyclomatic của McCabe

Ký hiệu biểu đồ luồng cho một chương trình

Ký hiệu Biểu đồ luồng cho một chương trình xác định một số nút được kết nối qua các cạnh. Dưới đây là sơ đồ luồng cho các câu lệnh như if-else, While, cho đến khi và trình tự luồng thông thường.

Ký hiệu biểu đồ luồng cho một chương trình

Cách tính độ phức tạp Cyclomatic

Biểu diễn toán học:

Về mặt toán học, nó là tập hợp các đường dẫn độc lập thông qua sơ đồ đồ thị. Độ phức tạp của mã chương trình có thể được xác định bằng công thức –

V(G) = E - N + 2

Ở đâu,

E – Số cạnh

N – Số lượng nút

V (G) = P + 1

Trong đó P = Số nút vị ngữ (nút chứa điều kiện)

Thí dụ -

i = 0;
n=4; //N-Number of nodes present in the graph

while (i<n-1) do
j = i + 1;

while (j<n) do

if A[i]<A[j] then
swap(A[i], A[j]);

end do;
j=j+1;

end do;

Biểu đồ luồng cho chương trình này sẽ là

Tính toán độ phức tạp Cyclomatic

Tính toán theo phương pháp toán học,

  • V(G) = 9 – 7 + 2 = 4
  • V(G) = 3 + 1 = 4 (Nút điều kiện là 1,2 và 3 nút)
  • Bộ cơ sở - Một tập hợp đường dẫn thực hiện có thể có của chương trình
  • 1, 7
  • 1, 2, 6, 1, 7
  • 1, 2, 3, 4, 5, 2, 6, 1, 7
  • 1, 2, 3, 5, 2, 6, 1, 7

Tính chất của độ phức tạp Cyclomatic

Sau đây là các tính chất của độ phức tạp Cyclomatic:

  1. V(G) là số đường đi độc lập tối đa trong đồ thị
  2. V(G) >=1
  3. G sẽ có một đường đi nếu V(G) = 1
  4. Giảm thiểu độ phức tạp xuống còn 10

Số liệu này hữu ích như thế nào cho việc kiểm thử phần mềm?

Kiểm thử đường dẫn cơ sở là một trong những kỹ thuật hộp trắng và nó đảm bảo thực hiện ít nhất một câu lệnh trong quá trình kiểm thử. Nó kiểm tra từng đường dẫn độc lập tuyến tính qua chương trình, có nghĩa là số trường hợp kiểm tra sẽ tương đương với độ phức tạp theo chu kỳ của chương trình.

Đo lường này hữu ích vì các đặc tính của Độ phức tạp Cyclomatic (M) –

  1. M có thể là số ca kiểm thử để đạt được phạm vi bao phủ nhánh (Giới hạn trên)
  2. M có thể là số đường đi qua đồ thị. (Chặn dưới)

Hãy xem xét ví dụ này –

If (Condition 1)
Statement 1

Else
Statement 2

If (Condition 2)
Statement 3

Else
Statement 4

Độ phức tạp theo chu kỳ cho chương trình này sẽ là 8-7+2=3.

Vì độ phức tạp được tính là 3, nên cần có ba trường hợp thử nghiệm để có thể bao phủ toàn bộ đường dẫn cho ví dụ trên.

Các bước cần tuân theo:

Cần thực hiện theo các bước sau để tính toán độ phức tạp Cyclomatic và thiết kế trường hợp thử nghiệm.

Bước 1 – Xây dựng đồ thị với các nút và cạnh từ mã

Bước 2 – Xác định các đường dẫn độc lập

Bước 3 – Tính toán độ phức tạp Cyclomatic

Bước 4 – Thiết kế các trường hợp thử nghiệm

Khi tập hợp cơ bản được hình thành, CÁC TRƯỜNG HỢP KIỂM TRA nên được viết để thực hiện tất cả các đường dẫn.

Thông tin thêm về V (G)

Độ phức tạp của chu kỳ có thể được tính toán thủ công nếu chương trình nhỏ. Các công cụ tự động cần được sử dụng nếu chương trình rất phức tạp vì điều này liên quan đến nhiều biểu đồ luồng hơn. Dựa trên số độ phức tạp, nhóm có thể kết luận về các hành động cần thực hiện để đo lường.

Bảng sau đây cung cấp tổng quan về số phức tạp và ý nghĩa tương ứng của v (G):

Số phức tạp Ý nghĩa
1-10 Mã có cấu trúc và được viết tốt

Khả năng kiểm tra cao

Chi phí và công sức ít hơn

10-20 Mã phức tạp

Khả năng kiểm tra trung bình

Chi phí và công sức ở mức trung bình

20-40 Mã rất phức tạp

Khả năng kiểm tra thấp

Chi phí và công sức cao

> 40 Hoàn toàn không thể kiểm chứng được

Chi phí và công sức rất cao

Công cụ tính toán độ phức tạp Cyclomatic:

Có nhiều công cụ để xác định độ phức tạp của ứng dụng. Một số công cụ tính toán độ phức tạp được sử dụng cho các công nghệ cụ thể. Độ phức tạp có thể được tìm thấy bằng số điểm quyết định trong một chương trình. Các điểm quyết định là if, for, for-each, while, do, catch, case trong mã nguồn.

Ví dụ về các công cụ là

  • OCLint – Trình phân tích mã tĩnh cho C và các ngôn ngữ liên quan
  • Reflector Add In – Số liệu mã cho các cụm .NET
  • GMetrics – Tìm số liệu trong Java ứng dụng liên quan

Ứng dụng của Độ phức tạp Cyclomatic:

Độ phức tạp của chu kỳ có thể chứng minh là rất hữu ích trong

  • Giúp các nhà phát triển và người thử nghiệm xác định việc thực thi đường dẫn độc lập
  • Nhà phát triển có thể đảm bảo rằng tất cả các đường dẫn đã được kiểm tra ít nhất một lần
  • Giúp chúng ta tập trung hơn vào những con đường chưa được khám phá
  • Cải thiện phạm vi bao phủ mã trong Kỹ thuật phần mềm
  • Đánh giá rủi ro liên quan đến ứng dụng hoặc chương trình
  • Sử dụng các số liệu này sớm trong chu kỳ sẽ giảm bớt rủi ro cho chương trình

Kết luận

Độ phức tạp theo chu kỳ là số liệu phần mềm hữu ích cho các cấu trúc hoặc trắng Box Kiểm tra. Nó chủ yếu được sử dụng để đánh giá độ phức tạp của một chương trình. Nếu các điểm quyết định nhiều hơn, thì độ phức tạp của chương trình cũng nhiều hơn. Nếu chương trình có số phức tạp cao, thì khả năng xảy ra lỗi cao với thời gian bảo trì và khắc phục sự cố tăng lên.