Účel
Dokument popisuje základní pravidla pro vedení a tvorbu dokumentace Sdíleného informačního systému TA ČR (dále jen „SISTA" nebo „projekt SISTA"). Dozvíte se z něj, jakým způsobem správně strukturovat, psát a spravovat dokumentaci k vaší službě či komponentě, aby byla v souladu se standardy SISTA.
Cílem je zajistit, aby veškeré příručky (např. HOWTO), definice API (OpenAPI) a další související specifikace byly snadno dostupné pro všechny participující týmy.
S pravidly pro vedení dokumentace souvisejí další samostatná pravidla:
Úvod
Záměrem TA ČR je vybudovat a provozovat SISTA jako cloud native systém. Takový systém má být odolný, snadno kontrolovatelný, robustní a nezávislý na konkrétních dodavatelích technologií.
Základní architektonické uspořádání SISTA jako ekosystému spolupracujících služeb vyžaduje kvalitní a aktuální dokumentaci jednotlivých částí s cílem:
-
udržet jednoduchý a obecně srozumitelný popis chování a řízení služeb,
-
určit minimální standardy dokumentace při vývoji, údržbě a dalším rozvoji služeb,
-
stanovit způsob tvorby a dlouhodobého udržování aktuální dokumentace,
-
určit dokumentační nástroje a procesy projektu SISTA a
-
udržet dokumentaci na srovnatelné kvalitativní úrovni bez ohledu na dev, který službu vyvíjel.
Přístup „Docs as Code"
Přístup „Docs as Code“ (dokumentace jako kód) je v projektu SISTA klíčovým principem, který zajišťuje, že dokumentace je verzována, udržována a spravována stejnými nástroji a postupy jako samotný zdrojový kód služeb (GitLab). Cílem je mít dokumentaci dobře dostupnou, snadno čitelnou a rozšiřitelnou.
|
|
Důležité
|
Doporučené instrumentárium
Pro psaní dokumentace lze využívat editor AsciidocFX (vhodný pro začátečníky, neboť poskytuje živý náhled, navigaci v souborech a integraci s PlantUML a PDF exporty), pro pokročilejší uživatele jsou vhodné Visual Studio Code s nainstalovaným rozšířením pro AsciiDoc nebo JetBrains s AsciiDoc pluginem.
Rozšíření pro IDE obvykle velmi dobře podporují syntaxi, zobrazení živého náhledu a exporty např. do PDF. Zásadně se nedoporučuje přímé kopírování textů z MS Word.
1. Základní požadavky na dokumentaci
Základní požadavky na dokumentaci vyvíjené služby lze shrnout do tří pravidel – dokumentace musí být:
-
dobře dostupná,
-
dobře čitelná,
-
snadno rozšiřitelná.
Jakákoli dokumentace je lepší než nic. Zdrojové kódy ani další artefakty v repozitářích nikdy nebudou obsahovat všechny informace – vždy budou existovat
-
konfigurační parametry, které je třeba nastavit,
-
speciální funkce, implementované kvůli výjimkám objeveným v ostrém provozu,
-
nutná ošetření historických dat, jež nelze z legislativních důvodů smazat a podobně.
1.1. Dobře dostupná dokumentace
Dokumentace musí být snadno dohledatelná – buď ve sdíleném úložišti pro všechny služby, nebo podle sdíleného schématu pro specifickou dokumentaci. Vývojář, který zná strukturu dokumentace své vlastní služby, musí být schopen bez problémů a rychle dohledat potřebné informace i v dokumentaci k jakékoliv jiné službě v rámci projektu SISTA.
|
|
Tipy
|
1.2. Snadno rozšiřitelná dokumentace
Dokumentaci musí být možné snadno v budoucnu měnit a doplňovat, proto pravidla vyžadují použití textových formátů (Markdown, AsciiDoc). Nové funkce musí být snadné doplnit do administrátorské i uživatelské příručky. Změny v chování musí být možné jednoduše popsat. Změny musí zahrnout i označování zastaralých pasáží a mazání / verzování již nepotřebných informací.
|
|
Doporučení
|
1.3. Umístění dokumentace
Dokumentace úzce spjatá se zdrojovým kódem musí být povinně uložena přímo v repozitáři služby na platformě GitLab.
Struktura složek a souborů je daná (. označuje kořenový adresář):
| Název a umístění | Obsah | Formát |
|---|---|---|
|
|
Markdown |
|
|
AsciiDoc |
|
|
AsciiDoc |
|
|
YAML |
|
|
YAML |
|
|
Poznámky
|
2. Dokumentace sdílená pro všechny služby SISTA
Sdílená dokumentace pro všechny služby SISTA je uložena na společném úložišti: Rozcestník dokumentace SISTA, které mj. obsahuje strukturované informace o:
-
základní architektuře,
-
nasazení,
-
spuštění, zastavení – na obecné úrovni v rámci kontejnerového prostředí (př. kubectl start XYZ …),
-
ověření běžných scénářů, základní troubleshooting,
-
obnova ze zálohy, zálohování – pokud se postup odlišuje od obecného rámce SISTA,
-
uživatelská dokumentace – příp. různé typy uživatelské dokumentace (př. příručka pro hodnotitele se liší od příručky pro řešitele projektu, resortního správce atp.),
-
knowledge base – údržba, evidence incidentů,
-
FAQ – časté dotazy ad.
Forma dokumentace je celou SISTu stejná.
|
|
Důležité
|
3. Dokumentace specifická pro konkrétní službu
Specifická dokumentace by měla obsahovat všechny následující části, které dávají pro danou službu smysl. Připojený štítek Doporučené umístění ukazuje doporučené umístění dané části dokumentace dle navržené struktury v kap. 1.
-
Základní popis služby: jednoduše, srozumitelně popsané chování a fungování služby – základní „karta služby“, která se používá do zadávací dokumentace pro navazující minitendry.
-
Popis využití služby:
-
co služba dělá, proč to dělá, případně jak to dělá, pokud je možností více a chování závisí na vnějších okolnostech,
-
co další služba používá, kam se připojuje – týká se jak ostatních služeb SISTy, tak příp. služeb 3. stran,
-
kam služba posílá jaká data a proč.
-
dokumentace API – v prostředí SISTA se jedná o nejdůležitější rozhraní mezi službami:
-
OpenAPI (Swagger) – formalizovaný popis veřejně dostupných funkcí API se standardizovanou syntaxí (součást živého Katalogu služeb), vč. datových struktur – viz HOWTO Platform,
-
jak má volající služba pracovat s datovými entitami (typicky operace typu CRUD) – zejména v případech, kdy práce s daty vyžaduje speciální postup(y),
-
validační pravidla, jsou-li nastavena.
-
-
datové toky, nejsou-li zřejmé z dokumentace API:
-
pokud je to vhodné (což je často), nechť jsou datové toky součástí dokumentace API spolu s detaily interakcí (např. pořadí volání end-pointů apod.),
-
zda jsou volané další služby, které a jaké datové entity jimi poskytované daná služba využívá,
-
-
dokumentace zpráv rozesílaných prostřednictvím fronty zpráv.
-
-
Konfigurační údaje: – co všechno služba potřebuje nastavit, aby bylo možné ji spustit v žádaném prostředí, pokud nestačí základní popis pro platformu:
-
konfigurační parametry pro kontejnerizaci – co předat zvenku, ready / health checky,
-
konfigurace prostředí – DB, URL / IP adresy + parametry volaných služeb, vč. jejich umístění – konfigurační soubory, proměnné prostředí atd.,
-
popis jednotlivých parametrů – změny chování, balancing atp.,
-
odlišnosti pro jednotlivá prostředí (vývoj, test, produkce), jsou-li,
-
úpravy konfigurace operačního systému, pokud jsou potřeba – specifické pro danou službu, nemyslí se obecná úprava /etc/hosts.
-
-
Podrobnosti implementace služby:
-
odkaz na původní požadavky, vč. scénářů užití, byly-li připraveny,
-
použité jazyky, frameworky, knihovny vlastní i 3. stran,
-
organizace / struktura zdrojových kódů:
-
backend / frontend – generování klientského kódu, metaprogramování atd.,
-
MVC nebo jiné paradigma,
-
odkaz na doporučené / pro daný jazyk typické uspořádání kódu, existuje-li,
-
-
zabezpečení, autentizace, autorizace – přístupové údaje, tokeny, klíče, certifikáty, jsou-li třeba; pokud se jedná o citlivé údaje, dokumentace je nesmí přímo obsahovat,
-
klíčové třídy, jmenné konvence,
-
hlavní použité koncepty:
-
závisí na konkrétní službě,
-
co dělá, proč takto; schéma, příp. datový model nebo odkaz na něj,
-
popis důležitého algoritmu („když uživatel 3× zadá špatně heslo, stane se A, pak B, pak C…“),
-
-
dokumentace architektonických rozhodnutí (architecture decision records), která jsou za konkrétním kódem
-
může se týkat použitých nástrojů, knihoven, přes organizaci zdrojových kódů, implementaci algoritmů až po předpoklady, které služba dělá za uživatele,
-
př.: „proč jsme vybrali knihovnu XYZ“, „proč jsou testy v adresáři FFF“, „proč jsme implementovali vlastní SAML handshake“, „proč vyžadujeme, aby uživatel měl roli ABC“,
-
konkrétní realizace může být různá:
-
komentář ve zdrojovém kódu – důležitá je srozumitelnost komentáře,
-
popis komitu do repozitáře,
-
textový soubor v repozitáři při komitu současně se zdrojovým kódem – např. v dedikovaném adresáři decisions/,
-
poznámka / wiki stránka / odrážka ve sdílené dokumentaci + odkaz na ni ve výše uvedeném komentáři / komitu / …,
-
-
-
datový model:
-
základní struktura („in-memory řešení“, „key-value databáze“, „normalizovaná relační DB“, …),
-
přehled základních datových struktur – cílem není pojmenovávat položky číselníku, ale poskytnout rychlou orientaci nad použitými strukturami,
-
odkaz na příslušné položky datového katalogu, viz kap. 2.2. Práce s Datovým katalogem v [MT039], vč. dalších informací (primární zdroj, kopie atd.),
-
implementační detaily, jsou-li – uložené procedury, constrainty / povinné vazby, validační pravidla atp.,
-
pokud to úložiště umožňuje, mělo by obsahovat komentáře popisující definované datové entity, aby byla jejich funkce pochopitelná přímo z definičního schématu,
-
výkonnostní požadavky na DB, jsou-li třeba – min. velikost RAM, dostupný diskový prostor, vlastnosti replikace / škálování atd.,
-
záloha & obnova dat ze zálohy (migrační postup, je-li třeba).
-
-
|
|
Poznámky
|
Závěr
Soubor pravidel architektury, vývoje a vedení dokumentace představuje mantinely pro Dev týmy, přičemž účastníci rámcové dohody jsou povinni tato pravidla dodržovat. Zároveň také platí, že zadavatel podporuje jejich průběžnou aktualizaci a to dle závěrů Archa rady, z úrovně řízení projektu či dobré praxe.
|
|
Tip
|
Termíny a definice
- API
-
programové aplikační rozhraní; zde synonymum pro REST API
- Datová entita
-
Datová reprezentace reálného objektu v datovém modelu, představující daný typ objektu. Příklad: uživatel, projekt, zakázka.
- Datová položka
-
Záznam v datovém slovníku, popisující reálně používanou datovou entitu a/nebo strukturu, viz analytickou zprávu (srov. s MT039).
- Datový slovník
-
Data Dictionary, souborný přehled popisu reprezentace a správného použití definovaných datových entit, viz analytickou zprávu (srov. s MT039).
- DevOps
-
Složenina anglických výrazů Development a Operations. Je to přístup k vývoji software, který zdůrazňuje komunikaci, spolupráci a integraci mezi vývojářem a odborníky na informační technologie z provozu.
- Dev tým
-
Tým vývojářů, inženýrů, testerů a dalších potřebných rolí dodavatele.
- Git
-
distribuovaný verzovací systém; též repozitář, Gitlab
- MQ
-
message queue, (asynchronní) fronta zpráv; sdílený zdroj informací o událostech v jednotlivých službách
- Ops tým
-
Tým vývojářů, správců, testerů a poučených uživatelů TA ČR.
- AsciiDoc
-
Značkovací jazyk pro přípravu textů. Zároveň jde o multiplatformní program napsaný v Pythonu. AsciiDoc formát vznikl již v roce 2002 a následně byl v roce 2013 uvolněn klon - AsciiDoctor napsaný v Ruby a používaný mj. na GitHubu.
Příloha A: Šablony a formuláře
| ID | Název přílohy s odkazem repozitář |
|---|---|
01 |
Šablony dokumentace uložené v repozitáři |
02 |