Inżynieria Oprogramowania Inżynieria Oprogramowania 1/36
Inżynieria Oprogramowania 2/36 Literatura 1. Gamma E. i in.: Wzorce projektowe, WNT, Warszawa 2005 2. Jaszkiewicz A.: Inżynieria oprogramowania, Helion, Gliwice 1997 3. Miles R., Hamilton K.: UML 2.0. Wprowadzenie, Helion, Gliwice 2007 4. Pressman R. S.: Praktyczne podejście do inżynierii oprogramowania, WNT, Warszawa 2004 5. Sommerville I.: Inżynieria oprogramowania, WNT, Warszawa 2003 6. Wrycza S., Marcinkowski B., Wyrzykowski K.: Język UML 2.0 w modelowaniu systemów informatycznych, Helion, Gliwice 2006
Inżynieria Oprogramowania 3/36 Plan wykładów Zagadnienia omawiane na wykładzie: Wprowadzenie do inżynierii oprogramowania. Projektowanie oprogramowania z wykorzystaniem UML. Zaawansowana inżynieria oprogramowania. Testowanie oprogramowania. Metodyka powstawania oprogramowania. Zarządzanie przedsięwzięciem informatycznym.
Inżynieria Oprogramowania 4/36 Informacje ogólne Kontakt: mail: robert.dyja@icis.pcz.pl strona: http://icis.pcz.pl/ dyja konsultacje: wtorek 10:00 12:00, piątek 11:00 12:00 Obecność na wykładach nie jest wymagana Przedmiot kończy się egzaminem pisemnym w formie testu
Inżynieria Oprogramowania 5/36 Rola inżynierii oprogramowania Gospodarki wszystkich krajów rozwiniętych polegają na oprogramowaniu. Coraz więcej systemów wymaga niezawodnego oprogramowania. Inżynieria oprogramowania zajmuje się teorią, metodami i narzędziami związanymi z wytwarzaniem oprogramowania. Obecnie wytwarzanie oprogramowania jest poważną gałęzią gospodarki narodowej rozwiniętego kraju.
Inżynieria Oprogramowania 6/36 Koszty oprogramowania Koszty oprogramowania są często dominującym składnikiem kosztów całego systemu. Zdarza się, że koszt oprogramowania znacznie przekracza samą wartość sprzętu komputerowego np. komputera osobistego. Koszt utrzymania i konserwacji oprogramowania jest większy niż koszt jego wytworzenia. Wieloletnia konserwacja oprogramowania może kosztować wielokrotnie więcej niż jego zakup. Inżynieria oprogramowania zajmuje się efektywnymi metodami wytwarzania i implementowania oprogramowania.
Inżynieria Oprogramowania 7/36 Definicja oprogramowania Oprogramowanie to programy komputerowe, cała związana z nimi dokumentacja i dane konfiguracyjne. Rodzaje produktów oprogramowania: powszechne sprzedawane na wolnym rynku, dostosowane wykonywane na zamówienie.
Inżynieria Oprogramowania 8/36 Charakterystyczne cechy oprogramowania Oprogramowanie przetwarza informacje. Rola oprogramowania znacznie wzrosła w ciągu ostatnich 50 lat. Oprogramowanie jest wytwarzane, ale nie jest fizycznie konstruowane tak jak sprzęt. Nie występuje etap fizycznego konstruowania oprogramowania. Większość kosztów związanych z tworzeniem oprogramowania ponosi się na etapie projektowania.
Inżynieria Oprogramowania 9/36 Charakterystyczne cechy oprogramowania cd. Oprogramowanie się nie zużywa Zwiększenie awaryjności spowodowane zmianami Błędy młodości Zużycie Zużycie Zużycie Zmiana Krzywa rzeczywista Krzywa idealna Czas Czas Rysunek: Krzywa awaryjności sprzętu Rysunek: Krzywa awaryjności oprogramowania
Inżynieria Oprogramowania 10/36 Charakterystyczne cechy oprogramowania cd. Chociaż firmy komputerowe coraz chętniej korzystają z komponentów dostarczonych przez innych producentów, to jednak większość swoich produktów tworzą od podstaw. Każda dziedzina inżynierii posiada standardowe rozwiązania. Już w latach 60 tych XX wieku powstały pierwsze biblioteki podprogramów.
Inżynieria Oprogramowania 11/36 Dziedziny zastosowań oprogramowania Oprogramowanie systemowe Systemy czasu rzeczywistego Systemy informacyjne dla przedsiębiorstw Oprogramowanie inżynierskie i naukowe Systemy wbudowane Oprogramowanie komputerów osobistych Oprogramowanie internetowe
Inżynieria Oprogramowania 12/36 Właściwości dobrego oprogramowania Konkretny zbiór właściwości zależy od zastosowania, niemniej można podać ogólny zbiór właściwości. Zdolność do pielęgnacji Zdolność do ewolucji zgodnie z potrzebami klientów Niezawodność Nie powinno powodować fizycznych lub ekonomicznych katastrof w przypadku awarii Efektywność Nie powinno marnotrawić zasobów systemu takich jak pamięć czy czas procesora Użyteczność Powinno być użyteczne, bez zbędnego wysiłku ze strony użytkownika (np. interfejsy)
Inżynieria Oprogramowania 13/36 Kryzys oprogramowania Porażki zyskują znacznie większą uwagę niż sukcesy. Kryzys oprogramowania przewidziany już 50 lat temu dotąd nie nastąpił. Kłopoty związane z tworzeniem oprogramowania nie dotyczą tylko problemów z nie funkcjonującymi jak należy programami, ale przede wszystkim z ich prawidłowym tworzeniem i dalszym utrzymywaniem.
Inżynieria Oprogramowania 14/36 Mity związane z tworzeniem oprogramowania Mity kierownictwa Mamy już pełną książkę standardów i procedur postępowania. Pracownicy mają najlepsze narzędzia pracy, bo pracują na najnowszych komputerach. Jeśli prace się opóźniają zawsze można przydzielić do zadania więcej programistów. Zlecenie napisania programu innej firmie zwalnia z myślenia o nim. Ogólne określenie wystarczy do rozpoczęcia prac. Szczegóły można dopracować później. Wymagania wobec systemu wciąż się zmieniają, ale to nie problem, bo oprogramowanie jest elastyczne i łatwo je zmienić.
Inżynieria Oprogramowania 15/36 Mity związane z tworzeniem oprogramowania Mity informatyków Po napisaniu i uruchomieniu programu praca jest wykonana. Jedynym wynikiem pracy nad oprogramowaniem jest działający program komputerowy. Inżynieria oprogramowania zmusi programistów do tworzenia przepastnych, zbędnych dokumentów i nieuchronnie spowolni pracę.
Inżynieria Oprogramowania 16/36 Definicja inżynierii oprogramowania Jest to dziedzina inżynierii, która obejmuje wszystkie aspekty tworzenia oprogramowania od fazy początkowej do jego pielęgnacji, Inżynierowie oprogramowania pracują w sposób systematyczny i uporządkowany, ponieważ jest to najskuteczniejszy sposób tworzenia oprogramowania wysokiej jakości.
Inżynieria Oprogramowania 17/36 Jaka jest różnica pomiędzy inżynierią oprogramowania a informatyką? Zasadniczo informatyka obejmuje teorie i podstawowe zasady działania komputerów. Inżynieria oprogramowania obejmuje praktyczne problemy związane z tworzeniem oprogramowania. Z jednej strony inżynier programowania powinien znać teorie informatyczne, z drugiej jednak nie zawsze przystają one do rzeczywistości.
Inżynieria Oprogramowania 18/36 Proces tworzenia oprogramowania Jest to zbiór czynności i związanych z nimi wyników, które zmierzają do opracowania produktu programowego. Zasadnicze czynności wspólne dla wszystkich procesów: Specyfikacja oprogramowania, Tworzenie oprogramowania, Zatwierdzanie oprogramowania, Ewolucja oprogramowania.
Inżynieria Oprogramowania 19/36 Metody inżynierii oprogramowania Metody inżynierii oprogramowania to uporządkowane podejście do tworzenia oprogramowania, które obejmuje: Opisy modeli systemu Np. Modele obiektów, modele przepływu itp. Reguły Ograniczenia, którym podlegają modele systemu Zalecenia Heurystyki, które określają dobre zwyczaje projektantów Poradnictwo Opisy czynności, które należy wykonać
Inżynieria Oprogramowania 20/36 Modele procesu tworzenia oprogramowania Model procesu tworzenia oprogramowania Jest to uproszczona prezentacja procesu tworzenia oprogramowania. Modele ze swej natury są uproszczeniami. Przykłady ogólnych modeli (paradygmatów) tworzenia oprogramowania: model kaskadowy, model oparty na prototypowaniu, programowanie odkrywcze, realizacja przyrostowa, montaż z gotowych elementów, model spiralny.
Inżynieria Oprogramowania 21/36 Model kaskadowy Rysunek: Model kaskadowy (liniowy)
Inżynieria Oprogramowania 22/36 Model kaskadowy zalety i wady Wady: Wysoki koszt błędów popełnionych we wstępnych fazach. Długa przerwa w kontaktach z klientem. Narzucenie twórcom oprogramowania ścisłej kolejności wykonywania prac.
Inżynieria Oprogramowania 23/36 Model oparty na prototypowaniu Etapy: ogólne określenie wymagań, budowa prototypu, weryfikacja prototypu przez klienta, pełne określenie wymagań, realizacja pełnego systemu zgodnie z modelem kaskadowym.
Inżynieria Oprogramowania 24/36 Model oparty na prototypowaniu zalety i wady Zalety: lepsze określenie wymagań klienta, możliwość szybkiej demonstracji pracującej wersji systemu, możliwość szkoleń zanim zostanie zbudowany pełen system. Wady: dodatkowy koszt budowy prototypu, konieczność oczekiwania na końcowy system po akceptacji prototypu.
Inżynieria Oprogramowania 25/36 Metody budowy prototypu niepełna realizacja, języki wysokiego poziomu, wykorzystanie gotowych komponentów, szybkie programowanie (ang. quick-and-dirty), generatory interfejsu użytkownika, programowanie odkrywcze.
Inżynieria Oprogramowania 26/36 Programowanie odkrywcze Wady: Niemożliwe zachowanie sensownej struktury systemu. Testowanie tylko przy udziale klienta. Rysunek: Schemat programowania odkrywczego
Inżynieria Oprogramowania 27/36 Realizacja przyrostowa Rysunek: Realizacja przyrostowa
Inżynieria Oprogramowania 28/36 Realizacja przyrostowa zalety i wady Zalety: Skrócenie przerw w kontaktach z klientem. Możliwość wczesnego wykorzystania przez klienta dostarczonych fragmentów systemu. Możliwość elastycznego reagowania na powstałe opóźnienia. Wady: Dodatkowy koszt związany z niemożnością wydzielenia podzbioru funkcji niezależnych od pozostałych.
Inżynieria Oprogramowania 29/36 Montaż z gotowych elementów Jest to wykorzystanie: bibliotek, języków czwartej generacji, pełnych aplikacji. Metody pozyskiwania gotowych komponentów: zakup od zewnętrznych dostawców, opracowanie wyników aktualnie realizowanych przedsięwzięć tak, aby mogły być wykorzystane w kolejnych przedsięwzięciach.
Inżynieria Oprogramowania 30/36 Montaż z gotowych elementów zalety i wady Zalety: wysoka niezawodność, zmniejszenie ryzyka, efektywne wykorzystanie specjalistów, narzucenie standardów, potencjalna redukcja kosztów. Wady: dodatkowy koszt przygotowania elementów do ponownego wykorzystania, ryzyko uzależnienia się od dostawcy komponentów, niedostatki narzędzi wspomagających ten rodzaj pracy.
Rysunek: Model spiralny Inżynieria Oprogramowania 31/36 Model spiralny Planowanie Analiza ryzyka Atestowanie Konstrukc ja
Inżynieria Oprogramowania 32/36 CASE ang.(computer-aided Software Engineering) CASE obejmuje rożne programy wykorzystane do wspomagania czynności procesu tworzenia oprogramowania (np. edytory notacji, generatory kodów). upper-case Związane z początkowymi fazami tworzenia oprogramowania. lower-case Wspomagają implementację i testowanie.
Inżynieria Oprogramowania 33/36 Najistotniejsze wyzwania dla inżynierów oprogramowania Wyzwanie dziedzictwa Pielęgnacja i modyfikacja działających dużych systemów, pełniących poważne funkcje gospodarcze Wyzwanie różnorodności Wymóg działania oprogramowania w systemach rozproszonych przy rożnych typach komputerów i systemów wspomagających Wyzwanie doręczenia Wymóg dostarczanie gotowego programowania w skróconym czasie bez utraty jakości
Inżynieria Oprogramowania 34/36 Zasady zawodowej odpowiedzialności Zachowywanie tajemnicy Inżynierowie powinni zawsze dochowywać tajemnic powierzonych przez pracodawców i klientów, niezależnie od tego czy podpisano formalną umowę o ochronie tajemnicy. Kompetencje Inżynierowie nie powinni zawyżać poziomu swoich kompetencji. Nie powinni świadomie przyjmować prac, które przekraczają ich możliwości.
Inżynieria Oprogramowania 35/36 Zasady zawodowej odpowiedzialności Prawo własności intelektualnej Inżynierowie powinni znać miejscowe prawo regulujące korzystanie z własności intelektualnej. Powinni szczególnie dbać o poszanowanie intelektualnej własności swoich pracodawców i klientów. Niewłaściwe użycie komputera Inżynierowie oprogramowania nie powinni używać swoich umiejętności do niewłaściwego używania cudzych komputerów. Niewłaściwe użycie może być dość banalne (np. granie na maszynie pracodawcy) lub skrajnie poważne (rozsiewanie wirusów).
Inżynieria Oprogramowania 36/36 W wykładzie wykorzystano materiały Jaszkiewicz A.: Inżynieria oprogramowania, Helion, Gliwice 1997, Pressman R. S.: Praktyczne podejście do inżynierii oprogramowania, WNT, Warszawa 2004, Sommerville I.: Inżynieria oprogramowania, WNT, Warszawa 2003