Ohjelmiston versiohallinta

Wikipedia
Ohjattu sivulta CVS
Loikkaa: valikkoon, hakuun

Ohjelmiston versiohallinta on ohjelmistoprojektin tuotosten hallintaa ja se mahdollistaa ohjelmiston kehityksen seurannan ja hallitun kehityksen. Ohjelmistoprojektin asiakirjoista ja komponenteista muodostetaan konfiguraatio-objekteja ja edelleen konfiguraatioita. Versiohallinta on eräs tärkeimmistä ohjelmiston konfiguraatiohallinnan (SCM) tehtäväalueista.

Ohjelmiston versiohallinta voidaan jakaa neljään päätoimenpiteeseen, jotka ovat versiointi, versioiden merkitseminen, versioiden välisten erojen tunnistaminen ja versioiden tallentaminen. Versiointi voidaan jakaa historialliseen, loogiseen ja yhteistoiminnalliseen versiointiin. Versioiden merkitseminen kuvaa niitä menetelmiä, joita sovelletaan tietyn konfiguraatio-objektin yksikäsitteiseksi nimeämiseksi. Versioiden välisten erojen tunnistamisen päätavoite on minimoida versioiden tallentamiseen käytettävä levytila. Toisin kuin versiohallinnan muut toimenpiteet, versioiden välisten erojen tunnistaminen ei ole välttämätöntä versiohallinnan onnistumisen kannalta. Versioiden tallentamisen tarkoituksena on mahdollistaa versioiden pysyvä tallennus, josta mielivaltaisella ajanhetkellä voidaan valita haluttu versio käsiteltäväksi.

Johdanto[muokkaa | muokkaa wikitekstiä]

Kun ohjelmistoprojektien koko alkoi kasvaa räjähdysmäisesti 1960-luvun lopulla, huomattiin, että ohjelmistojen kehitys sisältää muutakin kuin vain ohjelmointiosuuden. Ongelmallisena koettiin ohjelmistoprojektin hallinta sekä suuret määrät lähdekoodia ja dokumentteja, joita tuli pystyä tarkoin hallitsemaan. Näinä aikoina versiohallinta tuli ajankohtaiseksi.

Versiohallinta on ohjelmistoprojektin tuotoksien hallintaa ja eräs sen tärkeimmistä tavoitteista on mahdollistaa ohjelmistokomponenttien yhtäaikainen ja ristiriidaton kehitys. Versiohallinta luo pohjan evolutionääriselle ohjelmistojen kehitykselle takaamalla, että jokaista mielivaltaiseen ohjelmistokomponenttiin tehdyn muutoksen piirteitä voidaan arvioida milloin tahansa.

Versiohallinta mahdollistaa ohjelmiston kehityskaaren seurannan ja turvallisen kehityksen. Versiohallinta myös mahdollistaa kehityksen etenemisen eri suuntiin, joka on usein välttämätöntä räätälöitäessä ohjelmistosta eri versiota eri alustoille ja asiakkaille. Versiohallinta mahdollistaa myös aiempaan kehitysversioon palaamisen, joka voi olla toivottavaa esimerkiksi silloin kun siinä on suorituskyvyn tai ominaisuuksien kannalta joitakin haluttavia piirteitä, joita uusimmassa kehitysversiossa ei enää ole.

Versiohallinnan teoriaa[muokkaa | muokkaa wikitekstiä]

Versiohallinta on yksinkertaisimmillaan joukko toimenpiteitä, joita noudattamalla pyritään hallitsemaan dokumenttien kehittämistä ja versiointia. On varsin ilmeistä, että manuaalisiin toimenpiteisiin nojaava versiohallintajärjestelmä on herkkä virheille, skaalautumaton ja työläs ylläpitää. Ongelmien ratkaisuksi kehitettiin 70-luvulla ensimmäiset palvelinkeskeiset versiohallintajärjestelmät, jotka automatisoivat suuren osan työstä, jota aiemmin jouduttiin tekemään käsin. Nykyään versiohallintajärjestelmät ovat jo varsin kehittyneitä ja läheisesti integroituja jokaiseen vähänkin vakavampaan ohjelmistonkehitysprojektiin. Tässä luvussa on tarkoitus esitellä katsausluontoisesti teoriaa, jonka varaan versiohallinta edelleen suurelta osin perustuu. Ensin käsitellään konfiguraationhallintaa, joka on versiohallinnan yläkäsite. Tämän jälkeen käsitellään versiohallintaa ja sen osa-alueita.

