prezentacja 31 lipca 2007 - testy jednostkowe - techniki i wyzwania

158 views
Skip to first unread message

Tomek Kaczanowski

unread,
Jul 19, 2007, 5:04:22 AM7/19/07
to Warszawa-JUG
Witam,

małe sprostowanie.

Następna prezentacja, którą będę prowadził, zajmie się nieco czym
innymi niż to zostało opisane http://groups.google.com/group/warszawa-jug
w sekcji "Nadchodzące spotkanie". Na stronę trafił niestety tekst w
którym pisałem Jackowi o spektrum tematów, jakie czuje się na siłach
zaprezentować. Mea culpa, już dawno miałem wysłać Jackowi prawdziwy
temat przygotowywanej prezentacji, ale dałem ciała i nie wysłałem.

Ponieważ (o ile mi wiadomo) będzie to pierwsza prezentacja na JUGu
poświęcona testom, zacznę od początku, więc powiedzmy że temat będzie
brzmiał
(FANFARY)
"Testy jednostkowe - techniki i wyzwania".
(FANFARY, które jednak nie są w tanie zagłuszyć oklasków, szaleństwa
na widowni itd.)

W tej chwili jestem w trakcie pisania dłuuuuuuugaśnego maila, w którym
postaram się opisać pewne bardzo podstawowe zagadnienia (lub podać
linki do nich) tak żebyśmy podczas spotkania nie tracili czasu na
znane większości sprawy. Mail niebawem trafi na grupę.

W samej prezentacji postaram się pokazać realne problemy (a
rozwiązania ? hhmmmm.. być może też) związane z pisaniem testów
jednostkowych.
Wciąż pracuje nad tym, które z tematów umieścić w prezentacji a które
podesłać do samodzielnego poznawania (lub może przenieść do kolejnej
prezentacji o ile takowa się wydarzy) - szczegółowa tematyka w
obiecanym dłuuuuuugaśnym mailu.

Jedno jest pewne - będzie ciekawie i merytorycznie. Serdecznie
zapraszam wszystkich na 31 lipca - jest jeszcze jest czas by odwołać
planowane na ten termin wojaże ;)

pozdrawiam
Tomek Kaczanowski

Michał (migi) Grzejszczak

unread,
Jul 19, 2007, 5:57:37 AM7/19/07
to Warszawa-JUG

> W tej chwili jestem w trakcie pisania dłuuuuuuugaśnego maila, w którym
> postaram się opisać pewne bardzo podstawowe zagadnienia (lub podać
> linki do nich) tak żebyśmy podczas spotkania nie tracili czasu na
> znane większości sprawy. Mail niebawem trafi na grupę.
>
> W samej prezentacji postaram się pokazać realne problemy (a
> rozwiązania ? hhmmmm.. być może też) związane z pisaniem testów
> jednostkowych.
> Wciąż pracuje nad tym, które z tematów umieścić w prezentacji a które
> podesłać do samodzielnego poznawania (lub może przenieść do kolejnej
> prezentacji o ile takowa się wydarzy) - szczegółowa tematyka w
> obiecanym dłuuuuuugaśnym mailu.
>

No to czekam na tego maila, bo chętnie bym dorzucił do tej prezentacji
swoje 3 grosze. Przyznam, że testów modułowych (jednostkowych) pisać
nie umiem, ale wtrąciłbym coś o testach (prawie)integracyjnych i np.
ich wsparcia w Maven 2 (to dla tych co chcą szczegółów). Bardzo
chętnie podyskutuję o tematyce, nawet jeśli okaże się, że na testy
integracyjne zabraknie czasu. Mogę coś pociągnąć o testach modułowych,
zrobić jakiś przykład itp.
Założę się, że większość osób z "doświadczeniem" mogłaby sporo na
temat testów powiedzieć. Zobaczymy kto z nich się ujawni.

Michał (migi) Grzejszczak

unread,
Jul 20, 2007, 7:07:41 AM7/20/07
to Warszawa-JUG

On 19 Lip, 11:57, "Michał (migi) Grzejszczak"

Właśnie się zorientowałem, że sens mojego posta może być niejasny :-\.
Otóż oferuję pomoc przy przygotowaniu wystąpienia prelegentowi :-) (i
sugeruję, że inni też mogliby).

