1. Johdanto. Ohjelmistojen vaatimusmäärittely. Vaatimusmäärittelyn faktat ja vaihtoehdot. Vaatimusmäärittelyn luonne. Vaatimusmäärittely tänään

Samankaltaiset tiedostot
Ohjelmistojen vaatimusmäärittely Helsingin yliopisto, TKTL, s2013. Harri Laine 1. Vaatimusmäärittely. Vaatimusmäärittely. Vaatimusmäärittely

Ohjelmistojen vaatimusmäärittely

1. Johdanto. Ohjelmistojen vaatimusmäärittely. Vaatimusmäärittelyn faktat ja vaihtoehdot. Vaatimusmäärittelyn luonne. Vaatimusmäärittely tänään

1. Johdanto. Ohjelmistojen vaatimusmäärittely. Vaatimusmäärittelyn faktat ja vaihtoehdot. Vaatimusmäärittelyn luonne

Tietojärjestelmän osat

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

Ohjelmistojen suunnittelu

Ohjelmistotuotanto vs. muut insinööritieteet. (Usein näennäinen) luotettavuus ja edullisuus

Dokumentointi ketterissä menetelmissä

Ohjelmistotuotanto, s

Yhteenvetoa, pieniä laajennuksia, tulevaisuuden haasteita

Implisiittiset vaatimukset. 4. Vaatimusmäärittely. Eksplisiittiset vaatimukset. Vaatimusmäärittelyn tavoitteet. Vaatimusten luonne II

4. Vaatimusanalyysi. Vaatimusanalyysin tavoitteet

Ohjelmistoprosessit ja ohjelmistojen laatu Ohjelmistoprosessit ja ohjelmistojen laatu (4op)

2. Ohjelmistotuotantoprosessi

Prosessimalli. 2. Ohjelmistotuotantoprosessi. Prosessimallin vaihejako. Prosessimallien perustehtävät. Ohjelmiston suunnittelu. Vaatimusmäärittely

4. Vaatimusmäärittely

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Ohjelmointitekniikka lyhyesti Survival Kit 1 Evtek KA ELINKAARIMALLEISTA

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti

Ketteryys kokeilemalla. Leo Malila Kehittämispäällikkö, Kela

Ohjelmistotuotanto, prosessit Syksy Ohjelmistotuotantoprosessi. Prosessimalli. Prosessimallien perustehtävät. Prosessimallin vaihejako

Ohjelmistotuotanto, vaatimusanalyysi Syksy Vaatimusanalyysi. Implisiittiset vaatimukset. Eksplisiittiset vaatimukset

Vaatimustenhallinta. Exit

Projektisuunnitelma. KotKot. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Nollasummapelit ja bayesilaiset pelit

Ohjelmistojen testaus

$$$ Raha ratkaisee. $$$ Raha ratkaisee. Ohjelmistotuote. Ohjelmistotekniikan määritelmä

Ohjelmistojen mallintaminen, kurssikoe esimerkkivastauksia

Käyttäjätarinat perinteisessä hankkeessa. Sisältö ja käytännöt

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen, Johdatus ohjelmistotuotantoon

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Tapahtuipa Testaajalle...

Johdantoluento. Ohjelmien ylläpito

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

TOIMINNALLINEN MÄÄRITTELY MS

Ohjelmistoprosessit ja ohjelmistojen laatu Kevät Ohjelmistoprosessit ja ohjelmistojen laatu. Projektinhallinnan laadunvarmistus

The OWL-S are not what they seem

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Testaussuunnitelma Labra

Ohjelmistotekniikka - Luento 2

Ohjelmistotekniikan menetelmät, käyttötapauksiin perustuva vaatimusmäärittely

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmistotekniikka - Luento 2 Jouni Lappalainen

UML- mallinnus: Tilakaavio

T Tietojenkäsittelyopin ohjelmatyö Tietokonegrafiikka-algoritmien visualisointi Vaatimustenhallinta

Toiminnallinen turvallisuus

Vaatimusten hallinta ja vaatimusmäärittely

2. Vaatimusmäärittely. Kevät 2005 Empiirinen ohjelmistotutkimus / Taina. Kevät 2005 Empiirinen ohjelmistotutkimus / Taina

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Oleelliset vaikeudet OT:ssa 1/2

Onnistunut ohjelmistoprojekti

b) Määritä myös seuraavat joukot ja anna kussakin tapauksessa lyhyt sanallinen perustelu.

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Standardi IEC Ohjelmisto

Yhteisön kehitystyöhön osallistumisen mahdollisuudet ja mallit

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

OHJ-3010 Ohjelmistotuotannon perusteet, kesä 2012

Testaussuunnitelma PULSU. Syksy 2008 Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmistojen mallintaminen, Johdatus ohjelmistotuotantoon

