055.2 Lecke 1
Tanúsítvány: |
Open Source Essentials |
---|---|
Verzió: |
1.0 |
Témakör: |
055 Projektmenedzsment |
Fejezet: |
055.2 Termékmenedzsment / Release menedzsment |
Lecke: |
1/1 |
Bevezetés
A legtöbb szoftver idővel sokféleképpen fejlődik. Valójában ez az egyik csodálatos dolog a szoftverekben: könnyen változtathatók, és csak egy hálózaton keresztül történő átvitelre van szükség ahhoz, hogy mindenki, aki használja a terméket, frissíteni tudja. A fejlesztők tehát új funkciókat adnak hozzá, kijavítják a hibákat és a biztonsági hiányosságokat, új hardverekre portolják a szoftvert, és interfészeket adnak a népszerű programokhoz és szolgáltatásokhoz. Ahogy a szoftver változik, új verziók vagy revíziók (revision) jelennek meg.
Ez a lecke a szoftverek tervezésének és módosításának logisztikájával, a több verzióval zsonglőrködő csapatokkal, a verziók elnevezésének konvencióival és a fejlesztés egyéb szervezési aspektusaival foglalkozik, amelyek a projektmenedzsment tevékenységének egy részhalmazát képezik. A kifejezetten a kiadások (release) időzítésére, elnevezésére és ellenőrzésére vonatkozó logisztikát nevezzük release menedzsmentnek.
A releasek jellemzői
A kiadások a stabilitás, a visszafelé kompatibilitás (backward compatibility) és a támogatás (support) szempontjából eltérőek. A következő szakaszokban megvizsgáljuk az egyes fogalmakat.
Stabil és instabil releasek
A felhasználók által leginkább elvárt egyik tulajdonság szoftver stabilitása. Az első kérdés, amit sokan feltesznek egy új release (kiadás) hallatán, az, hogy “Mennyire stabil?”. Más szóval, megbízhatóan fog-e működni, vagy összeomlik, elrontja az adatokat, vagy hibás eredményeket produkál?
A stabilitás egy spektrumon mérhető, és sokan szívesen használnak egy szoftvert akkor is, ha még vannak benne hibák. A fejlesztőcsapatok azonban hajlamosak a dolgokat egyszerűen kezelni, és binárisan beszélnek stabil (stable) és nem stabil (unstable) kiadásokról.
A stabilitás egyszerre utal a szoftver hibáira másrészt annak valószínűségére, hogy a kívülállók számára látható módon megváltozik. A fejlesztők instabilnak tekinthetik egy szoftverkönyvtár egyik kiadását, mert például megváltoztatták a programozók által hívott funkciókat (vagyis mert a programozóknak a következő releaseig esetleg újra kell írniuk a szoftverüket). A felhasználó szempontjából azért is lehet instabil egy szoftver, mert a fejlesztők eltávolítottak egy funkciót.
Van valami oka annak, hogy kiadnak egy instabil verziót? Igen: értékesek, mert a felhasználók a projekt korai szakaszában kipróbálhatják az új funkciókat, és tesztelhetik hibakeresés céljából.
Azért, hogy a legfontosabb ügyfelek kipróbálhassák, a legtöbb projekt releaseli a szoftver nagyon korai változatait; ezeket nevezik alfa releasenek. Ezeket senki sem használhatja valódi munkára — csak tesztelésre szolgálnak. Valójában a tesztelőknek olyan számítógépeken kell futtatniuk őket, amelyeken nem végeznek fontos munkát, mert az ezekben a releasekben található hibák ténylegesen károsíthatják a számítógépen tárolt adatokat.
Amikor a szoftver már közel van ahhoz, hogy stabilnak minősüljön, a projekt általában kiad egy újabb tesztverziót, az úgynevezett béta releaset. Ezeket továbbra is csak tesztelni lehet, nem szabad őket éles (production) környezetben használni.
Mind az alfa-, mind a béta-kiadások esetében a fejlesztők rendelkezésére áll egy folyamat a hibák bejelentésére és a hibák kijavítása érdekében tett lépések nyomon követésére.
Egyes projektek tartalmaznak még egy szakaszt a béta és a stabil release között, amikor a fejlesztők már minden hibát kijavítottak, és úgy gondolják, hogy a termék kész. Ez a verzió a release candidate (kiadásra jelölt), amit megmutatnak a kulcsfontosságú ügyfeleknek vagy érdekelteknek, hogy megtervezhessék, hogyan használják majd az új funkciókat.
Végül, néhány projekt olyan funkciókat is beépít, amelyek nem teljesen stabilak, mert fontos felhasználók kérték őket. A fejlesztők célja, hogy a felhasználók kipróbálják ezeket a funkciókat, és elmondják, hogy tetszenek-e nekik, mielőtt a fejlesztők véglegesítenék az interfészeket, és energiát fektetnének a funkciók stabilizálására.
Backward Compatibility
A legtöbb projekt a backward compatibility-re (visszafelé kompatibilitás) törekszik, ami azt jelenti, hogy nem próbálja eltávolítani a régebbi verziókban meglévő funkciókat vagy képességeket. A kompatibilitás több szinten is létezhet. Ha például a fejlesztők fenntartják a backward compatibilityt az alkalmazásprogramozási interfésszel (API) kapcsolatban, akkor azt ígérik, hogy a régi forráskód továbbra is működhet, de lehet, hogy újra le kell fordítani. Ha a hardvergyártók vagy az operációs rendszer fejlesztői fenntartják a visszafelé kompatibilitást az alkalmazás bináris interfészére (ABI) vonatkozóan, akkor azt ígérik, hogy ezen felül a régi futtatható fájlok a hardver új verzióin is futtathatók.
Később megnézzük, hogyan kezelik a projektek a backward compatibility hiányát, amikor úgy döntenek, hogy a régi interfész valóban nem működik az új funkciókkal vagy környezetekkel, amelyeket támogatniuk kell.
Támogatás és End of Life (EOL)
A szoftver ideális esetben egyre jobb és jobb lesz, ahogy a fejlesztők felfedezik és kijavítják a problémákat. Idővel azonban a szoftver környezetében bekövetkező változások miatt a funkciók nem működnek, valamint olyan új hibák is felfedezésre kerülnek, amelyek korábban rejtve maradtak.
Az új verziók gyakran kombinálják a biztonsági és hibajavításokat új funkciókkal. Lehet, hogy nekünk ezek az új funkciók nem kellenek (sőt, lehet, hogy jobban tetszik valamelyik régi, amit a fejlesztők eltávolítottak, hogy helyet csináljanak az újaknak), de az emberek általában azért frissítenek az új verzióra, hogy megkapják a biztonsági javításokat, amelyek megvédik őket a rosszindulatú támadásoktól.
Vannak, akik a szoftverek régi verzióit használják, és nem hajlandóak frissíteni. Ennek oka általában az, hogy az új verzió tönkretesz valamit, ami eddig működött náluk. Amikor a vállalatok pénzt kérnek a frissítésekért, néhány ügyfél nem hajlandó frissíteni, mert nem akarja kifizetni a plusz pénzt, de a nyílt forráskódú szoftvereknél ritkán kell fizetni a frissítésekért.
A fejlesztők a régi verziók felhasználói igényeket úgy elégítik ki, hogy a régi verziókban lévő hibákat javítják, anélkül, hogy a szoftvert tönkretevő funkciókat adnának hozzá. Természetesen a fejlesztők ezt nem tehetik meg örökké, mert ez időt és energiát von el az új munkától. Eljön az idő, amikor megtagadják a régi verzió javítását, és azt mondják a felhasználóknak, hogy vagy frissítsenek, vagy készítsenek saját javításokat.
A hibák és biztonsági hiányosságok kijavítását a szoftver supportjának (támogatás) nevezik. Ez különbözik a helpdeskek és más, a felhasználókat a szoftver megértésében segítő személyek által nyújtott támogatástól. A release menedzsment szempontjából a supported release az, amikor a fejlesztők megígérik, hogy kijavítják a hibákat, míg az unsopported release az, amikor nem teszik meg.
Megjegyzendő, hogy a “support” fogalma leginkább a vállalatok vagy nagy szervezetek által készített szoftverekre vonatkozik. A kisebb nyílt forráskódú projektek, amelyek nagymértékben függnek az önkéntesektől, gyakran csak azt ígérik, hogy a lehető legtöbbet teszik a hibák kijavításáért és az új verziók kiadásáért. Nem látják szükségét annak, hogy a régi verziókat javítsák. Mivel a kód nyílt forráskódú, azok a felhasználók, akik nem akarnak frissíteni, fizethetnek valakinek a régi verzió javításáért.
Ha van support, a fejlesztők közzétesznek egy ütemtervet, amelyben jelzik, hogy meddig támogatják az egyes verziókat. A dátumot, amikor a támogatás megszűnik, a szoftver életciklusának végének (end of life — EOL) nevezik. A felhasználók az EOL-ig megtarthatják a régi verziót, és számíthatnak a hibák kijavítására, de az EOL után frissíteniük vagy kockáztatniuk kell.
A nagyobb projektek, mint például a GNU/Linux Debian disztribúciója, hosszú távú támogatású (long term support — LTS) verziókat kínálnak. Ez egyszerűen azt jelenti, hogy a fejlesztők bizonyos számú évig folyamatosan javítják a hibákat. Azok az ügyfelek, akik nagyra értékelik a stabilitást, valószínűleg félnek telepíteni a sok változtatást tartalmazó szoftverek verzióit, ha a változtatások miatt olyan folyamatok sérülnek, amelyekre az ügyfelek támaszkodnak. Az ilyen ügyfelek, különösen a nagy intézmények, szeretik az LTS verziók biztonságát.
Szoftver verziózás: Major, minor, és patchek
Láttuk, hogy a verziókezelés bonyolult: egyes verziók hibákat javítanak, míg mások új funkciókat adnak hozzá, és a verziók stabilitása is eltérő lehet. A fejlesztők címkékkel próbálják jelezni, hogy az egyes verziókban mekkora változás történt a szoftverben. A szinte minden projekt által elfogadott konvenciókat a verziók címkézésére szemantikus verziókezelésnek (semantic versioning) nevezik.
Vegyük példának a Linux kernel korai történetét. Linus Torvalds az első stabil kiadást 1.0-nak címkézte. Ahogy fejlesztette a kernelt, a következő verziók az 1.1-es, 1.2-es lettek és így tovább. A kezdő 1 volt a major verzió, a pont utáni számok pedig a minor verziókat jelölték. Feltételezhetjük, hogy az 1.2-es verzió több funkcióval rendelkezett és többet kínált, mint az 1.1-es verzió.
Számtalan kisebb release is volt azonban, néha csak néhány hiba kijavítására. Hogy megmutassa, hogy a változtatások csak kis mértékben befolyásolták a kernel használatát, Torvalds egy harmadik számot, az úgynevezett patch-et is beiktatott. Így az 1.0-ból 1.0.1 lett, majd 1.0.2, és így tovább.
A patchek száma 0-ról indul, amikor egy új minor verzió jelenik meg, és a minor verziók száma 0-ról indul, amikor egy új major verzió jelenik meg.
A fejlesztők a verziókat egy “x”-szel csoportosítják, hogy ezzel jelezzék, hogy több verzióról van szó, például az 1.x az 1. major verzió alatti összes verziót jelenti.
De mi a különbség egy olyan változtatás között, amely egy új kisebb verzióhoz vezet, és egy olyan között, amely megérdemli, hogy egy új major verziót kapjon? Általában évek telnek el egy új major verzió kiadása előtt, és annak egy nagyon jelentős frissítést kell jelenteni.
A fejlesztők általában igyekeznek fenntartani a backward compatibilityt a verziók változtatása során. Ha a backward compatibility nem tartható fenn, a fejlesztőknek növelniük kell a major verziót.
Néha nullánál kisebb verziószámot láthatunk, általában 0.9-et. A vezető nulla a szoftver korai verzióját jelzi, amely instabil és nem alkalmas éles környezetben történő használatra. Nincs garancia a backward compatibilityre, amíg a fejlesztők ki nem adják az 1-el kezdődő verziókat.
Az alfa verziókat általában úgy jelölik, hogy a release számához hozzáadjak az “a” betűt vagy az “alpha” szót, például 3.6alpha. Hasonlóképpen, a béta verzióknál a release száma után “b” vagy “beta” szerepel.
A szoftvertermék életciklusa
Ne gondoljuk azt, hogy a fejlesztők élete egyszerű. Mindenki akar tőlük valamit. Én azt akarom, hogy ez a hiba a képernyő elrendezésében minél előbb kijavításra kerüljön, míg valaki más azt mondja, hogy a fájlnevek hibája elsőbbséget élvez. A felhasználók új funkciókért kiáltanak, és amikor különböző fejlesztők párhuzamosan dolgoznak különböző funkciókon, azt tapasztalják, hogy az egyikük változtatásai eltaposhatják a másikukét.
A projektmenedzsment és e feladatok release menedzsmentnek nevezett részhalmaza foglalkozik ezekkel a kérdésekkel. Általában egy vezető projekttag vállalja a felelősséget ezért a menedzselési feladatért.
Az emberekhez hasonlóan a szoftververziók is életcikluson mennek keresztül. Mindegyik az új funkciók és egyéb szükséges változtatások megvitatásával kezdődik, majd fejlesztési és tesztelési fázisokon megy keresztül, és tervezett módon kerül bevezetésre.
Tervezés és roadmapek
A fejlesztők igyekeznek jóval előre megtervezni, hogy milyen változtatásokat szeretnének végrehajtani egy terméken. A kereskedelmi cégeknél a marketingesekkel beszélnek, akik szűrik és összefoglalják, amit az ügyfelek mondanak nekik. A nyílt forráskódú projektek inkább a fejlesztők és a felhasználók által benyújtott ötletekre támaszkodnak, amelyeket egy issue tracker nevű adatbázisban rögzítenek. Ha ki kell javítani egy hibát, vagy egy új funkciót szeretnénk, akkor kitöltünk egy issue-t. A fejlesztők ezután rangsorolják a változtatásokat, és eldöntik, hogy melyiket ki fogja kezelni.
Hogyan választják ki és rangsorolják a változtatásokat? Ez zűrös folyamat lehet. A nyílt forráskódú projektek jó projektmenedzserei azonban ösztönzik a széles körű hozzájárulást, miközben biztosítják, hogy megszülessenek a döntések. Egyes projektek még konferenciákat is tartanak, ahol a résztvevők megvitatják a prioritásokat.
Egy közzétett roadmap (ütemterv) tartalmazza a fejlesztésekre és változtatásokra vonatkozó terveket. Ez több kiadásra és több évre is kiterjedhet. Minden egyes lépést mérföldkőnek (milestone) nevezünk, és lehet, hogy céldátum is társul hozzá, de lehet, hogy nem.
Release ütemezés
A releasek ütemezésének két alapvető módja van: idő- és funkcióvezérelt. Egy projekt ígérhet rendszeres időközönként — például félévente — egy releaset, és tartalmazhat mindent, ami addigra elkészül. Alternatív megoldásként a projekt ígérhet bizonyos funkciókat egy kiadásban, és hagyhatja, hogy a fejlesztők annyi időt szánjanak a funkciók befejezésére, amennyire szükségük van.
Ahogy közeledik a kiadás időpontja, a release menedzser meghatározza az alfa, béta és stabil releasek időpontját. A csapattagok rendszeresen áttekintik a hibajelentéseket, és igyekeznek úgy megtervezni a munkájukat, hogy ezeket a mérföldköveket tartani tudják.
A release befejezéséhez a projektnek fel kell hagynia az új funkciókkal kapcsolatos ötletek elfogadásával, és a meglévő funkciók megfelelő működésére kell összpontosítania. Ezt a pillanatot nevezzük feature freeze-nek (funkció befagyasztás).
A termékverziók dokumentációja
A roadmapek, mint már említettük, ismertetik azokat a funkciókat, amelyeket a fejlesztők az egyes releasekbe terveznek beépíteni. A releaset a változtatások listája, az úgynevezett changelog kíséri. Ez a changelog általában felsorolja az új funkciókat, a meglévő funkciók módosításait, az eltávolított funkciókat, azokat a funkciókat, amelyeket a fejlesztők a jövőben el kívánnak távolítani (az úgynevezett deprecated (elavult) funkciókat), valamint a hibajavításokat.
A changelogok ezért elég hosszúak és részletesek lehetnek. A felhasználóknak különös figyelmet kell fordítaniuk az eltávolított vagy deprecated funkciókra, mivel lehet, hogy meg kell változtatniuk a programjaikat vagy a termék használatának módját. Nyilvánvaló, hogy a fejlesztők igyekeznek csak azokat a funkciókat eltávolítani, amelyekre már senkinek sincs szüksége.
A termékdokumentációt minden release esetén módosítani kell a termékben bekövetkezett változásoknak megfelelően. Ez a feladat időigényes lehet, és a fejlesztők könnyen kihagyhatnak egy-egy változtatást, vagy elmaradhatnak a dokumentáció elkészítésével.
Gyakorló feladatok
-
Mi különbözteti meg a stabil releaset az instabiltól?
-
Számíthatunk-e funkcióváltozásra a 2.6.14 és a 2.6.15 nevű release között?
-
Számíthatunk-e funkcióváltozásra a 2.6.0beta és a 2.6.0 nevű release között?
-
Miért számíthatunk arra, hogy az 1.0 release esetén nem lesz backward compatibility a 0.9 release-vel?
-
Ha biztonsági hibát fedezünk fel egy verzióban a feature freeze után, de még a release előtt, kijavíttathatjuk a hibát?
Gondolkodtató feladatok
-
Tegyük fel, hogy a nyílt forráskódú szoftver egyik verzióját az EOL után is használni szeretnénk, mert van benne egy olyan funkció, amelyre szüksége van. Mit tehetünk, hogy továbbra is használható maradjon a verzió?
-
Melyek azok a kritériumok, amelyek alapján egy hibajavítást vagy funkciókérést választanak ki a többi helyett?
Összefoglalás
Ez a lecke a releaseket megkülönböztető fő jellemzőket ismertette: stabilitás, backward compatibility és support. Szó volt a verziónevek és -számok jelentéséről, valamint a release menedzsment legfontosabb szempontjairól, beleértve a dokumentációról is.
Válaszok a gyakorló feladatokra
-
Mi különbözteti meg a stabil releaset az instabiltól?
A kiadások kétféleképpen tekinthetők stabilnak: Jól működnek anélkül, hogy összeomlanának vagy hibás eredményeket adnának, és a felhasználók vagy programozók számára bemutatott interfész várhatóan visszafelé kompatibilis a korábbi verziókkal.
-
Számíthatunk-e funkcióváltozásra a 2.6.14 és a 2.6.15 nevű release között?
Nem. A harmadik szám a szemantikus verziószámozásban egy patchet jelöl, amely egy hiba kijavítására vagy más kisebb feladat elvégzésére, például újraformázásra készült. A funkcióváltásnak minor vagy major releasehez kell vezetnie.
-
Számíthatunk-e funkcióváltozásra a 2.6.0beta és a 2.6.0 nevű release között?
Nem. A béta verzió egy tesztverzió, amely tartalmazza az összes olyan funkciót, amely a végleges kiadásba kerül.
-
Miért számíthatunk arra, hogy az 1.0 release esetén nem lesz backward compatibility a 0.9 release-vel?
A 0.9-es szám kifejezetten figyelmezteti a potenciális felhasználókat, hogy a szoftver még tervezés alatt áll, és nagy valószínűséggel más lesz a kezelőfelülete, amikor stabilizálódik az 1.0 verzió.
-
Ha biztonsági hibát fedezünk fel egy verzióban a feature freeze után, de még a release előtt, kijavíttathatjuk a hibát?
Minden bizonnyal. A feature freeze és a release közötti időszakot arra szánják, hogy felfedezzék és kijavítsák a hibákat, beleértve a biztonsági hibákat is.
Válaszok a gondolkodtató feladatokra
-
Tegyük fel, hogy a nyílt forráskódú szoftver egyik verzióját az EOL után is használni szeretnénk, mert van benne egy olyan funkció, amelyre szüksége van. Mit tehetünk, hogy továbbra is használható maradjon a verzió?
Az EOL után a projekt fejlesztői nem kötelezik el magukat a hibák javítására és ebbe a biztonsági hibák is beletartoznak. Ezért érdemes szorgalmasan követni a projekt hibakövetőjét és levelezési listáit, hogy megtudjuk, milyen hibák merülnek fel. Mivel a kód elérhető, javíthatjuk és javítanunk is kell azokat a hibákat, amelyek a mi verziónkban vannak. Elméletileg még új funkciókat is beépíthetünk a verziódba. Ez gyakorlatilag az eredeti verzió elágazását (fork) jelentené.
-
Melyek azok a kritériumok, amelyek alapján egy hibajavítást vagy funkciókérést választanak ki a többi helyett?
A hibajavítások esetében a kritériumok közé tartozik a hiba súlyossága (amelyet a hibakövetőbe való bekerülése után rendelnek hozzá) és a hiba által érintett felhasználók száma. Egy funkció esetében a kritériumok közé tartozik a funkciót igénylő felhasználók száma, a kódolás nehézsége és a program más részeire gyakorolt lehetséges hatása.