190 likes | 305 Views
Informatika I 8 . přednáška. RNDr. Jiří Dvořák, CSc. dvorak @uai.fme.vutbr.cz. Obsah přednášky. Softwarové inženýrství Životní cyklus programu Modely životního cyklu Testování a ladění. Softwarové inženýrství.
E N D
Informatika I8. přednáška RNDr. Jiří Dvořák, CSc. dvorak@uai.fme.vutbr.cz
Obsah přednášky • Softwarové inženýrství • Životní cyklus programu • Modely životního cyklu • Testování a ladění Informatika I: přednáška 8
Softwarové inženýrství Softwarové inženýrství (Software Engineering) se zabývá problematikou tvorby programů. Cílem je vývoj technik a prostředků napomáhajících v přiměřené době a s přiměřenými náklady vytvářet jasné, srozumitelné, spolehlivé a efektivní programy. Mezi předměty zájmu softwarového inženýrství patří např.: • programovací jazyky • techniky programování • metody ověřování a dokazování správnosti programů • optimalizace programů • prostředky CASE (Computer Aided Software Engineering) Informatika I: přednáška 8
1. Fáze požadavků 2. Specifikační fáze 3. Plánovací fáze 4. Fáze návrhu 5. Implementační fáze 6. Integrační fáze 7. Fáze údržby A 3 4 2 6 12 6 67 Životní cyklus programu B 1 2 3 5 15 35 100 A … přibližné relativní náklady v procentech B … přibližné relativní náklady na detekci a odstranění chyby vzniklé ve fázi požadavků (násobky nákladů pro fázi požadavků) Pramen: Schach, S.R. Practical Software Engineering. Irwin 1992. Informatika I: přednáška 8
Fáze požadavků, specifikace a plánování • Fáze požadavků: Vývojáři softwaru pracují s klientem, aby zjistili, jaký software klient potřebuje; požadavky jsou prezentovány formou dokumentu. • Specifikace: Vypracování specifikačního dokumentu, který popisuje, co má produkt dělat (úplně, přesně, bez rozporů a dvojznačností). • Plánování: Vypracování plánu řízení tvorby softwarového produktu obsahujícího co a kdy se má dělat, jak dlouho to bude trvat, jaké budou náklady a jaké budou zapotřebí zdroje. Plán musí být klientem akceptován. Informatika I: přednáška 8
Navrhování, implementace a integrace • Navrhování: Nejprve je vytvořen návrh architektury, který rozděluje produkt do modulů. Pak se provádí detailní návrh, při němž jsou navrhovány jednotlivé moduly. Přitom musí být jasně určeno, jak bude každý modul vykonávat svou funkci a jaké algoritmy a datové struktury bude využívat. • Implementace: Každý modul je kódován v programovacím jazyce dohodnutém v kontraktu. • Integrace: Moduly jsou spojeny do kompletního produktu, který je testován včetně dokumentace. Pak je produkt předán klientovi k otestování. Informatika I: přednáška 8
Údržba, testování a dokumentace • Údržba: Úkolem údržby je jednak odstraňování zbývajících chyb, které se nepodařilo odstranit v předcházejících etapách, jednak zlepšování funkce produktu a jeho přizpůsobování změnám požadavků. • Testování: Testování není separátní fází životního cyklu, ale nedílnou součástí každé fáze. V každé fázi nejprve provádějí testování softwaroví inženýři, zajišťující tuto fázi. Pak je produkt předán nezávislému testovacímu týmu. • Dokumentace: Nezbytnou součástí každé etapy životního cyklu programu je tvorba dokumentace. Informatika I: přednáška 8
Příklady modelů životního cyklu • „Vodopádový“ model (waterfall model): Žádná fáze nezačíná dříve, než jsou výsledky předchozí fáze pozorně zkontrolovány a schváleny (včetně dokumentace). • Model rychlého prototypování (rapid prototyping model) Fáze požadavků je nahrazena fází rychlého prototypování. Po úvodním shromáždění požadavků klienta se pokračuje tvorbou prototypu. Prototyp je rychle vytvářený program, který odráží mnohé z funkcí cílového produktu viditelné pro klienta, ale vynechává skryté aspekty. Klient pak s prototypem experimentuje a na základě toho upřesňuje svoje požadavky. • Spirální model (spiral model) Každá fáze začíná analýzou rizika týkajícího se vývoje produktu a poté se provádějí kroky k odstranění nebo minimalizaci tohoto rizika. Informatika I: přednáška 8
Testování a ladění • Testování: Cílem je zjistit, zda se v programu nebo v jeho části vyskytují chyby (resp. snížit pravděpodobnost jejich výskytu). Testování je jednak statické, jednak dynamické. • Ladění: Cílem je odstranit chyby, jejichžpřítomnostse projevila během testování. Informatika I: přednáška 8
Chyby softwaru • Členění podle doby výskytu • chyby ve specifikaci a návrhu • chyby projevující se během kompilace • chyby projevující se za běhu programu • Členění podle druhu chyby • formální chyby (většinou se projeví při překladu) • logické chyby (projeví se až za běhu programu; tyto chyby způsobují, že program neřeší správně danou úlohu) • numerické chyby (projeví se až za běhu programu; jedná se o chyby způsobující nedostatečnou přesnost výsledků výpočtu) Informatika I: přednáška 8
Statické testování Statické testování slouží k ověření správnosti požadavků, návrhu a kódu před zahájením kontrolních výpočtů. Metody statického testování: • pozorné čtení zdrojového textu • automatizovaná analýza zdrojového textu (např. během kompilace) • formální dokazování správnosti programu Informatika I: přednáška 8
Dynamické testování Dynamické testování spočívá v provádění kontrolních výpočtů s testovacími příklady. Metody dynamického testování: • testování černé skříňky (funkční testování) • vychází ze specifikace požadavků na program nebo jeho část; volíme data typická, hraniční, výjimečná, chybná, ... • testování skleněné skříňky (strukturní testování) • volíme takový soubor testovacích příkladů, aby pokryl všechny řídicí cesty resp. všechny příkazy v testované části programu. Informatika I: přednáška 8
Výpočet největšího společného dělitele dvou celých čísel • Vstupní podmínka: x, y Z (Z označuje množinu celých čísel) • Výstupní podmínky: nsd(x, y) = nsd(|x|, |y|) nsd(x, y) = nsd(y, x) nsd(x, y) = x pro x y = 0 nsd(x, y) = nsd(y, mod(x, y)) pro x y > 0 Informatika I: přednáška 8
Podmínky pro data k funkčnímu testování x = y = 0 |x| = |y| > 0 |x| > y = 0 |y| > x = 0 |x| > |y| > 0 nsd = 1 |y| > |x| > 0 nsd = 1 |x| > |y| > 0 nsd = |y| |y| > |x| > 0 nsd = |x| |x| > |y| > 0 1 < nsd < |y| |y| > |x| > 0 1 < nsd < |x| Informatika I: přednáška 8
Funkce pro výpočet nejv. spol. dělitele 1 function NSD(X,Y:integer):integer; 2 var K,L,M,N:integer; 3 begin 4M:=abs(X); N:=abs(Y); 5 if M < N then 6 begin 7 K:=M; M:=N; N:=K; 8 end 9 while N > 0 do 10 begin 11 L:=M mod N; 12 M:=N; 13 N:=L; 14 end; 15 NSD:=M; 16 end; Řádky jsou očíslovány pro konstrukci grafu řídicí struktury. Informatika I: přednáška 8
Graf řídicí struktury Z M < N 5 M N 7 9 N = 0 N > 0 K Informatika I: přednáška 8
Z 5 9 K Z 5 9 (9)* K Z 5 7 9 K Z 5 7 9 (9)* K Pozn.: Hvězdička a závorky označují případné opakování. |x|y = 0 |x||y| > 0 |y| > x = 0 |y|>|x| > 0 Cesty řídicím grafem a jejich podmínky Informatika I: přednáška 8
Proces ladění (debugging) 1. Shromáždění informací 2. Izolace chyby 3. Potvrzení příčiny chyby 4. Odstranění chyby 5. Dokumentace 6. Nové testování po každé opravě Systémy pro podporu ladění umožňují např. • krokování výpočtu • výpis zvolených proměnných • změny zvolených proměnných Informatika I: přednáška 8
Testování a ladění programu členěného do modulů a podprogramů Program se ladí po částech (činnost spolupracujících částí se simuluje), které se postupně spojují ve větší celky. Základní přístupy: • postup shora dolů (top down): začíná se od nejvyšší úrovně programu, přičemž činnost volaných modulů a podprogramů se simuluje • postup zdola nahoru (bottom up): začíná se od podprogramů a modulů, pro něž se vytváří testovací prostředí • smíšený (sandwich): kombinuje se postup shora dolů a zdola nahoru Informatika I: přednáška 8