34
Wprowadzenie Wprowadzenie do inżynierii do inżynierii oprogramowania oprogramowania Inżynieria oprogramowania Wykład 1 Bartosz Walter <[email protected]>

Wprowadzenie do inżynierii oprogramowania

  • Upload
    bien

  • View
    71

  • Download
    3

Embed Size (px)

DESCRIPTION

Inżynieria oprogramowania Wykład 1. Wprowadzenie do inżynierii oprogramowania. Bartosz Walter . Prowadzący. dr inż. Bartosz Walter Instytut Informatyki PP Pokój: Centrum Polsko-Niemieckie p. 2 Email: [email protected] - PowerPoint PPT Presentation

Citation preview

Page 1: Wprowadzenie do inżynierii oprogramowania

WprowadzenieWprowadzeniedo inżynierii oprogramowaniado inżynierii oprogramowania

Inżynieria oprogramowaniaWykład 1

Bartosz Walter<[email protected]>

Page 2: Wprowadzenie do inżynierii oprogramowania

ProwadzącyProwadzący

dr inż. Bartosz Walter Instytut Informatyki PP Pokój: Centrum Polsko-Niemieckie p. 2 Email: [email protected] WWW: http://www.se.cs.put.poznan.pl/

Page 3: Wprowadzenie do inżynierii oprogramowania

AgendaAgenda

Historia i geneza inżynierii oprogramowania Rola inżynierii Aspekty inżynierii oprogramowania Plan wykładów

Page 4: Wprowadzenie do inżynierii oprogramowania

Rynek oprogramowaniaRynek oprogramowania

Świat 207 miliardów euro (USA 97 miliardów, UE 63 miliardy) Bez oprogramowania wytwarzanego na własne potrzeby

Wzrost 5.1% rocznie + 125 miliardów euro dodatkowych usług W UE 60-70% oprogramowania jestwytwarzane w firmach,

dla których nie jest to główną działalnością

Page 5: Wprowadzenie do inżynierii oprogramowania

Historia: początkiHistoria: początki

Sprzęt o bardzo ograniczonych możliwościach Ograniczone zastosowania Małe programy Programy pisane często dla własnych potrzeb lub

potrzeb dobrze znanych osób Dobrze wyspecyfikowane zadania

Page 6: Wprowadzenie do inżynierii oprogramowania

Historia: rozwójHistoria: rozwój

Nowy zawód: programista Nowa rewolucja przemysłowa (Osborne 1979) Specjalizowane języki programowania – COBOL,

Fortran, Algol Sprzęt o dużo większych możliwościach, np. pamięć

wirtualna, pamięć masowa, czytniki kart i taśm Nowe, poza naukowe i poza militarne zastosowania –

np. w biznesie Próba realizacji wielu dużych przedsięwzięć

programistycznych

Page 7: Wprowadzenie do inżynierii oprogramowania

Objawy kryzysu oprogramowaniaObjawy kryzysu oprogramowania

Rozwój technik wytwarzania oprogramowania nie nadąża za rozwojem sprzętu komputerowego i potrzeb klientów

Metody tworzenia oprogramowania się nie skalują

Page 8: Wprowadzenie do inżynierii oprogramowania

Historia: kryzys oprogramowaniaHistoria: kryzys oprogramowania

Czy kryzys oprogramowania trwa do dzisiaj? Nadal większość przedsięwzięć przekracza czas i/lub budżet

Około 25% przedsięwzięć programistycznych nie jest kończona

90% firm przyznaje, że dość często zdarzają im się opóźnienia przedsięwzięć

Powszechna akceptacja kiepskiej jakości oprogramowania (w pewnych obszarach)

Brak powszechnie akceptowanych i stosowanych standardów

Page 9: Wprowadzenie do inżynierii oprogramowania

Przyczyny kryzysuPrzyczyny kryzysu

Duża złożoność systemów informatycznych Złożoność, zmienność, nieadekwatność wymagań Niepowtarzalność poszczególnych przedsięwzięć Nieprzejrzystość procesu budowy oprogramowania Pozorna łatwość wytwarzania i modyfikowania oprogramowania Potrzeba kreatywności Czynnik ludzki Mało wymagający rynek (?) Niedoskonałość narzędzi Brak standaryzacji

Page 10: Wprowadzenie do inżynierii oprogramowania

Historia: próby przełamania kryzysuHistoria: próby przełamania kryzysu

1968: konferencja NATO w Ga-Pa nt. inżynierii oprogramowania

Metodyki strukturalne Metodyki obiektowe Technologie komponentowe Programowanie aspektowe Standaryzacja technologii

Time

to

Market

Kryzys czy chroniczne niedomaganie?

Page 11: Wprowadzenie do inżynierii oprogramowania

Czym jest inżynieria oprogramowania?Czym jest inżynieria oprogramowania?

Inżynieria oprogramowania dotyczy tworzenia dużych systemów informatycznych przez wiele osób

