Académique Documents
Professionnel Documents
Culture Documents
R. Turco
Premesse
Dal 1980 in poi sono nate nuove filosofie e ottime metodologie: ITIL, CMM, XP, TDD Processi e metodologie sono best practices consolidate in vari anni Le best practices non sono una panacea per tutto, n portano ad ununica soluzione Sostanzialmente esse cercano di rendere le attivit coordinate, ripetibili industrialmente, definite e ottimizzate Insegnano, in varie forme, di esercitare bene le responsabilit Plan, Do, Check, Act (PDCA) Necessitano comunque di un oculato tailoring, una customizzazione del processo rispetto ai propri task e progetti Il Project Manager si deve sforzare sempre a trovare un equilibrio tra vari elementi non ortogonali del processo:
Utilit, Efficacia, Efficienza (Processo Agile e Light) Portata delle User Stories (e relativa Pianificazione) Qualit Tempo
Premesse
Definizione da Wikipedia : In software engineering, continuous integration (CI) implements continuos processes of applying quality control small pieces of effort, applied frequently Questo perch in un progetto sw leffort aumenta esponenzialmente con: o numero di bug o numero di componenti sw/hw o tempo trascorso dallultima integrazione
Lidea di rimpiazzare una grande fase di integrazione con tante fasi, qualitative, frequenti, costituite da piccole integrazioni e refactoring, mantenendo il processo di sviluppo sempre in esecuzione, nel senso letterale della parola.
E, quindi, una metodologia innanzitutto nelle mani del team di realizzazione, ma riusabile anche in altri settori di responsabilit.
Mentre lOO fonde e sfuma le fasi di Analisi e Sviluppo, il CI fa lo stesso con il resto del processo di sviluppo.
Articolo consigliato : http://martinfowler.com/articles/continuousIntegration.html 4
Martin Fowler
Ogni problema di integrazione se scoperto tardi tende ad aumentare i rischi e a creare punti oscuri nelle pianificazioni.
7
Filosofia del CI Il server CI lavora continuamente e guida la qualit, catturando dati e pubblicandoli: lidea di fare tanta piccola qualit, da affinare ogni volta. Tempo fa il sw era progettato e realizzato come una abitazione, con solide fondamenta - il pi delle volte - fatte con pilastri di cemento armato, ma quasi sempre con pareti di carton-gesso! Nel sw engineering la qualit non si pu acquistare ma si deve introdurre a step iterativi (Quality is free!). Chi pu usare il CI Ogni tipologia di progetto e/o team; adatto anche ai team distribuiti geograficamente. Sono preferibili i progetti iterativi, prototipali con XP e TDD. Quando usare il CI Ad inizio di un nuovo progetto (cum grano salis) e durante lo sviluppo (not just a compiling!) e con visibilit e utilit per tutti gli attori dello sviluppo.
Si riducono i rischi: sono pi facili le predizioni e ci sono meno punti ciechi nel progetto. I problemi vengono rilevati in anticipo (Timely Feedback). Le integrazioni non sono pi lunghe e difficile da prevedere come durata.
Si riducono le attivit manuali, aumentano i check-in, aumenta il tempo di progettazione e sviluppo (incoraggia il Constant Design Improvement), aumenta la qualit del sw (Coding Standard), aumenta il tempo per le analisi e le fix, aumenta il deploying ed il test di sw distribution, migliora la produttivit. Aumenta la confidenza del team col sw e aumenta il senso di ownership comune del software (Collective Code Ownership)
9
Il build self-testing riduce il backlog dei bugs; le regressioni automatiche dei test salvano tempo e permettono di adattare meglio il progetto al cambiamento I bug in fase di sviluppo vengono rimossi rapidamente e facilmente, evitando che si accumulino e che facciano aumentare la complessit di sviluppo e test. Leffetto che a lungo termine, in collaudo e produzione, tendenzialmente si riducono i bug sw rilevati. Quando i test falliscono possibile usare una tecnica di diff debugging termine introdotto da Martin Fowler cio disponendo di una build che confronta automaticamente i sorgenti tra una build e la successiva, accelerando i tempi di individuazione. In tal modo vengono rilevate le differenze dove, al 99%, localizzato il bug introdotto nella seconda build. Le differenze sono note anche a coloro che non sono stati gli autori delle modifiche. Le Best Practices di programmazione sono suggerite dallanalisi statica del sw ad ogni build (con checkstyle, findbugs, etc, ovvero plugin analoghi a quelli di Eclipse), mantenendo alta la qualit del sw da parte dei programmatori.
10
Ogni build pu essere taggata, in modo che sia riconoscibile la versione di tutti gli artefatti della build. Uno strumento in tal senso utile a verificare la versione. Le catene di test di stress massivo e multi-thread possono aiutare a individuare problemi infrastrutturali ei limiti di carico a cui il sistema o il prototipo pu resistere Si ha una completa history del progetto e di chi accede al server Jenkins Un unico strumento condiviso tra Team Development e Team Build Manager, ma consigliabile su server Jenkins separati o se identico con utenze daccesso separate Svantaggio: aumenta leffort iniziale per organizzarsi in termini XP+CI e implementare le Build Jobs di Jenkins Curiosit: Esistono molte offerte di cloud computing PaaS che offrono server virtuali e Jenkins come server per il proprio CI! (es: OpenShift di RedHat https://openshift.redhat.com, Cloudbees, Shining Panda etc )
11
Responsabilit?
Project Manager e Team di Realizzazione
Responsabilit?
Build Manager e Team di Build
Jenkins 1
Jenkins 2
Quando?
Durante lo sviluppo del sw
Quando?
Durante la build sw
Output
sviluppo sw, Checkstyle, Findbugs (vulnerability), Complexity, Produttivit
Output
Javadoc
Output
Individuare bug grazie alle differenze dei sorgenti tra due build
Output
Copertura test Tempi di esecuzione Correttezza Funzionale/Non Funzionale Esercibilit (log, etc) Usabilit
Output
Build del software Uso coerente delle risorse come librerie, memoria, etc
UML
(Modalit di documentazione standardizzata)
Azioni?
Azioni?
Le azioni correttive hanno senso durante lo sviluppo del sw e prima del test del collaudo
Durante la build sw
12
Gli step classici di build sw, deploying, distribution sono solo i 3/7 della pipeline
Pipeline of builds
qualit
doc diff debugging test build sw deploying distribution
13
14
Quale strumento
Esistono molti prodotti commerciali e non sul mercato per il Continuos Integration, per ogni linguaggio (vedi http://en.wikipedia.org/wiki/Continuous_integration):
Apache Continuum Apache Gump Beebox Bitten Cabie CruiseControl e CruiseControl.NET Draco e Draco.NET Jenkins CI (ex Hudson) Jetbrains Team City (commerciale) Microsofts Team Foundation Server (commerciale) Sin ThoughtWorks Go (commerciale) Urbancodes Anthill Pro (commerciale) etc.
Tutti i prodotti si basano su quanto il team di sviluppo ha gi implementato: pom (Maven), JUnit, Simulatori etc; Altri elementi di scelta del prodotto sono: filosofia partire in piccolo, per iniziare a comprendere Scegliere un qualcosa di semplice, intuitivo ed estendibile;
15
Jenkins CI Open Source, scritto in Java ed un war che gira in un web container creato da Kohsuche Kawakuchi in casa Sun come Hudson, acquisito, poi, da Oracle.
ha una grande Community su Internet che lo sostiene, affiliato con Software in the Public Interest (SPI) NPO
ha una provata stabilit e semplicit usato da NASA, Uk Government, Deutsche Telecom, Alcatel, Yahoo!, Michelin, Sony etc. utilizzabile con sistemi operativi diversi (Linux, Windows, etc) utilizzabile per molti linguaggi e browser (Java, Groovy, Grails, Gradle, C, C++, Visual Studio, .NET, Ruby, PHP, Python, etc)
16
utilizzabile con qualsiasi repository CM ( Clear Case, TFS, SVN, GIT, PVCS, etc) molti i plug-in disponibili
estensibile, si possono sviluppare in proprio plug-in in Java su tematiche particolari
fornisce una console di comando centralizzata, facilmente configurabile e di monitoraggio del processo esiste un testo libero su Internet: Jenkins the definitive guide dispone di un sito con molta documentazione si basa sugli strumenti sviluppati (pom maven, ant, shell, cmd, test con JUnit)
17
La filosofia di base per un CI pratico racchiusa in poche regole cum grano salis:
Ridurre gli effetti di resistenza psicologica del team Non mettere il carro davanti ai buoi Fare le cose utili al momento giusto (durante) Seguire, con giudizio, il corso naturale del progetto Usare un processo iterativo, come ad esempio lExtreme Programming (XP)
Le fasi sono semplicemente: Fase 1: Inizio progetto nuovo (Watch Code nel Team di Sviluppo) si sviluppa e si collega Jenkins al CM Repository per build metriche, documentazione javadoc e UML (build documentale e di metriche come monitoraggio del sw) Fase 2: per ogni parte completata (Build Product nel Team di sviluppo) si dispone di parte del sw e dei POM si predispongono le build sw con Jenkins con finalit diverse dal Build Team
19
Fase 3: Integrazione e test (Run Tests e Publish Results nel Team di sviluppo) si predispongono i test unitari e di scenario con Jenkins si collegano i test a Jenkins per l'automazione Si ottengono metriche di produttivit, copertura dei test interni Fase 4: Build Product e Publish Results (nel Team di Build) Si coopera col Team di Build Si ottengono ulteriori metriche
20
Architettura pratica
21
Report - Metriche
22
23
Report - 3
24
25
26
27