czwartek, 31 maja 2012

Testy jUnitowe sa do dupy

Mowilem ci juz o tym czy nie, ze testy jUnitowe sa do dupy? Nie ? No to sluchaj... tzn czytaj...Co to wogle sa te testy jUnitowe? WTF? Gdzies po drodze wsrod ton klepanego kodu, gdzies gdzie jedni chcieli cos usprawnic, drudzy tylko odbebnic, gdzie cialge brakowalo czasu zetknely sie dwa pojecia: test jednostkowe i jUnit. W wyniku tego zetkniecia powstalo nowe super cool pojecie "testy jUnitowe". I teraz nie wiedomo czy chodzi o testy jednostkowe, integracyjne, alibi, czy jeszcze jakies inne.Co to wogle znaczy, ze ktos pisze, ze mam w projekcie testy jUnitowe poza tym, ze pewnie uzywa biblioteki jUnit? Czy tak trudno uzywac pojecia "test jednostkowy", "unit test"?. Wiec co jakis czas trzeba odkurzyc ten temat co udalo mi sie zrobic.
W projekcie, w ktorym pracuje poprowadzilem prezentacje o testach jednostkowych i bibliotece mockito. Korzystajac z tego, ze Staszek blisko jest i dosc czesto mozna pogadac o sprawach waznych z punktu widzenia software developera przeprowadzilismy kilka deskusji o mockowaniu, testowaniu jednostek kodu (publicznego api klasy, pojedynczej metody) i izolacji obiektow na potrzeby tesotwania jednostkowego. Zebrane przemyslenia zostaly dopieszczonem, ubrane w prezentacje i przedstawione ludziom z projektu.
Przebieglo to mniej wiecej tak, ze przygotowalem prosty model w domenie samochodowej, ktora to domene kazdy w projekcie rozumie. Bez zadnych problemow podefiniodaem zaleznosci i prosta logike. Samochod ma silnik, rame, nadwozie, elektornike.
Pewne odpowiedzialnosci zakapsulkowane sa w danych jego elementach. Elementy te zaleza od siebie i wspolpracuja ze soba. 
Przedstawilem jak odizolowac obiekt samochod, ktory byl testowany - mockujac wspolpracujace z nim obiekty. Pokazalem jak to zrobic w sposob bez mockow (test setup sie mocno wydluzyl) i jak to samo zrobic z uzyciem mockito.
Wszystko bylo banalnie proste, zamokowalem doslownie dwie metody w klasie silnik - wspolpracujacej z klasa samochod. Hmm tak sobie teraz mysle, ze dobrze by bylo podpiac to pod githuba zebys mogl zobaczyc o czm dokladnie pisze... (TODO: podlinkowac repo z githuba). Ludzie patrzeli na pisany kod i mogli sami stwierdzic co jest przyjemniejsze i co im bardziej lezy. Pierwsze spostrzezenia jakie im przyszly pokazaly jak przez pisanie testow zmuszamy sie do tworzenia lepszego designu. A to ze statyczne pola jakos zmienne globalne sa slabe, baaardzo slabe (cokolwiek to znaczy), a to ze inicjalizowanie w obiektow zaleznych przez operator new w konstruktorze obiektu glownego jest tez slabe :) A ja tylko kiwalem glowa i sie usmiechalem.
Podparlem sie prezentacja Staszka i praktycznym jego podejsciem i opowiadzialem jeszcze o przewadze

assertEquals(expected, actual)


nad assertTrue(warunek)


jesli chodzi o ilosc informacji zwracanych jest przez jUnita w razie niespelnienia asercji.

o szablonie given-when-then
 

