17.03.2015 Views

Arenduse infrastruktuur ja konfiguratsioonihaldus

Arenduse infrastruktuur ja konfiguratsioonihaldus

Arenduse infrastruktuur ja konfiguratsioonihaldus

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

2011 november <br />

Ivo Mägi <br />

Twitter -­‐ @ivomagi


Miks see loeng? <br />

Te olete ju kõik tarkvara tootnud. Minu fiktsioon kuidas <br />

see käis: <br />

Saame õhtul enne tähtaega kokku <br />

Võtame kaasa hunniku pitsat <strong>ja</strong> koolat <br />

... <strong>ja</strong> programmeerime öö läbi <br />

Probleemid <br />

Koodi “kokku panek” <br />

Stabiliseerimine <br />

Töö kvaliteet <br />

Vastavus eesmärkidele <br />

Tehniliste probleemide tekkides ülesande üle jõu käimine <br />

...


Miks nii juhtus? <br />

Sest te olete tegelenud peamiselt häkkimisega <br />

Kindlasti tegin ma mõnele auditooriumis liiga, palun <br />

vabandust <br />

Teen siiski eelduse et enamik teist ei ole kokku <br />

puutunud professionaalse tarkvara tootmisega suurtes <br />

meeskondades <br />

Vaatamegi täna kuidas selles meeskonnas ellu jääda


Hoiatus: ju3 on kaldu <br />

Ühe distsipliini suunas <br />

Arenda<strong>ja</strong>te poole <br />

Ja selle distsipliini sees <br />

Vahendite poole


Hoiatus: ei ka<strong>ja</strong>stata olulisimat <br />

Hangi uusi teadmisi <br />

Loe teiste koodi <br />

Loe raamatuid/blogisid/foorumeid <br />

Õpi Googeldama <br />

Hakka Twitteris järgima oma valdkonna spetsialiste <br />

Mängi teiste tehnoloogiate <strong>ja</strong> keeltega <br />

Suhtle <br />

Usu, sind ümbritsevad inimesed on targad <strong>ja</strong> abivalmid


Aitab hoiatustest, tagasi loengu <br />

sisu juurde <br />

Tänases loengus räägime vahenditest <br />

Versioonihaldustarkvara <br />

Veahaldustarkvara <br />

Nõuete haldusvahendid <br />

Ehitamine <br />

Continuous Integration <br />

Mida vahenditest sisuliselt ei käsitle <br />

IDE <br />

Testimisplatvormid


Aga <strong>konfiguratsioonihaldus</strong>? <br />

The process of identifying and defining the Configuration <br />

Items in a system, recording and reporting the status of <br />

Configuration Items and Requests For Change, and <br />

verifying the completeness and correctness of <br />

Configuration Items.


Konfiguratsioonihaldusest <br />

räägimegi! <br />

Aga formaalse definitsiooni asemel räägime <br />

Planeerimisest kes mida <strong>ja</strong> millal teeb <br />

Pigem projektijuhtimise distsipliinist? <br />

Lähtekoodist kindla versiooni kasutusest <br />

Lihtsalt versioonihaldus? <br />

Rakenduse konfigureerimine <br />

Misas<strong>ja</strong>? <br />

Rakenduse ehitamine <br />

Kas ainult build skriptid või midagi veel? <br />

Ja kui aega jääb siis veel tervest hulgast as<strong>ja</strong>dest <br />

Nõuete haldusvahendid, a<strong>ja</strong>aruandlus, koodiülevaatus, etc.


Mida me siis tegelikult pidime tegema?


Mis vormis plaani koostada? <br />

“Reliisime siis kui featuurid X. Y <strong>ja</strong> Z on <br />

implementeeritud <strong>ja</strong> stabiliseeritud” <br />

versus <br />

“Reliisime iga kuu esimesel reedel”


Mis vahendiga plaani koostada? <br />

Whiteboard? <br />

MS Excel? <br />

MS Project? <br />

Tööülesannete haldusvahend? <br />

JIRA? <br />

Trac? <br />

FogBugz?


Vale küsimus -­‐ koostamise asemel <br />

keskendu muule <br />

Kuidas hiljem plaani täitmist jälgida? <br />

Kuidas saada lähtekoodi vaadates aru et – miks see <br />

konkreetne koodilõik üldse olemas on? <br />

Kuidas inimesed teada saavad kui nad midagi tegema <br />

peavad? <br />

