Zaawansowane techniki obiektowe
Ewolucja obiektów czyli Programowanie Sterowane …Driven TDD BDD ATDD DDD
TDD Test Driven Developmet/Design Testy Testy przed kodem Red-Green-Refactor Test jednostkowy Czy jednostkowy oznacza jedna klase ? Jak bardzo jednostkowy musi byc test ?
BDD Behavior Driven D* Poprawnie robione TDD ? Piszemy testy czy może specyfikujemy zachowanie ? Wartość biznesowa co to znaczy użyteczny test? Test powinien wyrażać zachowanie co to znaczy zrozumiały test ? czy wystarczy zrozumiały tytuł?
BDD - kierunki Zachowania na poziomie kodu testy jednostkowe narzedzia np. MSPEC Zachowania na poziomie system testy end to end / akceptacyjne narzedzia np. cucumber/Specflow
ATDD Acceptance Test Driven D* Jak opisać i sprawdzić zachowanie systemu? Jak wyrazić testy w sposób zrozumiały dla biznesu? Duża i mała pętla: Test Akceptacyjny TDD/BDD aż zrealizujemy test akceptacyjny Problemy: Stan bazy, Interakcje z GUI
Cucomber – przykładowy sposób wyrażania wymagań Przykładowy scenariusz
Cucomber – podstawowe definicje
Cucomber – test nie przechodzi
Cucomber – troche wiecej kodu
Cucomber – i test przechodzi
Baza - trudności Stan bazy sie zmienia …. Niedotykalne/odtwarzane dane testowe Przeładowanie bazy przed każdym testem Przeładowanie bazy przed testami Testy z robackowaną transakcją Testy samo kompensujące “Inteligentne” testy dostosowujące się do stanu bazy
GUI - trudności Wrażliwość na zminy wyglądu, rodzaj przeglądarki itd Selenium + page objects A może troche "pooszukiwać" na poziomie API/pomiędzy.
Obszar pomiędzy czyli kompromis …czyli testy integracyjne UT POWINNY BYĆ tanie, masowe, szybkie
Rożek lodów Antywzorzec najpowszechniej-sze to, co drogie
Testy integracyjne … czy aby nie testy zintegrowane? Przy podejściach uSerwisowych niezwykle ważne jest odesparowanie serwisów w rune-time w developmencie w testowaniu Proby tesowania kilku skomplikowanych bytów razem prowadzą (nieuchronnie?) do problemów Do posłuchania: http://blog.thecodewhisperer.com/permalink/integrated-tests-are-a-scam (i inne J. B. Rainsberger)
Continuous development
Continuous development Na podst. WIKIPEDIA
Ciągła integracja vs. dostawa CI: Cykliczna budowa artefaktów + uruchomienie podstawowych testów rzadkie buildy = dużo zmian – kto winien problemów? testy mogą trwać b. długo długo -> podział na rózne sety podstawowe, rozszerzone, o różnym wpływie na build żeby uruchomić testy integracyjne/funkcjonalne trzeba wdrożyć … coś (komponent/bazę/dane) automatyzacja instalacji pozwala wdrażać (i testować) również w srodowiskach docelowych (UAT/Stage/Prod) DevOps Spotify releasy co 17s?
DevOps https://spotifylabscom.files.wordpress.com/2014/03/spotify-engineering-culture-part1.jpeg
Continuous delivery Wdrożenia – uzgodnienia z infrastructure team Konfiguracje – wersjonowanie, aplikowanie wewnątrz pakietów instalacyjnych ? hasła? uprawnienia? Wersjonowanie baz (search?) Infrastruktura provisioning maszyn, instalacja systemów, uaktualnienia i wersjownowanie Wirtualizacje, lekkie wirtualizacje
Narzędzia Team city Automatyzacja deplymentów: Chef, Puppet, PSh Runnery do testów Automatyzacja deplymentów: Chef, Puppet, PSh Zarzadzane konfiguracją: Configatron Bazy: Entity migration, np. Roundhouse Docker
Domain Driven Design Jak często implementowali Państwo FFT? Na czy polega problem z Sytemami Informatycznymi? Proste operacje zwielokrotnione 1000x synergia ciągłe zmiany
Komplikacja problemu Esencjonalna Przypadkowa wynika z natury problemu niemożliwa do uniknięcia Przypadkowa wynika z podejścia lub konkretnych rozwiązań może rosnąć (i zwykle rośnie) z czasem
Co to jest?
Co to jest?
Model User interface Infrastructure Application logic Domain logic wyraża reguły, procesu, obejmuje główną logikę, jest sercem system stanowi (poninien) największą wartość powstaje długo, wymaga pielęgnacji model to nie dane (scheme DB) ani zachowanie model obejmuje wiedzę wydestylowaną przez realizujących system (i powinien być czytelny!)
Model wyraża reguły, procesu, obejmuje główną logikę, jest sercem system stanowi (poninien) największą wartość powstaje długo, wymaga pielęgnacji model to nie dane (scheme DB) ani zachowanie model obejmuje wiedzę wydestylowaną przez realizujących system (i powinien być czytelny!)
Wszechobecny Język język ekspertów dziedzinowych vs IT różne obszary Ubiquitous language różne obszary np. co znaczy użytkownik, faktura ? ważny jest kontekst użycia bounded context
Wzorce wartości, encje, sewisy, agregaty Domain Layer (Business Logic) Aggregate Entity (Aggregate root) Value Object business methods Delegate Load Save Business Service <<interface>> Policy (Strategy Design Pattern) Application Layer (Application Services, Use Case Agents) PolicyImpl1 PolicyImpl2 Repository Factory Event Generate Create wartości, encje, sewisy, agregaty budowniczy, fabryka, repozytorium, polityka warstwy, zdarzenia
Więcej Eric Evans Domain-Driven Design: Tackling Complexity in the Heart of Software Vaughn Vernon Implementing Domain-Driven Design Slawomir Sobotka http://bottega.com.pl/pdf/materialy/sdj-ddd.pdf http://bottega.com.pl/pdf/materialy/ddd/ddd1.pdf model jest wszystkim czego potrzebujesz https://www.youtube.com/watch?v=iaLeKHbspLg A place for everything and everything in its place https://www.youtube.com/watch?v=jraV7xSTYVs
Więcej Eric Evans Domain-Driven Design: Tackling Complexity in the Heart of Software Vaughn Vernon Implementing Domain-Driven Design Slawomir Sobotka http://bottega.com.pl/pdf/materialy/sdj-ddd.pdf http://bottega.com.pl/pdf/materialy/ddd/ddd1.pdf model jest wszystkim czego potrzebujesz https://www.youtube.com/watch?v=iaLeKHbspLg A place for everything and everything in its place https://www.youtube.com/watch?v=jraV7xSTYVs