Inżynieria oprogramowania to dziedzina inżynierii, która obejmuje wszystkie aspekty tworzenia oprogramowania.
Produkty programowe składają się z utworzonych programów oraz związanej z nimi dokumentacji. Zasadniczymi atrybutami produktów są zdatność do pielęgnacji, niezawodność, efektywność i użyteczność.
Proces tworzenia oprogramowania składa się z czynności prowadzących do utworzenia produktu programowego. Głównymi czynnościami są specyfikacja oprogramowania, tworzenie, zatwierdzenie i ewolucja.
Metody to uporządkowane sposoby budowy oprogramowania. Obejmują sugestie wyboru procesu tworzenia, mutacji, reguły określające, jakie opisy systemu opracować, a także wskazówki projektowe.
Narzędzia CASE to systemy komputerowe, które są przeznaczone do wspomagania rutynowych czynności procesu tworzenia takich jak praca nad diagramami projektowymi, sprawdzanie poprawności diagramów oraz śledzenie wykonanych testów.
Inżynierowie oprogramowania ponoszą odpowiedzialność przed kolegami po fachu i społeczeństwem. Nie powinni zajmować się jedynie aspektami technicznymi Stowarzyszenia zawodowe publikują kodeksy postępowania , które definiują standardy zachowania oczekiwane od swoich członków.
Inżynieria systemów jest złożonym i trudnym procesem, który wymaga wkładu pracy specjalistów wielu dziedzin inżynierii.
Pojawiające się właściwości systemu są charakterystykami systemu jako całości, a nie jego części składowych.
Architektury systemów zwykle prezentuje się na diagramach blokowych, przedstawiających główne podsystemy i związki między nimi.
Typami komponentów funkcjonalnych systemu są komponenty detektorowe, komponenty detektorowe, komponenty obliczeniowe, komponenty koordynujące, komponenty komunikacyjne i komponenty interfejsu.
Proces inżynierii systemów obejmuje specyfikację, projektowanie, tworzenie, integrację i testowanie.
Proces zaopatrywania w system obejmuje specyfikację systemu, ogłoszenie przetargu, wybór dostawcy i zawarcie kontraktu na dostawę systemu.
Procesy tworzenia oprogramowania to czynności zmierzające do wyprodukowania systemu. Modele procesów tworzenia oprogramowania to abstrakcyjne reprezentacje tych procesów.
Wszystkie procesy tworzenia oprogramowania obejmują specyfikowanie, projektowanie, implementację, zatwierdzanie i ewolucje oprogramowania.
Ogólne modele procesów opisują organizację procesu tworzenia oprogramowania. Przykładami takich modeli są: model kaskadowy, tworzenie ewolucyjne, tworzenie formalne systemów oraz tworzenie z użyciem wielokrotnym.
W modelach iteracyjnych procesów tworzenie oprogramowania przedstawia się w postaci cyklu czynności. Zaletą tego podejścia jest uniknięcie zbyt wczesnego zatwierdzenia specyfikacji lub projektu. Przykładami modeli iteracyjnych są tworzenie przyrostowe i model spiralny.
Inżynieria wymagań to proces opracowywania specyfikacji oprogramowania. Obejmuje przygotowanie specyfikacji zrozumiałej dla użytkowników systemu oraz bardziej szczegółowej specyfikacji dla budowniczych systemu.
Proces projektowania i implementowania polega na przekształceniu specyfikacji wymagań w działający system oprogramowania. Metody systematycznego projektowania mogą być elementem tego przekształcenia.
Zatwierdzenie oprogramowania to proces sprawdzania, czy system jest zgodny ze swoją specyfikacją oraz czy spełnia rzeczywiste potrzeby użytkowników.
Ewolucja oprogramowania polega na modyfikowaniu istniejącego systemu oprogramowania, tak aby spełniał nowe wymagania. Takie podejście staje się standardem tworzenia oprogramowania w wypadku małych i średnich przedsięwzięć.
Technologia CASE zapewnia zautomatyzowane wspomaganie procesu tworzenia oprogramowania. Narzędzia CASE wspomagają poszczególne czynności procesu. Warsztaty CASE wspomagają zbiory powiązanych czynności. Środowiska CASE wspomagają większość lub nawet wszystkie czynności procesu tworzenia oprogramowania.
Dobre zarządzanie przedsięwzięciami programistycznymi jest niezbędne, jeśli przedsięwzięcia inżynierii oprogramowania mają być ukończone zgodnie z harmonogramem i w ramach budżetu.
Zarządzanie programowaniem istotnie różni się od zarządzania w innych dziedzinach inżynierii. Oprogramowanie jest nieuchwytne. Przedsięwzięcia mogą być nowatorskie lub innowacyjne, nie ma więc odpowiedniego zasobu doświadczeń pomagających w zarządzaniu nimi.
Zarządzający oprogramowaniem mają do odegrania wiele różnych ról. Najbardziej znaczącymi są planowanie przedsięwzięcia, szacowanie i tworzenie harmonogramu. Planowanie i tworzenie harmonogramu są procesami iteracyjnymi; są wykonywane przez cały czas trwania przedsięwzięcia. W miarę napływu coraz dokładniejszych informacji, plany i harmonogramy muszą być korygowane.
Etap w przedsięwzięciu jest przewidywalnym rezultatem czynności, który oznacza przedstawienie kierownictwu pewnego formalnego raportu. Etapy powinny odbywać się regularnie przez całe przedsięwzięcie programistyczne. Produkt jest związany z odbiorem i przekazaniem go klientowi przedsięwzięcia.
Tworzenie harmonogramu przedsięwzięcia polega na opracowaniu rozmaitych graficznych przedstawień fragmentów planu przedsięwzięcia. Są nimi m.in. wykresy czynności, na których obrazuje się zależności między czynnościami przedsięwzięcia oraz wykresy paskowe ukazujące czas rwania czynności.
Należy zidentyfikować i ocenić prawdopodobieństwo oraz konsekwencje głównych zagrożeń przedsięwzięcia. W wypadku zagrożeń prawdopodobnych i potencjalnie poważnych należy opracować plany unikania, opanowania lub przeciwdziałania tym zagrożeniom. Zagrożenia należy otwarcie omawiać na każdym menedżerskim spotkaniu w sprawie postępów przedsięwzięcia.
W wymaganiach stawianych systemowi oprogramowania ustala się co system powinien robić, oraz definiuje ograniczenia działania i implementację.
Wymagania funkcjonalne to charakterystyki usług, które system ma oferować, albo opisy sposobu przeprowadzania pewnych obliczeń.
Wymagania niefunkcjonalne dzieli się na wymagania produktowe, które ograniczają budowany system, wymagania procesu, które dotyczą procesu tworzenia, oraz wymagania zewnętrzne. Zwykle są powiązane z pojawiającymi się właściwościami systemu, a zatem stosują się do systemu jako całości.
Wymagania użytkownika są przeznaczone dla osób, które mają używać i zaopatrywać się w system. Należy spisać je za pomocą języka naturalnego, tabel i diagramów tak, aby były zrozumiałe.
Wymagania systemowe służą do poinformowania w precyzyjny sposób o funkcjach, które system ma spełniać. Aby uniknąć niejednoznaczności, można je zapisać jakiegoś języka strukturalnego. Może to być strukturalna postać języka naturalnego, język oparty na języku oprogramowania wysokiego poziomu lub specjalny język do specyfikowania wymagań.
Dokumentacja wymagań stawianych oprogramowaniu jest uzgodnionym zapisem wymagań systemowych. Należy nadać jej odpowiednią strukturę, aby mogła być używana zarówno przez klientów systemu, jak i twórców oprogramowania.
Proces inżynierii wymagań obejmuje studium wykonalności, określanie i analizowanie wymagań, specyfikowanie wymagań, zatwierdzanie wymagań oraz zarządzanie wymaganiami.
Analizowanie wymagań to proces iteracyjny, który obejmuje rozpoznanie dziedziny, zbieranie wymagań, klasyfikację, strukturalizację, nadawanie priorytetów i zatwierdzanie.
Różni użytkownicy systemu mogą stawiać różne wymagania. Wszystkie złożone systemy należy więc analizować z kilku punktów widzenia. Punkty widzenia odpowiadają źródłom lub przeznaczeniom danych, różnym reprezentacjom systemu albo bytom spoza systemu, które korzystają z jego usług.