## Nástroj na vizualizáciu sledovateľnosti softvérových požiadaviek

### Havriil Pietukhin
Vedúci: RNDr. Jana Kostičová, PhD

## Cieľ práce

Cieľom práce je navrhnúť a vyvinúť nástroj, ktorý prehľadne vizualizuje sledovateľnosť softvérových požiadaviek naprieč celým procesom vývoja softvéru a podporí tak výučbu princípov tvorby softvéru na FMFI UK.

Havriil Pietukhin

KI FMFI UK

### Problem sledovateľnosti požiadaviek

- Problémy rôznych typov programov, umožňujúcich poskytnúť istú mieru
- sledovateľnosti, sú popísané v práci Gotel et al.[1]
- Ukázalo sa, že viaceré typy nástrojov kladú menší dôraz na sledovateľnosť
- požiadaviek pred jej zaradením do špecifikácie.
- Metódy zlepšenia:
  - Spoľahlivý centralizovaný prístup k informáciám;
  - Historické verzie údajov by pomohli obnoviť kontext a reprodukovať požadované detaily;
  - Zlepšenie spolupráce tímov a integracia nástrojov

Havriil Pietukhin

KI FMFI UK

### Kľúčové požiadavky na aplikáciu

V rámci aplikácie sme chceli užívateľovi umožniť vykonávať nasledujúce aktivity:

- Vytváranie a validácia hierarchií požiadaviek.
- Vizualizácia hierarchií požiadaviek v podobe grafu.
- Sledovanie pôvodu a nasledovníkov požiadaviek.
- Vytváranie historických verzií hierarchie s možnosťou sledovania zmien na úrovni jednotlivých prvkov.
- Prepojenie požiadaviek s ďalšími relevantnými výstupmi procesu tvorby softvéru, ako sú fragmenty kódu, testy, navrhové špecifikácie.

Havriil Pietukhin

KI FMFI UK

## Model hierarchie

KI FMFI UK

Havriil Pietukhin

# Implementácia a dizajnové riešenia

KI FMFI UK

Havriil Pietukhin

## Architektúra aplikácie

KI FMFI UK

Havriil Pietukhin

Rozhodli sme vyrtvorit náš nástroj ako webovú aplikáciu. Výhody:

- Prenositeľnosť: dostupnosť na viacerých zariadeniach, ľahká inštalácia a prevádzka;
- Bohaté nástroje pre vizualizáciu: aplikácia má poskytovať vysoko interaktívne vizualizácie.

### Pokus o implementáciu s využitím StrictDoc

KI FMFI UK

Havriil Pietukhin

StrictDoc je open-source aplikácia pre vytvorenie technickej dokumentácie, vrátane špecifikácií.

- Uchováva informácie v textových súboroch (.sdoc).
- Dá sa využiť ako CLI-nástroj alebo webovú aplikáciu.

Chceli sme využiť nasledovné funkcionality StrictDoc:

1. Možnosť definovania vlastného formátu požiadaviek a vzťahov medzi nimi;
2. Rozšírenie sledovateľnosti požiadaviek na úrovni zdrojového kódu;
3. Vytváranie historických verzií dokumentov pomocou git

### StrictDoc — problémy integrácie

KI FMFI UK

Havriil Pietukhin

- Architektonické rozdiely: Hotwire vs Angular
  - StrictDoc je založený na Hotwire architektúre, kde server dodáva hotové HTML šablóny klientovi.
  - Angular vyžaduje flexibilnejší systém, kde aktualizácie rozhrania prebiehajú na strane klienta pomocou JavaScriptu a manipulácie s DOM.
- Vysoká kohézia kódu servera a klienta StrictDoc.
- Finalne riesenie — Spring Boot

## Zvolené technológie

KI FMFI UK

Havriil Pietukhin

Backend: Spring Boot

Frontend: Angular

Vizualizácia: Rete.js

Nasadenie a prevádzka: Docker, Vercel

Technológie na vizualizáciu boli zvolene od začiatku, ostatné sa pridalo neskôr

### Základný prehľad výslednej architektúry