Konfiguraationhallinta[muokkaa | muokkaa wikitekstiä]

Zellerin mukaan konfiguraationhallinta (Configuration management, CM) on oppi kehittyvien järjestelmien organisoinnista ja hallinnasta. Konfiguraationhallinta pyrkii määräämään menettelytavat komponenttien ja niiden yhdistelmien tunnistamiseksi, julkistusten ja muutosten hallitsemiseksi, tuotteen tilan kirjaamiseksi, sekä tuotteen täydellisyyden ja yhtenäisyyden varmistamiseksi. Tässä komponenteilla tarkoitetaan ohjelmistoalkioita, joita ovat muun muassa ohjelmatiedostot ja dokumentit.

Zeller erottaa ohjelmiston konfiguraationhallinnan (Software Configuration Management, SCM) perinteisestä konfiguraationhallinnasta ohjelmistojen mukautuvuuden, helpon kopioitavuuden ja monimutkaisuuden kautta. Lisäksi ohjelmistojen konfiguraationhallintaa voidaan automatisoida laajalti, koska komponentit ovat tietokoneen hallinnassa. Pressman jakaa ohjelmiston konfiguraationhallinnan tehtäväalueisiin, jotka ovat muutosten identifiointi, versiohallinta, muutoksenhallinta, konfiguraation laadunarviointi ja muutoksista tiedottaminen.

Ohjelmiston versiohallinta ja versiointi[muokkaa | muokkaa wikitekstiä]

Pressmanin mukaan versiohallinta yhdistää menetelmät ja työkalut ohjelmistoprosessin aikana luotavien konfiguraatio-objektien eri versioiden hallitsemiseksi. Konfiguraatio-objektin voidaan ymmärtää tarkoittavan esimerkiksi asiakirjaa, ohjelmistokomponenttia tai näiden muodostamia yhdistelmiä. Versiohallinta on yhdistelmä konfiguraationhallinnan menetetelmiä, joiden avulla käsitellään konfiguraatio-objektien eri versioita. Versiot ovat eräänlaisia koonteja tai kuvauksia ohjelmistosta. Ne koostuvat joukosta ohjelmistoalkioita, joita joukko ihmisiä yhdessä kehittää; versiot ovat ohjelmiston muunnelmia. Versiointi on joukko määrätyssä järjestyksessä suoritettavia toimenpiteitä, jotka synnyttävät konfiguraatio-objektista uuden version. Versioinnin toimenpiteitä ovat versioinnin ulottuvuuksien määrittely, version merkitseminen, versioiden välisten erojen tunnistaminen ja version tallentaminen.

Versioinnin ulottuvuudet[muokkaa | muokkaa wikitekstiä]

Muutokset komponentteihin luovat komponenteista uusia versioita, joiden ulottuvuus määräytyy muutoksen tekijän tarkoitusperän mukaan. Zellerin mukaan versioinnin ulottuvuuksiksi luetaan yleisesti historiallinen, looginen ja yhteistoiminnallinen versiointi.

Historiallinen versiointi on kehitystä, jossa uudempi versio syrjäyttää aiemman. Tällaisia syrjäyttäviä versioita kutsutaan revisioiksi (revision). Looginen versiointi on niin kutsuttujen haarojen (branch) luomista, jossa kukin haara kuvastaa kehityksen vaihtoehtoista kulkua. Haarat etenevät omaa kehityskaartaan muista haaroista riippumatta, toisin kuin historiallisessa versioinnissa, jossa uudemmat revisiot syrjäyttävät vanhemmat. Vaikka haaroja voidaan integroida toisiinsa, looginen versiointi korostaa rinnakkaista kehittämistä ja haarojen keskinäistä autonomisuutta.

Yhteistoiminnallinen versiointi on väliaikaisuuden hallintaa siten, että tarkoituksena on luoda hetkellisiä versioita komponenteista, jotka tullaan myöhemmin integroimaan toisten versioiden kanssa. Loogisessa versioinnissa esiintyvän haarautumiseen verraten kyseessä ei ole vaihtoehtoinen kehityssuunta, vaan pikemminkin hetkellinen poikkeama, joka useimmiten on seurausta kehitystilanteessa esiin tulleesta tarpeesta, mutta joka jo luonnin hetkellä tiedostetaan yhdistettäväksi toiseen versioon myöhemmin.

