W trzecim odcinku rozmawiam z Adamem Kosińskim – programistą, prelegentem, aktualnie kodzącym C# w Londynie.
Tematem przewodnim są testy jednostkowe – nasza wspólna pasja. Gadamy zarówno o najlepszych jak i najgorszych praktykach. Przestrzegamy też na to uważać podczas przygody z testowaniem. Zastanawiamy się również dlaczego czasami testy nie spełniają oczekiwań programistów i… i wiele więcej :).
Konkurs: dzisiaj rozdaję licencję na NCrunch. Jak miło! To niewiarygodne narzędzie otrzyma autor jednego z komentarzy pod niniejszym postem. Piszcie, piszcie, piszcie! Dzielcie się uwagami, opiniami. Co sądzicie o DevTalku i o tym odcinku? Co byście zmienili, a co się podoba? Nie trzeba napisać komentarza pozytywnego aby być wziętym pod uwagę podczas rozdania NCruncha :).
Uwaga: dzisiejszy odcinek powinien brzmieć lepiej niż poprzednie… bo już nie muszę robić wszystkiego sam! Zgłosił się do mnie Krzysiek Śmigiel wyciągając pomocną dłoń gotową zająć się obróbką “surowego” materiału audio. To zajmowało mi masę czasu, więc pomoc przyjąłem bez chwili wahania. Super, dzięki!
Logo: w poprzednim odcinku został ogłoszony konkurs na logo. Zwyciężył Rafał Sańda przysyłając projekt, który bardzo mi podpasował. Już teraz jest on wykorzystany na twitterze, fejsie, itunes itd. Wypas i awesome, dzięki!