Tomek Kaczanowski

unread,
Jul 20, 2007, 7:24:47 AM7/20/07
to Warszawa-JUG
> Otóż oferuję pomoc przy przygotowaniu wystąpienia prelegentowi :-) (i
> sugeruję, że inni też mogliby).
Michale,

ja doskonale zrozumiałem i jestem naprawdę wdzięczny.

Bardzo dziękuję za oferte wsparcia, ale chyba nie będę go potrzebował.
Jedynym problemem jaki mam przy przygotowaniu tej prezentacji jest
kwestia "jak skonstruować czasopodwajacz" który pozwoliłby mi
powiedzieć wszystko co IMHO jest godne powiedzenia. :) Póki co ze
smutkiem patrzę na rosnąca liczbę tematów których nie zdąże poruszyć i
z pewnością nie ma szans by omówić proponowane przez Ciebie
zagadnienia - daleko wykraczają one bowiem poza zaplanowaną tematykę
spotkania.

Wydaje mi się, że nie jest to problem, jako że zagadnienie testowania
jest tak obszerne (i ważne !) że spodziewam się kolejnych (i to kilku)
JUGowych prezentacji na ten temat. Z pewnością będzie więc czas by
omówić to, to, to i jeszcze to. Przygotowywana przeze mnie prezentacja
jest jak sądzę tylko pierwszą w kolejności poświęconą tematyce testów
- i zamierzam ją poświęcić w całości testom jednostkowym, jako że
stanowią one podstawę wszystkiego innego.

Bardzo proszę wstrzymać się z dyskusją na ten temat rzeczy, które tu
popisałem do czasu aż wyślę obiecanego maila. Co kiedyś nastąpi, sądzę
nawet że grubo przed 31 lipca. :)

pozdrawiam wszystkich
Tomek Kaczanowski

Michał (migi) Grzejszczak

unread,
Jul 20, 2007, 12:22:58 PM7/20/07
to Warszawa-JUG
> Bardzo proszę wstrzymać się z dyskusją na ten temat rzeczy, które tu
> popisałem do czasu aż wyślę obiecanego maila. Co kiedyś nastąpi, sądzę
> nawet że grubo przed 31 lipca. :)

OK.

Tomek Kaczanowski

unread,
Jul 23, 2007, 5:54:35 PM7/23/07
to Warszawa-JUG
Witam,

bardzo proszę o przeczytanie całego maila nawet mimo jego
przerażającej
długości. :)

Chciałbym żebyśmy podczas prezentacji nie tracili czasu na zbędne
rzeczy, które każdy sam może z łatwością przeczytać i zrozumieć, tylko
skupili się na wspólnym poznawaniu różnych technik związanych z
testami
jednostkowymi i zastanawianiu się jak one się mają do realnych
kawałków
kodu. W związku z powyższym mam prośbę do wszystkich osób, które mają
zamiar pojawić się na kolejnym spotkaniu, o zapoznanie się z pewnymi
podstawowymi informacjami (lub odświeżeniu ich, bo zakładam że wiele z
tych rzeczy nie będzie dla was niczym nowym).


----------------
PLAN PREZENTACJI
----------------
Temat: Testy jednostkowe - techniki i wyzwania
- niezbędna teoria
- frameworki (krótko !)
- test-first
- obiekty współpracujące (dummy, stuby, mocki)
- kod trudno testowalny
- code coverage
- granice użyteczności testów jednostkowych

NIE BĘDZIE czasu na nic więcej. Będę zdziwiony jeżeli uda mi się ten
temat zamknąc w 1,5 h (to w dużej mierze zależy od tego czy wywiąże
się
w trakcie prezentacji dyskusja).


-----------------
OBIECANKI CACANKI
-----------------
Nie pracuje w marketingu i nie zamierzam walić ściemy pt. "moja
technologia jest najmojsza, a reszta to bzdety". Uczciwie opowiem, o
tym
co jest w testach jednostkowych super a co jest be, co się sprawdza a
co
jest stratą czasu. W szczególności wskaże granice przydatności testów
jednostkowych i obszary, w których ich zastosowanie przynosi
więcej kłopotu niż pożytku - to chyba dobry moment by moja
prezentacja
się zakończyła i by kolejni "prezenterzy" pociągneli temat dalej w
kierunku testów integracyjnych itp. Sądząc po odzewie na ostatni mój
mail, są wśród nas osoby dysponujące odpowiednią wiedzą i zapałem.