Versioiden merkitseminen[muokkaa | muokkaa wikitekstiä]

Historiallisessa versioinnissa revisiot järjestetään ja ne identifioidaan järjestyksen mukaan. Identifioiminen voidaan tehdä esimerkiksi numeerisesti siten, että suurin luku viittaa viimeisimpään revisioon. Tällöin revisioita merkittäessä käytetään yleensä kaksitasoista numerointia muodossa [V.R], missä V kuvastaa julkaisunumeroa ja R tasonumeroa. Julkaisunumeroa kutsutaan myös versionumeroksi ja tasonumeroa revisioksi. Julkaisunumeron muutos kuvastaa suurta muutosta ja revisionumeron muutos pienempää muutosta.

Joskus versioninnissa käytetään lisäksi kolmatta tasoa, joka ilmaisee ohjelmaan tehdyn paikan (patch). Paikkausversioita käytetään ohjelmavirheiden korjauksissa.

Ohjelmankehityksessä kehitystason versiot ovat tyypillisesti alle 1.0. Siihen kuuluvat testausversiot alfa-, beta- ja gammatestauksineen. Kun ohjelma on valmis tuotantokäyttöön, se julkistetaan ja senhetkisen ohjelmankehityksen tilan versionumeroksi asetetaan 1.0. Julkistuksen jälkeen ohjelmasta julkaistaan tuotantoversion päivityksiä. Ne ovat numeroinniltaan yli 1.0. Tuotantoversioiden päivitykset ovat tyypillisesti virheenkorjausversioita tai uusia ominaisuuksia sisältäviä versioita. Versionumeroinnille ei ole olemassa täsmällistä ohjeistusta. Useiden tuotantokäytössä laajalti käytössä olevien ohjelmien versionumero on esimerkiksi 0.15. Ja toisaalta on olemassa ohjelmia, joiden tuotantoversiot eivät täytä käyttäjän näkökulmasta toimvian ohjelman kriteerejä.

Loogisen ja yhteistoiminnallisen versioinnin yhteydessä esiintyvien varianttien merkitsemiseen käytetään useimmiten määrättyjä nimiä numeroinnin sijaan, koska variantit eivät välttämättä esiinny toistensa suhteen järjestyksessä.

Versioiden välisten erojen tunnistaminen[muokkaa | muokkaa wikitekstiä]

Ohjelmistoon tehtyjen muutosten selvittämiseksi täytyy voida selvittää versioiden väliset erot. Koska toisiaan seuraavat versiot, eritoten revisiot, saattavat olla hyvin toistensa kaltaisia, eroavaisuuksien tarkan määrittelyn avulla voidaan keskittyä muutokseen ja säästää resursseja. Perinteisesti versioiden välisten erojen tunnistamisella on pyritty säästämään tallennustilaa.

Yleinen tapa erojen tunnistamiseen on suorittaa merkkivertailu tekstitiedostojen välillä. Kyseisen tavan tavoitteena on löytää pienin joukko muutoksia, jotka täytyy suorittaa komponentin version A muuttamiseksi versioksi B. Kyseinen metodologia ei kuitenkaan päde kuin tekstitiedostoja käsitellessä, sillä esimerkiksi binääritiedostoissa pieni paikallinen muutos saattaa tiedoston rakenteesta riippuen vaikuttaa koko tiedoston sisältöön.

Versioiden tallentaminen[muokkaa | muokkaa wikitekstiä]

Ohjelmistojen kehityksen ja ohjelmiston aikaisempien versioiden uudelleenrakentamisen mahdollistamiseksi on vanhat ja uudet versiot voitava tallentaa pysyvästi. Hyvin yleinen tapa on käyttää varastoja (engl. repository), jonne konfiguraatio-objektien versiot ja niitä koskevat konfiguraationhallinnan tiedot tallennetaan. Tallennuksessa on pyritty hyödyntämään myös valmiita tietokantajärjestelmiä, mutta käyttöä rajoittaa se, ettei niissä yleensä ole tukea versioinnille.

Usein varastoissa käytetään tallentamiseen puurakennetta, jossa puun juuri kuvastaa konfiguraatio-objektin ensimmäistä versiota ja juuren jälkeläiset kuvastavat konfiguraatio-objektin myöhempiä versioita. Historiallinen versionti on puun syvyyden kasvattamista ja looginen versiointi puun haarautumista.