… etc


Näide tööülesannete haldusest


Aups, selle ma unustasin realiseerida!


Nõuete haldus <br />

Miks üldse nõudeid hallata? Me oleme ju agiilsed! <br />

Mis versioon konkreetsest kasutusloost konkreetses <br />

versioonis peab olema realiseeritud? <br />

Mida tuleb võrreldes eelmise korraga täiendada? <br />

Kuidas ma saan teada kui mingid nõuded muutunud <br />

on? <br />

Kuidas ma näen kas see nõue on täies mahus juba <br />

realiseeritud?


Vahendid <br />

Dokumendihalduskeskkonnad (Sharepoint, Alfresco, <br />

etc) <br />

Dropbox <br />

Google Docs <br />

Wikis


Kuhu mu kood kadus!


Versioonihaldus <br />

Milleks versioonihaldus? <br />

Meeskonnatöö võimaldamine <br />

A<strong>ja</strong>loo säilitamine <br />

Versioonide haldus


Versioonihaldus -­‐ näide


Versiooneerimine: vahendid <br />

Tsentraalsed mudelid <br />

Vabad vahendid <br />

CVS – vana kuid väga levinud <br />

SVN – “uus <strong>ja</strong> parem CVS” <br />

Kommertsvahendid: <br />

Microsoft TFS, IBM ClearCase, Perforce, ... <br />

Hajusad <br />

Git <br />

Mercurial <br />


Versioneerimine: operatsioonid <br />

Checkout. Pull. <br />

Commit. Push. <br />

Update <br />

Merge <br />

Conflict <br />

Add


Keskne / <strong>ja</strong>otatud mudel <br />

Keskse repositooriumi kasutus: siiani enam levinud <br />

Hajutatud repositoorium: plussid <strong>ja</strong> miinused?


Märgendamine (i.k. tagging) <br />

Tag-­‐i abil märgitakse üks konkreetne versioon failide <br />

komplektist <br />

Näited: <br />

Release 10.1.2.0.0 – mingi konkreetse väl<strong>ja</strong>laske <br />

märgendamine et seda saaks hiljem reprodutseerida <br />

Before refactoring X – suuremahulise <br />

refaktoreerimiseelse seisu fikseerimiseks <br />

Branchpoint X – mingi kindla haru eraldamisele <br />

eelnenud seis <br />

Soovitav on märgendada alati kogu repositoorium


Harundus (i.k branching) <br />

Branch luuakse repositooriumist mingi haru <br />

eraldamiseks. <br />

Näiteks: <br />

Arenda<strong>ja</strong>te isoleerimiseks üksteisest <br />

Toodangus oleva versiooni toetamiseks (paralleelselt <br />

uue arendusega) <br />

Eksperimenteerimiseks <br />

Staging mudeli kasutamiseks: kood propageeritakse <br />

stabiilsest harust vähem stabiilse(te)sse <br />

Mis on harumudeli kasutamise negatiivseks <br />

aspektiks?


Branching: väl<strong>ja</strong>lasete juhImisel <br />

Erinevad võimalused <br />

Harumudelit ei kasutada, koodibaas külmutatakse <br />

stabiliseerimiseks <br />

Eraldatakse haru väl<strong>ja</strong>laske tekkimisel <br />

Integreeritakse pidevalt


Branching: koodi külmutamine


Branching: haru eraldamine


Branching: pidev integreerimine


Kuidas ma selle rakenduse nüüd õiget värvi saingi?


Miks konfigureerida? <br />

Erinevused keskkondade vahel <br />

Arendus vs test vs toodang ärirakenduste puhul <br />

Toodangukeskkondade erinevus desktop – rakendustel <br />

Multi-­‐tenancy lahendused <br />

Erinevad litsentsitingimused (basic vs enterprise) <br />

...


Rakenduse konfigureerimine <br />

Millal konfigureerida? <br />

Koodi tasemel (branching)? <br />

Ehitamise a<strong>ja</strong>l? <br />

Paigalduse a<strong>ja</strong>l? <br />

Rakenduse töö a<strong>ja</strong>l?


Konfigureerimine koodi tasemel <br />

Millal kasutada? <br />

Erinev riistvara/OS <br />

Erinevad paketid (basic / standard / enterprise) <br />

Mida silmas pidada: <br />

Vähene läbipaistvus <br />

Maksimeeri ühisosa – vastasel juhul on lihtsam teha <br />