Ohjelmiston vaatimusmäärittely. tietoteknisen järjestelmän osat

Aluksi. Riskien hallinta. Riskityyppejä. Riskillä on kaksi ominaisuutta. Reaktiivinen strategia. Proaktiivinen strategia

Aki Taanila LINEAARINEN OPTIMOINTI

Ohjelmistojen mallintaminen. Luento 2, pe 5.11.

Suunnitteluvaihe prosessissa

OHJ-3010 Ohjelmistotuotannon perusteet. Ohjelmistoprojektin hallinta

Vaatimusmäärittely- ja hallinta. Peruskäsitteet. Syyt aikataulun ja budjetin ylitykseen. TJTA330 Ohjelmistotuotanto

Laatu tietojärjestelmähankkeissa. Tietohallinnon kokemuksia Juha-Pekka Leskinen Atk-päällikkö Eduskunnan kanslia

Ketterä projektinhallinta

Vaatimusmäärittely- ja hallinta

Projektityö

Ohjelmistotuotanto, projektinhallinta Kevät 2005

Kurssin aihepiiri: ohjelmistotuotannon alkeita

Liite 2, Todennetun osaamisen rekisteri, käyttötapausten. Todennetun osaamisen rekisterin kohdearkkitehtuuri

TIETOJÄRJESTELMÄN VAATIMUSMÄÄRITTELY IT-PALVELUTUOTANNON HALLINTAAN

Testauksen hallinta Testaustyökalut Luento 7 Antti-Pekka Tuovinen

Globaalisti Hajautettu Ohjelmistokehitys Mitä, Miksi & Miten? Maria Paasivaara

Projektin suunnittelu A71A00300

Scrum is Not Enough. Scrum ei riitä. Ari Tanninen & Marko Taipale. Nääsvillen oliopäivä 2009 Tampereen teknillinen yliopisto 9.12.

Täydentäviä muistiinpanoja laskennan rajoista

Projektin suunnittelu A71A00300

Projektityö

SoberIT Software Business and Engineering institute

Ohjelmistoprojektien hallinta Vaihejakomallit

Asikkala Valtuustoseminaari

TIETOTEKNIIKAN KOULUTUSOHJELMA

ITK130 Ohjelmistojen luonne

1. Johdanto. Ohjelmistotuotannon piirteitä

PSY181 Psykologisen tutkimuksen perusteet, kirjallinen harjoitustyö ja kirjatentti

PlugIT / Ydin: teemat ja jaksojen 2-6 suunnitelma ( )

Testaaminen ohjelmiston kehitysprosessin aikana

Ohjelmistotekniikka kevät 2003 Laatujärjestelmät

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari

Software engineering

Kannan vektorit siis virittävät aliavaruuden, ja lisäksi kanta on vapaa. Lauseesta 7.6 saadaan seuraava hyvin käyttökelpoinen tulos:

Integroitu markkinointiviestintä

Yhteenveto tuotteenhallinnan tiimoilta kertyneistä opeista. Jukka Kääriäinen

Transkriptio:

