Zadání
Proces vývoje SW.
Metodika Unified Process.
Agilní vývoj SW.
Fáze testování a typy testů.
Softwarové metriky, refaktoring kódu. Kvalita softwaru.
Odhadování nákladů a času vývoje SW.
Údržba a znovupoužitelnost.
Proces vývoje SW
Proces vývoje SW
Proces při němž:
uživatelovi potřeby
požadavky na software
návrh
kód
operační použití
Základní aktivity při vývoji SW:
Specifikace
Vývoj
Validace
Evoluce
Modely životního cyklu
Vodopád
Prototypování
Výzkumník
Spirálový model
OO modely
Vodopád
celý projekt rozdělen do fází (trvající řádově měsíce):
analýza
návrh
implementace
integrace
verifikace
nasazení
údržba
chyba vede k návratu k předešlým fázím
➖ těžké odhadnout ukončení fáze
testování neprobíhá současně s vývojem
Iterativní
Inkrementální
jednotlivé části projektu vyvíjeny nezávisle a následně integrovány.
samotné část mohou být vyvíjeny další metodikou (vodopád, iterativně, XP,…)
➕ vždy je výsledkem iterace použitelný produkt
Metodika Unified Process
Fáze v UP:
Inception
Elaboration
Construction
Transition
Metodika Rational Unified Process (RUP)
komerční implementace metodiky UP od IBM
RUP i UP stojí na stejném základu
RUP mírně detailnější než UP
drobné odlišnosti v syntaxi
Agilní vývoj SW
Metodika zaměřená na lidi.
Umožňují rychlý vývoj a zároveň dokáží reagovat na změnu požadavků v průběhu vývojového cyklu.
velmi krátké iterace
UML pouze jako komplement
malé fungující týmy
zákazník zapojen do vývoje
Agilní metodiky
Extreme programming (XP)
Feature-Driven Development (FDD)
SCRUM Process Development
Test-Driven Development (TDD)
Manifesto of Agile Software Development
http://agileManifesto.org
Individuality and interactions over processes and tools.
Working software over comprehensive documentation.
Customer collaboration over contract negotiation.
Responding to change over following a plan.
Rozdíl oproti Model-Driven Engineering (MDE):
MDE:
pevná funkcionalita
variabilní čas a zdroje
Agile:
pevný čas a zdroje
variabilní funkcionalita
Fáze testování a typy testů
Proces spuštění (části) programu s cílem nalézt chyby.
Nemůže ukázat nepřítomnost defektů, může pouze ukázat, že v softwaru jsou chyby.
Testování také ukazuje funkce a výkon.
Ukazatelem kvality software.
Testování je destruktivní činnost, není vhodné, aby vývojář a tester byla ta samá osoba.
Myers,1979
Test je úspěšný, pokud zjistí přítomnost jedné či více chyb v programu.
úplné testy
selektivní testování
dynamické testování
BlackBox vs. WhiteBox
Typy testů
Unit testy
hledají defekty uvnitř softwarových komponent a verifikují fungování softwarových komponent (např. modulů, programů, objektů, tříd, atd.), které jsou testovatelné samostatně.
Integrační testy
testuje rozhraní mezi komponentami, interakce s různými částmi systému jako jsou operační systém, souborový systém, hardware anebo rozhraní mezi systémy.
Systémové testy
Systémové testování se zabývá chováním celého systému/produktu, jak byl definován rozsahem vyvíjeného projektu nebo programu.
Měly by pokrýt jak funkční tak nefunkční požadavky.
Akceptační testy
Další testy:
Funkční testy
Nefunkční testy
Zahrnují testování výkonu, zátěžové testování, stres testování, testování použitelnosti, testování udržovatelnosti, testování spolehlivosti a testování přenositelnosti.
Je testováním toho, “jak“ systém pracuje (jako celek).
Statické testy
Dynamické testy
Regresní testy
Progresní testy
Smoke test
Assembly testy
Softwarové metriky
Softwarová metrika
Údaj (měření, atribut softwaru), který lze nakonec převést na číselné hodnocení.
kvantitativní (číselně vyjádřená) míra, tj. ukazatel do jaké míry se nějaký atribut vyskytuje v systému, komponentě nebo procesu
kvalitativní charakter, tj. nečíselné vyjádření
Dělíme na:
Produktové
Procesní
Metriky zdrojů
HW, lidé, čas, nemocnost, výkonnost
Velikostně orientované metriky
Funkčně orientované metriky
Metriky složitosti
Halsteadova metrika
Program je věta, která vznikla na určité slovní zásobě. Na základě poměru délky věty (programu) a velikosti slovní zásoby (počet operátorů a operandů) získáme složitost.
McCabe odhad složitosti
Vnímá program jako graf. Dochází k výpočtu
cyklomatické složitosti:
Funguje také jako indikátor spolehlivosti.
McClure odhad složitost
Také založen na cyklomatické složitosti. Odvozeno od počtu větvení (C) a počtu řídících proměnných (V), především zohledňuje složitost podmínek tj. samotných uzlů!
Odhadování nákladů a času vývoje SW
Při odhadování se reflektuje:
Minulý podobný projekt (velmi dobrý výchozí bod)
Použití dekompoziční techniky
Použití empirických modelů
Odhad se zpožděním (nutný určitý buffer, pokud by se něco pokazilo)
Funkční bod
Metrika, říkající kolik toho funkční jednotka umí. Měří aplikační oblast, nezkoumá technickou oblast.
Putnam
T - usílí (člověkodny)
D - doba řešení
c - hodnota podle předchozích projektů
N - Délka programu
Cocomo (COnstructive COst MOdel)
Odhadování pracnosti shora-dolů.
Vychází z Putnama a odhadu délky programů KSLOC.
Zdroj empirických dat je větší počet předchozích projektů a pozorování.
a,b,c,d - parametry volené podle úrovně modelu a módu
T - doba řešení
E = úsilí
F = korekční faktor, ekvivalence s „c“ v Putnamovi tedy produktivita
Cocomo II
Nemá smysl dělat přesné výpočty na začátku projektu → korekční faktor vždy 1 a základní model.
Důvod změny:
3 různé modely:
Kvalita softwaru
Obecný model kvality (Quality model)
Operation:
Revision:
Transition:
Je dobře nasaditelný? (přenositelnost, nezávislost na HW, pohodlná instalace)
Celkový pohled obou stran
Kvalita dle IEEE
Stupeň, do jaké míry systém, komponenta nebo proces splňuje specifikované požadavky. (spíše u SW na zakázku)
Stupeň, do jaké míry systém, komponenta nebo proces splňuje zákazníkovy nebo uživatelovy potřeby nebo jeho očekávání. (spíše u krabicového SW)
Techniky zajištění kvality software
Obecně lze mluvit o testování, validaci a verifikaci produktu.
Validací se rozumí otázka, zda jsme vytvořili správný produkt tj. jestli produkt odpovídá potřebám uživatele.
Verifikací se rozumí, zda jsme produkt vytvořili správně tj. zda produkt odpovídá specifikaci.
Testováním se pak pokoušíme zmíněné předchozí dokázat pro omezenou sadu příkladů.
Inspekce, recenze
Testování
Měření
Standardy a procedury
Údržba a znovupoužitelnost + Refaktoring
Velmi nákladná v čase, finance odpovídají tomu jak dlouho ho chceme udržet. Náklady jsou 2x -100x větší než na vývoj. Na údržbu se mělo myslet již při vývoji.
Systémový re-engineering
Znovu napsání celé části systému bez účelu změnit její funkcionalitu, když subsystémy vyššího systému vyžadují častou údržbu. Cílem je vytvoření nového systému, který by se lépe udržoval (i snížení ceny za údržbu).
Refactoring
Refactoring je kontinuální proces vylepšení skrze vývojový a evoluční proces. Jeho záměrem je vyhnout se degradaci struktury a kódu, která zvyšuje cenu za údržbu.
„Code smells“
Duplikovaný kód - kód se opakuje na různých místech programu
Dlouhé metody
Long Parameter List - dlouhý seznam parametrů
Shotgun Surgery - abychom udělali jednoduchou změnu v kódu, je nutné sahat na mnoho míst, indikátor toho, že máme špatný model, že třídy mají špatnou zodpovědnost
Middle Man - zprostředkované volání objektu zbytečně přes prostředníka
Lazy Class - prázdná skořápka, třída, která nic nedělá
Spekulativní obecnost - kód, který je v programu obsažen, aby sloužil někdy do budoucna
Znovupoužitelnost
Hlavní výhodou je několikanásobné finanční ohodnocení jednou vyvinuté komponenty.
Úrovně znovupoužitelnosti (reuse levels)
Abstrakce (The abstraction level): analytické prvky
Objekty (The object level): třídy
Komponenty (The component level): kolekce tříd
Systém (The system level): celý systém a různé platformy
Reuse-Oriented software engineering
Model vývoje SW, založen na systematickém znovuužití, kde jsou systémy integrovány z existujících komponent (commercial-off-the-shelf = COTS)
Lehmanovy zákony
Zákony se zabývají fází evoluce, popisují rovnováhu mezi novými požadavky a údržbou na straně jedné a zvyšující se složitostí, snižující se “business value” na straně druhé.
Zákon trvalé proměny
Zákon rostoucí složitosti
Zákon vývoje programu
Rychlost globálních změn atributů systému se může jevit v omezeném časovém intervalu jako náhodná.
V dlouhodobém pohledu se však jedná o seberegulující proces, který lze statisticky sledovat a předvídat.
Zákon invariantní spotřeby práce
Celkový pokrok při vývoji projektů je statisticky invariantní.
Jinak řečeno, rychlost vývoje programu je přibližně konstantní a nekoreluje s vynaloženými prostředky
Zákon omezené velikosti přírůstku
Systém určuje přípustnou velikost přírůstku v nových verzích.
Pokud je limita překročena, objeví se závažné problémy týkající se kvality a použitelnosti systému.
Brooksův zákon
Týká se začlenění nového člena týmu do zpožděného projektu (ten, který s ním neměl zatím žádný styk :D). Zákon říká, že “Přidání řešitelské kapacity u opožděného projektu může zvětšit jeho zpoždění (náklady na začlenění nového pracovníka do týmu jsou zpravidla větší, než jeho přínos)”.
Zdroje
Nahoru