what is cyclomatic complexity learn with an example
Цикломатична складність - дуже поширене слово в спільноті розробників. Ця методика в основному використовується для визначення складності фрагмента коду або функціональних можливостей.
Методика була розроблена MaCabe і допомагає визначити нижче 3 запитання щодо програм / функцій
- Чи перевіряється функція / програма?
- Чи зрозуміла функція / програма всім?
- Чи є функція / програма достатньо надійною?
Як контроль якості ми можемо використовувати цю техніку, щоб визначити 'рівень' нашого тестування. Практично, якщо результат цикломатичної складності більший чи більший, ми вважаємо цю частину функцій складною, і тому робимо висновок як тестувальника; що шматок коду / функціональності вимагає поглибленого тестування.
З іншого боку, якщо результатом Цикломатичної Складності є менша кількість, ми робимо висновок як QA, що функціональність менш складна, і відповідно визначаємо сферу застосування.
Дозвольте піти крок за кроком: спочатку зрозумійте, як він обчислюється, а потім ми перейдемо до того, щоб зрозуміти, як визначається рівень тестування.
Що ви дізнаєтесь:
- Як розрахувати цикломатичну складність?
- Формула цикломатичної складності
- Приклад цикломатичної складності
- Як тестери можуть ним користуватися?
- Тепер з'являється ярлик-
- Рекомендована література
Як розрахувати цикломатичну складність?
Розрахунок КК обертається навколо 2 концепцій
- Вузли
- Краї
Виписки в програмі представлені у вигляді вузлів, а шляхи управління від одного виразу до іншого представлені Edges.
Формула цикломатичної складності
Формула для обчислення CC така:
CC = E ~ N + 2
Де:
E = Кількість ребер
N = Кількість вузлів.
(Існує ярлик для його обчислення, але не зараз …… пізніше…)
Приклад цикломатичної складності
Візьмемо наведений нижче приклад, щоб зрозуміти це.
Розглянемо наведений нижче графік контролю потоку:
Я розмістив NET крапки для ідентифікації Вузлів та СИНІЙ лінії для ідентифікації країв:
Отже, у цьому прикладі:
що таке json файл як відкрити
Кількість вузлів (червоних крапок) = 14
Кількість країв (сині лінії) = 15
Отже, цикломатична складність = N ~ E + 2 = (14-15) +2 = 3
Як тестери можуть ним користуватися?
У реальному світі тестери можуть спілкуватися з розробниками, щоб вивести графік потоку управління для даного фрагмента коду. І як тільки ми отримаємо графік, ми можемо отримати складність, використовуючи цю формулу. Але історія для тестувальників на цьому не закінчується: - головне тут - у чому користь цього номера для команди тестувальників?
Ну, тестери можуть скористатися цим числом, щоб визначити рівень своїх тестувань.
На практиці існує 2 рівні тестування:
- Випробування довжини
- Тестування широти
Розглянемо наведену нижче матрицю для різних особливостей будь-якого модуля: -
Тестування довжини - це спосіб, за допомогою якого ми намагаємося охопити весь обсяг, вибравши важливі тестові кейси для кожної функції. Наприклад , в цьому випадку, припустимо, що я вирішив натякнути на тестування довжини, тоді я можу вибрати -
- Суб'єкт 1.1 та Суб'єкт 1.3 для Функції 1
- Допоміжна функція 2.2 із функції 2
- Підфункція 3.3 із функції 3
- Підфункція 4.2 та Підфункція 4.3з функції 4
- Підфункція 5.3 із функції 5
Отже, тут я торкаюся всієї функції, не вдаючись до вичерпних деталей підфункцій.
Тепер, якщо результат CC більший, тоді я вирішу піти на тестування широти, я фактично тестуватиму кожну функцію разом із кожною підфункцією.
Отже, виходячи з ваших поточних вимог до проекту, надійності навколишнього середовища, тестери можуть співпрацювати разом із командою розробників та створювати стандарт для ідентифікації рівня та обсягу тестування. Наприклад -
- Якщо ЦК<=15 – Basic sanity test
- Якщо CC становить від 16 до 30 - Тестування довжини
- Якщо КК становить від 31 до 50 - Тестування широти
- Якщо CC> 50 - це хаотична функціональність і потребує подальшого розкладання
Тепер з'являється ярлик-
Просто підрахуйте кількість закритих областей і додайте до неї 1.
У нашому прикладі вище - кількість замкнутої області = 2 (заповнена жовтим кольором), отже CC = 2 + 1 = 3
У реальній роботі дуже важко зробити висновок про результат, коли ми даємо такі заяви:
- “… .. цю функціональність дуже важко реалізувати”
Що ви маєте на увазі під словом? Це складно, складно чи хаотично?
Як ви дійшли висновку, що це важко?
- '... це повинно бути доступно до кінця дня'
Що таке кінець дня? Ваш кінець дня о 19.00, можливо, у мене о 18.00?
- '... мені потрібно було б провести детальне тестування для цього'
Що таке детальне тестування? Не існує техніки тестування, яка називається “Детальне тестування”
- '... код повинен бути якісним, перш ніж ми його розгорнемо в QA'
Як ви вимірюєте хорошу якість?
Натомість, якщо я переформулюю твердження на зразок -
Цикломатична складність для коду розраховується як 75 і відповідно до наших стандартів; ця функціональність має характер Хаосу. Тому ми рекомендуємо його далі розкладати.
Більше
- “… .. цю функціональність дуже важко реалізувати”
Функціонал буде розгорнуто в середовищі контролю якості до 17:00 CST.
Більше
- '.... Це має бути доступним до кінця дня'
Оскільки цикломатична складність обчислюється як 48, відповідно до нашого стандарту ми проводили б тестування систем разом із тестуванням інтеграції та регресії для функції.
Більше
- '.... Мені потрібно було б провести детальне тестування для цього'
Відповідно до ехолота, зараз CC становить 102. Ми стандартизували CC до 10. Ми будемо застосовувати код, коли вдосконалимо код, щоб CC становив менше 10.
Більше
- '… .Код повинен бути якісним перед тим, як ми розгорнемо його до контролю якості'
У чому різниця між двома твердженнями?
Ну, різниця тут полягає в вимірі. Я підтримав кожне своє твердження відповідними вимірами, які допомогли б моїм зацікавленим сторонам точно знати, що я хочу сказати.
Подібним чином використовуйте складність Cyclomatic при тестуванні програмного забезпечення, щоб визначити точний показник ваших зусиль для тестування, і ви можете використовувати його для визначення не лише обсягу тестування, але й типів тестування, які вам потрібно буде виконати.
Рекомендована література
- Що таке тестування компонентів або модульне тестування (Дізнайтеся на прикладах)
- Що таке порівняльне тестування (Дізнайтеся на прикладах)
- Електронна книга з тестуванням програмного забезпечення
- Що таке тестування системної інтеграції (SIT): навчіться на прикладах
- Найкращі засоби тестування програмного забезпечення 2021 р. (Засоби автоматизації тестування якості)
- Тестування Праймера Завантажити електронну книгу
- 5 важливих схем, які тестери повинні навчитися використовувати
- Підручник з огляду TestRail: Дізнайтеся наскрізне управління тестовими кейсами