Kasutajalugu

**Kasutajalugu** on tarkvaraarenduses mingi funktsionaalsuse ja kasutaja vahelise interaktsiooni sõnaline kirjeldus.

See lähtub tavaliselt süsteemi lõppkasutaja vaatenurgast. Lõppkasutajaks võib-olla näiteks klient, administraator, arendustiimi liige jne.

Kasutajaloo peamiseks ülesandeks on suurendada mõistmist tarkvaraarendaja ja kasutaja vahel. See aitab panna funktsionaalsusi reaalelulisse konteksti ning nii lihtsustab see inimkesksemate lahenduste loomist.

## Ajalugu
Kasutajalugude kasutamine kogus populaarsust läbi ekstreemprogrammeerimise (XP) tarkvaraarendusmeetodi, kus kasutajalugude kirjutamine on planeerimise faasi keskne osa. 1999. aastal Kent Beck võttis kasutusele fraasi "user story" ehk kasutajalugu oma raamatus Extreme Programming Explained 1st Edition.

2001. aastal pakkus Ron Jeffries välja "kolme C" valemi, mille põhjal koostada kasutajalugusid:

* *Kaart* (inglise keeles Card), mis on füüsiline ese, mille peal kontseptsioone kirjalikult hoida
* *Vestlus* (inglise keeles Conversation), mis toimub erinevate osapoolte vahel (kliendid, kasutajad, arendajad, testijad, jne). Vestlus on tihtilugu verbaalne ja seda dokumenteeritakse.
* *Kinnitus* (inglise keeles Confirmation) tagab, et vestluses kokkulepitud eesmärgid saaksid täidetud.

## Nõuded
Kasutajalugu koosneb erinevatest nõuetest, mis on antud kasutajal. Need nõuded jagunevad funktsionaalseteks ning mittefunktsionaalseteks nõueteks.

### Funktsionaalsed nõuded
Funktsionaalsed nõuded kirjeldavad mida süsteem peab tegema ehk kirjeldab süsteemi funktsioone ja käitumist. Funktsionaalsed nõuded on tavaliselt antud mallis:
:
```text
süsteem teeb <nõue>
```

Näide funktsionaalsest nõudest:
:
```text
Buss peab suutma teha uksed lahti
```


### Mittefunktsionaalsed nõuded
Mittefunktsionaalsed nõuded kirjeldavad süsteemi töökäiku, mitte kindlaid omadusi.
:
```text
süsteem hakkab olema <nõue>
```

Näide mittefunktsionaalsest nõudest:
:
```text
Bussi uksed peavad avanema 5 sekundiga
```


## Kasutajaloo formaat
Kasutajalugusid saab esitada mitmel kujul. Neist kõige levinum on *Connextra mall*:

:
```text
<kasutajana> ma tahan/saan <teha midagi>, sest/nii, et <ma saan sellest midagi>
```


Näide funktsionaalsest kasutajaloost oleks järgmine:
:
```text
Bussijuhina soovin ma peatustes uksi avada, et sõitjad saaksid sisse ja välja liikuda.
```

Samuti saab aga kirjutada ka mittefunktsionaalseid kasutajalugusid, see tähendab, et fookuses pole millegi tegemine, vaid see, kuidas seda tehakse.

Näide mittefunktsionaalsest kasutajaloost oleks järgmine:
:
```text
Bussijuhina soovin ma, et uste avamise protseduur kestaks alla 5 sekundi, et ma graafikust maha ei jääks.
```


## Kasutus
Kasutajalugu kui formaati kasutatakse enamasti tarkvaraarenduses projekti nõuete kaardistamiseks. Väga tihti seostatakse seda meetodit ka agiilsete tarkvaraarendusmeetoditega. Kasutajalugude koostamisel on väga tähtis roll kliendiga suhtlusel ning taustauuringu tegemisel. Liiga lühikestel kasutajalugudel on probleemiks mitmestimõistetavus. Liiga pikkadel kasutajalugudel on probleemiks keeruline mõistetavus. Seetõttu on vaja luua kasutajalugusid, mis oleksid lühikesed, aga piisavalt detailsed .

Analüütikute ja arendajate koostatud kasutajalugude põhjal luuakse projekti ülesanded ning määratakse kaua iga ülesande peale aega kulub.

## Viited