Ważne adresy:
- zapisz się na newsletter
- zasubskrybuj w iTunes, Spotify lub przez RSS
- ściągnij odcinek w mp3
Muzyka wykorzystana w intro:
“Misuse” Kevin MacLeod (incompetech.com)
Licensed under Creative Commons: By Attribution 3.0
http://creativecommons.org/licenses/by/3.0/
03 – O testach z Adamem Kosińskim | DevTalk
Dziękujemy za dodanie artykułu – Trackback z dotnetomaniak.pl
Z odcinka na odcinek jest coraz fajniej :)
Jednak chciałbym się przyczepić do początku.
Osobiście nie jestem fanem zwrotu “Bądźcie devzdrowieni” :P
Później “Ogłoszenia drobne” wydają się być bardzo mechanicznie zaprezentowane. Czytałeś to z kartki? Postaraj się może przy tej części o więcej luzu tak jak podczas rozmowy.
Rozumiem, że początki są bardzo trudne i jestem pod ogromnym wrażeniem, że się tego podjąłeś. Z odcinka na odcinek jest coraz lepiej :)
Nareszcie powstał polski podcast, którego warto słuchać. Oby tak dalej.
Na a ja mam zagwozdkę, bo nie mogę z czystym sumieniem puścić tego na all@moja-firma.pl. Wchodząc w skórę juniora lub generalnie kogoś kto nigdy nie pisał testów, albo pisał, ale nie w cyklu TDD, to bym znalazł tu sporo argumentów, że nie warto się w to pchać. IMHO obietnica, którą składa TDD to nie “hype”. Jeśli coś nie idzie to jedyną odpowiedzią jest “try harder” – jakby to głupio nie zabrzmiało. Dla mnie 7 lat zabawy z testami to niesamowita przygoda okupiona momentami znacznymi spadkami samooceny, ale “expert beginnerem” już byłem i nie chcę tam wracać. Zabrakło mi pewnego uporządkowania… Read more »
Zgadzam się z @Kajetan, że z odcinka na odcinek jest coraz lepiej.
A mi tam odcinek się podobał:) Nigdy nie myślałem o testach jako o dokumentacji. Ale człowiek się całe życie uczy a i tak głupi umiera:)
Dzięki za super robotę jaką wykonujesz procent:)
Kajetan,
Dzięki :).
Nie czytam nic z kartki, po prostu mówienie czegoś “do mikrofonu”, bez nikogo słuchającego po drugiej stronie, jest strasznie trudne. Te części bez gościa nagrywam po kilkanaście razy i wiem, że brzmi to mega-nienaturalnie i drętwo, ale może się w końcu wyrobię. Nie mam pomysłu jak inaczej to poprawić poza ćwiczeniem.
Orientman,
Prawda, na pewno paru rzeczy zabrakło, ale właściwie DevTalk nigdy nie będzie “tutorialem” dla początkujących. Co prawda każdy odcinek planuję, próbując nadać mu jakąś strukturę, ale w trakcie po prostu rozmowa sama zmierza w różnych kierunkach. I z tego się akurat cieszę :).
Co do samego TDD i procesu nauki: w 100% się z Tobą zgadzam. Na początku TRZEBA robić tak jak ktoś KAŻE (ktoś: uncle bob właśnie) a dopiero potem konstruować własne praktyki.
Harry,
No to git, cieszę się :). Musi być coraz lepiej z każdym odcinkiem bo inaczej byłoby bez sensu.
Jak będziesz potrzebował do kogoś powiedzieć te rzeczy z ogłoszeniami to zadzwoń na Skype :).
Wyszło bardzo dobrze, ciekawe się słucha. Tematy jak do tej pory są spoko i tym razem udało się być ekspertem również :). Chcemy chleba i podcastów!
Teraz nie wiem co myśleć o UT i jak najlepiej podejść do tematu w moich projektach. Trzeba przemyśleć temat na spokojnie przy piwku :)
Teraz trochę wazeliny. Temat z UT to strzał w dychę. Osobiście od pewnego czasu dochodziłem do tych samych wniosków co Adam, co nie dawało mi spokoju czy idę w dobrym kierunku. Teraz wiem, że nie jestem osamotniony :)
Dobry podcast. Porcja materiału, która według mnie jest godna polecenia devom, managerom i firmom przygotowującym oferty praktyk letnich ;). Swoją drogą świetne anegdoty i przykłady “z życia” przedstawione w podcaście przez Was obu :).
Co do strony technicznej: Zgadzam się z poprzednikami – na początku trochę mechanicznie. Mimo wszystko ogromny szacun!
Updated :)
http://groopmark.com/link/details/181/devtalk—programistyczny-glos-w-twoim-domu
Super inicjatywa z tym podcastem. Z odcinka na odcinek coraz lepiej, do 2 i 3 odcinka poświęciłeś chyba więcej czasu na przygotowania, niż do 1-szego i to słychać. Moja sugestia odnośnie tego co można by zmienić na lepsze niestety nie będzie oryginalna. Część poświęcona ogłoszeniom to lekka masakra, jeśli chodzi o szybkość wypowiadania słów… chociaż obcokrajowiec posługujący się językiem polskim w stopniu ograniczonym byłby Ci na pewno wdzięczny za to tempo :D
Fajna inicjatywa :) Mam nadzieję, że starczy czasu i zapału i powstanie jeszcze sporo odcinków :)
@Tomek, @all,
Następnym razem chyba po prostu walnę browara przed nagrywaniem części niebędącej rozmową z gościem :)
dla mnie bomba. podoba mi sie przede wszystkim to, ze grupa docelowa tych audycji to jednak ci bardziej zaawansowani i mozna uzyskac informacj ktorych gdzie indziej w internetach brak. jedyna prosba: postarajcie sie uzywac wiecej polskiej nomenklatury
Jest jakiś powód, dla którego nie wrzucasz nagrań na YouTube?
Osobiście lubię słuchać nagrać/prezentacji w … pracy :) a czasami mam problem ze streamem. Przez co muszę wcześniej ściągnąć, a wygoda spada. Wiem, że jest sporo osób takich jak ja więc możesz tracić słuchaczy przez to.
Chyba nie będę oryginalny, ale:
Ogólnie patrząc, rzeczywiście widać postęp w jakości. Duży big up za to.
Natomiast rozbijając na ‘część organizacyjną’ i ‘rozmowę’, to ta druga wypada dużo lepiej.
Długo szukałem odpowiedniego słowa, ale wydaje mi się, że najlepiej napisać, że część ogłoszeń jest ‘przekombinowana’ ?
A rozmowy fajnie się słucha, całość jest dobrze poprowadzona, nie ma przestojów, tematy płynnie przechodzą. Dobra robota
Czekam na kolejny odcinek i kolejne postępy ;)
Rozmowa rozpoczęła się trochę kontrowersyjnym stwierdzeniem Adama, gdzie nie namawiał wszystkich do pisania testów jednotkowych za wszelką cenę, a jak już je pisać te testy, to nie koniecznie testować jak najmniejsze elementy kodu, a raczej większe części systemu. Maciej przytakiwałeś w wielu miejscach ale przy okazji dzielnie broniłeś swojego podejścia, w którym piszesz bardzo dużo testów. Ja w wypowiedzi Adama dostrzegłem analogię do swojej ostatniej sytuacji w pracy. Dopisywałem nową funkcjonalność do systemu kolejkującego połączenia w call center, podczas której testy jednostkowe bardzo ułatwiły mi pracę. Klient zamówił przydzielanie połączeń do konsultantów w taki sposób, aby osoby wdzwaniające się ponownie… Read more »
P.S. NCruncha, używałem do póki mi się okres darmowy nie skończył i używałbym dalej, bo to dobre narzędzie jest.
Podoba mi si cykl spotkań. Porównanie braku testów do auta bez hamulców dobrze działa na wyobraźnię.
Moje zastrzeżenia: powinniście bardziej uważać na język – mogą Was słuchać młodzi adepci programowania.
Czepiam się:
– słychać łączenie ścieżek
– ktoś brzęka i to przeszakadza (chyba Adam)
– brak linków do dyskusji “TDD is dead”
Plusy:
– nie czepiałbym się technicznych rzeczy, gdyby merytorycznie nie było superowo. Nie potrafię się do niczego w tym względzie przyczepić :)
– muzyka na końcu
Czacha dymi :D Przyjemnie się słucha. Mimo, że to 40 min, nie zauważyłem kiedy minęło i w międzyczasie prasowanie zrobione. Żona szczęśliwa ja też piękny przykład win-win ;) Wydaje mi się że w tle słyszałem jak ktoś bawi się monetami i dźwięki rozkładanych naczyń chyba talerzy. Proszę o potwierdzenie bo nie wiem czy muszę udać się do specjalisty. Odnośnie TDD. Wszystko jest trucizną decyduję tylko dawka. Co do samego DHH to gość jak dla mnie mówi w wielu miejscach z sensem np. RailsConf 2014 (https://www.youtube.com/watch?v=9LfmrkyP81M). Na koniec cytacik: ‘TDD is for scared people is for pussys’ Erik Meijer “One Hacker… Read more »
WHITEBEAR,
Nie bardzo łapię w czym jest problem, który rozwiązałby YouTube. Można ściągnąć mp3, można streamować bezpośrednio ze strony, można słuchać z aplikacji “podcastowych”. Czyli są 3 opcje, podczas gdy w youtube: tyko jedna.
W sprawach techniczno/organizacyjnych (hosting, player na stronie, generowanie feeda…) wzorowałem się trochę na Hanselminutes i DotNetRocks. Ich nie ma na YouTube, YouTube nie czyta feeda tylko trzeba by było ręcznie wgrywać tam każdy odcinek, no i… youtube jest to video, a nie audio :).
Olo,
Prawda, mi też ta analogia bardzo się podoba.
Co do języka – bez przesady, “dupa” czy coś na podobnym poziomie “wulgaryzmu” jeszcze z nikogo hultaja nie zrobiła. Nie ma i nie będzie rzucania mięsem, ale też nie chcę przeginać w drugą stronę, tym bardziej że na co dzień w wypowiedziach bliżej mi do rynsztoka niż do świątyni.
TEOVINCENT,
Też pisałem CallCenter, i to nawet 2x! :) Na FreeSWITCHu.
Za pierwszym razem testy mi głównie przeszkadzały. Za drugim już – odwrotnie.
Artur,
No to cool :). Łączenie ścieżek, jakieś brzęknięcia itd to kwestie czysto techniczne i moim zdaniem są do zaakceptowania. Nie nagrywamy albumu z piosenkami więc jakościowo (szczególnie od tego odcinka, kiedy nie ja już to montuję) jest i tak lepiej niż początkowo zakładałem.
Ja pociągnę to o czym napisał Artur – temat TDD is dead został potraktowany bardzo po macoszemu. Rozumiem, że brakowało czasu, ale poza tym że niewiele zdążyliście o tym powiedzieć, to nie wiem do kogo miał być skierowany ten fragment podcastu. Jeżeli do wyjadaczy, którzy kojarzą tekst i cała dyskusję, to za mało się w niego wgryźliście (co zrozumiałe bo było za mało czasu). Jeżeli do programistów początkujących i/lub tych których cała dyskusja ominęła to jest kilka błędów: – brak pełnego nazwiska osoby, która wysunęła tezę TDD is dead (jasne ja też nie powtórzę z pamięci, ale skoro Maćku masz… Read more »
Aha i popieram Olo: sam klnę (a da się programować bez tego? ;) ) a mimo to uważałbym z takimi stwierdzeniami jak “o kant d…. potłuc” itp. Niedawno się spotkałem z ciekawym stwierdzeniem o nadużywaniu “F Bombs” w książkach czy filmach: jeżeli ich się nie używa, to raczej nikogo ze słuchaczy / czytaczy / oglądaczy nie stracimy (no chyba że to film mafijny i spodziewamy się takiego języka, ale z drugiej strony w Braking Bad nie pada ani razu słowo na “F”). W drugą stronę – jak używa się takich zwrotów, prawdopodobnie kogoś to będzie raziło i nie wróci do… Read more »
Czytając te wszystkie komentarze, czuję się jak bym jadł “schabowy, ziemniaki i kapustę zasmarzaną” bez schabowego. W komentarzach oczekiwałbym mięsa, czyli więcej dzielenia się własnymi doświadczeniami i opiniami na temat testowania jednostkowego. Na tą chwilę, z komentarzy mogę się dużo dowiedzieć jak robić, lub jak nie robić podcasta, zamiast skonfrontować wypowiedzi z nagrania z opiniami innych devów. Dlaczego to porównałem do “chabowego, ziemniaków i kapusty zasmażanej”? Bo to jedno z najlepszych dań jakie kiedykolwiek jadłem i prawdopodobnie lepszego nie uda mi się zjeść (podobną opinię mam na temat tego devtalka). Ziemniakami są wszystkie wasze komentarze mówiące o tym, czy wam… Read more »
Sam pomysł na podcast jak i wykonanie zacne. Jak na razie merytorycznie najbardziej podobał mi się odcinek z Gutkiem, pozwolił on spojrzec z szerszej perspektywy na romans c# + js, liczę na kolejną część :). Zgadzam się z przedkomentatorami co do ogłoszeń, są strasznie sztywne, ewidentnie potrzeba Ci drugiej osoby do której byś kierował wypowiedź. Mam jeszcze propozycję, aby pod każdym podcastem umieszczać linki do wymienionych w trakcie rozmowy bibliotek, artykułów itd, żeby nie trzeba było po powrocie do domu szukac w podcascie miejsca gdzie były one podawane :) Np. wszystkie biblioteki z pierwszego odcinka lub wypowiedzi DHH nt TDD… Read more »
Trochę mało konkretniejszych rzeczy jak dla mnie. Zabrakło wzmianek o mock’ach, refactoringu, a czasami wręcz naprawy złego kodu właśnie dzięki TDD. Nikt nie wspomniał również o DI, które niekiedy jest wręcz koniecznością aby napisać test, co z kolei pozwala na nieco mniej “tightly coupled methods”. Wspomniany NCrunch (czy też Infinitest dla Javy) sprawiają wręcz, że część wspomnianych problemów odpada. Przede wszystkim dzięki widocznemu code coverage w czasie rzeczywistym, bardzo łatwo można rozbijać nazbyt duże metody na mniejsze i od razu widzieć czy coś się popsuło. Można wyciągać przetestowane już fragmenty z metod Wielokrotnie wykryłem błędy w tzw. legacy code, właśnie… Read more »
Dzięki za wszystkie komentarze, zarówno te “merytoryczne” jak i te odnoszące się do technikaliów podcasta. Oczywiście nie da się pogadać w “głębokim” stopniu i o roli testów, i o TDD (o tym mam zaplanowany osobny odcinek), i o BDD (o tym też), i o mockach (o tym też) i jeszcze o tym czy “tdd is dead” (o tym nie) w ciągu 30 minut. Raczej nie spodziewajcie się, że którykolwiek z odcinków DevTalka rozprawi się z jakimś tematem od początku do końca na takim poziomie jak robią to książki czy artykuły. To zawsze będzie trochę “ślizganie się po powierzchni”, przyjemna lekka… Read more »
Cześć wszystkim, z tej strony “ekspert” niniejszego odcinka. Ponieważ wiele osób tutaj poruszyło ciekawe kwestie, postaram się je skomentować po kolei i być może dolać trochę oliwy do ognia. Raczej nie będę dyskutował o sprawach technicznych nagrania, bo tu już chyba wszystko zostało powiedziane (i też zwyczajnie się nie znam :) Na początek kilka ogłoszeń ogólnych: – Kajam się za stukanie na nagraniu, to szklanka wody i pobliski stolik. Strasznie zasycha w gardle w trakcie rozmowy. Nie miałem pojęcia że aż tak się załapie. Przy następnej okazji założę tą śmieszną czapeczkę z piciem i słomką :) – Wszystkie opinie są… Read more »
@Marcin: Testy to baaaardzo szeroki temat, i te pół godziny pewnie nawet nie wystarczyłoby na wymienienie wszystkich terminów jakie wiążą się z testami. Mam nadzieję, że Maciek będzie sukcesywnie rozwijał temat. Super, że poruszyłeś wiele ciekawych punktów, na które nie miałem okazji ponarzekać z Maćkiem :) O ile w ogólności zgadzam się z wieloma Twoimi punktami, to nie do końca wiem czy mogę z takim entuzjazmem skakać w Dependency Injection. To potężna technika która jest łatwa do nadużycia, co w ekstremalnym powoduje dziesiątki (setki?) pozornie niezależnych klas. Mamy wtedy co prawda “loosely coupled”, ale za to tworzymy sieć “ukrytych” zależności… Read more »
@Teovincent
Boska analogia :) Aż się głodny zrobiłem. Zjadłbym sobie schabowego z ziemiaczkami …
@Marcin Krupiński
Świetne uwagi, ciężko jest dyskusję TDD-is-dead przedstawić tak, żeby zainteresowała zarówno
nowicjuszy jak i bardziej doświadczonych, a z racji tego że obaj z Maćkiem siedzimy w tym
głęboko, przeskoczyliśmy od razu do wniosków.
No i kajam się za brak profesjonalizmu. Przed nagraniem próbowałem się nauczyć nazwiska pana
Davida Heinemeiera Hanssona, ale jest to spore wyzwanie (spróbuj powiedzieć to szybko trzy razy
:).
Ale masz rację wyszło trochę po wiejsku.
@ Marcin Krupiński, Marcin Nowacki, TDD-Is-Dead
Co do samej dyskusji, DHH to mądry gość w sumie miał rację – z wyjątkiem tego fragmentu kiedy się mylił nazywając wszystkie złe rzeczy jako TDD. Wszystkie “Test induced damage” jakie opisał są powszechne, jeżeli podchodzi się do testów od strony praktyk zamiast od strony idei (principles).
Co zresztą jest prawdziwe w bardzo wielu różnych przypadkach (ktoś wspomni Agile? :)
Zauważyłem również ciekawą korelację, między takim takim rozumieniem TDD a ilustrowaniem go za pomocą Coding Kata – ale ten ciekawy temat zostawię na następną okazję.
@Teovincent o call center Również mam zbliżone doświadczenia, chociaż nie call center a system IVR – “Naciśnij 1 aby usłyszeń o naszych promocjach … ” itd. Wiele rzeczy udało nam się objąć testami “jednostkowymi”, bez potrzeby deploya i odpalania serwera. Było ciekawie, ponieważ każdy poziom menu był naturalnym kandydatem na “jednostkę” w naszych testach. Mogliśmy wziąć dany punkt systemu, symulować wciskanie klawiszy poprzez eventy w kodzie i weryfikować czy następny punkt na liście jest taki jak powinien. Taki mocking framework na VB.NET :) Mieliśmy również testy na już zdeployowanym systemie – wdzwaniał się na maszynę, po czym osobny proces sprawdzał… Read more »
@ Adam Kosiński
Dzięki za odp. Mam potwierdzenie, że podobne tematy, gdzieś tam ktoś, w podobny też sposób rozgryza.
Kiedyś wystawiłem na GitHub mały projekt z wyciągniętym “wzorcem” na jakim się opieramy przy budowaniu drzew IVR. Tutaj jest, kilka testów, które wnioskując po twojej wypowiedzi, koncepcyjnie są identyczne z Twoimi:
https://github.com/TeoVincent/Root-Nodes-Workflow-Pattern/blob/master/RootAndNodesPattern/RootAndNodesPattern.UnitTests/WorkflowTest.cs
Zgadzam się z Wami, że w wielu przypadkach nawet do legacy code warto dopisywać testy. Przykład z życia: W systemie miałem (napisaną przez kogoś innego) metodę która umożliwiała wyznaczenie ilości dostępnych usług dla klienta w zależności od daty startu jego uprawnień, rodzaju okresu (rok, kwartał, miesiąc), rodzaj limitu (czy traktować początek roku jako start, czy datę startu uprawnień) oraz ile już usług miał wykonanych. Dostałem do naprawienia błąd w tej metodzie bo źle był wyliczany numer kwartału i przez to określana ilość usług. W tym przypadku dużo prościej było napisać test który sprawdza przypadki wszystkich czterech kwartałów niż próbować na… Read more »
Jej! Widzę, że robi się coraz ciekawiej i bardzo się cieszę, że mogłem przyłożyć swoją małą cegiełkę do tak zacnego projektu.
This is crazy! ;)
Hej, Super podcast! Dużo ciekawych uwag/sugestii/przemyśleń. +1 za intro :) Nie mogę się doczekać co wymyślisz za tydzień :D Co do testów i TDD to ciekawi mnie czy zgadzacie się ze stwierdzeniem, że zanim zacznie się używać TDD, należy się dobrze nauczyć pisać testy. Tzn. zrobić kilka projektów, gdzie testy pisze się PO implementacji i kiedy już mamy wprawę to wtedy próbujemy TDD. Inaczej będzie frustracja i myśli typu, że to jest bez sensu. Co do kwestii technicznej to tak jak kilka osób wspomniało fajnie byłoby mieć linki do źródeł pod podcastem (tak jak Hanselminutes). Przydały by się też jakieś… Read more »
Uwaga uwaga, NCruncha otrzymuje TEOVINCENT!
Proszę o kontakt to pociągniemy temat dalej. Gratuluję i dzięki za tak obszerne komentarze!
Dziękuję zresztą wszystkim, mam nadzieję że gorące dyskuje będą się pojawiać pod wszystkimi postami, nie tylko wtedy kiedy będę oferował jakieś nagrody ;).
Co do linków do materiałów omawianych w poście: pod każdym odcinkiem je wrzucałem, tutaj po prostu nie mówiliśmy o żadnych konkretnych “rzeczach” które można podlinkować:). Oprócz dyskusji między DHH a resztą – faktycznie powiniem to wstawić.
Polecane przeze mnie materiały do nauki o testach można zobaczyć tutaj: http://www.maciejaniserowicz.com/2013/04/22/testy-jednostkowe-materialy-do-nauki/ .
Dzięki za wyróżnienie. Na pewno się nie zmarnuje ta licencja w moich rękach.
P.S. DavTalk ma to do siebie, że po wysłuchaniu nagrania, czuję się, że jest się zaproszony do włączenia się w rozmowę.
http://teo-vincent.blogspot.com/2014/12/ncrunch-mam-go-wygraem-w-konkursie-na.html