what is mutation testing
Цей підручник пояснює, що таке тестування мутацій, як його виконувати та типи тестування мутацій на прикладах:
Що таке тестування мутацій?
Тестування на мутацію - це метод тестування на основі несправностей, коли варіанти програмного забезпечення піддаються тестовому набору даних. Це робиться для визначення ефективності набору тестів для виділення відхилень.
Це звучить трохи складно, чи не так?
Що ви дізнаєтесь:
Тестування мутацій
Мутаційне тестування (MT) проходить довгий шлях, починаючи з 70-х років, де його вперше запропонували як шкільний проект. Він був списаний, оскільки був дуже ресурсоємним. Однак, оскільки люди продовжували розробляти більш досконалі комп'ютери, це повільно повернулось і зараз є одним з найпопулярніших методів тестування.
Визначення мутаційного тестування
MT також відомий як тестування на основі несправностей, мутація програми, тестування на основі помилок, або мутаційний аналіз .
Як випливає з назви, тестування мутацій - це тип тестування програмного забезпечення, який базується на змінах або мутаціях. Незначні зміни вносяться у вихідний код, щоб перевірити, чи визначені тестові випадки можуть виявити помилки в коді.
Ідеальний випадок - жоден з тестів не повинен пройти. Якщо тест пройшов, це означає, що в коді є помилка. Ми говоримо, що мутант (модифікована версія нашого коду) жив. Якщо тест не вдався, то в коді немає помилки, і мутант був убитий. Наша мета - вбити всіх мутантів.
Мутаційне тестування також допомагає перевірити якість визначених тестових кейсів або тестових наборів з метою написання більш ефективних тестових кейсів. Чим більше мутантів ми можемо вбити, тим вища якість наших тестів.
Концепції тестування мутацій
Перш ніж ми обговоримо подальше тестування мутацій, давайте вивчимо деякі концепції, з якими ми зіткнемось.
# 1) Мутанти: Це просто мутована версія вихідного коду. Це код, який містить хвилинні зміни. Коли тестові дані запускаються через мутанта, в ідеалі це повинно давати нам різні результати від вихідного вихідного коду. Також називають мутантів програми мутантів .
Існують різні типи мутантів. Вони такі:
- Вижилі мутанти: Як ми вже згадували, це мутанти, які все ще живі після запуску тестових даних через оригінальний та мутований варіанти вихідного коду. Їх треба вбити. Вони також відомі як живі мутанти.
- Вбиті мутанти: Це мутанти, яких вбивають після тестування на мутацію. Ми отримуємо їх, коли отримуємо різні результати від оригінальної та мутованої версій вихідного коду.
- Еквівалентні мутанти: Вони тісно пов'язані з живими мутантами, оскільки вони 'живі' навіть після запуску через них даних тесту. Їх відрізняє від інших те, що вони мають таке саме значення, як оригінальний вихідний код, хоча вони можуть мати різний синтаксис.
# 2) Мутатори / оператори мутації: Це те, що робить можливими мутації, вони знаходяться на «сидінні водія». Вони в основному визначають тип зміни або зміни, щоб внести у вихідний код мутантну версію. Їх можна називати несправності або правила мутації .
# 3) Оцінка мутації: Це оцінка на основі кількості мутантів.
Він розраховується за нижченаведеною формулою:
Зверніть увагу, що, еквівалентні мутанти не враховуються при обчисленні оцінки мутації. Оцінка мутації також відома як адекватність мутації . Нашою метою має бути досягнення високого показника мутації.
Як зробити тестування на мутацію
Крок 1: Давайте напишемо наш одиничний тест на жасмин.
Тестовий люкс (жасмин)
describe('User', function() { it('should compare the two numbers from user input', function(){ expect(20).toBeGreaterThan(5); }) });
Крок No2: Напишіть оригінальний код.
Оригінальний код (Javascript)
const user_info = () => { mother_age = parseInt(prompt('Enter mother's age')) daughter_age = parseInt(prompt('Enter daughter's age')) if (mother_age > daughter_age) { alert(`Daughter's age is ${daughter_age}. Mother's age is ${mother_age}. Welcome to the Mother-Daughter program`) } else { alert(`Daughter's age: ${daughter_age}, is more than mother's age: ${mother_age}. Please enter correct ages`) } } user_info();
Крок No3: Потім ми проведемо тест через оригінальний код, щоб переконатися, що у нас не було невдалих тестів з самого початку. У нас повинен бути якийсь результат, який повідомляє, що ми справді написали тест з нульовими відмовами.
Наприклад:
закінчено за 0,019 с 1 специфікація, 0 відмов, рандомізовано з насінням 31435
Результат оригінального коду:
Daughter's age is 5. Mother's age is 20. Welcome to the Mother-Daughter program
Крок No4: Представте мутанта. У цьому випадку ми змінюємо більш чим оператора (мати_віку> дочка_віку) до a менше ніж оператор (mother_age Код мутанта (Javascript) Крок No5: Потім ми запускаємо тест через мутантний код. Ось результати тесту: закінчено за 0,017 с 1 специфікація, 0 відмов, рандомізовано з насінням 89555 Результат коду мутанта: Крок No6: Порівняйте результати оригінальної версії та мутантної версії. У цьому випадку вони різні, навіть якщо був використаний один і той же набір тестів. Тому ми вбили нашого мутанта. Тому наш набір тестів готовий до роботи. Існує кілька типів мутацій. Вони пояснюються нижче. Тут ми вводимо мутацію, змінюючи значення параметра та / або константи, зазвичай на +/- 1. Приклад: оригінальний код (Javascript) Якщо наведений вище код мав помножити парні числа, де i<4 , тоді мутація значення означала б зміну ініціалізації на нехай i = 1 . Приклад: Код мутанта (Javascript) Тут ми видаляємо або продублюємо заяву в блоці коду. Ми також могли б переставити оператори в блоці коду. Наприклад, у блоці if-else ми могли б видалити частину else або навіть весь блок if-else. Приклад: оригінальний код (Javascript) Приклад: Код мутанта (Javascript) Ціль тут - код, який приймає рішення, наприклад, порівняння цінностей. Ми можемо змінитися > до< як у прикладі нашої програми «Мати-дочка». Серед інших операторів, які ми можемо змінити, є такі: Переваги мутаційного тестування (MT) включають: До недоліків мутаційного тестування (МТ) належать: Інструменти дуже корисні для прискорення процесу генерації мутантів. Ось декілька інструментів, які ми можемо використовувати в MT: Stryker, Jumble, PIT та Insure ++. Давайте вчитися на прикладі: Скажімо, існує лікарняний сайт, який дозволяє новим користувачам реєструватися. Там читається Дата народження або вік пацієнта. Якщо воно більше 14, головним лікарем призначається лікар загальної практики. Для цього він використовує функцію 'загальний лікар', яка знаходить доступного лікаря. Тепер може бути інша функціональність. Можливо, пацієнтів віком до 13 років призначають до педіатра тощо. Але ми візьмемо лише справу віком старше 14 років. Ось як може виглядати код: 1) Читайте Вік Зверніть увагу, що наведені вище рядки коду не характерні для жодної мови програмування і не працюватимуть. Це просто гіпотетично. Як тестер, якщо мій набір даних 14, 15, 0, 13 - деякі випадкові числа. Мета полягає в тому, щоб перевірити, чи є набір даних з 4 значень (14, 15, 0 та 3) достатнім для виявлення всіх можливих проблем з цим кодом. Також читайте => Поради щодо проектування даних тестів перед виконанням тестів Як мутаційне тестування досягає цього? Перш за все, ви створюєте мутанти - варіації програми. Мутант - це не що інше, як програма, яка написана як відхилення. Він містить самозасівний дефект. Прикладами є: Ці заміни також називаються 'Оператори мутації'. Дозвольте показати приклади: Мутант №1: Реляційний операторзаміна 1) Читай вік Мутант No2: 1) Читай вік Мутант No3: 1) Читай вік Мутант No4: 1) Читай вік Мутант №5: Видалення заяви 1) Читай вік Мутант №6: Внесення абсолютної вартості 1) Читай вік Мутант №7: Неправильний синтаксис 1) Читай вік Мутант №8: робить те саме, що і оригінальний тест 1) Читай вік Одного разу всі мутанти створені. Вони піддаються тестовому набору даних. Наш набір - 14, 15, 0 і 13. Якого з цих мутантів знайде наш набір даних? Дізнайтеся в таблиці нижче: (Клацніть на зображення для збільшення) Як ви можете бачити, наше значення даних 14 знаходить помилки, коли воно працює проти Мутантів 2, 3 і 4. Або 14 вбиває мутантів 2, 3 і 4. Але воно неефективне проти 1, 6 і 8. Якщо ваш набір даних вбиває всіх мутантів, це ефективно. В іншому випадку включіть більше або кращі дані тесту. Не обов'язково, щоб кожне значення в наборі даних вбивало всіх мутантів. Але разом вони повинні вбити всіх.Наприклад:14 вбиває 2, 3 і 4. 15 вбиває 1, 2 і 4. І так далі. А як щодо 5, 7 та 8? Мутант No5 - це екземпляр програми, який не вдасться незалежно від будь-якого значення даних, яке ви надаєте. Це тому, що він не буде виконувати жодного програмування як для дійсних, так і для недійсних значень. Мутант No7 - буде помилкою компіляції. Або у випадку мови сценаріїв помилка, яка перешкоджатиме виконанню. Мутант No8 - це те саме, що і основна програма. Як бачите, вищезазначені мутанти зовсім не корисні. Отже, мутантів, яких слід уникати, є: Ви думаєте, якщо це займе стільки зусиль, що станеться, коли мені доведеться протестувати великі зразки коду? Тестування мутацій базується на двох речах: Тому, він зосереджується на найменшій одиниці коду і покладає свою віру в навик програміста масштабувати тестування мутації на більші програми. Цей підручник охоплює визначення прикладів тестування мутацій, типи та кроки для детального проведення цього тестування. Ми сподіваємось, вам сподобалось читати та вивчати цю цікаву техніку тестування - тестування мутацій. Про автора: Ця стаття написана членом команди STH Свати С. Будь ласка, поділіться своїми коментарями, питаннями та думками нижче. const user_info = () =>{ mother_age = parseInt(prompt('Enter mother's age')) daughter_age = parseInt(prompt('Enter daughter's age')) if (mother_age
Daughter's age: 5, is more than mother's age: 20. Please enter correct ages
Типи тестування мутацій
# 1) Мутація значення
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=1; i
# 2) Мутація твердження
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=0; i
# 3) Мутація рішення
Оригінальний оператор Оператор мутанта 1 <= > = два > = == 3 === == 4 і або 5 || &&
Засоби тестування мутацій
Детальніше про тестування мутацій
два) Якщо вік> 14
3) Лікар = лікар загальної практики ()
4) Кінець якщо
2) Якщо вік с<’
3) лікар = лікар загальної практики ()
4) Закінчити, якщо
2) Якщо вік = 14 «Зміна> за допомогою =»
3) лікар = лікар загальної практики ()
4) Закінчити, якщо
2) Якщо вік> = 14 «Зміна> на> =»
3) лікар = лікар загальної практики ()
4) Закінчити, якщо
2) Якщо вік с<=’
3) лікар = лікар загальної практики ()
4) Закінчити, якщо
2) Якщо вік = 14
3) 'видалити заяву про призначення лікаря'
4) Закінчити, якщо
2) Якщо вік> 14
3) Лікар = Mr.X (введення абсолютного значення - скажімо, X - педіатр)
4) Закінчити, якщо
2) Якщо вік %% 14 (неправильний синтаксис)
3) лікар = лікар загальної практики ()
4) Закінчити, якщо
2) Якщо вік> 14 & вік> 14 «означає те саме, що вік> 14»
3) лікар = лікар загальної практики ()
4) Закінчити, якщо
Окуляри, на які слід звернути увагу
що таке операційна система в комп'ютері - -
Висновок
Рекомендована література