Inżynieria oprogramowania to wiedza techniczna, dotycząca wszystkich faz cyklu życia oprogramowania, której celem jest uzyskanie wysokiej jakości produktu – oprogramowania.

Inżynieria oprogramowania: zastosowanie systematycznego, zdyscyplinowanego, policzalnego podejścia do tworzenia, wykorzystywania i utrzymania oprogramowainia.

Inżynieria oprogramowania = proces + metody zarządcze i techniczne + narzędzia

Page 12: Wprowadzenie do inżynierii oprogramowania

OprogramowanieOprogramowanie

Oprogramowanie jest budowane lub rozwijane w sposób inżynierski (zdefiniowany, uporządkowany), jednak w zupełnie inny niż w innych dziedzinach inżynierii

Oprogramowanie się nie zużywa, choć jego jakość się pogarsza

Choć przemysł skłania się ku tworzeniu oprogramowania z komponentów i reużywalności, to jednak większość systemów jest dedykowana

Page 13: Wprowadzenie do inżynierii oprogramowania

Modele procesu tworzenia oprogramowaniaModele procesu tworzenia oprogramowania

Model klasyczny wodospadowy Zamknięcie jednej fazy otwiera następną

Prototypowanie Pierwszy wstępny prototyp (działający!), potem właściwa

implementacja

Programowanie odkrywcze Programiści odgadują potrzeby klienta

Model przyrostowy Kolejne funkcje są implementowane stopniowo

Page 14: Wprowadzenie do inżynierii oprogramowania

czas

Model klasyczny (wodospad)Model klasyczny (wodospad)

WymaganiaWymagania

AnalizaAnaliza

ProjektProjekt

ImplementacjaImplementacja

TestowanieTestowanie

Page 15: Wprowadzenie do inżynierii oprogramowania

Model klasyczny (wodospad)Model klasyczny (wodospad)

Page 16: Wprowadzenie do inżynierii oprogramowania

Wady i zalety modelu wodospadowegoWady i zalety modelu wodospadowego

Wymuszona niezmienność wymagań Wysoki koszt błędów popełnionych we wstępnych

fazach Koszt błędu w wymaganiach 100-1000 razy większy od

kosztu błędu programistycznego! Długa przerwa w kontaktach z klientem Nie lubiany przez wykonawców Wyższe prawdopodobieństwo niepowodzenia w

przypadku dużych przedsięwzięć Łatwość zarządzania – planowanie i monitorowanie

Page 17: Wprowadzenie do inżynierii oprogramowania

PrototypowaniePrototypowanie

Cel – lepsze określenie wymagań Fazy:

Ogólne określenie wymagań.

Budowa prototypu.

Weryfikacja prototypu przez klienta.

Pełne określenie wymagań.

Realizacja nowego, pełnego systemu zgodnie z modelem kaskadowym.

Page 18: Wprowadzenie do inżynierii oprogramowania

Wady i zalety prototypowaniaWady i zalety prototypowania

Zmniejszone ryzyko popełnienia błędu podczas definiowania wymagań i analizy

Szybka prezentacja klientowi działającego szkieletu aplikacji (szybka reakcja)

Dodatkowy koszt wytworzenia prototypu Możliwość nieporozumienia z klientem

Page 19: Wprowadzenie do inżynierii oprogramowania

Model spiralny (B. Boehm)Model spiralny (B. Boehm)

Planowanie Analiza wymagań i ryzyka

Projektowanie i budowa

Wdrożenie i ocena użytkownika

funkcjonalność

czas

Page 20: Wprowadzenie do inżynierii oprogramowania

Wady i zalety modelu spiralnegoWady i zalety modelu spiralnego

Możliwość zmiany wymagań w trakcie realizacji systemu

Szybka reakcja klienta na pojawiające się zmiany Niektóre funkcje są dostępne przed zakończeniem

przedsięwzięcia Integracja! Zarządzanie!

Page 21: Wprowadzenie do inżynierii oprogramowania

Składowe inżynierii oprogramowaniaSkładowe inżynierii oprogramowania

Inżynieria oprogramowania

Wymagania

Analiza

Projektowanie

Testowanie

Dokumentowanie

Kontrola i nadzór

Zarządzanie przedsięwzięciem

WersjonowaniePlanowanie

Szacowanie

Reinżynieria

Modelowanie

Pomiary

Raportowanie

Jakość

Szkolenia

Wdrożenie

Proces

Zarządzanie ryzykiem

Page 22: Wprowadzenie do inżynierii oprogramowania

ModelowanieModelowanie

Modelowanie: odtwarzanie rzeczywistości w celu uchwycenia najważniejszych elementów i pomijanie rzeczy nieistotnych Elementami modelu są elementy rzeczywistości

Modelowanie procesów a modelowanie danych Dekompozycja strukturalna Modelowanie obiektowe (UML): obiekty, relacje,

atrybuty

Page 23: Wprowadzenie do inżynierii oprogramowania

