SlideShare a Scribd company logo
Dwa sposoby na pisanie
aplikacji bez błędów
Michał Łukaszewski
Software Engineer, Tech Lead
SUCHAR TIME!
There are two ways to write error-free programs; only the third works.
- Alan J. Perlis
Rodzaje błędów
Błędy
implementacji
Błędy
projektowe
Błędy wymagań
Agenda
• Projektowanie
• Testowanie
• Implementacja
Projektowanie
Zrozumienie wymagań
• „Dlaczego?” zamiast „co?”
• Zrozumienie intencji ważniejsze od listy funkcji
• Odtworzenie aktualnego procesu klienta
• Optymalizacja wymaga wiedzy eksperckiej.
Zrozumienie wymagań
• „Dlaczego?” zamiast „co?”
• Zrozumienie intencji ważniejsze od listy funkcji
• Odtworzenie aktualnego procesu klienta
• Optymalizacja wymaga wiedzy eksperckiej.
• Klient nie zna się na Twojej robocie
• nie wie czego od Ciebie wymagać.
• Ale zna się na swoim biznesie.
• W przeciwieństwie do Ciebie.
Zrozumienie wymagań
Błędy wymagań
Zrozumienie wymagań
Zrozumienie wymagań
• Impact mapping
• DDD
• Event storming
• SIWZ
Zrozumienie wymagań
„Oprogramowanie szyte na miarę”
Michał Bartyzel
Modelowanie
„A model is a simplification which fosters understanding.”
Modelowanie
• Modelowanie procesu biznesowego klienta
• Jego rzeczywistości biznesowej.
• Wszystkie modele są uproszczone
• Więc wszystkie modele są błędne
• Ale niektóre są użyteczne
• „Mental model” jako MVP
Architektura jako most między modelem, a
kodem
Business
requirements
Architecture Implementation
Architektura jako most między modelem, a
kodem
• Model opisuje w przybliżeniu rzeczywistość klienta.
• Architektura opisuje techniczne ramy, na których oprze się model.
• Programista implementuje zachowania w ramach przyjętej
architektury.
Architektura jako most między modelem, a
kodem
• Architektura musi być mądra, nie musi mieć mądrej nazwy.
• Ale architektura heksagonalna i czysta architektura naprawdę są super!
• Architektura musi być optymalna biznesowo.
Planowanie
Pośpiech jest skuteczniejszym generatorem błędów niż junior na kacu.
Szacowanie
Szacowanie
• Metody szacowania
• Kosztorysowa (cocomo/cocomo2)
• Bottom-up/Top-down
• Opinia ekspercka
• Szacowanie przez analogię
• Windeband Delphi
Szacowanie
• Pewne
• Prawdopodobne
• Wróżenie z fusów
Szacowanie
• Szacowanie pewne
• <= 1MD
• Szacowanie prawdopodobne
• 2-3MD
• Wszystko powyżej to wróżbiarstwo
Reguły te nie zmieniają się wraz z doświadczeniem zespołu.
Szacowanie
• Sceptycyzm
• Błędy szacowania
• Reguła 8 godzin
Szacowanie
• Nie uwzględnia
• Urlopów
• Spotkań
• Realnego czasu pracy
Planowanie
• Szacowanie
• Bufory (spotkania, urlopy, zmiany, błędy szacowania)
• Zarządzanie ryzykiem
• Reguła 9 matek
• Kontrola postępów
• Replanning (adaptacja)
Projektowanie
• Zbieranie i zrozumienie wymagań
• Modelowanie
• Architektura jako most między modelem, a kodem
• Szacowanie i planowanie.
Testowanie i implementacja
Błędy
implementacji
Błędy
projektowe
Błędy wymagań
Testowanie
Credits: https://www.sealights.io/blog/making-code-coverage-relevant-for-qa-teams/
TDD a rzeczywistość
• „Wszyscy” piszą testy.
• Część pisze testy z sensem.
• A część nawet przed implementacją.
• „To tylko prosta klasa, co tu testować?”.
TDD a rzeczywistość
• Testy są często większe niż implementacja.
• Są kosztowne w utrzymaniu.
• Wrażliwe na zmiany implementacji.
• Ciężko uzasadnić ten wydatek w budżecie projektu.
TDD a rzeczywistość
Code coverage jako największy bait w historii programowania.
Specification as example
• Test jednostkowy nie jest testem.
• Jest specyfikacją.
• Czyli dokumentacją.
• Opisuje oczekiwane zachowania.
• API
• Sprawdza obsługę błędów.
Dwa sposoby na pisanie aplikacji bez błędów
Specification as example
• Test nie jest testem.
• Jest specyfikacją.
• Czyli dokumentacją.
• Opisuje oczekiwane zachowania.
• Sprawdza obsługę błędów.
Testy jako miara jakości kodu.
• Kod, który się nie zmienia nie wymaga zmiany testów
• Prosty kod wymaga prostych testów
• Proste testy prostego kodu są szybkie
• Problem z odcięciem zależności jako flaga spartolonego projektu
• Prawo Demeter i Dependency Injection, ftw!
• Specyfikacja zawsze pokrywa kod w 100%
Testy wspierają utrzymanie jakości kodu.
• Nie tylko testy jednostkowe:
• Lintery
• Analiza statyczna
• Regularne profilowanie
• Automatyzacja
• per Pull Request
• Testy funkcjonalne
• Testy integracyjne
• Blokowanie zmian wprowadzających regresję jakości.
• Code Review jako bezwymiarowa ocena jakości kodu.
Testowanie
• TDD -> BDD -> ...
• Specification as example
• Testy jako miara jakości kodu
Implementacja
SOLID jako droga wojownika
S
O
L
I
D
ingle Responsibility Principle
pen Close Principle
iskov substitution principle
ependency inversion principle
nterface segregation principle
SOLID jako droga wojownika
• SOLIDny kod to kod czysty, prosty i stabilny.
• SOLIDny kod łatwo uczynić kodem bezpiecznym.
• SOLIDny kod świetnie się rozwija minimalizując ryzyko regresji.
• SOLIDny kod banalnie się testuje.
• SOLIDny powinien być kod, ale i architektura.
SOLID jako droga wojownika
SOLID to sposób myślenia o projektowaniu i implementacji.
Programowanie defensywne
• Agresywna technika programowania
• Optymalna dla projektów o długim czasie życia
• Bronisz kodu przed błędami
Programowanie defensywne
• YAGNI!
• Konstruktor jako jedyny punkt wstrzyknięcia zależności
• Tylko niezbędne zależności
• Minimalna ilość metod publicznych
• A każda z nich – finalna.
Dla kogo powstaje kod (i dokumentacja)?
• Kodujesz dla przeciwnika
Dla kogo powstaje kod (i dokumentacja)?
• Kodujesz dla przeciwnika
Dla kogo powstaje kod (i dokumentacja)?
• Kodujesz dla innych programistów.
Dla kogo powstaje kod (i dokumentacja)?
• Kodujesz dla innych programistów.
“Any fool can write code that a computer can understand. Good
programmers write code that humans can understand.”
– Martin Fowler
Dla kogo powstaje kod (i dokumentacja)?
Wszystkie techniki czystego kodu obniżają koszt utrzymania, nie
wytworzenia.
• Wszystkie „skróty i hacki” obniżają koszt wytworzenia, ale mogą doprowadzić
do śmierci projektu/kodu na dłuższą metę.
Dla kogo powstaje kod (i dokumentacja)?
Kod wyspecyfikowany (np. testami) jest przenaszalny pomiędzy
programistami.
• Chroń swoje stanowisko robiąc dobrą robotę
• Nie kod, który tylko ty rozumiesz
Good enough
• Proces wytwarzania oprogramowania to (technicznie) nieograniczona
ilość iteracji cyklu Deminga.
• Lepsze jest gorsze.
• Refactoring jako stały proces towarzyszący
• Nie akcja naprawcza!
Good enough
Implementacja
• SOLID jako droga wojownika
• Programowanie defensywne
• Dla kogo powstaje kod (i dokumentacja)?
• „Good enough”
Mniej błędów gdy
• Sumiennie zebrane wymagania.
• Rozumiesz wymagania.
• Masz dobry model (wystarczające przybliżenie).
• Architektura jest optymalna biznesowo.
• Szacowanie, planowanie, kontrola postępów.
• Specyfikacja „zamiast” testowania.
• Stała kontrola jakości kodu (CI + analiza statyczna + automatyzacja).
• Dobry projekt kodu (SOLID, programowanie defensywne).
• Czytelny kod („twój kod opowiada historię”).
• „Good enough”.
Lectures
• https://www.fs.blog/2017/06/all-models-are-wrong/
• http://ocramius.github.io/blog/when-to-declare-classes-final/
• https://ocramius.github.io/extremely-defensive-php/
• https://martinfowler.com/articles/feature-toggles.html

