Inżynieria
oprogramowania
Część1: Wstęp
Ian Sommerville
Software Engineering, 9 wyd.
Sylabus
Literatura podstawowa:
1.
Ian Sommerville. Software Engineering, 10 wyd. Pearsons, 2015.
(Polskie tłumaczenie: Inżynieria oprogramowania, WNT 2003, 6 wyd.)
Literatura uzupełniająca:
1.
K. Sacha. Inżynieria oprogramowania. PWN, 2010.
2.
B. Bereza-Jarocinski, B. Szomański. Inżynieria oprogramowania. Jak
zapewnić jakość tworzonym aplikacjom. Helion, 2009.
3.
M. Flaciński. Zarządzanie projektami informatycznymi, PWN, 2006.
4.
S. Szejko (red.). Metody wytwarzania oprogramowania. Mikom, 2002.
Egzamin: odpowiedź na kilka pytań. Zaliczenie: około 50%
Ćwiczenia: Projekt niedużego zadania.
Treść wykładów
Specyfikacja, czyli określenie i ustalenie wymagań, które
musi spełniać oprogramowanie.
Projektowanie, czyli ustalenie ogólnej architektury systemu
oraz wymagań dla poszczególnych jego składowych.
Implementacja, czyli realizacja ustalonej architektury
poprzez implementację składowych (modułów) i połączeń
między nimi.
Zatwierdzanie, czyli upewnienie się, że wytworzone
oprogramowanie odpowiada swojej specyfikacji i spełnia
oczekiwania klientów.
Pielęgnacja, czyli modyfikowanie systemu oraz usuwanie
błędów zaobserwowanych podczas jego eksploatacji.
Zarządzaniem wytwórstwem oprogramowania.
Systemy krytyczne, czyli systemy, których awaria może
spowodować fatalne konsekwencje.
Zawartość wykładu
Profesjonalne wytwórstwo
oprogramowania
Odpowiedzialność etyczna i zawodowa
w inżynierii oprogramowania
Trzy przykłady systemów
informatycznych
Historia
Termin „inżynieria oprogramowania” (software
engineering) powstał w 1968 roku na konferencji
zwołanej, aby przedyskutować zjawisko zwane wówczas
„kryzysem oprogramowania”.
Kryzys oprogramowania był następstwem wprowadzenia
komputerów trzeciej generacji, co spowodowało, że wiele
dotychczas nierealnych zastosowań stało się realne.
W konsekwencji zaczęto budować systemy o kilka rzędów
wielkości większe niż systemy dotychczasowe. Konieczne
stało się opracowanie nowych technik i metod panowania
nad złożonością nieodłącznie towarzyszącą wielkim
systemom.
Inżynieria
oprogramowania
Gospodarki wszystkich rozwiniętych państw są
zależne od oprogramowania
Coraz więcej różnorakiego sprzętu jest
kontrolowane przez oprogramowanie.
Inżynieria oprogramowania zajmuje się teoriami,
metodami i narzędziami związanymi z
profesjonalnym wytwórstwem oprogramowania.
Wydatki na oprogramowanie stanowią znaczący
ułamek produktu krajowego brutto wszystkich
rozwiniętych państw.
Koszty oprogramowania
Oprogramowanie jest droższe od
sprzętu.
Pielęgnacja oprogramowania jest
droższa niż jego wytworzenie. W
przypadku systemów długo używanych
może być kilkakrotnie droższa.
Jednym z celów inżynierii
oprogramowania jest redukcja koszów
wytwarzania oprogramowania.
Rodzaje oprogramowania
Produkty powszechne (otwarte)
Produkty sprzedawane na wolnym rynku
wszystkim klientom, którzy chcą jej kupić.
(Systemy operacyjne, edytory tekstu,
systemy baz danych.)
Produkty zamawiane (zamknięte,
dostosowane)
Produkty zamawiane przez konkretnego
klienta. (Systemy wojskowe, systemy
wspomagające zarządzaniem konkretnego
przedsiębiorstwa.)
Specyfikowanie
oprogramowania
Produkty powszechne
Specyfikację definiuje firma
wytwarzająca oprogramowanie.
Produkty zamawiane
Specyfikację definiuje firma
zamawiająca oprogramowanie.
Często zadawane pytania
Co to jest oprogramowanie?
Programy komputerowe oraz związana z
nimi dokumentacja. Produkty programowe
mogą być tworzone dla konkretnego klienta
lub przeznaczone do sprzedaży na ogólnie
dostępnym rynku.
Co to jest inżynieria oprogramowania?
Dziedzina inżynierii, która obejmuje
wszystkie aspekty tworzenia
oprogramowania.
Często zadawane pytania
Jaka jest różnica między inżynierią
oprogramowania a informatyką?
Informatyka obejmuje teorię i podstawy, natomiast
inżynieria oprogramowania obejmuje wszelkie
praktyczne zagadnienia dotyczące budowy i
dostarczania produktów programistycznych.
Jaka jest różnica między inżynierią
oprogramowania a inżynierią systemów?
Inżynieria systemów obejmuje inżynierię
oprogramowania. Ponadto zajmuje się inżynierią
sprzętu i inżynierią procesów.
Często zadawane pytania
Co to jest proces tworzenia
oprogramowania?
Zbiór czynności, których celem jest utworzenia
oraz pielęgnacja (ewolucja) oprogramowania.
Czynności wspólne dla wszystkich procesów:
Specyfikacja oprogramowania
Tworzenie oprogramowania
Zatwierdzanie oprogramowania
Pielęgnacja oprogramowania
Różne procesy mogą różnie porządkować
powyższe czynności
Często zadawane pytania
Co to jest model procesu tworzenia
oprogramowania?
Uproszczona prezentacja procesu
wytwarzania oprogramowania. Istnieje kilka
ogólnych modeli tworzenia
oprogramowania:
Model kaskadowy
Model przyrostowy
Model formalnych przekształceń (nieużywany)
Model z użyciem wielokrotnym
Często zadawane pytania
Jakie są koszty tworzenia oprogramowania?
W przybliżeniu koszty tworzenia to 60%
ogólnych kosztów, zatwierdzanie to 40%
ogólnych kosztów.
W systemach powszechnych koszty tworzenia
są mniejsze, ponieważ mniej pracy wymaga
specyfikacja oprogramowania.
W przypadku systemów, które pracują przez
długi czas, należy uwzględnić proces
pielęgnacji, który będzie kilkakrotnie droższy
niż wytworzenie i zatwierdzenie.
Często zadawane pytania
Jakie są najważniejsze wyzwania dla
inżynierów oprogramowania?
Radzenie sobie z różnorodnością oraz
żądaniem coraz krótszych terminów
dostarczania produktu.
Co to są metody CASE (Computer-Aided
Software Engineering)?
Oprogramowanie wspomagające tworzenie
oprogramowania.
Często zadawane pytania
Właściwości
produktu
Opis
Zdatność do
pielęgnacji
Łatwość modyfikacji oprogramowania zgodnie ze zmieniającymi się
potrzebami klientów
Niezawodnoś
ć
Niezawodne oprogramowanie nie powinno powodować ani
fizycznych, ani ekonomicznych katastrof jeśli ulegnie awarii
Efektywność
Obejmuje szybkość reakcji, czas działania, użycie pamięci itp.
Użyteczność
Obejmuje łatwośc użycia (odpowiedni interfejs) i adekwatną
dokumentację
Jakie właściwości ma dobre oprogramowanie?
Często zadawane pytania
Jaki wpływ na inżynierię oprogramowania
wywarł internet?
Internet spowodował ogromny rozwój
systemów rozproszonych, które stanowią duży
procent współczesnego oprogramowania.
Czy istnieją najlepsze techniki inżynierii
oprogramowania?
Nie, różne systemy wymagają różnych technik.
(Przykladowo gry i systemy krytyczne.)
Ogólne kwestie związane z
oprogramowaniem
Zróżnicowanie
Systemy rozproszone muszą sobie radzić z
różnym sprzętem i różnymi systemami
operacyjnymi.
Gwałtowny rozwój
Szybkie powstawanie nowych technologii
wymusza gwałtowny rozwój oprogramowania.
Bezpieczeństwo i zaufanie
Ponieważ oprogramowanie jest obecne we
wszystkich aspektach naszego życia, kluczowe
jest abyśmy mieli do niego zaufanie.
Różnorodność
oprogramowania
Różnorodność systemów informatycznych
jest ogromna. Dlatego nie istnieje jedna
technika, która byłaby właściwa dla
wszystkich zastosowań.
Technika użyta do wytworzenia
konkretnego produktu programistycznego
zależy od rodzaju produktu, klienta, dla
którego produkt jest wytwarzany, oraz od
doświadczenia zespołu wytwórczego.
Rodzaje aplikacji
Aplikacje niezależne (autonomiczne)
Systemy przeznaczone na pojedynczy
komputer, który nie wymaga podłączenia do
sieci (edytor tekstu, arkusz kalkulacyjny).
Aplikacje interakcyjne przetwarzające
transakcje
Systemy wykonujące transakcje na
komputerze zewnętrznym, z którym
użytkownik łączy się przez sieć (bankowość
internetowa).
Rodzaje aplikacji
Systemy wbudowane
Oprogramowanie wspomagające obsługiwany
przez nie sprzęt (system sterujący pompą
insulinową, system sterujący bankomatem).
Przetwarzanie wsadowe
Systemy przetwarzające duże porcje danych i
produkujące odpowiedni dokument (lista
płac).
Rodzaje aplikacji
Rozrywka
Systemy, których celem jest dostarczenie
rozrywki (gry, pasjanse).
Modelowanie i symulacja
Systemy o charakterze naukowym
modelujące zjawiska fizyczne (system
meteorologiczny). Na ogół są to systemy
obliczeniowo trudne, wymagające często
równoległej architektury sprzętowej.
Rodzaje aplikacji
Systemy zbierające dane
Systemy wykorzystujące sensory w celu
gromadzenia i przetwarzania danych
(system wspomagający zbieranie zdjęć
satelitarnych).
Systemy systemów
Ogromne systemy składające się z kilku
niezależnych systemów informatycznych
(system wspomagający kierowcę
samochodu).
Fundamenty inżynierii
oprogramowania
Pewne fundamentalne zasady stosują się do
wszystkich typów aplikacji bez względu na użyte
techniki wytwórstwa.
System informatyczny powinien być zbudowany w
oparciu o dobrze określony i zrozumiały proces
wytwórczy.
Niezawodność i wydajność są ważne w przypadku
każdego systemu.
Jakość oprogramowania zależy w dużym stopniu od
jakości jego specyfikacji.
O ile możliwe należy używać komponentów
wielokrotnego użycia, zamiast pisać je od początku.
Inżynieria
oprogramowania a
internet
Rozwój internetu umożliwił rozwój
systemów rozproszonych.
Internet umożliwia model przetwarzania
danych w chmurze obliczeniowej. Usługa
chmury obliczeniowej eliminuje konieczność
instalowania oprogramowania i jego
administracją. Użytkownik nie kupuje
oprogramowania, ale płaci za jego
używanie.
Systemy wykorzystujące internet i
pozostałe systemy tworzone są w oparciu o
podobne zasady.
Inżynieria
oprogramowania a
internet
Dominującym modelem tworzenia
oprogramowania wykorzystującego
internet jest użycie wielokrotne.
Oprogramowanie wykorzystujące
internet jest na ogół tworzone i
dostarczane przyrostowo
Podsumowanie
Inżynieria oprogramowania zajmuje się
wszystkimi aspektami jego wytwarzania.
Podstawowymi atrybutami dobrego
oprogramowania są zdatność do pielęgnacji,
niezawodność, efektywność i użyteczność.
Wszystkie procesy tworzenia oprogramowania
składają się z czterech podstawowych
czynności: specyfikacji, tworzenia,
zatwierdzania oraz pielęgnacji.
Podsumowanie
Istnieje wiele typów oprogramowania i
wytwórstwo każdego z nich wymaga
użycia odpowiednich narzędzi.
Pomimo, że nieistnieje jedna
uniwersalna metodologia tworzenia
oprogramowania, pewne fundamentalne
zasady są wspólne dla wszystkich
metodologii.
Inżynieria
oprogramowania
Wykład 1/2 Wstęp
Ian Sommerville
Software Engineering, 9 wyd.
Odpowiedzialność etyczna
i zawodowa
Twórcy oprogramowania ponoszą większą
odpowiedzialność niż tylko tę wynikającą z
wykorzystania ich technicznych
umiejetności.
Praca inżyniera oprogramowania odbywa się
zawsze w ramach porządku społecznego i
prawnego. Istnieją jednak obszary, gdzie
ocena postępowania nie wynika z prawa, ale
z subtelnego wyczucia profesjonalnej
odpowiedzialności.
Obszary odpowiedzialności
zawodowej
Poufność
Twórcy oprogramowania powinni zawsze
dochowywać tajemnic powierzonych przez swych
pracodawców i klientów, niezależnie od tego ,
czy podpisano formalną umowę o ochronie
tajemnicy.
Kompetencja
Twórcy oprogramowania nie powinni zawyżać
poziomu swoich kompetencji. W szczególności
nie powinni przyjmować prac, które przekraczają
ich możliwości.
Obszary odpowiedzialności
zawodowej
Własność intelektualna
Twórcy oprogramowania 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
Twórcy oprogramowania nie powinni używać
swoich technicznych umiejętności do
niewłaściwego używania cudzego komputera.
Kodeks etyczny ACM/IEEE
Organizacje ACM (Association of
Computing Machinery) i IEEE (Institute
of Electrical and Electronic Engineers)
opublikowały wspólny kodeks etyczny
związany z wytwórstwem
oprogramowania.
Kodeks ten obowiązuje wszystkich
członków tych organizacji.
Uzasadnienie kodeksu
Komputery odgrywają zasadniczą i wciąż coraz ważniejszą rolę w usługach,
przemyśle, rządzie, medycynie, edukacji, rozrywce i społeczeństwie jako
całości. Inżynierowie oprogramowania przez swoją pracę albo jako
nauczyciele przyczyniają się analizowania, projektowania, budowy,
certyfikowania, pielęgnowania i testowania systemów komputerowych.
Z powodu swej roli w tworzeniu systemów komputerowych inżynierowie
oprogramowania mają wiele okazji do czynienia dobra albo powodowania
szkód, do umożliwienia innym czynienia dobra lub powodowania szkód lub
do wpływania na innych, by czynili dobro lub powodowali szkody. Aby jak
najskuteczniej zapewnić, że ich wysiłek będzie służył dobru, inżynierowie
oprogramowania muszą przyjąć na siebie zobowiązanie utwierdzenia
inżynierii oprogramowania jako zawodu pożytecznego i szanowanego.
Zgodnie z tym zobowiązaniem inżynierowie oprogramowania będą
stosować się do następującego Kodeksu Etyki i Zawodowej Praktyki.
Kodeks zawiera osiem zasad dotyczących zachowania i decyzji
profesjonalnych inżynierów oprogramowania.
Kodeks etyczny ACM/IEEE
Kodeks etyki i zawodowej praktyki inżynierii oprogramowania
Połączona grupa ekspertów ACM/IEEE o etyce i zawodowej praktyce inżynierii
oprogramowania
Preambuła
Wersja skrócona kodeksu streszcza jego cele na wysokim poziomie abstrakcji.
Postanowienia zawarte w wersji pełnej zawierają przykłady i szczegółowe
informacje o tym, jak powinniśmy postępować będąc prawdziwie profesjonalnymi
inżynierami oprogramowania. Bez określenia celów szczegóły mogą wydawać się
drobiazgowe i nudne. Bez szczegółów cele będą brzmiały górnolotnie, ale pusto.
Cele i szczegóły razem wzięte stanowią spójny kodeks.
Inżynierowie oprogramowania muszą przyjąć na siebie zobowiązanie
utwierdzenia analizy, specyfikacji, projektowania, budowy, testowania i
pielęgnacji oprogramowania jako zawodu pożytecznego i szanowanego. Zgodnie
z tym zobowiązaniem wobec zdrowia, bezpieczeństwa i dobrobytu
społeczeństwa, inżynierowie oprogramowania powinni stosować się do
następujących Ośmiu Zasad:
Zasady etyczne
1. SPOŁECZEŃSTWO – Inżynierowie oprogramowania powinni postępować dla dobra
społeczeństwa.
2. KLIENT I PRACODAWCA – Inżynierowie oprogramowania powinni postępować zgodnie
z interesami swojego klienta lub pracodawcy zgodnymi z dobrem społeczeństwa.
3. PRODUKT – Inżynierowie oprogramowania powinni zapewnić, że ich produkty i
związane z nimi zmiany spełniają najwyższe standardy profesjonalizmu.
4. ROZSĄDEK – Inżynierowie oprogramowania powinni zachowywać rozsądek i
niezależność swoich sądów.
5. ZARZĄDZANIE – Zarządzający inżynierami oprogramowania i zwierzchnicy powinni
przyjąć i promować etykę w zarządzaniu tworzeniem i pielęgnacją oprogramowania.
6. PROFESJA – Inżynierowie oprogramowania powinni podnosić wiarygodność i reputację
zawodu zgodnie z dobrem społeczeństwa.
7. KOLEŻEŃSTWO – Inżynierowie oprogramowania powinni być uczciwi i chętni do
pomocy swoim kolegom.
8. JA SAM – Inżynierowie oprogramowania powinni brać udział w długofalowej nauce
praktyki swojego zawodu. Powinni także promować etyczne działania w praktyce swej
profesji.
Etyczne dylematy
Jak powinieneś postępować, jeśli
zasadniczo nie zgadzasz się z
przełożonym w swoim miejscu pracy?
Jak powinieneś postępować jeśli twój
zwierzchnik postępuje nieetycznie?
Czy powinieneś brać udział w tworzeniu
oprogramowania dla systemów
wojskowych i nuklearnych?
Przykłady systemów
informatycznych
System wbudowany wspomagający
pracę pompy insulinowej.
System wspomagający leczenie
pacjentów z problemami psychicznymi.
System wspomagający pracę stacji
pogodowych umieszczonych w
odległych, słabo dostępnych miejscach
System wspomagający
pracę pompy insulinowej
Zbiera dane dotyczące ilości cukru we krwi i oblicza
ilość insuliny, która powinna być dostarczona.
Ilość insuliny koniecznej do wstrzyknięcia nie zależy od
poziomu cukru we krwi (!), ale od tego o ile poziom
cukru się podnosi.
Po obliczeniu odpowiedniej dawki, system wysyła sygnał
do pompy, powodujący wstrzyknięcie insuliny.
System należy do rodziny systemów krytycznych: za
duża dawka insuliny (za mało cukru) może spowodować
omdlenie, a nawet śmierć; za mała dawka (za dużo
cukru) może prowadzić do trwałego uszkodzenia oczu
lub nerek.
Architektura pompy
insulinowej
Sterownik
Wyświetlacz 1
Wyświetlacz 2
Alarm
Miernik
Zegar
Pompa
Igła
Zbiornik insuliny
Zasilanie
Model przepływu danych w
pompie insulinowej
Detektor cukru
we krwi
Analiza cukru
we krwi
Wyznaczenie
ilości insuliny
Sterownik pompy
Krew
Parametry
krwi
Poziom cukru
Potrzebna
ilość insuliny
Polecenia
dla pompy
Pompa
Insulina
Dziennik
dawek
Podstawowe wymagania dla
pompy insulinowej
Dostępność
System musi być gotowy do wstrzyknięcia
insuliny, kiedy jest to potrzebne.
Niezawodność
System powinien dostarczać właściwą ilość
insuliny.
Bezpieczeństwo
Awaria systemu może spowodować
przedawkowanie insuliny. Ten rodzaj awarii nie
może się zdarzć.
System wspomagający leczenie
pacjentów z problemami
psychicznymi (system PPP)
System PPP jest bazą danych zawierającą
informacje o pacjentach z problemami
psychicznymi i sposobach ich leczenia.
Pacjenci z problemami psychicznymi na ogół
nie wymagają leczenia szpitalnego, ale w
regularnych odstępach czasu powinni
przychodzić na wizyty lekarskie.
Wizyty te nie muszą mieć miejsca w
szpitalach; dla wygody pacjentów mogą
odbywać się w lokalnych klinikach.
System PPP
System PPP został zaprojektowany do
użycia w sieci lokalnych klinik.
System wykorzystuje centralną bazę
danych, ale w przypadku kiedy klinika
nie posiada bezpiecznego połączenia
może być użyty lokalnie: komputery
kliniki zawierają lokalną bazę danych,
zawierającą informacje o leczących się
w tej klinice pacjentach.
Cele systemu PPP
Podstawowym celem systemu PPP jest
wspomaganie leczenia pacjentów.
Dodatkowo, system powinien gromadzić
różne informacje, które mogą być
przydatne dla osób zarządzających
siecią klinik (koszty kuracji, stosowane
leki, skuteczność kuracji).
Organizacja systemu PPP
Lokalny PPP
Lokalny PPP
Lokalny PPP
Serwer PPP
Baza danych pacjentów
Podstawowe wymagania dla
systemu PPP
Leczenie indywidualnych klientów
Lekarze mogą wprowadzać dane o nowych pacjentach
oraz edytować istniejące dane. System pozwala
generować krótkie raporty o pacjentach, które mogą być
przydatne w wypadku zmiany lekarza.
Monitorowanie pacjentów
System monitoruje poszczególnych pacjentów i generuje
komunikaty w przypadku napotkanych problemów.
Generowanie raportów
System generuje co miesięczne raporty zawierające
informacje o liczbie pacjentów w danej klinice, o liczbie
nowych pacjentów oraz o liczbie pacjentów, którzy
zakończyli leczenie, zapisane leki, ich koszt, itp.
Dodatkowe wymagania dla
systemu PPP
Poufność
System PPP musi zagwarantować poufność
bazy danych o pacjentach.
Bezpieczeństwo
Osoby chore na pewne choroby psychiczne
są niebezpieczne dla siebie (samobójstwo)
lub dla innych. System powinien informować
o takich osobach.
System wspomagający pracę
stacji pogodowych (system
SP)
Postanowiono umieścić kilkaset stacji pogodowych
w trudno dostępnych miejscach.
Każda stacja pogodowa zbiera dane dotyczące
takich parametrów jak temperatura powietrza,
ciśnienie, wilgotność, kierunek i szybkość wiatru,
ilość opadów itp.
w celu mierzenia powyższych parametrów każda stacja
posiada odpowiednie przyrządy. Każdy z tych przyrządów
jest sterowany odpowiednim oprogramowaniem, które
poza mierzeniem parametrów zarządza bazą danych
zawierającą informacje pogodowe.
Organizacja systemu SP
Podsystem wspomagający
pracę stacji pogodowej
Podsystem zarządzający
danymi i archiwizujący
Podsystem monitorujący
stacje pogodowe
Podsystem wspomagający pracę stacji pogodowej: odpowiada za zbieranie danych, wstępne ich przetwarzanie i
transmisję do podsystemu zarządzającego danymi.
Podsystem zarządzający danymi i archiwizujący: zbiera dane ze wszystkich stacji, przetwarza je,
analizuje, a następnie archiwizuje w takiej formie, aby mogły być użyte przez inne systemy, np.
system prognozujący pogodę.
System monitorujący stacje pogodowe: komunikuje się przez satelitę ze wszystkimi stacjami i
monitoruje ich stan. W przypadku awarii jest w stanie zaktualizować oprogramowanie stacji.
Podsumowanie
Twórcy oprogramowania ponoszą większą
odpowiedzialność niż tylko tę wynikającą z
wykorzystania ich technicznych umiejętności.
Praca inżyniera oprogramowania odbywa się
zawsze w ramach porządku społecznego i
prawnego.
Pokazane przykłady systemów
informatycznych wykazują ich dużą
różnorodność.