| Tytuł: | Jakość w C++ |
| Kod: | ccpp-quality |
| Kategoria: | C i C++ |
| Forma: | 50% wykłady / 50% warsztaty |
| Czas trwania: | 3 dni |
| Odbiorcy: | developerzy |
| Zapisy: |
Indywidualne zamówienie i dopasowanie dla grupy. |
| Logistyka: |
W siedzibie klienta lub w innym dowolnym miejscu. |
Wyróżniki szkolenia
- Kompleksowe podejście do szeroko rozumianej jakości
- Nauka w oparciu o rzeczywiste przykłady
- Nacisk na pisanie poprawnego, czystego i wydajnego kodu
Program Szkolenia
Program jest ramą w jakiej możemy się poruszać merytorycznie - program dla konkretnego szkolenia dedykowanego ustalamy z grupą na podstawie analizy przed-szkoleniowej.-
Wstęp: quality – czy to tylko testowanie?- Czym jest kompleksowe podejście do szeroko rozumianej jakości?
- Typowe problemy natury technicznej, biznesowej i personalnej
- Praca nad wymaganiami przyrastającymi w czasie i konieczność regresyjnego podejścia do jakości
- Typowe problemy natury technicznej, biznesowej i personalnej
- Pierwsze rozmyślania architektoniczne: złożoność esencjonalna i przypadkowa
- Co i jak testować
- Uporządkowanie tematyki testowania: koncept (odwróconej) piramidy testów
- V-model ze szczególnym naciskiem na fundament: „coding"
- Metryki jakości kodu, czyli od czego zacząć by zacząć dbać o jakość?
- Uporządkowanie tematyki testowania: koncept (odwróconej) piramidy testów
- Czym jest kompleksowe podejście do szeroko rozumianej jakości?
-
Przystanek 1: proces budowania kodu- Jak powinien budować się kod by mu ufać?
- Flagi kompilacji absolutnie wymagane
- Unifikacja i automatyzacja budowania wszystkich części kodu na tzw. „jedną modłę”
- Jak powinien budować się kod by mu ufać?
-
Jak pisać kod by móc go testować?- TDD = Test Driven Development
- Czym jest?
- Kiedy (nie) stosować TDD?
- Jak pracować z kodem „legacy”, czyli TDR = Test Driven Refactoring
- Co trzeba wiedzieć by móc z powodzeniem stosować te metody?
- Czym jest?
- Architektura
- Architektura systemowa vs aplikacyjna
- Przypisywanie odpowiedzialności obiektom – metoda dziel i zwyciężaj
- Jak poprawnie interpretować OOP by (z czasem) nie powstał legacy code?
- Inwersja kontroli i wstrzykiwanie zależności
- Systemy sterowane zdarzeniami vs sekwencyjne
- Architektura pluginowa
- Architektura systemowa vs aplikacyjna
- TDD = Test Driven Development
-
Testy deweloperskie po raz pierwszy: Testy Jednostkowe = UT = Unit Test- UT vs (odwrócona) piramida testów
- Kontekst i środowisko uruchomieniowe UT
- Z czego powinien być zbudowany dobry testy, czyli odpowiedź na pytanie co powinien zawierać test?
- Obiekt i jego wymagania – granica testu
- Ustalenie i gromadzenie danych wejściowych
- Ustawienie poprawność sprawdzeń
- Obiekt i jego wymagania – granica testu
- Framework i jego możliwości na rzecz automatycznych testów
- Zaślepianie zależności: dummy, stub, mock
- „Czas to pieniądz”, czyli implementacja inteligentnych zaślepek z wykorzystaniem framework-ów
- Badanie pokrycia kodu testami
- Narzędzia i automatyzacja procesu
- Typowe problemy: statystyki celem samym w sobie, lawinowe zmiany testów przy drobnych zmianach...
- Narzędzia i automatyzacja procesu
- UT vs (odwrócona) piramida testów
-
Testy developerskie po raz drugi: Testy Modułowe = MT = Module Test- Czym jest test modułowy?
- UT vs MT vs (odwrócona) piramida testów
- Jak zaprojektować MT?
- Zalety MT w szczególności przy pracy z kodem „legacy”
- UT, MT vs KPI(s) stawiane przez biznes, czyli odpowiedź na pytanie jak wyważyć mus zaspokojenia statystyk biznesowych i jakości testów w szerokim horyzoncie czasu
- Automatyzacja UT i MT na rzecz wspólnych statystyk
- Czym jest test modułowy?
-
Pozostałe metryki jakości- Statyczna analiza kodu
- CPPCheck
- Clang Static Analyzer
- Automatyzacja
- CPPCheck
- Złożoność cyklometryczna
- Co to jest i jakie ma znaczenie, szczególnie przy pracy z kodem „legacy”
- Narzędzie CCCC
- Automatyzacja
- Co to jest i jakie ma znaczenie, szczególnie przy pracy z kodem „legacy”
- CPD – wykrywanie metody „Copiego i Pasta”
- Narzędzie PMD: CPD
- Znacznie CPD dla dobrego startu procesu refaktoryzacji kodu
- Automatyzacja
- Narzędzie PMD: CPD
- Statyczna analiza kodu
-
Refaktoryzacja- Czym (nie) jest refaktoryzacja?
- Kiedy wolno i kiedy nie wolno refaktoryzować?
- Jak ją dobrze wykonać?
- Jak przekonać „górę”, że to się opłaci?
- Moc narzędzi
- Czym (nie) jest refaktoryzacja?
-
Narzędzia do zaawansowanej diagnostyki kodu C/C++- Debugger tekstowy GDB
- Rola GDB w procesie dbania o jakość ze szczególnym uwzględnieniem MT
- Jak z tym wystartować?
- Debugging zdalny
- Analiza plików coredump i ich generowanie (gcore) z uwzględnieniem problemów wynikających ze współbieżności
- Rola GDB w procesie dbania o jakość ze szczególnym uwzględnieniem MT
- Badanie wycieków pamięci: Valgrind: Memcheck
- Czym są wycieki pamięci i dlaczego są takie groźne?
- Podstawowe użycie Memcheck-a i analiza wyników
- Automatyzacja wywołań Memcheck-a i rola MT
- Czym są wycieki pamięci i dlaczego są takie groźne?
- Analiza wydajności: Valgrind: Callgrind
- Co to jest profileing i jaka jest jego rola w procesie dbania o jakość ze szczególnym naciskiem na prace refaktoryzacyjne oraz MT?
- Podstawowe użycie Callgrind-a i analiza wyników
- Automatyzacja wywołań Callgrind-a i rola MT
- Co to jest profileing i jaka jest jego rola w procesie dbania o jakość ze szczególnym naciskiem na prace refaktoryzacyjne oraz MT?
- Analiza wielowątkowości: Valgrind: Helgrind
- Typowe problemy z wielowątkowością: wyścig, dead-lock
- Podstawowe użycie Helgrind-a i analiza wyników
- Automatyzacja wywołań Helgrinda-a i rola MTWstęp: quality – czy to tylko testowanie?
- Typowe problemy z wielowątkowością: wyścig, dead-lock
- Debugger tekstowy GDB
Pobierz program w formacie PDF
Trenerzy
Poznaj ekspertów, którzy mogą poprowadzić Twoje szkolenie.