Ця стаття містить правописні, лексичні, граматичні, стилістичні або інші мовні помилки, які треба виправити. |
Мутаційні тестування (мутаційний аналіз або мутація програм) — це метод тестування програмного забезпечення, який включає невеликі зміни коду програми. Якщо набір тестів не в змозі виявити такі зміни, то він розглядається як недостатній. Ці зміни називаються мутаціями і ґрунтуються на мутаційних операторах, які або імітують типові помилки програмістів (наприклад використання неправильної операції або імені змінної) або вимагають створення корисних тестів.
Простіше кажучи, мутаційне тестування призначене для оцінки якості тестового набору. У програму вноситься невелика зміна, яка має проявитися при тестуванні. Якщо вона ніяк не впливає на результати тестів, то це означає, що тести підібрані невдало.
Історичний огляд
Мутаційні тестування запропонував 1971 року студент Річард Ліптон і вперше розробили та опублікували ДеМіл, Ліптон і Сейвард. Першу реалізацію інструменту для мутаційного тестування створив Тімоті Бадд з Єльського університету в своїй дисертації (з назвою «Мутаційний аналіз») 1980 року.
Метод мутаційного тестування вимагає великих обчислювальних витрат і до недавнього часу не був популярним. Проте останнім часом він знову викликає інтерес дослідників у галузі інформатики.
Огляд мутаційного тестування
Мутаційні тестування проводяться шляхом вибору мутаційних операторів та застосування їх одного за іншим до кожного фрагменту вихідного коду програми. Результат одного застосування мутаційного оператора до програми називається мутантом. Якщо набір тестів здатний виявити зміну (тобто один з тестів не проходить), то мутант називається вбитим. Як правило, мутант відрізняється від вихідної програми невеликим числом мутацій. У вихідній програмі можуть піддаватися мутаціям ділянки коду пов'язані з дефектами (змінюються значення змінних, модифікуються індекси та межі циклів, вносяться мутації в умови). Таким чином, з первісної програми шляхом внесення n
числа мутацій отримують k
мутантів, n >= k
(як мінімум одна мутація на одного мутанта). Якщо сформоване безліч тестових наборів виявляє всі мутації у всіх мутантів, то воно відповідає мутаційному критерію. Якщо тестування вихідної програми на заданій множині тестових наборів не виявило помилок, то програма оголошується коректною. У разі мутаційного тестування важливо створити таке число мутантів, яке б охоплювало всі можливі ділянки прояви помилок. Наприклад, розглянемо наступний фрагмент з програми на С++:
if (a && b) { c = 1; } else { c = 0; }
Оператор мутації умов замінить &&
на ||
, отримаючи наступного мутанта:
if (a || b) { c = 1; } else { c = 0; }
Для того, щоб тест міг вбити цього мутанта необхідно щоб були виконані наступні умови:
- Вхідні дані тесту повинні привести до різних станів програми для мутанта і вихідної програми. Наприклад, тест з
a = 1
іb = 0
призведе до цього. - Значення змінної
c
має вплинути на висновок програми і бути перевірено тестом.
Слабке мутаційне тестування (або слабке мутаційне покриття) вимагає виконання тільки першої умови. Сильне мутаційне тестування вимагає виконання обох умов і перевіряє що набір тестів в дійсності може виявити проблему. Слабке мутаційне тестування тісно пов'язане з методами покриття коду. Перевірка того, що набір тестів задовольняє слабку мутацію, вимагає набагато менше обчислень, ніж для сильної мутації.
Еквівалентні мутанти
Багато мутаційних операторів можуть призвести до еквівалентних програм. Наприклад, розглянемо наступний фрагмент програми:
int index = 0; while (…) { …; index++; if (index == 10) { break; } }
Оператор мутації умов може замінити ==
на >=
отримуючи таким чином наступного мутанта:
int index = 0; while (…) { …; index++; if (index >= 10) { break; } }
Однак не існує тесту, який міг би вбити цього мутанта. Отримана програма еквівалентна вихідній програмі. Такі мутанти називаються еквівалентними мутантами.
Розпізнавання еквівалентних мутантів є одним з найбільших перешкод для використання мутаційного тестування на практиці. Зусилля для перевірки того, чи є мутант еквівалентним, можуть бути дуже великими навіть для невеликих програм.
Мутаційні оператори
Багато видів мутаційних операторів були досліджені. Наприклад, для імперативних мов наступні оператори можуть бути використанні:
- Видалити оператор програми.
- Замінити кожне логічне вираження на логічну Констану «істина» або «фальш».
- Замінити кожну арифметичну операцію на іншу. Наприклад,
+
на*
,-
або/
. - Замінити кожну логічну операцію на іншу. Наприклад,
>
на>=
,==
або<=
. - Замінити кожну змінну на іншу (з тієї ж області видимості). Обидві змінні повинні мати однакові типи.
Крім того існують оператори для об'єктно-орієнтованих мов, оператори для паралельного програмування, оператори для структур даних, таких як контейнери та ін.
Примітки
- A Practical System for Mutation Testing: Help for the Common Programmer [ 14 лютого 2012 у Wayback Machine.] by A. Jefferson Offutt.
- (PDF). Архів оригіналу (PDF) за 28 вересня 2011. Процитовано 20 травня 2013.
- P. G. Frankl, S. N. Weiss, and C. Hu. All-uses versus mutation testing: An experimental comparison of effectiveness. Journal of Systems and Software, 38:235-253, 1997.
- MuJava: An Automated Class Mutation System [ 11 березня 2012 у Wayback Machine.] by Yu-Seung Ma, Jeff Offutt and Yong Rae Kwo.
- Mutation Operators for Concurrent Java (J2SE 5.0) [ 5 лютого 2012 у Wayback Machine.] by Jeremy S. Bradbury, James R. Cordy, Juergen Dingel.
- Mutation of Java Objects [ 12 травня 2013 у Wayback Machine.] by Roger T. Alexander, James M. Bieman, Sudipto Ghosh, Bixia Ji.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya mistit pravopisni leksichni gramatichni stilistichni abo inshi movni pomilki yaki treba vipraviti Vi mozhete dopomogti vdoskonaliti cyu stattyu pogodivshi yiyi iz chinnimi movnimi standartami Mutacijni testuvannya mutacijnij analiz abo mutaciya program ce metod testuvannya programnogo zabezpechennya yakij vklyuchaye neveliki zmini kodu programi Yaksho nabir testiv ne v zmozi viyaviti taki zmini to vin rozglyadayetsya yak nedostatnij Ci zmini nazivayutsya mutaciyami i gruntuyutsya na mutacijnih operatorah yaki abo imituyut tipovi pomilki programistiv napriklad vikoristannya nepravilnoyi operaciyi abo imeni zminnoyi abo vimagayut stvorennya korisnih testiv Prostishe kazhuchi mutacijne testuvannya priznachene dlya ocinki yakosti testovogo naboru U programu vnositsya nevelika zmina yaka maye proyavitisya pri testuvanni Yaksho vona niyak ne vplivaye na rezultati testiv to ce oznachaye sho testi pidibrani nevdalo Istorichnij oglyadMutacijni testuvannya zaproponuvav 1971 roku student Richard Lipton i vpershe rozrobili ta opublikuvali DeMil Lipton i Sejvard Pershu realizaciyu instrumentu dlya mutacijnogo testuvannya stvoriv Timoti Badd z Yelskogo universitetu v svoyij disertaciyi z nazvoyu Mutacijnij analiz 1980 roku Metod mutacijnogo testuvannya vimagaye velikih obchislyuvalnih vitrat i do nedavnogo chasu ne buv populyarnim Prote ostannim chasom vin znovu viklikaye interes doslidnikiv u galuzi informatiki Oglyad mutacijnogo testuvannyaMutacijni testuvannya provodyatsya shlyahom viboru mutacijnih operatoriv ta zastosuvannya yih odnogo za inshim do kozhnogo fragmentu vihidnogo kodu programi Rezultat odnogo zastosuvannya mutacijnogo operatora do programi nazivayetsya mutantom Yaksho nabir testiv zdatnij viyaviti zminu tobto odin z testiv ne prohodit to mutant nazivayetsya vbitim Yak pravilo mutant vidriznyayetsya vid vihidnoyi programi nevelikim chislom mutacij U vihidnij programi mozhut piddavatisya mutaciyam dilyanki kodu pov yazani z defektami zminyuyutsya znachennya zminnih modifikuyutsya indeksi ta mezhi cikliv vnosyatsya mutaciyi v umovi Takim chinom z pervisnoyi programi shlyahom vnesennya n chisla mutacij otrimuyut k mutantiv n gt k yak minimum odna mutaciya na odnogo mutanta Yaksho sformovane bezlich testovih naboriv viyavlyaye vsi mutaciyi u vsih mutantiv to vono vidpovidaye mutacijnomu kriteriyu Yaksho testuvannya vihidnoyi programi na zadanij mnozhini testovih naboriv ne viyavilo pomilok to programa ogoloshuyetsya korektnoyu U razi mutacijnogo testuvannya vazhlivo stvoriti take chislo mutantiv yake b ohoplyuvalo vsi mozhlivi dilyanki proyavi pomilok Napriklad rozglyanemo nastupnij fragment z programi na S if a amp amp b c 1 else c 0 Operator mutaciyi umov zaminit amp amp na otrimayuchi nastupnogo mutanta if a b c 1 else c 0 Dlya togo shob test mig vbiti cogo mutanta neobhidno shob buli vikonani nastupni umovi Vhidni dani testu povinni privesti do riznih staniv programi dlya mutanta i vihidnoyi programi Napriklad test z a 1 i b 0 prizvede do cogo Znachennya zminnoyi c maye vplinuti na visnovok programi i buti perevireno testom Slabke mutacijne testuvannya abo slabke mutacijne pokrittya vimagaye vikonannya tilki pershoyi umovi Silne mutacijne testuvannya vimagaye vikonannya oboh umov i pereviryaye sho nabir testiv v dijsnosti mozhe viyaviti problemu Slabke mutacijne testuvannya tisno pov yazane z metodami pokrittya kodu Perevirka togo sho nabir testiv zadovolnyaye slabku mutaciyu vimagaye nabagato menshe obchislen nizh dlya silnoyi mutaciyi Ekvivalentni mutantiBagato mutacijnih operatoriv mozhut prizvesti do ekvivalentnih program Napriklad rozglyanemo nastupnij fragment programi int index 0 while index if index 10 break Operator mutaciyi umov mozhe zaminiti na gt otrimuyuchi takim chinom nastupnogo mutanta int index 0 while index if index gt 10 break Odnak ne isnuye testu yakij mig bi vbiti cogo mutanta Otrimana programa ekvivalentna vihidnij programi Taki mutanti nazivayutsya ekvivalentnimi mutantami Rozpiznavannya ekvivalentnih mutantiv ye odnim z najbilshih pereshkod dlya vikoristannya mutacijnogo testuvannya na praktici Zusillya dlya perevirki togo chi ye mutant ekvivalentnim mozhut buti duzhe velikimi navit dlya nevelikih program Mutacijni operatoriBagato vidiv mutacijnih operatoriv buli doslidzheni Napriklad dlya imperativnih mov nastupni operatori mozhut buti vikoristanni Vidaliti operator programi Zaminiti kozhne logichne virazhennya na logichnu Konstanu istina abo falsh Zaminiti kozhnu arifmetichnu operaciyu na inshu Napriklad na abo Zaminiti kozhnu logichnu operaciyu na inshu Napriklad gt na gt abo lt Zaminiti kozhnu zminnu na inshu z tiyeyi zh oblasti vidimosti Obidvi zminni povinni mati odnakovi tipi Krim togo isnuyut operatori dlya ob yektno oriyentovanih mov operatori dlya paralelnogo programuvannya operatori dlya struktur danih takih yak kontejneri ta in PrimitkiA Practical System for Mutation Testing Help for the Common Programmer 14 lyutogo 2012 u Wayback Machine by A Jefferson Offutt PDF Arhiv originalu PDF za 28 veresnya 2011 Procitovano 20 travnya 2013 P G Frankl S N Weiss and C Hu All uses versus mutation testing An experimental comparison of effectiveness Journal of Systems and Software 38 235 253 1997 MuJava An Automated Class Mutation System 11 bereznya 2012 u Wayback Machine by Yu Seung Ma Jeff Offutt and Yong Rae Kwo Mutation Operators for Concurrent Java J2SE 5 0 5 lyutogo 2012 u Wayback Machine by Jeremy S Bradbury James R Cordy Juergen Dingel Mutation of Java Objects 12 travnya 2013 u Wayback Machine by Roger T Alexander James M Bieman Sudipto Ghosh Bixia Ji