Tilansäästön vuoksi varastoihin tallennetaan eri versioista vain niiden väliset erot. Tämä muutostieto on kohdassa 2.5 esitetty minimaalinen muutosjoukko, jonka perusteella komponentin tietty versio A voidaan muuntaa versioksi B. Kyseistä minimaalista muutosjoukkoa kutsutaan deltaksi. Varastot voivat laskea deltoja kumulatiivisesti ensimmäisestä versiosta lähtien niin, että vain komponentin ensimmäisen versio säilytetään kokonaisuudessaan. Varastot voivat laskea muutostietoja myös toisin päin, jolloin varastoon tallennetaan komponentin uusin versio kokonaisuudessaan ja sen mukana muutostiedot aikaisempien versioiden konstruoimiseksi. Koska komponentin versioiden väliset erot ovat tavallisesti komponentin kokoon nähden pieniä, on deltoja hyödyntämällä saavutettava tilansäästö merkittävä.

Versiohallintajärjestelmät[muokkaa | muokkaa wikitekstiä]

Tässä luvussa tarkastellaan versiohallinnan periaatteiden käytännön toteutustapoja käyttäen esimerkkinä joitakin yleisesti käytettyjä järjestelmiä.

RCS ja erityisesti sen seuraaja CVS ovat suosittuja vapaita versiohallintajärjestelmiä. CVS toteuttaa historiallisen, loogisen ja yhteistoiminnallisen versioinnin puurakenteen avulla. CVS osaa myös yhdistää eri kehittäjien tekemiä muutoksia, jolloin toiminta on sujuvaa laajemmissakin projekteissa. CVS:n puutteita on paikattu vapaassa Subversion-järjestelmässä.

BitKeeper on kaupallinen versiohallintajärjestelmä, joka soveltuu erityisen hyvin suuriin, hajautettuihin projekteihin. BitKeeper toimii hajautetusti ja versioiden yhdistäminen on tehokkaampaa kuin CVS:ssä. Rational ClearCase on toinen suosittu kaupallinen järjestelmä, joka tarjoaa ominaisuuksia versiohallinnan lisäksi myös muuhun ohjelmistotuotteen hallintaan.

Seuraavassa listassa on lueteltu tunnettuja versiohallintajärjestelmiä, ensin avoimen lähdekoodin järjestelmät ja sitten kaupalliset tuotteet.

Avoimen lähdekoodin versiohallintajärjestelmät[muokkaa | muokkaa wikitekstiä]

RCS[muokkaa | muokkaa wikitekstiä]

RCS on yhden käyttäjän vapaa versiohallintajärjestelmä.[1] Sen kehityksen aloitti Walter Tichy 1980-luvun alkupuolella Purduen yliopistossa Yhdysvalloissa. RCS on kehitetty Source Code Control Systemin pohjalta.[2] Siihen verrattuna RCS toimii tehokkaammin säilyttämällä kustakin tiedostosta uusimman version kokonaisuudessaan sekä aikaisemmista versioista vain niiden eroavaisuudet seuraavaan verrattuna. Hallittavat tiedostot voivat ohjelmakoodin lisäksi olla mitä tahansa dokumentteja.

RCS käyttää aiemmin kuvattuun tapaan historiallista ja loogista versiointia. Versiointi on toteutettu puurakenteella aiemmin esitetyllä tavalla tallentaen dokumenteista vain viimeisimmät versiot kokonaisuudessaan. Sivuhaaroista tallennetaan eroavaisuudet rekursiivisesti haarautumiskohdasta lähtien. Näin päähaaran uusin versio on nopeasti saatavilla, eikä uuden version lisääminen vaadi kuin sen tallentamisen sekä uuden deltan muodostamisen edeltävää versiota varten. Versioiden eroavaisuuksien tunnistamiseen käytetään diff-ohjelmaa.

Versioiden identifiointi tapahtuu RCS:ssä historiallisen versioinnin tapauksessa kuten aiemmin on kuvattu. Tasonumerointi toimii automaattisesti siten, että uusi versio saa yhtä suuremman numeron edelliseen verrattuna. Halutessaan käyttäjä voi suurempien muutoksien jälkeen kasvattaa myös julkaisunumeroa. Myös loogisessa versioinnissa eli puun haarautuessa, versiot tunnistetaan numeroiden perusteella. Jos esimerkiksi versiosta 1.3 luodaan haara, sille annetaan numero 1.3.1. Varsinaisen haaraan kuuluvan version tunnukseen kuuluu vielä neljäs numero, joka muodostetaan tasonumeroinnin tapaan. Haaran 1.3.1 versioita ovat esimerkiksi 1.3.1.1 ja 1.3.1.2. Jos versiosta 1.3 luodaan uusi, erillinen haara, se saa numeron 1.3.2.

