Követelmény meghatározása
A követelmény nem más, mint mikor meghatározzuk, hogy az ügyfél által megrendelt szoftvernek vagy rendszernek, vagy annak egy adott funkciójának hogyan, milyen feltételek szerint kell működnie.
A követelményeket részletességük alapján 2 nagyobb csoportra bonthatjuk:
- Felhasználói követelmények: ezek a követelmények elsősorban az ügyfeleknek, végfelhasználóknak vagy például a fejlesztő csapatot vezető menedzsereknek készülnek, akik nem feltétlenül rendelkeznek mélyebb technikai ismeretekkel, ezért úgy kell megfogalmazni ezeket a leírásokat, hogy számukra is érthető legyen, például diagramokkal, táblázatokkal kiegészítve, érthető módon kell megfogalmazni.
- Rendszerkövetelmények: ezen követelmények viszont már részletesen tartalmazzák, hogy egy adott szoftvernek vagy funkciónak milyen módon kell működnie. Pontosan meg kell határoznia, hogy mit kell implementálni, fejleszteni. Ezek a leírások már akár az ügyfél és fejlesztők közötti szerződés részét is képezhetik.
A felhasználói és rendszerkövetelmények részletességük alapján különbözteti meg a követelményeket. A fejlesztendő funkciók alapján három nagy csoportra oszthatjuk tovább a követelményeket:
- Funkcionális követelmények: ezek a követelmények leírják, hogy egy adott rendszernek milyen szolgáltatást kell nyújtania. Meghatározza, hogy bizonyos helyzetekben, hogyan kell reagálnia és egyes bemeneti értékekre milyen módon kell viselkednie.
- Nem-funkcionális követelmények: általában ezen követelmények a rendszer működésére és annak szolgáltatásaira vonatkoznak Ezek lehetnek például: biztonsági, teljesítmény vagy használhatósági követelmények.
- Szakterületi követelmények: ezek a követelmények meghatározzák, hogy egy rendszernek az alkalmazott szakterületének megfelelően, hogyan kell viselkednie, pl.: autóipar, banki terület.
Funkcionális követelmények
Egy rendszer vagy szoftver funkcionális követelményei pontosan meghatározzák, hogy annak milyen funkciókkal kell rendelkeznie és milyen módon kell viselkednie. (pl.: szűrések, kimutatások, más rendszerekkel való együttműködés)
Törekedni kell a funkcionális követelmények megalkotásakor arra is, hogy ne legyenek ellentmondások a funkciók között, amit egy komplex rendszerben nehéz elérni. A funkciók száma miatt előfordulhat, hogy kifelejtünk dolgokat vagy hibát ejtünk.
Nem-funkcionális követelmények
A nem-funkcionális követelmények a rendszer teljességére és annak tulajdonságaira vonatkoznak ellentétben a funkcionális követelményekkel, amik kifejezetten annak funkcióira vonatkoznak. Ezek lehetnek például: megbízhatósági, teljesítmény vagy biztonsági követelmények.
Általában a nem-funkcionális követelmények kritikusabbak, mint a funkcionális követelmények. Előfordulhat, hogy egy nem-funkcionális követelmény nem teljesül, akkor az egész rendszer használhatatlan, míg egy funkcionális követelmény esetében, csak egy bizonyos funkció nem működik.
Például egy banki rendszer esetében, ha egy biztonsági követelmény nem teljesül, akkor az blokkolhatja az egész rendszer működését vagy egy autóipari cégnél fontos, hogy megfeleljenek különböző úgynevezett ISO szabványoknak, hogy gyártásba küldhessenek egy autót.
A nem funkcionális követelmények a következőktől függhetnek: egy szervezet szabályzatától, kell-e a rendszernek másik szoftverrel vagy hardverrel kommunikálnia, külső biztonsági tényezők (adatvédelem)
A nem-funkcionális követelményeket következőképpen csoportosíthatjuk:
- Termék követelmények: ezen követelmények meghatározzák, hogy egy termék milyen módon viselkedjen, ami lehet sebesség, megbízhatóság.
- Szervezeti követelmények: egy szervezet működési módjából, szabályzatából adódó követelmények.
- Külső követelmények: amennyiben egy rendszernek együtt kell működnie más rendszerekkel vagy meg kell felelni különböző jogi szabályoknak.
Általánosságban elmondható, hogy a nem-funckionális követelményeket sokkal nehezebb verifikálni, mint a funkcionális követelményeket (egyszerűbb ellenőrizni egy adott funkció meglétét vagy működését, mint azt, hogy egy rendszer milyen könnyen használható).
Ezért törekedni kell arra, hogy egy nem-funkcionális követelmény objektíven, valamilyen mennyiségileg meghatározható, tesztelhető metrika alapján kerüljön elkészítésre.
Szakterületi követelmények
Ezen követelmények nem egy adott rendszer felhasználójának az igényeiből származnak, hanem arról a szakterületről, ahol azt alkalmazni fogják, így ezek nagyon speciálisak, amik a következő problémákhoz vezethetnek:
- Olyan speciális terminológiákat használnak a követelményekben, hogy azt a szoftverfejlesztők nem értik.
- A megrendelői oldal szakértői kihagyhatnak bizonyos információkat, mert az számukra nyilvánvaló viszont a fejlesztőknek nem.
Ezen hibák kiküszöbölésének érdekében ilyen esetben a fejlesztői oldalról szoktak legalább egy olyan személyre támaszkodni, aki ismeri az adott szakterületet, így csökkentve a hibák kockázatát.
Követelmények megfogalmazásából adódó általános problémák
A felhasználói és rendszer követelmények megfogalmazásához és dokumentálásához gyakran használják a természetes nyelvet, viszont ebből többféle probléma adódhat:
- Többértelműség: mind a követelmény írói és olvasói is ugyanazt kell értsék, viszont a természetes nyelvekből adódóan a szavak többértelműek is lehetnek.
- Túl nagy rugalmasság: egy bizonyos dolgot többféleképpen is el lehet mondani.
- Követelmények keveredése: a funkcionális és nem-funkcionális követelmények könnyen keveredhetnek.
- Követelmények összeolvadása: különböző követelmények egy követelményben kerülnek megalkotásra.
Ezen problémák kiküszöbölésének érdekében szokták alkalmazni a strukturált természetes nyelvet, aminek a következő előnyei és hátrányai lehetnek:
- Előre definiált követelmény-sablonokkal korlátozzuk a követelmény-író szabadságát.
- Minden követelményt egy standard módon írunk meg.
- Korlátozzuk a leírásban használható terminológiát.
- Megmarad a természetes nyelv kifejező ereje miközben egységes forma alakítható ki.
Egy ilyen strukturált természetes nyelv kialakításához jó példa lehet az űrlap alapú megközelítés. Az űrlap felépítése a következő lehet:
- A funkció vagy entitás definíciója.
- A bemenetek leírása, és hogy honnan erednek.
- A kimenetek leírása, és hogy hová tartanak.
- Más felhasznált entitások felsorolása.
- Elő- és utófeltételek (pre-, post-condition).
- Mellékhatások leírása.