-----------------
TESTY JEDNOSTKOWE
-----------------
Chciałbym uniknąć dyskusji terminologicznej na temat tego
czym jest test jednostkowy a czym nie jest. W największym skrócie
przypomnę tutaj że:
- test jednostkowy służy przetestowaniu MAŁEJ jednostki
oprogramowania
(najczęściej klasa, w ostateczności kilka ściśle współpracujących ze
sobą klas)
- test jednostkowy NIE DOTYKA bazy danych, kontekstu aplikacji,
serwerów
ani nic równie wielkiego
Osoby mające co do tego wątpliwości proszę o skonfrontowanie ich z
dość
wiarygodnymi jak sądze źródłami, np:
http://en.wikipedia.org/wiki/Unit_testing (przynajmniej pierwsze 5
zdań). Proszę też zajrzeć do dowolnej książki z półki agile/XP (to w
końcu oni stworzyli i rozwinęli te pojęcia, jest więc szansa że wiedzą
o
czym mówią). Można też sięgnąć np. tu po niezły opis różnic między
testami
jednostkowymi a innymi: Evil Unit Tests
http://www.javaranch.com/journal/200603/Journal200603.jsp

Osoby bardzo oburzone na mnie z powyższego powodu uprzejmie proszę o
nie
oburzanie się na mnie z powyższego powodu - to naprawdę nie moja wina
że
tak jest !

Niestety, trzeba przyznać, że w sieci znajdziecie wiele miejsc gdzie
testem jednostkowym nazywa się wszystko co da się odpalić z jUnita.
Jest
to równie niemądre jak określanie każdego programu napisanego w Javie
mianem "obiektowego" (pamiętasz swój pierwszy program w Javie ?). Z
pewnością nie każdy program na to zasługuje; analogicznie nie każdy
test
zasługuje na miano jednostkowego.
Tak sobie myśle, że osobom mieniącym się miłośnikami Javy (w końcu
przynależność do JUGu o czymś chyba świadczy) po prostu nie wypada
wypowiadać się nieprecyzyjnie w tak prostej sprawie. IMHO nie ma
powodu
byśmy "równali w dół" i zgadzali się na językowe niechlujstwo tylko
dlatego, że inni tak robią. Szlachectwo zobowiązuje, czyż nie ?

Jak dla mnie EOT, więcej spierać się o to nie będę, bo i nie ma o co.

BTW polecam angielską wikipedię jako źródło wiedzy o rodzajach
testów itp. Upewnij się że masz przed sobą kilka godzin wolnego czasu
a
potem rozpocznij lekturę od tego adresu
http://en.wikipedia.org/wiki/Software_testing


--------------------------------
FRAMEWORKI - TestNG vs jUnit itp
--------------------------------
Minimum to wiedzieć jak wygląda test jednostkowy w jUnit (w wersji
3.8) -
przykładów w sieci mnóstwo, np.
http://quilt.sourceforge.net/tutorials/junit.html
Najlepiej napisz jakiś najprostszy jeżeli jeszcze tego nie robiłeś.

Temat porównania TestNG vs. jUnit zamierzam skrócić do minimum, bo
szkoda naszego czasu. Serio. Zainteresowanych porównaniem odsyłam do
licznych materiałów w sieci, np.:
https://glassfish.dev.java.net/quality/testing-junit-testng.pdf
http://www.jdd.proidea.org.pl/presentation/TestNG.pdf
http://www.xebiaindia.com/dms/whitepapers/JUnit-4-0-and-TestNG-Testing-
Frameworks/JUnit%204.0%20and%20TestNG%20Testing%20Frameworks.pdf

W czasie prezentacji być możę przyda się wiedza na temat dostępnej w
TestNG
adnotacji @DataProvider, proszę zerknąć do dokumentacji na stronie
TestNG:
http://testng.org/doc/documentation-main.html#parameters-dataproviders


