![]() | ||
Joel a szoftverről szoftvermenedzsment egyszerűen
| ||
Sika-mikaÍrta: Joel Spolsky (2002. január 23.)
Az az egyik ok, ami a teljes kód újraírására csábít, hogy a napi használat esetenként nagyon túlnövi az eredeti terveket. Talán csak prototípusnak indult az egész, esettanulmánynak vagy ujjgyakorlatnak, esetleg hogy a cégalapítást követő kilenc hónapon belül tőzsdére kerüljünk, vagy csak egyszeri demónak készült. Mára viszont egy nagy zűrzavarrá nőtte ki magát, aminek működését a hold állása is befolyásolja, bővíteni lehetetlen, mindenki haja az égnek áll tőle, a régi programozók inkább felmondanak, mint hogy ezen kelljen dolgozniuk, a helyükre kerülő újak számára pedig az egész kódnak se füle, se farka. Ezért inkább meggyőzik a vezetőket, hogy mivel az egész úgyis teljesen befuccsolt, kezdjék újra. Ezalatt a Microsoft kis gömböce szőröstül-bőröstül el is nyeli az egész piaci szegmensüket. Ma arról mesélek, milyen más kiutat választhatnának. Egyik termékünket, a FogBUGZ-t hat évvel ezelőtt gyakorlásként kezdem el írni, hogy beletanuljak az ASP programozásba. Kicsivel később ez lett a házon belüli hibakövető rendszerünk. Szinte naponta bővült új, hasznosnál hasznosabb funkciókkal, amíg meg nem ütött egy elég jó szintet, amikor már nem kellett rajta tovább szöszmötölni. Több ismerősöm kérdezte, hogy használhatná-e a FogBUGZ-t a saját cégénél. A gond csak az volt, hogy túl sok bedrótozott dolog miatt a fejlesztő gépen kívül máshova telepíteni igen kemény munka lett volna. Egy csomó SQL Server tárolt eljárást használtam akkoriban, a FogBUGZ futtatásához tehát SQL Server-re is szükség volt. Ez túl drága és túlzás lett volna a néhány fős reménybeli felhasználóknál. És így tovább. Így aztán azt mondtam mindenkinek, hogy „hát, $5000 tanácsadói díjért már rá tudnék szánni néhány napot a kód letisztítására, hogy SQL Server helyett Access-szel is használható legyen”. Ezt persze mindannyian túl drágának tartották. Miután ez párszor megtörtént, rájöttem: ha ugyanezt a programot mondjuk három embernek el tudnám adni fejenként $2000-ért, már megérné. Vagy harminc embernek $200-ért. A szoftver jól adja magát az ilyesmihez. Így hát 2000 végén Michael leült portolni a kódot, hogy mind Access-szel, mind SQL Server-rel működjön, az összes telepítésfüggő dolgot fejlécfájlba tette, és elkezdtük árulni. Igazából nem vártam az egésztől túl sokat. Elvégre, gondoltam, napjainkban kismillió hibakövető rendszer létezik. Minden programozó megírta már a saját kis hibakövető rendszerét. Miért venné meg bárki a miénket? Egy dologban azonban biztos voltam: saját céget indító programozók gyakran jutnak arra a hibás következtetésre, hogy hozzájuk hasonlóan mindenki más is programozó, és az elvárásaik is hasonlók, így programozási segédeszközöket kezdenek el árulni. Ezért lehet Dunát rekeszteni forráskód-generáló, hibafogó, levelező, hibakereső marhasággal, szintaxis-színező szövegszerkesztő izével, ftp-ző bigyóval, és hmm, hibakövető csomaggal házaló ványadt céggel. Csupa olyan dolog, amit csak egy programozó szeretne, a nagyközönséget nem érdeklik. Én nem akartam ebbe a csapdába esni! Persze, semmi sem úgy történik, a Sika-mika hogy eltervezzük. A FogBUGZ népszerű lett. Igazán népszerű. Jelentős szeletet könyvelhet el magának a Fog Creek éves nyereségéből, és az eladás szilárdan növekszik. Az emberek csak viszik, mint a cukrot.Így elkészítettük a 2.0-s verziót. Megpróbáltunk néhány nyilvánvalóan fontos funkciót hozzáadni a rendszerhez. Míg David a 2.0-s verzión dolgozott, egyáltalán nem voltunk biztosak benne, hogy megéri-e ezt a sok erőfeszítést, így ő aztán hajlamos volt a dolgokat inkább „célszerűen”, mintsem „elegánsan” megoldani. Voltak bizonyos, nos tervezési hibák, amik tovább rontották a levegõt. A fő hibabeviteli oldalt megjelenítő kód két, szinte teljesen azonos példányban szerepelt. SQL utasítások voltak elszórva a HTML-ben ide-oda, elöl, hátul, mellbe. A recsegő-ropogó HTML is azokat az ősrégi, hibákkal lyuggatott böngészőket idézte, amik egy about:blank betöltésétől összeomlottak. Kívülről nézve remekül működött, és attól kezdve máig nulla ismert hibánál tartunk. Ám belülről a kód – szakkifejezéssel élve – egy „nagy mákostészta” volt. Új funkció hozzáadásakor néha inkább egy púpot kívántam volna a hátamra. A központi hibatáblába egy mezőt felvenni legalább ötven módosítást jelentett, és még akkor is maradnának ügyesen eldugott javítandó helyek, mikor már rég megvan a marsbéli nyaralásra szánt családi űrautó is. Egy kevésbé hozzáértő cég (főleg ha a helyzete mondjuk egy expressz csomagküldő szolgálattól átcsábított vezetővel súlyosbított) ilyenkor dönthet úgy, hogy kidobja a kódot, és újrakezdi. Említettem már, hogy nem hiszek a teljes újraírásban? Mintha már felhoztam volna egyszer-másszor. Bárhogy is, az újraírás helyett úgy döntöttem, hogy megér három hetet az életemből a kód teljes kisikálása. Sika-mika. A refaktorálás (kódtisztítás) szellemében a következőkhöz tartottam magam:
Egyenként végigmentem minden forrásfájlon, elejétől a végéig átnéztem a kódot, közben a világosabb szerkezeten törtem a fejem, és egyszerű változtatásokat tettem. A három hét során főleg a következő tipikus esetek fordultak elő:
A három hét során a kód belülről egyre jobb és jobb lett. A végfelhasználók szemszögéből nem sok változás történt. Néhány betűtípus a CSS-nek köszönhetően egy kicsit szebb lett. Bármikor abba tudtam volna hagyni, mivel minden adott pillanatban 100%-osan működő kódom volt (és minden verziót feltöltöttem a belső FogBUGZ kiszolgálónkra, hogy biztos lehessek ebben). Sosem kellett túl sokat gondolkozni vagy megtervezni a dolgokat, mert csak egyszerű, triviális átalakításokat végeztem. Időnként találkoztam furcsa gyöngyszemekkel. Ezek általában az évek során hozzáadott hibajavítások voltak. Szerencsére e javításokat változatlanul hagyhattam. Mi több, rájöttem, hogy nulláról mindent újraírva ugyanazokat a hibákat ejtettem volna, amik megint évekig észrevétlenek maradtak volna. Alapjában véve elkészültem. Ahogy terveztem, három hét kellett hozzá. Szinte minden kódsor megváltozott. Igen, végignéztem minden kódsort, és a legtöbbjét megváltoztattam. A struktúra már egészen más. A hibakövető funkcionalitás teljesen elvált a HTML felhasználói felülettől. A kódtisztításom előnyei:
A refaktorálás irodalma jobbára Martin Fowlernek tulajdonítható, bár a kódtisztítás elveit a programozók természetesen évek óta ismerik. Érdekes terület a refaktoráló segédeszközök köre, ami csupán egy hangzatos név az ilyen feladatokat automatikusan elvégző programokra. Még persze közel sincs minden jól használható eszköz a kezünkben – a legtöbb programfejlesztői környezet még olyan egyszerű átalakítást sem tud, mint pl. egy változó nevének megváltoztatása (és minden hivatkozás automatikus cseréje). Ám egyre jobbak lesznek, és ha amolyan ványadt céget akarsz indítani, ami programfejlesztői kütyükkel házal, vagy hasznosan kívánsz hozzájárulni a nyílt forrás ügyéhez, az ajtó nyitva áll. | ||