Jacek Matulewski
Inżynieria oprogramowania

Zaliczenie zajęć:
Warunek konieczny: zadania domowe
Warunek wystarczający: kolokwium (nie ma alternatywy!)
Dodatkowo: konkursy umożliwiające podniesienie oceny.


Plan zajęć i prezentacje:

  1. Podstawy
    1. Przypomnienie podstaw programowania obiektowego
    2. Testy jednostkowe
    3. Założenia SOLID i GRASP. Zapachy kodu
    4. Odwrócenie kontroli (IoC) i wstrzykiwanie zależności (DI)
    5. Ćwiczenie: modyfikacja kodu niezrefaktoryzowanego (opis, projekt A, projekt B)
    6. Materiały dodatkowe:
      1. Bob Martin SOLID Principles of Object Oriented and Agile Design
      2. Testy jednostkowe:
        1. Maciej Aniserowicz (dotNetConfPL 2013) Testy jednostkowe w .NET
        2. Maciej Aniserowicz (dotNetConfPL 2014) Testy jednostkowe w praktyce, vol 2
        3. Maciej Aniserowicz (dotNetConfPL 2015) Testy jednostkowe w praktyce vol 3: testy konwencji
        4. Maciej Aniserowicz Testy jednostkowe - Q&A
        5. Maciej Aniserowicz Testy jednostkowe - Q&A [no. 5]
  2. Inżynieria wymagań tu dodać User Stories i ćwiczenia praktyczne z nimi - ważne
  3. Wprowadzenie do UML
  4. Tradycyjne i zwinne metodyki wytwarzania oprogramowania
    1. Model kaskadowy, iteracyjno-przyrostowy, równoległy i inne
    2. SCRUM
    3. Umowy time&material i fixed price
    4. Materiały dodatkowe:
      1. Agile i SCRUM:
        1. Bob Martin SOLID Principles of Object Oriented and Agile Design
        2. Jeff Sutherland The art of doing twice as much in half the time (TEDx)"
        3. Jeff Sutherland Scrum (Talks at Google)
        4. Martin Fowler, Neil Ford Explaining Agile
        5. Eric Brechner - Agile Project Management with Kanban
        6. Mariusz Kapusta - Kanban - co to jest i gdzie tego użyć? (przykład w Trello)
      2. Kanban:
        1. Eric Brechner - Agile Project Management with Kanban
        2. Mariusz Kapusta - Kanban - co to jest i gdzie tego użyć? (przykład w Trello)
        3. How to Make a Kanban Board in Trello
        4. Miro - Manage your workflow with Kanban
      3. Zalety i wady kontraktów fixed price i time & materials
  5. Praca inżynierska
    1. Zawartość i wymagania
    2. Szablon pracy: Word, PDF, TeX
    3. Krótko o strukturze IMRaD
    4. Egzamin inżynierski
    5. Zagadnienia na egzamin
  6. Zespół. Role w zespole (teoria Belbina). Kwestionariusz Belbina
  7. Katalog wzorców projektowych Gangu Czworga (implementacja w C++ lub w C#)
  8. Wybrane wzorce architektoniczne:
    1. Architektura MVC na przykładzie aplikacji konsolowej
    2. ASP.NET MVC
    3. MVU - model-view-update
    4. Architektura trójwarstwowa (dane, BLL, prezentacja)
    5. Wzorzec MVVM
    6. Architektura zorientowana na usługi (SOA) - ważne
    7. Domain Driven Design (DDD)
    8. Mikrousługi
    9. CQRS
    10. Materiały dodatkowe:
      1. Mikrousługi:
        1. Martin Fowler Microservices [html]
        2. Michał Aniserowicz O mikroserwisach mikro-fakty i mikro-mity
  9. Krótkie wspomnienie o narzędziach do prototypowania i projektowania interfejsu aplikacji
    1. Figma (WWW: https://www.figma.com/)
    2. Justinmind Prototyper (WWW: https://www.justinmind.com/)
    3. Microsoft Blend (Visual Studio)
  10. Darmowe narzędzia pracy zespołowej
    1. Udostępnianie kodu za pomocą pakietów NuGet
    2. Wersjonowanie i kopia zapasowa kodu źródłowego
      1. Git w środowisku Visual Studio z użyciem zdalnego repozytorium w GitLab - tutorial
      2. Git flow - ważne
      3. CI/CD
    3. Asana/Trello, Slack
    4. Scrum w środowisku Visual Studio

Zagadnienia inżynierii oprogramowania do dalszego samodzielnego studiowania:

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