RCS:n peruskäyttöön tarvitaan vain komennot ci ja co. Komento ci tiedosto.c lisää järjestelmään uuden tiedoston. Komennolla co tiedosto.c tiedoston voi hakea järjestelmästä muokattavaksi. Muokkauksen tuloksena syntynyt uusi versio lisätään puuhun komennolla ci tiedosto.c.

Jos RCS:llä on useita käyttäjiä, käyttäjän tulee aina lukita versio ottaessaan sen muokattavaksi. Tästä seuraa RCS:n suurin ongelma; kutakin tiedostoa voi muokata vain yksi käyttäjä kerrallaan, vaikka eri henkilöt muokkaisivat eri osia tiedostosta. Pakottavassa tilanteessa lukitus on mahdollista murtaa, mutta tästä seuraa helposti ongelmia.

Lisäksi RCS käsittelee vain yksittäisiä tiedostoja, vaikka useimmissa tapauksissa ohjelmiston versio muodostuu useiden lähdekooditiedostojen kokonaisuudesta. RCS ei myöskään tarjoa minkäänlaisia verkko-ominaisuuksia, vaan usean kehittäjän projektissa tiedostot tulee hakea siltä koneelta, jossa järjestelmä sijaitsee. Näin ollen RCS ei ole kovin joustava järjestelmä suuremmissa usean kehittäjän projekteissa.

CVS[muokkaa | muokkaa wikitekstiä]

CVS on RCS:n pohjalle rakennettu vapaa monen käyttäjän versiohallintajärjestelmä. Järjestelmän kehitys lähti liikkelle Dick Grunen 1986 julkaisemista shell-skripteistä, jotka helpottivat RCS:n käyttöä. Nykyisessä järjestelmässä kyseistä koodia ei enää ole jäljellä, mutta CVS:n käyttämät konfliktinhallinta-algoritmit ovat pääosin sieltä peräisin. Varsinaisen CVS:n ensimmäisen version suunnitteli ja ohjelmoi C-kielellä Brian Berliner vuonna 1989.

CVS tallentaa tiedostojen versiot samaan tapaan kuin RCS, ja CVS:n ensimmäiset versiot itse asiassa käyttivät tähän RCS:n ominaisuuksia. CVS kuitenkin pitää kirjaa tiedostojen sijaintihakemistosta ja osaa yhdistää useita hakemistoja yhdeksi kokonaisuudeksi. Näin pystytään hallitsemaan yhtenäistä, useista tiedostoista koostuvaa projektia. Lisäksi CVS mahdollistaa yhteistoiminnallisen versioinnin, sillä revisiopuuhun luotu haara on myöhemmin mahdollista yhdistää päähaaraan.

CVS tekee eron version ja revision välillä. Revisiot ovat versioita yksittäisestä tiedostosta ja ne numeroidaan samaan tapaan kuin RCS:ssä. Versio sen sijaan tarkoittaa koko sovelluksen versiota, joka koostuu usean tiedoston revisioista. Tällainen versio voidaan määritellä esimerkiksi annettaessa sovellus asiakkaalle testattavaksi.

CVS ei estä useita kehittäjiä muokkaamasta samaa tiedostoa yhtä aikaa, vaan järjestelmä osaa yhdistää eri kehittäjien tekemät muutokset. 1990-luvun alussa järjestelmään lisättiin myös verkko-ominaisuudet, jolloin projektin tuotoksiin saattoi tarvittaessa päästä käsiksi kaikkialta Internetistä. Juuri näinä aikoina CVS saavutti runsaasti suosiota erityisesti vapaan ohjelmistonkehityksen piirissä.

Työskentely CVS:ää käyttäen tapahtuu niin sanotun kopioi-muokkaa-yhdistä -mallin mukaisesti (vrt. RCS:n käyttämä lukitse-muokkaa-vapauta -malli). Yksinkertaisimmillaan työskentelyyn kuuluu kolme vaihetta. Ensimmäisessä vaiheessa projektista ladataan niin sanottu työkopio lokaalille koneelle. Tätä tapahtumaa kutsutaan nimellä check out. Toisessa vaiheessa projektin työkopiota voidaan muokata vapaasti CVS:stä riippumatta ja kolmannessa vaiheessa työkopioon tehdyt muutokset kirjataan CVS:ään. Muutosten kirjaamista CVS:ään kutsutaan nimellä commit. Muutosten kirjaamisen jälkeen muutokset ovat näkyvissä kaikille projektin kehittäjille, jotka kukin kehittäjä voi edelleen päivittää omiin työkopioihinsa.

