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.

Wednesday, December 3, 2014

2014-11-15 - Global Day of Code Retreat

Global Day of Code Retreat to wyjątkowa inicjatywa, która raz do roku angażuje świat programistyczny na całym świecie. Idea, która powstała w 2009 w umyśle czterech programistów już w 2010 roku stała się globalna. Jeśli ktoś jest zainteresowany historią zapraszam tutaj.

Jug Łódź od 2010 roku jest jej częścią. Można nawet powiedzieć że ważną częścią ponieważ Code Retreat w 2011 roku było jednym z pięciu największych na świecie! Dodatkowo z naszej inicjatywy sponsorem w 2011r zostało Headway Software.

Historia GDCR w JUG Łódź wygląda następująco. 

Pierwszy Code Retreat odbył się w Mobice, przyszło około 12-15 osób. Najważniejszą rolę  -facilitatora czyli osoby wymyślającej podjął Piotr Przybylak (wtedy) z Pragmatists.
Rok później miał miejsce fantastyczny Code Retreat, o którym już wpomiałem na wstępie. Do Rule Financial przybyło 60 osób! Faciltatorami byli Paweł Włodarski, Michał Ostruszka i Marek Strejczek.
Można rzec, że Paweł wtedy rozpoczął swoją karierę etatowego facilatotora (czy jest na to jakieś polskie słowo?). 
W kolejnym roku do Pawła dołączyli Grzesiek Borkowski i Rafał Wokacz a wydarzenie zorganizowaliśmy przy udziale łódzkiego oddziału Cybercom Group.
W Cybercom oczekiwaliśmy 30 osób, niestety padliśmy ofiarą stałej Saramaka* i pojawiło się tylko 15 osób.
W tym roku też planowaliśmy 30 osób lecz kolejny raz z zapisanych 30 osób pojawiło się tylko 18 osób.

Jako JUG Łódź staramy się żeby nie kojarzono nas z jedną firmą dlatego też za każdym razem staramy się wybrać innego partnera do Global Code Retreat. W tym roku gospodarzem została firma Symphony Teleca.
Gospodarzem spotkania była Symphony Teleca
Zwyczajowo jest przygotowane śniadanie dla uczestników Code Retreat, którzy w sobotę rano . Kanapki były bardzo smaczne i było ich bardzo dużo (pewnie dlatego że spodziewaliśmy się 30 osób). 

Mnóstwo jedzenia!
Sala konferencyjna była super przygotowana przez sponsora. Była szatnia, aneks kuchenny oraz dużo miejsca.

Po krótkim wprowadzeniu do idei i ćwiczeń Code Retreat, które przeprowadzili Paweł Włodarski, Rafał Leanarczyk i Marek Defeciński, swój slot otrzymał gospodarz/sponsor spotkania czyli firma Symphony Teleca - zainteresowanych zawartością odsyłam do prezentacji.

Kolejnym świetnym zwyczajem Code Retreat jest rozmowa z innymi uczestnikami Code Retreat na świecie. Jest to super sprawa pozwalająca poczuć się częśćią Globalnej społeczności. W tym roku zaplanowane mieliśmy poranną sesję z Bangalore (u nich lunch), z Pragą (na lunch) i Austin na popołudnie (u nich na dzień dobry). Niestety żadna z tych sesji w tym roku się nie udała. Powodem było najprawdopodobniej to że sesje załatwialiśmy na ostatnią chwilę ani nie było wcześniejszej próby połączenia. Z doświadczenia organizacyjnego wiem, że zawsze czas wymyka się z kontroli a organizatorzy mają bardzo dużo na głowie oprócz tych rozmów tak więc ciężko jest doprowadzić do sukcesu tych połączeń.

Paweł Włodarski (JUG Łódź/TomTom) wraz z Jackiem Rondio (Symphony Teleca) pełnili w tym roku rolę facilitatorów. Oto sesje które przygotowali dla uczestników.
  • Sesja wstępna-dowolna
  • TDD i tylko jeden poziom zagłębienia kodu w metodach
  • Jeden poziom zagłębienia, metody maksymalnie 5 linii długości i brak else
  • Sesja "cicha" oraz do wyboru albo object-calisthenics lub not only OOP - wszyscy wybrali to pierwsze ;)
  • Zostawiamy kod z poprzedniej sesji i mamy dodatkowe wymagania