eraldi projektid


Konfigureerimine ehitamise a<strong>ja</strong>l <br />

Millal kasutada <br />

Erinevad platvormid <br />

Erinevad keskkonnad (arendus / test / toodang) <br />

Mida silmas pidada <br />

Läbipaistvus on parem kui koodi tasemel branchides <br />

Võib saastada koodi või ehitusprotsessi (#IFDEF <br />

konstruktsioonid C koodis?)


Konfig. paigalduse <strong>ja</strong> töö a<strong>ja</strong>l <br />

Mida konfigureerida? <br />

Andmeallikad <br />

Rakenduse keelsus / lokaalsus <br />

Väliste liideste spetsiifika <br />

Mida silmas pidada? <br />

Paigaldusprotsessi konfigureerimine ei ole tihti <br />

kaasatud versioonihaldusesse – minimaalselt peab <br />

olema kaasatud protsessi tasemel <br />

Konfiguratsiooniga liialdamine


Miks mina pean siin jälle kaks tundi istuma <strong>ja</strong> toodangusse <br />

paigaldust koostama?


Ehitamine <br />

Milleks ehitatakse? <br />

Mugavus/kiirus <br />

Automatiseeritavus <br />

Korratavus <br />

Vigade vältimine <br />

Millega ehitatakse? <br />

Shelli skriptid <br />

Make <br />

Ant <br />

Maven <br />

IDEs <br />

... <br />

Mida ehitamise käigus <br />

tehakse? <br />

Kompileerimine <br />

Käivitamine <br />

Koodi genereerimine <br />

Andmebaasiskriptid <br />

Automaatne testimine <br />

Nightly builds <br />

Sõltuvuste ma<strong>ja</strong>ndamine


Ehitamine -­‐ näide


Ehitamine väl<strong>ja</strong>laskeprotsessis <br />

Konfiguratsioon ehitamise a<strong>ja</strong>l <br />

Sõltuvuste haldus <br />

Integreeritus paigaldusprotsessi


Sõltuvuste haldus <br />

Sõltuvused erinevatest välistest teekidest (DLL, ZIP, <br />

JAR, RPM, ...) <br />

Kuidas hallata? <br />

lib/-­‐ kataloog rakenduse lähtekoodi repositooriumis? <br />

Kasutada vahendeid <br />

Maven, Ivy <br />

Millal millist lähenemist kasutada?


Con3nuous Integra3on <br />

Milleks va<strong>ja</strong>lik? <br />

Ei tohi koosneda ainult rakenduse kokku ehitamisest <br />

Paigalduse testimine <br />

Funktsionaalsete testide käivitamine <br />

Jõudlustestide käivitamine <br />

Koodianalüsaatorite käivitamine <br />

Meetrika kogumine <br />

Mida kasutada? <br />

Hudson-­‐Jenkins <br />

CruiseControl <br />

Atlassian Bamboo


ConInuous integraIon: näide


Kuidas ma nüüd selle exe käima saan?


Probleemid mis tuleb lahendada <br />

Kuidas käitutakse versioonivahetuse a<strong>ja</strong>l <br />

Rakenduse töö seiskamine? <br />

Kasuta<strong>ja</strong>te migreerimine uuele platvormile <br />

Koheselt? <br />

“Vanad kasuta<strong>ja</strong>d” aeguvad vanal versioonil? <br />

Kuidas uuendatakse väliseid ressursse? <br />

Andmebaas <br />

LDAP <br />

Failisüsteem <br />

...


Kas midagi muutus ka?


Mis rakenduses uue versiooniga <br />

muutunud on? <br />

Läbipaistvus lõppkasuta<strong>ja</strong>le / telli<strong>ja</strong>le <br />

Automaatselt genereeritav tööülesannete halduse <strong>ja</strong> <br />

versioonihalduse integratsioonist <br />

Automaatne = integreeritud rakenduse <br />

ehitusskriptidesse või paigaldusse <br />

Eraldatud sisemised tööülesanded ning lõppkasuta<strong>ja</strong>le <br />

mõistetav funktsionaalsus


Aitäh! <br />

Kui on küsimusi -­‐ @ivomagi või ivo ät webmedia dot ee


Viited <br />

One book to rule them all: <br />

Andrew Hunt, David Thomas – “The Pragmatic <br />

Programmer: From Journeyman to Master”, 1999, <br />

Addison-­‐Wesley

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!