-----------
REFAKTORING
-----------
Na potrzeby prezentacji wystarczy wiedzieć o refactoringu tyle:
"A code refactoring is any change to a computer program which
improves
its readability or simplifies its structure without changing its
results."
zainteresowani, więcej znajdą np. tu http://en.wikipedia.org/wiki/Refactoring.


-----------
OBIEKTOWOŚĆ
-----------
Kod proceduralny jest trudno testowalny (część prezentacji poświecona
będzie problemom z testowaniem kodu naklepanego na modłę
proceduralną).
Dlatego też prosiłbym wszystkich o przypomnienie sobie bardzo
podstawowych idei programowania obiektowego.

Koniecznie proszę o zapoznanie się z tekstem "Tell, Don't Ask" który
znajduje się tu:
http://www.pragmaticprogrammer.com/ppllc/papers/1998_05.html
Podobnie dobry tekst o omawianym tam Law of Demeter znajdziecie też
tutaj: http://en.wikipedia.org/wiki/Law_Of_Demeter
Nie zaszkodzi też http://en.wikipedia.org/wiki/Information_hiding

W ramach ogólnego rozwoju, tudzież powrotu do obiektowych źródeł,
polecam wycieczkę na
http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html
. Radykalna, acz pobudzająca do myślenia odtrutka na
javabeansowo-hibernetowe widzenie klasy jako pojemnika na dane, który,
niczym
tancerka go-go, chętnie prezentuje swoje wdzięki wszystkim
zainteresowanym. ;)


------------
PODEŚLIJ KOD
------------
Masz jakiś fragment kodu do którego trudno napisać testy jednostkowe ?
Podeślij mi go, chętnie zerknę, może będę mógł:
a) rozwiązać Twój problem
b) użyć to w części prezentacji poświeconej kłopotom z testami


--------------
ZADANIE DOMOWE
--------------
Żeby nie było że tylko ja sie pocę i trudzę nad tą prezentacją. :)

W czasie prezentacji postaram się coś pokodować cobyś Drogi Uczestniku
nie
umarł z nudów. Wykonaj dwa proste zadanka, żeby "być w temacie", co
zaoszczędzi
mi długiego gadania podczas prezentacji.

1. Cache
a) Czym jest cache ? Zastanów się proszę nad bardzo ogólną
"definicją", chodzi mi o dwa zdania opisujące co cache robi i po co
to
robi. Dwa zdania max - żadnych szczegółów !
b) Spróbuj zaimplementować prostego cache. Chodzi mi o możliwie PROSTĄ
wersję.