Git[muokkaa | muokkaa wikitekstiä]

Kun BitMover lakkautti kaupallisen BitKeeper-järjestelmänsä ilmaisversion keväällä 2005, Linus Torvalds koodasi Linux-ytimen kehittämistä varten oman vapaan hajautetun versiohallinnan (DVCS) järjestelmänsä Gitin. BitKeeperin ohella Monotonesta inspiraatiota saanut Git lähtee liikkeelle ajatuksesta, että sen on oltava mahdollisimman nopea ja tuettava hajautettua ohjelmistonkehitystä, jolloin jokaista versiota voi kehittää ja testata itsenäisesti. Tällöin testausta varten ei tarvitse kasata yhtä suurta pakettia, joka sisältää kaikki muutokset. Keskuspalvelinta ei tarvitse kuin muutoksista tiedottamiseen.[3]

Koska Gitissä muutosten kirjaaminen eli commit ja versioiden tekeminen on salamannopeaa, voi työtä hajauttaa helposti pieniin paloihin ja eri kehittäjille. Git käsittelee muutoksia koodiin kokonaisuutena eikä yksittäisten tiedostojen pohjalta. Muutoshistorian seuranta perustuu SHA-1 -algoritmiin.[3]

Gitiä on alettu vuoteen 2009 mennessä hyödyntää Linuxin ohella lukuisissa korkean profiilin ohjelmistohankkeissa kuten: Perl, GNOME, Qt, Samba, Kannettava tietokone jokaiselle lapselle, VLC media player, FFmpeg, Wine, Ruby on Rails ja Googlen Android-käyttöjärjestelmä. Gitin ympärille on muodostunut vahva yhteisö, joka kehittää sitä aktiivisesti.[3]

Subversion (SVN)[muokkaa | muokkaa wikitekstiä]

Subversion on vapaa versiohallintajärjestelmä, jonka tarkoitus on ennen kaikkea korjata CVS:ssä havaittuja puutteita ja lisätä CVS:stä puuttuvia, mutta yleisesti tarpeellisiksi koettuja ominaisuuksia. Subversion on rakennettu CVS:n pohjalta, minkä takia Subversionin toiminta ja käyttö ovat monella tapaa samantyylisiä CVS:ään verrattuna.

Subversion mahdollistaa hakemistojen, tiedostojen uudelleennimeämisten ja tiedostoihin liittyvän metadatan versioinnin. Näin esimerkiksi tiedoston nimen tai attribuuttien muuttaminen tulkitaan muutokseksi samaan tapaan kuin tiedoston sisällön muuttaminen.

Commit-toiminto tulee Subversionissa voimaan vasta kun toiminto on kokonaisuudessaan suoritettu. Toimintoa käsitellään yhtenä kokonaisuutena, joka saa oman versionumeronsa. Tämän seurauksena yksittäisillä muutoskerroilla tehtyjä muutoksia voidaan seurata kokonaisuutena.

Subversionissa versioiden tallentamiseen voi puhtaasti tiedostopohjaisen varaston sijaan käyttää myös BerkeleyDB-tietokantaa. Lisäksi Subversionissa on tehostettu loogiseen versiointiin liittyvää haarojen muodostamista ja käsittelyä, verkon yli tapahtuvaa toimintaa sekä binääritiedostojen käsittelyä.

Kaupalliset versiohallintajärjestelmät[muokkaa | muokkaa wikitekstiä]

BitLogic BitKeeper[muokkaa | muokkaa wikitekstiä]

BitKeeperin kehityksen aloitti Larry McVoy ja sen omistaa BitMover-yhtiö. CVS:ään verrattuna BitKeeper tarjoaa ominaisuuksia, jotka helpottavat versiohallintaa suurissa, maantieteellisesti hajautetuissa projekteissa. BitKeeper on ollut käytössä esimerkiksi Linuxin ytimen kehityksessä.

