Sprawdzanie standardowego pokrycia kodu
przez testy daje nam informacje, czy przez linie lub rozgalęzienie
przeszedl jakiś test. Testowanie mutacyjne idzie o krok dalej I
weryfikuje poprzez zmianę (modyfikację lub usunięcie danej lini),
czy kod w niej zawarty był w rzeczywistości istotny dla którego
kolwiek testu.
Metoda ta jest znana od ponad 30 lat w
kręgach naukowych, a ostatnio odkryta na nowo dla rozwiązań
komercyjnych. Pozwala dowiedzieć się jak dobre w rzecywistości są
nasze testy oraz które fragmenty kodu tak naprawdę wydają się być
testowane, co bardzo przydaje się szczególnie w rozwiązaniach dla
których poprawność działania aplikacji jest kluczowym wymaganiem.
Na czym wogole polega testowanie mutacyjne?
Narzedzie do testowania mutacyjnego na
poziomie byte code modyfikuje line kodu produkcyjnego, np.: usuwa
linie, modyfikuje wyrażenia warunkowe zamienia > z < lub == z
!=, modyfikuje wyrażenia reguralne, zamienia inkrementacje z
dekrementacją i++ z i--, zwraca null objects, ustawia warunki
brzegowe itd. Nastepnie wykonuje testy na zmodyfikowanym kodzie I
generuje raport z rezultatami
Jednym z narzedzi, ktory testuje
mutacyjnie jest PIT – projekt opensource, ktorego commiterem jest
rownież Marcin. Projekt ten, można znależć na GIT_HUB.
Zalety:
- rozwiniety ecosystemPit jest wspierany oraz wykorzystuje najbardziej popularne narzedzia.
Bild systemy:
- ant
- mvn
- gradle
IDE:
- intelij
- eclipse
Biblioteki do testowania:
- jUnit
- TestNG
- spock
Pokrycie kodu:
- sonar
- sbt
- szybki
- wykorzystuje historie mutacji - PIT nie testuje ponownie mutacji ktore zakonczyly sie sukcesem, uruchamia tylko te zakonczone blede
- zatrzymuje nieskocznone petlePIT moze wykonac zamiane incrementacji w dekrementacje lub odwrotnie. Zmiana taka, moze zapetlic kod produkcyjny. PIT podczas podczas pierwszego uruchomienia, sprawdza czasy wykonania testow, nastepnie dokonuje mutacji. Jezeli podczas nastepnej iteracji test trwa dluzej niż w orginale PIT zakoncza wykonanie takiego testu.
- KonfigurowalnyMożliwa jest konfiguracja pakietow, które przeznaczone sa do mutacjiPIT nie mutuje loggerow
- rozwijanyDzieki szerokiemu community PIT jest zywym frameworkiem
Wady:
- wymaga testow
- glownie do testow unitowychPit wykonuje kilka iteracji, dlatego tez wykonanie mutowania dlugich testow integracyjnych moze zabrac duzo czasu.
Podsumowanie
Prezentacje poprowadzil Marcin Zajaczkowski, ktory przy okazji prowadzenia szkolenia w Transition Technology zaproponowal wystapienie dla lodzkiego JUG.
Wykonujac demo Marcin promowal skróty
klawiszowe Intelij, zachecal do korzystania ze Spock, TDD.
Spotkanie odbylo sie w 6 dzielnicy, dzieki temu uczestnicy mogli skorzystac z baru, usiasc w
wygodnych fotelach i posluchac w luzniejszej atmosferze o testach mutacyjnych.
Podczas spotkania zostala wylosowana
licencja za zakup ksiazki z Manning.