Inżynieria I Andrzej Jaszkiewicz Kontakt Andrzej Jaszkiewicz p. 8, CW Berdychowo tel. 66 52 933 ajaszkiewicz@cs.put.poznan.pl Rynek 2008 Świat 304 miliardy $ (451 miliardów 2013F) Bez wytwarzanego na własne potrzeby Wzrost 6.5% rocznie W UE 60-70% jest wytwarzane w firmach, dla których nie jest to główną działalnością Podejście amatorskie a inżynierskie Co by tu wymyślić!? Do pracy. Definicje inżynierii Duże systemy wymagające pracy wielu osób praca grupowa Definicja inżynierii Wiedza techniczna,, dotycząca wszystkich faz cyklu życia,, której celem jest uzyskanie wysokiej jakości produktu -. Wielowersyjność 1
Jakość produktu/ Użyteczność/funkcjonalność (usefulness) Niezawodność (reliability) Ergonomia (usability) Efektywność (efficiency) Łatwość konserwacji/utrzymania/modyfikacji (maintability) Koszt Bezpieczeństwo użytkownika (user safety) Wygląd Literatura A. Jaszkiewicz, Inżynieria, Helion, 1997. G. Booch, J. Rambaugh, I. Jacobson, UML przewodnik użytkownika, WNT, 2000. M. Fowler, K. Scott, UML w kropelce, Oficyna Wydawnicza LTP, 2002 S. Maguire, Niezawodność, Helion, 2002 J. W. Cooper, Java. Wzorce projektowe, Helion, 2001 Literatura Sommerville Ian Inżynieria, WNT, 2003. Pressman Roger S. Praktyczne podejście do inżynierii, WNT, 2004. Warmer Jos, Kleppe Anneke, Inżynieria OCL precyzyjne modelowanie w UML, WNT, 2003. Kernighan W. Brian, Pike Rob Inżynieria. Lekcja, WNT, 2002. Literatura UML. Inżynieria. Wydanie IIUML. Inżynieria. Wydanie II, P. Stevens, Helion, Gliwice, 2007 E. Gamma, R. Helm, R. Johnson, J. Vlissides, Wzorce projektowe. Elementy obiektowego wielokrotnego użytku, WNT, 2008 K. Sacha, Inżynieria, PWN, 2010. R.C. Martin, M. Martin, Agile, programowanie zwinne, Helion, 2008. Program wykładu - semestr I Wprowadzenie w tym podstawowe modele cyklu życia Analiza/modelowanie systemów z wykorzystaniem języka UML Analiza/modelowanie systemów z wykorzystaniem języka UML UML jako narzędzie projektowania i dokumentowania Projektowanie Projektowanie Wzorce projektowe Refaktoryzacja Niezawodność unikanie błędów, odporność na błędy Niezawodność testowanie Konserwacja i ponowne wykorzystanie, dokumentacja techniczna i użytkowa Narzędzia inżynierii. Zarządzanie zmianami i konfiguracją Kolokwium zaliczeniowe Trochę historii - Rozwój technik wytwarzania Lata 50-te Sprzęt o bardzo ograniczonych możliwościach Ograniczone zastosowania Małe programy Programy pisane często dla własnych potrzeb lub potrzeb dobrze znanych osób Dobrze wyspecyfikowane zadania 2
Rozwój technik wytwarzania Lata 60-te Profesjonalni programiści Nowe języki programowania COBOL, Fortran, Algol Sprzęt o dużo większych możliwościach, np. pamięć wirtualna Nowe zastosowania np. w biznesie Próba realizacji wielu dużych przedsięwzięć programistycznych Kryzys Rozwój technik wytwarzania nie nadąża za rozwojem sprzętu komputerowego Czy kryzys trwa do dzisiaj? Nadal większość przedsięwzięć przekracza czas i/lub budżet (choć trend jest pozytywny) Około 25% przedsięwzięć programistycznych nie jest kończona 90% firm przyznaje, że dość często zdarzają im się opóźnienia przedsięwzięć Powszechna akceptacja kiepskiej jakości (w pewnych obszarach) Zależność osiągnięcia- oczekiwania w wytwarzaniu Efekty Kryzys Oczekiwania Rzeczywiste osiągnięcia Czas Przyczyny kryzysu Duża złożoność systemów informatycznych Złożoność, zmienność, nieadekwatność Niepowtarzalność poszczególnych przedsięwzięć Nieprzejrzystość procesu budowy Pozorna łatwość wytwarzania i modyfikowania Potrzeba kreatywności Czynnik ludzki Mało wymagający rynek Niedoskonałość narzędzi Początek inżynierii 1968 NATO Conference on Software Engineering Zakres inżynierii Wytwarzanie i innych produktów (np. dokumentacji) Zarządzanie wytwarzaniem 3
Modele cyklu życia Uporządkowanie prac. Ustalenie kolejności prac. Planowanie i monitorowanie realizacji. Programowanie odkrywcze Ogólne określenie Ogólny projekt Budowa systemu Ocena systemu Wdrożenie Tak System poprawny Nie Określenie Model kaskadowy Dodatkowe fazy w modelu kaskadowym Projektowanie Testowanie Konserwacja Co zastępuje testy w innych dziedzinach techniki? Certyfikaty Zapasy bezpieczeństwa Symulacje Prototypy techniczne spike solutions Określenie Ścisłe i elastyczne rozumienie modelu kaskadowego Projektowanie Testowanie Konserwacja 4
pracochłonność 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% Przykład elastycznego podejścia do modelu kaskadowego analiza projektowanie implementacja testowanie wdrażanie odniesienie do 12 modelu wodspadowego 10 wdrożenie zapewnianie jakości 8 implementacja projektowanie 6 analiza współpraca z odbiorcą zarządzanie konfiguracją 4 zarządzanie projektem liczba pracowników 2 pracownicy Wady i zalety modelu kaskadowego (rozumianego ściśle) + Łatwość zarządzania planowanie i monitorowanie - Wysoki koszt błędów popełnionych we wstępnych fazach Koszt błędu w wymaganiach 100-10001000 razy większy od kosztu błędu programistycznego! - Długa przerwa w kontaktach z klientem - Nie lubiany przez wykonawców 0% 0 1 2 3 4 5 6 7 8 9 10 czas Prototypowanie Cel lepsze określenie Fazy: Ogólne określenie Budowa prototypu Weryfikacja prototypu przez klienta Pełne określenie Realizacja pełnego systemu zgodnie z modelem kaskadowym lub innym profesjonalnym modelem Sposoby budowy prototypu Prototyp musi być zbudowany szybko i niskim kosztem Niepełna realizacja Języki wysokiego poziomu Wykorzystanie gotowych komponentów Generatory interfejsu użytkownika Szybkie programowanie (quick-and-dirtydirty programming) Papier Programowanie odkrywcze Wady i zalety prototypowania + Mniejsze ryzyko popełnienia kosztownych błędów we wczesnych fazach. + Możliwość szybkiej demonstracji prototypu i szkolenia użytkowników. - Koszt budowy prototypu, który może się nie zwrócić. - Możliwość nieporozumień z klientem. Realizacja przyrostowa Określenie i wstępny projekt Wybór przyrostu - podzbioru funkcji Realizacja przyrostu Proces realizowany iteracyjnie Wdrożenie przyrostu 5
Wady i zalety realizacji przyrostowej + Możliwość wcześniejszego korzystania z pewnych funkcji systemu + Skrócenie przerw w kontaktach z klientem + Możliwość elastycznego reagowania na opóźnienia - Kłopoty z integracją oddzielnie realizowanych modułów Realizacja przyrostowa Zalecana w większości żwawych (agile) metodyk np. w programowaniu ekstremalnym często małe przyrosty (kilka tygodni) Dobrze opisuje realizację wielu (zwłaszcza udanych) projektów wolnego (free/open source) Łączenie realizacji przyrostowej z prototypowaniem 1. Jeden prototyp na początku, potem realizacja przyrostowa 2. Prototyp w ramach każdego przyrostu Ogólne określenie i projekt architektury Cykl życia w lekich metodykach Wybór przyrostu (podzbioru funkcji) Analiza i projektowanie i testy jednostkowe Opracowanie przypadków testowych Integracja i testy Wdrożenie przyrostu Refaktoryzacja Rational unified process Rational unified process Faza rozpoczęcia (Inception phase) Faza opracowywania (Elaboration phase) Faza konstrukcji (Construction phase) Faza przekazania systemu (Transition phase) 6
Wybór modelu do konkretnego przedsięwzięcia Duże przedsięwzięcia, np. > 6 miesięcy realizacja przyrostowa, mniejsze m. Kaskadowy W żwawych metodykach także dla mniejszych przedsięwzięć Trudności w określeniu : nowatorski system z punktu widzenia klienta mała znajomość dziedziny problemu przez wykonawcę: Jeżeli tak, to prototypowanie Typowe zasady nowoczesnych metodyk Praca zespołowa z udziałem klienta Opowieści (scenariusze) użytkownika Krótkie cykle Plan iteracji i wydania Testy akceptacyjne na bazie opowieści użytkownika Programowanie w parach Wytwarzanie sterowane testami Typowe zasady nowoczesnych metodyk Wspólna własność Ciągła integracja Równe tempo Prosty projekt, metafora Refaktoryzacja 7