Adastra Logo
 
header


Časopis: Computerworld
Číslo: 11
Rok: 2008
Název: Softwarová architektura
Autor: Ondřej Maléř, Adastra

Při tvorbě komplexních informačních systémů si dnes již nelze vystačit jen s popisem algoritmů a datových struktur, ale je nutné se zabývat strukturou systému na vyšší úrovni abstrakce.

Vývoj softwaru je disciplínou, která se neustále dramaticky vyvíjí a postupně stoupá i složitosti systémů řešících nový typ úloh. Proto je nezbytné, aby se na vzniku programů podílel i člověk, který se zaměří na komplexní strukturu nového řešení. Zvláště patrná je tato potřeba v okamžiku, kdy organizace používá více různých informačních systémů, které je potřeba propojit.
Řešením jsou nejrůznější snahy o integrační projekty, jejichž cílem je dosáhnout správné struktury celého IT systému organizace. Primárním požadavkem přitom je, aby tato struktura byla schopná efektivně reagovat na změny prostředí.
Jednou z mnoha odpovědí, které softwarový průmysl přinesl jako reakci na tento vývoj, je rozvoj nových disciplín, jako je třeba softwarová architektura. Dalšími jsou například nově vytvářené technologie a paradigmata, jako jsou architektura orientovaná na služby (nazývaná SOA), změny v metodikách, například iterativní vývoj či agilní metodiky a další. V tomto článku bychom se však rádi zaměřili právě na softwarovou architekturu a oblasti s ní související.

Softwarová architektura
Softwarová architektura je obor velmi mladý, a to i v kontextu vývoje softwaru, přičemž její kořeny spadají do konce osmdesátých či začátku devadesátých let. Vznik potřeby nového oboru softwarové architektury také souvisí s bleskovým rozvojem internetu během devadesátých let, který přinesl firmám nečekané možnosti v dobývání nových pozic na trhu a znamenal nové komplexnější požadavky obchodu na IT složku organizace. I přes svůj mladý věk si softwarová architektura již však dokázala ve vývoji softwaru najít své místo.

Pokud se podíváte detailněji na strukturu IT složky velkých společností, jako jsou banky, telekomunikační společnosti, pojišťovny apod., naleznete zde zpravidla také oddělení nebo skupinu lidí, kteří se softwarovou architekturou úzce zabývají.
Softwarová architektura ale není v rámci vývoje softwaru něčím, co by viselo jaksi ve vzduchoprázdnu. Cokoli, co je jejím výstupem, musí být spojeno s nějakým požadavkem či potřebou spjatou s obchodním přínosem organizaci. Softwarová architektura tedy pracuje s potřebami/požadavky a tyto transformuje do struktury vytvářeného systému. Důležitými aktivitami v tomto procesu jsou dekompozice systému na menší celky, nazývané například komponenty, definice rozhraní mezi komponentami a vytváření vhodných abstrakcí. Dalším důležitým předmětem zájmu softwarové architektury jsou požadavky nesouvisející přímo s funkcionalitou systému, kolektivně označované jako atributy kvality. 

 

 


Architektura v IT
Softwarová architektura není jedinou „architekturou“ v oboru informačních technologií. Objevuje se zde totiž více různých pojmů, které v sobě slovo architektura obsahují a které s oborem softwarové architektury souvisejí.

  • Business Architecture se primárně zabývá obchodními strategiemi, řízením, organizací a klíčovými obchodními procesy. I když tyto aktivity na první pohled nepatří vůbec do oboru informačních technologií, je potřeba si uvědomit, že dnešní organizace a jejich procesy jsou s informačními technologiemi velmi úzce spjaty a některé obory, jako například telekomunikace, jsou na nich přímo fyzicky závislé.
  • Information Technology Architecture definuje hardwarovou a softwarovou infrastrukturu potřebnou pro chod organizace a zabývá se otázkou, jak správně a efektivně řídit investice do IT infrastruktury.
  • Information Architecture se zabývá organizací a správou dat. Většina podniků má k dispozici velké množství dat, které jí mohou pomoci v obchodním rozhodování, ale smutnou skutečností je, že organizace zpravidla s těmito daty nedokáží efektivně nakládat. Do této kategorie architektury spadá třeba Master Data Management, business intelligence, datové sklady apod.
  • Enterprise Architecture je pojem sdružující v sobě Business Architecture, Information Technology Architecture, Information architecture i softwarovou architekturu.