po to aby latwo mozna sie bylo polapac, ktory fragment metody testowej co robi.
Na koniec nasz projaktowy leader zachecil wszystkich do prezentowania tematow, ktore zycie w projekcie uczynic moga lzejszy. Ja mam juz kolejny temat jednak zanim go zapodam musze przygotowac grunt pod zmiany. O tym co to znacz bedzie w jednym z nastepnych postow.
Ty, drogi czytelniku tez pewnie masz cos do powiedzenia. Nie czekaj wciaz wciskajac sobie kit, ze jeszcze potrzebujesz tego i tamtego, ze sa lepsi co nic nie przedstawiaja i ze nie ma co wychodzic przed szerego bo jeszcze sie skompromitujesz. Daj spokuj, zmien nastawienie, zacznij sie dzielic tym co masz i nie obawiaj sie wzbudzac skrajnych emocji. Jedni beda cie kochac inni cie wysmieja, a ja chetnie sie dowiem co za temat zapodales i komu...

piątek, 25 maja 2012

Praktyki nie-studenckie w KEEP CODING

Nie obejdzie sie bez wyjasnienia, ze poleglem kolejny raz na metodzie "malej lyzeczki", czy jak kto woli "metodzie malych kroczkow". Regularnosc to cos co caly czas walczy we mnie z tym co nazywam spontanicznoscia choc jest to w duzej czesci mieszanka lenistwa i slabej woli. Post na blogu po miesiecznej przerwie jest tego dobrym przykladem szczegolnie, ze sie dzialo.

Oto przez dwa tygdnie mialem na praktyce ucznia technikum informatycznego, osobe z rodziny po stronie mojej zony, Adriana. Jako, ze ostatnio bywam duzo w Polsce zazachodniej polaczylem oferte praktycznej nauki zawodu z "wycieczka" krajoznawcza co sie dobrze sprawdzilo.

Najbardziej zalezalo mi na odkryciu prawdziwej pasji ucznia czyli tego co tak naprawde lubi robic oraz poszerzeniu jego horyzontu czyli pokazaniu co robic moze. Ostatecznie sie okazalo, ze jak na razie pracy z softem to nie lubi. O wile bardziej woli hardware i to w wersji hard -  szczegoly pomijam. I dobrze, karty zostaly odkryte i latwiej bylo reszte ustawic. 
Czy to co dzsiaj nie jest twoja pasja moze byc nia jutro? Znasz odpowiedz na to pytanie. Czy mozna robic cos bez pasji? - tu tez nie musze podpowiadac. Ostanio jeden ze znajomych opowiadzial mi o nowej osobie w swojej pracy (software) ktora to wybrala kierunek informatyczny studiow ze wzgledow ekonomicznych. Dzis nie ma problemu ze znalezieniem dobrej pracy i nie musi pracowac po pracy co pozwala jej na zajecie sie swoja prawdziwa pasja. Tak tez mozna :)
Kolejna istotna kwestia to swiadomosci, ze jesli koniec swiata nie nadejdzie po Euro 2012, a nawet w 2015 to trzeba bedzie na tym swiecie jakos zyc i cos robic. Ta wlasnie swiadomosc, moze zmotywowac do dzialania dzisiaj, do malych kroczkow lub jak to mowil jeden z moich wykladowcow, malej lyzeczki co jest jednym z wysoce skutecznych sposobow na dojscie do celu. O tak... cel... do niego mozna isc, mozna go miec lub tez nie, itp. Wiec ja jako starszy brat przedstawilem kilka celow, kilka gor, ktore czekaja na zdobycie. Piekna rzecza jest moc dzielic sie swoim doswiadczeniem i pomagac innym zdobywac gory, ktore przed nimi stoja. Dla mnie to byla podroz w przeszlosc, dla Adriana w przyszlosc, odbyla sie co ciekawe w terazniejszosci.

Wszystko przeplatany bylo roznymi zadaniami zwiazanymi z programowaniem od prostych stronek w html i javascripcie po gierki w JavaME. Zaliczylismy tez wyklad na JUGu o CauchDB, kilka wyjsc na bronka i jakis sport. Przy okazji wielkie podziekowania Marcinowi Stachniukowi za kursik JavaME, intro do yarba mate i cala pomoc w indoktrynacji praktykanta.

Tu bardzo spodobala mi sie propozycja przyuczenia do blogowania, twittowania, blipowania, itd jako sposobu dzielenia sie wiedza. Przy okazji nastepnych praktyk zastosuje ten pomysl.