BitKeeper toimii hajautetusti siinä mielessä, että jokaisella kehittäjällä on omalla koneellaan täydellinen kopio projektin varastosta. Tätä kopiota kutsutaan lapseksi ja päävarastoa vanhemmaksi. Kun kopio on kerran tehty, kehittäjän koneen ja päävaraston välillä siirretään vain tietoa tehdyistä muutoksista. Lapsivarastot voivat vaihtaa muutostietoa myös keskenään. Tämä helpottaa työskentelyä kun verkkoyhteyttä ei ole käytettävissä, tai käytössä on hidas yhteys. Myöskään päävarastopalvelimen käyttökatkokset eivät haittaa työskentelyä siinä määrin kuin täysin keskitetyssä järjestelmässä.

BitKeeper voi käyttää eri protokollia, kuten SSH:ta, RSH:ta, BKD:ta, HTTP:ta ja SMTP:tä päivitysten tekemiseen.

Myös versioiden välisten muutosten käsittelyä on BitKeeperissä tehostettu. Kehittäjät voivat koota samaan asiaan liittyvät muutokset niin sanotuksi muutosjoukoksi (engl. changeset). Muutosjoukko tallennetaan tiedostoon, jossa kerrotaan, mitä on muutettu ja mitä ei. Tämän avulla voidaan erottaa esimerkiksi yksittäisen virheen korjaamiseksi tehdyt muutokset.

BitKeeper on kaupallinen, mutta aikaisemmin sitä on kuitenkin voinut käyttää ilman maksullista lisenssiä, mikäli ei ole käyttänyt monen käyttäjän varastoa tai on suostunut käyttämään OpenLogging-järjestelmää. OpenLogging on järjestelmä, jossa lähetetään metatietoja projekteista keskitetylle web-palvelimelle, jonka avulla muut kehittäjät voivat seurata toistensa edistymistä. Palvelu on julkinen, jonka vuoksi kuka tahansa voi selata projektien tietoja. Järjestelmä ei sisällä lähdekoodia vaan ainoastaan kehityslokeja sekä kehittäjäkohtaista statistiikkaa. Pääasiallisesti BitKeeper on kuitenkin suunnattu maksullisen lisenssin omaaville, joka korostui kun BitMover ilmoitti 5. huhtikuuta 2005 lopettavansa ilmaisen version tarjoamisen BitKeeperistä.

IBM Rational ClearCase[muokkaa | muokkaa wikitekstiä]

ClearCase on kaupallinen versiohallintajärjestelmä, jonka alkuperäinen kehittäjä Rational Software on nykyisin IBM:n omistuksessa. ClearCase on osa IBM:n tarjoamaa kokonaista tuoteperhettä ohjelmistotuotteen hallinnan eri osa-alueisiin. Varsinaisen versiohallinnan lisäksi ClearCase tarjoaa toimintoja myös työtilan, ohjelmistokoontien ja muutosten hallintaan. Järjestelmä on integroitavissa moniin ohjelmistonkehitysympäristöihin kuten Eclipseen, Visual Studioon, ja WebSphereen[4].

Kaupallisen järjestelmän sisäisestä toiminnasta on vaikea saada tietoa, mutta ClearCase mahdollistaa ainakin historiallisen ja loogisen versioinnin. Työskentely ClearCasella tapahtuu checkin/checkout -mallin mukaan, joka vastaa CVS:n toimintatapaa.

ClearCase käyttää versioiden tallentamiseen oliotietokantaa, joka mahdollistaa tarkan pääsynvalvonnan. Järjestelmällä voidaan hallita teksti- ja binääritiedostoja, testauskomentojonoja, hakemistoja ja yleisesti ottaen kaikkia tiedostojärjestelmän kohteita.

ClearCase on saatavissa seuraaville käyttöjärjestelmille: AIX, HP Unix, Linux, Other Unix, Sun Unix ja Windows[5]. Se integroituu natiivina myös saman tuoteperheen ClearQuest-virheenseurantajärjestelmään.

Microsoft Visual Source Safe[muokkaa | muokkaa wikitekstiä]

Microsoftin Visual Studio -kehitysympäristön mukana seuraa yhtiön Visual Source Safe -versiohallintajärjestelmä. Visual Source Safe (VSS) on erityisesti Windows-alustalle tarkoitettu asiakas-palvelin -tyylinen versiohallintaohjelmisto.

Source Safen etuna on helppo käyttöönotto, jos sovelluskehitystä tehdään Visual Studio -työkaluilla Microsoft-ympäristössä. VSS integroituu vakiona Visual Studioon.