Softwarová architektura se v tomto kontextu zabývá tvorbou i rozvojem jednoho systému (aplikace) a jeho zasazením do prostředí jeho běhu, tedy nasazením systému na existující hardwarovou a softwarovou infrastrukturu a integrací systému s ostatními systémy. Potřeba upravit stávající informační systém, případně vytvořit nový, vychází zpravidla z potřeb změny nebo lepší podpory obchodních procesů, tedy z Business Architecture. Softwarová architektura pak pro dosažení svých cílů využívá prostředků poskytovaných Information Technology Architecture a Information Architecture. Je vhodné doplnit, že se v praxi lze setkat s různými dalšími pojmy, jako jsou Application architecture, System(s) architecture, Solution Architecture. I když v každé organizaci může každý z těchto pojmů znamenat trošku něco jiného, dá se však zjednodušeně předpokládat, že se jimi myslí právě softwarová architektura.

Role architekta
S příchodem softwarové architektury se objevila v procesu vývoje softwaru také nová role softwarového architekta. Ten je zodpovědný za návrh správné architektury systému tak, aby systém byl schopen naplnit požadovanou funkcionalitu při dosažení požadované kvality.
K tomu, aby člověk byl v pozici softwarového architekta úspěšný, musí disponovat sadou znalostí a dovedností. Na jedné straně jsou to takzvané „hard skills“, tedy dovednosti týkající se přímo meritu jeho práce, jako jsou znalosti technologií, schopnost návrhu systému, schopnost rychlé orientace v problémové oblasti, schopnost odhadovat pracnost a časovou náročnost řešení atd.
Na straně druhé jsou pak vyžadovány takzvané „soft skills“, neboli schopnosti komunikace, prezentace, dokumentace, vyjednávání, mediace. Vše doplňují požadavky na manažerské dovednosti, jako jsou vedení lidí, plánování, správa rizik, schopnost rozdělování a delegace práce. Požadavky kladené na kvalitního architekta jsou tedy tak vysoké, že se tato role může bezpochyby měřit s ostatními manažerskými posty.
Stejně jako u pojmu „architektura“ se můžete také s pojmem „architekt“ v oboru IT setkat na mnoha místech. Situace v oboru je taková, že slovo „architekt“ má dnes na vizitce již skutečně leckdo. Proto se kromě softwarového architekta (nazývaného též systémový nebo aplikační architekt) lze v oboru setkat s rolemi Enterprise architect, Solution architect, Information architect, Data architect, Integration architect a dalšími.
S nadsázkou lze tedy říci, že svět IT dnes čelí invazi architektů. Není autorovým úmyslem zde tvrdit, že pokud má někdo na vizitce uvedeno softwarový architekt, pak je něčím víc. Spíše bych rád upozornil na skutečnost, že používaných termínů je mnoho a každá organizace si je vykládá po svém. Proto je vždy nutné se detailně seznámit s tím, jaká je náplň té či oné role v příslušné organizaci.

Atributy kvality
Jedním z úkolů softwarového architekta je spolupráce na určení atributů kvality požadovaného řešení a navržení cílové architektury systému tak, aby tyto atributy kvality byly co nejlépe naplněny. Atributy kvality jsou myšleny takové požadavky na vytvářený systém, které nesouvisejí přímo s jeho funkcionalitou, ale mají vliv na jeho používání, provozování a další rozvoj. Jako příklad nejčastějších atributů kvality lze uvést požadavky na výkon, bezpečnost, škálovatelnost, dostupnost apod.
Jedním z úskalí práce s atributy kvality je, že jsou mnohdy protichůdné.
Tento jev velmi ztěžuje softwarovému architektovi jeho práci. Ten je proto při návrhu systému zpravidla postaven před situaci, kterou nelze řešit jinak než hledáním kompromisů mezi jednotlivými atributy kvality a obhajobou nalezených řešení směrem k zadavatelům i implementačnímu týmu.