1. Johdanto Ohjelmistojen vaatimusmäärittely Helsingin yliopisto Tietojenkäsittelytieteen laitos Vaatimusmäärittely (Requirements Engineering) on yksi ohjelmistojärjestelmien kehitystyön perustehtävistä. Se on jossakin muodossa läsnä lähes kaikissa ei-triviaaleja ohjelmistojärjestelmiä toteuttavissa prosesseissa ja projekteissa. Ohjelmistojen vaatimusmäärittelyä on tehty yhtä kauan kuin on tehty ohjelmistoja, mutta tieteenä sitä on tehty 1980-luvun puolestavälistä ja kurinalaisesti 1990-luvun alkupuolelta lähtien.. Lasken alkukohdaksi vuoden 1993, jolloin pidettiin ensimmäinen iso vaatimusmäärittelykonferenssi. Toki sitä ennen on jo tehty yksittäistä alan tutkimusta. 2 Vaatimusmäärittelyn faktat ja vaihtoehdot Vaatimusmäärittely tarkoittaa eri ihmisille eri asioita. Oikeastaan vain seuraavista asioista ollaan samaa mieltä: Ohjelmistojärjestelmälle asetetaan toiminnallisia ja eitoiminnallisia vaatimuksia, jotka järjestelmän on toteutettava. Osa vaatimuksista on järjestelmää koskevia rajoitteita. Vaatimukset tulevat sidosryhmiltä (stakeholders). Kukin sidosryhmä on jollain lailla tekemisissä järjestelmän kanssa. Vaatimukset on kuvattava sopivalla tavalla ohjelmistojärjestelmän ominaisuuksiksi. Tämän kurssin lähestymistapa on melko muodollinen ja monipuolinen. Muitakin tapoja on. 3 Vaatimusmäärittelyn luonne Vaatimusmäärittelyssä kartoitetaan (elicitation), arvioidaan (evaluation), määritellään (specification), analysoidaan (analysis) ja muutetaan (evolution) ohjelmiston tavoitteita (objectives), toiminnallisuutta (functionality), ominaisuuksia (quality) ja rajoituksia (constraint). Edellinen laaja määritelmä voidaan tiivistää jotenkin näin: Vaatimusmäärittelyssä selvitetään, mitä ohjelmistojärjestelmältä vaaditaan ja miten löydetyt vaatimukset saadaan kuvattua ohjelmistona. 4 Vaatimusmäärittelyn alkuajat Ohjelmistotuotannon alkuaikoina vaatimuksia ei sen kummemmin määritelty. Ohjelmistot olivat pieniä, määrittely oli melko helppoa ja sidosryhmiä oli vähän. Ohjelmistojen monimutkaistuessa niiden laatu alkoi kärsiä kehnosti tehdystä vaatimusmäärittelystä. Jo 1976 julkaistiin empiirinen tutkimus: Software requirements: Are they really a problem? Sen mukaan riittämättömät, epätäydelliset, epäyhtenäiset tai moniselitteiset vaatimukset ovat yllättävän yleisiä ja vaikuttavat huomattavasti ohjelmistojen laatuun (Bell ja Thayer, 1976). Bell ja Thayer totesivat, että vaatimukset eivät ilmesty tyhjästä. Niitä täytyy tuottaa, tarkistaa ja korjata. 5 Vaatimusmäärittely tänään Vaatimusmäärittely on edistynyt paljon 90-luvun alusta, mutta siitä huolimatta se on ehkä kehittymättömin ohjelmistokehitystyön perustehtävistä. Myös tänään puuttuvat ja virheelliset vaatimukset ovat yksi tärkeimmistä projektin epäonnistumisen syistä. Vaatimusmäärittely on vaikeaa. Vaatimusten kartoitus, sovittaminen yhteen ja tulkitseminen puhtaasti epäformaalista luonnollisesta kielestä äärimmäisen formaaliksi ohjelmakoodiksi on kaukana triviaalista ongelmasta. Lisäksi modernit ohjelmistojärjestelmät ovat äärimmäisen monimutkaisia. Vaatimuksia ja sidosryhmiä on paljon. Vaatimuksilla on huomattavasti keskinäisiä riippuvuuksia. 6 1

2. Vaatimusmäärittelyn perusteet Ongelmakenttä Ennen kuin voimme toteuttaa jonkin ongelman ratkaisevan ohjelmistojärjestelmän, meidän on ymmärrettävä ja määriteltävä, mikä tarkkaan ottaen on ratkaistava ongelma. Tässä on vaatimusmäärittelyn perimmäinen luonne. Meidän täytyy keksiä, ymmärtää, muotoilla, analysoida ja päättää kolme asiaa: Mikä on ratkaistava ongelma, Miksi ongelma pitää ratkaista ja Kenen vastuulla on ongelman ratkaisu. Vaatimusmäärittelyssä siis vastataan kolmeen kysymykseen. Mitä halutaan? Miksi halutaan? Kuka ottaa vastuun? 7 Ratkaistava ongelma on osa laajempaa kokonaisuutta, ongelmakenttää. Ongelmakenttä (problem domain, oppikirjassa problem world) tarkoittaa sellaista teknistä, fyysistä tai organisaatioympäristöä, jossa ongelma esiintyy. Ohjelmistoprojektin tehtävänä on tehdä ongelmakentässä toimiva laite (machine), joka ratkaisee kyseisen ongelman. Laite sisältää ohjelmiston lisäksi laitteiston, jossa ohjelmisto toimii. Laitteistovaatimukset ovat osa ohjelmistojärjestelmän vaatimuksia mutta eivät ohjelmiston vaatimuksia. Kurssilla laite ja ohjelmistojärjestelmä ovat synonyymeja. 8 Vaatimusmäärittely vs. suunnittelu Vaatimusmäärittelyä Ongelmakentän Yhteisiä Laitteen Suunnittelua Ongelmakenttä Järjestelmä Vaatimusmäärittelyssä ollaan kiinnostuneita ongelmakentän ominaisuuksista ja laitteen vaikutuksesta ongelmakenttään. Suunnittelussa ollaan kiinnostuneita laitteesta. Ongelmakentän ja laitteen leikkaus on laitteen rajapinta. Järjestelmä Järjestelmä (system) tarkoittaa joukkoa (järjestelmä)komponentteja, jotka toimivat yhteistyössä täyttääkseen jonkin tavoitteen. Järjestelmä on laajempi käsite kuin ohjelmistojärjestelmä. Se sisältää mm. käyttäjät. Koska vaatimusmäärittelyssä olemme aikeissa ratkaista ongelmakentän ongelman,tarvitsemme kaksi järjestelmää: Nykyinen järjestelmä (system-as-is), joka ratkaisi ongelman ennen kehitettävää laitetta. Tuleva järjestelmä (system-to-be), joka otetaan käyttöön, kun laite on valmis ja käytössä. 9 10 Nykyinen järjestelmä Nykyinen järjestelmä on käytännössä aina olemassa. Nykyisen järjestelmän ei tarvitse olla tietokonepohjainen. Esimerkiksi ennen TKTL:n ilmoittautumisjärjestelmää labroihin ilmoittauduttiin fyysisesti jonottamalla ja laittamalla nimensä ilmoittautumislistalle. Tämäkin on järjestelmä. Jos ongelmakenttä on täysin uusi, niin nykyistä järjestelmää ei löydy. Esimerkiksi ongelmakenttä rakenna pysyvä tukikohta kuuhun ei sisällä nykyistä järjestelmää, vaan korkeintaan osia siitä. 11 Tuleva ohjelmisto Laitteeseen kehitettävä ohjelmisto on vain yksi tulevan järjestelmän komponenteista. Tätä kutsutaan tulevaksi ohjelmistoksi (software-tobe). Muut komponentit vaikuttavat ongelmakenttään. Ne muodostavat tulevan ohjelmiston toimintaympäristön. Muita komponentteja ovat esimerkiksi Ihmiset tai liiketoimintayksiköt, Fyysiset laitteet, kuten anturit ja kommunikointi ja Yhteistyössä olevat toiset osajärjestelmät. 12 2