2. Pager
Przeglądając www widziałeś pewnie kiedyś listę czegoś co nie mieściło
się na jednym ekranie, tylko na wielu, widziałeś, nie ? No właśnie,
to
tam na dole zazwyczaj jest taka nawigacja. Otóż to. Pager to mała
klasa
której zadaniem jest udostępnieniem wszystkich informacji potrzebnych
do
stworzenia takiej właśnie nawigacji
< 1 / 4 >
< 2 / 4 >
< 3 / 4 >
< 4 / 4 >
czyli ogólnie
linkDoPoprzedniejStrony nbBiezacejStrony / liczbaStron
linkDoNastepnejStrony
Pager-a karmimy podstawowymi informacjami (nie wiem jak tu załączyć
rysunek
- wrzuciłem go na http://kaczanowscy.pl/tomek/files/pager_schemat.png):
- offset - czyli gdzie jesteśmy,
- perPage - czyli ile elementów wyświetlamy na każdej stronie,
- total -czyli ile jest wszystkich elementów,
a on odwdzięcza się nam odpowiadając na wszystkie pytania potrzebne
do
wypisania takiego czegoś jak powyżej. Oczywiście Pager nie wie nic o
żadnych widokach, htmlu, requescie ani bazie danych. Dostaje kilka
liczb i na
tej podstawie odpowiada na różne pytania.
Zaimplementuj coś takiego.


gratuluję że dotrwałeś aż do końca
Tomek Kaczanowski

Jacek Laskowski

unread,
Jul 23, 2007, 6:12:03 PM7/23/07
to warsza...@googlegroups.com
On 7/23/07, Tomek Kaczanowski <tkac...@poczta.onet.pl> wrote:

> gratuluję że dotrwałeś aż do końca

Dotrwałem i...zdziwiłem się, że już koniec. Fajnie się czytało, a i z
pewnością fajna będzie prezentacja (a może powinienem napisać
pogawędka, albo jeszcze inaczej). Tak czy owak, zapowiada się fajnie,
a mnie NIE będzie. Jestem od 30.07 na urlopie i przez nadchodzące 2
tygodnie nie będę w sieci. No cóż, nie wszystko, co fajne jest mi
dane.

Sala jest zamówiona. Pozostaje jedynie odebrać klucz i gadżety do
rzutnika (pilot i kabel). Będą czekały na portierni na dole na
nazwisko prowadzącego. Osoba odpowiedzialna za salę to właśnie
prowadzący.

Jacek

--
Jacek Laskowski
http://www.JacekLaskowski.pl

Sebastian Pietrowski

unread,
Jul 24, 2007, 4:50:31 AM7/24/07
to warsza...@googlegroups.com

Świetnie, nie mogę się doczekać Prezentacji

Pozdr
Pedro

Marcin 'frodo2000' Molak

unread,
Jul 25, 2007, 3:25:55 AM7/25/07
to Warszawa-JUG
On 23 Lip, 23:54, Tomek Kaczanowski <tkacz...@poczta.onet.pl> wrote:
> gratuluję że dotrwałeś aż do końca

Muszę przyznać, że miło się to czytało. Rozbudziłeś tym mailem
poczucie niedosytu i zaciekawienia. Mam nadzieję, że wreszcie uda mi
się pojawić na JUGu, bo w testach jednostkowych jestem zupełnym
laikiem (pojedyncze klasy testowałem jedynie własnym kodem i nigdy nie
dotknąłem jUnit czy TestNG).
A tym wstępem postawiłeś poprzeczkę wysoko (sobie na prezentacji i
ogólnie następnym prowadzącym).

Marcin

Jacek Laskowski

unread,
Jul 25, 2007, 5:10:56 AM7/25/07
to warsza...@googlegroups.com
On 7/25/07, Marcin 'frodo2000' Molak <frod...@gmail.com> wrote:

> Muszę przyznać, że miło się to czytało. Rozbudziłeś tym mailem
> poczucie niedosytu i zaciekawienia. Mam nadzieję, że wreszcie uda mi
> się pojawić na JUGu, bo w testach jednostkowych jestem zupełnym
> laikiem (pojedyncze klasy testowałem jedynie własnym kodem i nigdy nie
> dotknąłem jUnit czy TestNG).
> A tym wstępem postawiłeś poprzeczkę wysoko (sobie na prezentacji i
> ogólnie następnym prowadzącym).

Tak. Ja również uważam, że Tomek podniósł poprzeczkę bardzo wysoko i
nieliczne prezentacje, na których bywałem byłyby w stanie konkurować z
tą, w której będziecie mogli uczestniczyć. I właśnie dlatego wciąż
zastanawiam się, kiedy rozpocząć moje urlopowanie ;-)

Tomek Kaczanowski

unread,
Jul 25, 2007, 5:46:59 AM7/25/07
to Warszawa-JUG
> nieliczne prezentacje, na których bywałem byłyby w stanie konkurować z
> tą, w której będziecie mogli uczestniczyć.
?! eee, no nie, nie, tak nie wolno, nie chwalmy dnia przed zachodem
słońca, błagam ! Mam poczucie że przyjdziecie z tak rozbudzonymi
oczekiwaniami że jakbym się nie starał to będzie to rozczarowanie.

Tymczasem wszystko o czym będę mówił będzie bardzo proste. Bo testy
jednostkowe takie właśnie są.

pozdrawiam
Tomek Kaczanowski

Jacek Laskowski

unread,
Jul 25, 2007, 9:53:50 AM7/25/07
to warsza...@googlegroups.com
On 7/25/07, Tomek Kaczanowski <tkac...@poczta.onet.pl> wrote:

> ?! eee, no nie, nie, tak nie wolno, nie chwalmy dnia przed zachodem
> słońca, błagam ! Mam poczucie że przyjdziecie z tak rozbudzonymi
> oczekiwaniami że jakbym się nie starał to będzie to rozczarowanie.
>
> Tymczasem wszystko o czym będę mówił będzie bardzo proste. Bo testy
> jednostkowe takie właśnie są.

