МЕТОД ПАРК
1 МЕТОД ПАРК Мутантите са на свобода или кой всъщност тества моите тестове?

2 Benjamin Klüglein Старши софтуерен инженер, дипломиран инф. (FH) 2
4 Темата ни днес Тестване на мутации 4
6 Няма нова идея. Този така наречен ефект на свързване може да се използва за спестяване на работа по време на процеса на тестване, IBM представя първия преносим компютър (IBM 5100). 1976 Apple извежда Apple I на пазара => вълнуващи времена, управляема изчислителна мощност 6
7 Забавни факти X-Men се появяват за първи път през 1963 г. Но само успешни от приблизително лекторът съществува едва от 1982 г. Както ще видим, нашата тема също се нуждаеше от малко стартиране 7
8 Защо тестване? Защо аз/ние пишем тестове, чувствах се добре от чувството. Андреас Мьолер Доброто усещане за постигане на качество Какво всъщност искам да приложа? По-добри разпоредби за дизайн/API, като IEC (софтуер за медицински изделия) Изисква тестване на всички нива на тестване на модули, интеграция и система
9 Само забавлението при писане на тестове може да бъде ограничено Отнема много време, сложно, тестовете могат да бъдат свой собствен звяр Представяне на собствените ви концепции и структури Понякога има и липса на знания Тестовете са неизследвана територия за всички нас. обработвани Дори обезмаслени в рецензии на кодове 9
Намиране на 10 отговора Колко добри са моите модулни тестове? Колко добро е моето покритие на теста? Кои тестове може да пропусна? 10
11 Какво ми трябва за тестване на мутация? Кодът се предоставя от мутанти. В началото на процедурата трябва да е зелен. Както обикновено;-) 11
12 стъпки през мутантния лов 1. Генерират се мутанти (грешки) 2. Извършват се UT за всеки мутант 1. Ако тестът е червен, мутантът е убит 2. Ако нито един не успее, мутантът е оцелял 3. Оценка на процента на убитите мутанти 12
13 MT срещу Традиционно покритие на теста Покритието на теста сравнява само кой код е изпълнен, но не и дали тестовете също така могат да открият грешки Тъй като всъщност е в състояние да открие дали всяко изявление е тествано по смисъл, тестовете за мутация са златният стандарт, спрямо който всички останали видове покритието се измерва. pitest.org 13
14 Автоматично превключване към различни класове мутанти Условни граници Мутатор Инкременти Мутатор Инвертирани отрицания Мутатор Math Мутатор Negate Conditionals Мутатор Възвръщаеми стойности Мутатор Void Метод Мутатор Конструктор Извиква Мутатор Вграден постоянен мутатор Non Void Метод Мутатор Премахване на условни мутатор Експериментален член Мутатор Експериментален член Мутатор Експериментален член Експериментален член Мутатор
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 код): Генерира модифициран c-файл 18
19 Предизвикателства Енергоемки Може да се използва изобщо само с най-новата изчислителна мощност Време на работа на тестовете на модула мин. 53 s мин. 39 s Време на изпълнение на MT тестовете мин. 44 s 19
20 предизвикателства - тайминг =========================================> сканиране на пътя на класа: 1 секунда> анализ на покритието и зависимостта: 2 минути и 33 секунди> изграждане на тестове за мутация: 1 секунда> стартиране на анализ на мутация: 5 минути и 7 секунди> Общо: 7 минути и 44 секунди =============== ============================ ========================== =============== - Статистика ====================================== ======== ========================================= >> >> Генерирано 5336 мутации Убити 3034 (57%) >> Ран 9923 теста (1,86 теста на мутация) 20
21 Предизвикателства II Фалшиви положителни резултати Езикова поддръжка с различно качество Използване в текущия проект е трудно за използване: Транспилация на JavaScript 21
22 Възможни решения Повече мощност (CPU, нишки) Използвайте само в определени часове Ограничете се до определени тестове Активирайте само определени мутатори PIT: Инкрементален анализ Опит за оптимизация с предположения за промени 22
Край Благодаря ви за вниманието Ако имате въпроси: