owned this note
owned this note
Published
Linked with GitHub
# Spotkania z KNEI - Agenda
28, 29 grudnia 2020, 10:00 - 12:00
## 0. Wstęp
1. Przedstawić się, dać namiary na kontakt
2. Agenda - wyjaśnić o czym będziemy mówić
## 1. Króta prezentacja procesu w projekcie Oryx (KP Labs)
1. Branch na gitcie
1. Zmiany
1. CMake - lokalny build
1. Commit, Push
1. CI
- Build, Style Check, Testy, Dokumentacja, Testy Integracyjne
1. Code Review
1. Testy
1. Merge
## 2. Podstawowy pracy z Gitem
1. Git - zdecentralizowane źródło prawdy projektowej
- Żadnych serwerów na boku, żadnego wysyłania kodu mejlem
- Nie commitujemy artefaktów builda
- Jeśli musisz edytować pliki "tymczasowo" do lokalnej pracy to robisz to źle - żadnych partial commitów, żadnego "bede pamiętać żeby tego nie wrzucić"
- np.: lokalne credentiale
- Git vs GitHub vs GitLab vs BitBucket
- Zasady wiadomości commit'a
3. Branch per feature - ale skąd ten "feature"
- Issue tracery
- Jak planować i dzielić prace
- Tym bliżej tym dokładniej: sprinty, milestony, roadmapa
3. Powiązanie kodu z zaplanowaną pracą
- ID ticketa w commitie / nazwie brancha
5. Aktualizowanie brancha
- Live Fast, Die Young
- merge vs rebase
6. Code review poprzez pull request
- Podstawowe zasady code review: komentuj kod a nie autora, pamiętaj że wszyscy sie uczą, bądź dokładny ale też nie rozwiązuj (od razu) problemu za autora
- Wspólne standardy: nazewnictwo, idiomy, wzorce
- C++: Guideline
- Python: PEP
- Formatowanie: powinno być załatwione przez narzędzia
## 3. Utrzymywalny projekt
1. Snowflake Server
- https://martinfowler.com/bliki/SnowflakeServer.html
3. Minimalne wymagania do pracy w projekcie
- Co się da powinno być automatyzowane
- Python: requirements.txt
- C++: CMake `FetchContent`, conan albo podobne
- Docker (spoko kiedy uzywany do deploymentów, wymuszanie środowiska pracy na nim już mniej fajne ale czasem lepsze niż nic)
- Dobra praktyka - nie zakładaj powłoki systemowej, systemu plików, systemu operacyjnego
4. It Works On My Machine™
- Serwery ciągłej integracji które jako minimum próbują zbudować to co jest na Git
- **Regularne** pushe do repozytorium
5. Project CLI
- Make, CMake, project.json, etc...
- "Interfejs" do projektu
- Uruchomienie tych samych kroków co na CI
- Command line-first podstawą automatyzacji
- Vendor-lock w Embedded - czasem powoduje problemy
7. Onboarding
- Jeśli pierwsza kompilacja i uruchomienie (mając niezbędny sprzęt) jest trudna to robisz to źle
- Krok po kroku opis co potrzeba, krótko i na temat
- Opis podstawowych zasad i koncpecji w projekcie, linki do materiałów
- Zestaw "ćwiczeń" do wykonania w projekcie, najbardziej typowe zadania
8. Dokumentacja
- Jakie rodzaje? (Techniczny data sheet, zasady działania, przyjęte procedury i standardy)
- Dokumentacja na wiki vs dokumentacja razem z kodem (aka confluence vs pliki md)
9. Zespół projektowy, struktura organizacji
- Różni ludzie, różne specjalizacje różne zadania
- Silosy wiedzy
- Rola lidera (technicznego)
- Model Spotify (z którego Spotify sie wycofał, ale może...)
## 4. Testowanie oprogramowania
1. Po co inwestować czas w kod testów?
3. Testy jednostkowe
- Czym jest "jednostka"
- Embedded to nie wymówka żeby ich nie robić, kod to kod
- Jak uruchomić kod embedded na PC?
- Krótki wstęp do TDD - bez zbędnej indoktrynacji
4. Testy integracyjne
- Przyjmują różne formy, ale ideą jest uruchomienie większego kawałka
- Na sprzęcie: idzie w strone testów Hardware-in-the-Loop
- Możliwie blisko "produkcji": Release, `-O3` itd...
5. Testy a serwery CI
6. Flaky tests
- Testy które czasem zgłaszają błedy - co chcą nam powiedzieć?
## 5. Materiały
- https://datasift.github.io/gitflow/IntroducingGitFlow.html
- https://martinfowler.com/bliki/SnowflakeServer.html