Programowanie zespołowe 24L

Przedmiot prowadzony na Wydziale Fizyki UW w ramach studiów I stopnia. Autor poniższego: Piotr Biegański.

1. Planowanie projektu

1.1 Projektowanie obiektowe

Zajęcia z MIMUW, których pierwsze dwa moduły mają ładny wstęp do projektowania obiektowego.

Strona z Wikipedii, która opisuje używaną przez nas notację (w szerszym niż wymagany zakresie).

Otwartoźródłowy program, który umożliwia rysowanie diagramów z użyciem UML.

Zadania, na których można poćwiczyć.

1.2 Modele zarządzania projektem

Kaskadowy

Iteracyjny

Przyrostowy

2. Dobre praktyki w Pythonie

2.1 Specyfika Pythona jako języka obiektowego

Problem prywatności

Klasy i metody abstrakcyjne

Metody statyczne i klasowe

Nieistnienie polimorfizmu, metody klasowe jako potencjalne rozwiązanie

Podział projektu na pliki, strukturyzowanie klas pomiędzy plikami

2.2 Czytelność i dokumentowanie kodu

PEP-8, czyli zbiór wytycznych stylistycznych, pomagających pisać czytelny i standaryzowany kod.

Podstawowe rzeczy dotyczące typowania, czyli przypisywania obiektom konkretnych typów danych. Pełna dokumentacja zawiera też inne rzeczy jak omawiane TypeVar. Opis tego, jak powinno się typować zawiera PEP-484.

PEP-256, PEP-257 i PEP-258 zawierają podstawowe informacje na temat formatowania i używania docstringów. W Pythonie jest wiele dopuszczalnych konwencji. Osobiście używam docstringów zgodnych z formatem Google, wydają mi się czytelne.

Googlowskie wytyczne stylistyczne są zgodne z odpowiednimi PEPami, przy okazji precyzując i rozszerzając to, co PEPy zostawiają jako decyzję dla dewelopera. Są spójne i dobrze przemyślane, warto się zapoznać.

2.3 Pyenv i kontrola wersji Pythona

Repozytorium pyenva, a w nim również instrukcje instalacji i wyjaśnienie, jak działa.

Pyenv nie działa na Windowsie (chociaż pewnie lepiej powiedzieć, że to Windows nie działa…). Programować na Windowsie, w tym używając pyenva, najlepiej używając Windows Subsytem for Linux.

Jeszcze lepszym rozwiązaniem problemu Windowsa jest pozbycie się go.

2.4 Moduły, biblioteki, skrypty

Definicje pojęć modułu, paczki i skryptu w kontekście Pythona, oraz podstawowe wytyczne jak je tworzyć.

Dokumentacja modułu argparse.

Samouczek najważniejszych funkcji z modułu argparse.

2.5 Ćwiczenie podsumowujące

Zadania wymagające zaprojektowania hierarchii klas oraz zaimplementowania jej w zgodzie z dobrymi praktykami.

3. Git i Gitlab

3.1 Podstawy

Oficjalna książka na temat Gita.

Dokumentacja Gita.

Samouczki z Gitlaba.

Dokumentacja Gitlaba.

3.2 Automatyzacja

Dokumentacja biblioteki pytest oraz samouczki jej użycia (testy jednostkowe).

Dokumentacja biblioteki mypy oraz samouczki jej użycia (statyczne sprawdzanie typów).

Dokumentacja modułu flake8 pozwalającego na sprawdzanie, czy kod trzyma się PEP-8.

Dokumentacja biblioteki sphinx oraz samouczki jej użycia (tworzenie dokumentacji).

Pełny opis procesu tworzenia dystrybucji modułu, składni pyproject.toml itd.

Dokumentacja modułu twine (wrzucanie dystrybucji na PyPI).

3.3 CI/CD na Gitlabie

Dokumentacja CI/CD na Gitlabie, w tym samouczek użycia, szablony dla różnych języków oraz pełna dokumentacja języka YAML.

Samouczek stawiania strony projektu za pomocą Gitlab Pages.

3.4 Ćwiczenia

Zadania z używania kontroli wersji oraz ciągłych integracji, testowania i dostarczania.

4. Projekty zaliczeniowe

Każda grupa powinna założyć repozytorium na Gitlabie i dodać mnie (@pbieganski) w roli developer.

Podczas pracy ocenie podlega stosowanie się do dobrych praktyk oraz systematyczność pracy, w szczególności: równy podział pracy pomiędzy członków zespołu; regularność rozwoju aplikacji oraz commitów; właściwy podział na gałęzie; klarowne nazewnictwo gałęzi i commitów; regularne prowadzenie code review; dokumentowanie kodu na bieżąco; statyczne typowanie; trzymanie się PEP-8; testy jednostkowe; potok CI/CD; zaplanowanie i zaprojektowanie struktury kodu; klarowność kodu i jego struktury.

Po wykonaniu pracy ocenie podlega: jakość i działanie wyniku końcowego; kompletność wypełnienia minimalnych założeń projektu; umiejętność obrony i wyjaśnienia kodu przez członków zespołu.

Tutaj znajdują się opisy projektów z semestru 24L.

English (UK)