3. XP: dobre praktyki inżynieryjne

3.1. Praktyki developerskie a praktyki projektowe

  • Praktyki projektowe (Scrum, Kanban, XP, Lean)

  • Praktyki developerskie (TDD, S.O.L.I.D., CI/CD, Code Review / Pull Request, DevOps)

3.2. Feature i bugfix branch

  • Git i Git Flow

  • Strategia budowania branchy

  • Statyczna analiza kodu Pull Requestów

  • Strategie repozytoriów: Fork, Central Repo, Army model

3.3. Refactoring

  • Spaghetti code

  • Zależności w kodzie i między modułami

  • S.O.L.I.D.

  • TDD: test first vs test last development

  • Refactoring legacy systemów

3.4. Praktyka

  • Czym w praktyce jest dług techniczny

  • Ekosystem narzędziowy

  • Budowanie bazy wiedzy jako wynik Code Review

  • Code Review jako element Collective Code Ownership

3.5. FAQ

  • Kto powinien być zaangażowany w Code Review?

  • Ile czasu poświęcić na Code Review?

  • Czy Code Review jest potrzebne przy TDD?

  • Jak wielkość elementów w backlog wpływa na Code Review?

  • Jak uniknąć wąskiego gardła w postaci Code Review?

  • Czy zawsze należy robić Code Review?

  • Czy można zautomatyzować proces Code Review?

  • Na co warto zwrócić uwagę w Code Review?

  • Jakiej wielkości zmiany poddawać Code Review?

  • Jak komunikować problem z kodem?

  • Jak blokować scalenie kodu, który zawiera błędy?

  • Jak robić Code Review na żyjącym branchu?

  • Notyfikacje i jak pozostać na bieżąco ze zmianami?

  • Jak unikać silosów kompetencyjnych za pomocą Code Review?

3.6. Code Review

  • Systemy do Code Review, ich wady i zalety

  • Unified diff vs side-by-side

  • Komentarze i taski

  • Pair programming vs Code Review

  • Pull Request vs Merge Request

  • Dobre praktyki Code Review

  • Rozwiązywanie konfliktów w systemie kontroli wersji

  • Składnia Markdown i reStructuredText

3.7. Podstawy optymalizacji i wydajności systemów

  • Złożoność obliczeniowa

  • Złożoność pamięciowa

  • Złożoność cyklometryczna

  • Dług techniczny

3.8. Automatyzacja Code Review

  • Włączenie procesu CI/CD do Code Review

  • Statyczna analiza kodu źródłowego

  • Pipeline as a Code

  • Quality Gates

  • Triggerowanie statusów w Jirze

  • Strategie mergowania (merge, rebase, squash+merge, squash+rebase)

3.9. Jakość kodu

  • SonarQube i SonarLint

  • Wyciąganie wniosków z analizy statycznej

  • Quality Gates

  • Mierzenie pokrycia testami

  • Testy mutacyjne