Ongelmakentän ymmärrys Ongelmakentän ositus Ymmärtääksemme ongelmakentän meidän on ymmärrettävä nykyisen järjestelmän tavoitteet, toimintaa säätelevät lait, rajoitteet ja heikkoudet. Ymmärtääksemme tulevan ohjelmiston vaatimukset meidän on ymmärrettävä ongelmakentän lisäksi tulevalle järjestelmälle asetettavat vaatimukset. Usein ongelmakenttä ei ole stabiili, vaan ratkaisun vaatimukset muuttuvat ajan kanssa. Tällöin kehitetään yksi tai useampi välivaihe: seuraava järjestelmä (system-to-be-next). Ongelmakenttä voidaan osittaa kolmelle tasolle (vertaa kalvo 7): Miksi tulevaa järjestelmää tarvitaan? (WHY) Nykyistä järjestelmää tutkimalla löydetään nykyisiä ongelmia, keksitään mahdollisuuksia ja ymmärretään ongelmakenttää. Tulevalle järjestelmälle selvitetään tarpeet, jotka järjestelmän tulee täyttää. Mitä tarpeita sen avulla täytetään? (WHAT?) Tulevan järjestelmän tavoitteet toteuttavat palvelut, oletukset ja reunaehdot selvitetään. Kuka tulevassa järjestelmässä osallistuu tarpeiden täyttämiseen? (WHO?) Tuleva ohjelmisto, ihmiset, laitteet ja olemassa olevat (osa)järjestelmät toteuttavat tulevan järjestelmän. 13 14 Miksi? Eli Why-taso Tulevan järjestelmän kehitystyön taustat tulee selvittää, jotta ongelmakenttää voidaan ymmärtää kunnolla. Miksi nykyinen järjestelmä ei kelpaa? Mitkä ovat sen heikkoudet? Mitä tulevalta järjestelmältä odotetaan? Miten tuleva järjestelmä suhtautuu asiakkaan liiketoimintamalleihin ja tavoitteisiin? Miten tuleva järjestelmä suhtautuu nykyisin käytössä oleviin järjestelmiin? Vastausten selvittäminen on yleensä osa kelpoisuusselvitystä (feasibility study), jolla katsotaan, kannattaako projektia aloittaa. Yhtä lailla se voi olla osa vaatimusmäärittelyä. Ristiriitaiset tavoitteet Tulevan järjestelmän tavoitteet saattavat vaihdella sen mukaan, kuka niitä esittää. Eri esittäjien tavoitteet saattavat olla ristiriitaisia. Esimerkiksi ongelmakenttä luotain toiselle tähdelle vaatii järjestelmän, joka toimittaa luotaimen perille mahdollisimman nopeasti (tähtitieteilijät) tai mahdollisimman edullisesti (poliitikot). Tavoitteiden väliset ristiriidat on selvitettävä ennen kuin projektissa voidaan edetä. Tämä vaatii kompromisseja eri osapuolilta. 15 16 Mitä? Eli What-taso Kun tulevan järjestelmän tavoitteet tiedetään, voidaan selvittää, mitä palveluja (services) järjestelmältä odotetaan näiden tavoitteiden täyttämiseksi. Osa palveluista toteutetaan tulevan ohjelmiston avulla. Muut palvelut toteutetaan järjestelmän muiden komponenttien avulla, myös mahdollisesti manuaalisesti. Palveluiden ja vaatimusten välillä on monta-moneensuhde. Palvelu voi ratkaista monta vaatimusta ja yhden vaatimuksen toteuttamiseksi voidaan tarvita useita palveluja. (Yleensä yksi riittää tosin.) Palveluiden lisäksi täytyy selvittää järjestelmää koskevat rajoitteet (constraints) ja oletukset (assumptions). 17 Kuka? Eli Who-taso Tulevan järjestelmän vastuut on selvitettävä. Tämä koskee sekä järjestelmässä toimivia ihmisiä että järjestelmän osajärjestelmiä. Ilman toimivaa vastuujakoa kehittynytkin järjestelmä saattaa toimia väärin tai hitaasti. Vastuujako ymmärretään yleensä ihmisten väliseksi vastuujaoksi, mutta yhtä lailla osajärjestelmien välillä on vastuujakoa. Vastuut voidaan osittaa usealla tavalla. Paras vastuujako minimoi tulevan järjestelmän epäonnistumisen todennäköisyyden. Todennäköisin vastuujako minimoi epäonnistumisen todennäköisyyden ja kehitystyön kustannusten funktion. 18 3

