| Szemléletváltás a szoftverfejlesztésben |
|
|
|
Szemléletváltás a szoftverfejlesztésben
A szoftverfejleszt?i szakma idestova három évtizede keresi a megoldást a fejlesztési projektek sikerességének növelésére. Elképzelések és elméletek hiányáról igazán nem panaszkodhatunk. Próbálkoztunk strukturált módszertanokkal ( Structured Systems Development, IDEF, SSADM) és objektumorientált módszertanokkal (OMT, Objectory, Catalysis, OPEN, Unified Process). A statisztikák szerint mindezek a törekvések nem váltották be a hozzájuk f?zött reményeket.
Fejl?déstörténetünkben egy érdekes ciklikusság figyelhet? meg.
Kidolgoztunk egy szoftverfejlesztési módszertant, majd a sikertelenséget látván azt a következtetést vontuk le, hogy a fejlesztési folyamatunk nem elég pontos, részletes, jól szabályozott, tehát dolgozzunk ki egy precízebb módszertant.
Így jutottunk el a Unified Process-ig, amelynek a leírása több mint 1000 oldal, a folyamat betartatásához, adminisztrálásához, az eszközök üzemeltetéséhez 2-3 f? szükséges. Tehát szoftverfejlesztésre nem igen marad már id?nk.
Messzir?l nézve a történetet, úgy t?nik, mintha ezek a módszertanok gúzsba kötnék a projektet. Közelebbr?l nézve, azt állapíthatjuk meg, hogy egy alapvet? dolgot félreértettünk.
A szoftverfejlesztést a mérnöki tudományok közé soroltuk, közvetve feltételezve ezzel a tervezhet?séget, és szoros logikai következetességet. Egy precíz gépész és gyártástervez? valóban tud olyan tervet készíteni, amely alapján nagyon nagy biztonsággal a tervezett darabszámban, min?ségben és költséggel határid?re legyártható a termék. Csakhogy a szoftverfejlesztés nem gyártás! Mi mindig új terméket fejlesztünk! A mi alapvet? feladatunk az, hogy az üzletember fejében kipattanó üzleti gondolatot Java-ban, C#-ban valósítsuk meg.
Agilis projektvezetésAz agilis projektvezetés szakítás a klasszikus projektvezetési elvekkel. Alapvet? felismerése az, hogy a klasszikus projektvezetés módszerei prediktív problémáknál - pl. gyártás – használhatók jól, de új termék fejleszt esetében –ilyen a szoftverfejlesztés is – a tapasztalati folyamatirányítási modellt kell alkalmazni. A tapasztalati (empirikus) folyamatirányítás a váratlan esemény bekövetkezését várja. Az irányítás gyakori vizsgálattal és adaptációval valósul meg, vagyis a pontatlanul definiált tevékenységeinket és eredményeit megvi
zsgáljuk, és ennek ismeretében definiáljuk a következ? tevékenységeinket. Drámai szakítást jelent a klasszikus felf
ogással szemben a projekt meghatározó paramétereinek – id?, költség, min?ség, terjedelem - kezelése is.
A klasszikus f
elfogás szerint a projekttervezési szakasz célja éppen e négy paraméter meghatározása, majd a projekt „futtatása” és irányítása során a projektnek e korlátokon belüli megtartása. Új termék fejlesztésénél viszont a terjedelmet – a szoftver által biztosított funkcionalitást – el?re meghatározni lehetetlen. A terjedelem változhat! Az üzleti ötletek tipikusan nem Java-ban, C#-ban fogannak meg az üzletember fejében. A rendszerrel szembeni követelményeket sokkal pontosabban ismerjük a projekt végén, mint a projekt elején. Ha ez így van, márpedig így van, akkor olyan projektvezetési módszereket kell alkalmaznunk, amelyek adott keretekb?l – költség, id?, min?ség – a lehet? legnagyobb üzleti értéket produkálják a megrendel? számára.
ScrumA Scrum iteratív és inkrementális fejlesztést valósít meg, a tapasztalati folyamatirányítási elveket érvényesíti:
Az iterációk célja az úgynevezett Termék várólistában szerepl? elvárások egy részének megvalósítása. Egy meghatározott sprintbe kerül? elvárásokat az Termék tulajdonos és Scrum mester egyezteti, a Fejleszt?i csapat pedig elkötelezi magát a sprint célok megvalósítása mellett. A Termék tulajdonos felel?s a termék várólista tartalmáért, a prioritások beállításáért és a lista nyilvánosságáért. A Termék várólista sohasem teljes. Amíg a termék létezik, addig a termék várólista is létezik, b?vül.
A Termék várólista úgy változik, ahogy a projekt bels? és küls? környezete változik. A Termék tulajdonos és a Fejleszt?i csapat közötti együttm?ködésnek az egyik legfontosabb szabálya, hogy a Termék tulajdonos bármikor változtathat a Termék várólistán – azaz a rendszerrel szembeni követelményeken – de a Sprint várólistán nem. Így biztosítható a változások befogadása és a stabilitás közötti egyensúly megteremtése.
További információk: http://www.scrumalliance.org/ Lean szoftverfejlesztésA Lean szoftverfejlesztés a Lean Manufacturing, Lean Development
adaptálása a szoftverfejlesztésre. Mary és Tom Poppendick ültette át
más iparágak tapasztalatait a szoftverfejlesztés problémakörére. A Lean
(szikár) gondolkodás Taiichi Ohno-tól - a Toyota mérnökét?l - ered,
akinek az 1940-es évek végén azzal a problémával kellett megküzdenie,
hogyan gyárthatnának kis sorozatban, de mégis olcsón autót a sz?k és
alacsony vásárló erej? Japán piacra. Taiichi Ohno egy teljesen új
gondolkodásmódot vezetetett be, amelynek a középpontjában a veszteségek
kiküszöbölése állt. Onhno szerint mindaz veszteség, ami nem képez
hasznot az ügyfél számára.
· Részben elvégzett munka o A részben elvégzett munkákkal gyakran az történik, hogy elavulnak. o A részben elkészített szoftverrel az a legnagyobb baj, hogy nem tudjuk m?ködni fog-e. o A részben elvégzett fejlesztés leköti azokat az er?forrásokat, amelyeknek eredményt kellett volna termelni. o Mi történik, ha a rendszer sohasem kerül felhasználásra? o A részben elvégzett munka minimalizálása nemcsak a veszteség csökkentési stratégia, hanem kockázat csökkentési stratégia is. · Felesleges folyamatok o Elgondolkodott-e már valaha azon, hogy minden – jelenleg elvégzett - tevékenységre valóban szükség van? Például különböz? dokumentumok elkészítése. o A felesleges munka lelassítja a válaszid?t. o A felesleges – papírmunka – min?ségi problémákra utal. o Annak a dokumentumnak, amelyet senki nem olvas nincs értéke. o Jó tesztje a felesleges munkának, ha megnézzük, hogy ki vár az adott munka eredményére. · Felesleges funkciók o A dobozos szoftvere funkcionalitásának 60%-át egyáltalán nem vagy csak ritkán használják. o Az egyedi szoftverek – visszacsatolás, iteráció hiányában – nem azt és nem olyan funkcionalitást biztosítanak, mint amire a megrendel?nek szüksége van. o A fejleszt?k a „plusz” funkcionalitást gyakran el?nynek tartják. Pedig éppen fordítva, ez komoly veszteség. A felesleges funkcionalitást éppúgy, fordítani, integrálni, tesztelni, javítani kell mint a hasznosat. · Feladatvállalás o Az embereket párhuzamosan több projektben dolgoztatni veszteség! o A feladatok közötti váltás, különösen innovatív területen - veszteséget okoz. o Két, azonos er?forrásokon dolgozó projektet, egymás után a leghatékonyabb végrehajtani. · Várakozás o A szoftverfejlesztésben a legnagyobb veszteség bizonyos események bekövetkezésére várakozáskor jelentkezik. Várakozás a projekt kezdetére, a csapat összeállítására, a megrendel? válasz beérkezésére. o A várakozás megakadályozza a megrendel?t a befektetésének gyors megtérülésében. o A várakozás felesleges veszteséget termel a fejleszt?i oldalon is. · Mozgás o A szoftverfejlesztés kommunikáció intenzív tevékenység. Minél több mozgás szükséges az információcseréhez, annál nagyobb a veszteség. Az eXtreme Programming ezért javasolt egy helyen (szobában) foglalkoztatott fejleszt?i csapatot. · Hibák o
A hibák okozta veszteség annál nagyobb, minél súlyosabb a hatása és
minél kés?bb derül ki. A néhány percen belül felfedezett hibák okozta
veszteség elhanyagolható, de a több hét múl, az üzemel? rendszerben
jelentkez? hiba okozta veszteség óriási lehet. RendszertervezésAz agilis szemléletmód a rendszertervezés során a hatékonyságra való törekvés, a célnak megfelel? nyelv és eszközválaszban jelentkezik.Az agilis modellezéspéldául az éppen elegend?en jó modell elkészítését t?zi ki célul, a szakterület vezérelt tervezés pedig – a sok lehetséges modell közül - arra a modellre koncentrál, amely a legjobban hasznosítható a fejlesztés során. Agilis modellezés Az agilis modellezés egy kaordikus (chaordic: chaos and order), gyakorlati alapokra építkez? modellezési és dokumentálási módszertan. Az agilis modellezés alapelvek és értékek által meghatározott praktikák gy?jteménye, melyeket a szoftverfejleszt? a napi munkájában alkalmaz. Az agilis modellezés nem el?író fejlesztési folyamat, nem tartalmaz részletes fejlesztési utasításokat pl. egy modell elkésztéséhez, hanem arról beszél, hogyan lehetünk hatékony modellez?k. Az agilis modellezés során nem kevesebbet, hanem többet modellezünk, de más szemlélettel. Az agilis modell:
További információk: http://www.agilemodeling.com/ Szakterület vezérelt tervezésEric Evans a Szakterület vezérelt tervezés (Domain Driven Design) c. könyvében az alábbi, nagyon fontos megállapítást tette: A szoftverfejlesztés során kétfajta komplexitással kell megküzdenünk. A komplexitás egyik forrása a támogatandó szakterület maga. Ma már nincs olyan szoftverfejlesztés, ahol a támogatandó szakterületi probléma, ne lenne önmagában is bonyolult. Ezt a nehézséget fokozza, hogy az a technológia (.NET. J2EE), amivel a megoldást szállítjuk, szintén bonyolult. Eric következtetése: A kétfajta komplexitást ne keverjük össze! Szoftvereinket olyan architektúrában valósítsuk meg, amelyben a szakterület bonyolultságát egyszer? objektumorientált nyelvi eszközökkel (Java, C#) oldjuk meg, technikai problémák megoldását pedig toljuk át más rétegekbe. Logikusnak hangzik, de még mindig nagyon sokszor nem ezt tesszük! A 4GL eszközök helytelen használata, tipikusan azt a fejlesztési attit?döt segítették el?, ahol az üzleti logika a felhasználói felület eseménykezel? m?veleteibe van elkenve. Vagy gondoljunk az üzleti logikának a tárol eljárásokkal való implementálására, ahol a perzisztencia technológiai problémáját mossuk össze az üzleti logikával.Az a tény, hogy a szakterületi logikát tisztán objektumorientált nyelvi eszközökkel valósítjuk meg, egy további el?nyt nyújt. Nevezetesen érdemes a szakterület fogalmairól objektumorientált modellt – úgynevezett fogalmi modellt - készíteni. Érdemes, hiszen a fogalmi modell és a Java-s vagy C# implementáció között nincs tartalmi, csak formai eltérés. Az objektumorientált fogalmi modell megjelenésével (kidolgozásával) egyúttal egy egyértelm? kommunikációs nyelvhez is hozzájutottunk. A szakterület vezérelt tervezés során a fogalmi modell képezi a megrendel? és a fejleszt? közös nyelvét. Ez óriási el?relépés két szempontból is. A klasszikus szabadszöveges fogalom meghatározáshoz képest az UML modell sokkal pontosabb, konzisztensebb. Ugyanakkor arról sem szabad megfeledkezni, hogy ezt a modellt a szoftverfejleszt? is érti, pontosan tudja, hogyan fogja megvalósítani.
A szakterületi modellre fókuszáló követelményspecifikálásnak van
egy – nem elhanyagolható pozitív – következménye. A hagyományos
követelményspecifikálás a szakterületi logikával szemben támasztott
követelményeket tipikusan a felhasználói felület kontextusában
fogalmazza meg. Azaz indirekt módon. Szakterület vezérelt tervezés
során a szoftver rendszer legértékesebb és legid?állóbb részével
szembeni követelmények közvetlen módon jelennek meg a fogalmi
modellben. Ez segíti mind a megrendel?t, mind pedig a fejleszt?t a
lényegre koncentrálni. A szakterület vezérelt tervezés természetesen
nem jelenti azt, hogy a ne készíthetnénk használati eset, vagy
tervezési modell, pusztán a hangsúlyok helyes megtalálásában segít. FejlesztésAz agilis szoftverfejlesztés új szemléletének következményei legkorábban a fejlesztési technikákban jelentkeztek. Az összes agilis szoftver fejlesztési módszertan szakít a „szoftver gyártás” metaforájával és az önszabályozó csapatmunkára, egyedi szakértelemre, együttm?ködésre és hatékony kommunikációra helyezi a hangsúlyt.eXtreme ProgrammingAz eXtreme Programming egy teljes kör? – agilis projektvezetést, rendszertervezést, fejlesztést és tesztelést magában foglaló – módszertan, de a mai gyakorlatban a korábban említett módszertanokkal együttesen szokták alkalmazni. Az eXtreme Programming nemcsak a nevében radikális, hanem a módszereiben is. Különlegessége éppen abban rejlik, hogy markáns, de egymásra épül?, egymást er?sít? szabályokat fogalmaz meg:
? olyan személy, aki maga is potenciális rendszerfelhasználó, valamint képvisel?je más rendszerfelhasználóknak. Részt vesz a projekttervezésben, a felhasználói történetek (rendszerrel szembeni elvárások) definiálásában, valamint az elfogadási tesztek kidolgozásában. Az ügyfél az üzleti preferenciáit az elvárások prioritásának meghatározásával juttatja érvényre. Minden ellenkez? híresztelés ellenére az XP-s projektben is van rendszertervezés, de nincs hosszadalmas el?zetes tervezést, hanem a napi munkába épült be. Különlegessége az eXtreme Programming-nak azok a technikák, amelyek a csapaton belüli tudás gyors megosztását segítik el?. A páros programozás során egy feladaton két fejleszt? dolgozik, óránként cserélve a szerepeket. Az XP-s csapat a forráskódot közösen birtokolja, azaz bárki módosíthat a forráskód bármelyik részén. Ily módon nincsenek folyamatosan sz?k keresztmetszetet jelent? kizárólagos kód birtokosok. A csapat elkötelezettség vállalása és a tudás nivellálása szempontjából az sem elhanyagolható szempont, hogy a fejleszt?k jelentkeznek a feladatokra.
Az iteratív (id? alapú elszámolást feltételez?) fejlesztés egyik kényes pontja a megrendel?i bizalom megszerzése. Az XP a folyamatos integráció révén folyamatosan m?köd? – fejl?d? – szoftvert eredményez, azaz a megrendel?nek lehet?sége van bármikor kipróbálni a szoftvert, meggy?z?dni arról, hogy folyamatosan „értéket kap a pénzéért”. A folyamatos integráció egy másik következménye hogy a fejleszt?k rendkívül rövid id?n belül visszajelzést kapnak arról, ha az alkalmazás összeállítása sikertelen volt. A gyors visszajelzés következtében a javítási id? is lényegesen lerövidül. További információk: http://www.extremeprogramming.org/ Teszt vezérelt fejlesztésA teszt vezérelt fejlesztés valójában az eXtreme Programming-ban jelent meg el?ször, de mára szinte önálló „tudományággá” n?tte ki magát. A teszt vezérelt fejlesztés arra a felismerésre épít, hogy a teszt nem más, mint példa adatokkal ellátott specifikáció. Ha specifikáció, akkor a tesztnek kell el?bb meglennie, mint a tesztet kielégít? implementációnak. Ha a teszt specifikáció, akkor egyben dokumentáció is. Ha a tesztek futtatását automatizáljuk, akkor futtatható, a forráskóddal együtt fejl?d? dokumentációnk van!A teszt vezérelt fejlesztési munkastílus tipikusan két résztvev?t érint. Az ügyfél et és a fejleszt?t. A rendszerrel szembeni elvárásokat az ügyfél – végs? soron – elfogadási tesztek formájában fogalmazza meg. Egy iterációba, csak olyan elvárások kerülhetnek, amelyekhez vannak elfogadási tesztek. Az elfogadási tesztek kidolgozása az ügyfél feladata és joga. Az automatizált elfogadási tesztek teremtik meg a megrendel? és fejleszt? közötti korrekt együttm?ködés alapját, hiszen a követelményspecifikációnak ez az a formája, amely lehet?ségekhez képest a legegzaktabb. Ha fejleszt? csapat olyan szoftver készít, amelyen az elfogadási tesztek lefutnak, akkor jó munkát végzett. A teszt specifikálásnak a megrendel?i oldalra való delegálásával azt is elérjük, hogy a megrendel? sokkal inkább tisztában lesz a kért funkcionalitás összetettségével, továbbá segít neki a saját elvárásait pontosan megfogalmazni. A fejleszt? a forráskódot egy három lépésb?l álló, rövid ciklusban b?víti. Ír egy új elvárást megfogalmazó unit, vagy integrációs tesztet. Majd megírja azt az implementációt, amely a teszt sikeres lefutását eredményezi.
Végül változatlan elvárások – azaz tesztek – mellett úgy módosítja a kódot (refactoring), hogy az jobban strukturált legyen. Ezzel a munkastílussal, egyrészt az implementációval folyamatosan együtt fejl?d? automatizált teszt környezetet teremtünk magunk számára, másrészt a kód folyamatos átstrukturálása révén a megoldásunk, lépésr?l lépésre egy jobb architektúra irányába fejl?dik. A teszt vezérelt programozási stílusnak óriási el?nye, hogy a teljes kör? és automatizált teszt környezetnek köszönhet?en a fejleszt? biztonságban érzi magát, mer változtatni a forráskódon. Mer változtatni, hiszen ha megfeledkezett egy összefüggésr?l, a teszt csomag következ? futtatásakor – legfeljebb 1-2 órán belül – visszajelzést kap a hibáról. A hiba kijavításának költsége ily módon lényegesen kisebb, mint a klasszikus, utólagos tesztelés esetében.
További információk:
http://www.testdriven.com/ Zsuffa Zsolt elnök |
Útvonal |



