Friday, December 5, 2014

2014-11-25 - Testowanie mutacyjne, czyli jak dobre w rzeczywistosci sa Twoje testy


 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 ecosystem
    Pit 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 petle
      PIT 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.
  • Konfigurowalny
    Możliwa jest konfiguracja pakietow, które przeznaczone sa do mutacji
    PIT nie mutuje loggerow
  • rozwijany
    Dzieki szerokiemu community PIT jest zywym frameworkiem

Wady:

  • wymaga testow
  • glownie do testow unitowych
    Pit 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.

No comments:

Post a Comment