Ohjelmiston toimintaympäristö Samalla lailla kun ongelmakenttä ja laite eroteltiin toisistaan, myös tulevan ohjelmiston toimintaympäristö ja ohjelmakoodi erotetaan toisistaan. Vaatimusmäärittelyssä selvitetään, millä ehdoilla tuleva ohjelmisto toimii (toimintaympäristö) ja miten ohjelmisto kommunikoi ulkomaailman kanssa (ohjelmiston ja toimintaympäristön rajapinta). Toimintaympäristön vaatimukset ovat järjestelmävaatimuksia (system requirements) Rajapinnan vaatimukset ovat ohjelmistovaatimuksia (software requirements). Ohjelmiston toimintaympäristön kaavakuva Ympäristön Yhteisiä Vaatimusmäärittelyä Järjestelmävaatimuksia Ohjelmistovaatimuksia Ohjelmiston Toteutuksen sisäisiä vaatimuksia (eivät kuulu vaatimusmäärittelyyn) Suunnittelua 19 20 Järjestelmävaatimukset Järjestelmävaatimus tarkoittaa sellaista toimintaympäristön vaatimusta, jonka tuleva ohjelmisto toteuttaa yhteistyössä muiden järjestelmän komponenttien kanssa. Nämä vaikuttavat suoraan ongelmakenttään. Esimerkiksi seuraava on järjestelmävaatimus: Luotain aloittaa jarrutuksen, kun sen etäisyys x tähdestä on välillä 1,5 AU < x < 0,5 AU (AU = maan keskietäisyys auringosta). Ohjelmistovaatimukset Ohjelmistovaatimus tarkoittaa sellaista toimintaympäristön vaatimusta, jonka ohjelmisto toteuttaa yksin. Nämä vaikuttavat välillisesti ongelmakenttään rajapinnan kautta. Esimerkiksi seuraava on ohjelmistovaatimus: Muuttujan etäisyystähdestä arvon on oltava yli 0,5. Ohjelmistovaatimukset ovat järjestelmävaatimuksia, koska ne ovat osa ongelmakenttää. Järjestelmävaatimukset eivät yleensä ole ohjelmistovaatimuksia. 21 22 Reunaehdot ja oletukset Reunaehto (domain property) on ongelmakentän ominaisuus. Se on aina voimassa, eikä sitä voida kiertää mitenkään. Reunaehdot liittyvät yleensä fysiikan lakeihin. Esimerkiksi seuraava on reunaehto: Luotaimen lähettämät radiosignaalit kulkevat valonnopeudella. Oletus (assumption) on väite, jonka oletetaan pätevän ongelmakentässä. Esimerkiksi seuraava on oletus: Ohjelmistossa laskettu luotaimen etäisyys tähdestä on sama kuin luotaimen todellinen etäisyys tähdestä. 23 Järjestelmä- ja ohjelmistovaatimusten sykli Järjestelmä- ja ohjelmistovaatimusten roolit ovat selkeät. Oikein määritelty ohjelmisto ohjaa seuraavaa sykliä: 1. Tuleva ohjelmisto saa syötteitä syötelaitteilta, kuten syöteantureilta. 2. Syötteet vaikuttavat ohjelmiston toimintaan ohjelmistovaatimusten mukaisesti. 3. Ohjelmisto tuottaa vaatimusten mukaisia tulosteita tulostuslaitteille, kuten ohjausantureille. 4. Ohjausanturit ohjaavat laitteistokomponentteja, jolloin ohjelmiston toimintaympäristö muuttuu. Muutokset ovat järjestelmävaatimusten mukaisia. 5. Syöttölaitteet havaitsevat toimintaympäristön muutoksen. Sykli alkaa alusta. 24 4

