ASWI Flashcards
Proč se zaobírat SW inženýrstvím? (motivace)
Studie 95:
15 % -> Success
55 % -> Challenge
30 % -> Failure
O 20 let později:
Failure stále kolem 10 %,
ale různé metodiky různé výsledky
+ dají se najít příklady, kdy selhání vývoje SW mělo fatální finanční důsledky
Profesionalita a etika softwarového inženýra
Rozhodnutí SW. inženýra má dopady na fungování společnosti, tudíž by měl přijmout zodpovědnost za tato rozhodnutí. (profesionál vs. expert)
Př. bubliny na sociálních sítí zvyšují polarizace společnosti, vysoce návykové hry/webové stránky
Co s tím?
Learn: Studovat i věci mimo informatiku, filozofii etiku etc., poučení se z minulosti
Think: Zvažovat možnosti zneužití vyvíjeného SW
Act: Např. odejít z firmy, které se nechová eticky. Whistleblowing
Educate: Vzdělávat lidi i z jiných profesí
Connect: LinkedIn např.
Jak definovat úspěch softwarového projektu?
- pohled:
1) On Schedule
2) On Budget
3) To Specification - Pohled
1) Plní potřeby skutečné potřeby stakeholderů
2) Doručuje sw vysoké kvality se snadnou údržbou
3) Poskytuje nejlepší ROI
4) Doručuje když je projekt vhodný k předání
Čím dál více se posouvá vnímání úspěchu k 2. pohledu
Příčiny selhání SW projektu
1) Nefunguje komunikace se zákazníkem
2) Nefunguje náš vlastní management a proces
Z toho vycházíme při vývoji SW, abychom zvýšili pravděpodobnost úspěchu.
Příčiny úspěchu SW projektu
1) Správná metodika
2) Lidi kteří tomu rozumí (makáči)
Cesta ven z vysokého podílu neúspěšných projektů:
1) Dobře zvolený přístup
2) Dobře provozované konkrétní technické aktivity
3) Lidi, kteří to umějí uřídit
Softwarový proces - principy (vykřičník)
Proces: Systematická série akcí vedoucí k určitému výsledku
Softwarový proces: výsledek = kvalitní software
Prvky každého procesu: 1. Čas (činnosti, fáze) 2. Činitelé (role) 3. Výstupy (artefakty) \+ návody a nástroje
Sw proces: aktivity
- Technické
- Komunikace
- Plánování
- Modelování
- Konstrukce
- Nasazení - Podpůrné
- Řízení
- Kontrola kvality
- Správa konfigurace
- Správa prostředí
- Dokumentace
Programování != SW inženýrství
Sw proces: role
- Technické
- analytik
- architekt
- vývojář
- správce konfigurace
- tester
- databázový specialista - Manažerské
- team leader
- technický vedoucí projektu
- šéf vývojářů
- šéf projektu
- CTO
- CEO - Podpůrné
- poradce
- lektor
- už. podpora
- dokumentace
Příklad rolí Scrum/RUP
Scrum:
- Team
- Product owner
- Scrum master
RUP:
podrobně cca 25 rolí
Význam artefaktů
- Preskriptivní metodiky
- artefakty jsou cílem fáze procesu - Empirický přístup
- artefakty jsou prostředkem
- cíl = smysluplný stav/přírůstek produktu
Testovací příklady jako cíl / testovací příklady jako prostředek k dobře otestovanému SW
Proces X Projekt X Metodika
Projekt:
cíl, čas, zdroje
V určeném čase dojít k nějakému cíli. Jsou dostupné nějaké zdroje.
- Každý projekt běží podle nějakého procesu.
- Metodika je přepis, který říká, jak by měl proces vypadat. (předdefinovaný proces).
- Proces se buď řídí metodikou, nebo je vlastně vytvářen projektem
Životní cyklus
- Životní cyklus ještě nad metodikou
1. vývoj
2. výroba
3. údržba
4. útlum
Vývoj a výroba součástí metodiky.
Varianty sw procesu (vykřičník)
- The “null” process
- Dle parametrů
- Míra cykličnosti činností (iterativní x vodopádové)
- Míra komplexnosti pravidel (low x high ceremony)
- Míra danosti pravidel (empirické x preskriptivní)
Z toho vyplývá:
A) Sekvenční - vodopád
B) Iterativní - RUP
C) Adaptivní - eXtreme Programming
There is no silver bullet
The null process
Buď analýza -> kódování
V horším případě jen kódování
Sekvenční postup
Hlavní technické aktivity lineárně po sobě
- plán pro celý projekt
- stepwise refinement (od abstraktního po konkrétní)
- oddělené mezirprodukty
Sledování plánu
- neměnny kontext
- zadání a technologie zřejmé
- typicky preskriptivní proces
Př:
- Vodopádový model (autor zamýšlel 2 iterace)
- V-model
Cyklický postup
- Opakování technických aktivit
- Produkt postupně roste
- Omezování rizika (kontext zřejmý, zadání nebo technologie nejasné)
Př:
- Spirálový model
- Iterativní přístup
Adaptivní postup
Cyklický postup:
- krátké iterace, důraz na technické disciplíny
- !empirický proces
- Adaptace na změnu
- Kontext, zadání proměnlivé, nejasné
- Změny rozsahu pravdědpodobné
- Technologie nevyzkoušené
Agilní manifest
Jednotlivci a interakce před procesy a nástroji
Fungující software před vyčerpávající dokumentací
Spolupráce se zákazníkem před vyjednáváním o smlouvě
Reagování na změny před dodržováním plánu
Jakkoliv jsou body napravo hodnotné,
bodů nalevo si ceníme více.
Varianty procesu x míra nejistoty
- Čím větší projekt, tím pravděpodobnost úspěchu klesá
2. S adaptivními metodikami větší šance uřídit větší projekt
Metodiky pro adaptivní přístup
Extrémní programování Scrum DAD = disciplined agile delivery SAFe = scaled agile framework LeSS = large scale scrum
Alternativy dodávek funkčnosti
1) Velký třesk - na konci najednou
2) Přírůstkově - na základě plánu, úpravy obtížné
3) Evolučně - cíl -> dodávka -> zpřesnění
Vazba SW procesu na obchodní model
1) Na začátku výsledná cena -> produkt dodaný -> dle smlouvy. Změny účtované zvlášť.
2) Rozdělení projektu na dvě fáze.
A) Analytická
B) Realizace, nasazení
Každá fáze vlastní smlouva. Výsledky první fáze vstup do druhé fáze.
3) Na začátku rámcová smlouva. Placeno po částech na konci určitého úseku.
4) Předplatné. Produkt dodáván jako služba.
Driving forces při výběru procesu pro projekt
1) Velikost problému
2) Složitost problému
3) Míra nejistoty
4) Návaznosti projektu
5) Kritičnost systému
6) Definice úspěchu
7) Charakter týmu
8) Typ a chování zákazníka
Ortogonální charakteristy výběru procesu pro projekt
1) Na zakázku / interní / krabicový / pro radost
2) Greenfield / brownfield / integrační produkt
3) Výzkum / Vývoj / Rozvoj / Údržba
4) Closed source / Open source
5) Utilita / Systémová komponenta / Business critical / Safety Critical
6) Komerční zákazník, státní sféra, vertikály
Vertikály př. banky x telcom banky -> potřeba stability telcom -> rychlé změny (nový balíček) Je dobré vědět pro koho dělám, co očekávám
Rozdíl program / produkt / systém
Program -> Produkt -> Systém
Při každém přechodu výš cca 3x obtížnější
Úrovně flexibility při volbě SW procesu
- Principy
- Metodiky a standardy
- Software process improvement
- Vlastní ad-hod úpravy
Jak funguje iterativní vývoj
- Rozdělelní projektu do řady miniaturních projektů
- Iteraci řeším vodopádově
- Cíl = iterační release (neúplný produkt)
- Opakovaný postup (téměř stále stejné aktivity)
Průběh iterace (vykřičník)
- Plánování
- cíle iterace
- funkčnost - Zpřesnění požadavků
- Úprava návrhu (pokud je třeba)
- Implementace
- Ověření
- Předání do provozu (validace zákazníkem)
- Zhodnocení
- Je dobré vnímat na úrovni jednotlivých požadavků
Parametry: počet a délka iterací
Počet:
- dle charakteru projektu
- obvykle alespoň 3
- dle fází vývoje
Délka:
- malá je lepší
- 1-4 týdny pro malé, 3-6 týdnů pro velké projekty
- produktivita vyšší při blízkém cíli
- psychologie: včas nutí k těžkým rozhodnutím a kompromisům
Techniky: Pravidla pro iterace
- Běžící iterace uzavřená vůči změnám
- Vždy pevné datum ukončení
- Iterace timeboxované = délka známá předem (každá iterace stejně dlouhá)
Techniky: Předání a zhodnocení (iterativní vývoj)
A) Customer demo
- Předvedení zákazníkovi (nebo ne)
- Interní x Externí release
- Akceptace (nebo také ne)
Explicitně naplánovaná událost
- Ne úplně na konci iterace (rezerva)
- Živý produkt (no slideware)
B) Retrospektiva
co se dařilo = co zachovat
co se nedařilo a proč = co změnit
jak můžeme být příště lepší
kořeny v Kaizen
Kontext iterace v procesu vývoje
Sprint X Release X Product
Daily Plan x Iteration Plan x Release Plan x Product Roadmap x Product Vision
- Iterace jako kolečkou v soukolí
- Pro stromy nevidět les
Viz obrázek
Globální řízení: milníky => fáze (vykřičník)
Cíl: eliminovat momentálně největší riziko, zabránit oddivergování projektu od původního cíle
- LCO = zahájení
- definování terče - Vize produktu - LCA = projektování
- určení způsobu řešení - architektura technického řešení
- ověření - modely, technické prototypy, testy (executable)
- vývojářská infrastruktura - IOC = konstrukce
- schopnost efektivně vyrobit řešení
- beta verze, all features
- unit a funkční testy - GA = nasazení
- uvést produkt do rutinního provozu
- support team v provozu
Výhody iterativního vývoje oproti sekvenčnímu
- Better progress profile
- nepřesnosti, nedospecifikované věci atd. se projevíc brzy, sekvenční na konci a projekt se protáhne - Přesnost odhadu ceny/času
- Ze začátku může být 4x větší/menší než skutečnost
- Jak postupujeme iterace zpřesňujeme odhady kvalifikovaněji než u sekvenčního vývoje
Fáze vývoje a charakter iterací
Základní schema pevné, mění se činnosti a artefakty
Zahájení – analytické činnosti, validace vize zákazníkem
1-2 iterace
Projektování – analytické a designérské činnosti,
ověřování prototypy, implementace
2+ iterací
Konstrukce – designérské a programátorské činnosti,
změnové řízení, testování a ověřování
N iterací,
Nasazení – integrační a konzultační činnosti, ověřování
provozem, náběh uživatelské podpory
1-2 iterace
PDCA
Metodika
Plan - Do - Check - Adapt (act)
Každá iterace PDCA cyklus
Význam plánování (eisenhower)
Plánování je nepostradatelné, ačkoliv se v průběhu ukáže, že ho stejně není možné 100% dodržet. Ale kdybysme neplánovali, tak narazíme na mnohem více problémů.
Základní fakta o plánování
1) Plánujeme konkrétní projekt
2) Rámec plánu udává metodika (iterace, plány, milníky)
3) Nějaký plán nutný vždy (harmonogram, přiřazení zdrojů)
4) Sledování plánu nutné vždy (kontrola postupu, reakce na změny/rizika)
Prediktivní plánování
- Plan the work, work the plan
- Pro sekvenční postup
Na začátku zmapuju, co je třeba udělat -> soupis prací, harmonogram do konce projektu
WBS - Work breakdown structure = rozpis prací
- Jasné milníky/artefakty
Problémy:
- velká míra nejistoty
- neznalost odhadů
- měnící se požadavky
Řešení:
- zkušenosti
- data z minulých projektů
- menší projekty
Adaptivní plánování
Přístup
- detailně plánovat možné jen to, na co máme data
- přesnější odhady a plán až po nějaké době
Typické pro adaptivní metodiky
Postup:
- základ = hrubý rozpis prací a harmonogram
- plán na N+1 krok zpřesněn poznatky z N (adaptace)
Základní problém = náročnost a orientace
- vyžaduje průběžné sledování a kvalitní management
- zvenku může působit nesystematicky
Co s tím: globální pevné body plánu předem
tj. - na začátku hrubý rozpis prací/harmonogram, naplánovat nejbližší období, další kroky řešíme včas později
Stupně volnosti při plánování (vykřičník)
Základ: čas, zdroje (cena), rozsah (funkčnost), kvalita
Klasicky: rozsah pevný, čas + zdroje plánované
- obtížně měnitelné, odhadované
- kvalita obtížně řiditelná
x typický požadavek: „bude to v termínu, s daným rozpočtem,
samozřejmě v bezchybné kvalitě “
x typická realita: „you get crappy SW late“
: Železný trojúhelník projektového plánování
-> Když chci snížit čas, musím zvýšit cenu nebo snížit kvalitu (rozsah plocha trojúhelníku, čas + kvalita + cena jeho body)
Agilně: čas + zdroje pevné, rozsah plánovaný
- nejlepší faktor pro řízení projektu
- nejsnáze měnitelný
- vhodná granularita
- snadné a přesné odhady
Estimate vs Commitment při plánování
- Plánování založeno na odhadech
- Nedá se to určit přesně, ale jakmile z toho je plán, tak se z toho udělá commitment
- Vzniklá stres/konflikt, když plán nevyjde
=> Princip: software development tvořivá činnost, nikoliv rutinní výrobní aktivita
Plán nemůže být commitment
Techniky pro plánování
1) Určení rozsahu
2) Určení kvality
3) Určení času
4) Určení nákladů
5) Určení pořadí aktivit a termínů
Určení rozsahu při plánování
= Co všechno má být hotovo
Rozsah (scope) = množství fcí a jejich charakter Sběr a analýza požadavků Work Breakdown Structure (WBS) - dekompozice problému - identifikace činností
Problémy
- „Feature Creep“ = vymýšlení dalších a dalších vlastností nad mez užitečnosti
- „Analysis Paralysis“ = jste schopní na rozboru věcí, co je potřeba strávit více čas než je nutné a odkládat tak samotnou práci
Určení kvality při plánování
DoD = You are not finished with a sprint/feature/story/task until it meets the benchmark defined by Done Project and team dependent Generally accepted traits
„Many Agile projects are not able to deliver value to the customer at the end of each sprint. The software these projects deliver at the end of each sprint is only half ready for release.“
Určení času při plánování
„Jak dlouho to bude trvat?“
- klíčová součást plánování (čas + zdroje => cena)
Čas => Praconost (effort)
Faktory: dopad činnosti, rozsah, kvalita, čas, úvazky lidí, …
Metriky
- člověko-hodiny (co znamená „6 člověko-hodin“)
6 člověko-hodin nemusí znamenat kalendářní hodiny
- Story points (obtížnost x hodiny)
Práce s časem
- ideální inženýrská hodina vs režie
- pesimismus vs optimismus dle role
Odhadování pracnosti
1) Analyticky
viz WBS => pracnost jako součet dílčích
2) Adaptivně
- Planning poker
- Wideband Delphi
3) Analogií a odhadem
- zkušenosti, data
4) Výpočtem
- nástrojem
Určení nákladů při plánování
- Kolik to bude stát
Cena:
- práce (vývoj)
- prostředků (auta, počítače, license)
- infrastruktury (elektřina)
- režie (sekretářka, obchodní zástupce)
Způsob určení:
- analyticky - pracnost, čas, cena
- tabulkově - typy prací a prostředků, objemy
- limitem - rozpočet omezený, od něj odvozený výkon
Make Vs. Buy
Určení pořadí aktivit a termínů
„Do kdy má být co hotovo?“
Klasicky: WBS → návaznosti → CPM / PERT → Gantt
určení závislostí prací (zdroje, technologické postupy)
graf projektu, analýza kritické cesty
-> Program Evaluation and Review Technique
zohlednění kalendářního času
-> zdroje, termíny
Klasický způsob někdy rizikový … proto
=> Řízení riziky
vyhodnotit rizikové faktory projektu
- designová/architektonická rizika, obchodní, legislativní
- neznámá funkčnost, použitelnost, …
začít částmi funkčnosti/designu s největší mírou rizika
=> Řízení prioritami klienta
určení pořadí výstupů je na zákazníkovi
- množství omezeno délkou časového úseku
- iterativní přístup: umožňuje pružně reagovat na aktuální potřeby
začít částmi s největším významem pro zákazníka
Okamžiky pro adaptivní plánování
- Na počátku projektu
hlavní cíle, hrubé odhady – pracnost, čas, zdroje => cena
viz „globální řízení projektu“ - Na začátku každé iterace
seznam aktivit (úkolů) s přesnými odhady => “customer demo”
(aktualizace plánu projektu)
viz “průběh iterace”
X. Během iterace
… se neplánuje, pokud možno
Pozn.: Nutný předpoklad: jsou zachycené požadavky
Plánování projektu v iterativním vývoji
Výchozí bod: vize produktu
Okamžik: fáze zahájení projektu
- Odhadnout pracnost (rámcově)
- hrubé WBS, člověko-měsíce - Definovat milníky
- po stupních přesnosti, míře rizika
- (vodopád: po činnostech) - Rozdělit prj na oddělené fáze
- jasné určení cílů a výsledků
- 1 fáze = 1..N iterací, jejich rámcové definování
Plánování iterace
Cíle: určit účel iterace, podmnožinu funkčnosti k implementaci (např. implementovat kostru programu)
Kdy:
- první den iterace (nejpozději)
- průběžná příprava podkladů
Odhadnout pracnost <=> vybrat požadavky
Definovat jednotlivé úkoly
- přechod od “requirements” k “change management”
Stanovit finální obsah iterace
Výsledek
- Plán iterace / iterační backlog
Planning Meeting – postup
Naplánování miniprojektu
0. Cíl: co má být výsledkem iterace (business value)
1. Určení / výběr požadavků
podmnožina „DSP“ odpovídající cíli, úroveň „use case“
využívá dosud získané informace o požadavcích (priority)
2. Zpřesnění požadavků <=> odhad pracnosti
zdroje: obsah vybraných požadavků + „Done“
rozpad na úkoly (tasks)
3. Určení a commitment prací
co je nejdůležitější + co je reálné udělat => co bude uděláno
(vy)řazení / výměna úkolů
přístupy: direktivní / týmové / Planning Game
4. Vytvoření plánu
forma: dle dané míry ceremonie
Vypíchnutí:
- Plán je dohoda týmu -> commitment
- Část zpřesnění požadavků a odhad pracnosti mimo meeting
Zpřesňování požadavků
Pro plánování nutné odhady, pro ně detaily požadavků
Podklady:
specifikace požadavků (Vize, DSP, backlog, info od zákazníka, …)
architektonické informace, dostupnost zdrojů
Postup:
vyjasnění konkrétní funkčnosti / EFR se zákazníkem
vytvoření návrhu pro realizaci (model, aspoň „v hlavě“ či na tabuli)
stanovení realizačních prací (viz Definition of Done)
Výsledek: 1 requirement => 1..M úkolů v plánu iterace
Úkoly (Work Item, Task)
Povaha:
implementace části požadavku
technické, podpůrné a administrativní aktivity
Vlastnosti: konkrétnost
zadání, kritéria splnění
komu přiřazeno
termín
odhad pracnosti [hod] – max 1 pracovní den
související úkoly (nadřazený / blokující / …)
Forma:
post-it
úkolovník (Trello ap.)
ALM
Tradiční přístup: Iteration Plan (Dokument jako plán)
Obsah
úkoly k realizaci funkčnosti
opravy chyb
organizační atd aktivity
- Odhad pracnosti a alokace zdrojů
- Priorita, návaznosti
- Dokument
Agilní metodiky: Backlog jako plán (vykřičník)
Zahrnuje • požadavky • priority • odhadování • plánování • průběh
Product backlog
- epics + user stories = požadavky na produkt
Iterační backlog
- stories + tasks = plán iterace
Priority, rozpracovanost položek
=> pořadí implementace
Aktivity související s používáním backlogu
- Produktový: backlog grooming, dot voting
- Iterační: planning meeting/game, daily standup
Zkratka DEEP
Zkratka DEEP:
- Detailed Appropriately
Items in the backlog should contain enough contextual information for you cross-functional team to understand and discuss. Higher-priority user stories will have greater detail and context and be clearly defined.
- Estimated
The effort involved with each user story should roughly estimate with a standardized measure agreed upon by the team. While lower-priority items will have less precise estimates than items at the top of the backlog, all items should have at least a rough estimate
- Emergent
Because a product backlog evolves, it’s easy to add new stories and items—or remove them—as new information arises. Nothing is permanent.
- Prioritized
Items on the backlog are ranked based on their value and the strategic purpose(s) they serve, with higher-value items placed at the top.
Vztah produktového backlogu a iteračním backlogem
Iterační backlog je mapován na položky v produktovém backlogu
Štíhlé přístupy
Kanban board
TODO - DOING - DONE
- průběžný vývoj
- toto je třeba udělat, kdo má zrovna čas pracuje na úkolu
Sledování průběhu (plánu)
Nutnost. Důvody:
rozpoznat blížící se riziko
schopnost reagovat na změnu
Project tracking and oversight
cíl vs aktuální stav
odhadovaný vs skutečně strávený čas
Metody
metriky – produktové (velikost, kvalita), procesní (velocity, burnup)
reporting – analytické nástroje
transparentnost – veřejně přístupný plán („information radiator“)
komunikace – schůzky, XP role „Tracker“
Komunikace pro sledování postupu
1) Schůzky a porady (s vazbou na nástroje a metriky)
- plánovací
- kontrolní dny
2) Scrum / agile: Dauily Standup
- 15 minut standing up
- what have you been doing since last standup
- what will you be doing
- do you have any obstacles
3) Průběžné zjišťování
- management by walking around
Burndown chart (vykřičník)
Vodorovná osa čas
Svislá osa pracnost
Dvě křivky
1) Časový plán (interpolace odhadovaných hodin)
2) Skutečnost (jak se daří plán plnit)
Když zjistím, že nestíhám, tak můžu snížit rozsah
Když jsem zapomněl něco naplánovat, tak burndown chart užitečný, jestli stíhám
Úprava postupu
Výchozí zkušenosti
plán není nedotknutelný
ani krátkodobé plány (iterace) se vždy nepovedou
Uvnitř iterace
opravdu nutné?
výjimečné stavy a jejich řešení
Mezi iteracemi
ideální chvíle pro reflexi a úpravy (plán, proces)
viz retrospektiva iterace
Určení výkonnosti týmu
Viz „globální řízení“ iterativního vývoje
chceme dosáhnout vize
umíme odhadovat (víceméně) pouze iterace
Zákazník: „Kdy to tedy bude hotovo?“
Team velocity
faktory: tým (lidi) + požadavky (pracnost) + plán (čas) + realita (změny)
průměrná, přibližná hodnota (>= 3 iterace)
Použití pro další plánování (ne pro hodnocení)
Fáze zahájení: Přehled a cíle
RUP a DAD „Inception“ původní Scrum “Pre-game”
Nápad -> poptávka -> nabídka -> zformování vize || kontrakt -> zahájení projektu
Cíl fáze:
„To achieve concurrence among all stakeholders on the lifecycle objectives for the project“
vize produktu – co se má vytvořit
business case – zdůvodnění, že se to vyplatí
technický koncept – ověření proveditelnosti
- důležité porozumění mezi stakeholdery, aby projekt nedivergoval
Milník: LCO
Role analytika ve fázi zahájení
Analytik
1) analyzuje problém
2) snaží se porozumět potřebám stakeholderů
3) definuje systém a rozsah
Výstupem:
1) vize projektu
2) požadavky
Požadavky jsou:
1) identifikované
2) nastíněné (outline)
3) prioritizované
Charakteristiky fáze zahájení
Důležitá zejména pro nově zahajované projekty
pokračující / well-defined projekty: význam pro znovu-ověření předpokladů a odhadů
Počáteční „chaos“ => důsledky pro plánování iterací
Význam „měkkých“ disciplín
= business modelování
= komunikace
Fáze projektování: Přehled a cíle
RUP a OpenUP „Elaboration“, DAD část „Construction“
Zahájený projekt (vize) => sběr a analýza požadavků => návrh architektury technického řešení => ověření návrhu => příprava na vývoj
„To baseline the architecture of the system to provide a stable basis for … the design and implementation effort “
- > rozumně kompletní DSP – všechny klíčové/kritické požadavky
- > architektura – základní rysy technického řešení
- > vývojářská infrastruktura – prostředí pro realizaci
Milník: LCA
Fáze zahájení: Klíčové disciplíny a aktivity
rozsah a hranice projektu návrh ceny a harmonogramu acceptance criteria klíčové funkcionality (use cases) a omezující podmínky koncept technické architektury ověření proveditelnosti určení rizik příprava prostředí projektu
Zakroužkované na obrázku: Requirements
Fáze projektování: Klíčové disciplíny a aktivity
doladění vize sběr požadavků zpřesnění klíčových požadavků návrh architektury validace architektury výběr technologií a komponent ujasnění procesu příprava vývojového prostředí naplánování iterací pro realizaci
Zakroužkované na obrázku: Analysis & Desing, Environment
Role analytika ve fázi projektování
Analytik:
1) Zpřesňuje systém
2) Řízení požadavků
3) Změny požadavků
Výstupem:
1) Change requests
2) Detailnější požadavky
Požadavky: co, proč, kdy
Sběr požadavků, analýza: co se chce
pochopení problému
model reálného/projektovaného světa
podklady – realizace, plán
(Návrh: jak to realizovat)
Úrovně detailu
zahájení projektu: klíčové, obrysy
projektování: podstatné, úplnost
konstrukce: podrobnosti
Pozn: Fáze zahájení a projektování. Disciplíny „requirements“ a „analýza+návrh“
Požadavek definice
Schopnost nebo vlastnost, kterou má
software mít, aby jej uživatel mohl používat k vyřešení
problému nebo dosažení cíle, který vedl k zadání, nebo aby splnil podmínky stanovené smlouvou, standardem, nebo jinou specifikací.
nepotřebuje-li uživatel X, není X požadavkem
požadavky jsou omezeny vnějšími podmínkami
Účel specifikace požadavků:
popsat zadání tak, aby se z toho dalo vycházet pro implementaci =>
srozumitelnost pro zákazníka, jednoznačnost+struktura pro vývojáře
Typy požadavků (vykřičník)
A) Jádro týkající se SW:
1) Funkční požadavky (to co najdete v menu)
2) Business rules (pravidla, které zpřesňují funkčnost)
3) Constraints (musí vyhovovat zákonu o veřejných zakázkách např.)
4) Mimofunkční (jak rychle, jak často, jak dobře… vlastnosti)
B) Businessové požadavky (zvýšit počet zákazníků v předvánočním období)
C) Systémové požadavky (požadavky na systém, např. celková spotřeba robota)
D) Smluvní požadavky (termín dodání, správná dokumentace)
E) Právní požadavky (GDPR)
Kategorie funkčních požadavků
Klasifikace funkčnosti do čtyř kategorií jaké informace systém obsahuje, udržuje jaké funkce poskytuje uživatelům jaké analýzy dat provádí jaké jsou interakce s jinými systémy
Pro každý druh příslušné vlastnosti
stačí jednoduché seznamy
+ not this time (až příště)
mimo rozsah zadání
doplňková funkčnost
Lidé v analýze
Zákazník (právnická osoba)
externí, interní
doménový expert
x Uživatel (fyzická osoba)
Zainteresovaný hráč (stakeholder)
ředitel / investor / standardizační orgán / daňový poplatník
vliv na úspěch projektu
Analytik
zprostředkovatel mezi zákazníkem a programátory
Postup práce s požadavky (vykřičník)
A) Reqts development (zachycení požadavků a počáteční rozvoj)
1) Zjištění požadavků (elicit)
2) Analýza požadavků + komunikace (negotiate)
potenciálních požadavky -> stabilní (pevné) požadavky
3) Dokumentace požadavků
4) Revidování požadavků (review)
-> baselined požadavky (závazné)
B) Reqts management (změny požadavků)
Účel definice systému
Základní, stručný popis účelu projektovaného systému
Vyjádřit cíl projektu
soulad zákazník - dodavatel
zabránit divergování během vývoje
prevence nárůstu požadavků (feature creep)
Etalon pro zhodnocení úspěšnosti projektu
Rozsah definice systému
Stručný popis problému
25 slov / jeden odstavec k čemu má systém sloužit jaké informace bude udržovat kdo jej bude používat co přinese, čemu pomůže
Tisková zpráva
jak si představujeme výsledné řešení
Šablona RUP • problém … • postihuje … [koho] • což vede k … [důsledky] • řešení bude … [cílový stav]
Kontextový model (definice systému)
Zobrazení vztahů systému s okolními entitami
systém jako černá skříňka
aktéři, stakeholders
ostatní systémy
Rozsah systému
Rozhraní na okolí
HCI, API, data
Vize produktu a rozsah projektu
Popis cíle, který má vzniknout
esenciální, klíčové, vysoko-úrovňové požadavky
„problem behind the problem“
Související artefakty:
+ Business case: proč se to chce
-> zdůvodnění výhodnosti-návratnosti projektu
Požadavky: co to má dělat
Též např. Concept of Operations, Definice systému, …
Vize produktu: kostra (vykřičník)
Popis problému a účelu
smysl a účel cílového produktu
obchodní příležitost, důvod ekonomické návratnosti
Přehled stakeholders
kdo jsou zájemci o systém, typy uživatelů
(potenciální konkurence)
Přehled očekávaných schopností a funkcí produktu
popis, kvalitativní charakteristiky, priority
stručný výčet bez detailů
Omezení, standardy, závislosti
vztahující se k projektu
(Rámec plánu projektu)
časový rozsah, plánované verze / vydání
Use Case - definice
Sekvence akcí, které systém provádí v důsledku nějakého vnějšího podnětu a které vedou k výsledkům viditelným pro některého jeho uživatele.
-> elementární business process -> pro aktéra proces užitečný
Definice systému s případy užití (vykřičník)
1) Víme jaká je vision and scope
2) Víme kdo jsou aktéři
3) Známe základní skupiny připadů užití
4) Od každého use casu máme stručný popis
UML připady užití mapuje aktéry na případy užití
Glosář
Seznam důležitých pojmů
Faktura -> něco jiného pro zákazníka, firmu, finanční úřad
Doménový model (vykřičník)
Často relační datový model (podobné ERA modelu)
- abstraktní, neřeším nepodstatné jednotlivosti
1) Obsahuje entity
2) Atributy (i když ty jsou často zřejmé, nebo se musí vyjasnit později)
3) Vazby (kardinalita)
(zjednodušený diagram tříd)
Základní popis případu užití (vykřičník)
… ve fázi shromažďování požadavků:
základní popis dané funkce aplikace
1) Název (+ ID)
2) Stručný popis – 1 věta
3) Případně
Základní kroky postupu pro klíčové PU
Odkazy na zdrojové informace
Prostředí: Fyzický rozsah systému (vykřičník)
Vztahy produktu a prostředí
porozumění run-time a fyzickému prostředí
charakteristiky, parametry – mimofunkční požadavky
odhad nákladů + podklad pro architekturu
Varianty
„zelená louka“ – součást návrhu architektury (později)
„brownfield“ – nutná součást analýzy
Souvisí s diagramem nasazení UML
Diagram nasazení
- Kde systém poběží
- Kolik se na něj bude připojovat uživatelů
- Která role se bude připojovat kam
-> Slouží pro specifikaci mimofunkčních požadavků
Cíl agilních specifikací požadavků
Říci „produkt by měl umět X“
Podpořit (podnítit) budoucí diskusi o detailech
Nikoli „Funkce X produktu vypadá tak a tak“
Primárně TODO list
User Story (vykřičník)
Co uživatel od systému očekává a proč
Obsah
název
stručný popis
důležitost
Způsob zápisu
karta
položka v ALM
nástroji
“As a student (role) I want to purchase a parking pass (funkčnost) so that I can drive to school (přínos / bussiness case).
Priority: Should (priorita)
Estimate: 4 (odhad)”
Je to poukázka na rozhovor se zákazníkem, abych dále zjistil, co je třeba.
Produktový backlog vztah k velikosti úkolů (vykřičník)
Product Backlog
obsahuje epics, stories
počátek projektu: features, epics (~ definice systému)
just-in-time zpřesňování (příští iterace)
Nejen požadavky
viz Plánování
viz změnové řízení
Způsoby získávání požadavků
1) Neinteraktivní
studium dokumentace, hlášení problémů (bugtracking, support)
analýzy trhu
konkurenční systémy
2) Interaktivní rozhovory; requirements workshop pozorování (shadowing), práce s uživateli průzkumy (marketingové), dotazníky prototypování
Pro podrobnou specifikaci požadavků může být potřeba popsat cokoli z …
Očekávaná funkcionalita Mimofunkční požadavky Pravidla a procesy Uživatelské rozhraní Datový model Formální (dokazatelné) modely
- Závisí na typu projektu
Detailní analýza požadavků ve fázi projektování
Známe
zadání a cíl projektu
přehled důležitých funkcí / požadavků
možné zdroje problémů
Co dál
doplnit detaily požadavků, kde je třeba
najít business mechanismy
vymyslet jejich realizaci
Podrobný popis případu užití (vykřičník)
Detailní rozbor komunikace aktér-systém
1) Standardní průběh
nejčastější sled akcí
bez chyb a různých možností
2) Vstupní a výstupní podmínky
co potřebujeme pro standardní průběh
3) Chybové stavy a alternativní průběhy
určení míst výskytu, příčin, následků
popis alternativních a chybových akcí
INVEST u user stories
• Independent
-> Neměly by záviset jeden na druhém, protože to vede k prioritizaci a problémům při plánování
• Negotiable
-> není to kontrakt, jsou psány tak, aby postupně mohly být dohadovány (zpřesňovány) se zákazníkem, nemusí proto obsahovat všechny detaily
• Valuable to users or customers
-> vynechat stories, která mají hodnoty jen pro developery (připojení do db jsou přes connection pool)
• Estimatable
-> měly by být dostatečně malé + developeři mají technické a doménové (oborové) znalosti
• Small
-> Epicy by se měly rozpadat na user stories, buď jsou složené, kde je rozpad triviální, nebo jsou komplexní, kde je vhodné přidat další story s analýzou. Měl by se vejít do jedné iterace.
• Testable
-> vyhnout se stories, které nelze otestovat (software is easy to use)
FURPS+
Model třídění vlastností
Functionality, Usability, Reliability, Performance, Supportability + constraints
původně Hewlett-Packard
Omezující podmínky normy, zákony obchodní pravidla implementační omezení (technologie, rozhraní) fyzické charakteristiky
Jedná se o mimofukční požadavky
Reprezentace vlastností (mimofukční požadavky)
Účel: možnost ověřit splnění v implementaci
Měřitelný způsob (numericky)
obvyklá hodnota, povolené odchylky / četnost / přírůstky
zvážení realizovatelosti funkčních požadavků
vhodná reprezentace pro neměřitelné
Popis vlastností
u případů užití
u tříd problémové oblasti
vázané na celý systém
- Reprezentace mimofunkčních požadavků musí být testovatelná.
Procesní modely
Popis scénáře funkčnosti při složitém rozhodování
- když text nepřehledný
Nadřazený proces dělený do funkčností (PU)
- business process model
Notace:
UML diagram aktivit
DFD
Prototyp uživatelského rozhraní
Prototyp = reprezentace vnějšího rozhraní produktu nebo jeho části, v abstraktní (např. papírové) či konkrétní (spustitelná aplikace) podobě.
podklad pro určování funkcí a ovládání aplikace
diskuse nad prototypem korekce neshod v porozumění
Diskuse k prototypování
jednoduchá testovací data
abstraktní podoba uživatelského rozhraní
řízení konečným automatem
Kam s ním?
vyhodit uchovat
hraniční třídy pro objektový návrh
Vývoj datových entit
(Datová) entita typicky prochází vývojem
životní cyklus
Model = stavový diagram vazba na doménový / datový model vazba na pravidla vazba na funkčnosti (+ procesy)
CRUD(L) matice
Cíl: vědět kdo/co manipuluje s jakými údaji
Create-Read-Update-Delete(-List)
Úroveň detailu:
analytická – uživatel, případ užití X informace
návrhová – třída, funkce, proces X tabulka
Formy specifikace požadavků
Textový popis
shopping list
use case description, story cards
strukturovaný text
Grafické notace, modely
případy užití
procesní atd. modely
Strukturovaný dokument
normy (IEEE 830-1998)
RUP šablona
backlog
Implementace
prototyp
uživatelská příručka
Klíčové vlastnosti
- úplnost (všechny požadavky)
- bezrozpornost (např. dva požadavky podobné jiné aktéry -> to nedává logiku)
- trasovatelnost
Dvě základní:
1) Dokumenty
2) Nástroje - datová struktura
Architektura systému - definice
The fundamental organization of a system … its components, their relationships, … the environment, and the principles guiding its design and evolution.
Dvě části:
1) Vnitřní organizace sw (klíčové aspekty)
technologie
struktura (hrubé členění)
2) Pravidla pro celou implementaci (politiky, konvence)
vzory návrhu/implementace
mimo-funkční aspekty
napříč celou strukturou sw
Účel
jednotnost, srozumitelnost (náklady na údržbu)
Stupně volnosti při tvorbě architektury
Dáno: kontext
okolí systému => vazby, technologie, omezení; důvody
- disciplína Enterprise architektura
stakeholders => úhly pohledu => aspekty architektury
- navíc oproti vizi a požadavkům
- popis: logická struktura, procesní pohled, model nasazení
- datová aj. integrace, bezpečnost, provoz a podpora vč. infrastruktury
Možnost volby: konstrukce v rámci kontextu
architectural principles – fundamentální přístup pro daný sw
struktura (prvky, vazby), konvence
technologie
4 + 1 model (vykřičník)
1) Logical view
- jak rozdělit systém, abychom se v něm vyznali
2) Process view
= procesní dekompozice
- které částí jsou aktivní a pasivní a jak probíhá komunikace
3) Development view
= dekompozice subsystémů (vrstvy)
- jak to bude vypadat u vývojáře na disku
4) Physical view
= mapování software na hardware
+ scenarios
spojení pohledů dohromady
Logický pohled (4+1)
Motivace: monolitická aplikace nepřehledná
Subsystém = skupina souvisejících prvků implementace tvořících funkční celek
funkčně soudržné (sada fčních požadavků)
často vázané na jednoho aktéra
Vazby mezi subsystémy
toky dat
tok řízení
Architektonické styly
Zavedené zvyky a standardy
“An architectural pattern expresses a fundamental structural organization schema for software systems. It provides a set of predefined subsystems, specifies their responsibilities, and includes rules and guidelines for organizing the relationships between them.”
- Vrstvená architektura
- Servisně orientované styly
- Datově orientované styly
Vrstvená architektura
Delegování na podřízené
Komunikace se sousedy
Vrstvy např.
- prezentace
- řízení
- doména
- business služby
- technická infrastruktura
- knihovní třídy
- systémové
Klient-server
- tlustý klient
3-vrstvé a vícevrstvé
oddělení prezentace, business logiky a datové části
dnes standard
Servisně orientované styly
- Nejsou definované vrstvy
- Každá služba samostatná entita vlastní rozhraní
- Příliš mnoho vazeb = těžké se vyznat
- Řešení broker (pattern) - service bus
Fyzický pohled (4+1)
Motivace: monolitická aplikace nepraktická
Subsystém = skupina souvisejících prvků implementace tvořících funkční celek
funkčně soudržné (lokalita implementačních změn)
samostatná správa – nasazení, údržba, přístup
Modul, komponenta, knihovna
celek vhodný pro samostatný vývoj, nasazení a údržbu
snaha o reuse = vícenásobnou použitelnost
=> kvalitativní charakteristiky důležité
nutnost znát a spravovat závislosti
Vývojový pohled (4+1)
Realizace logické struktury se provádí v konkrétních technických artefaktech Tyto je potřeba vytvořit - jednotlivci, týmy, projekty - technologické aspekty - vývojářská infrastruktura => alokace prvků logické struktury do vývojových projektů
4+1 - S čím pracuji v logickém, vývojovém a fyzickém pohledu
Logický pohled: subsystémy, balíky => diagramy tříd
Vývojový pohled: projekty, adresáře, sestavení
Fyzický pohled: moduly, komponenty, knihovny
Konvence a politiky
„Architectural policies“
obecná pravidla pro návrh v libovolné části aplikace
musí dodržovat všichni vývojáři
Použité návrhové vzory Správa paměti Synchronizace, transakce Defenzivní programování Lokalizace (L10N, i18n) Dokumentace kódu
Procesní pohled (4+1)
Dvě varianty:
1) Struktura paralelizace v implementaci
procesy, vlákna; způsob synchronizace
komunikace – synchronní/asynchronní
propustnost, škálovatelnost, odolnost (deadlock, fault)
podpora (OS, jazyk, knihovny)
- Vazba na strukturu nasazení (distribuované systémy)
2) Procesní model (workflow) systému
alokace aktivit do modulů implementace
synchronizace, předávání artefaktů
Jak tvořit návrh architektury
Starting points:
1) Greenfield / brownfield / customization
- > greenfield vymyslet architekturu která je jednoduchá, ale funguje
- > brownfield architektura je už hotová, např. neměnit jí
- > customization vysokoúrovňová řešení, ještě něco jiného
2) build on existing / multiple candidates / one candidate arch.
- když vytváříme na zelené louce
- měla by následovat nějaka analýza rizik (měl bych si ověřit)
- > build on existing -> vezmeme framework, který vyřeší určité rozhodování v oblasti architektury
- > multiple candidates -> rozhodnutí, že např. vícevrstevná architektura, ale problém rozdělit vrstvy. Pak je dobré si udělat více variant návrhu a mezi nimi si vybrat.
- > one candidate (systém je jednoduchý, architekt ví), velká pravděpodobnost, že bude správná
Vodítka: aktéři, znalost struktury fyzického systému architektonické styly a vzory možnosti reuse, vývojové kapacity zkušenost (role Sw architekt)
Jak ověřit návrh architektury (máme více návrhů)
1) Diskuze
- modelování (na tabuli)
- joint application design
- what-if scénáře
2) Modelování
- UML nástroje
- Model-Driven Architecture/Development (MDA, MDD)
3) Prototypování
- technologické sondy (zkusit v dané technologie)
- proof of concept (implementace nějaké části funkčnosti)
- mob programming (jeden člověk sedí programuje, víc lidí okolo diskutuje, vytváření prototypu)
Validace architektury (vykřičník)
- Validace architektury pomocí spustitelného prototypu
- Při dosažení LCA vytvoření takové architektury, kde jsme si jistí, že splníme všechny požadavky
1) Vymyslíme architekturu
2) Proof of concept (spustitelná implementace)
3) Na proof of concept zkontrolujeme, jestli vyhovuje všem požadavkům (na architektonicky důležitá funkčnost)
Mechanismy návrh na základě klíčových use cases a mimofčních pož. proof of concept implementace oponentura
Význam scénářů v 4+1
Mít specifikovány architektonicky důležité požadavky (cca 20 %), na kterých ověřím správnost architektury
Dokumentace architektury
1) Dokument
2) Modely (diagramy X CASE)
3) Kostra aplikace (referenční architektura)
Zdůvodnění arch. rozhodnutí
Význam
proč je architektura právě taková
kriticky důležité: vysvětluje architekturu i po mnoha letech,
pro čtenáře neznalé kontextu
Obsah
klíčová funkčnost („architecturally significant use cases“)
řešení klíčových prvků architektury
vztah ke kontextu, omezujícím podmínkám, historii
Fáze konstrukce: Klíčové disciplíny a aktivity
zpřesnění požadavků úpravy návrhu vývoj a testování modulů ověření vydávaných verzí dle vize řízení zdrojů, dohled nad procesem
Zakroužkováno:
1) Implementation
2) Configuration & Change Management
3) Test & Deployment
Výchozí problém(y) a motivace konfiguračního řízení
Při vývoji produktu ve více verzích a/nebo ve více lidech je nutné zamezit zmatkům při
realizaci jednotlivých uživatelských požadavků
implementaci změnových požadavků přidávaných za pochodu
opravování chyb na různých verzích
provádění změn na jednom objektu (dokumentu, tabulce)
vytváření a označování spustitelné verze
zjišťování aktuálního stavu vývoje, nasazené verze
Zjednodušeno:
1) Dvojí údržba
2) Nejasný stav
Konfigurační management definice
Proces identifikování a definování prvků systému, řízení změn těchto prvků během životního cyklu, zaznamenávání a oznamování stavu prvků a změn, a ověřování úplnosti a správnosti prvků
Software Configuration Management (SCM)
řízení konfigurace, konfigurační řízení
Konfigurace - definice
SW konfigurace = sestava prvků konfigurace reprezentující určitou podobu daného SW systému
příklad: „první kompilovatelná verze programu XY pro Linux“
- v konfiguraci musí být vše, co je potřebné k jednoznačnému opakovatelnému vytvoření příslušné verze produktu (včetně překladačů, build scriptů, inicializačních dat, dokumentace)
- může být jednoznačně identifikovatelná
Konzistentní konfigurace = konfigurace, jejíž prvky jsou navzájem bezrozporné
příklad: zdrojové soubory jdou přeložit, knihovny přilinkovat
těsná souvislost SCM a QA
Prvek konfigurace - definice
Prvek konfigurace = konstituující složka systému
různé typy: zdrojový soubor, dokument, model, knihovna, script, spustitelný soubor, testovací data, …
Ve správě SCM
=> ví se o jeho existenci, vlastníkovi, změnách,
umístění v produktu
atomický z hlediska identifikace, změn
jednoznačně identifikovatelný: např. MSW/WS/IFE/SD/01.2
- typ prvku (dokument, zdrojový text, testovací data)
- označení projektu
- název prvku
- identifikátor verze
Vztahy v konfiguraci
1) celek-část, master-dependent
- > určují strukturu a závislosti
2) zdrojový-odvozený
- > určují způsob produkce, tj. build produktu
Úlohy SCM
1) Určení a správa konfigurace = “cfg idenfication and control”
určení (identifikace) prvků systému, přiřazení zodpovědnosti za správu
identifikace jednotlivých verzí prvků
kontrolované uvolňování (release) produktu
řízení změn produktu během jeho vývoje
2) Zjišťování stavu systému = „status accounting“
udržení informovanosti o změnách a stavu prvků
zaznamenávání stavu prvků konfigurace a požadavků na změny
poskytování informací o těchto stavech
statistiky a analýzy (např. dopad změny, vývoj oprav chyb)
3) Správa sestavení (build) a koordinace prací = „release management“
určování postupů a nástrojů pro tvorbu spustitelné verze produktu
ověřování úplnosti, konzistence a správnosti produktu
koordinace spolupráce vývojářů při zpracování, zveřejňování a sestavení
změn
Aktivity SCM v cyklu vývoje
1) Správa změn
2) Identifikace a správa verzí
3) Sestavení
Správa změn (SCM)
Problém: Jak zvládat množství požadavků na úpravy produktu (opravy, vylepšení)? Jak poznat kdy už jsou vyřešeny? Jak dohledat, co bylo změněno?
-> změnové řízení, change management
Nutný striktní postup akcí:
vyřešení prioritních, udržení konzistence a stability
informovanost o změnách, prevence duplikování práce
Význam ve všech fázích ŽC: evidence požadavků během jejich sběru přiřazení příslušné práce během vývoje hlášení a opravy chyb nalezených při testování úpravy produktu během provozu a údržby
Ticket, požadavek na změnu (SCM)
Hlášení problému (bug report), feature request
= popis nalezeného nedostatku nebo požadovaného
vylepšení
někdy obecně zváno „ticket“
strukturovaný dokument, obvykle v ALM nástroji
zdroj: QA aktivity, uživatel, marketing
Požadavek na změnu (change request, CR) – popisuje změny, které se mají provést na prvku/prvcích konfigurace
1 ticket <=> 1..N požadavků na změny
Někdy (často) spojovány do jednoho dokumentu/formy
1 bug report vede na více change requestů (implementace, dokumentace, testy…)
Proces správy změn (vykřičník)
!naučit se diagram
Požadavek na změnu – stavy vytvořený schválený přiřazený vyřešený ověřený uzavřený znovuotevřený odmítnutý
Během provádění
znovuotevření problémů
vygenerování nových hlášení
4 role:
- Submitter = vytváření, znovuotevření
- CCB = vyhodnocení, přiřazení, odmítnutí, schválení
- Assigned Worker = zpracování
- Tester = ověření
Detaily ticketu
1) Při vytvoření nutné náležitosti: shrnutí (+ id, autor, datum) popis, co nejpřesnější => jak chyba vznikla => jak reprodukovat screenshot, vzorek dat, … závažnost, priorita (odhad) konfigurace daného sw a systému (OS, knihovny, …) => včetně identifikace verzí
2) Při vyhodnocení závažnost, priorita odhad pracnosti => přímé (kód), návazné (doc) komponenta, verze závislosti („meta-bug“) zodpovědný vývojář
3) Při uzavření
shrnutí, zdůvodnění
skutečná pracnost
výsledná revize souborů/aplikace
Případy nouze při změnovém řízení
Jsou situace, kdy to nejde udělat dle složitého postupu (hoří čas, mimo schéma)
Prezentace: Kdy porušit pravidla (proces) marginální oprava těsně před release vyřešení problému u zákazníka …
Pravidla pro porušování pravidel
je jasný (dlouhodobý) přínos výjimky
nekamuflovat
-> každý má vidět, že nebyl dodržen standardní proces -> zdůvodnitelné, proč se tak stalo
zpětně zdokumentovat provedené akce
-> vytvořit hlášení problému, popsat provedené změny
opakované porušení musí vést k úpravě procesu
-> učit se z toho, co život přináší
Change Control Board
Skupina členů projektu, která má zodpovědnost za
změnové řízení
vyhodnocování a schvalování hlášení problémů
rozhodování o požadavcích na změny
-> CCB může významně ovlivňovat podobu a chod projektu
sledování hlášení a požadavků při jejich zpracování
koordinace s vedením projektu
Složení CCB jedinec – vývojář, QA osoba tým – technické i manažerské role -> vhodné pokud má změna mít velký dopad -> znalost účelu produktu
Pozn: Roli vždy někdo dělá (např. v případě Kanbanu ten, co dal položku do TODO)
Správa změn a řízení projektu
Jsou projekty, které řeknou “vydáváme, až bude málo chyb”
Prezentace: Kritéria dodávky (release management) časový termín implementovaná funkčnost / vlastnosti kvalita produktu
Jak určit termín podle kvality? Konverguje nám iterace?
Změnové řízení je jádrem řízení ve fázi údržby
Správa změn a verzování
Cíl: trasovatelnost
Vyhodnocení požadavku: jaké verze se týká
uživatelská verze
interní verze ze správy verzí
Uzavření požadavku
do BT výsledou verzi
do správy verzí ID vyřešeného požadavku
Vazba ticket-commit klíčová
-> viz vzor „Task-level commit“
Správa změn a požadavky
Požadavek = ticket typu feature request
Workflow vize požadavky DSP feature requests bugtracker (testy) bug report a/nebo re-open feature request
Trasovatelnost -> např. mapování user stories na change requesty
Flexibilita, souvislost s plánováním
Správa změn a údržba
Provoz produktu (uživatelská podpora)
vs. aktivní vývoj
nutná o to větší pečlivost při úpravách
Hlášení problému
oprava
garance, servisní smlouva / vícepráce
Požadavek na vylepšení
ihned => vícepráce
naplánovat do přírůstku
Systémy pro správu změn
1) Bug tracking (BT) systémy evidence, archivace požadavků skupiny a uživatelé kategorie hlášení úrovně závažnosti, priority verze produktu, operační systém vyhledávání reporty, grafy, statistiky sledování stavu požadavku cfg workflow, reportu
2) ALM (Application Lifecycle Management)
Bug/issue tracking funkčnosti a charakteristiky (viz vlevo)
Odhad a realita pracnosti
Plánování – milníky, fáze/iterace
Sledování – metriky, grafy
Těsná vazba na VCS
Dokumentace a komunikace (wiki, dokumenty, notifikace)
Multi-team a multi-project
Integrace s IDE
Správa verzí - charakteristika
Součást úlohy SCM „identifikace konfigurace“
aby prvek konfigurace mohl být ve správě SCM, musí být identifikovatelný, včetně všech svých podob
Účel správy verzí: udržení přehledu o podobách prvků konfigurace a konfigurací
Verze = jedna konkrétní podobu prvku nebo konfigurace
jaké aspekty zahrnuje „podoba“ => druh verzování
co je verzováno => granularita verzování
jak je verze určena (identifikace) => typ verzování
Nástroje: úložiště a verzovací systém (VCS)
Typy verzí (vykřičník)
Základní druhy verzí
1) historická podoba => revize (“Word 6.0”)
2) alternativní podoba => varianta (“Word pro Mac”)
“V historii jsem došel do bodu, kdy mám verzi konfigurace (např. 6.0), ale mám tři makefile pro tři zákazníky”
Jak určím, jakou verzi mám:
1) Verzování podle stavu
identifikují se pouze podoby prvků
výsledná verze vznikne vhodným výběrem
2) Verzování podle změn
identifikují se (také) změny prvků (viz později changeset)
výsledná verze vznikne aplikací změn
změny můžou aplikovat i na jiný stav konfigurace
není v div v gitu (div není samostatně identifikovatelný)
Granularita verzování
1) Verzování komponent
jednotlivé prvky samostatně
konfigurace nemá verzi
=> pokud chci složit konfiguraci, vyberu prvky s verzí x
2) Úplné verzování
verzi má celá (sub)konfigurace
indukuje verze prvků
=> mám více podproduktů s vlastním verzovacím systénem. vyberu podprodukty s jejich verzí x
3) produktové (uniformní) verzování
struktura (sub)konfigurace a systém verzování nezávislé
výběr verze indukuje prvky konfigurace
=> jako git, tj. revize nad celým produktem, ne nad podproduktem nebo prvkem konfigurace
Identifikace konkrétní verze
1) Extenzionální verzování každá verze má jednoznačné ID jednoduchá implementace = problémy při větším počtu verzí naprostá většina VCS (v gitu 64 bitový hash)
2) Intenzionální verzování
verze je popsána souborem atributů
nutné pro větší prostory verzí => potřeba vhodných nástrojů
např. chci verzi na DOS pro zákazníka ABC (nemusím znát id konfigurace)
Informace o verzi
Identifikátor verze (extenzionální)
- > typicky se používají 3 (4) prvkové číselné identifikátory
- > hodnoty pozic (rozdíly) nesou sémantiku
+meta-data
datum/čas vytvoření, autor
stav prvku/konfigurace
předchůdce (předchůdci)
Nástroje pro verzování
Úložiště (databáze projektu, repository) = sdílený datový prostor, kde jsou uloženy všechny prvky konfigurace projektu
centrální místo
určitě všechny prvky ve všech verzích
(způsob uložení: dle granularity a typu verzování)
-> Nutný řízený přístup (udržení konzistence)
Version Control System (VCS)
sada nástrojů pro práci s úložištěm
Implementace:
• souborový systém + dohodnutá pravidla používání
• verzovací nástroj
• databáze s rozhraním podporujícím postupy SCM
Práce s úložištěm
Základní operace
vytvoření – založení úložiště, případně zpřístupnění existujícího
inicializace – naplnění bootstrap verzí projektu
check out – kopie prvku do lokálního pracovního prostoru
check in (commit) – uložení změněných prvků do úložiště
branch + merge – oddělení různých prací
tag – označení vybrané verze symbolickým identifikátorem
zjišťování stavu – sledování změn v úložiště vs. prac.prostor
Přístup k zamykání při ci/co
read-only pro všechny
pesimistický: read-write kopie prvku jen pro pověřeného
optimistický: read-write pro kohokoli, řešení konfliktů
Centrální vs distribuovaný vývoj
Možnosti:
centrální úložiště = nemá příčné vazby
privátní větve
distribuovaný verzovací systém = umožňuje pull i od jiného člena, nejen z centralu
Centralizovaný
update
commit
Vyžaduje online přístup, zodpovědnost; poskytuje jednoduchost a přehled
Distribuovaný
fetch, update, commit, cleanup
push
Vyžaduje znalosti a disciplínu, rozlišení zdrojového úložiště; poskytuje variabilitu procesu
Pozn: nezaměňovat „distribuovaný“ a „vymoženosti git + GitHub“
workspace
Pracovní prostor (workspace) = soukromý datový prostor, v němž je možno provádět změny prvků konfigurace, aniž by byla ovlivněna jejich „oficiální“ podoba používaná ostatními vývojáři
vývojářský (soukromý)
integrační (sdílený)
Zpřístupnění úložiště pro práci
checkout
clone
Delta, Changeset (verzování)
Delta = množina změn prvku konfigurace mezi dvěma (po sobě následujícími) verzemi
- > příklad: přidání sekce „kontext produktu“ do DSP, patch foo.c
- > v některých systémech jednoznačně identifikovatelná (
Changeset
související delty tvořící atomický celek, ve správě SCM
obvykle též “+ důvod” tj. vazba na správu změn
viz OpenUp Concept: Change Set
= sloučení množiny delt
Tag (verzování)
Tag, label = označení konfigurace symbolickým jménem
štítek
různé způsoby realizace
Baseline (verzování)
Konzistentní konfigurace tvořící stabilní základ pro produkční verzi nebo další vývoj
-> příklad: milník „stabilní architektura“, beta verze aplikace
stabilní: vytvořená, otestovaná, a schválená managementem
změny prvků baseline jen podle schváleného postupu
Při problémech návrat k tag, baseline
Význačné:
1) Interní release (iterace)
2) Milníky projektu
- > jednotlivé fáze životního cyklu
- > alfa verze = „feature complete“, interní testování
- > beta verze = testování u (vybraných) zákazníků
3) Finální release produktu
- > verze dodané zákazníkovi/na trh
Paralelní práce
Souběžné úpravy stejné konfigurace spravované VCS
Důvod: velké úpravy, release, spekulativní vývoj, varianty
Cíl: vzájemná izolace paralelních prací
=> aby ukládané změny během nich neovlivnily ostatní
=> oddělení paralelních vývojových linií
Cena za izolaci od změn = řešení konfliktů
Větvení a spojování
Kmen (trunk, master) – hlavní vývojová linie
Větev (branch) – paralelní vývojová linie
konkrétní účel viz vzory pro verzování
operace vytvoření větve (branch-off, split)
Spojení (merge) – sloučení změn na větvi do kmene
slučuje se delta od branch-off nebo posledního merge
řešení konfliktů: automatizace vhodná, ale ne vždy možná
2-way a 3-way merge
Varianty u Git:
- squash
- rebase
Codeline (vykřičník)
Codeline (vývojová linie) = série podob (verzí) množiny prvků konfigurace tak, jak se mění v čase
= V podstatě větev v gitu doplněná o pravidla
HEAD = poslední commit na větvi (mám tolik headů kolik větví) TIP = nejčerstvější HEAD (jeden v projektu)
Pravidla (policy): • typ prací (vývoj, údržba, release, …) • očekávaná kvalita kódu • pravidla/akce před ci, po checkout, … • jak a kdy ci, co, branch, merge • přístup pro osoby a skupiny • kam (codeline) exportovat změny, odkud importovat • doba platnosti či podmínky odstavení
Vzory pro verzování
1) Privátní verze (private versions)
soukromé úložiště pro častější check-in
abych nedával commit na master, ale dělal do svého workspace
2) Check-in pro úkol (task-level commit)
minimum nutného
pro každý úkol v change managementu jeden commit
3) Větev pro úkol (task branch)
složitější úpravy s většími následky
izolace změn (většího úkolu)
feature branch
4) Hlavní vývojová linie a (mainline) a pravidla (codeline policy)
jedna codeline pro průběžný vývoj
5) Stabilizační období (code freeze)
pravidla před release
6) Větev pro release a jeho přípravu (release prep, rel line)
místo code freeze
7) Správa kódu třetích stran (third party codeline)
vlastní větev pro každý kód od externího dodavatele
Řízení sestavení
Aktivity provádějící transformaci zdrojových prvků
konfigurace na odvozené => zejména sestavení celého produktu
Cíl: vytvořit systematický a automatizovaný postup
Pojmy
sestavení / build (též integration) – proces a výsledek (artefakt) vytvoření částečné nebo úplné podoby aplikace
Sestavení: proces (kroky) (vykřičník)
- příprava
- check-out
- preprocessing
- překlad, linkování
- nasazení
- spuštění
- testování
- značkování, check-in
- informování
Sestavení != gcc a.c
Sestavení: pravidla (vykřičník)
1) Jedinečnost a identifikovatelnost
sestavení jako artefakt: PROJEKT_v2_build2134_20041220T1954
identifikátor jednoznačný, čitelný
vytvořitelný a zpracovatelný automaticky (schema pro id)
2) Úplnost
tvoří kompletní systém, obsahuje všechny komponenty
3) Konzistence
vzniklo ze správných verzí správných komponent
=> tj. z konzistentní konfigurace
4) Opakovatelnost
možnost opakovat build daného sestavení kdykoli v budoucnu se stejným výsledkem
5) Dodržuje pravidla vývojové linie
build odpovídající baseline
zejména release má striktní pravidla
Součásti prostředí pro sestavení
1) Pravidla -> Jak to provést?
vývojová linie
součásti a vlastnosti sestavení
2) Scripty -> Čím to provést?
check-out, značkování, check-in
preprocessing, překlad, linkování
nasazení, spouštění, testování
některé nebudou u interpretovaných jazyků, dokumentů apod.
informování vývojářů, vytváření statistik
vytvoření distribuční podoby (packaging)
3) Vyhrazený stroj a workspace -> Kde to provést?
„build machine“
zejména pro integrační a release sestavení
Typy sestavení (vykřičník)
Liší se:
1) Obsahem sestavení
přírůstkový (inkrementální) build
čistý
úplný
2) Účelem sestavení
soukromý
integrační (oficiální)
release build
Vzory pro sestavení
1) Základní postupy
soukromé sestavení (private system build) -> nad privátním workspace
integrační sestavení (integration build) -> nad sdíleným úložištěm, odstíněné od konfigurací vývojářů
2) QA-related postupy
zkouška těsnosti (smoke test)
regresní testy (regression test)
Cíl 1 + 2 => odchytit co nejdříve okamžik kdy „se to rozbilo“
3) Vydávání produktu
release build
balení a distribuce (packaging)
=> rozšíření integračního buildu, to co vznikne sestavení je verze produkt rozšířená o metadata indentifikující verzi + readme atd., slouží pro zákazníka
4) Podpůrné aktivity
kusovník (Bill of Materials) a zapouzdřená identifikace
archivace prostředí
Cíl 3 + 4 => opakovatelná záruka dostatečné kvality
Soukromé sestavení - vzor pro sestavení (jen prolétnout)
Cíl: ověřit si konzistenci konfigurace
produkt lze sestavit po mnou provedených změnách
před check-in (problémy řeším já x všichni)
Postup: sestavit produkt v soukromém prostoru
pomocí sestavení (scriptu) co nejpodobnějšího oficiálnímu
=> postup, verze nástrojů, adresářová struktura
=> rozdíly = problémy
obsahuje všechny závislé součásti produktu
ze zdrojových textů zejména změněné a přímo související
=> ze správy vzít pro build verzí vše / kromě označeného / pouze označené
Urychlení průběhu
použít inkrementální sestavení, kde je to vhodné
=> pozor při přidávání souborů, rozsáhlých a/nebo významných změnách
=> úplné sestavení: dělat na čistém (novém) workspace
vynechat postupy pro balení, vkládání info o verzi
pomoci si sdílením odvozených prvků (shared version cache)
Integrační sestavení - vzor pro sestavení (jen prolétnout)
Cíl: spolehlivě ověřit, že produkt jde sestavit
soukromý build nestačí
=> složité závislosti, specifiká ve workspace, zjednodušení pro zrychlení
úplné sestavení trvá dlouho => nemůže provádět vývojář
Postup: celý produkt (vč. závislostí) sestaven centrálně, automatizovaným a opakovatelným procesem
postup co nejpodobnější sestavení pro release
=> vždy „na zelené louce“ (clean full build)
maximální automatizace - typicky běží přes noc
spolehlivé mechanismy zaznamenání chyb a informování o nich
=> emailové notifikace začátek, konec, výsledek
=> web s přehledy a detaily
úspěšné sestavení může být označkováno ve verzovacím systému
Kusovník - vzor pro sestavení (jen prolétnout)
kompletní seznam prvků sestavení
=> reprodukovatelnost sestavení kdekoli, kdykoli
=> zejména při distribuovaném nebo jinak složitém buildu
samoidentifikující konfigurace pomůže
=> znalost verzí bez přístupu k verzovacímu systému
viz strojírenství ; automatizace (ClearCase make)
Archivace prostředí - vzor pro sestavení (jen prolétnout)
správa verzí objektů, které nejsou v úložišti
=> nástroje, platformy, hardware, prostředí - identifikovat sestavení
klíčové pro dlouho žijící software (např. povinné v letectví)
Release build - vzor pro sestavení (jen prolétnout)
Význačné integrační sestavení: dodáno zákazníkovi
=> může být interní zákazník, např. QA
Náležitosti release:
revize/verze konfigurace použité pro sestavení
=> které prvky, v jakých verzích (vč. 3rd party)
datum vytvoření
identifikátor sestavení
další metadata
=> zodpovědná osoba
=> zdrojová značka konfigurace (z verzovacího systému)
=> jakými prošlo testy, výsledky testů
=> cesta k logům překladu, testů
„marketingová verze“ – např. OpenCms 7.5
Daily Build and Smoke test (vykřičník)
=> jednou za den integrační sestavení, jehož součástí jsou smoke testy
Výhody
malé množství změn během denních check-in
=> zvladatelné množství oprav, včas detekce problémů „vždyť včera to fungovalo“, analýza změn kódu místo ladění – viz diskuse o sestavení
pravidelný, obecně známý rytmus projektu
lepší morálka týmu („to nám to roste“)
Cena: trocha discipliny, trocha automatizace
Continuous Integration
Integrace 1x denně => neustálie
Klíč: automatizace
co/ci, sestavení, testování, oznamování
robot na spouštění
Fáze předání: Přehled a cíle
(Hotová beta) -> Dát produkt k dispozici uživatelům
… triviální až extrémně složitá fáze
V rámci fáze předání se ukáže, jestli projekt naplnil potřeby a cíle zákazníka. -> Význam Vize
Milník: GA (REL)
Fáze předání: Klíčové aktivity a disciplíny
- nasazování produktu dle plánů nasazení
- dopracování podpůrných materiálů
- field testing a finální úpravy
- release
- marketingová kampaň, výroba, distribuce
Deployment Manager -> Plánování nasazení, vytvořit verzi produktu pro nasazení, vlastní nasazení
Vývojáři a Testeři -> Zbylý vývoj, zbylé QA, integrace systému
Technická podpora -> Vytvoření podpůrných materiálů, školení, videa, uživatelská příručka
Managemenet -> Uzávěrka projektu
Fáze předání: Charakteristika
Počet a povaha iterací různý
online služba
malý krabicový produkt
nová verze systému (např. řízení rozvodné sítě)
Možný současný / následný náběh nového cyklu
Legislativní a technické důsledky
záruka
servisní smlouva
podpora a údržba
Příprava vydání (vykřičník) (aktivity + role)
Nutné / obvyklé aktivity field testing a korekce (testování v prostředí zákazníka) -> konfigurace, použitelnost -> pokud funkčnost pak je problém konverze a integrace dat -> napojení na okolí -> autorizace a autentizace (přístupová práva uživatelů) -> data z release 1 do release 2 příprava překlopení (cutover) -> kterým okamžikem poběží nová verze, příprava přejímka (akceptační řízení) -> musí být zadavatelem systém schválený informační kampaň, školení uživatelů
Zainteresované role
development, operations
marketing, vrcholový management projektu, legal
Akceptační řízení
Formální odsouhlasení dodávky zástupcem uživatele
produkt a doprovodné materiály splňují požadavky
bylo dosaženo cílů vytyčených v plánu projektu
Následuje po [úspěšných] uživatelských testech produktu
Role
zástupce zákazníka
project manager, vedoucí týmů / oddělení
Podklady
iteration assessment
výsledky testů (funkčnost, instalace, dat, …) a dalších QA aktivit
prohlášení o ukončení přechodu na nový systém
Výsledek
akceptováno / s výhradami / neakceptováno
zákazník přebírá produkt do vlastnictví
Uzávěrka projektu
Cíl = formálně ukončit projekt, shrnout zkušenosti
zcela poslední iterace projektu
Interní audit konfigurace
kontrola úplnosti baseline (zde release) – fyzický audit
kontrola správnosti baseline – funkční audit
soupis chybějících prvků, neotestovaných funkčností, nefunkčních částí, neuzavřených change requests, …
opravy a začištění projektu
Post-mortem review
„only by analyzing our shortcomings can we learn to do better“ – viz dále Process improvement
obecné kroky: zjištění nastalých problémů, analýza jejich příčin (root cause analysis), určení opatření k nápravě
důležité faktory: komunikace, dokumentace, věcnost
Možný postup post-mortem review:
- dotazník
- data projektu, časová osa průběhu
- meeting a debata (tým)
- data a příčiny (vybraní)
- report
Pojmy CI / CD
Jakmile vývojář dokončí práci na úkolu …
1) Vanilla Development
nic se nestane (v lepším případě “merge na dev branch”)
2) Continuous Integration (CI)
změny kódu integrovány do mainline a procházejí sestavením
3) Continuous Deployment
sestavení je nasazováno na cílové prostředí
4) Continuous Delivery (CD)
nasazení znamená zpřístupnění koncovým uživatelům
Důvody pro CD
Agile Manifesto: Principle1: “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. “
Proměna technology/sw landscape
cloud (SaaS), mobile apps, služby postavené na sw
zmenšující se podíl instalovaných aplikací/systémů
Tlak na Time to Market
vydání produktu (start-ups), funkční a bezpečnostní aktualizace
vs délka procesu nasazení/vydání
Tlak na spolehlivost, dostupnost a bezpečnost
ekonomické důsledky, zodpovědnost provozovatele
Výkonnost organizace a vývojářský stres
chybovost systémů, frekvence změn, deployment pain
Přístup CD (principy)
To get product to users safely, quickly and sustainably:
build quality in
work in small batches
computers perform repetitive tasks; people solve problems
relentlessly pursue continuous improvement
everyone is responsible
organizační kultura
generativní (výkonově orientovaná)
vysoká míra spolupráce
experimentování, chyby vedou k analýze příčin
DevOps
Základ pro CD
Tradiční model
vývojový tým oddělen od provozní tým
nasazení do provozu je věcí provozního týmu
třecí plochy: akceptační testy, hotfixes, časté přírůstky
Dev(elopment plus)Op(eration)s těsně spolupracující
jeden tým (společná zodpovědnost)
– viz Scrum “cross-functional, empowered”
nové specifické dovednosti
úzká vazba na QA
intenzivní nástrojová podpora – rychlá integrace, verifikace, nasazení přírůstků; agile + SCM + cloud
CD jako proces životního cyklu
Týká se celého vývojového procesu, nikoli fáze předání
Kontext = zejména webové systémy, služby
=> rychlé zpřístupnění nových funkcí a oprav uživatelům
Fáze
Identification => business case
Inception => (viz UP)
Initiation => (~ Elaboration)
Develop and release => Construction+Transition
Operation => Production+Retirement (viz EUP)
Poslední dvě pak ve smyčce
Provoz a podpora produktu (vykřičník)
Provozní fáze: Nejdelší období životního cyklu sw
Cíl: udržení užitečnosti a efektivity
Operations and support:
zajištění provozu produktu, péče o prostředí
monitorování systému, zálohování a disaster recovery
spouštění jednorázových / zřídkavých úloh
pomoc uživatelům a komunikace s nimi
analýza problémů, reporty chyb a rozšíření, nasazení oprav
… viz konfigurační řízení
Údržba produktu (vykřičník)
Cíl: zabránit degradaci
= Vývojářská disciplína
Klasické typy údržby
corrective (opravy)
adaptive (např. přidání podpory pro nový typ zařízení)
perfective (nice to have věci, na které předtím nebyl čas)
preventive (refactoring)
Rozvoj produktu
souvislost s obchodním modelem
samostatný projekt .. předplacená služba
Discipliny pro enterprise kontext
= Obchodní obálka kolem vývoje
1) Enterprise administration
jak organizace vytváří, udržuje, spravuje a uvádí do provozu své „assets“ pro IT infrastrukturu
zajištění provozu systémů, dat, informací a bezpečnosti
“My potřebujeme license na OS, firewall…”
2) Enterprise architecture
definuje celkové jednotné prostředí, do kterého jsou zasazovány jednotlivé produkty
technické a organizační rámce, síťové prostředí, konfigurace, podpůrná infrastruktura
=> omezení architektury systémů
(např. požadavek výsledný produkt má být v technologii Microsoft)
3) Business modeling
porozumění stávajícím (nezměněným) cílům, hranicím, procesům a strukturám organizace [zákazníka]
význam pro BPR, potřeba hlídat rozsah
UML: activity models. BPMN.
4) Software process improvement (SPI)
podpora analýzy, vytváření a používání sw procesů vedoucích k efektivitě
Agile: průběžná aktivita (retrospektivy, Scrum master)
Vyřazení produktu
Odebrání z provozu (+ nahrazení novým)
Důvody:
náhrada novým systémem, redundantní
neudržováno / zastaralé
k nepotřebě
Zainterestované skupiny vlastníci („investoři“) koncoví uživatelé operations and support obchod a marketing
Postup vyřazení z provozu (vykřičník)
Aktivity
analýza vazeb na ostatní systémy
určení strategie a realizace postupu vyřazení + nahrazení
testy (náhrada funkčnosti)
aktualizace dokumentace
migrace dat, uživatelů
archivace dat, kódu, deployment procesu, dokumentace
vypnutí přístupů (autorizační systémy) a konektorů
odstranění systému
Základní strategie pro vyřazení
„big bang“ / po etapách / v souběhu s novým
Jaký software je „kvalitní“
Klíčový pojem: Fitness for purpose „The totality of features and characteristics of a product or service that bears its ability to satisfy stated or implied needs.“ (ISO 8402:1986 Quality – Vocabulary)
=> primární měřítko jsou uživatelské požadavky
jiná definice: absence chyb (Six Sigma)
Funkcionalita je očekávána, kvalitativní vlastnosti prodávají
„How do we define sw development success?“
Druhy kvality
vnější – spolehlivost, výkonnost, použitelnost, bezpečnost, …
vnitřní – architektura, odolnost proti změnám, testovatelnost, …
Vnitřní kvalita je základem pro vnější
ISO 25010 Software Quality Model
Functional Suitability Performance Efficiency Compatibility Usability Reliability Security Maintainability Portability
Úroveň dosahované kvality
Široké spektrum
„semestrální práce“
utilita
[systémový] produkt
systém odolný proti poruchám (fault-tolerant)
bezpečnostně kritický (safety-critical) systém
Určení úrovně kvality důležité pro technické i organizační aspekty projektu
Opak kvality: geneze selhání sw
1) Omyl (error)
přehlédnutí, omyl nebo špatné designové rozhodnutí
programátora; důsledkem je
2) Defekt (defect, též fault či bug)
závada, nedostatek v [zdrojovém kódu dodaného] produktu; důsledkem může být
3) Chybový stav (run-time fault)
jiný než očekávaný (správný) run-time stav nebo výstup (sub)systému; důsledkem může být
4) Selhání (failure)
neschopnost systému nebo jeho části vykonávat požadované funkce v požadovaných výkonnostních limitech; pozorovatelné navenek.
Řetězení a cena chyb
Jednou vzniklá chyba působí řetězovou reakci
Čím později odhalena tím dražší náprava
=> relativní cena odstranění chyby
… následky chyby se zvětšují během vývoje
Způsoby zajištění kvality (vykřičník)
QA = Quality Assurance
Verifikace (bezchybný produkt) a validace (správný produkt)
Detekční a opravné techniky
cíl: najít a opravit již existující chybu
testování a ladění
typické v koncových fázích („výstupní kontrola“)
Preventivní techniky cíl: zabránit vzniku event. dalšímu šíření chyby „racionální proces“ a „best practices“ kontroly a měření meziproduktů častější v úvodních fázích
Testování
Ověření správné funkčnosti implementace
Úrovně testování
jednotkové -> integrační -> funkční -> systémové
zátěžové, výkonnostní, bezpečnostní, instalační, použitelnosti
interní, akceptační
Techniky pro testování
white-box, black-box
výběr dat (hraniční podmínky, fuzz testing, …)
Smoke Test
Cíl: ověřit, že sestavení vytvořilo funkční produkt
samotný překlad/linkování toto nezaručuje
kompletní testování trvá dlouho
potřebujeme rychlý základní test, jehož provedení „nebolí“
Postup: vytvořit testy ověřující základní funkčnost, bez
nároku na kompletní otestování
odchytí nejkřiklavější chyby, odpustí drobnosti
automatizace - spuštění, vyhodnocení
spuštění při každém buildu (vč. soukromého)
-> podle toho náročnost, rozsah, počet testů
-> může být založena na testech modulů
-> přidání nových funkcí/vlastností => nové testy těsnosti
Regresní testy
Cíl: zajistit, aby nové funkce a vylepšení nesnižovaly kvalitu již hotového kódu
prevence stárnutí kódu: zanášení chyb při implementaci vylepšení
vymyslet mechanismus jak vytvářet vhodné testy
Postup: ověřit build produktu pomocí testů, kterými již dříve prošel (kromě testů nových funkcí)
indikátor existence systémových problémů
určení zdroje chyby není nutné => testy integrační, modulů
testování změn v (nečekaných) integračních aspektech
spuštění při integračním sestavení, před velkými změnami
Dobrý zdroj testů: chyby objevené QA, při validaci, zákazníkem
produkt selhal -> napsat test, který to dokáže -> přidat jej do sady regresních testů (odebírání testů ze sady není dobrý trik)
Statická kontrola kódu
Ověření formální správnosti + dodržování pravidel + metriky
Nástroje
překladač a jeho hlášení (!)
C: lint
Java: pmd, findbugs, checkstyle, JSR 305
Postupy
Programming by Contract
review, párové programování
automatický build – výběr pravidel, průběžné úpravy
Formální verifikace
Matematické důkazy správnosti
návrhu
implementace
Model checking
formální model systému – Petriho sítě, algebry (CSP)
a-priori nebo získaný analýzou kódu
model checker => deadlock-free, liveness, …
soulad s implementací
Nástroje: Java PathFinder, SPIN, PRISM, SMV, …
Preventivní techniky (vykřičník)
Best practices
návrhové vzory, coding practices
refactoring
prověření (oponentura) meziproduktu nezávislou osobou
techniky spolupráce => pair and mob programming (“víc očí víc vidí”)
Kontroly a úpravy procesu metriky a automatizované testy => zpětná vazba retrospektivy coaching, mentoring GQM přístup
Technická oponentura
Též Faganovská inspekce (Fagan, IBM 1976)
Skupinová technika (využití diverzity pohledů)
Cíl: odhalit chyby v návrhu/kódu/dokumentu
Souběžný efekt: sledování standardů, vzdělávání
Ne: dělat potíže autorovi (neúčast vedení), hledat nápravu chyb
Role ve skupině (cca 4-7 lidí)
moderátor – řídí diskusi
průvodce – předkládá dílo (není autor)
autor – vysvětluje nejasnosti
zapisovatel – zaznamenává nalezené problémy
oponenti – hledají chyby, obvykle podle seznamů otázek
Technická oponentura – postup
Příprava
distribuce díla (moderátor), projití a hledání problémů (oponenti)
několik dní předem, cca 2h práce
Schůzka
sekvenční procházení díla (průvodce či moderátor)
vznášení připomínek
zapisování nálezů (chyb a otevřených otázek)
-> nejvýše 2 hodiny
-> nepřipouštět dlouhé diskuse, řešení chyb (moderátor)
-> možná následná schůzka pro vyjasnění otázek
Závěry
verdikt: v pořádku / drobné chyby / nutné přepracování / nová
oponentura
autor odstraní chyby dle nálezů, moderátor zkontroluje
dokument „Nálezy oponentury“
„Lehčí“ techniky technické oponentury
1) Strukturované procházení
podobné Faganovské inspekci
menší důraz na formálnost, větší flexibilita
shodné: příprava předem, schůzka s procházením, checklist
není: striktně rozdělené role, následná kontrola oprav, statistiky
2) Peer review „kontrola nezaujatým čtenářem“ autor prochází kód a vysvětluje kolega hledá problémy a komentuje častý jev: autor najde chyby ve svém kódu, když jej má vysvětli
3) XP edition: Párové programování
4) Modern Agile: Mob programming
Statistické řízení procesu
Základ: metriky (statistické kontroly)
indikátor „někde je něco špatně“
kvantitativní ukazatele pomáhají najít slabiny kvality
přesnost a dokazatelnost, možnost statistik
Stanovení očekávaných / správných hodnot
Průběžné monitorování
=> technika zasévání chyb
Korekce procesu při odchylkách
Účel měření v software
K dosažení požadované kvality potřebuje Kvantitativní ukazatele
pomáhají najít slabiny => zlepšení
dávají přehled a kontrolu
kalibrují odhady
Výhody
přesnost a dokazatelnost
možnost statistik a vizuální prezentace
Potřeba „Organizational focus“ – záměr zlepšovat kvalitu
vede k potřebě mít informace
Teorie měření (definice metriky, hodnoty, očekávání x skutečnost) (vykřičník)
Metrika = měřitelná charakteristika nějaké entity
měřený objekt (entita): pro nás sw produkt, prvek sw procesu
odvozená získána na základě dat (primitivních metrik)
náhradní (proxy) metrika pro obtížně měřitelné entity
Hodnoty
stupnice –
nominální => jen slovně, nemají jinou vazbu (tagy)
ordinální => seřazené hodnoty (priority)
intervalové => od-do (odhad času) (stupně Celsia)
poměrné => kolikrát je něco delší (stupně Kelvina)
proporcionální => poměr z celku (poměr kritických chyb)
procentuální => proporcionální v procentech
míra => kolikrát za jednotku času
očekávané (min/max/průměr), skutečné (dtto, trend)
Platnost (validnost) měření => korelace, závislé a nezávislé veličiny Spolehlivost měření => průměr/medián, odchylka Chyby měření => systematické, nahodilé
Př.: • stav defektu • priorita defektu • odhad pracnosti • velikost modulu • četnost kritických chyb • % kritických chyb • změny požadavků
Druhy metrik v SWI
1) Produktové
- velikost
- složitost, přehlednost
- kvalita
- spolehlivost
- problém: nehmotný produkt
2) Procesní
- rychlost
- kvalita
- efektivita
- problém: měření činností a vlastností lidí
Produktové SW metriky
1) Velikost
počet UC, funkčních bodů
LOC (= lines of codes): možná někdy případně i také
=> SLOC, DSLOC, CBLOC, TLOC
2) Složitost, přehlednost McCabe cyclomatic complexity fan-in / fan-out (afferent / efferent coupling) => stabilita weighted method per class lack of cohesion
3) Spolehlivost MTBF = MTTF + MTTR MTTF = střední doba poruchy MTTR = střední doba opravy MTBF = střední doba mezi poruchami (meantime between failures) dostupnost [%] = (MTTF / MTBF) x 100 dostupnost typická proxi pro spolehlivost
4) Kvalita
pokrytí testy – kódu, požadavků
charakteristiky defektů – hustota, výskyt
kvalita zdrojového kódu – četnost chyb PMD/FindBugs
složitost kódu
Procesní metriky
1) Postup pracnost project velocity / burndown burnup – sledování dostupných zdrojů jitter – change requesty a jejich zpracování, staff turnover, změny postupu/plánu
2) Kvalita (procesní stránka)
breakage = průměrná váha změny (LOC / CR)
pracnost celkem, přepočtená na CR
defect discovery rate, defect removal (zpracování, trendy)
průměrná doba opravy
=defect discovery (úroveň testování X úroveň SW) => co mi ta veličina říká
Nástroje pro měření
Procesní
ALM
kalendář
Produktové
statsvn
junit a cobertura
databáze
spreadsheet
Stata, IBM SPSS apod.
Plánování a řízení měření
Organizational focus jako východisko
management musí chtít „evidence-based process“
Plán měření = proč měřit, co měřit, jak měřit, jak s daty
pracovat, jaké akce provádět s výsledky
definice metrik, jejich význam a zpracování – připravit lidi
způsob získání dat – připravit nástroje
Sledování projektu a produktu
automatické získávání a vyhodnocování
sledování (management)
korektivní akce
Komplexní přístup: „Program měření“
Lightweight přístup (agile): „Měřit za pochodu“
Ukazatele (metriky) samy o sobě „k ničemu“
cílem je informace (trend, statistika) => odhalování příčin => reakce
Přístup k měření – ve firmě
proč měřit
jak s daty pracovat
Plán měření – pro projekt
co měřit
jak měřit
akce při zjištění nesouladu
Techniky
GQM
zasévání chyb
Goal-Question-Metric (vykřičník)
Goal – problém + cíl měřicího programu
Question – měřené objekty a způsob měření
Metric – konkretizují získávaná data
G: Zlepšit spravedlivost v oceňování práce na projektu
Q: Kolik práce odvádí jednotliví členové týmu?
M: Počet řádek uložených v svn; Váha uzavřených tasků v bugtrackeru (součty severity*effort)
Co je řízení jakosti
6.5.1.1 Identifikovat, monitorovat a kontrolovat všechny činnosti, jak technické tak manažerské, které jsou nezbytné pro zajištění toho, že software dosáhne požadované kvality.
To je nezbytné pro poskytnutí požadované kvalitativní obrany proti systematickým vadám a pro zajištění možnosti provádět audity, aby mohly byt verifikační a validační činnosti prováděny efektivně.
6.5.1.2 Poskytnout důkaz, že výše zmíněné činnosti jsou prováděny.
Proč systémy řízení jakosti
Snaha o kvalitu výroby (práce) systematicky na úrovni celé organizace
nestačí spoléhat na snahu jednotlivců
Problém se týká všech oblastí podnikání výrobní odvětví (vč. softwarového průmyslu) doprava a logistika ostatní služby kontrola výrobků a služeb
Přístup systémového řízení jakosti
Premisa: pokud je kvalitní proces návrhu a výroby, bude kvalitní i produkt
QA systém = soustava organizačních postupů a technických nástrojů, které mají zajistit tvorbu kvalitních produktů či poskytování kvalitních služeb (tj. to, že budou odpovídat požadavkům)
proaktivní přístup: snaha zajistit správnost výrobků během vývoje a výroby, nikoli až odstraňováním nekvalitních při výstupní kontrole
zvláště významné pro software (vývoj vs výroba)
Složky systémů řízení jakosti (vykřičník)
Systém se týká celé organizace => všech pracovníků
Organizační prvky
podpora vedení
Manažer + Oddělení pro otázky kvality
Interní kontroly – dokumentace, postupů
Postupy
např. automatizované testování
Dokumentace
normy a záznamy
Standardy a definice – obecný popis (vlastností) systému
Politika jakosti – přístup ke kvalitě
Příručka jakosti – popis procedur
Plány pro celý vývojový cyklus
Záznamy – o dosažené kvalitě, průběhu vývoje, vzdělávání, …
Audit
důkaz o kvalitě pro zákazníky/klienty
Certifikační (registrační)
Průběžný – periodická kontrola
Software Process Improvement
Aims to understand the software process as it is used within an organisation and thus drive the implementation of changes to that process to achieve specific goals such as increasing development speed, higher product quality or reducing costs.
The key purpose of process assessment (or “appraisal”, “capability evaluation”) is to determine whether a process satisfies the criteria at a given level and identify process activities and combinations that need to be modified to better achieve project goals.
SEPG = software engineering process group = skupina, která se stará o SPI
Capability maturity models = guides for assessment and (incremental) improvement