- Nazwa przedmiotu:
- Sztuka wytwarzania oprogramowania
- Koordynator przedmiotu:
- Rajmund Kożuszek
- Status przedmiotu:
- Obowiązkowy
- Poziom kształcenia:
- Studia I stopnia
- Program:
- Informatyka
- Grupa przedmiotów:
- Przedmioty techniczne
- Kod przedmiotu:
- SWO
- Semestr nominalny:
- 4 / rok ak. 2021/2022
- Liczba punktów ECTS:
- 4
- Liczba godzin pracy studenta związanych z osiągnięciem efektów uczenia się:
- 1. Liczba godzin kontaktowych - 50 godz., w tym
a. obecność na wykładach 30 godz.
b. obecność na zajęciach laboratoryjnych 16 godz.
c. udział w konsultacjach związanych z realizacją przedmiotu 4 godz.
2. Praca własna studenta - 60 godz., w tym:
a. analiza literatury, dokumentacji, materiałów wykładowych związana z przygotowaniem do kolejnych wykładów: 20 godz.
b. instalacja oprogramowania, analiza dokumentacji, eksperymenty, związane z przygotowaniem się do laboratorium: 30 godz.
c. przygotowanie do kolokwiów: 10 godz.
Łączny nakład pracy studenta wynosi 110 godz, co odpowiada 4 pkt. ECTS
- Liczba punktów ECTS na zajęciach wymagających bezpośredniego udziału nauczycieli akademickich:
- 2 pkt. ECTS, 50 godz. kontaktowych
- Język prowadzenia zajęć:
- polski
- Liczba punktów ECTS, którą student uzyskuje w ramach zajęć o charakterze praktycznym:
- 1,75 pkt. ECTS, 30 + 16 = 46 godz. realizacji ćwiczeń
- Formy zajęć i ich wymiar w semestrze:
-
- Wykład30h
- Ćwiczenia0h
- Laboratorium15h
- Projekt0h
- Lekcje komputerowe0h
- Wymagania wstępne:
- Programowanie obiektowe, Systemy operacyjne
- Limit liczby studentów:
- 150
- Cel przedmiotu:
- Przedmiot ten ma na celu nauczenie podstaw technik i dobrych praktyk stosowanych w przemysłowym wytwarzaniu oprogramowania. Nacisk położony jest na pracę projektanta kodu i programisty rozbudowanego systemu informatycznego, ale zakres przedmiotu wykracza poza rozwiązywanie problemów programistycznych, ukazując kodowanie jako element większej całości. Student po zakończeniu przedmiotu będzie mógł wykazać się wiedzą z zakresu stosowanych rozwiązań inżynieryjnych i metodyk pracy wykorzystywanych w procesie wytwarzania i utrzymania złożonych systemów informatycznych. Student zdobędzie umiejętności z zakresu ustandaryzowanego rozwiązywania częstych problemów inżynieryjnych, oceny jakości kodu i metod jej poprawy, pracy nad istniejącym kodem oraz technik stosowanych dla długofalowego utrzymania wysokiej wiarygodności i jakości oprogramowania. Student zapozna się także z różnorodnymi narzędziami i kompleksowymi środowiskami wspomagającymi proces wytwarzania oprogramowania oraz technikami pracy w zespole programistycznym.
- Treści kształcenia:
- WYKŁADY:
1. Wprowadzenie (2 godz.)
Regulamin i informacje o przedmiocie. Potok wytwarzania oprogramowania - powtórzenie i rozwinięcie, od edytora, poprzez repozytorium kodu do narzędzi do ciągłego integrowania i dostarczania oprogramowania (CI/CD). Omówienie typowych narzędzi, git, Jenkins.
2. Styl kodowania (4 godz.)
Techniki pracy w zespole programistów (rewizje kodu i mentor), rola testów w procesie wytwarzania oprogramowania, testy jednostkowe. Zaawansowane techniki stosowane w programowaniu obiektowym - SOLID. Czysty kod (Clean Code, Lean Development). Tworzenie oprogramowania w oparciu o testy (TDD).
3. Obiektowe wzorce projektowe (4 godz.)
Zalety stosowania wzorców projektowych i poprawne ich aplikowania. Antywzorce. Omówienie wzorców: kompozyt, most, fabryki, singleton, obserwator, model-widok-kontroler, dekorator, adapter, iterator, strategia, wizytator, wielometoda, komenda, fasada i inne.
4. Współbieżne wzorce projektowe (6 godz).
Stosowanie wzorców do rozwiązywania problemów współbieżnych. Asynchroniczność a wielowątkowość i zrównoleglenie wykonania. Pętla zdarzeń, asynchroniczna obsługa urządzeń i asynchroniczne przetwarzanie danych. Skalowalność. Komunikacja międzywątkowa i międzyprocesowa.
5. Monitorowanie aplikacji (1 godz.)
Logowanie i śledzenie pracy programu. Automatyczne reagowanie na błędy.
6. Analiza aplikacji (2 godz.)
Debugowanie, profilowanie i badanie uruchomionej aplikacji. Automatyzacja wykrywania problemów czasu wykonania.
7. Analiza kodu (2 godz.)
Analiza statyczna kodu, metryki kodu, pomiar pokrycia, ocena jakości kodu i testów.
8. Refaktoring (4 godz.)
Wykrywanie “zapachów” kodu, techniki poprawy jakości kodu. Utrzymywanie dużych projektów i praca z kodem zastanym.
9. Systemy heterogeniczne (2 godz.)
Tworzenie aplikacji, gdzie różne moduły są implementowane w różnych językach programowania, przykład - łączenie Pythona i C++, Javy i C++, R i C++. Różne techniki łączenia systemów, problemy architektoniczne i techniczne.
10. Zasoby internetowe (1 godz.)
Konferencje i czasopisma poświęcone programowaniu, standardy języków programowania. Umiejętne wykorzystanie dostępnych zasobów.
LABORATORIA:
1. Zapoznanie się z podstawowymi narzędziami. Zaawansowane wykorzystanie narzędzia git. Obsługa przygotowanego potoku. Praca w parach i rewizja kodu.
2. Przygotowanie własnego projektu i środowiska dla niego. Zestawienie potoku CI/CD dla projektu, z testami i walidacją.
3. Profilowanie i debugowanie złożonej aplikacji. Poszukiwanie przyczyn błędów i wykrywanie miejsc potencjalnej optymalizacji.
4. Refaktoring istniejącego kodu. Praca z zastanym kodem. Walidacja działania z wykorzystaniem istniejącego potoku.
- Metody oceny:
- Realizacja przedmiotu obejmuje następujące formy zajęć:
- wykład - 2 godziny tygodniowo, na którym, oprócz tradycyjnego omawiania zagadnień z wykorzystaniem slajdów, będą prezentowane przykłady tworzenia kodu źródłowego kodu w czasie rzeczywistym
- zajęcia laboratoryjne w wymiarze 4 godz.; w ramach zajęć studenci samodzielnie, pod opieką prowadzącego, w grupach dwuosobowych będą realizować wskazane ćwiczenia.
Sprawdzanie założonych efektów kształcenia realizowane jest przez:
- ocenę umiejętności i wiedzy wykazanych w trakcie realizacji zadań laboratoryjnych,
- ocenę wiedzy wykazanej na dwóch kolokwiach pisemnych.
- Egzamin:
- nie
- Literatura:
- 1. Andrew Hunt, David Thomas - Pragmatyczny programista. Od czeladnika do mistrza. Helion 2014
2. Robert C. Martin - Czysty kod. Podręcznik dobrego programisty. Helion 2010
3. Robert C. Martin - Mistrz czystego kodu. Kodeks postępowania profesjonalnych programistów. Helion 2013
4. Erich Gamma et al. - Wzorce projektowe. Helion 2010
5. Martin Fowler - Refaktoryzacja. Ulepszanie struktury istniejącego kodu. Helion 2011
- Witryna www przedmiotu:
- https://usosweb.usos.pw.edu.pl/kontroler.php?_action=katalog2/przedmioty/pokazPrzedmiot&prz_kod=103A-INxxx-ISP-SWO
- Uwagi:
- (-)
Efekty uczenia się
Profil ogólnoakademicki - wiedza
- Charakterystyka W01
- ma uporządkowaną wiedzę na temat potoku wytwarzania oprogramowania i użytych w nim narzędzi
Weryfikacja: kolokwium, laboratorium
Powiązane charakterystyki kierunkowe:
W08
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
- Charakterystyka W02
- zna techniki zapewniania jakości oprogramowania w ramach pracy w wieloosobowych zespołach programistów
Weryfikacja: kolokwium, laboratorium
Powiązane charakterystyki kierunkowe:
W09
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
- Charakterystyka W03
- zna reguły SOLID stosowane do poprawy jakości kodu i architektury
Weryfikacja: kolokwium, laboratorium
Powiązane charakterystyki kierunkowe:
W08, W09
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
- Charakterystyka W04
- zna różnorodne wzorce projektowe (konstrukcyjne, strukturalne i operacyjne)
Weryfikacja: kolokwium, laboratorium
Powiązane charakterystyki kierunkowe:
W09
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
- Charakterystyka W05
- zna współbieżne wzorce projektowe i posiada wiedzę o budowaniu wydajnych aplikacji współbieżnych
Weryfikacja: kolokwium, laboratorium
Powiązane charakterystyki kierunkowe:
W09
Powiązane charakterystyki obszarowe:
III.P6S_WG, P6U_W, I.P6S_WG.o
- Charakterystyka W06
- zna narzędzia i techniki monitorowania i badania działania aplikacji
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
W08, W09
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
- Charakterystyka W07
- zna metody rozpoznawania niedoskonałości kodu i techniki jego naprawy
Weryfikacja: kolokwium, laboratorium
Powiązane charakterystyki kierunkowe:
W08, W09
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
- Charakterystyka W08
- zna podstawy reguł tworzenia systemów heterogenicznych
Weryfikacja: kolokwium, laboratorium
Powiązane charakterystyki kierunkowe:
W08, W09
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
- Charakterystyka W09
- zna techniki i narzędzia do analizy i oceny kodu programów
Weryfikacja: kolokwium, laboratorium
Powiązane charakterystyki kierunkowe:
W08, W09
Powiązane charakterystyki obszarowe:
P6U_W, I.P6S_WG.o, III.P6S_WG
Profil ogólnoakademicki - umiejętności
- Charakterystyka U01
- potrafi wybrać i skonfigurować zestaw narzędzi potrzebnych do stworzenia potoku wytwarzania i walidacji złożonego systemu
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
U02, U06, U01
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U02
- potrafi stosować różnorodne wzorce projektowe do rozwiązywania problemów programistycznych i architektonicznych
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
U01, U02
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U03
- potrafi wykorzystywać techniki pracy w zespole programistycznym w celu podnoszenia jakości oprogramowania
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
U02, U08
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o, I.P6S_UO
- Charakterystyka U04
- potrafi samodzielnie wykorzystać dokumentację narzędzi w celu dostosowania ich działania do konkretnych potrzeb
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
U01, U02, U12
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o, I.P6S_UU
- Charakterystyka U05
- umie przebadać kod oraz działającą aplikację pod kątem jej wydajności i przyczyn problemów z działaniem
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
U03, U01
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
- Charakterystyka U06
- umie rozpoznać miejsca w kodzie wymagające poprawki i odpowiednio je refaktoryzować
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
U01, U02
Powiązane charakterystyki obszarowe:
P6U_U, I.P6S_UW.o, III.P6S_UW.o
Profil ogólnoakademicki - kompetencje społeczne
- Charakterystyka K01
- rozumie potrzebę stałego aktualizowania i wzbogacania posiadanej wiedzy o technikach i narzędziach stosowanych w wytwarzaniu oprogramowania
Weryfikacja: kolokwium, laboratorium
Powiązane charakterystyki kierunkowe:
K01, K03
Powiązane charakterystyki obszarowe:
P6U_K, I.P6S_KK, I.P6S_KR
- Charakterystyka K02
- ma świadomość konieczności komunikowania się z otoczeniem, w szczególności z zespołem, ale także współpracownikami nie będącymi programistami, w sposób zrozumiały dla odbiorcy
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
K05
Powiązane charakterystyki obszarowe:
P6U_K, I.P6S_KO
- Charakterystyka K03
- umie samodzielnie pozyskiwać dodatkowe informacje o dostępnych narzędziach i technikach wytwarzania oprogramowania
Weryfikacja: laboratorium
Powiązane charakterystyki kierunkowe:
K01, K03
Powiązane charakterystyki obszarowe:
P6U_K, I.P6S_KK, I.P6S_KR