Narzędzia programistyczne
W semestrze zimowym 2026/27 laboratorium odbywa się zdalnie za pośrednictwem platformy Moodle
https://moodle.umk.pl/WFAIIS/course/view.php?id=23
Forma prezentacji
Prezentacja powinna zawierać:
- krótkie wprowadzenie do tematu i omówienie najważniejszych pojęć, przedstawione na slajdach lub w notatce (najlepiej w formacie PDF);
- praktyczną demonstrację wybranych zastosowań narzędzia, zaprezentowanie jego głównych możliwości, korzyści, wad i ograniczeń;
- co najmniej dwa pytania dotyczące najważniejszych, zdaniem autorów, zagadnień związanych z tematem. Pytania zostaną wykorzystane na kolokwium. Preferowane są pytania wymagające krótkiej (jednolinijkowej) odpowiedzi lub pytania testowe wielokrotnego wyboru z jedną poprawną odpowiedzią.
- czas trwania około 20–30 minut.
Tematy dotyczące rozbudowanych narzędzi (np. Azure DevOps) mogą być realizowane w grupach. W takim przypadku każdy członek grupy powinien aktywnie uczestniczyć w prezentacji, przedstawiając swoją część tematu, a czas całkowitej prezentacji będzie odpowiednio dłuższy.
Propozycje tematów
1. Narzędzia wspierające pracę zespołów programistycznych: DevOps i CI/CD (ciągła integracja, ciągłe dostarczanie i ciągłe wdrażanie).
-
- Boards do planowania pracy
- Repos do przechowywania kodu
- Pipelines do automatyzacji budowania, testowania oraz wdrażania
- Artifacts do przechowywania i udostępniania artefaktów budowania
- Test Plans do zarządzania testami
Prezentacja może być przygotowana przez zespół. Każdy członek kilkuosobowego zespołu powinien aktywnie uczestniczyć w prezentacji, która powinna demonstrować kompletny proces wytwarzania oprogramowania wspólnego projektu, np. realizowanego w ramach Pracowni Programowania Zespołowego. Dobrze jest pokazać:
- organizację pracy zespołu: podział zadań, system zgłoszeń (issue tracker) oraz wybraną metodykę, np. Scrum;
- repozytorium kodu i zespołowy sposób pracy z systemem kontroli wersji, np. GitHub Flow lub Git Flow;
- przykładowy przepływ zmian: gałąź → commit → pull request → przegląd kodu i testy → scalenie zmian → wdrożenie;
- automatyzację budowania, testowania i wdrażania projektu.
W przypadku indywidualnych prezentacji wystarczy zademonstrować działanie jednego z narzędzi lub procesów opisanych powyżej.
Inne narzędzia CI/CD i wspierające pracę zespołów programistycznych, które można rozważyć:
- Bitbucket Pipelines: usługa CI/CD zintegrowana z repozytoriami Bitbucket.
- GitLab: platforma łącząca repozytoria, zgłoszenia, przegląd kodu i CI/CD.
- Można również omówić integrację wybranej platformy z innymi usługami, np. GitHub.
2. Automatyzacja budowania i testowania
- CMake: konfiguracja procesu budowania projektów C i C++.
- npm: zarządzanie zależnościami i skryptami w projektach JavaScript i TypeScript.
- GitHub Actions: definiowanie workflow do budowania, testowania i wdrażania, uruchamianych w odpowiedzi na zdarzenia w repozytorium.
- Self-hosted runners for GitHub Actions: uruchamianie workflow na własnych maszynach.
- Trunk: narzędzia wspierające kontrolę jakości kodu i automatyzację zadań deweloperskich.
- pre-commit: zarządzanie kontrolami uruchamianymi przed zatwierdzeniem zmian, np. formatowaniem i analizą kodu.
3. Statyczna analiza kodu, formatowanie, refaktoryzacja i generowanie kodu
- ReSharper: narzędzia dla C# i .NET do analizy, nawigacji i refaktoryzacji kodu.
- Clang, Clang-Tidy i Clang-Format: kompilator, analiza statyczna i automatyczne formatowanie kodu C/C++.
- Włączanie analizy i formatowania do lokalnego workflow oraz potoków CI.
4. Techniki izolowania testowanego kodu i obiekty testowe w testach jednostkowych
- Atrapy (mocki), stuby i inne obiekty testowe: czym się różnią i kiedy warto ich używać.
- Mockito: biblioteka do tworzenia obiektów testowych w Javie.
5. Generowanie testów i danych testowych
- AutoFixture oraz atrybut
AutoData: automatyczne przygotowywanie danych testowych. - Narzędzia AI do generowania testów: weryfikacja poprawności i przydatności wygenerowanych przypadków.
6. Profilowanie i diagnostyka aplikacji
- Narzędzia diagnostyczne Visual Studio: profilowanie instrumentacyjne i statystyczne (sampling), analiza wydajności oraz diagnostyka pamięci.
- Orbit: profiler do analizy wydajności aplikacji m.in. w C/C++, Rust i Go.
- gprof: profiler dla programów w C i C++.
- Valgrind: narzędzia do wykrywania błędów pamięci i profilowania programów w systemie Linux.
7. Konteneryzacja
- Docker: budowanie obrazów i uruchamianie aplikacji w kontenerach.
- Podman: narzędzie zgodne z wieloma poleceniami Dockera, umożliwiające uruchamianie kontenerów bez uprawnień administratora.
- Docker Compose: definiowanie i uruchamianie aplikacji składających się z wielu usług.
- Kubernetes: wdrażanie, skalowanie i zarządzanie aplikacjami składającymi się z kontenerów.
8. Wykorzystanie narzędzi AI w procesie wytwarzania oprogramowania
- Generowanie i objaśnianie kodu, automatyczna recenzja zmian, tworzenie opisów commitów oraz generowanie testów jednostkowych.
- Konfigurowanie agentów programistycznych, np. w VS Code z GitHub Copilot.
- Ollama: uruchamianie modeli językowych lokalnie.
- Weryfikacja wyników generowanych przez AI, ograniczenia narzędzi i ochrona poufnego kodu.
9. Inne narzędzia
Zaproponujcie narzędzie lub praktykę stosowaną w branży, której nie obejmują powyższe tematy i która nie jest ujęta w programie innych przedmiotów na kierunku IS. Jakich narzędzi używacie w pracy lub projektach?