ProjektowanieProjektowanie

Reprezentacja modelu uwzględniająca ograniczenia techniczne i sposób realizacji

Ten sam model może być zaprojektowany na różne sposoby Elementami projektu są byty implementacyjne

Projektowanie strukturalne vs. Obiektowe Pojęcia: abstrakcja, uszczegółowienie, modularność,

architektura, hermetyzacja Projektowanie klas, relacji, interfejsów...

Page 24: Wprowadzenie do inżynierii oprogramowania

TestowanieTestowanie

Błędów nie można całkowicie wyeliminować Testowanie jest czynnością destrukcyjną Dobry test to test, który z dużym prawdopobieństwem

pozwala wykryć błąd Skuteczny test to test, który znajduje nowy błąd

Testowanie a model tworzenia oprogramowania Dobór danych testowych i obszaru testowania

Zasada Pareto Skalowalność – od szczegółu do ogółu

Niezależność testowania od tworzenia oprogramowania

Page 25: Wprowadzenie do inżynierii oprogramowania

Testowanie: zadanieTestowanie: zadanie

int oblicz(int arg1, int arg2, int operacja) {

switch (operacja) {

case DODAWANIE: return arg1 + arg2;

case ODEJMOWANIE: return arg1 – arg2;

case MNOŻENIE: return arg1 * arg2;

case DZIELENIE: return arg1 / arg2;

default: return –1;

}

}

Page 26: Wprowadzenie do inżynierii oprogramowania

SzacowanieSzacowanie

Czy przedsięwzięcie jest wykonalne? Czas = pieniądz Dekompozycja

Funkcjonalna

Produktowa

Modele Punkty funkcyjne

COCOMO II

PROBE

Page 27: Wprowadzenie do inżynierii oprogramowania

DokumentowanieDokumentowanie

Programy żyją dłużej niż pamięć twórców Spójność artefaktów (automatyzacja?) Dokumentacja użytkowa a dokumentacja techniczna Język i psychologia Dokumentowanie kosztuje... Nikt nie lubi dokumentowania, ale dobrze gdy

dokumentacja istnieje

Page 28: Wprowadzenie do inżynierii oprogramowania

PlanowaniePlanowanie

Zasoby Czas

Ludzie

Narzędzia

Materiał (komponenty)

Zadania i ich przydział Harmonogramy Czy przedsięwzięcie jest wykonalne?

Page 29: Wprowadzenie do inżynierii oprogramowania

Wersjonowanie i zarządzanie zmianąWersjonowanie i zarządzanie zmianą

Zmiany są nieuniknione Jaka wersja modułu X posiadała funkcję A? Identyfikacja elementów i ich wersji Spójność wersji a praca w zespole Wiele wersji jednego oprogramowania Formalne zatwierdzanie zmian

Page 30: Wprowadzenie do inżynierii oprogramowania

PomiaryPomiary

Potrzeba ilościowej informacji nt. produktu i procesu Informacja zarządcza

nie można sterować niczym, czego nie można zmierzyć Dane historyczne, teraźniejszość i przyszłość

Rodzaje metryk Produktowe: rozmiar, złożoność komponentów, liczba

interfejsów, ekranów, formatek, stron dokumentacji, liczba wykrytych błędów

Procesowe: czas, koszt, opóźnienie, stopień zrównoleglenia, liczba wymagań, czas poświęcony na testowanie

Page 31: Wprowadzenie do inżynierii oprogramowania

ReinżynieriaReinżynieria

Nieustanny pęd ku lepszemu Zmiana fundamentów w czasie eksploatacji Oblicza zmian

Zmiana procesu

Zmiana funkcjonalności

Zmiana kodu (refaktoryzacja)

Koszt pielęgnacji = 80% TCO Inżynieria odwrotna: odtwarzanie projektu na

podstawie programu

Page 32: Wprowadzenie do inżynierii oprogramowania

Plan – I sem.Plan – I sem.

Modelowanie (UML) Projektowanie (design patterns) Programowanie w języku Java Testowanie (scenariusze, Junit) Szacowanie (PROBE, Cocomo II) Dokumentowanie (użytkowe i techniczne) Zarządzanie zmianą i wersjonowanie Pomiary Narzędzia

Page 33: Wprowadzenie do inżynierii oprogramowania

ReadingsReadings

1. Jaszkiewicz A., Inżynieria oprogramowania. Helion 1997.

2. Górski J., Inżynieria oprogramowania w projekcie informatycznym. Mikom 2000.

3. Fowler M., UML w kropelce. Mikom 2001.4. Szejko St. (red.), Metody wytwarzania

oprogramowania. Mikom 2002.5. Pressman R., Software Engineering. A

Practitioner’s Approach. McGraw Hill 2001.6. Sommerville I., Software Engineering.

Addison-Wesley 1995.

Page 34: Wprowadzenie do inżynierii oprogramowania

Q & AQ & A