Narzędzia programistyczne
W semestrze zimowym 2024/25 laboratorium odbywa się zdalnie za pośrednictwem platformy Moodle
https://moodle.umk.pl/WFAIIS/course/view.php?id=23
Zaliczenie zajęć
Warunki zaliczenia laboratorium:
- prezentacja wybranych narzędzi programistycznych (max. 30 min. na osobę)
- kolokwium zaliczeniowe (test) z treści prezentowanych w czasie zajęć
Forma prezentacji
Prezentacja powinna zawierać:
- zwięzłe wprowadzenie do tematu, najważniejsze pojęcia w postaci slajdów/prezentacji lub notatki (najlepiej w postaci PDF)
- praktyczną demonstrację wybranych przypadków użycia prezentowanego narzędzia. Prezentacja najważniejszych korzyści i możliwości wykorzystania narzędzia oraz ewentualne wady, problemy i ograniczenia w jego działaniu
- propozycję co najmniej 2 pytań, które mogłyby posłużyć do zweryfikowania znajomości prezentowanego tematu. Pytania mogą być wykorzystane na kolokwium, powinny dotyczyć najistotniejszych (Waszym zdaniem) zagadnień poruszanego tematu.
- czas prezentacji ok 20-30 min.
Tematy dotyczące rozbudowanych narzędzi (np. Azure DevOps) mogą być realizowane w grupach do 4 osób, w ten sposób aby omówienie tematu mogło się odbyć w czasie trwania pojedynczych zajęć (czas do 2h.).
Propozycje tematów
1. (zespołowe) Narzędzia automatyzujące procesy i wspierające pracę zespołow programistycznych: DevOps, CI/CD (continuous integration, continuous delivery, continuous deployment).
- Azure DevOPs (Repos, Boards, Pipelines, itd. ), ewentualnie integracja z innymi usługami (np. GitHub)
Prezentacja dla zespołu 3-4 osobowego demonstrująca pełen pipeline wytwórczy na przykładowym projekcie deweloperskim (może być na przykładzie projektu realizowanego aktualnie w ramach Pracowni Programowania Zespołowego). Najważniejsze zagadnienia:
- wsparcie dla pracy zespołowej, zarządzanie zespołem i zadaniami, issue tracker, wybrana metodologia wytwórcza (agile, scrum, …)
- repozytorium kodu (system kontroli wersji) i workflow w zespole, np.:
- Github workflow: branch → commit → Pull Request → Review → Deploy → Merge
- A Successful Git branching model Git Flow
- automatyzacja procesów wytwórczych: budowanie, testy, deployment
2 . Automatyzacja procesów budowania i testowania
- https://trunk.io/ automatyzacja przeglądu kodu
- pre-commit - zarządzanie skryptami uruchamianymi przed zatwierdzeniem zmian git do automatycznego formatowania kodu, sprawdzania jakości kodu, zależności i testowania
3. Narzędzia do statycznej analizy kodu (lintery), refaktoryzacji, generowania kodu
4. Techniki izolacji, atrapy (mocki), wzorce w testowaniu jednostkowym:
- Moq,
- https://site.mockito.org/}Mockito mocking framework for unit tests in Java
5. generowanie testów i danych do testów
- biblioteka AutoData,
- narzędzia AI do generowania testów
6. Profilowanie aplikacji
- narzędzia diagnostyczne w Visual Studio, instrumentacja, profilowanie statystyczne (sampling), debugowanie pamięci
- Orbit instrumentacja programów w C, C++, Rust, Go
- gprof GNU profiler
- valgrind system for debugging and profiling Linux programs
7. Docker - uruchamianie aplikacji w izolowanych środowiskach
8. Kubernetes - zarządzanie dużą liczbą kontenerów
9. wykorzystanie narzędzi AI w procesie wytwórczym
10 . Inne narzędzia spotykane w firmach informatycznych a nieobecne w programie nauczania IS.
… jakich narzędzi używacie?
Inne propozycje automatyzacji DevOps, CI, CD - mozliwych kompiacji jest wiele;
- Jira Software + BitBucket + Bamboo (CI, free for 30 days)
- git + Buildbot
- GitHub + Jenkins automation server
- GoCD free & open source ci/cd server
- Northflank a comprehensive suite of features to support you from inception to production. Put your DevOps lifecycle on autopilot.
- GitHub/BitBucket +
- build
- CircleCI (up to 6,000 build minutes and 5 active users per month)
- web deployment
- GitHub + TeamCity powerful continuous integration for DevOps-centric teams
- inne kombinacje wspomnianych (lub nie wspomnianych) platform, np. 32 Cutting-Edge DevOps Tools to Watch in 2024