Tiivistetysti voidaan sanoa, että määrittelyvaiheen tehtävä on vastata kysymykseen mitä (eli mitä halutaan saada aikaan). Määrittelyvaiheessa asioita tarkastellaan asiakkaan (loppukäyttäjien) näkökulmasta. Tässä vaiheessa ei siis yleensä oteta kantaa toteutukseen liittyviin yksityiskohtiin, kuten millaista tietokantaa aiotaan käyttää tai tarvitaanko edes tietokantaa. Sen sijaan määrittelyvaiheessa on selvitettävä esimerkiksi, millaisilla laitteilla ja missä käyttöympäristöissä loppukäyttäjät haluavat tuotetta käyttää. Käytetäänkö tuotetta tietokoneella, tabletilla vai älypuhelimella? Tarvitaanko tuotetta liikkeellä ollessa tai ilman verkkoyhteyttä? Näiden vaatimusten perusteella voidaan myöhemmässä suunnitteluvaiheessa ratkaista, toteutetaanko tuote web-sovelluksena, mobiilisovelluksena, työpöytäsovelluksena vai näiden yhdistelmänä.
On kuitenkin hyvä huomata, että joskus tilaaja voi asettaa jo vaatimusmäärittelyvaiheessa myös toteutustapaa koskevia vaatimuksia. Tilaaja voi esimerkiksi edellyttää, että tuotteesta tehdään nimenomaan web-sovellus tai että sen on toimittava tietyssä käyttöympäristössä. Tällöin kyseessä on vaatimus, joka on huomioitava myöhemmässä suunnittelussa. Vaatimusmäärittelyssä ei siis ole tarkoitus välttää kaikkia teknisiä kannanottoja, vaan erottaa toisistaan asiakkaan asettamat vaatimukset ja niiden toteuttamiseen liittyvät tekniset ratkaisut.
Määrittelyvaiheessa laaditaan vaatimusmäärittely eli dokumentti, jota kutsutaan usein toiminnalliseksi määrittelyksi. Sen tarkoitus on kuvata millainen järjestelmä täyttää ongelman vaatimukset. Siinä kuvataan ohjelmiston toiminnot, toteutukselle asetettavat ulkoiset vaatimukset ja rajoitukset. Toimintojen yhteydessä määritellään ohjelmistolla toteutettavat ominaisuudet, kuten käyttöliittymä ja kommunikointi ulkoisten järjestelmien kanssa.
Vaatimusmäärittelyn tehtävä on toimia pohjana asiakkaan ja toimittajan tekemälle tilaus-sopimukselle. Molempien kannalta on tärkeää, että siinä mainitaan kaikki ne ominaisuudet, jotka lopputuotteelta halutaan.
Järjestelmälle asetettavat vaatimukset jaetaan usein toiminnallisiin vaatimuksiin ja ei-toiminnallisiin vaatimuksiin. Eron voi hahmottaa kahden kysymyksen avulla:
Esimerkiksi verkkokaupassa toiminnallinen vaatimus voisi olla: ”Asiakas voi hakea tuotteita nimellä.” Samaan toimintoon liittyvä ei-toiminnallinen vaatimus voisi olla: ”Hakutulokset näytetään enintään kahdessa sekunnissa vähintään 95 prosentissa hauista, kun palvelussa on 100 samanaikaista käyttäjää.” Ensimmäinen kertoo, että hakutoiminnon on oltava olemassa, ja toinen, kuinka nopeasti sen on toimittava sovitussa kuormituksessa. Pelkkä ”haun pitää olla nopea” olisi liian epämääräinen vaatimus.
Miksi jako tehdään? Se auttaa muistamaan sekä tarvittavat toiminnot että niiden laatua ja käyttöolosuhteita koskevat vaatimukset. Verkkokaupassa voi olla kaikki sovitut toiminnot, mutta jos haku kestää minuutin, palvelu voi silti olla asiakkaalle käyttökelvoton. Jaottelu auttaa myös suunnittelussa ja hyväksymisen tarkistamisessa: toiminnallisesta vaatimuksesta tarkistetaan, onnistuuko tuotteen hakeminen, ja suorituskykyvaatimuksesta mitataan, toteutuuko sovittu vasteaika sovitulla kuormalla. Molemmat vaatimusryhmät ovat siis tärkeitä, ja vaatimukset tulee kuvata niin, että niiden täyttyminen voidaan todentaa.
Jaottelu tehdään yksittäisen vaatimuksen sisällön perusteella. Esimerkiksi tietoturvaan voi liittyä sekä toiminnallinen vaatimus (”Järjestelmä pyytää käyttäjältä kertakäyttöisen vahvistuskoodin kirjautumisen yhteydessä”) että ei-toiminnallinen vaatimus (”Käyttäjän ja palvelun välinen tietoliikenne on salattava”). Pelkkä aihe, kuten tietoturva tai käyttöliittymä, ei siis vielä ratkaise vaatimuksen tyyppiä.
Määrittelyvaiheessa siis paneudutaan systeemille asettuihin vaatimuksiin ja tuotetaan spesifikaatio, jossa ne on kuvattu mahdollisimman kattavasti. Usein pelkkä sanallinen kuvaus ei ole tarpeeksi selkeä, vaan käytetään esim. UML-mallinnuskielen erilaisia kaavioita.
Kustakin käyttötapauksesta laaditaan käyttötapauskortti, jossa käyttötapaus kuvataan yksityiskohtaisesti. Kortin kuvausosio (skenaario) paljastaa toiminnallisia vaatimuksia, joita ei pelkästä käyttötapauskaaviosta selviä. Asiakas hyväksyy kortit ennen kuin projektissa siirrytään suunnitteluvaiheeseen.
Esimerkki käyttötapauksesta Lisää tuote koriin ja maksa tilaus:
| TUNNISTE | KT-0010 | VERSIO | 1.0 |
|---|---|---|---|
| NIMI | Lisää tuote koriin ja maksa tilaus | ||
| SUORITTAJAT | Asiakas, Verkkokaupan järjestelmä, Maksujärjestelmä | ||
| TAVOITE | Asiakas on onnistuneesti lisännyt haluamansa tuotteen ostoskoriin ja suorittanut tilauksen. | ||
| ESIEHDOT | Asiakas on kirjautunut sisään tai jatkaa vieraana. Tuote on saatavilla varastossa. | ||
| KUVAUS |
1. Asiakas selaa tuotteita ja valitsee haluamansa tuotteen. 2. Asiakas lisää tuotteen ostoskoriin. 3. Asiakas siirtyy ostoskoriin ja tarkistaa tilauksen sisällön. 4. Asiakas siirtyy kassalle ja syöttää toimitustiedot. 5. Asiakas valitsee maksutavan ja vahvistaa tilauksen. 6. Järjestelmä ohjaa asiakkaan maksujärjestelmään. 7. Maksujärjestelmä vahvistaa maksun onnistuneesti. (P1) 8. Järjestelmä kirjaa tilauksen ja lähettää vahvistuksen asiakkaan sähköpostiin. |
||
| LOPPUEHDOT | Tilaus on kirjattu järjestelmään ja asiakas on saanut tilausvahvistuksen sähköpostiin. | ||
| POIKKEUKSET | P1: Maksu epäonnistuu – järjestelmä ilmoittaa virheestä ja asiakas voi yrittää uudelleen tai valita toisen maksutavan. | ||
| AVOIMET ASIAT | Voiko asiakas muuttaa toimitustapaa tilauksen tekemisen jälkeen? | ||
Alla on esimerkki vaatimusmäärittelydokumentin rakenteesta. Malli mukailee IEEE 830-1998 -standardin sisältösuosituksia, mutta sen lukujakoa on sovellettu ja täydennetty.
IEEE 830-1998 on historiallinen standardi, jonka korvasi ISO/IEC/IEEE 29148:2011. Sitä käytetään tässä havainnollisena esimerkkinä vaatimusmäärittelyn rakenteesta. Standardin englanninkielinen teksti on luettavissa Kansasin yliopiston sivuilla (PDF); liitteessä A esitellään vaihtoehtoisia dokumenttirakenteita. Tieto standardin korvaamisesta löytyy IEEE:n viralliselta standardisivulta.
1. Johdanto
2. Yleiskuvaus
3. Tiedot ja niiden käsittely
Tässä kuvataan, mitä tietoja järjestelmä tarvitsee, miten niitä pitää voida käsitellä ja mitä niiden säilyttämiseltä edellytetään. Esimerkiksi verkkokaupan tilauksesta on säilytettävä tuotteet, määrät, hinnat ja toimitustiedot, ja asiakkaan on voitava tarkastella aiempia tilauksiaan. Suunnitteluvaiheessa ratkaistaan, tarvitaanko näiden vaatimusten toteuttamiseen tietokanta, mikä tallennusratkaisu valitaan ja miten tiedot järjestetään. Jos asiakkaan ennalta antama rajoite edellyttää esimerkiksi olemassa olevan tietokannan käyttöä, se kirjataan kuitenkin jo vaatimusmäärittelyyn.
4. Toiminnot
5. Ulkoiset liittymät
6. Muut ominaisuudet
7. Suunnittelurajoitteet
8. Hylätyt ratkaisuvaihtoehdot
9. Jatkokehitysajatuksia