Нещодавно я вивчав цикломатичну складність (McCabe) та доступність програмного забезпечення в університеті. Сьогодні мій лектор сказав, що між двома показниками немає кореляції, але чи справді це так?
Насправді і так, і ні.
Перш за все, просто нагадаю, метрика McCabe для циклічної складності обчислюється на графіку керуючого потоку, де ви абстрагуєте свій вихідний код до спрямованого графа з базовими блоками або висловлюваннями, що представляють собою вузли та переходи між ними (або звичайним потоком управління вниз або у випадку умовних стрибків і петель), що є ребрами. Цикломатична складність тут може бути приблизно (якщо ви вважаєте, що у всій вашій програмі немає ізольованого коду, тобто ваш графік підключений) розглядати як різницю між кількістю ребер та кількістю вузлів.
CC = E - N
Проблема доступності - це поширена проблема в теорії графів, яку можна виразити так: з урахуванням двох вузлів A і B - це вузол B, який можна досягти з вузла A, тобто чи можна досягти B, починаючи з A і правильно слідуючи за гранами графіка напрямок? Отже, це знову-таки показник, застосовний для графіка потоку управління, а не для коду.
Існує кілька способів застосувати цю проблему до графіка потоку управління . Один із способів - це так званий "аналіз змінної доступності", тобто для даної змінної аналіз визначає, чи є його значення все ще доступним у певній програмі (цей метод також називається нарізкою в аналізі програмного забезпечення). Я також знайшов лише деякі статті, які використовують цей термін (і загалом проблема доступності) для багатопотокових програм .
В основному можна побачити певний взаємозв'язок між CC і досяжністю: зі збільшенням CC також збільшується відношення ребер над вузлами, і навіть у випадку спрямованого графіка, де також важливим є напрямок краю, можна думати, що збільшення кількість ребер врешті-решт призводить до збільшення доступних шляхів у графіку, і, таким чином, досягає доступності через прямі або непрямі з'єднання між вузлами. Отже, тут відповідь - Так .
З іншого боку, поняття доступності в багатопотоковому середовищі вимагає аналізу так званого суперграфа - і це не так банально. Збільшення CC (тут називається " складність синхронізації ") може призвести до вищої ймовірності тупикового замовлення в програмному забезпеченні і тим самим знизити доступність певних вузлів / сегментів коду. Тому "Ні" є вагомою відповіддю і тут .