Arenduse infrastruktuur ja konfiguratsioonihaldus
Arenduse infrastruktuur ja konfiguratsioonihaldus
Arenduse infrastruktuur ja konfiguratsioonihaldus
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