KI FMFI UK

Havriil Pietukhin

### Základný používateľský workflow

KI FMFI UK

Havriil Pietukhin, 3INF

- Používateľ pracuje s hierarchiou požiadaviek v rámci projektu.
  Počas vytvorenia projektu si môže definovať úrovne, ktoré bude priraďovať prvkom v rámci projektu.
- Dá sa pripojiť k projektu repozitár pre spojenie požiadaviek s prvkami kódu.

### Základný používateľský workflow

KI FMFI UK

Havriil Pietukhin, 3INF

- Keď sa projekt vytvorí, používateľ sa priemestnuje do canvasu, kde si vie pridať prvky hierarchie.
  Ak používateľ chce uložiť výsledky svojej práce, musí zvoliť v menu tlačidlo Iteration -> Save as iteration

## Splnené a čiastočne splnené ciele práce

KI FMFI UK

Havriil Pietukhin

### Samodokumentacia

KI FMFI UK

Havriil Pietukhin, 3INF

- Počas vývoja sme vytvorili špecifikáciu požiadaviek pre náš nástroj a zoradili požiadavky do hierarchie
- Dá sa pomocou nej demonštrovať možnosti aplikácie

### Základné zobrazenie grafu požiadaviek

KI FMFI UK

Havriil Pietukhin, 3INF

### Zvýraznenie pôvodu/následníkov požiadavky

KI FMFI UK

Havriil Pietukhin

### Pridanie a mazanie prvku z pracovnej oblasti

KI FMFI UK

Havriil Pietukhin

### Validácie

KI FMFI UK

Havriil Pietukhin, 3INF

Zákaz vytvorenia cyklu v grafe:

### Hotové časti servera

KI FMFI UK

Havriil Pietukhin, 3INF

- Autentifikačný systém využívajúci JWT
- Časť API určená na CRUD operácie nad prvkami hierarchie, iteráciami, užívateľmi;
- Vytvorenie testového konta a projektu pre uľahčenie testovania;
- Infraštruktúra na pripojenie do git pre integráciu požiadaviek zo zdrojovým kódom

  - Bezpečné uchovanie užívateľských kľúčov z GitHub na manipuláciu s dátami repozitárov

## Hotové časti klienta

KI FMFI UK

Havriil Pietukhin, 3INF

- Základné zobrazovanie a routing
- Navigácia grafom
- Vytvorenie projektu
- Niektoré časti zodpovedajúce za úpravu položiek hierarchie fungujú zatiaľ čiastočne

## Výsledky

KI FMFI UK

Havriil Pietukhin

- Preskúmali sme prístupy na zlepšenie sledovateľnosti požiadaviek.
- Navrhli sme hierarchický prístup na zabezpečenie traceability počas vývoja.
- Stanovili sme ciele pre nástroj na implementáciu a demonštráciu tohto prístupu.
- Čiastočne sme implementovali nástroj, ktorý poskytuje pevný základ pre ďalšie zlepšenia.

## Obmedzujúce faktory

KI FMFI UK

Havriil Pietukhin

- Časové obmedzenia
- Podcenenie zložitosti
- Časová investícia do StrictDoc
- Neupresnené na začiatku požiadavky k aplikácií

## Priestor na vylepšenie

KI FMFI UK

Havriil Pietukhin

- Historické verzie;
- Ďalšie validácie;
- Pripojenie s git;
- Odstránenie chýb;
- Zlepšenie prehľadnosti;

## Otázky k diskusii

KI FMFI UK

Havriil Pietukhin

Zdôvodnite prosím problém s lokálnym spustením aplikácie:

    There was an unexpected error (type=Internal Server Error, status=500).
    principalName cannot be empty
    java.lang.IllegalArgumentException: principalName cannot be empty
    at org.springframework.util.Assert.hasText(Assert.java:240)
    at org.springframework.security.oauth2.client.OAuth2AuthorizedClient.<init>
    (OAuth2AuthorizedClient.java:77)
    at org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter
    .attemptAuthentication(OAuth2LoginAuthenticationFilter.java:203)...