Vaatimusluokat Toiminnalliset vaatimukset Kaikki vaatimukset jakautuvat kahteen luokkaan: toiminnallisiin vaatimuksiin (functional requirements) ja ei-toiminnallisiin vaatimuksiin (non-functional requirements). Toiminnalliset vaatimukset liittyvät tulevan ohjelmiston tarjoamiin palveluihin. Ei-toiminnalliset määrittelevät, mitä rajoituksia tulevan järjestelmän palveluilla on. Reunaehdot ovat sukua ei-toiminnallisille vaatimuksille. Nekin rajoittavat järjestelmän toimintaa, mutta erona ei-toiminnallisille vaatimuksille niistä ei voida neuvotella. Toiminnalliset vaatimukset määrittelevät, miten tuleva ohjelmisto vaikuttaa ympäristöönsä. Ne vastaavat aiemmin listattuun Mitä-kysymykseen (What). Esim. Luotaimen hallintaohjelmisto lähettää pyydettäessä tilaraportin omasta tilastaan. Toiminnalliset vaatimukset voivat myös viitata toimintaympäristön vaikutukseen tulevan ohjelmiston toimintaan. Esim. Luotaimen hallintaohjelmisto kytkee aurinkopaneelit pois päältä, kun paristojen varaustaso x toteuttaa ehdon 95% < x < 100%. 25 26 Ei-toiminnalliset vaatimukset Ei-toiminnalliset vaatimukset määrittelevät ehtoja, miten tulevan ohjelmiston pitää täyttää toiminnalliset vaatimukset tai miten tulevan ohjelmiston kehitystyötä pitää tehdä. Esim. Kaikki luotaimen radioliikenne on kryptattu. Luotaimelle tehdään samoilla määrityksillä kolme eri ohjelmistoversiota. Ei-toiminnallisia vaatimuksia voi toisinaan olla vaikea havaita, mutta onneksi niistä on tehty useampikin kattava luokittelu. 27 Ei-toiminnallisten vaatimusten luokittelu Kuvalla (c) Axel van Lamsweerde, 2009 28 Ei-toiminnallisten vaatimusten luokkia Laatuvaatimukset (quality requirements) Nämä kuvaavat ohjelmiston laatuun liittyviä ominaisuuksia vastaten kysymykseen Miten hyvin (How well). Näillä on yhteys laatutekijöihin (quality factors, quality attributes) Ohjeistusvaatimukset (compliance requirements) Nämä kuvaavat ohjelmiston suhdetta kansallisiin ja kansainvälisiin lakeihin, sosiaalisiin sääntöihin, poliittisiin tai kulttuurisiin rajoituksiin, standardeihin jne. Arkkitehtuurivaatimukset Nämä kuvaavat, miten tuleva ohjelmisto liittyy toimintaympäristöönsä. Kehitystyön vaatimukset Nämä kuvaavat, mitä ohjelmistotekniikan prosesseja ja menetelmiä käytetään, mitkä ovat kehitystyön sallitut kustannukset jne. Nämä eivät liity ohjelmiston käyttöön. 29 Vaatimusmäärittelyprosessi Vaatimusmäärittelyyn kuuluu prosessi, joka sisältää työvaiheet, toimijat ja tuotokset. Vaatimusmäärittelyn työvaiheet sisältävät tuotoksen tekemiseen vaadittavat tehtävät (kohta tarkemmin). Vaatimusmäärittelyn toimijat ovat tulevan ohjelmiston sidosryhmiä (stakeholders). Sidosryhmä tarkoittaa henkilöä, ryhmää tai järjestelmää, jonka toimintaan tuleva ohjelmisto vaikuttaa, joka on vastuussa tulevan ohjelmiston vaatimuksista tai joka osallistuu valmiin ohjelmiston hyväksymiseen. Vaatimusmäärittelyn tuotos on vaatimusdokumentti (requirements document, RD). Se kuvaa sekä löydetyt vaatimukset että tulevan ohjelmiston ja toimintaympäristön välisen rajapinnan. 30 5

