- Nazwa przedmiotu:
- Sztuka wytwarzania oprogramowania
- Koordynator przedmiotu:
- Rajmund Kożuszek
- Status przedmiotu:
- Fakultatywny ograniczonego wyboru
- Poziom kształcenia:
- Studia II stopnia
- Program:
- Informatyka
- Grupa przedmiotów:
- Przedmioty techniczne - podstawowe
- Kod przedmiotu:
- SWO
- Semestr nominalny:
- 1 / 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ę