A szoftverfejleszt?i szakma idestova három évtizede keresi a megoldást a fejlesztési projektek sikerességének növelésére. Elképzelések és elméletek hiányáról igazán nem panaszkodhatunk. Próbálkoztunk strukturált módszertanokkal ( Structured Systems Development, IDEF, SSADM) és objektumorientált módszertanokkal (OMT, Objectory, Catalysis, OPEN, Unified Process). A statisztikák szerint mindezek a törekvések nem váltották be a hozzájuk f?zött reményeket.
Fejl?déstörténetünkben egy érdekes ciklikusság figyelhet? meg.
Kidolgoztunk egy szoftverfejlesztési módszertant, majd a sikertelenséget látván azt a következtetést vontuk le, hogy a fejlesztési folyamatunk nem elég pontos, részletes, jól szabályozott, tehát dolgozzunk ki egy precízebb módszertant.
Így jutottunk el a Unified Process-ig, amelynek a leírása több mint 1000 oldal, a folyamat betartatásához, adminisztrálásához, az eszközök üzemeltetéséhez 2-3 f? szükséges. Tehát szoftverfejlesztésre nem igen marad már id?nk.
Messzir?l nézve a történetet, úgy t?nik, mintha ezek a módszertanok gúzsba kötnék a projektet. Közelebbr?l nézve, azt állapíthatjuk meg, hogy egy alapvet? dolgot félreértettünk.
A szoftverfejlesztést a mérnöki tudományok közé soroltuk, közvetve feltételezve ezzel a tervezhet?séget, és szoros logikai következetességet. Egy precíz gépész és gyártástervez? valóban tud olyan tervet készíteni, amely alapján nagyon nagy biztonsággal a tervezett darabszámban, min?ségben és költséggel határid?re legyártható a termék. Csakhogy a szoftverfejlesztés nem gyártás! Mi mindig új terméket fejlesztünk! A mi alapvet? feladatunk az, hogy az üzletember fejében kipattanó üzleti gondolatot Java-ban, C#-ban valósítsuk meg.
Ez volt 2001-ben. Mára az agilis szoftverfejlesztés mainstream szemléletté vált, módszerei átfogják a projektvezetést?l, a rendszertervezésen keresztül, a fejlesztésig terjed? hatalmas spektrumot.
zsgáljuk, és ennek ismeretében definiáljuk a következ? tevékenységeinket. Drámai szakítást jelent a klasszikus felf
ogással szemben a projekt meghatározó paramétereinek – id?, költség, min?ség, terjedelem - kezelése is.
A klasszikus f
elfogás szerint a projekttervezési szakasz célja éppen e négy paraméter meghatározása, majd a projekt „futtatása” és irányítása során a projektnek e korlátokon belüli megtartása. Új termék fejlesztésénél viszont a terjedelmet – a szoftver által biztosított funkcionalitást – el?re meghatározni lehetetlen. A terjedelem változhat! Az üzleti ötletek tipikusan nem Java-ban, C#-ban fogannak meg az üzletember fejében. A rendszerrel szembeni követelményeket sokkal pontosabban ismerjük a projekt végén, mint a projekt elején. Ha ez így van, márpedig így van, akkor olyan projektvezetési módszereket kell alkalmaznunk, amelyek adott keretekb?l – költség, id?, min?ség – a lehet? legnagyobb üzleti értéket produkálják a megrendel? számára.