Formuła Code Retreat przewiduje 6 sesji jednak na naszych Code Retreat bardzo rzadko udaje się dopowadzić 6tą sesję do skutku (ludzie wychodzą, czas się kończy) dlatego w tym roku rozmyślnie planowaliśmy tych sesji tylko 5.

Moim zdaniem Code Retreat to wydarzenie, które największe wrażenie robi na uczestniczącym w nim po raz pierwszy. W tym roku z 18 uczestników tylko Sylwia była na Code Retrat po raz kolejny. Opinie jakie zebraliśmy po Code Retreat były na pewno budujące. Ankietę wypełniło 11 osób.

Wszyscy ankietowani odpowiedzieli, że było zdecydowanie warto przyjść

 Mimo kilku niedociągnięć organizacyjnych organizacja była oceniona dobrze.
Organizacja została dobrze oceniona!
Paweł Włodarski jest weteranem Code Retreat's nic dziwnego że zebrał świetne recenzje.
Paweł i Jacek świetnie ocenieni.
Zadaliśmy też inne pytania. Pod spodem najciekawsze odpowiedzi
  • Czego nauczyłeś się w sobotę?
    • Warto słuchac tego co mają inni do powiedzenia
    • ...ping pongiem angażowały się dzięki temu obie osoby
    • TDD też może być fajne
    • tworzenia unit testów
    • zdobyłem podstawową wiedzę na temat pisania testów jednostkowych
    • Nauczyłem się bardziej zwracać uwagę na czystość kodu oraz kilku trików, które tą czystość poprawiają
  • Co Cię najbardziej zaskoczyło?
    • Ze tylu ludziom chciało się wstać w sobotę przed 8 
    • Że było tak fajnie - wcześniej trochę się obawiałem, że będzie za trudno i sobie nie poradzę
    • metoda ping-pong jest bardzo owocna
    • że potrafię pracować w parze
    • organizatorzy z chęcią pomagali i nikt się nie wywyższał
    • największą radość sprawił mi pair programming
    • wyrzucanie kodu może pomagać w uczeniu się.
  • Co będziesz od tej pory robił inaczej w swojej pracy dzięki Code Retreat?
    • lepiej programował
    • zwracał większą uwagę na czystość kodu
    • Propagował TDD ping-pong
    • Test first przede wszystkim
    • przekonać chłopaków w firmie do pair programming
  • Co było fajne i co należy kontynuować?
    • luźna atmosfera bez naciskania na nikogo
    • idea spotkań
    • wspólne omawianie pracy
    • grupka ludzi, która chciała nauczyć się czegoś nowego
    • cenne uwagi
    • nowe podejścia do programowania
    • Retrospektywy
    • Sponsor postawil sie - bylo duzo i smacznie.
  • Co było słabe i co musimy poprawić?
    • żeby osoby bardziej zaawansowane nie poświęcały całej uwagi na pomaganie początkującym
    • timing! * zaczęlismy 9.30, zapowiadane 8.30
    • Ponownie 30% osób nie przyszlo a byli zapisani
    • 45 min to trochę za mało na napisanie znaczącej ilości kodu
    • następnym razem tak bardziej na 9:00.
Podsumowując wydaje mi się że był to znakomity Code Retreat. Wielkie podziękowania dla Pawła Włodarskiego, który był jak zwykle perfekcyjnie przygotowany. Podziękowania dla Rafała Lenarczyka, który prowadził event oraz dla Sponsora firmy Symphomy Teleca za naprawdę gościnne przyjęcie.

Code Retreat doczekał się nawet relacji prasowej w Gazecie Wyborczej pod tytułem Tak się bawią programiści oraz relacji na blogu Pawła Włodarskiego - Ludzka twarz IT.