Gần đây tôi đã nghiên cứu độ phức tạp chu kỳ (McCabe) và khả năng tiếp cận của phần mềm tại uni gần đây. Hôm nay giảng viên của tôi nói rằng không có mối tương quan giữa hai số liệu, nhưng đây có thực sự là trường hợp không?
Thật ra cả có và không.
Trước hết, chỉ để nhắc nhở bạn, số liệu McCabe về độ phức tạp chu kỳ được tính trên biểu đồ luồng điều khiển trong đó bạn trừu tượng mã nguồn của mình thành biểu đồ có hướng với các khối hoặc câu lệnh cơ bản là các nút và chuyển tiếp giữa chúng (theo dòng điều khiển thông thường đi xuống hoặc trong trường hợp nhảy và vòng lặp có điều kiện) là các cạnh. Độ phức tạp chu kỳ ở đây có thể đại khái (nếu bạn coi toàn bộ chương trình của mình không có mã bị cô lập, tức là biểu đồ của bạn được kết nối) được xem là sự khác biệt giữa số cạnh và số nút.
CC = E - N
Vấn đề về khả năng tiếp cận là một vấn đề phổ biến trong lý thuyết đồ thị có thể được thể hiện theo cách: đưa ra hai nút A và B, là nút B có thể tiếp cận từ nút A, tức là người ta có thể tiếp cận B bắt đầu từ A và theo các cạnh của biểu đồ một cách chính xác phương hướng? Vì vậy, một lần nữa, số liệu có thể áp dụng cho biểu đồ luồng điều khiển và không phải trên mã.
Có một số cách để áp dụng vấn đề này vào biểu đồ luồng điều khiển . Một cách được gọi là "phân tích khả năng tiếp cận biến", nghĩa là đối với biến đã cho, phân tích xác định xem giá trị của nó có còn ở điểm chương trình nhất định hay không (kỹ thuật này còn được gọi là phân tích phần mềm). Tôi cũng chỉ tìm thấy một số bài viết sử dụng thuật ngữ này (và nói chung là vấn đề khả năng tiếp cận) cho các ứng dụng đa luồng .
Về cơ bản, người ta có thể thấy một số loại tương quan giữa CC và khả năng tiếp cận: với sự gia tăng của CC, tỷ lệ các cạnh trên các nút cũng tăng và thậm chí trong trường hợp đồ thị có hướng trong đó hướng của cạnh cũng rất quan trọng, người ta có thể suy đoán rằng việc tăng số lượng các cạnh cuối cùng dẫn đến sự gia tăng các đường dẫn có sẵn trong biểu đồ và do đó để tăng khả năng tiếp cận thông qua các kết nối trực tiếp hoặc gián tiếp giữa các nút. Vì vậy, câu trả lời là Có ở đây.
Mặt khác, khái niệm khả năng tiếp cận trong môi trường đa luồng đòi hỏi phải phân tích cái gọi là siêu máy tính - và điều này không quá tầm thường. Tăng CC (được gọi là " độ phức tạp đồng bộ hóa ") có thể dẫn đến xác suất bế tắc trong phần mềm cao hơn và do đó làm giảm khả năng tiếp cận của các nút / đoạn mã nhất định. Do đó "Không" là một câu trả lời hợp lệ ở đây .