Inżynieria Oprogramowania
Wykład 01 - Wprowadzenie
MIS-1-502-s
MIO-1-505-s
MIS-1-505-n
Kazimierz Michalik
Wydział Inżynierii Metali i Informatyki Przemysłowej
Katedra Informatyki Stosowanej i Modelowania
Kraków 2014-2015
www.agh.edu.pl
www.agh.edu.pl
Pojęcie podstawowe
Oprogramowanie (software) – pojęcie podstawowe
(do oprogramowania włącza się niekiedy, oprócz
plików binarnych i z kodem źródłowym, także
dokumentację, pliki konfiguracyjne, przykładowe
dane itp..)
Inżynieria oprogramowania (Software Engineering)
– dziedzina inżynierii związana z wytwarzaniem
oprogramowania we wszystkich jego fazach cyklu
życia.
Jako dziedzina inżynierii, IO rozważa w kontekście
praktycznym rozmaite aspekty wytwarzania
oprogramowania (techniczny, organizacyjny, finansowy
itp..)
Oprogramowanie (software) – pojęcie podstawowe
(do oprogramowania włącza się niekiedy, oprócz
plików binarnych i z kodem źródłowym, także
dokumentację, pliki konfiguracyjne, przykładowe
dane itp..)
Inżynieria oprogramowania (Software Engineering)
– dziedzina inżynierii związana z wytwarzaniem
oprogramowania we wszystkich jego fazach cyklu
życia.
Jako dziedzina inżynierii, IO rozważa w kontekście
praktycznym rozmaite aspekty wytwarzania
oprogramowania (techniczny, organizacyjny, finansowy
itp..)
Cele inżynierii oprogramowania
Cel podstawowy:
Dostarczenie zasad organizacji procesu
wytwarzania oprogramowania (sofware
development) w oparciu o istniejące teorie,
modele, metody i narzędzia (formalne lub
nieformalne).
• W końcowym efekcie proces wytwarzania
oprogramowania ma w sposób efektywny doprowadzić
do powstania produktu wysokiej jakości
• Inżynieria oprogramowania jest częścią szerszej
dyscypliny: inżynierii systemów (system engineering),
w jej aspekcie dotyczącym oprogramowania.
Cel podstawowy:
Dostarczenie zasad organizacji procesu
wytwarzania oprogramowania (sofware
development) w oparciu o istniejące teorie,
modele, metody i narzędzia (formalne lub
nieformalne).
• W końcowym efekcie proces wytwarzania
oprogramowania ma w sposób efektywny doprowadzić
do powstania produktu wysokiej jakości
• Inżynieria oprogramowania jest częścią szerszej
dyscypliny: inżynierii systemów (system engineering),
w jej aspekcie dotyczącym oprogramowania.
Problemy inżynierii oprogramowania
• Złożoność programów
• Złożoność systemów, w ramach których
funkcjonują programy (ludzie, sprzęt, instytucje,
procesy produkcyjne etc.)
• Zmienność systemów
• Złożoność procesów składających się na
wytwarzanie oprogramowania ( w przeciwieństwie
do prostoty pisania samego kodu)
• Łatwość i praktyczna nieuniknioność popełniania
błędów przy wytwarzaniu oprogramowania
• Złożoność programów
• Złożoność systemów, w ramach których
funkcjonują programy (ludzie, sprzęt, instytucje,
procesy produkcyjne etc.)
• Zmienność systemów
• Złożoność procesów składających się na
wytwarzanie oprogramowania ( w przeciwieństwie
do prostoty pisania samego kodu)
• Łatwość i praktyczna nieuniknioność popełniania
błędów przy wytwarzaniu oprogramowania
Cechy dobrego oprogramowania
Wg. Sommerville'a:
• Poprawność, zgodność z wymaganiami
użytkowników
• Łatwość pielęgnacji (konserwacji) i dokonywania
zmian
• Niezawodność (dostępność i pewność)
• Bezpieczeństwo (w obu znaczeniach – safety,
security)
• Wydajność, efektywne korzystanie z zasobów
• Łatwość stosowania, ergonomiczność
Wg. Sommerville'a:
• Poprawność, zgodność z wymaganiami
użytkowników
• Łatwość pielęgnacji (konserwacji) i dokonywania
zmian
• Niezawodność (dostępność i pewność)
• Bezpieczeństwo (w obu znaczeniach – safety,
security)
• Wydajność, efektywne korzystanie z zasobów
• Łatwość stosowania, ergonomiczność
Historia Inżynierii Oprogramowania:
Prehistoria. II wojna światowa.
ABC (us.), Electronic Numerical Integrator And
Computer(us.), Colossus(uk.), Konrad Zuse(de.)
• Nowe komputery (architekturalnie) pojawiają się w
odstępach paru lat.
• Całe oprogramowanie musi być przepisane/napisane na
nowo dla nowych maszyn
• Czasy kart perforowanych i wydruków z wynikami.
• Program = Algorytm.
• 1945: Architektura von Neumanna
Historia Inżynierii Oprogramowania:
Prehistoria. II wojna światowa.
Historia Inżynierii Oprogramowania:
1945 – 1965: Narodziny
Język programowania:
• Komputery, wraz z oprogramowaniem, są
stworzone do konkretnych celów i rodzaju
obliczeń.
• Ciągła potrzeba przepisywania programów
doprowadza do powstania języków
programowania
• Oprogramowanie było darmowe
Język programowania:
• Komputery, wraz z oprogramowaniem, są
stworzone do konkretnych celów i rodzaju
obliczeń.
• Ciągła potrzeba przepisywania programów
doprowadza do powstania języków
programowania
• Oprogramowanie było darmowe
Era freeware:
• Wydawcy tworzyli otwarte repozytoria z
oprogramowaniem
• Na uniwersytetach nie istnieje taki przedmiot
jak Informatyka (Inżynieria Oprogramowania
też oczywiście nie)
Era freeware:
• Wydawcy tworzyli otwarte repozytoria z
oprogramowaniem
• Na uniwersytetach nie istnieje taki przedmiot
jak Informatyka (Inżynieria Oprogramowania
też oczywiście nie)
Historia Inżynierii Oprogramowania:
1965 - 1985: Kryzys oprogramowania
• Przekraczanie budżetu – o miliony dolarów (OS/360)
• Przekraczanie czasu – na przykład 10 lat
• Uszkodzenie mienia – w wyniku błędów programu (Mariner 1)
• Zagrożenie zdrowia i życia – np.: śmierć w wyniku napromieniowania
(Therac-25), błędu systemu kierowania ogniem (MIM-104 Patriot)
Historia Inżynierii Oprogramowania:
1968-1969: Software engineering
• Software Engineering: Report of a conference
sponsored by the NATO Science Committee ,
Garmisch, Germany: Scientific Affairs Division, NATO.
• E.W. Dijkastra Go To Statement Considered Harmful
• Software Engineering: Report of a conference
sponsored by the NATO Science Committee ,
Garmisch, Germany: Scientific Affairs Division, NATO.
• E.W. Dijkastra Go To Statement Considered Harmful
• 1969: Termin Inżynieria Oprogramowania
ujrzał światło dzienne
• Wczesne lata '80: Inżynieria Oprogramowania
staje się wyróżnialnym zawodem plasującym
się między informatyką a Inżynierią
• 1969: Termin Inżynieria Oprogramowania
ujrzał światło dzienne
• Wczesne lata '80: Inżynieria Oprogramowania
staje się wyróżnialnym zawodem plasującym
się między informatyką a Inżynierią
Historia Inżynierii Oprogramowania:
1965 - 1985: Wciąż kryzys oprogramowania
•
1972: D.Parnas On the Criteria To Be Used
in Decomposing Systems into Modules
•
Programowanie modułowe i abstrakcyjne
typy danych były już używane.
•
Późne lata '80: Koszty utrzymania
oprogramowania 2x wyższe niż koszt
stworzenia nowego.
•
Wczesne lata '90: Koszty utrzymania nadal
wzrastają o kolejne 30%
•
1995: 50% programów uznawanych za
porażkę, mimo teoretycznie poprawnego
działania
•
Przeciętny projekt przekracza wyznaczony
czas o 50%!
Historia Inżynierii Oprogramowania:
1985 - 1989: Brak panaceum
Propozycje rozwiązania problemów:
• Narzędzia: różne sposoby programowania
(strukturalne, OO), CASE, dokumentacja,
standardy
• Dyscyplina pracy programistów.
• Metody formalne z inżynierii.
• Proces wytwarzania oprogramowania
( Capability Maturity Model)
• Etyka pracy, licencje, profesjonalizm.
1986, Fred Brooks, No Silver Bullet
•
Brak „cudownego leku”, ale Inżynieria
Oprogramowania ma sens!
1986, Fred Brooks, No Silver Bullet
•
Brak „cudownego leku”, ale Inżynieria
Oprogramowania ma sens!
Historia Inżynierii Oprogramowania:
1990 – 2000: Orientowane Obiektowo
• Intensywne użytkownie CASE
• Projektowanie O.O.
• Narzędzia do inżynierii wymagań
• Wzrost popularności architektur
rozproszonych
• Universal Markup Language (UML)
• Java
Historia Inżynierii Oprogramowania:
2000+ : Współczesność
• Zintegrowane środowiska programistyczne
(IDE)
• UML 2.0
• Lekkie języki skryptowe
• Metodologie lekkie
• Zaawansowane metodologie hybrydowe
• Nowe platformy i języki: C# etc.
Czynności w czasie produkcji
oprogramowania
Inżynieria oprogramowania stara się zidentyfikować i
opisać podstawowe fazy tworzenia i funkcjonowania
oprogramowania, a także wskazać model optymalnego
przebiegu tych faz.
Co można robić w czasie tworzenia
oprogramowania?
• Planowanie
• Implementacja
• Testowanie
• Dokumentowanie
• Wdrożenie
• Utrzymanie (konserwacja).
Co można robić w czasie tworzenia
oprogramowania?
• Planowanie
• Implementacja
• Testowanie
• Dokumentowanie
• Wdrożenie
• Utrzymanie (konserwacja).
Warto przeczytać
• Sommerville I.: Inżynieria oprogramowania 8-th ed.,
Addison-Wesley, 2006 (wyd.6, WNT, 2003)
• Hunt A., Thomas D.: The Pragmatic Programmer: From
Journeyman to Master
• Yourdon, E.: Marsz ku klęsce. Poradnik dla projektantów
systemów. WNT, 2007
• Booch G., Jacobson I., Rumbaugh J.: UML przewodnik
użytkownika WNT 2002
• Gamma E., Helm R., Johnson R., Vlissides J.: Wzorce
projektowe. Elementy programowania obiektowego
wielokrotnego użytku, WNT 2005
• Sacha K.: Inżynieria oprogramowania, Wydawnictwo
Naukowe PWN, 2010
• Steve McConnel: Kod doskonały. Jak tworzy
c
oprogramowanie pozbawione błędów. Wydanie II
• Martin Fowler: UML Distilled
• Brooks, Mityczny osobomiesiąc: eseje o inżynierii
oprogramowania. WNT, 2000
www.agh.edu.pl
www.agh.edu.pl
Warunki zaliczenia przedmiotu (1)
www.agh.edu.pl
www.agh.edu.pl
Sposób obliczania oceny końcowej:
Wymagania wstępne i dodatkowe:
Programowanie w języku obiektowym
Nakład pracy studenta (bilans punktów ECTS):
Udział w wykładach
30 godz
Udział w ćwiczeniach projektowych
30 godz
Przygotowanie do zajęć
30 godz
Wykonanie projektu
30 godz
Samodzielne studiowanie tematyki zajęć
30 godz
Sumaryczne obciążenie pracą studenta
150 godz
Punkty ECTS za moduł
6 ECTS
WARUNKI UZYSKANIA ZALICZENIA:
91 – 100% bardzo dobry (5.0);
81 – 90% plus dobry (4.5);
71 – 80% dobry (4.0);
61 – 70% plus dostateczny (3.5);
50 – 60% dostateczny (3.0);
poniżej 50% niedostateczny (2.0).
PUNKTACJA: nominalnie jest do zdobycia 100 punktów
Średnia ważona ocen z egzaminu (66%) i projektu (34%)
– po uzyskaniu co najmniej 3.0 z każdej z nich
(Regulamin studiów §13, pkt 1:)
Warunki zaliczenia projektu (2)
www.agh.edu.pl
www.agh.edu.pl
PUNKTACJA: nominalnie jest do zdobycia 100 punktów
Wykłady: (DODATKOWO!)
Wykład
Semestr
za aktywne uczestnictwo w wykładzie
1 pkt
15 pkt
Zajęcia projektowe:
Zajęcia
Semestr
za poprawne przygotowanie do zajęć
0 do 2 pkt
30 pkt
za punktualną obecność i wykonywanie zadań
0 do 1 pkt
15 pkt
(albo za spóźnienie do 15tu minut i wykonywanie zadań
0 do 0,5 pkt
7,5 pkt)
za poprawne i samodzielne ukończenie zadań na zajęciach
0 do 2 pkt
30 pkt
rozliczanie projektów na koniec listopada
0 do 10 pkt
10 pkt
rozliczanie projektów na koniec semestru
0 do 15 pkt
15 pkt
W SUMIE
100 pkt
Warunki zaliczenia projektu (3)
Terminy poprawkowe:
Termin
W sumie
Przysługują tylko tym, którzy:
- nie uzyskali zaliczenia w poprzednim terminie i
-- byli na przynajmniej 7 zajęciach w semestrze lub
I popr.
25 pkt
II popr.
25 pkt
W SUMIE DODATKOWO
50 pkt
-- przedłożyli w wymaganym terminie
usprawiedliwienie większej ilości nieobecności.
za wykonanie zadań z tematów, w których student
nie wykazał się wiedzą w czasie semestru
za wykonanie zadań z tematów, w których student
nie wykazał się wiedzą w czasie semestru
i I terminu poprawkowego.
Warunki zaliczenia egzaminu (4)
•
Warunkiem przystąpienia do egzaminu jest
pozytywna ocena z zajęć projektowych.
•
Egzamin trzeba po prostu zdać (50%+).
•
Jeżeli w czasie semestru ktoś zdobędzie więcej niż
100 pkt, to dodatkowe punkty są doliczane do
wyniku egzaminu.
Jakie jest absolutne minimum, żeby zdać egzamin na
50%?
W każdym wykładzie, treści absolutnie wymagane do
zdania egzaminu na 3.0 będą wyróżnione w ramkach
koloru czerwonego.
(Technicznie jest to odcień bladopomarańczowego, ale
jestem pewien, że zorientujecie się które to są ramki.)
Jakie jest absolutne minimum, żeby zdać egzamin na
50%?
W każdym wykładzie, treści absolutnie wymagane do
zdania egzaminu na 3.0 będą wyróżnione w ramkach
koloru czerwonego.
(Technicznie jest to odcień bladopomarańczowego, ale
jestem pewien, że zorientujecie się które to są ramki.)
Dziękuję za uwagę
W przypadku sugestii, pytań lub spostrzeżenia
błędów: kontakt mailowy to kamich@agh.edu.pl