Посібник із покриття коду: розгалуження, тестування операторів і рішень
Що таке покриття коду?
Покриття коду – це показник, який описує ступінь перевірки вихідного коду програми. Це одна з форм тестування білої скриньки, яка знаходить області програми, які не виконуються набором тестів. Він також створює кілька тестів для збільшення охоплення та визначення кількісної міри охоплення коду.
У більшості випадків система покриття коду збирає інформацію про запущену програму. Він також поєднує це з інформацією про вихідний код, щоб створити звіт про покриття коду набору тестів.
Навіщо використовувати тестування покриття коду?
Ось кілька головних причин для використання покриття коду:
- Це допомагає вам виміряти ефективність виконання тесту
- Він пропонує кількісне вимірювання.
- Він визначає ступінь перевірки вихідного коду.
Методи покриття коду
Нижче наведено основні методи покриття коду
- Покриття заяви
- Покриття рішень
- Покриття філій
- Toggle Покриття
- Покриття FSM
Покриття заяви
Покриття заяви це техніка тестування білого ящика, за якої всі виконувані оператори у вихідному коді виконуються принаймні один раз. Він використовується для обчислення кількості операторів у вихідному коді, які були виконані. Основна мета Statement Coverage — охопити всі можливі шляхи, рядки та оператори у вихідному коді.
Покриття операторів використовується для отримання сценарію на основі структури тестованого коду.
In білий Box Тестування, тестувальник зосереджується на тому, як працює програмне забезпечення. Іншими словами, тестувальник зосереджуватиметься на внутрішній роботі вихідного коду щодо графів потоку керування або блок-схем.
Як правило, у будь-якому програмному забезпеченні, якщо ми подивимося на вихідний код, буде широкий спектр елементів, таких як оператори, функції, цикли, виняткові обробники тощо. На основі вхідних даних у програму деякі оператори коду можуть не виконуватися . Метою Statement coverage є охоплення всіх можливих шляхів, рядків і операторів у коді.
Давайте розберемося в цьому на прикладі, як розрахувати покриття виписки.
Сценарій для розрахунку Statement Coverage для заданого вихідного коду. Тут ми беремо два різні сценарії, щоб перевірити відсоток охоплення заяви для кожного сценарію.
Вихідний код:
Prints (int a, int b) { ------------ Printsum is a function int result = a+ b; If (result> 0) Print ("Positive", result) Else Print ("Negative", result) } ----------- End of the source code
Сценарій 1:
Якщо A = 3, B = 9Жовтим кольором позначені заяви, які виконуються за сценарієм
Кількість виконаних операторів = 5, Загальна кількість операторів = 7
Охоплення заяви: 5/7 = 71%
Так само ми побачимо сценарій 2,
Сценарій 2:
Якщо A = -3, B = -9
Жовтим кольором позначені заяви, які виконуються за сценарієм.
Кількість виконаних операторів = 6
Загальна кількість заяв = 7
Охоплення заяви: 6/7 = 85%
Але загалом, якщо ви бачите, всі заяви охоплюються обома сценаріями. Таким чином, ми можемо зробити висновок, що загальне покриття виписки становить 100%.
Що охоплює Statement Coverage?
- Невикористані заяви
- Мертвий код
- Невикористані гілки
- Відсутні твердження
Тестування покриття рішень
Покриття рішень це техніка тестування білого ящика, яка повідомляє про істинні або хибні результати кожного логічного виразу вихідного коду. Метою тестування покриття рішення є охоплення та перевірка всього доступного вихідного коду шляхом перевірки та забезпечення того, що кожна гілка кожної можливої точки прийняття рішення виконується принаймні один раз.
У цьому типі покриття вирази можуть стати складними, що ускладнить досягнення 100% покриття. Ось чому використовуються різні методи для звітування про цей показник. Ці методи віддають пріоритет найбільш критичним комбінаціям. Хоча це схоже на покриття рішень, воно забезпечує більшу чутливість до потоку керування.
Приклад покриття рішень
Розглянемо наступний код-
Demo(int a) { If (a> 5) a=a*3 Print (a) }
Сценарій 1:
Значення a дорівнює 2
Код, виділений жовтим кольором, буде виконано. Тут перевіряється результат «Ні» рішення Якщо (a>5).
Покриття рішень = 50%
Сценарій 2:
Значення a дорівнює 6
Код, виділений жовтим кольором, буде виконано. Тут перевіряється результат «Так» рішення Якщо (a>5).
Покриття рішень = 50%
Тестовий випадок | Значення А | Вихід | Покриття рішень |
---|---|---|---|
1 | 2 | 2 | 50% |
2 | 6 | 18 | 50% |
Тестування охоплення філій
Покриття філій це метод тестування білої скриньки, у якому перевіряється кожен результат модуля коду (вираз або цикл). Метою покриття гілок є забезпечення того, щоб кожна умова рішення з кожної гілки була виконана принаймні один раз. Це допомагає виміряти частки незалежних сегментів коду та виявити розділи, які не мають розгалужень.
Наприклад, якщо результати є двійковими, вам потрібно перевірити як True, так і False результати.
Формула для розрахунку покриття філії:
Приклад покриття філії
Щоб дізнатися про покриття гілок, розглянемо той самий приклад, який використовувався раніше
Розглянемо наступний код-
Demo(int a) { If (a> 5) a=a*3 Print (a) }
Покриття гілок також розглядатиме безумовні гілки
Тестовий випадок | Значення А | Вихід | Покриття рішень | Покриття філій |
---|---|---|---|---|
1 | 2 | 2 | 50% | 33% |
2 | 6 | 18 | 50% | 67% |
Переваги покриття відділення:
Охоплення філій Тестування дає такі переваги:
- Дозволяє перевірити всі гілки в коді
- Допомагає переконатися, що жодне розгалуження не призведе до будь-яких відхилень у роботі програми
- Метод покриття гілок усуває проблеми, які виникають через тестування покриття операторів
- Дозволяє знайти ті області, які не перевіряються іншими методами тестування
- Це дозволяє знайти кількісну міру покриття коду
- Покриття гілок ігнорує гілки всередині булевих виразів
Тестування покриття умов
Покриття умов або покриття виразів — це метод тестування, який використовується для перевірки та оцінки змінних або підвиразів в умовному операторі. Метою покриття умов є перевірка окремих результатів для кожної логічної умови. Покриття умов забезпечує кращу чутливість до потоку керування, ніж охоплення рішень. У цьому охопленні розглядаються лише вирази з логічними операндами.
Наприклад, якщо у виразі є такі логічні операції, як AND, OR, XOR, що вказує на загальну кількість можливостей.
Покриття умов не дає гарантії щодо повного покриття рішень.
Формула для розрахунку покриття умов:
приклад:
Для наведеного вище виразу ми маємо 4 можливі комбінації
- TT
- FF
- TF
- FT
Розглянемо наступний вхід
X = 3
Y = 4 |
(х | ІСТИНА | Покриття умов становить ¼ = 25% |
A = 3
B = 4 |
(a>b) | ПОМИЛКОВИЙ |
Покриття кінцевого автомата
Покриття кінцевого автомата, безумовно, є найскладнішим типом методу покриття коду. Це тому, що він працює на поведінку дизайну. У цьому методі охоплення вам потрібно шукати, скільки конкретних за часом станів відвідано, пройдено. Він також перевіряє, скільки послідовностей включено в кінцевий автомат.
Який тип кодового покриття вибрати
Це, безумовно, найскладніша відповідь. Щоб вибрати метод покриття, тестувальник повинен перевірити, чи
- тестований код має один або кілька невиявлених дефектів
- вартість потенційного штрафу
- вартість втраченої репутації
- вартість втраченого продажу тощо.
Чим вища ймовірність того, що дефекти призведуть до дорогих збоїв у виробництві, тим суворіший рівень покриття потрібно вибрати.
Покриття коду проти функціонального покриття
Покриття коду | Функціональне покриття |
---|---|
Покриття коду говорить про те, наскільки добре ваш тестовий стенд використав вихідний код. | Функціональне охоплення вимірює, наскільки добре функціональні можливості дизайну були охоплені вашим тестовим стендом. |
Ніколи не використовуйте специфікацію дизайну | Використовуйте специфікацію конструкції |
Зроблено розробниками | Виконано тестувальниками |
Інструменти покриття коду
Ось список важливих інструментів покриття коду:
Назва інструменту | Опис |
---|---|
Cobertura | Це інструмент із відкритим вихідним кодом. Він вимірює тестове покриття за допомогою інструментарію кодової бази та аналізує, які рядки коду виконуються, а які не виконуються під час запуску набору тестів. |
Клевер | Clover також скорочує час тестування, запускаючи лише ті тести, які охоплюють код програми, який було змінено після попередньої збірки. |
DevPartner | DevPartner дозволяє розробникам аналізувати Java код якості та складності коду. |
Емма | EMMA підтримує рівні покриття класу, методу, рядка та базового блоку, агрегованого вихідного файлу, класу та методу. |
Калістик | Kalistick — стороння програма, яка аналізує коди з різних точок зору. |
CoView і CoAnt | Програмне забезпечення для кодування — це інструмент для охоплення коду для метрик, створення макетів об’єктів, тестування коду, охоплення шляхів і гілок тощо. |
Яблучко для C++ | BulseyeCoverage — це інструмент покриття коду для C++ і C. |
Сонар | Sonar — це відкритий інструмент покриття коду, який допомагає вам керувати якістю коду. |
Переваги та недоліки використання покриття коду
Переваги покриття коду | Недоліки кодового покриття |
---|---|
Корисно оцінити кількісну міру покриття коду | Навіть якщо будь-яка конкретна функція не реалізована в дизайні, покриття коду все одно повідомляє про 100% покриття. |
Це дозволяє створювати додаткові тестові випадки для збільшення покриття | Неможливо визначити, чи ми протестували всі можливі значення функції за допомогою покриття коду |
Це дозволяє вам знаходити області програми, які не виконуються набором тестів | Охоплення коду також не говорить про те, наскільки добре ви охопили свою логіку |
У випадку, коли зазначена функція не реалізована або не включена в специфікацію, методи на основі структури не можуть знайти цю проблему. |
Підсумки
- Покриття коду – це показник, який описує ступінь перевірки вихідного коду програми
- Це допомагає вам виміряти ефективність виконання тесту
- П’ять методів покриття коду: 1.) Покриття операторів 2.) Покриття умов 3) Покриття гілок 4) Toggle Покриття 5) Покриття FSM
- Покриття операторів передбачає виконання всіх виконуваних операторів у вихідному коді принаймні один раз
- Покриття рішень повідомляє про істинні чи хибні результати кожного булевого виразу
- У охопленні гілок перевіряється кожен результат модуля коду
- Conditional покаже, як обчислюються змінні або підвирази в умовному операторі
- Покриття кінцевого автомата, безумовно, є найскладнішим типом методу покриття коду
- Щоб вибрати метод покриття, тестувальник повинен перевірити вартість потенційного штрафу, втраченої репутації, втраченого продажу тощо.
- Покриття коду говорить вам, наскільки добре вихідний код був використаний на вашому випробувальному стенді, тоді як функціональне охоплення вимірює, наскільки добре було охоплено функціональність дизайну
- Cobertura, JTest, Clover, Emma, Kalistick — кілька важливих інструментів для охоплення коду
- Покриття коду дозволяє створювати додаткові тестові випадки для збільшення покриття
- Покриття коду не допомагає вам визначити, чи ми перевірили всі можливі значення функції