A Termék várólista úgy változik, ahogy a projekt bels? és küls? környezete változik. A Termék tulajdonos és a Fejleszt?i csapat közötti együttm?ködésnek az egyik legfontosabb szabálya, hogy a Termék tulajdonos bármikor változtathat a Termék várólistán – azaz a rendszerrel szembeni követelményeken – de a Sprint várólistán nem. Így biztosítható a változások befogadása és a stabilitás közötti egyensúly megteremtése.

? olyan személy, aki maga is potenciális rendszerfelhasználó, valamint képvisel?je más rendszerfelhasználóknak. Részt vesz a projekttervezésben, a felhasználói történetek (rendszerrel szembeni elvárások) definiálásában, valamint az elfogadási tesztek kidolgozásában. Az ügyfél az üzleti preferenciáit az elvárások prioritásának meghatározásával juttatja érvényre. Minden ellenkez? híresztelés ellenére az XP-s projektben is van rendszertervezés, de nincs hosszadalmas el?zetes tervezést, hanem a napi munkába épült be. Különlegessége az eXtreme Programming-nak azok a technikák, amelyek a csapaton belüli tudás gyors megosztását segítik el?. A páros programozás során egy feladaton két fejleszt? dolgozik, óránként cserélve a szerepeket. Az XP-s csapat a forráskódot közösen birtokolja, azaz bárki módosíthat a forráskód bármelyik részén. Ily módon nincsenek folyamatosan sz?k keresztmetszetet jelent? kizárólagos kód birtokosok. A csapat elkötelezettség vállalása és a tudás nivellálása szempontjából az sem elhanyagolható szempont, hogy a fejleszt?k jelentkeznek a feladatokra.
Végül változatlan elvárások – azaz tesztek – mellett úgy módosítja a kódot (refactoring), hogy az jobban strukturált legyen. Ezzel a munkastílussal, egyrészt az implementációval folyamatosan együtt fejl?d? automatizált teszt környezetet teremtünk magunk számára, másrészt a kód folyamatos átstrukturálása révén a megoldásunk, lépésr?l lépésre egy jobb architektúra irányába fejl?dik. A teszt vezérelt programozási stílusnak óriási el?nye, hogy a teljes kör? és automatizált teszt környezetnek köszönhet?en a fejleszt? biztonságban érzi magát, mer változtatni a forráskódon. Mer változtatni, hiszen ha megfeledkezett egy összefüggésr?l, a teszt csomag következ? futtatásakor – legfeljebb 1-2 órán belül – visszajelzést kap a hibáról. A hiba kijavításának költsége ily módon lényegesen kisebb, mint a klasszikus, utólagos tesztelés esetében.
További információk:
Szakmai anyagok