dr inż. Rafał Deja
[email protected]
Zaliczenie ◦ Obecność ◦ Aktywny udział ◦ Egzamin
A. Jaszkiewicz – Inżynieria oprogramowania, Helion 1997, 2000. R. Pressman – Inżynieria oprogramowania, WNT 2004. I. Somerville – Inżynieria oprogramowania, WNT 2003. J. Górski – Inżynieria oprogramowania w projekcie informatycznym, MIKOM 1999
Craig Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software Martin Fowler, UML Distilled: A Brief Guide to the Standard Object Modeling Language Internet …
IEEE Software Development, 1994, p.65:
PC Week, 1995, p.68:
Failed technology projects in Investor’s Business Daily, Los Angeles, 1995, p. A8
◦ Utrzymanie 10 mld. linii istniejących programów kosztuje 70 mld. $ rocznie ◦ 31% nowych projektów jest anulowane przed zakończeniem; koszt 81 mld. $
◦ 31% projektów jest anulowane jeszcze w trakcie konstrukcji ◦ 53% projektów jest kończone z przekroczeniem zaplanowanego czasu, budżetu i z ograniczeniem planowanego zbioru funkcji systemu ◦ Zaledwie 16% projektów jest kończone w zaplanowanym czasie, bez przekroczenia budżetu i okrajania funkcjonalności
Ed Yourdon’s Guerilla Programmer, Jul 95 ◦ Średnia wydajność wykonawców oprogramowania spadła o 13% w ciągu dwóch lat; ◦ stosunek najlepszej wydajności do najgorszej od 1990 r. rozszerzył się od 4:1 do 600:1.
Lata
Programy
Błędy
Inżynieria oprogramowania
1950-1960
Programy dla siebie
Niewielkie błędy
Nie istnieje
1960-1970
Duże systemy
Kosztowne błędy, Rodzi się początki kryzysu
1970-1990
Skomplikowane systemy oraz komputery dla wszystkich
wyniszczające błędy uznanie błędów za rzecz zwykłą
Rozkwit
1990-…
Nic już nie możemy bez komputerów
kryzys oprogramowania w rozkwicie
niezbędnie potrzebna
Zarówno wytwarzanie, jak i utrzymywanie oprogramowania kosztuje zbyt dużo. Oprogramowanie jest zawodne. Współdziałanie pomiędzy produktami programistycznymi stanowi poważny problem.
Uzależnienie organizacji od systemów komputerowych i przyjętych technologii przetwarzania informacji, które nie są stabilne w długim horyzoncie czasowym. Szybkie zmiany w przemyśle informatycznym (postęp w zakresie narzędzi i metod wytwarzania). Znaczące zmiany w przemyśle informatycznym następują co 5-7 miesięcy w porównaniu do 5-7 lat w innych dziedzinach. Uciążliwość i długotrwałość procesów produkcji i pielęgnacji oprogramowania.
Sprzeczność pomiędzy odpowiedzialnością, jaka spoczywa na współczesnych SI, a ich zawodnością wynikającą ze złożoności i ciągle niedojrzałych metod tworzenia i weryfikacji oprogramowania. Wysokie prawdopodobieństwo niepowodzenia projektu programistycznego. Niska kultura ponownego użycia wytworzonych komponentów projektów i oprogramowania (reuse); niski stopień powtarzalności poszczególnych przedsięwzięć. Długi i kosztowny cykl życia SI, wymagający stałych (często globalnych) zmian.
Podstawowym powodem kryzysu oprogramowania jest złożoność produktów informatyki i procesów ich wytwarzania.
Programista nie może panować na raz nad więcej niż jednym ekranem tekstu programu Testowanie może wykazać błędność programu, ale nie może wykazać jego bezbłędności Nie ma programów bezbłędnych; są tylko takie, w których dotąd nie znaleziono błędu Inżynieria oprogramowania jest odpowiedzią na złożoność procesu wytwarzania i utrzymania oprogramowania.
Jest działem informatyki zajmującym się wiedzą techniczną dotycząca wszystkich faz cyklu życia oprogramowania. Traktuje oprogramowanie jako produkt, który ma spełniać potrzeby techniczne, ekonomiczne lub społeczne. To zastosowanie metod naukowych i matematycznych, dzięki czemu możliwości sprzętu komputerowego stają się użyteczne dla ludzi dzięki programom, procedurom i odpowiedniej dokumentacji [Boehm-S.E. Economics 1981] To wiedza techniczna dotycząca wszystkich faz cyklu życia oprogramowania, której celem jest uzyskanie wysokiej jakości produktu - oprogramowania [Jaszkiewicz-I.O. 1997] Dyscyplina, której celem jest przyczynienie się do produkowania oprogramowania o dobrej jakości, oddawanego na czas, mieszczącego się w budżecie i spełniającego potrzeby użytkowników. To konsekwentne stosowanie ustalonych przez naukę i zweryfikowanych w praktyce zasad, metod i środków w pracach nad wytwarzaniem i konserwacją oprogramowania oraz ich organizowanie ze względu na cele ekonomiczno-techniczne.
Zgodnie z wytycznymi IEEE inżynieria oprogramowania jest to zastosowanie systematycznego, zdyscyplinowanego, ilościowego podejścia do rozwoju, eksploatacji i utrzymania oprogramowania. „Guide to the Software Engineering Body of Knowledge” - 2004 Version. IEEE Computer Society
Termin "inżynieria oprogramowania" po raz pierwszy został użyty na przełomie lat 1950/60 (ale oficjalnie za narodziny tej dyscypliny podaje się lata 1968 i 1969, w których miały miejsce dwie konferencje sponsorowane przez NATO, odpowiednio w Garmisch i Rzymie).
IEEE Computer Society Association for Computing Machinery (w skrócie ACM)
Standard nauczania zwany Computing Curricula 2001
Struktury dyskretne Podstawy programowania Algorytmy i złożoność Architektura systemów komputerowych Systemy operacyjne Technologie sieciowe Języki i paradygmaty programowania Komunikacja człowiek
komputer Grafika komputerowa Sztuczna inteligencja Bazy danych Problemy społeczne i zawodowe Inżynieria oprogramowania Nauki obliczeniowe
Software requirements (Wymagania) Software design (Projektowanie) Software development (Wytwarzanie oprogramowania) Software testing (Testowanie) Software maintenance (Utrzymanie) Software configuration management (Zarządzanie zmianą/konfiguracją) Software engineering management (Zarządzanie projektem informatycznym) Software development process (Proces wytwarzania oprogramowania) Software engineering tools (Narzędzia) Software quality (Jakość oprogramowania)
Przedmiot obejmuje następujące jednostki wiedzy z zakresu inżynierii oprogramowania, wymienione w standardzie kształcenia dla studiów I stopnia na kierunku Informatyka: ◦ ◦ ◦ ◦ ◦ ◦
projektowanie oprogramowania; procesy wytwarzania oprogramowania; wymagania i ich specyfikacja; walidacja i testowanie oprogramowania; ewolucja oprogramowania; zarządzanie przedsięwzięciem programistycznym.