More Related Content

PPTX
Techniczna organizacja zespołu cz 2
PDF
Techniczna organizacja zespołu
PDF
Jak bardzo techniczny musi być tester?
PPTX
TDD – w poszukiwaniu źródeł jakości.
PDF
Nie tylko C# - Ekosystem Microsoft dla programistów
PDF
SkładQA 2018 - Daniel Dec
PDF
Wszystkie role testera oprogramowania
PDF
PHPUnit - jak zacząć pisać testy automatyczne [PL]
Techniczna organizacja zespołu cz 2
Techniczna organizacja zespołu
Jak bardzo techniczny musi być tester?
TDD – w poszukiwaniu źródeł jakości.
Nie tylko C# - Ekosystem Microsoft dla programistów
SkładQA 2018 - Daniel Dec
Wszystkie role testera oprogramowania
PHPUnit - jak zacząć pisać testy automatyczne [PL]

Similar to Dwa sposoby na pisanie aplikacji bez błędów (20)

PDF
Slajdy z wykładu o Agile
PPTX
Pomysł na analizę w Agile: Agile Modeling
PPT
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
PDF
J2EE. Podstawy programowania aplikacji korporacyjnych
PDF
Lean Hardware
PDF
KICK ME
PDF
Produkcja aplikacji internetowych
PPTX
4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...
PPTX
Olga Żądło - Robot Framework
PDF
Sprzedaj swój program. Droga do udanych projektów programistycznych
PPTX
Zawód: programista gier. Jak zacząć pracę w branży?
PPT
Aim szkolenie
PPTX
Modele wdrażania i zarządzania projektami erp
PDF
Konrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gier
PPSX
MS - Wprowadzenie do testów jednostkowych
PDF
Girls in It - Front-end & Back-end. Jak zacząć
PDF
Od Produktywności do Sabotażu - Sławomir Radzymiński, KraQA #31
PPTX
Tajniki współpracy z (trudnym) klientem
PDF
HYC - Angular stań się kanciastym
PDF
Projektowanie ewolucyjne
Slajdy z wykładu o Agile
Pomysł na analizę w Agile: Agile Modeling
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
J2EE. Podstawy programowania aplikacji korporacyjnych
Lean Hardware
KICK ME
Produkcja aplikacji internetowych
4Developers 2015: Jak przekonać managera, że czas na refaktoring jest potrzeb...
Olga Żądło - Robot Framework
Sprzedaj swój program. Droga do udanych projektów programistycznych
Zawód: programista gier. Jak zacząć pracę w branży?
Aim szkolenie
Modele wdrażania i zarządzania projektami erp
Konrad Gadzina: Test-Driven Gamedev - testy automatyczne a tworzenie gier
MS - Wprowadzenie do testów jednostkowych
Girls in It - Front-end & Back-end. Jak zacząć
Od Produktywności do Sabotażu - Sławomir Radzymiński, KraQA #31
Tajniki współpracy z (trudnym) klientem
HYC - Angular stań się kanciastym
Projektowanie ewolucyjne
Ad

