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

  1. specifikáció
  2. tervezés és implementáció
  3. verifikáció és validáció
  4. 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.

  1. Architekturális tervezés, amely megadja a szoftver magas szintű vázát.
  2. Futamok (sprint), amelyek az egyes változatokat állítják elő, és rögzített hosszúságúak (2-4 hét).
  3. 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.

Források