**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:

```
süsteem teeb <nõue>

```

Näide funktsionaalsest nõudest:

```
Buss peab suutma teha uksed lahti

```

### Mittefunktsionaalsed nõuded

Mittefunktsionaalsed nõuded kirjeldavad süsteemi töökäiku, mitte kindlaid omadusi.

```
süsteem hakkab olema <nõue>

```

Näide mittefunktsionaalsest nõudest:

```
Bussi uksed peavad avanema 5 sekundiga

```

Kasutajaloo formaat
-------------------

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

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

```

Näide funktsionaalsest kasutajaloost oleks järgmine:

```
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:

```
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
------

1. ↑  Beck, Kent (1999). "Embracing change with extreme programming". *IEEE Computer*. **32** (10): 70–77. DOI:10.1109/2.796139.
2. ↑  Ron Jeffries (30. august 2001). "Essential XP: Card, Conversation, Confirmation".(vaadatud 09. jaanuar 2020)
3. ↑  Role-feature-reason agilealliance.org (vaadatud 25. oktoobril 2018)
4. ↑  Mishkin Berteig: User Stories and Story Splitting Agile Advice, 6. märts 2014 (vaadatud 09.jaanuar 2020)
5. ↑  The Magic of Small User Stories agilealliance.org (vaadatud 09. jaanuar 2020)