Чи існує кореляція між складністю та доступністю?


18

Нещодавно я вивчав цикломатичну складність (McCabe) та доступність програмного забезпечення в університеті. Сьогодні мій лектор сказав, що між двома показниками немає кореляції, але чи справді це так?

Я думаю , що, безсумнівно , буде деяка кореляція, як менш складні програми (від мізерних мало ми розглянули) , схоже, «краще» результати з точкою зору досяжності.

Хтось знає про будь-яку спробу перегляду двох показників разом, і якщо ні, то яке б місце було вдалим для пошуку даних про складність та доступність для великої кількості програм?

Відповіді:


2

Нещодавно я вивчав цикломатичну складність (McCabe) та доступність програмного забезпечення в університеті. Сьогодні мій лектор сказав, що між двома показниками немає кореляції, але чи справді це так?

Насправді і так, і ні.

Перш за все, просто нагадаю, метрика McCabe для циклічної складності обчислюється на графіку керуючого потоку, де ви абстрагуєте свій вихідний код до спрямованого графа з базовими блоками або висловлюваннями, що представляють собою вузли та переходи між ними (або звичайним потоком управління вниз або у випадку умовних стрибків і петель), що є ребрами. Цикломатична складність тут може бути приблизно (якщо ви вважаєте, що у всій вашій програмі немає ізольованого коду, тобто ваш графік підключений) розглядати як різницю між кількістю ребер та кількістю вузлів.

CC = E - N

Проблема доступності - це поширена проблема в теорії графів, яку можна виразити так: з урахуванням двох вузлів A і B - це вузол B, який можна досягти з вузла A, тобто чи можна досягти B, починаючи з A і правильно слідуючи за гранами графіка напрямок? Отже, це знову-таки показник, застосовний для графіка потоку управління, а не для коду.

Існує кілька способів застосувати цю проблему до графіка потоку управління . Один із способів - це так званий "аналіз змінної доступності", тобто для даної змінної аналіз визначає, чи є його значення все ще доступним у певній програмі (цей метод також називається нарізкою в аналізі програмного забезпечення). Я також знайшов лише деякі статті, які використовують цей термін (і загалом проблема доступності) для багатопотокових програм .

В основному можна побачити певний взаємозв'язок між CC і досяжністю: зі збільшенням CC також збільшується відношення ребер над вузлами, і навіть у випадку спрямованого графіка, де також важливим є напрямок краю, можна думати, що збільшення кількість ребер врешті-решт призводить до збільшення доступних шляхів у графіку, і, таким чином, досягає доступності через прямі або непрямі з'єднання між вузлами. Отже, тут відповідь - Так .

З іншого боку, поняття доступності в багатопотоковому середовищі вимагає аналізу так званого суперграфа - і це не так банально. Збільшення CC (тут називається " складність синхронізації ") може призвести до вищої ймовірності тупикового замовлення в програмному забезпеченні і тим самим знизити доступність певних вузлів / сегментів коду. Тому "Ні" є вагомою відповіддю і тут .


1

Я не знайомий з доступністю, але якщо це міра кодових шляхів, які ніколи не можуть бути виконані, цикломатична складність повинна бути якоюсь верхньою межею.


0

З цього приводу може бути деяка статистика, але я б сказав, що кореляції немає, оскільки одна не залежить від іншої, а також є можливість вибору дизайну програмної системи, яка дозволяє це усунути.

Щодо даних реального світу, можливо , існує сильна кореляція, але це може бути пов'язано з погано розробленими програмними системами, які не усувають цю кореляцію. Це може бути випадковою кореляцією через незнання теорії графів.


1
Одне в залежності від іншого - це причинно-наслідкова зв’язок, а не кореляція.
JeffO
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.