I właśnie o tym pisałem - będzie prosto, a właśnie w prostocie znaleźć
można najwięcej zalet, które wspólnie właśnie wychwalamy.

Może udałoby się komuś zorganizować kamerę? Chętnie pooglądałbym tą
"prostotę" i podszkolił swój "wyrafinowany" warsztat prezenterski ;-)

Jacke

Michał (migi) Grzejszczak

unread,
Aug 1, 2007, 7:31:19 AM8/1/07
to Warszawa-JUG
Muszę przyznać, że prezentacja była bardzo fachowa i bardzo mi się
podobała. Właściwie to już "zadana" lektura pozwoliła mi zrozumieć
istotę testów jednostkowych ale prezentacja jeszcze, moje rozumienie,
pogłębiła.
Przynajmniej od roku używam w testach EasyMocks i jakoś zawsze
wpadałem w problem z testowaniem kodu proceduralnego. Dochodziło do
tego, że do przetestowania jednej metody potrzebowałem kilkadziesiąt
linii kodu na sklecenie mocków. Jakoś wcześniej nie znalazłem w sieci
wyjaśnienia, dlaczego tak się dzieje i myślałem, że to taki urok
EasyMocka, a tu niespodzianka. Jeśli stosuje się regułę Demeter to
mocki robią się bardzo wygodne.

Myślę, że to pokazuje jak przydatne są nasze spotkania. Nie ma cudów i
nikt nie będzie w stanie zgłębić samodzielnie wszystkich technologii,
ale w ramach Warszawa-JUG można poznać doświadczenia i przemyślenia
innych. Oby tak dalej [zaciera ręce] :)

Tomek Kaczanowski

unread,
Aug 1, 2007, 4:23:49 PM8/1/07
to Warszawa-JUG
Witam,

slajd z wczorajszej prezentacji do ściągnięcia:
OpenOffice: http://kaczanowscy.pl/tomek/files/testy_jednostkowe_warszawa_jug_lipiec_2007.odp
PDF: http://kaczanowscy.pl/tomek/files/testy_jednostkowe_warszawa_jug_lipiec_2007.pdf
- niestety, wersja w pdf bez wypasionych animacji ;)
Kod dorzucę niebawem.

Będę bardzo wdzięczny za wszelkie uwagi na temat wczorajszego
spotkania. Już wiem na przykład że chowanie się pod stół w celu
podniesienia butelki z wodą jest nieprofesjonalne. :) Żarty żartami,
ale jest na pewno wiele rzeczy (merytorycznych), których stojąc na
katedrze się nie widzi, a z sali są oczywiste lub co gorsza rażące. Za
szybko za wolno za mało za łatwo zbyt pobieżnie zbyt dokładnie ?
Chętnie się dowiem.

Michale, dzięki za wypowiedź, cieszę się że mogłem co nieco pomóc w
kwesti mockowania zagmatwanych klas.

pozdrawiam
Tomek Kaczanowski

Tomek Kaczanowski

unread,
Aug 6, 2007, 5:04:26 PM8/6/07
to Warszawa-JUG
> Kod dorzucę niebawem.
No i dorzuciłem
http://kaczanowscy.pl/tomek/files/jug_unit_tests.zip
Zwykły projekt mavenowy, jest tam pom generujący raport cobertury (mvn
clean site).

pozdrawiam
Tomek Kaczanowski

Michal Margiel

unread,
Aug 9, 2007, 6:48:33 AM8/9/07
to warsza...@googlegroups.com

Cześć!!

Jak dla mnie to miniona prezentacja była jedną z najlepszych w historii JUG. Bardzo fajnie i profesjonalnie przygotowana. Szkoda tylko że tak po łebkach przeleciałes po całych mockach (implementacje a nie idee). Wiem, że to nie był temat prezentacji. Ale z jej przebiegu widać było że stanowią integralną częśc testów jednostkowych.

Cała reszta mi sie bardzo podobała. Krótko mówiąc - nadajesz się do tego ;) Musze powiedzieć, że teraz bardzo bym chciał posłuchać prezentacji o testach integracyjnych. Jacyś chętni? ;)



--
Pozdrawiam
Michał Margiel
Reply all
Reply to author
Forward
0 new messages