Laajempiin ja hajautetumpiin projekteihin Microsoft suosittelee Visual Studio Team Systemin Visual Studio Team Foundation Server -palvelinta.

Microsoft tukee Visual Source Safen käyttämistä vain Windows-asiakasohjelmien kanssa, mutta kolmansilta osapuolilta on tarjolla myös asiakasohjelmat Javalle, Linuxille, Macintoshille ja Sunin Solaris-käyttöjärjestelmälle.

Yhteenveto[muokkaa | muokkaa wikitekstiä]

Versiohallinta on ohjelmistoprojektin tuotosten hallintaa ja se mahdollistaa ohjelmiston kehityksen seurannan ja vakaan kehityksen. Ohjelmistoprojektin asiakirjoista ja komponenteista muodostetaan konfiguraatio-objekteja ja edelleen konfiguraatioita. Versiohallinta on eräs tärkeimmistä ohjelmiston konfiguraatiohallinnan tehtäväalueista. Versiohallinta voidaan jakaa neljään päätoimenpiteeseen, jotka ovat versiointi, versioiden merkitseminen, versioiden välisten erojen tunnistaminen ja versioiden tallentaminen.

Versiointi voidaan jakaa historialliseen, loogiseen ja yhteistoiminnalliseen versiointiin. Versioiden merkitseminen kuvaa niitä menetelmiä, joita sovelletaan tietyn konfiguraatio-objektin yksikäsitteiseksi nimeämiseksi. Versioiden välisten erojen tunnistamisen päätavoite on minimoida versioiden tallentamiseen käytettävä levytila. Toisin kuin versiohallinnan muut toimenpiteet, versioiden välisten erojen tunnistaminen ei ole välttämätöntä versiohallinnan onnistumisen kannalta. Versioiden tallentamisen tarkoituksena on mahdollistaa versioiden pysyvä tallennus, josta mielivaltaisella ajanhetkellä voidaan valita haluttu versio käsiteltäväksi.

RCS ja erityisesti sen seuraaja CVS ovat suosittuja vapaita versiohallintajärjestelmiä. CVS toteuttaa historiallisen, loogisen ja yhteistoiminnallisen versioinnin puurakenteen avulla. CVS osaa myös yhdistää eri kehittäjien tekemiä muutoksia, jolloin toiminta on sujuvaa laajemmissakin projekteissa. CVS:n puutteita on paikattu vapaassa Subversion-järjestelmässä.

BitKeeper on kaupallinen versiohallintajärjestelmä, joka soveltuu erityisen hyvin suuriin, hajautettuihin projekteihin. BitKeeper toimii hajautetusti ja versioiden yhdistäminen on tehokkaampaa kuin CVS:ssä. Rational ClearCase on toinen suosittu kaupallinen järjestelmä, joka tarjoaa ominaisuuksia versiohallinnan lisäksi myös muuhun ohjelmistotuotteen hallintaan.

Git on yksi nykyaikaisimmista, erityisesti avoimen ohjelmistokehityksen yhteisössä suosittu versiohallintajärjestelmä, joka on suunniteltu Linuxin kehittämisen pohjalta kerätyn kokemuksen avulla lähtökohtaisesti suuriin, hajautettuihin projekteihin. Git on ilmainen ja ennen kaikkea nopea. Koska sen ympärille on muodostunut aktiivinen yhteisö, sisältää järjestelmä nykyisellään kaikki oleelliset versiohallinnan ominaisuudet. Yhteisö ylläpitää myös suosittuja sosiaalisia ohjelmistonkehitysalustoja kuten GitHub.

Versiohallintaohjelmia[muokkaa | muokkaa wikitekstiä]

Lähteet[muokkaa | muokkaa wikitekstiä]

  1. Tichy, W. F.: Rcs - a system for version control. Software-Practice & Experience, 15(7), 1985, 637-654.
  2. Rochkind, M.J.: The Source Code Control System, IEEE Transactions on Software Engineering, Volume 1(4), 1975, 364-370.
  3. a b c Marti, Don: Linus on Linux: The Linus Torvalds Interview Part 2 ("Linus talks about the process of managing kernel developer commits, selecting a revision control system and how he personally uses git.") Linux Magazine. 26.4.2009. Viitattu 28.4.2009. (englanniksi)
  4. http://www-306.ibm.com/software/awdtools/clearcase/features/index.html?S_CMP=wspace
  5. http://www-306.ibm.com/software/awdtools/clearcase/