Vaatimusmäärittelyn työvaiheet Vaatimusmäärittelyn työvaiheet 2 Ongelmakentän ymmärtäminen Tässä työvaiheessa tutustutaan nykyiseen järjestelmään ja ongelmakenttään mahdollisimman monelta suunnalta. Selvitettäviä asioita ovat: Miten nykyinen järjestelmä toimii osana ongelmakenttää. Mitkä ovat nykyisen järjestelmän tavoitteet, komponentit, säännöt ja tehtävät. Mitä rajoituksia ja sääntöjä sillä on. Mitkä ovat vaatimusmäärittelyn sidosryhmät. Mitkä ovat sidosryhmien mielestä nykyisen järjestelmän vahvuudet ja heikkoudet. Vaatimusten kartoitus Tässä työvaiheessa syvennetään tietämystä ongelmakentästä ja hankitaan raakatietoa tulevasta ohjelmistosta ja käyttöympäristöstä. Selvitettäviä asioita ovat: Miten uudella teknologialla ja/tai muuttuneilla liiketoimintamalleilla voidaan korjata nykyisen järjestelmän heikkouksia menettämättä sen vahvuuksia. Mitä nykyisestä järjestelmästä eroavia tavoitteita on tulevalla järjestelmällä ja mitä erilaisia vaihtoehtoja tavoitteiden täyttämiseen on. Ympäristön ja tekniikan tulevalle järjestelmälle asettamat rajoitteet. Mahdolliset vastuujaot (Kuka-taso) Skenaariot kuvaamaan tulevan ohjelmiston ja sen toimintaympäristön välistä vuorovaikutusta. Ongelmakentän ja toimintaympäristön ominaisuudet ja oletukset. Edelliset kohdat toteuttavat tulevan ohjelmiston vaatimukset. 31 32 Vaatimusmäärittelyn työvaiheet 3 Vaatimusten evaluointi Tässä vaiheessa ratkotaan kartoitusvaiheessa esille tulleet kysymykset ja ongelmat: Vaatimuksiin liittyvät ristiriidat ratkotaan. Eri näkökulmat ja sidosryhmät näkevät ongelmakentän ja tulevan ohjelmiston eri tavoin, mikä voi johtaa ristiriitaisiin vaatimuksiin tai eri tulkintoihin. Tulevan järjestelmän riskit kartoitetaan ja järjestelmälle tehdään riskianalyysi. Kartoitusvaiheessa esille tulleet vaihtoehtoiset ratkaisut evaluoidaan. Vaihtoehdoista valitaan sopivin. Vaatimukset priorisoidaan. Tämä helpottaa sekä evaluointia että toteutusaikataulun laadintaa. 33 Vaatimusmäärittelyn työvaiheet 4 Spesifiointi ja dokumentointi Tässä vaiheessa tarkennetaan, strukturoidaan ja dokumentoidaan evaluointivaiheessa hyväksyttyjä tulevan järjestelmän ominaisuuksia. Tuloksena saadaan vaatimusdokumentti, joka sisältää tulevan järjestelmän tavoitteet, määritelmät, ongelmakentän ominaisuudet, vastuut, järjestelmävaatimukset, ohjelmistovaatimukset ja käyttöympäristöoletukset. Vaatimusten vahvistaminen Lopuksi vaatimusdokumentista varmennetaan, että tuleva järjestelmä täyttää sidosryhmien tarpeet. Samalla varmistetaan, että vaatimusdokumentissa spesifikaatiot on kuvattu yhtenäisesti ja että ne kattavat ongelmakentän. Vahvistettu vaatimusdokumentti on kehitystyön syöte. Vaatimusmäärittelyprosessi on iteratiivinen. Kaikkea ei selvitetä kerralla, vaan vaatimukset ja ongelmakentän ymmärrys tarkentuvat ajan kanssa (seuraava kalvo) 34 Vaatimusmäärittelyn spiraali Vaatimusmäärittelyn laatu Kuvalla (c) Axel van Lamsweerde, 2009 Hyvä vaatimusmäärittely ja erityisesti hyvä vaatimusdokumentti ei synny itsestään. Niiden on täytettävä joukko laatutekijöitä: Täydellisyys (completeness) Kaikki tulevalle järjestelmälle asetetut tavoitteet tulee olla katettu. Kaikki mahdolliset tulevan ohjelmiston syötteet ja tulosteet on katettu. Poikkeustilanteet on katettu jne. Johdonmukaisuus (consistency) Vaatimukset, oletukset ja reunaehdot ovat keskenään yhteensopivia ja kuvattu yhtenäisesti. 35 36 6

