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)
  2. Inżynieria wymagań tu dodać User Stories i ćwiczenia praktyczne z nimi - ważne
  3. Wprowadzenie do UML
  4. Event Storming
  5. Tradycyjne i zwinne metodyki wytwarzania oprogramowania
    1. Model kaskadowy, iteracyjno-przyrostowy, równoległy i inne
    2. SCRUM
    3. Czy dodać trochę o Programowanie ekstremalne (XP)
    4. czy dodać umowy time&material i fixed price
  6. Praca inżynierska
    1. Zawartość i wymagania
    2. Szablon pracy: Word, PDF, TeX
    3. Krótko o strukturze IMRaD
    4. Egzamin inżynierski
  7. Zespół. Role w zespole (teoria Belbina)
  8. Katalog wzorców projektowych Gangu Czworga (implementacja w C++ lub w C#)
  9. 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. Narzędzia prototypowania i projektowania interfejsu aplikacji
    1. Justinmind Prototyper (WWW: https://www.justinmind.com/)
    2. Microsoft Blend (Visual Studio)
  11. 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 lato 2017
Kod źródłowy lato 2018
Kod źródłowy lato 2019
Kod źródłowy lato 2020

Filmy:
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

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]

Linki do materiałów:
Jerzy Nawrocki - wykład Inżynieria oprogramowania na MIMUW (ważniak)
Jerzy Nawrocki - Zaawansowana inżynieria oprogramowania

Mikrousługi: Martin Fowler Microservices [html]
Michał Aniserowicz O mikroserwisach mikro-fakty i mikro-mity

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