Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. allegro.tech
40 milionów wyszukiwań dziennie, setki tysięcy uaktualizacji indeksu czyni z Allegro.pl drugą co do wielkości wyszukiwarkę w Polsce. Nie wszyscy wiedzą, że główną wyszukiwarkę ofertową w Allegro.pl napędza Apache SOLR. Opowiemy o naszych doświadczeniach z optymalizacją zapytań do SOLRa, o tym jak udało nam się znacznie zmniejszyć czasy odpowiedzi i zwiększyć stabilność działania naszego searcha. W czasie prezentacji poruszymy kwestie związane z tworzeniem schematu, wykorzystaniem odpowiednich typów danych, wykorzystania cachea, efektywnego filtrowania i innych optymalizacji, które udało nam się wdrożyć z sukcesem.
Wygłoszono w trakcie czwartej edycji Allegro Tech Talks w Poznaniu.
Adam Dudczak - Starszy programista w Grupie Allegro, pracuje z Javą i technologiami powiązanymi od 2004 roku. Na codzień pracuje nad wyszukiwarką allegro.pl. Jeden z liderów Poznań JUG (http://www.jug.poznan.pl) i współorganizator konferencji GeeCON (http://geecon.org).
Przemysław Szeremiota - Starszy programista w Grupie Allegro od 2008. Zaczynał pracę w zespole wydajności programując w C/C++, przeżył fascynację Javascriptem i zaznał Javy, obecnie doskonale czuje się pływając w mieszance Basha i JQ. W wolnych chwilach przetłumaczył ponad 70 książek technicznych.
Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza SzymonSadlo
Wydajność aplikacji to trudny temat, często specyficzny dla danej aplikacji, a optymalizacja czasami postrzegana jest jako czarna magia. Czy z tego kapelusza można wyciągać białe króliki? Można. Na bazie konkretnej aplikacji pokażę na co zwracać uwagę oraz jakie usprawnienia wprowadzać, aby ze swojego kodu, od podstaw, krok po kroku wyciągnać coraz więcej.
Franciszek Krasowski: Zastanawialiście się kiedyś nad tym, czym jest PHP-PM? Jak działa? Jak wypada w porównaniu do innych popularnych rozwiązań? Czy jest wystarczająco stabilny? Franciszek Krasowski odpowie na wszystkie te pytania (a także na te, których jeszcze nie zadaliście).
Allegro Tech Talks Poznań #4: Jak przyspieszyć SOLRa w kilku prostych krokach. allegro.tech
40 milionów wyszukiwań dziennie, setki tysięcy uaktualizacji indeksu czyni z Allegro.pl drugą co do wielkości wyszukiwarkę w Polsce. Nie wszyscy wiedzą, że główną wyszukiwarkę ofertową w Allegro.pl napędza Apache SOLR. Opowiemy o naszych doświadczeniach z optymalizacją zapytań do SOLRa, o tym jak udało nam się znacznie zmniejszyć czasy odpowiedzi i zwiększyć stabilność działania naszego searcha. W czasie prezentacji poruszymy kwestie związane z tworzeniem schematu, wykorzystaniem odpowiednich typów danych, wykorzystania cachea, efektywnego filtrowania i innych optymalizacji, które udało nam się wdrożyć z sukcesem.
Wygłoszono w trakcie czwartej edycji Allegro Tech Talks w Poznaniu.
Adam Dudczak - Starszy programista w Grupie Allegro, pracuje z Javą i technologiami powiązanymi od 2004 roku. Na codzień pracuje nad wyszukiwarką allegro.pl. Jeden z liderów Poznań JUG (http://www.jug.poznan.pl) i współorganizator konferencji GeeCON (http://geecon.org).
Przemysław Szeremiota - Starszy programista w Grupie Allegro od 2008. Zaczynał pracę w zespole wydajności programując w C/C++, przeżył fascynację Javascriptem i zaznał Javy, obecnie doskonale czuje się pływając w mieszance Basha i JQ. W wolnych chwilach przetłumaczył ponad 70 książek technicznych.
Optymalizacyjna magia, czyli jak wyciągać króliki z kapelusza SzymonSadlo
Wydajność aplikacji to trudny temat, często specyficzny dla danej aplikacji, a optymalizacja czasami postrzegana jest jako czarna magia. Czy z tego kapelusza można wyciągać białe króliki? Można. Na bazie konkretnej aplikacji pokażę na co zwracać uwagę oraz jakie usprawnienia wprowadzać, aby ze swojego kodu, od podstaw, krok po kroku wyciągnać coraz więcej.
Franciszek Krasowski: Zastanawialiście się kiedyś nad tym, czym jest PHP-PM? Jak działa? Jak wypada w porównaniu do innych popularnych rozwiązań? Czy jest wystarczająco stabilny? Franciszek Krasowski odpowie na wszystkie te pytania (a także na te, których jeszcze nie zadaliście).
O mojej skrzynce z narzędziami, w której znajdziemy: #ansible #terraform #packer #docker #vagrant #capistrano.
Video: https://www.youtube.com/watch?v=fPZ7JZJGPTE
Adrian Chlubek: Dowiemy się, czym jest Swoole, w jakim celu został stworzony i jakie funkcjonalności oferuje – wszystko to na żywych przykładach. Przede wszystkim jednak spróbujemy odpowiedzieć sobie na pytanie: czy używanie Swoole ma sens?
Repozytorium z przykładami: https://github.com/achlubek/swoole_experiments
Dokumentacja Swoole: https://www.swoole.co.uk/docs/
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKSemihalf
W prezentacji znajdziesz opis zagadnienia przetwarzania pakietów w wysokowydajnych sieciach światłowodowych. Koncepcja przetwarzania ruchu sieciowego w przestrzeni użytkownika oparta jest na zastosowaniu frameworku DPDK na platformie Linux/x86.
Testy wydajnościowe to nie tylko JMeter. Podobnie jak w przypadku testów automatycznych, liczba frameworków do badania wydajności stale rośnie. Poza wprowadzeniem w tematykę testów wydajnościowych, w trakcie prezentacji przyjrzymy się ich implementacji we frameworku k6. Opowiemy również dlaczego w The Software House postawiliśmy na jego wybór i jak dzięki prostym skryptom testowym zoptymalizowaliśmy kilka naszych projektów.
LocalStack to framework udostępniający łatwe w użyciu mocki usług stosu AWS. Podczas prezentacji Maciej skorzystał z serwisu zbudowanego z użyciem serverlessowego Boilerplate autorstwa The Software House oraz skorzystał z takich usług AWS jak API Gateway, DynamoDB, Lambda, StepFunctions czy SQS. Następnie omówił podejście do testowania rozwiązania. Dzięki prezentacji możecie poznać wady i zalety LocalStack. A na koniec Maciej pokazuje przepływ testowy w GitHub Actions, który zwiększy pewność przyszłych zmian.
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
Wojciech Wójcik: W temacie monitorowania systemów IT powiedziano już oceany słów na niezliczonych prezentacjach. Przedstawię wam jednak opowieść o mitologicznym Prometheuszu. Opowieść, która mogłaby konkurować z Grą o tron, a Koronę Królów zjadłaby na przystawkę. W jej trakcie zdradzę wam sekrety monitorowania Kubernetes, ale i nie tylko. Miejcie jednak na uwadze, że nie wszystkie potyczki się wygrywa – dzięki czemu zaszczycę was też możliwością wysłuchania ciekawych historii o fuckupach.
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Polska
O Jenkinsie lub podobnych narzędziach słyszał chyba każdy deweloper i każdy ops. Dla jednych i drugich jest to bardzo często główne okno, przez które widać co się dzieje w projekcie jak i miejsce, gdzie można mieć bezpośredni wpływ na każdy etap kodu „przepływającego” z maszyn deweloperów na produkcję. O sile Jenkinsa stanowi mnogość wszelkiego rodzaju dodatków i nieskończona możliwość ich konfiguracji. Na przykładach z obecnego projektu chcę pokazać, jakie konkretnie pluginy i rozwiązania ułatwiają nam życie.
O mojej skrzynce z narzędziami, w której znajdziemy: #ansible #terraform #packer #docker #vagrant #capistrano.
Video: https://www.youtube.com/watch?v=fPZ7JZJGPTE
Adrian Chlubek: Dowiemy się, czym jest Swoole, w jakim celu został stworzony i jakie funkcjonalności oferuje – wszystko to na żywych przykładach. Przede wszystkim jednak spróbujemy odpowiedzieć sobie na pytanie: czy używanie Swoole ma sens?
Repozytorium z przykładami: https://github.com/achlubek/swoole_experiments
Dokumentacja Swoole: https://www.swoole.co.uk/docs/
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKSemihalf
W prezentacji znajdziesz opis zagadnienia przetwarzania pakietów w wysokowydajnych sieciach światłowodowych. Koncepcja przetwarzania ruchu sieciowego w przestrzeni użytkownika oparta jest na zastosowaniu frameworku DPDK na platformie Linux/x86.
Testy wydajnościowe to nie tylko JMeter. Podobnie jak w przypadku testów automatycznych, liczba frameworków do badania wydajności stale rośnie. Poza wprowadzeniem w tematykę testów wydajnościowych, w trakcie prezentacji przyjrzymy się ich implementacji we frameworku k6. Opowiemy również dlaczego w The Software House postawiliśmy na jego wybór i jak dzięki prostym skryptom testowym zoptymalizowaliśmy kilka naszych projektów.
LocalStack to framework udostępniający łatwe w użyciu mocki usług stosu AWS. Podczas prezentacji Maciej skorzystał z serwisu zbudowanego z użyciem serverlessowego Boilerplate autorstwa The Software House oraz skorzystał z takich usług AWS jak API Gateway, DynamoDB, Lambda, StepFunctions czy SQS. Następnie omówił podejście do testowania rozwiązania. Dzięki prezentacji możecie poznać wady i zalety LocalStack. A na koniec Maciej pokazuje przepływ testowy w GitHub Actions, który zwiększy pewność przyszłych zmian.
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
Wojciech Wójcik: W temacie monitorowania systemów IT powiedziano już oceany słów na niezliczonych prezentacjach. Przedstawię wam jednak opowieść o mitologicznym Prometheuszu. Opowieść, która mogłaby konkurować z Grą o tron, a Koronę Królów zjadłaby na przystawkę. W jej trakcie zdradzę wam sekrety monitorowania Kubernetes, ale i nie tylko. Miejcie jednak na uwadze, że nie wszystkie potyczki się wygrywa – dzięki czemu zaszczycę was też możliwością wysłuchania ciekawych historii o fuckupach.
Kainos Tech Space #1 : DevOps : Artur Senk - Jenkins, najważniejsze narzędzie...Kainos Polska
O Jenkinsie lub podobnych narzędziach słyszał chyba każdy deweloper i każdy ops. Dla jednych i drugich jest to bardzo często główne okno, przez które widać co się dzieje w projekcie jak i miejsce, gdzie można mieć bezpośredni wpływ na każdy etap kodu „przepływającego” z maszyn deweloperów na produkcję. O sile Jenkinsa stanowi mnogość wszelkiego rodzaju dodatków i nieskończona możliwość ich konfiguracji. Na przykładach z obecnego projektu chcę pokazać, jakie konkretnie pluginy i rozwiązania ułatwiają nam życie.
Prezentacja, którą przedstawiłem w trakcie konferencji 33rd Degree. Pamiętaj - nie chodzi tu o krytykę TDD, DDD, BDD itd. Chodzi o zachętę do samodzielnego myślenia.
Prezentacja ta została stworzona jako tło by móc porozmawiać o paru dobrych praktykach, które są bardzo często źle rozumiane. Skupiam się tu na Design Patterns, TDD i BDD. Sama prezentacja jest bardzo krótka, ponieważ jej rdzeń jest przechowywany na bitbucket w postaci kodu źródłowego (linki są dostępne na slajdach). Temat po raz pierwszy został zaprezentowany na http://spreadit.pl/ w 2014 r.
O zagadnieniu:
Czy następuje taki moment w życiu programisty, kiedy może on stwierdzić, że jego warsztat jest już doskonały? Nie, jeżeli pracuje w technologiach internetowych. Ta dziedzina informatyki rozwija się w niesamowicie szybkim tempie, a stworzone wczoraj rozwiązania warto stosować już dziś!
Cel i korzyści spotkania:
Podczas spotkania słuchacze poznają aktualnie wykorzystywane technologie oraz kluczowe umiejętności w produkcji aplikacji internetowych, jak również metody programowania ekstremalnego i techniki zwinnego wytwarzania oprogramowania. Osobom, które dopiero zaczynają swoją przygodę z web development, zostanie przedstawiona propozycja działań, których sumienne podjęcie się gwarantuje odniesienie sukcesu zawodowego.
4Developers 2015: Couple of words about testing in Java, Spock and BDD - Piot...PROIDEA
Speaker: Piotr Kiebasiński
Language: Polish
Testy jednostkowe traktowane są często przez programistów jako zło konieczne, coś co powoduje opóźnienie przy dostarczeniu oprogramowania albo niepotrzebnie dokłada pracy.
Podczas wykładu będę chciał pokazać, że testowanie może mieć sens, być efektywne, zmniejszyć ilość czasu spędzonego nad kodem i wydatnie podnieść zarówno tempo pracy jak i jej jakość. Odwołam się przy tym do metodyki BDD oraz do wykorzystania frameworka Spock.
4Developers: http://4developers.org.pl/pl/
4Developers 2018: Unit testing - introduction (Marek Kawczyński)PROIDEA
This short presentation is for people who would like to start with writing unit tests. I will try to introduce idea and definition of unit testing. With simple examples, we will go through the whole unit testing development process. Unit test, mocks, stubs, TDD and more definitions will be explained in real cases.
I will try to show how and what should be tested. Of course, everything is based on my personal experience that I have gained in my developer life in the last 10+ years.
Oprogramowanie można podzielić na typu według wielu rożnych
kluczy, jednym z nich może być: czy buduje produkt który będę utrzymywał przez lata, czy piszę kod dla kogoś - i przyszłość rozwiązania to nie będzie już moje zmartwienie. Przy tak postawionym pytaniu zasadnicza różnica dotyczy jakości, nie tylko ostatecznego produktu (działa czy nie działa) ale jakości samego rozwiązania. Nie tego co zostało dostarczone ale jak zostało zrobione. Bo właśnie to 'jak' wpływa później na koszt nanoszenia poprawek, dodawania kolejnych elementów, poprawiania ewentualnych błędów. Na wykładzie chciałbym przybliżyć te zasady jak, jak programować aby później z trwoga nie wracać do fragmentów sprzed lat. Jakich trzymać się zasad aby kod był czytelny, klarowny, intencja jasna a całość była dobrze zaprojektowana
Od codziennej higieny do strategicznej refaktoryzacjiMichał Bartyzel
• W jaki sposób już teraz możesz upiększyć swój kod?
• Jak refaktoryzować bez konieczności ukrywania tego w szacowaniach?
• Jak w ciągu 30 minut wyprostować najbardziej zagmatwany algorytm?
• W jaki sposób planować duże strategiczne refaktoryzacje?
• Jak w uporządkowany sposób przeprowadzać długotrwałe refaktoryzacje?
• Jak uniknąć niespójnej architektury w trakcie długotrwałej refaktoryzacji?
• Jak negocjować czas na refaktoryzację z Twoim managerem, PO czy klientem?
Wbrew powszechnym opiniom, nie tak prosto jest zrobić dobre Code Review. Robione w pośpiechu, tylko po to by je "odbębnić", często stwarza więcej szkody niż pożytku. Opowiem wam dlaczego code review jest ważne i jak wykorzystać ten proces aby upewnić się, że napisany kod jest najwyższej jakości. Będę nie tylko mówił o tym kto powinien robić code reviews, i dla kogo, jakie informacje są potrzebne do przeprowadzenia skutecznego code review, ale także jak zrobić dobre code review w najkrótszym możliwym czasie.
W ciągu ostatnich 7 miesięcy przeszedłem drogę z poziomu Cloud Practitioner do Solutions Architect Professional, zdobywając nie tylko 5 certyfikatów, ale przede wszystkim wiedzę i praktykę, dzięki którym dziś pracuje mi się łatwiej i efektywniej. Na tym spotkaniu opowiem o motywacjach, wyzwaniach, strategiach nauki oraz najbardziej wartościowych źródłach wiedzy, dzięki którym zaplanujesz swoją drogę do certyfikatów. I to bez względu na to, czy dopiero zaczynasz swoją przygodę z AWS, czy masz już za sobą masę doświadczeń, które chcesz potwierdzić “na papierze”.
allegro.tech Data Science Meetup #2: Elasticsearch w praktyceallegro.tech
allegro.tech Data Science Meetup #2:
Elasticsearch w ekosystemie Allegro
Andrzej Wisłowski, Paweł Bobruk
Wystąpienie z meetupu:
http://www.meetup.com/allegrotech/events/226484033
These are the slides from talk given by Mateusz Gajewski at AWS UG meeting in Warsaw. Content: Apache Mesos, Cluster Scheduling, Hybrid Environment, Scalability, Fault Tolerance.
The document discusses some of the challenges and pitfalls of microservices architecture, including architectural, operational, and organizational issues. Architecturally, distributed systems are difficult to manage due to issues like lack of global clock, independent failures, and network latency and reliability. Operationally, deploying and upgrading many independent services requires extensive automation, monitoring, and incident response systems. Organizationally, acquiring distributed skills and managing loose coupling between teams presents challenges for companies adopting microservices.
The document introduces RxJava, a library for composing asynchronous and event-based programs using observable sequences for the Java Virtual Machine. It discusses the problems with asynchronous programming, provides an overview of reactive programming and reactive extensions, and describes RxJava's core types like Observable and Observer. It also covers key concepts like operators, schedulers, subjects, and dealing with backpressure in RxJava.
JDD 2014: Adam Dubiel - Import allegro.tech.internal.*allegro.tech
In this presentation Adam describes internal tools that fuel our architecture: Hermes - pub/sub messaging solution based on Apache Kafka, axion - our ecosystem of build tools on top of Gradle and our monitoring ecosystem based on graphite, statsd and Tessera.
You can watch it on youtube: https://www.youtube.com/watch?v=V1O27W-FIKw
In this presentation Adam Dubiel shares some insight on how monitoring works in Allegro microservices based architecture. He introduces also "Hermes" - messaging solution based on Apache Kafka and overall thoughts when working with this kind of software. Enjoy!
3. O czym będziemy mówić
Pytania:
→ Jak dbać o jakość kodu w zespole? Code review?
→ A co jeśli mamy 40+ zespołów?
→ Jak zadbać o jakość na poziomie całej organizacji?
4. O czym będziemy mówić
Opowiemy:
→ Po co CQK?
→ Jak zdefiniować kryteria jakości i ocenić kod różnych zespołów
→ Jak robimy prawdopodobnie największe Code Review w Polsce
→ Co udało nam się znaleźć: “perełki”, typowe błędy
→ A także… co udało nam się osiągnąć
5. → 40+ zespołów (dev + infra)
Zespoły w Allegro
→ 4 miasta (Poznań, Toruń, Warszawa, Kraków)
→ Często doświadczenie głównie w PHP
→ Większość pisze i utrzymuje mikrousługi na JVM
6. Jak powstało CQK i po co?
Pierwszy skład zespołu CQK:
→ doświadczeni inżynierowie
→ zaangażowani w community
→ autorytet nie hierarchia
→ kilka osób myślących podobnie, startup
7. Jak powstało CQK i po co?
Pierwszy Cel:
Przejrzeć i ocenić (w miarę) obiektywnie cały kod
Pierwsze review:
→ 1 dzień w 1 salce
→ kilkadziesiąt projektów do przejrzenia
→ 15 minut na projekt (!)
→ totalna partyzantka
8. Jak powstało CQK i po co?
Wnioski z pierwszego review:
→ 15 min na projekt to za mało
→ potrzebna jest metodyka i organizacja
→ koncentracja na wybranych aspektach
Nowe Cele:
→ Cel 1: podnoszenie jakości kodu w całej organizacji
poprzez review, feedback i mentoring
→ Cel 2: wkład do ocen technicznych zespołów
9. Jak pracujemy
→ Zaczęliśmy od garstki osób, teraz jest nas więcej
→ Co kwartał zmieniamy metodykę review
→ Merytoryczny feedback
→ Przejście na tryb “push”
11. Metodyka review: drugi kwartał
Duże i częste naruszenia podstawowych zasad
Są błędy, ale generalnie jest ok
Jest dobrze!
12. Magic Servlet Antipattern is Back:
→ logika biznesowa/dostęp do repozytorium w kontrolerze
→ nieprawidłowe wykorzystanie frameworków (np. ręczne
mapowanie wyjątków na kodu HTTP)
Metodyka review: drugi kwartał
Zwięzłość i czytelność testów:
→ struktura testów, prawidłowe wykorzystanie bibliotek
→ co testują testy
→ mocks (overmocking, mockowanie nie swoich klas)
13. Szkolenia: trzeci kwartał
→ Naming i omówienie bytów w testach (Stub, Mock, Spy)
→ Spock: Data Driven, wyjątki, asercje, Groovy
→ (*) JUnit: Mockito, AssertJ, JUnitParams, catch-exception
→ Overmocking + verify = betonowy kod
→ Testy integracyjne: bazy danych, REST
14. Zwięzłość i czytelność testów cd.
Metodyka review: aktualnie
Model domenowy:
→ klasy modelu
→ organizacja pakietów
→ powiązanie z bibliotekami / infrastrukturą
16. Metodyka review: aktualnie
Model domenowy:
kod jest podzielony horyzontalnie
domena powiązana z infrastrukturą (zapytania do baz
danych, skomplikowane logowanie/monitoring, itp.)
widać starania odejścia od anemiczności modelu
(rozsądne podejście do mutowalności, obiekty zyskują
funkcjonalności)
17. Metodyka review: aktualnie
Model domenowy:
ładny model domenowy zgodny z OOP
struktura pakietów zorientowana domenowo
domena jest wyraźnie odseparowana od infrastruktury
podział pakietowy zgodnie z wytycznymi np. Hexagonal
Architecture
19. Główna działalność CQK
Tworzenie feedbacków dla zespołów
→ Zespół zgłasza do feedbacku projekt lub PR
→ Przeciętny projekt ma ~10KLOC
20. Co to jest feedback
Kilkustronicowy dokument na WIKI, lista punktów, np:
dobre testy integracyjne (np BlacklistEndpointIntegrationSpec.groovy)
SalesRegulationsFilterTest.java - do testu tego rodzaju prostych funkcji używajcie
podejścia data-driven test
Klasa Pdf.java mogłyby być immutable, czyli zamiast:
Pdf pdf = new Pdf();
pdf .setContent(documentContent);
lepiej
Pdf pdf = new Pdf (documentContent);
długa implementacja equals() w BlacklistRequest.java. Łatwo się pomylić w takim
kodzie. Czy ten equals() jest do czegoś potrzebny?
21. Fazy życia feedbacku: koszt os./h
I. Review kodu + spisanie 2-3
II. Weryfikacja 1-2
III. Publikacja i uwagi od zespołu 1
IV. Przepracowanie w zespole 0
Jak powstaje feedback
22. Faza I. Review kodu + spisanie uwag
→ Keeper klonuje repo i ogląda kod
→ Nie uruchamiamy tooli do statycznej analizy
→ Keeper tworzy dokument feedbacku i proponuje ocenę
Jak powstaje feedback
23. Faza II. Weryfikacja
→ Drugi Keeper przegląda feedback (kontrola merytoryczna)
→ Przy rozbieżnościach - uzgadniamy w ramach CQK
→ Kontrola czy feedback jest friendly
→ Drugi Keeper często dopisuje swoje uwagi
→ Approve
Jak powstaje feedback
24. Faza III. Publikacja i uwagi od zespołu
→ Feedback jest przekazywany do zespołu
→ Zachęcamy zespół do ustosunkowania się do feedback’u
Czy modyfikujemy feedback?
→ Świadome i uzasadnione naruszenia reguł
→ My czegoś nie zrozumieliśmy (brak kontekstu)
Jak powstaje feedback
25. Faza IV. Przepracowanie feedbacku w zespole
Mamy nadzieję, że zespół przekona się do naszych uwag i
propozycji
Jak powstaje feedback
28. Główne grzechy:
→ TDD - Test Driven Development
→ Anemic Domain Model
Co znaleźliśmy - big picture
29. TDD - problemy:
→ Overmocking
→ Mocking What-You-Don’t-Own
→ Testy są kopią implementacji
→ Za mało testów integracyjnych
→ Testy pisane pod Coverage
→ Testy bez wartości dokumentacyjnej
→ Testowanie implementacji a nie funkcjonalności
Co znaleźliśmy - big picture
30. Anemic Domain Model
→ Anemiczne, mutowalne Encje
→ Settery i gettery rządzą
→ Programowanie proceduralne nie obiektowe
→ Często w ogóle brak wydzielonego Modelu Domenowego
Co znaleźliśmy - big picture
32. public class ClientException extends RuntimeException {
static final long serialVersionUID = -712897190232112939L;
public ClientException(String message) {
super(message);
}
public ClientException(String message, Throwable cause) {
super(message, cause);
}
}
src
33. @Test
public void shouldSetMessageAndCauseInConstructor() {
//given
String exceptedMessage = "Very bad exception";
Exception expectedCauseException = new Exception("This is cause exception");
//when
ClientException exception = new ClientException(exceptedMessage, expectedCauseException);
String message = exception.getMessage();
Throwable causeException = exception.getCause();
//then
assertEquals(exceptedMessage, message);
assertEquals(expectedCauseException, causeException);
}
test
43. Najczęstsze błędy
Wstrzykiwanie zależności: pola vs konstruktor:
→ Jasna deklaracja kolaboratorów
→ Rozróżnienie opcjonalnych zależności
→ Łatwiejsza konstrukcja obiektów w testach
44. Najczęstsze błędy
Niemutowalność:
“Classes should be immutable unless there's a very good
reason to make them mutable....If a class cannot be made
immutable, limit its mutability as much as possible.”
Joshua Bloch, Effective Java
45. Najczęstsze błędy
Mockowanie nie swoich rzeczy:
(a.k.a: Don’t mock what you don’t own)
→ zmiany poza naszą kontrolą
→ podwójnie kosztowne (test / prod)
46. → przekonaliśmy zespoły do zewnętrznego review
→ konwencja: should + given/when/then
→ przekonaliśmy większość zespołów do Spocka
→ zespoły piszą coraz lepsze testy integracyjne
→ Overmockingu mniej
→ zdecydowanie widać poprawę ogólnej jakości kodu
Sukcesy
47. → review w ramach jednego zespołu często nie wystarcza
→ potrzeba systematyczności - jednorazowy zryw to za mało
→ otwartość na feedback
→ cierpliwość - efekty nie przyjdą od razu
Wnioski