Zaliczenie zajęć:
Warunek konieczny: zadania domowe
Warunek wystarczający: kolokwium (nie ma alternatywy!)
Dodatkowo: konkursy umożliwiające podniesienie oceny.
Plan zajęć i prezentacje:
- Wykład (Jacek Matulewski, 10h)
- Podstawy
- Przypomnienie podstaw programowania obiektowego
- Testy jednostkowe
- Zasady SOLID i GRASP. Zapachy kodu
- Odwrócenie kontroli (IoC) i wstrzykiwanie zależności (DI)
- Materiały dodatkowe:
- Bob Martin SOLID Principles of Object Oriented and Agile Design
- Testy jednostkowe:
- Inżynieria wymagań
- Wprowadzenie do UML
- Praca inżynierska
- Zawartość i wymagania
- Szablon pracy: Word, PDF, TeX
- Krótko o strukturze IMRaD
- Egzamin inżynierski
- Zagadnienia na egzamin
- Zespół. Role w zespole (teoria Belbina). Kwestionariusz Belbina
- Szybki przegląd katalogu wzorców projektowych Gangu Czworga
- Projektowanie architektury oprogramowania i wybrane wzorce architektoniczne:
- Architektura MVC na przykładzie aplikacji konsolowej
- Architektura trójwarstwowa (dane, BLL, prezentacja)
- Wzorzec MVVM dla aplikacji z GUI
- + Domain Driven Design (DDD) i Architektura zorientowana na usługi (SOA)
- Materiały dodatkowe:
- Mikrousługi:
- Problemy tradycyjnych metodyk wytwarzania oprogramowania: trójkąt Kerznera, prawa Lehmanna, prawa Brooksa (antycypacja drugiej części wykładu)
- Wykład (Łukasz Sikorski, 5h)
- Tradycyjne i zwinne metodyki wytwarzania oprogramowania
- Trójkąt Kerznera
- Model kaskadowy, iteracyjno-przyrostowy, równoległy i inne
- Prawa Lehmana dotyczące rozwoju oprogramowania
- SCRUM
- Kanban
- Typy umów na tworzenie oprogramowania, w tym umowy time&material i fixed price
- Materiały dodatkowe:
- Agile i SCRUM:
- Kanban:
- Zalety i wady kontraktów fixed price i time & materials
- Narzędzia pracy zespołowej
- Atlassian Jira, Asana, Trello
- Discord, Slack
- Krótkie wspomnienie o narzędziach do prototypowania i projektowania interfejsu aplikacji
- Figma (WWW: https://www.figma.com/)
- Justinmind Prototyper (WWW: https://www.justinmind.com/)
- Microsoft Blend (Visual Studio)
- Ćwiczenia (Jacek Matulewski, 10h)
- Wzorce projektowe (implementacja w C++ i C#)
- Singleton
->
modyfikacje (klasa statyczna, ograniczenie liczby instancji do N)
- Adapter (klasowy, obiektowy)
- Dekorator
->
Fasada
- Most (+ modyfikacje)
->
Pełnomocnik
- Pyłek i fabryka abstrakcyjna
- Interpreter
- Kompozyt
->
formatowanie wydruku ->
cykle ->
Odwiedzający ->
uogólnienie ->
Iterator
- Metoda szablonowa (implementacja w oparciu o polimorfizm i w oparciu o delegacje)
- Obserwator (klasyczny)
->
zdarzenia ->
użycie IObserver
i IObservable
- Polecenie
->
Uogólnienie: RelayCommand
Szyna/kolejka komunikatów (szyna poleceń, szyna zdarzeń) - por. wzorzec Mediator
- Zadania
- Projekty "startowe" do ćwiczeń (kod źródłowy C#, projekty Visual Studio)
- Kod źródłowy z zajęć zima 2024
- Materiały dodatkowe: Refactoring Guru - wzorce projektowe
- Narzędzia pracy zespołowej (praca samodzielna, tutoriale)
- Wersjonowanie i kopia zapasowa kodu źródłowego
- Git w środowisku Visual Studio z użyciem zdalnego repozytorium w GitLab - tutorial
- + Git flow
- + CI/CD
- Udostępnianie kodu za pomocą pakietów NuGet - tutorial
- Modyfikacja niezrefaktoryzowanego kodu (opis, projekt A, projekt B) (praca samodzielna w domu)
- Zebranie wymagań (użycie user stories), przygotowywanie specyfikacji i implementacja prostej aplikacji (z wymianą zespołów)
- Ćwiczenia (Łukasz Sikorski, 5h)
- Atliassian Jira
- Podstawy administracji Jira
- Zasady działania
- Jira jako narzędzie zarządzania w modelu zwinnym
- Tablica Kanban
- Typy zadań
- Sprinty
- Wydania
- Oś czasu
- Dodatkowe parametry zadań
- Dobre praktyki
- Komentarze (prowadzenie komunikacji, adresowanie)
- Obserwowanie zadań
- Wyszukiwanie zadań (klikane oraz JQL)
- Atlassian Confluence
- Zasady działania
- Współpraca z Jira
- Zagadnienia inżynierii oprogramowania do dalszego samodzielnego studiowania:
- przygotowanie samodzielnie lub przy współpracy z zespołem dokumentacji projektowej oprogramowania wraz ze wstępną estymacją czasu i kosztów
- poznawanie różnych systemów wytwarzania oprogramowania; poznawanie zasad, którymi się kierują
- praktyczne ćwiczenia w projektowaniu prostych architektur systemów oprogramowania i przygotowania ich dokumentacji funkcjonalnej
- praktyczne przykłady wykorzystania poznanych wzorców projektowych
- opracowywanie i nadzorowanie zestawów testów (scenariuszy testowych) dla rozwijanej aplikacji
- optymalizacje
- event storming
Linki do innych materiałów dotyczących inżynierii oprogramowania:
Jerzy Nawrocki - wykład Inżynieria oprogramowania na MIMUW (ważniak)
Jerzy Nawrocki - Zaawansowana inżynieria oprogramowania
Literatura rozszerzająca zagadnienia wykładu:
Ian Sommerville Inżynieria oprogramowania (wydanie X), PWN 2020
Robert C. Martin Zwinne wytwarzanie oprogramowania. Najlepsze wzorce, zasady, praktyki, Helion
Vaughn Vernon DDD dla architektów oprogramowania, Helion
Eric Evans Domain-Driven Design. Zapanuj nad złożonym systemem informatycznym, Helion
Martin Fowler Architektura systemów zarządzania przedsiębiorstwem. Wzorce projektowe, Helion
Simon Brown Softrware Architecture for Developers (PDF)
Literatura "mądrościowa" do poduszki (klasyki):
Robert C. Martin Mistrz czystego kodu, Helion
Frederick P. Brooks Mityczny osobomiesiąc. Eseje o inżynierii oprogramowania, WNT