МЕТОД ПАРК

1 ПАРК МЕТОДУ Мутанти вільні або хто насправді тестує мої тести?

Виклики Мутатор

2 Бенджамін Клюглейн Старший інженер-програміст, дип. Інф. (FH) 2

4 Наша сьогоднішня тема Тестування мутацій 4

6 Немає нової ідеї. Запропоновано Річардом Ліптоном 1971 р. Опубліковано DeMillo, Lipton and Sayward у IEEE Computer, 11 (4): квітень У багатьох випадках тести програми, що виявляють прості помилки, також ефективні для виявлення набагато складніших помилок. Цей так званий ефект зчеплення можна використовувати для економії роботи під час тестування, IBM представляє перший портативний комп'ютер (IBM 5100). 1976 Apple виводить Apple I на ринок => захоплюючі часи, керовані обчислювальні потужності 6

7 цікавих фактів Люди Ікс вперше з’являються в 1963 р., Але успішними з приблизно Приблизно лектор існує лише з 1982 р. Як ми побачимо, нашій темі також потрібно було трохи спробувати 7

8 Чому тестування? Чому я/ми пишемо тести, я почувався добре. Андреас Меллер Гарне відчуття якості доставки Що я насправді хочу реалізувати? Поліпшення правил дизайну/API, таких як IEC (програмне забезпечення медичних пристроїв) Потрібне тестування на всіх рівнях модульного тестування, інтеграції та системи 8

9 Тільки отримувати задоволення від написання тестів можна тримати в межах часу Складні, складні тести можуть бути звіром для себе. Введення власних концепцій та структур Іноді також бракує знань. Тести - це невизначена територія для всіх нас. Ви не можете перевірити наш код обробляються Навіть оброблені в оглядах коду 9

Пошук 10 відповідей Наскільки якісні мої модульні тести? Наскільки добре моє тестове покриття? Які тести я можу пропустити? 10

11 Що мені потрібно для тестування на мутацію? Код надають мутанти. На початку процедури повинен бути зеленим. Як зазвичай;-) 11

12 кроків через полювання за мутантами 1. Генеруються мутанти (помилки) 2. УТ проводяться для кожного мутанта 1. Якщо тест червоний, мутант був убитий 2. Якщо ніхто не перекинувся, мутант вижив 12

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

14 Автоматично перемикається на різні класи мутантів Умовні межі Інкременти меж мутатора Мутатор Інвертні негативи Мутатор Математика Мутатор Негат Умовні умови Мутатор Повернені значення Мутатор Порожній метод Виклики Конструктор мутатора Виклики Мутатор Вбудований постійний мутатор Непорожній метод Виклики Мутатор Видалити умовні Мутатор Експериментальний член Мутатор Експериментальний мутатор Експериментальний член Мутатор

15 Мутатори Умовні умови Граничний мутатор Оригінальна зміна> => => Збільшення Оригінальна зміна мутатора Інвертувати негативні мутатори Оригінальний публічний плаваючий заперечення (фінальний плаваючий i) < return -i; >Зміна публічного заперечення плаваючого місця (остаточне плаваюче число i < return i; >15-й

16 Mutators II Math Mutator Original Change *// *% * & & ^ &> >> >> 17 Mutators III Return Value Mutator Original Boolean Int, byte, short Long X + 1 Float, double Objects Void Method Call Mutator Original public int foo () < int i = 5; dosomething(i); return i; >Змінити true або false 1 або 0, всупереч оригіналу - (x + 1,0) Null або RuntimeException для нульових значень змініть public int foo () < int i = 5; return i; >17-й

18 Як це все працює? Залежно від технології Pitest: Змінюються номери рядків байт-коду та потрібне ім'я вихідного файлу. Mutate.py (скрипт для мутацій коду C): генерує змінений.

19 Проблеми Енергоємні Можна використовувати взагалі лише з поточною обчислювальною потужністю Час роботи одиничних тестів хв 53 с хв 39 с Тривалість випробувань MT хв 44 с 19

20 викликів - терміни =========================================> сканувати шлях до класу: 1 секунда> аналіз охоплення та залежності: 2 хвилини 33 секунди> побудова мутаційних тестів: 1 секунда> запуск аналізу мутації: 5 хвилин 7 секунд> Разом: 7 хвилин 44 секунди =============== ========================== ========================== =============== - Статистика ====================================== ======== ========================================= >> >> Створено 5336 мутацій Вбито 3034 (57%) >> Виконано 9923 тести (1,86 тесту на мутацію) 20

21 Проблеми II Помилкові позитивні результати Мовна підтримка різної якості Використання в поточному проекті важке для використання: трансляція JavaScript 21

22 Можливі рішення Більше енергоспоживання (процесор, потоки) Використовуйте лише у визначений час Обмежтесь певними тестами Активуйте лише певні мутатори PIT: Додатковий аналіз Спроба оптимізації з припущеннями про зміни 22

Кінець Дякую за увагу. Якщо у вас виникли запитання: