Gyakorlati alapok II.

A szoftverfejlesztés

 

Szoftverfejlesztési modellek

 

Az alábbi fejezet Sallay András informatikatanár oktatási anyagára támaszkodik (www.szit.hu)

 

Bevezetés

Vízesés-modell

Evolúciós modell

Inkrementális modell

Spirális modell

Iteratív modell

V-modell

Tisztaszoba

RUP

RAD

Extrém programozás

Scrum

Kanban

Lean-módszer

TDD

Agilis szoftverfejlesztés

 

Bevezetés

 

A kidolgozás  azt jelenti, amit: a programterv alapján lekódoljuk a kódfeladatokat (implementálás), ezután pedig teszteljük a megírt kódsorokat. Néhány ilyen jellegű, JUnit nevű keretrendszerrel készült tesztet olvashatunk a Skálakereső teljes forráskódja (Java) című projektemben, a HangkombinacioTeszt.java című résznél.

 

Az ügy itt kezd bonyolulttá válni, mert a tesztelés olyan fontossá vált, hogy már régesrég önálló szakmát alkot. Sőt, amit manapság teszünk, az sokszor már nem az implementálás-tesztelés megszokott folyamata, hanem pontosan a fordítottja: először tesztelünk, majd ehhez írjuk meg a kódot. Ezt, a 2000-es évektől már igen elterjedt kódfejlesztési módszert nevezzük TDD-nek (Test-Driven Development - Tesztvezérelt fejlesztés). De ne rohanjunk ennyire előre, mert a TDD ismertetése előtt még meg kell ismernünk néhány további szoftverfejlesztési modellt is. Némelyik már idejétmúlt, de egymás után, a fejlődés folyamatában látni őket mindenképpen hasznos tanulság.

 

Vízesés-modell

 

A legrégebbi fejlesztési modell, fázismodellnek is hívják. Fő jellegzetessége, hogy az egyes fázisokra nincs visszatérés, ezért az a vízesésre (vagy bármi lejtős tereptárgyra) emlékeztet:

 

www.informatika-programozas.hu

Forrás - Source: www.szit.hu

 

Az egész fejlesztés voltaképpen egyetlen szekvenciális folyamat. Ez persze a gyakorlatban nem működik, mert egy adott ponthoz való kényszerű visszatérés annál költségesebb, minél nagyobbat kell visszalépnünk. Hibái és elavultsága miatt ritkán használjuk. Elsőként Winston W. Royce (1929-1995) írta le a modellt, aki köztudottan a szoftverfejlesztés egyik úttörője volt a California Institute of Technology nevű kutatóintézetnél.

 

Előnyei:

Hátrányai:

Evolúciós modell


Készítünk egy kezdeti, csak alapokban kidolgozott megvalósítást (prototípus), ezt véleményeztetjük a felhasználóval. Ezután igényei szerint finomítunk a prototípuson, amelyet újfent véleményeztetünk és így fog ez alkotni ciklikus folyamatot:

 

www.informatika-programozas.hu

 

Forrás - Source: www.szit.hu

 

Előnyei:

Hátrányai:

Inkrementális modell


Pontosan a vízesés-, és az evolúciós modell között helyezkedik el.

 

Lépései:

  1. elsőként egy vázlatos követelményrendszert állítunk össze,

  2. osztályozzuk a szolgáltatásokat fontosságuk szerint,

  3. a fontosakat elkezdjük megvalósítani,

  4. alváltozatokra osztva a fejlesztést, több változatot hozunk létre,

  5. az egyes változatokat is több lépésben hozzuk létre.

www.informatika-programozas.hu

Forrás - Source: www.szit.hu

 

Spirális modell


A modellt először 1986-ban Barry W. Boehm (1935) szoftvermérnök javasolta.

Jellemzői:

www.informatika-programozas.hu

 

Forrás - Source: www.szit.hu

 

Iteratív modell


Iteratív, más néven folyamatiterációs modellnek is hívják.

 

Jellemzői:

www.informatika-programozas.hu

 

Forrás - Source: www.testingexcellence.com

 

V-modell


A korai fejlesztések egyike, a német védelmi minisztérium (Bundesministerium der Verteidigung) dolgozta ki biztonsági okokból. Nemcsak modell, hanem már módszertan is, ezért a biztonságkritikus számítógépek fejlesztésénél terjedt el. A szoftverfejlesztési sorrend nem szigorúan vett.

 

www.informatika-programozas.hu

 

Forrás - Source: www.szit.hu

 

Ennél a pontnál kell tisztáznunk a validálás és a verifikálás fogalmait, bár nyilvánvalóan funkcionálisan jóval hamarabb is előfordultak.

 

 

 

Tisztaszoba


A tisztaszoba (cleanroom) magas színvonalú, hitelesíthető szoftverek fejlesztésénél használt eljárás. Először Harlan Mills (1919-1996) számítógéptudós használta az IBM kutatórészlegeiben.

 

Jellemzői:

www.informatika-programozas.hu

Forrás - Source: slideplayer.com

 

RUP


A Rational Unified Process szavak rövidítése, jelentése nagyjából ésszerűen (vagy arányosan) egyesített folyamat.

A Rational Software Corporation nevű cég fejlesztette ki, amit később az IBM felvásárolt. Egy agilis szoftverfejlesztési megközelítés, amely igyekszik több folyamatmodellt is ötvözni. Fontosságára jellemző, hogy Angster Erzsébet - Objektumorientált tervezés és programozás, JAVA című 2 kötetes munkájában csakis erre a modellre hivatkozik:

 

www.informatika-programozas.hu
Forrás - Source: www.szit.hu

 

Jellemzői:

A következő listában a RUP rendszerfejlesztési fázisait látjuk:

Minden új fázis kezdete egy úgynevezett mérföldkő.

 

A modellnek más variációi, verziói is létrejöttek:

RAD


A RAD a Rapid Application Development szavak első betűi, gyors alkalmazásfejlesztésnek fordítható. James Martin (1933-2013) dolgozta ki az 1980-as években.

 

www.informatika-programozas.hu

Forrás - Source: www.szit.hu

 

Jellemzői:

Hátrányai:

Extrém programozás


A szoftverfejlesztés során a felhasználókkal folyamatos egyeztetés folyik, így a fejlesztők nem találkoznak hirtelen jött ötletekkel, módosításokkal, a félreértések ilyen módon minimalizálódnak.

www.informatika-programozas.hu
Forrás - Source: agilelucero.com

 

Az előírt 4 tevékenység:

Jellemző technikák:

A projekthez az egész fejlesztői gárda együtt dolgozik. A fejlesztő csapattal együtt dolgozik az ügyfél egy képviselője. A csapat az üzleti érték előállításán dolgozik. Folyamatosan kisebb egységeket adnak ki, amelyek teljesítik az ügyfél elvárásait.

 

Scrum


A scrum egy projektmenedzsment módszertan, az agilis szoftverfejlesztés egyik megvalósítása. A scrum-ban egy szoftver elkészítését körülbelül 2 hetes fázisokra osztjuk. Ezeket sprint-eknek nevezzük. Minden sprint elején van egy értekezlet és minden sprint végén a fejlesztők megbeszélik, mi az, amit sikerült megvalósítani és mi az, amit nem, valamint mely teendők vannak még hátra.

A scrum-módszerben minden reggel egy rövid, 15 perces megbeszéléssel kezdődik, amelyben a fejlesztők megbeszélik, hogy ki milyen munkát végzett el, mi az, ami nem sikerült és mit tervez.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Ezek a reggeli megbeszélések fontosak, hogy állva történjenek, mert másként elmehet rá az idő.

 

www.informatika-programozas.hu

Forrás - Source: www.szit.hu

 

A scrum-nak mindig van egy mestere, aki vezeti a megbeszéléseket. Ezek alkalmával a résztvevőknek a következő kérdésekre kell válaszolniuk:

Disznók:

Csirkék:

Kanban


Egy folyamatosan frissített mágneses, parafa vagy egyéb tábla, amelyen oszlopokra bontva megtaláljuk a tennivalókat, a folyamatban lévő munkákat és a már kész munkákat. Természetesen az egyes részek még több oszlopra bonthatók.

 

www.informatika-programozas.hu

www.informatika-programozas.hu

www.informatika-programozas.hu

www.informatika-programozas.hu

www.informatika-programozas.hu

Forrás - Source: www.szit.hu

 

A táblát folyamatosan frissíteni kell a teendők (ToDo), folyamatban lévő (In progress) és kész dolgok (Done) listájával. Fontos, hogy a folyamatban lévő dolgok között háromnál több dolog nem szerepelhet!

A felülről számított 3. táblában az In progress és Testing után lévő szám azt jelenti, hogy hány dolog lehet maximálisan folyamatban.
 

Lean-módszer


Taiichi Ohno (1912-1990) ötletei után vették át a szoftverfejlesztők, aki mérnökként a Toyota Termelési Rendszer (TPS) atyja volt. A Lean-menedzsment a következő általános megállapításokat teszi az optimális munkavégzésre vonatkozóan:

 

www.informatika-programozas.hu

 

Forrás - Source: www.szit.hu

 

www.informatika-programozas.hu

 

Forrás - Source: www.szit.hu

 

A 5W, 5 kérdést jelent, amelyet mindig úgy kezdünk „Miért …”

Például:

Taiichi Ohno ötletei alapján a szoftverfejlesztésben a következőket vesszük figyelembe:

 

www.informatika-programozas.hu

 

Forrás - Source: www.szit.hu

 

TDD

 

A 2000-es évektől már igen elterjedt kódfejlesztési módszer  (TDD - Test-Driven Development - Tesztvezérelt fejlesztés).

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A TDD lényege, hogy nem a funkció kódírásával kezdjük, hanem a funkciót tesztelő kód megírásával.

 

Szokatlan megközelítés, de természetesen van mélyebb értelme, hiszen a teszt megfogalmazása, implementálása során fedezhetjük fel a funkció elvárt működésének sajátosságait. Ezáltal a tesztek nemcsak tesztkörnyezetként, hanem specifikációként, dokumentációként is szolgálhatnak.

 

Ugyanakkor a tesztkód implementálása során határozhatjuk meg, választhatjuk szét egymástól a feladatfunkciókat. Ezáltal lehetőségünk nyílik arra, hogy kisebb lépésekben haladjunk, amely a kódírásban egyértelmű minőségjavulást eredményez. Egyes ajánlások már 10-20 kódsor után javasolják az automata tesztek lefuttatását.

 

A tesztmegírás után az új tesztet a többivel együtt futtatjuk le, ekkor azt vizsgáljuk, hogy új tesztünk sikeres lesz-e vagy elbukik. Ha sikeres, az voltaképpen rossz, hiszen még le sem kódoltuk a funkciót, ennek ellenére jó eredményt kaptunk.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

Csakis abban az esetben kezdhetünk hozzá az új kód megírásához, ha az új tesztkód a vártak szerint elbukott. Ezután a kódolás már egyértelműen célorientált: pontosan annyi kódot kell implementálnunk, hogy a tesztkód sikeressé váljon.

 

Ha kódfuttatásunk mindezek után sikeres lesz, majdhogynem bizonyosak lehetünk abban, hogy az új funkció a lehető legkorrektebb feltételek között működik. Ezután az új funkciót kényelmesen és biztonságosan beilleszthetjük a konkrét kódkörnyezetbe a refaktorálás segítségével.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A szakirodalom ezt az összetett, előzetes kódautomatikával támogatott folyamatot Red - Green - Refactor néven említi.

 

www.informatika-programozas.hu

 

Forrás - Source: www.szit.hu

 

A TDD-módszer használata legtöbbször nem előírás a szoftvercégen belül. Néhol a fejlesztőre van bízva esetleges használata, máshol viszont projektszintű követelmény, ám az bizonyos, hogy a megírt kódot mindenféleképpen tesztelni kell, sőt, komolyabb projektek esetén a teszteredményeket dokumentálni is szükséges.

 

Agilis szoftverfejlesztés

 

A latin eredetű agilis szó jelentése szerint: életrevaló, serény, tevékeny, mozgékony, ügyes, hatékony.

 

A megrendelő legtöbbször maga sem tudja, hogy mit akar. Az igényei folyamatosan változnak. Mindezek miatt egy rugalmas, gyorsan reagáló szoftverfejlesztési módszerre van szükség.

Agilis módszertanok:

Az agilis kiáltvány (idézet):