Zaliczenie zajęć:
Warunek konieczny: zadania domowe
Warunek wystarczający: kolokwium (nie ma alternatywy!)
Dodatkowo: konkursy umożliwiające podniesienie oceny.
Plan zajęć i prezentacje:
- Podstawy
- Przypomnienie podstaw programowania obiektowego
- Testy jednostkowe
- Założenia SOLID i GRASP. Zapachy kodu
- Odwrócenie kontroli (IoC) i wstrzykiwanie zależności (DI)
- Ćwiczenie: modyfikacja kodu niezrefaktoryzowanego (opis, projekt A, projekt B)
- Materiały dodatkowe:
- Bob Martin SOLID Principles of Object Oriented and Agile Design
- Testy jednostkowe:
- Maciej Aniserowicz (dotNetConfPL 2013) Testy jednostkowe w .NET
- Maciej Aniserowicz (dotNetConfPL 2014) Testy jednostkowe w praktyce, vol 2
- Maciej Aniserowicz (dotNetConfPL 2015) Testy jednostkowe w praktyce vol 3: testy konwencji
- Maciej Aniserowicz Testy jednostkowe - Q&A
- Maciej Aniserowicz Testy jednostkowe - Q&A [no. 5]
- Inżynieria wymagań tu dodać User Stories i ćwiczenia praktyczne z nimi - ważne
- Wprowadzenie do UML
- Tradycyjne i zwinne metodyki wytwarzania oprogramowania
- Model kaskadowy, iteracyjno-przyrostowy, równoległy i inne
- SCRUM
- Umowy time&material i fixed price
- Materiały dodatkowe:
- Agile i SCRUM:
- Bob Martin SOLID Principles of Object Oriented and Agile Design
- Jeff Sutherland The art of doing twice as much in half the time (TEDx)"
- Jeff Sutherland Scrum (Talks at Google)
- Martin Fowler, Neil Ford Explaining Agile
- Eric Brechner - Agile Project Management with Kanban
- Mariusz Kapusta - Kanban - co to jest i gdzie tego użyć? (przykład w Trello)
- Kanban:
- Eric Brechner - Agile Project Management with Kanban
- Mariusz Kapusta - Kanban - co to jest i gdzie tego użyć? (przykład w Trello)
- How to Make a Kanban Board in Trello
- Miro - Manage your workflow with Kanban
- Zalety i wady kontraktów fixed price i time & materials
- 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
- Katalog wzorców projektowych Gangu Czworga (implementacja w C++ lub w 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
->
Reactive Extension (Rx)
- Polecenie
->
Uogólnienie: RelayCommand
- Szyna/kolejka komunikatów (szyna poleceń, szyna zdarzeń) - por. wzorzec Mediator
- Zadania
- Wybrane wzorce architektoniczne:
- Architektura MVC na przykładzie aplikacji konsolowej
- ASP.NET MVC
- MVU - model-view-update
- Architektura trójwarstwowa (dane, BLL, prezentacja)
- Wzorzec MVVM
- Architektura zorientowana na usługi (SOA) - ważne
- Domain Driven Design (DDD)
- Mikrousługi
- CQRS
- Materiały dodatkowe:
- Mikrousługi:
- Martin Fowler Microservices [html]
- Michał Aniserowicz O mikroserwisach mikro-fakty i mikro-mity
- 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)
- Darmowe narzędzia pracy zespołowej
- Udostępnianie kodu za pomocą pakietów NuGet
- Wersjonowanie i kopia zapasowa kodu źródłowego
- Git w środowisku Visual Studio z użyciem zdalnego repozytorium w GitLab - tutorial
- Git flow - ważne
- CI/CD
- Asana/Trello, Slack
- Scrum w środowisku Visual Studio
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
Kod źródłowy C#:
projekty "startowe" do ćwiczeń
Kod źródłowy zima 2023
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:
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:
Robert C. Martin Mistrz czystego kodu, Helion
Frederick P. Brooks Mityczny osobomiesiąc. Eseje o inżynierii oprogramowania, WNT