Upload
kamsus0102
View
14
Download
0
Embed Size (px)
DESCRIPTION
Prezentacja dot. systemów diagramowych
Citation preview
2013Z
Inżynieria Oprogramowania
WYKŁAD 1: Wprowadzenie do inżynierii oprogramowania
2
0
1
3
Rozkład jazdy
1. Pojęcie inżynierii oprogramowania
2. Oprogramowanie jako produkt
3. Rodzaje oprogramowania
4. Inżynieria oprogramowania w sieci
5. Etyka inżynierii oprogramowania
WYKŁAD 1 2
2
0
1
3
Pojęcie inżynierii
oprogramowania
WYKŁAD 1 3
2
0
1
3
Pojęcie inżynierii oprogramowania
WYKŁAD 1 4
Pojęcie inżynierii oprogramowania zostało
zaproponowane po raz pierwszy w latach 1960, podczas
konferencji poświęconej tak zwanemu wówczas
"kryzysowi oprogramowania"
Wynikał on bezpośrednio z wprowadzenia sprzętu
komputerowego trzeciej generacji.
2
0
1
3
Pojęcie inżynierii oprogramowania
WYKŁAD 1 5
W odróżnieniu od komputerów drugiej generacji,
współczesne systemy oprogramowania charakteryzują
się następującymi cechami:
modelują elementy świata rzeczywistego
są duże i złożone
są abstrakcyjne
2
0
1
3
Pojęcie inżynierii oprogramowania
WYKŁAD 1 6
muszą być wysoce niezawodne
muszą być łatwe w utrzymaniu: w miarę zmian zachodzących w
świecie, oprogramowanie powinno nadążać za zmieniającymi się
wymaganiami
powinny być przyjazne dla użytkownika, co oznacza istotną rolę
interfejsu użytkownika
2
0
1
3
Pojęcie inżynierii oprogramowania
WYKŁAD 1 7
Rozwój oprogramowania znajdował się w kryzysie ponieważ
wykorzystywane wówczas metody (jeżeli jakiekolwiek były
stosowane) były niewystarczające, ponieważ:
techniki wykorzystywane przy małych systemach były nieskalowalne
duże projekty miały paroletnie opóźnienia, co pociągało za sobą
większe koszty niż pierwotnie przewidywano
wytwarzane oprogramowanie często było zawodne i trudne do
utrzymania
2
0
1
3
Pojęcie inżynierii oprogramowania
WYKŁAD 1 8
Fakt, że koszty sprzętu nieproporcjonalnie malały w
stosunku do wzrostu kosztów oprogramowania, jak i
wspomniane wcześniej problemy, wpłynęły na
konieczność stworzenia nowych teorii, metod i
narzędzi w celu zarządzania procesem wytwarzania
oprogramowania
2
0
1
3
Pojęcie inżynierii oprogramowania
WYKŁAD 1 9
„Inżynieria oprogramowania" zajmuje się zatem teoriami,
metodami i narzędziami wykorzystywanymi do wytwarzania
oprogramowania.
Celem jest wytworzenie niezawodnego oprogramowania,
dostarczonego na czas oraz w ramach przewidywanego
budżetu, zgodnego z wymaganiami użytkownika
2
0
1
3
Pojęcie inżynierii oprogramowania
Metody inżynierii oprogramowania, to ustrukturalizowane
podejście do tworzenia oprogramowania, które zawiera modele
systemu, notacje, zasady, wskazówki projektowe i opis procedury
opis modelu – graficzne prezentacja modeli, które zostaną
wytworzone
zasady – ograniczenia stosowane do modeli systemu
zalecenia – porady dotyczące dobrych praktyk projektowania
opis procedury – jakie działania należy kolejno podejmować
10 WYKŁAD 1
2
0
1
3
Pojęcie inżynierii oprogramowania
CASE (Computer-Aided Software Engineering) stanowi
rodzaj oprogramowania służącego zapewnieniu
zautomatyzowanego wsparcia dla czynności związanych z
procesem wytwarzania oprogramowania
Upper-CASE - narzędzia dla wspierania wczesnych działań procesu w
zakresie wymagań i projektowania
Lower-CASE - narzędzia wspierające późniejsze działania, takie jak
programowanie, debuggowanie i testowanie
11 WYKŁAD 1
2
0
1
3
Pojęcie inżynierii oprogramowania
WYKŁAD 1 12
Inżynieria oprogramowania nie polega wyłącznie na
stworzeniu działającego systemu,
lecz również pełnej dokumentacji, takiej jak projekt
systemu, czy instrukcja obsługi.
2
0
1
3
WYKŁAD 1 13
Istnieje wiele różnych rodzajów systemów
komputerowych, od prostych systemów wbudowanych
do wysoce złożonych. Należy pamiętać, że nie istnieją
uniwersalne notacje, metody, czy techniki tworzenia
oprogramowania, ponieważ różne typy wymagają
różnych podejść.
Pojęcie inżynierii oprogramowania
2
0
1
3
WYKŁAD 1 14
Na przykład, projektowanie systemu informacyjnego
dla organizacji całkowicie różni się od budowy
sterownika dla zautomatyzowanej aparatury naukowej.
Wszystkie aplikacje wymagają inżynierii
oprogramowania, lecz nie wszystkie będą
wykorzystywać te same techniki.
Pojęcie inżynierii oprogramowania
2
0
1
3
WYKŁAD 1 15
W dalszym ciągu istnieje wiele projektów kończących się
porażkami tworzonego oprogramowania. Istnieją dwa podstawowe
czynniki stanowiące powody niepowodzeń:
1. Rosnące wymagania – w miarę, jak nowe techniki inżynierii
oprogramowania pozwalają na tworzenie większych i bardziej
złożonych systemów, zmieniają się również i potrzeby. Systemy
powinny być tworzone i dostarczane szybciej, jednocześnie przy
większej skali i złożoności.
Pojęcie inżynierii oprogramowania
2
0
1
3
WYKŁAD 1 16
Ponadto oczekuje się, że będą posiadały właściwości,
które do tej pory wydawały się nie do osiągnięcia.
Sprawia to, że istniejące metody nie są w stanie
sprostać nowym oczekiwaniom, co wymaga tworzenia
nowych technik, które byłyby w stanie wyjść im
naprzeciw.
Pojęcie inżynierii oprogramowania
2
0
1
3
WYKŁAD 1 17
2. Niskie oczekiwania – stosunkowo łatwo jest napisać
program komputerowy bez użycia metod i technik
inżynierii oprogramowania. Wiele firm weszło w
tworzenie oprogramowania, w miarę jak ich produkty
i usługi ewoluowały.
Pojęcie inżynierii oprogramowania
2
0
1
3
WYKŁAD 1 18
Nie stosują jednak metod inżynierii oprogramowania
w ich codziennej pracy. W związku z tym, ich
oprogramowanie jest często bardziej kosztowne, lecz
mniej niezawodne. Potrzeba zatem lepszej edukacji i
szkoleń w zakresie inżynierii oprogramowania.
Pojęcie inżynierii oprogramowania
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 19
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 20
Wiele osób pisze programy komputerowe na własny
użytek, lecz większość aplikacji to profesjonalne
oprogramowanie tworzone w celach biznesowych,
włączając w to oprogramowanie urządzeń, jak i gotowe
produkty, takie jak systemy informatyczne dla
organizacji, czy aplikacje wykorzystywane do
projektowania (CAD).
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 21
Profesjonalne oprogramowanie jest przeznaczone do
wykorzystania przez innych użytkowników, niż jego
twórca i raczej jest tworzone przez zespoły, a nie
poszczególnych inżynierów. Jest utrzymywane i
rozwijane przez cały cykl życia.
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 22
Celem inżynierii oprogramowania jest stworzenie
oprogramowania wysokiej jakości.
Produkt końcowy stanowią systemy dostarczone do
klienta wraz z dokumentacją opisującą sposób
instalacji i obsługi systemu.
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 23
Jakość oprogramowania jest definiowana poprzez (za wyjątkiem
zakresu funkcjonalnego samego produktu) cechy wdrożonego
systemu, który został zainstalowany i uruchomiony.
Krytyczne cechy oprogramowania obejmują:
Użyteczność
Utrzymanie
Niezawodność
Wydajność
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 24
Użyteczność:
Oprogramowanie powinno być użyteczne i wykorzystywane
do ułatwiania oraz ulepszania ludzkiego życia.
W tym celu oprogramowanie powinno posiadać odpowiedni
interfejs użytkownika oraz wyczerpująca dokumentację
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 25
Utrzymanie:
Powinna istnieć możliwość rozwoju oprogramowania, w celu
bieżącego zaspokajania zmieniających się potrzeb
użytkowników.
Oprogramowanie powinno być elastyczne w stosunku do
potencjalnie pojawiających się zmian.
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 26
Niezawodność:
Zawiera szereg cech, takich jak: stabilność, poziom
zabezpieczeń i bezpieczeństwo użycia.
Niezawodne oprogramowanie nie powinno powodować
żadnej fizycznej, ani ekonomicznej szkody w przypadku
awarii systemu.
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 27
Wydajność:
Oprogramowanie nie powinno przyczyniać się do
marnotrawienia zasobów systemowych, takich jak pamięć,
czy moc obliczeniowa.
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 28
Należy zauważyć, że względne znaczenie tych parametrów
zmienia się w zależności od systemu, a optymalizacja wszystkich
cech jest bardzo trudna, ponieważ niektóre z nich się częściowo
wykluczają.
Również zależność miedzy ponoszonymi kosztami a osiąganymi
usprawnieniami w ramach każdej z charakterystyk nie jest
proporcjonalna.
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 29
Oprogramowanie jest kosztowne
Każdy projekt stanowi kompromis między:
funkcjonalnością
zasobami (koszty)
terminarzem
2
0
1
3
Koszty oprogramowania:
Około 60% to koszty rozwoju (wytworzenia), 40% stanowią koszty
testowania.
W przypadku oprogramowania dedykowanego koszty rozwoju często
przewyższają koszty wytworzenia
Koszty różnią się w zależności od rodzaju systemu i wymagań systemu w
zakresie cech takich jak wydajność i niezawodność
Podział kosztów uzależniony jest od przyjętego modelu tworzonego systemu
Oprogramowanie jako produkt
30 WYKŁAD 1
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 31
Wytwarzanie dobrego oprogramowania wymaga:
dobrze zdefiniowanego procesu rozwoju, z przejrzystymi
etapami działań, z których każdy posiada produkt końcowy
metod i technik do przeprowadzenia etapów działań oraz do
modelowania ich produktów końcowych
narzędzi do tworzenia produktów
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 32
Oprogramowanie jest bardzo zróżnicowane
Różni się wymaganiami klienta (użytkownika)
Nie istnieje ustandaryzowany proces wytwarzania
oprogramowania
Nie istnieje „najlepszy” język programowania, system
operacyjny, platforma sprzętowa, system bazy danych, czy
środowisko deweloperskie
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 33
Rodzaje oprogramowania w zależności od klienta:
powielarne (generic)
dedykowane (bespoke / customized)
Istnieje również wiele systemów stanowiących
skastomizowaną wersję modułów produktów generycznych
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 34
Klienci dostarczają zasobów a w zamian
oczekują produktów
Satysfakcja klienta stanowi podstawową miarę
sukcesu
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 35
Doświadczeni inżynierowie znają szeroki zakres
podejść, metod i narzędzi
Sztuka inżynierii oprogramowania polega na wyborze
odpowiednich metod dla danego projektu i efektywnym
ich zastosowaniu
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 36
Systemowe podejście do inżynierii oprogramowania
jest nazywane również procesem oprogramowania
(software process).
Proces stanowi sekwencję działań prowadzących do
wytworzenia produktu aplikacyjnego.
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 37
Istnieje kilka podstawowych czynności, które są
wspólne dla wszystkich procesów wytwarzania
oprogramowania:
1. Specyfikacja, gdzie klient przy pomocy inżynierów
definiuje jakie oprogramowanie ma zostać stworzone,
wraz z wiążącymi się z tym ograniczeniami
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 38
2. Tworzenie oprogramowania, gdzie oprogramowanie jest
projektowane i programowane
3. Walidacja, gdzie oprogramowanie jest sprawdzane pod
kątem wymagań użytkownika
4. Rozwój systemu, gdzie oprogramowanie jest
modyfikowane w miarę zmieniających się potrzeb
klienta i wymagań rynkowych
2
0
1
3
Oprogramowanie jako produkt
WYKŁAD 1 39
Różne rodzaje systemów wymagają odmiennego podejścia do procesu
tworzenia. Przykładowo, systemy czasu rzeczywistego
wykorzystywane w lotnictwie powinny być całościowo doprecyzowane
przed rozpoczęcia etapu tworzenia oprogramowania.
W systemach e-commerce, specyfikacje i program są zazwyczaj
tworzone jednocześnie. W związku z tym, te podstawowe działania
mogą być zorganizowane na różne sposoby i opisane na różnych
poziomach szczegółowości, w zależności od rodzaju oprogramowania.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 40
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 41
Istnieją różne rodzaje oprogramowania. Pomimo, że
nie ma jednej uniwersalnej metody wytwarzania
oprogramowania, to jednak istnieją wspólne
przesłanki, które można odnieść do każdego z typów
aplikacji.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 42
Heterogeniczność
Coraz częściej oprogramowanie musi funkcjonować na
zasadzie systemów rozproszonych w całej sieci,
obejmujących różne rodzaje komputerów i urządzeń
mobilnych.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 43
Zmiany społeczne i biznesowe
Społeczeństwo i otoczenie biznesowe zmieniają się
dosyć szybko, w miarę jak powstają nowe modele
ekonomiczne a nowe technologie stają się dostępne.
Muszą być w stanie zmieniać istniejące
oprogramowanie oraz szybko rozwijać nowe.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 44
Zaufanie i bezpieczeństwo
W związku z tym, że różnego rodzaju aplikacje są
wplecione w codzienne życie osobiste i biznesowe, jest
szczególnie istotne, aby oprogramowanie było
bezpieczne i godne zaufania.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 45
Aplikacje autonomiczne (Stand-alone applications)
systemy aplikacji, które uruchamiane są na komputerze
lokalnym. Obejmują one wszystkie niezbędne funkcje i
nie muszą być podłączone do sieci.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 46
Interaktywne aplikcje systemów transakcyjnych
(Interactive transaction-based applications)
aplikacje wykonywane na zdalnym komputerze,
dostępne dla użytkowników z ich komputerów
personalnych lub terminali. Zaliczają się do nich
aplikacje internetowe, takie jak np. e –commerce.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 47
Wbudowane systemy sterowania (Embedded control
systems)
systemy sterowania oprogramowaniem, kontrolujące i
zarządzające urządzeniami sprzętowymi. Jest to
najliczniejsza grupa systemów.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 48
Systemy przetwarzania wsadowego (Batch processing
systems)
systemy biznesowe, które są przeznaczone do
przetwarzania danych w dużych partiach wsadowych.
Przetwarzają duże ilości poszczególnych wejść w celu
transformacji w odpowiednie wyjścia.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 49
Entertainment systems
systemy, które służą przede wszystkim do użytku
osobistego w celach rozrywkowych.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 50
Systemy do modelowania i symulacji (Systems for
modeling and simulation)
systemy, które zostały opracowane przez naukowców i
inżynierów do modelowania fizycznych procesów lub
sytuacji, obejmujących wiele oddzielnych,
współdziałających ze sobą obiektów.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 51
Systemy zbierania danych (Data collection systems)
systemy, które zbierają dane z otoczenia za pomocą
zestawu czujników i przesyłają te dane do innych
systemów do dalszego przetwarzania.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 52
Nadsystemy (Systems of systems)
układy, które są złożone z wielu innych systemów
komputerowych.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 53
Niektóre podstawowe zasady stosuje się do wszystkich
rodzajów oprogramowania, niezależnie od
zastosowanych technik:
Systemy powinny być tworzone z wykorzystaniem
przejrzystego, dobrze zarządzanego procesu rozwoju.
Same procesy mogą się różnić w zależności od typu
oprogramowania.
2
0
1
3
Rodzaje oprogramowania
WYKŁAD 1 54
Niezawodność i wydajność są istotne z punktu widzenia
wszystkich rodzajów systemów.
Istotna jest przejrzystość oraz zarządzanie specyfikacją
wymagań oprogramowania (co program powinien robić).
W stosownych przypadkach, należy ponownie użyć
oprogramowania, które zostało już raz opracowane,
zamiast tworzyć nowe.
2
0
1
3
Inżynieria oprogramowania
w sieci
WYKŁAD 1 55
2
0
1
3
Inżynieria oprogramowania w sieci
WYKŁAD 1 56
Sieć obecnie stanowi podstawową platformę
uruchomieniową dla wielu aplikacji i w coraz większym
stopniu organizacje rozwijają systemy sieciowe, niż
lokalne.
Usługi sieciowe pozwalają na dostęp do funkcjonalności
aplikacji w ramach sieci.
2
0
1
3
Inżynieria oprogramowania w sieci
WYKŁAD 1 57
Cloud computing stanowi podejście do świadczenia
usług informatycznych, w którym aplikacje
uruchamiane są zdalnie "w chmurze".
Użytkownicy nie dokonują zakupu oprogramowania lecz
płacą za jego użytkowanie.
2
0
1
3
Inżynieria oprogramowania w sieci
WYKŁAD 1 58
Ponowne wykorzystanie oprogramowania stanowi
dominujące podejście do tworzenia systemów opartych
na WWW.
Podczas tworzenia tych systemów należy zastanowić się,
jak można zestawić je z komponentów istniejącego już
oprogramowania i systemów.
2
0
1
3
Inżynieria oprogramowania w sieci
WYKŁAD 1 59
Systemy webowe powinny być tworzone i wdrażane
stopniowo.
Obecnie powszechnie uznaje się, że nie jest możliwym
określenia z góry wszystkich wymagań dla takich
systemów.
2
0
1
3
Inżynieria oprogramowania w sieci
WYKŁAD 1 60
Interfejsy użytkownika są ograniczone przez możliwości
przeglądarek internetowych.
Technologie takie jak AJAX pozwalają na tworzenie
znacznie bogatszych interfejsów w ramach przeglądarek,
lecz nadal są trudne do wykorzystania. Znacznie częściej
stosowane są formularze internetowe wykorzystujące
lokalne skrypty.
2
0
1
3
Etyka inżynierii
oprogramowania
WYKŁAD 1 61
2
0
1
3
Etyka inżynierii oprogramowania
WYKŁAD 1 62
Organizacje muszą pokładać ufność w inżynierach
oprogramowania z zakresie:
kompetencji: oprogramowanie, które nie działa prawidłowo
i efektywnie może zaburzyć funkcjonowanie organizacji
poufności: programiści i administratorzy mogą mieć dostęp
do ściśle poufnych informacji (tajemnice handlowe, dane
osobowe)
2
0
1
3
Etyka inżynierii oprogramowania
WYKŁAD 1 63
otoczenia prawnego: oprogramowanie osadzone jest w
złożonym otoczeniu prawnym (prawa własności
intelektualnej, etyka zawartości elektronicznej)
dopuszczalnego wykorzystania i nadużyć: nadużycia i
wrogie działania mogą sparaliżować funkcjonowanie
organizacji
2
0
1
3
Kodeks Etyki
The ACM/IEEE Code of Ethics
64
Software Engineering Code of Ethics and Professional Practice
ACM/IEEE-CS Joint Task Force on Software Engineering Ethics and Professional Practices
PREAMBLE
The short version of the code summarizes aspirations at a high level of the abstraction; the clauses
that are included in the full version give examples and details of how these aspirations change the
way we act as software engineering professionals. Without the aspirations, the details can become
legalistic and tedious; without the details, the aspirations can become high sounding but empty;
together, the aspirations and the details form a cohesive code.
Software engineers shall commit themselves to making the analysis, specification, design,
development, testing and maintenance of software a beneficial and respected profession. In
accordance with their commitment to the health, safety and welfare of the public, software
engineers shall adhere to the following Eight Principles:
WYKŁAD 1
2
0
1
3
Zasady etyki
65
1. PUBLIC - Software engineers shall act consistently with the public interest.
2. CLIENT AND EMPLOYER - Software engineers shall act in a manner that is in the best interests
of their client and employer consistent with the public interest.
3. PRODUCT - Software engineers shall ensure that their products and related modifications meet
the highest professional standards possible.
4. JUDGMENT - Software engineers shall maintain integrity and independence in their professional
judgment.
5. MANAGEMENT - Software engineering managers and leaders shall subscribe to and promote an
ethical approach to the management of software development and maintenance.
6. PROFESSION - Software engineers shall advance the integrity and reputation of the profession
consistent with the public interest.
7. COLLEAGUES - Software engineers shall be fair to and supportive of their colleagues.
8. SELF - Software engineers shall participate in lifelong learning regarding the practice of their
profession and shall promote an ethical approach to the practice of the profession.
WYKŁAD 1
2
0
1
3
Etyka inżynierii oprogramowania
WYKŁAD 1 66
Dylematy etyczne:
Brak porozumienia w kwestii zasad polityki kierownictwa.
Pracodawca postępuje w sposób nieetyczny i pozwala na
użytkowanie nie sprawdzonego pod względem bezpieczeństwa
systemu, przed zakończeniem testów.
Udział w tworzeniu rozwiązań systemów uzbrojenia i systemów
jądrowych.
2
0
1
3
Pytania
WYKŁAD 1 67
1. Rozważyć konkretne oprogramowanie, które zapewnia
komfort/dyskomfort w używaniu. Pod jakim względem jest to
system wysokiej/niskiej jakości?
2. Podać przykład znanych przykładów porażek w zakresie
pożądanych cech oprogramowania, które pociągnęły za sobą
poważne konsekwencje.
2
0
1
3
Zadanie domowe
WYKŁAD 1 68
Przedstawić cechy koncepcji
Sofware as a Service
(oprogramowanie jako usługa)
WYKŁAD 1 69
Na dzisiaj koniec…