Návrh architektury
Při návrhu architektury systému se v celém procesu objevují tři základní aktivity:

  • zjištění architektonicky významných požadavků,
  • návrh architektury systému,
  • ověření navržené architektury.

Zjištění architektonicky významných požadavků v sobě zahrnuje identifikaci významných scénářů použití systému a zjištění a popis požadovaných atributů kvality. Důležitý je v tomto kontextu takový požadavek, který má vliv na architekturu systému.
Ostatními požadavky na systém, které vliv nemají, se softwarový architekt nezabývá.
Během návrhu architektury systému softwarový architekt rozděluje systém do komponent, definuje jejich odpovědnosti, vztahy a rozhraní. Při návrhu přitom zpravidla vychází z některého ze známých architektonických vzorů, a snaží se naplnit všechny požadavky zjištěné v předchozím kroku a v této fázi také vybírá použité technologie.
V okamžiku, kdy je architektura systému navržena, je nutné ji také ověřit. Nejčastěji používanou technikou je tvorba prototypů a jejich testování. Existují také další techniky jako například manuální ověření technikou procházení významných scénářů použití systému.

Celý výše uvedený proces je velmi iterativní, architekturu systému nelze navrhnout na jeden průchod. Proto se architekt na základě získaných znalostí k jednotlivým aktivitám vrací, upravuje jejich výstupy a znovu postupuje vpřed, dokud architektura dostatečně nenaplňuje všechny požadavky na funkcionalitu a kvalitu.
Není to vůbec jednoduchý proces. Architekt musí navrhnout koncepci a strukturu systému a vybrat technologie dříve, než začne vlastní vývoj. Situace je o to komplikovanější, že vstupem tohoto procesu jsou často protichůdné požadavky týkající se především atributů kvality. Vše navíc umocňuje tlak na dodržení rozpočtů a termínů při současném dodržení požadované kvality řešení.
Poměrně trefně tuto nelehkou situaci shrnul Philippe Kruchten, jedna z významných osobností na poli softwarové architektury, když prohlásil: „Život softwarového architekta je dlouhý (a někdy bolestný) sled suboptimálních rozhodnutí, která jsou činěna částečně v temnotě.“ 


Životní cyklus projektu
Zasaďme si pojmy softwarová architektura a softwarový architekt do životního cyklu vývoje softwarového projektu. Role softwarového architekta se na projektu podílí již od prvních fází vývoje, tedy již ve fázi stanovování vize a definice hrubého zadání projektu. V této fázi je softwarový architekt konzultantem, který posuzuje proveditelnost řešení, navrhuje první koncepty vlastního řešení a pomáhá vytvářet velmi hrubé odhady pracnosti.
Těžiště jeho práce pak spadá do fáze, které se někdy říká studie proveditelnosti, jindy analýza a design, v metodice Rational Unified Process pak fáze rozpracování (Elaboration). V této fázi architekt identifikuje architektonicky důležité požadavky na systém a na jejich základě navrhuje a ověřuje architekturu systému a zjišťuje možná rizika.
Výsledkem procesu je sada modelů a popisů souhrnně nazývaná například dokument architektury softwaru (Software Architecture Document).

Dalšími aktivitami architekta jsou spolupráce na detailním odhadu a harmonogramu fází vývoje i nasazení a také identifikace architektonických rizik včetně popisu strategií vedoucích k jejich odstranění.
V dalších fázích vývoje systému, které zahrnují především aktivity týkající se implementace, testování a nasazení systému, architekt funguje především jako konzultant vývojovému týmu a jako spoluřešitel konfliktů a potíží, které během těchto fází vyvstanou a jsou spjaty s architekturou systému. Dále se architekt zabývá procesem správy architektonických rizik a podílí se na procesu správy změn, protože změny požadavků během vývoje systému jsou jeho nedílnou součástí. Zkušený softwarový architekt v těchto fázích také sbírá zpětnou vazbu a opakovaně provádí vyhodnocování svých předchozích rozhodnutí. Odměnou za tuto činnost jsou mu pak znalosti a zkušenosti, které uplatní v dalších projektech.

 


foot link