V dnešní době je Proces vývoje softwaru tématem, které ve společnosti získalo velký význam. Postupem času vzbudila zájem velkého množství lidí díky svému vlivu na různé oblasti každodenního života. Od svého vzniku Proces vývoje softwaru vyvolal debaty, úvahy a dokonce kontroverze, což vedlo k tomu, že se mu dnes věnuje větší pozornost. Vzhledem k relevanci, kterou získal, je důležité ponořit se hlouběji do analýzy Proces vývoje softwaru, pochopit její důsledky a hledat možná řešení. V tomto článku toto téma podrobně prozkoumáme, abychom lépe porozuměli jeho rozsahu a různým perspektivám, které kolem něj existují.
Proces vývoje softwaru (anglicky software development process) je v softwarovém inženýrství proces členění práce při vývoji softwaru na různé fáze s cílem zkvalitnit proces návrhu softwaru, správu softwaru a řízení softwarového projektu. Celý proces vývoje softwaru se také nazývá životní cyklus vývoje softwaru (anglicky software development life cycle, SDLC). Metodika může zahrnovat i předběžnou definici určitých dodávaných položek a artefaktů, které projektový tým vytváří a dokončuje pro vývoj nebo údržbu aplikace.[1]
Většinu moderních procesů vývoje lze vágně popsat jako agilní metodiky. K jiným metodikám patří vodopádový model, prototypování, iterativní a inkrementální vývoj, spirálový vývoj, Rapid Application Development a extrémní programování.
Někdy je „model“ životního cyklu považován za obecnější termín pro kategorii metodik, a „proces“ vývoje softwaru za konkrétnější označení určitého procesu používaného nějakou organizací. Existuje například mnoho konkrétních procesů vývoje softwaru, které odpovídají spirálovému modelu životního cyklu. Proces vývoje softwaru je často považován za část životního cyklu vývoje systému.
Metodiky vývoje softwaru (anglicky software development methodology, SDM) se začaly objevovat až od konce 60. let 20. století. Podle Elliotta (2004) lze za nejstarší formalizovanou metodiku pro vytváření informačních systémů považovat životní cyklus vývoje systému (anglicky Systems Development Life Cycle, SDLC). Hlavní myšlenkou SDLC bylo „velmi promyšleně, strukturovaně a metodicky sledovat vývoj informačních systémů, aby každá fáze životního cyklu – od počáteční myšlenky po doručení výsledného systému – byla v rámci použité metodiky (frameworku) provedena přesně a postupně“.[2] V 60. letech 20. století byl hlavním cílem tohoto metodického přístupu „vývoj rozsáhlých funkčních firemních systémů pro éru velkých obchodních konglomerátů. Činnost informačních systémů té doby byla zaměřena na zpracování hromadných dat a intenzivní numerické výpočty.“[3]
Metodiky, procesy a frameworky sahají od určitých předepsaných činností, které může organizace provádět při své každodenní činnosti, až po flexibilní frameworky, které organizace používají pro vytváření vlastních postupů přizpůsobených potřebám určitého projektu nebo skupiny. „Sponzor“ nebo „vedení“ organizace obvykle distribuuje oficiální sadu dokumentů popisujících tento proces. Příkladem jsou následující metodiky:
Za povšimnutí stojí, že počínaje DSDM v roce 1994 byly všechny uvedené metodiky kromě RUP agilní – i když mnoho organizací, zvláště vlád, stále používá starší procesy (často vycházející z vodopádového modelu). Platí, že softwarový proces a kvalita softwaru se vzájemně ovlivňují; v praxi byly pozorovány některé neočekávané aspekty a účinky.[4]
Další proces vývoje softwaru byl vytvořen v oblasti otevřeného softwaru a svobodného softwaru. Přijetí těchto nejlepších známých praktik a vytvoření procesů uvnitř hranic společnosti se nazývá InnerSource.
Softwarové prototypování je založeno na vytváření prototypů, neboli částečných verzí softwaru.
Základní principy jsou:[1]
Prototypování klade důraz na přístup, že pro zabránění řešení nesprávných problémů, je nutné důkladné pochopení podstaty obchodního problému.
„Agilní vývoj softwaru“ je skupina metodik vývoje softwaru založených na iterativním vývoji, kde se požadavky a řešení postupně vyvíjejí těsnou spoluprací mezi samoorganizujícími se multifunkčními týmy. Termín se objevil v roce 2001, kdy byl formulován Agilní manifest.
Agilní metodiky jsou založeny na iterativním vývoji, ale usilují o odlehčenější a více na lidi zaměřený přístup než tradiční metodiky. Agilní procesy v základu zahrnují iteraci a neustálou zpětnou vazbu, které vedou k postupnému zjemňování a doručování softwarového systém.
K agilním metodikám patří:
Průběžná integrace (anglicky Continuous integration, CI) je založena na častém (několikrát za den) slučování pracovních kopií jednotlivých vývojářů do sdílené větve.[5] Průběžnou integraci jako první navrhl a pojmenoval Grady Booch ve své metodice z roku 1991,[6] který však neobhajoval slučování několikrát za den. Koncept průběžné integrace převzalo extrémní programování (XP), v němž se má slučování uskutečňovat vícekrát za den.
Pro zkombinování lineárních a iterativních metodik vývoje systému jsou přijatelné různé metody, přičemž primárním cílem každé z nich je omezení inherentního rizika projektu jeho rozkladem na menší segmenty a usnadňování změn v průběhu vývojového procesu.
Existují tři hlavní varianty inkrementálního vývoje:[1]
Rapid Application Development (RAD) je metodika vývoje softwaru, která upřednostňuje iterativní vývoj a velmi rychlou konstrukci prototypů místo velkého plánování. „Plánování“ vývoje softwaru pomocí RAD se střídá se samotným psaním softwaru. Obecně odstranění předběžného plánování umožňuje, aby software bal vytvářen mnohem rychleji a usnadňuje reakci na změny požadavků.
Proces RAD začíná vývojem předběžných datových modelů a modelů obchodního procesu pomocí strukturovaných technik. V další fázi jsou požadavky ověřeny pomocí prototypování, přičemž dochází ke zjemňování dat a modelů procesu. Tyto fáze se iterativně opakují; další vývoj vede k tomu, že „kombinované obchodní požadavky a popis technického návrhu je použit pro zkonstruování nových systémů“.[7]
Název RAD byl nejdříve používán pro popis procesu vývoje softwaru, který zavedl James Martin v roce 1991. Podle Whitten (2003) jde o sloučení různých strukturovaných technik, zvláště inženýrství informačních technologií řízených daty, s technikami prototypování pro urychlení vývoje softwarových systémů.[7]
Základní principy Rapid Application Development jsou:[1]
V roce 1988 publikoval Barry Boehm formální „spirálový model“ vývoje softwarového systému, který kombinuje některé klíčové aspekty vodopádového modelu a metodiky Rapid Application Development s cílem zkombinovat výhody konceptů shora dolů a zdola nahoru. Poskytl důraz na klíčovou oblast, o které se mnozí domnívají, že byla jinými metodikami přehlížena: promyšlená iterativní analýza rizik vhodná zvláště pro rozsáhlé a složité systémy.
Základní principy spirálového modelu:[1]
Vodopádový model je sekvenční přístup k vývoji softwaru, ve kterém je vývoj vnímán jako neustálý tok (podobný vodopádu) několika fázemi, typicky:
Jako první formální popis metody je často citován článek, který publikoval Winston W. Royce[11] v roce 1970 ačkoli Royce v tomto článku termín „vodopádový“ nepoužil. Royce tento model prezentoval jako ukázku chybného, nefungujícího modelu.[12]
Základní principy jsou:[1]
Vodopádový model je tradiční inženýrský přístup aplikovaný na oblast vývoje softwaru. Striktně vodopádový přístup zapovídá opakování a revize jakékoli předchozí fáze, jakmile je jednou dokončena. Tato „nepružnost“ čistě vodopádového modelu je předmětem kritiky lidí podporujících jiné, „flexibilnější“, modely. Několik rozsáhlých projektů pro vládní úřady, které překročily rozpočet, nebyly dokončeny včas, případně jejich výsledky neodpovídaly požadavkům kvůli přístupu Big Design Up Front, vedlo k široké kritice vodopádového modelu. Proto byl ouze pokud contractually požadovaný, vodopádový model bylo z větší části nahrazený novější verzí flexibilnější a versatile metodika vyvinuté konkrétně pro vývoj softwaru. Viz Kritika vodopádového modelu.
K dalším vysokoúrovňovým metodikám řízení softwarového projektu patří:
Některé „modely procesů“ jsou abstraktní popisy pro vyhodnocování, porovnávání a zlepšování určitého procesu používaného firmou.
Za léta vývoje se objevilo množství metodik vývoje softwaru s různými přednostmi i slabinami. Určitá metodika nemusí být vhodná pro použití ve všech druzích projektů. Každý z dostupných metodických frameworků jsou nejvhodnější pro určitý druh projektů založených na různých technických, organizačních, projektových a týmových kritériích.[1]
Firmy, které vyvíjejí software implementují různé metodiky, aby si zjednodušily proces vývoje. Někteří velcí zákazníci a kontraktoři, např. zbrojní průmysl USA, podmiňují získání zakázky použitím ratingu založeném na modelování procesů. Mezinárodní norma pro popis metody výběru, implementace a sledování životního cyklu softwaru je ISO/IEC 12207.
Při vytváření metodik vývoje softwaru bylo po desetiletí hlavním úkolem hledání opakovatelných a předvídatelných procesů, které zlepšují produktivitu a kvalitu. Některé se snaží systematizovat nebo formalizovat těžko popsatelnou úlohu návrhu softwaru. Jiné aplikují obecné techniky řízení projektů na oblast navrhování softwaru. Velké množství softwarových projektů nesplnilo očekávání kvůli nedostatečné funkčnosti, vysoké ceně nebo rozvrhu doručení – příklady jsou v seznamu zakázkových softwarových projektů, které selhaly nebo výrazně překročily rozpočet.
Organizace může vytvořit Software Engineering Process Group (SEPG), která je ústředním bodem pro zlepšování procesu. Skupina by měla být složena z praktiků, kteří mají různé dovednosti, aby se stala centrem společného úsilí každého v organizaci, kdo se účastní zlepšování procesu vývoje softwaru.
Určitý vývojový tým může také schválit detaily prostředí pro programování, například jaké integrované vývojové prostředí (IDE) se bude používat a jedno nebo více hlavních programovacích paradigmat, styl zápisu programu nebo volbu určitých softwarových knihoven nebo softwarové frameworky. Tyto detaily obecně nejsou vynuceny volbou modelu nebo obecné metodiky.
V tomto článku byl použit překlad textu z článku Software development process na anglické Wikipedii.