Szoftverfejlesztési folyamat
- Szoftverfejlesztési folyamat
Szoftverfejlesztés
A szoftverek nélülözhetetlen alkotóelemei a modern világnak.
- Szémos célt szolgálnak
- Különböző felépítésűek
- emiatt megvalósításuk módja jelentősen eltérhet
A szoftverekben jelentős része hibás, a szoftverfejlesztési munkák jelentős része kudarcba fullad, ennek okai:
- Egyre nagyobb számban, egyre összetettebb szoftverekre van szükség
- Alacsonyabbak az elvárások a szoftverekkel szemben.
Emiatt nagy szükség van professzionális szoftverfejlesztésre
A szoftvertechnológia
Egy szoftvernek, mint terméknek gyártási technológiára van szüksége, amely garantálja a program funkcióit, minőségét, költségét és határidejét.
A szoftvertechnológia feladata szoftverek rendszerezett, felügyelt, minősített fejlesztése, működtetése és karbantartása
- programok
- dokumentáció
- konfiguráció
- adatok
A szoftverek többsége nagy méretű, nagy bonyolultságú programrendszer, amely
- Rendszerint csapatmunkában készül
- Hosszú élettartamú, karbantartást és bővítést igényel
Minőségi mutatók
A szoftvereknek megfelelő színvonalon kell biztosítania az elvárt funkciókat, amit a szoftver minőségi mutatóival (quality characteristics) írhatunk le
- Karbantarthatóság
- Megbízhatóság és biztonság
- Hatékonyság
- Használhatóság, hozzáférhetőség
Szoftvertechnológiai projekt
A szoftver fejlesztésének folyamatát projektnek, előállításának felügyeletét projektmenedzselésnek nevezzük.
A projektért felelős személy a projektmenedzser (project manager), aki
- Biztosítja, hogy a szoftver megfelel az előírt minőségnek, és elkészül a megadott határidőre a költségkereten belül.
- Szervezi, irányítja, ütemezi a projektben részt vevő csapat munkáját, és biztosítja a szükséges hardver és szoftver erőforrásokat.
- Garantálja a módszerek és szabványok alkalmazását
- Gondoskodik a projekt dokumentáltságáról
A szoftverfejlesztési csapatnak számos további tagja lehet, akik különböző szerepeket töltenek be, pl.:
- Termékgazda: üzleti folyamatok, prioritások és elfogadási feltételek kezelése
- Programgazda: fejlesztés ütemezése, feladatok elosztása és követése.
- Tervező: szoftver magas szintű tervének elkészítése, technikai döntések kezelése
- Fejlesztő: szoftver implementációja
- Minőségbiztosítás: tesztelés tervezése, megvalósításai
A szoftver életciklus
Minden szoftver rendelkezik életciklussal, amely meghatározza létét a feladat kitűzésétől a program használatának befejezéséig.
Az életciklus általában négy fő fázisra bontható:
- specifikáció
- tervezés és implementáció
- verifikáció és validáció
- evolúció
Specifikáció
A specifikáció (software specification) célja a feladatot megoldó szoftver funkcióinak tisztázása, a rendszerre és a fejlesztésre vonatkozó elvárások megadása.
feltérképezi a követelményeket felhasználói, valamint fejlesztői szemszögből, lépései:
- megvalósíthatósági elemzés
- követelmény feltárás és elemzés
- követelmény specifikáció
- követelmény validáció
Eredménye a szoftver követelmény-leírása (software requirements specification)
Tervezés és implementáció
A szoftver tervezése és implementációja (software design and implementation) feladata a specifikáció átalakítása egy végrehajtható rendszerré.
Meghatározza a rendszer szerkezetét (felépülés), felületét (be- és kimenet), működését (alkalmazott algoritmusok, kommunikációs folyamatok)
A folyamat során elkészül a szoftver rendszerterve (software design description), amely tartalmazza a program statikus és dinamikus szerkezetét, a kommunikációs csatornák feltérképezését, az implementációs és tesztelési tervet.
Elkészíthető a szoftver prototípusa (prototype), amely a program egyszerűsített megvalósítását tartalmazza.
Az implementációhoz megfelelő szoftverfejlesztési környezetet kell használnunk, a programkód változásait verziókövetéssel tartjuk nyilván.
Az implementáció részeként az egyes programegységek tesztelése is megtörténhet.
A szoftverek tervezésének és programozásának módszerét nevezzük programozási paradigmának.
- Meghatározza a programozási stílust, az absztrakciós szintet.
- Meghatározza az alkalmazható programozási nyelvek körét is, és fordítva.
Validáció és evolúció
A verifikáció és validáció (software verification and validation) célja megmutatni, hogy a rendszer megfelel a specifikációnak, valamint a felhasználói elvárásoknak.
Az evolúció (software evolution) során új követelményeknek megfelelően bővítjük a szoftvert, illetve korrigáljuk a felmerülő hibákat.
További lépések is kísérhetik a fejlesztési folyamatot, pl.
- kihelyezés (deployment): a program üzembe állítása, és elérhetővé tétele.
- tréning és támogatás (training and support): a felhasználókkal való kapcsolattartás (annak biztosítása, hogy a szoftvert megfelelően tudják kezelni és használni)
A szoftver dokumentációja két részből tevődik össze:
- felhasználói dokumentáció, amely tartalmazza a szoftver üzembe helyezésének, funkcióinak bemutatását
- fejlesztői dokumentáció, amely tartalmazza a szoftver megvalósítását folyamatát és részletes ismertetését
Ütemterv
A szoftver életciklus fázisai (feladatai) további fázisokra (részfeladatokra) tagolhatóak, így egy hierarchikus feladatszerkezetet kapunk.
- Az egyes feladatokra erőforrásokat és időkorlátot adhatunk
- Az egyes feladatok között függőségeket állapíthatunk meg
- Ezek alapjén elkészíthetjük a projekt ütemtervét
- Tartalmazza a feladatok időbeli beosztását, függőségeit, felelőseit, így áttekinthetővé teheti az erőforrás szükségleteket.
- Általában a specifikáció során készül el, de később módosulhat.
Mérföldkövek
A feladatokhoz mérföldköveket (milestone) rendelhetünk, amelyek lehetőséget adnak a projekt haladásában történő betekintésre.
- A márföldkő egy adott cél adott időpontra történő elérését jelenti, így névvel, eseménnyel, céllal rendelkezik.
- A mérföldkövek be nem tartása általában korrekciókat követel a projekt lefutásában.
- Kellően konkrétnak, ellenőrizhetőnek, számonkérhetőnek kell lennie.
- A fő mérföldkövek az egyes fázisok lezárását jelentik, ezen kívül számos további mérföldkő adható.
Az UML
A szoftverfejlesztési életciklust folyamatosan követi a modellezés, ennek eszköze az egységes modellezési nyelv (Unified Modeling Language, UML), amely egy öt pillérű szemléletrendszerrel rendelkezik:
- Használati: a szoftver szolgáltatásai és azok kapcsolata a felhasználókkal.
- Szerkezeti (statikus): a rendzser és a programegységek felépítése, kapcsolatai.
- Dinamikus: a programegységek viselkedése.
- Implementációs: a megvalósítás szempontjai, komponensei.
- Környezeti: hardver és szoftver erőforrások.
Szoftvereszközök
A fejlesztőcsapat munkáját megfelelő szoftvereszközökkel kell alátámasztani
- Projektirányítási eszközzel (project tracking system), amely támogatja a dokumentálást és a feladatok követését.
- Fejlett tervezőeszközzel (case tool), ahol a fejlesztés folyamata és a felelősség is nyomon követhető.
- Integrált fejlesztőkörnyezettel (IDE), amely elősegíti a csapatmunkát.
- Verziókövető rendszerrel (revision control system), amely lehetővé teszi a programkód változásainak követését.
- Folyamatos integrációs eszközzel (continuous integration), amely elősegíti a tevékenységek automatizálását.
A vízesés modell
A szoftverfejlesztési modell határozza meg az életciklus egyes fázisai közötti kapcsolatot, időbeliséget.
A legegyszerűbb fejlesztési modell a vízesés (waterfall) modell, amelyben az egyes fázisok lineárisan követik egymást.
- Előre megtervezi a projekt időtartamát, ráfordításait.
- Elvárja minden fázis megfelelő dokumentálását, amely tartalmazza annak eredményeit.
- Előnyei: jól strukturált, dokumentált folyamatot biztosít.
- Hátrányai: nem teszi lehetővé a követelmények megváltoztatását, nem készül fel az esetleges nehézségekre (nincs kockázatkezelés).
Prototípusok
A szoftverfejlesztés során felmerülő nehézségek könnyebben előreláthatóak, ha a szoftvernek elkészítjük a prototípusait (prototyping), amely lehet:
- Horizontális prototípus: interakciós szempontból mutatja be a szoftvert.
- Vertikális prototípus: egy adott funkciócsoport részletes megvalósítása.
A folyamat során megvalósított prototípusok a szoftver részévé válhatnak (evolutionary prototyping), vagy szolgálhatják csak a bemutatást/ellenőrzést, és ténylegesen nem kerülnek felhasználásra (throwaway prototyping).
A spirális modell
A (Boehm-féle) spirális modell egy kockázatvezérelt fejlesztési modell, amelyben a folyamat során elsőként prototípusok kerülnek megvalósításra, amelyek kiértékelése után kerül megvalósításra a tényleges szoftver.
- A fejlesztés ciklusokban történik, amelyben az elkészített prototípusok, valamint a továbbfejlesztésével kapcsolatos kockázatok kiértékelésre kerülnek.
- Előnyei: jobban alkalmazkodik a változó követelményekhez, a prototípusok lehetővé teszik a nehézségek előrelátását.
- Hátrányai: költségesebb a prototípus elkészítése és a kockázatkiértékelés végett, továbbá a prototípusok megzavarhatják a felhasználót.
Az inkrementális modell
Az inkrementális modell több lépésből építi fel a folyamatot, és több változatban állítja elő a szoftvert.
- Minden változat egy újabb funkcionalitással bővíti a szoftvert, a fázisok rövidek, gyors visszajelzésekkel.
- Az egyes fázisok átfedésben vannak, és kihatnak egymásra.
- Előnyei: gyorsan alkalmazkodik a változó követelményekhez, a felhasználó jobban követheti a fejlesztési folyamatot.
- Hátrányai: kevésbé menedzselhető, tervezhető, áttekinthető, nehezebben validálható.
Agilis szoftverfejlesztés
Az agilis szoftverfejlesztés célja a gyors alkalmazásfejlesztés megvalósítása, inkrementális alapon.
- A szoftver folyamatos fejlesztés és kiadás alatt áll (continuous delivery), a sebesség állandó, a változtatások minden lépésben beépíthetőek (welcome changes).
- A működő szoftver az előrehaladás mérőeszköze, előtérben az egyszerűség, ugyanakkor folyamatos odafigyelés a megfelelő tervezésre, optimalizációra.
- A fejlesztést általában önszervező, kis csapatok végzik, megosztott felelősséggel, folytonos interakcióval, gyors visszajelzésekkel.
- Előnyei: jól alkalmazkodik a változtatásokhoz, hatékonyabbá teszi a fejlesztési folyamatot.
- Hátrányai: egyes tényezői nehezen megvalósíthatóak, különösen nagyobb szoftverek esetén a megvalósításhoz képzett fejlesztők kellenek, a dokumentáció hiánya megnehezíti a későbbi evolúciót.
Az agilis Kiáltvány
Azzal leplezzük le a szoftverfejlesztés jobb módjait, hogy csináljuk és segítünk másoknak is csinálni. Ezen a munkán keresztül következő értékekhez jutottunk el:
- Egyének és kölcsönhatások előnyben részesítése a folyamatok- és eszközökkel szemben.
- Működő szoftver előnyben részesítése az átfogó dokumentációval szemben.
- Ügyféllel való együttműködés előnyben részesítése a szerződéses megállapodással szemben.
- Változásokra adandó válasz előnyben részesítése egy terv követésével szemben.
Habár a jobb oldali elemekben is van érték, mi sokkal értékesebbnek tartjuk a baloldali elemeket.
Scrum módszer
Az agilis fejlesztés menedzselését az egyes változatok előállítása szempontjából közelítik meg, amelyhez a Scrum módszer ad egy általános modellt.
- Architekturális tervezés, amely megadja a szoftver magas szintű vázát.
- Futamok (sprint), amelyek az egyes változatokat állítják elő, és rögzített hosszúságúak (2-4 hét).
- Projektzárás, a szükséges dokumentáció előállítása.
Nincs projektmenedzser, de minden futamnak van felelőse (scrum master), akinek a személye futamonként változik.
Minden futam egy összetett folyamat megtervezett lépésekkel
- Feladatok felmérése (select), lefejlesztése (develop), áttekintése (review), kiértékelése (assess).
- A megvalósítandó funkciók a termékgazdával egyetértésben kerülnek kiválasztásra a teendők listájából (product backlog).
- Naponta rövidebb megbeszélések (stand-up meeting) a teljes csapat számára.
- Ciklus elején/végén hosszabb megbeszélések (sprint planning, sprint review), valamint visszatekintés (retrospective) a termékgazdával.
Csoportosítás
A szoftverfejlesztési modelleket 3 csoportba soroljuk.
- Terv-vezérelt (plan-driven): célja a rend fenntartása, a szoftver fejlesztése előzetes specifikáció és tervezés alapján történik, igyekszik garantálni a minőséget.
- Agilis: célja a változáshoz történő alkalmazkodás, az egyszerűség, így kevésbé garantálja a minőséget.
- Formális: garantálja a minőséget, az implementáció bizonyíthatóan helyes megoldását adja a specifikációnak.
A gyakorlatban a fejlesztőcsapat és a feladat befolyásolja leginkább a választott módszert, sokszor különböző módszerek vegyítve jelennek meg.