Vaatimusmäärittelyn laatu 2 Vaatimusmäärittelyn laatu 3 Riittävyys (adequacy) Vaatimukset kuvaavat tulevan järjestelmän todellisia tarpeita. Ohjelmistovaatimukset vastaavat niitä kuvaavia järjestelmävaatimuksia. Reunaehdot kuvaavat ongelmakentän lainalaisuudet oikein. Toimintaympäristöstä tehtävät oletukset ovat realistisia. Yksikäsitteisyys (unambiguity) Vaatimuksissa, oletuksissa ja reunaehdoissa ei ole moniselitteisyyttä. Mitattavuus (measureability) Vaatimusten pitää olla sellaisella tarkkuudella, että niitä voidaan evaluoida numeerisesti. 37 Asianmukaisuus (pertinence) Vaatimukset ja oletukset liittyvät tulevalle järjestelmälle asetettuihin tavoitteisiin, eivät toteutukseen. Soveltuvuus (feasibility) Vaatimusten täytyy olla toteutettavissa annetulla budjetilla, aikataululla ja teknologialla. Ymmärrettävyys (comprehensibility) Vaatimukset, oletukset ja reunaehdot on kuvattu dokumentaatiossa ymmärrettävästi. Hyvä rakenne (good structure) Vaatimusdokumentti on rakenteeltaan looginen ja yhtenäinen. Termejä ei käytetä ennen niiden esitelyä. 38 Vaatimusmäärittelyn laatu 4 Muunnettavuus (modifiability) Vaatimusdokumenttia on mahdollista päivittää ja laajentaa paikallisesti ilman että kokonaisuus kärsii. Seurattavuus (traceability) Jokaisesta vaatimuksesta, oletuksesta ja reunaehdosta tiedetään, mikä sidosryhmä sen on esittänyt ja koska. Jokaisen vaatimuksen vaikutus tulevaan järjestelmään selviää dokumentista. Osa tärkeimmistä vaatimuksista (esim. Täydellisyys ja riittävyys) riippuvat ongelmakentästä ja tulevalle järjestelmälle asetetuista tavoitteista. Tällaisia vaatimuksia on vaikea evaluoida. Ketterä ohjelmistokehitys ja vaatimusmäärittely Ketterä ohjelmistokehitys (agile development) on moderni tapa tehdä ohjelmistoja. Siinä ohjelmistoa rakennetaan iteratiivisesti pieni osa kerrallaan lyhyinä sykleinä. Ketterä ohjelmistokehitys ja vaatimusmäärittely eivät ole ristiriidassa keskenään. Vaatimusmäärittelyn spiraali (kalvo 35) on jo iteratiivinen prosessi. Vaatimusmäärittelyn kannalta jokainen spiraalin sykli lisättynä lyhyellä toteutusvaiheella vastaa ketterän ohjelmistokehityksen sykliä. 39 40 Syklin lyhentämisen seurauksia Syklin äärimmäinen lyhentäminen johtaa keventyneeseen vaatimusmäärittelyyn: Osa toiminnallisuudesta saadaan suoraan käyttäjältä mahdollisesti hyvin kevyellä evaluoinnilla, spesifioinnilla ja laadunvarmistuksella tai jopa ilman näitä vaiheita. Esimerkiksi testitapaukset vastaavat usein spesifikaatiota. Yhdellä kerralla toteutetaan pieni osa tulevan ohjelmiston toiminnallisuudesta. Asiakkaalta saadaan välitön palaute toteutetuista vaatimuksista. 41 Ketterän kehitystyön vaatimuksia Vaatimusmäärittelyn kannalta kaikki projektit eivät ole hyviä ketteriä projekteja. Oppikirja listaa seuraavat vaatimukset: Kaikki sidosryhmät, myös loppukäyttäjät, palautuvat yhdeksi asiakkaan rooliksi. Asiakas on läsnä kehitystiimissä tai aina tavoitettavissa. Projekti on riittävän yksinkertainen ja ei-kriittinen, jotta ei-toiminnalliset vaatimukset, ympäristön rajoitukset, taustalla olevat oletukset, vaihtoehtoiset toteutustavat ja tulevan järjestelmän riskit voidaan kuitata vähällä työllä tai jättää huomioimatta. Asiakas osaa antaa vaatimukset yhtenäisesti (ei konflikteja) ja ymmärtää niiden arvon (ei priorisointia). Vaatimuksia ei tarvitse spesifioida tarkasti ennen toteutusta. Tiheät julkaisut ovat tärkeämpiä kuin vaatimusten verifiointi. Uudet tai muuttuvat vaatimukset eivät vaadi raskasta refaktorointia. Kehitystiimi huolehtii tulevan ohjelmiston ylläpidosta. Onneksi ketteryys ei ole binäärinen ominaisuus. Mitä vähemmän edellisistä vaatimuksista toteutuu, sitä enemmän aikaa tulee tarjota kullekin vaatimusmäärittelyn syklille. 42 7