inżynieria oprogramowania wykład 01 - wprowadzenie · 2014-10-30 · •programowanie modułowe i...

21
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

Upload: dangtram

Post on 27-Feb-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

Inżynieria OprogramowaniaWykład 01 - Wprowadzenie

MIS-1-502-sMIO-1-505-sMIS-1-505-n

Kazimierz Michalik

Wydział Inżynierii Metali i Informatyki PrzemysłowejKatedra Informatyki Stosowanej i Modelowania

Kraków 2014-2015www.agh.edu.plwww.agh.edu.pl

Page 2: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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..)

Page 3: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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.

Page 4: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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

Page 5: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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ść

Page 6: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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

Page 7: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

Historia Inżynierii Oprogramowania:Prehistoria. II wojna światowa.

Page 8: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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)

Page 9: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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)

Page 10: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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ą

Page 11: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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%!

Page 12: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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!

Page 13: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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

Page 14: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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.

Page 15: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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).

Page 16: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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.plwww.agh.edu.pl

Page 17: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

Warunki zaliczenia przedmiotu (1)

www.agh.edu.plwww.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 godzUdział w ćwiczeniach projektowych 30 godzPrzygotowanie do zajęć 30 godzWykonanie projektu 30 godzSamodzielne studiowanie tematyki zajęć 30 godzSumaryczne obciążenie pracą studenta 150 godzPunkty 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:)

Page 18: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

Warunki zaliczenia projektu (2)

www.agh.edu.plwww.agh.edu.pl

PUNKTACJA: nominalnie jest do zdobycia 100 punktówWykłady: (DODATKOWO!) Wykład Semestr

za aktywne uczestnictwo w wykładzie 1 pkt 15 pkt

Zajęcia projektowe: Zajęcia Semestrza poprawne przygotowanie do zajęć 0 do 2 pkt 30 pktza 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 pktrozliczanie projektów na koniec semestru 0 do 15 pkt 15 pkt

W SUMIE 100 pkt

Page 19: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

Warunki zaliczenia projektu (3)

Terminy poprawkowe: Termin W sumiePrzysł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 semestruza wykonanie zadań z tematów, w których student nie wykazał się wiedzą w czasie semestrui I terminu poprawkowego.

Page 20: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

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.)

Page 21: Inżynieria Oprogramowania Wykład 01 - Wprowadzenie · 2014-10-30 · •Programowanie modułowe i abstrakcyjne ... •Java. Historia Inżynierii ... Wydanie II •Martin Fowler:

Dziękuję za uwagę

W przypadku sugestii, pytań lub spostrzeżenia błędów: kontakt mailowy to [email protected]