More from Michal Lukaszewski (9)

PPTX
How we built a tools stack for the benchmarking AI and what happened next
PPTX
How to fix a code to not corrupt an application
PDF
Distributed Systems @ Code Europe
PDF
Budowanie aplikacji PHP bez użycia frameworków
PPTX
Domain Events in Distributed Architecture
PPTX
Action Domain Response
PPTX
Wydajność i optymalizacja
PPTX
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
PPTX
Solid vs php
How we built a tools stack for the benchmarking AI and what happened next
How to fix a code to not corrupt an application
Distributed Systems @ Code Europe
Budowanie aplikacji PHP bez użycia frameworków
Domain Events in Distributed Architecture
Action Domain Response
Wydajność i optymalizacja
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Solid vs php
Ad

Dwa sposoby na pisanie aplikacji bez błędów

Editor's Notes

  • #25: NASTĘPNY SLAJD: PODSUMOWANIE
  • #26: PODSUMOWANIE
  • #40: Trzeba pamiętać, że ważną cechą CA jest to, że nawiązuje do wcześniejszych opracowań Wujka Boba, z SOLID na czele
  • #49: "Eagleson's Law: Any code of your own that you haven't looked at for six or more months might as well have been written by someone else." - Alan Eagleson
  • #50: "Eagleson's Law: Any code of your own that you haven't looked at for six or more months might as well have been written by someone else." - Alan Eagleson