continous delivery & hq code

26
Daniele Mondello Palermo 29/04/2013

Upload: daniele-mondello

Post on 15-Jul-2015

253 views

Category:

Software


4 download

TRANSCRIPT

Daniele MondelloPalermo 29/04/2013

Chi Sono2 About meNasco nel 1971 a Palermo e dopo un’ infanzia fatta di cartoni animati, Super Santos, libri e Coin-Up nell’estate dell’86 ricevo in dono un COMMODORE 64 che mi cambia la vita.

Daniele Mondello

• Management• Team Leader• Quality Manager• Web Architect• Healthcare IT Consultant• UX Expert

• Ubuntu, CentOS• Mac OSX• Windows• IOS• Android• Embedded OS: Raspbian,Pidora

• PHP (5 years) • Javascript (10 years) • ASP(12 years) • MySQL (5 years) • HTML, CSS3 (14 years) • Ruby, Rails (1 year)

DeveloperO.S.

General

Skill

19863

Diego!

Prodotto Industriale4

Ric. MercatoAn. Normative An. Rischi

Cond. Utilizzo

Sc. Prodotto

Req. Sistema

Man. Utente

An. Requisiti CONTINUOUS INTEGRATION-Test Responsive-Test Javascript-Ottimizzazione-Test Usability-Test Sicurezza

-Test C&P-Test Style-Test PHP-Test DB-TestW3C

REGOLE DI SVILUPPO

[Regole di Stile][Regole DB][Regole Documentazione Codice][Regole di Sviluppo][Regole di Sistema]

Casi D’uso Wireframes

Pr. Esecutivo

SOUP CVSServer CIProject

Management

BETA

SPERIMENTAZIONE

RILASCIO V. 1

Progettazione

Sviluppo

Cosa è la Continuous Integration?5

CVSCI

SERVER IDE

Continuous Integration

”E’ una pratica di sviluppo software dove i membri di un team integrano il loro lavoro frequentemente, almeno una volta al giorno. Ogni integrazione è verificata da una build automatica (inclusi i test) per individuare gli errori

d’integrazione il più rapidamente possibile.”

PM TOOL

…..e la Continuous Delivery?6

SVILUPPO INTEGRAZIONE BUILD QA Code DEPLOY

Continuous Integration

Continuous Delivery

Cosa è un Control Version System?7

E' un tool che permette il controllo di versione (versioning), cioè la gestione di versioni multiple di un insieme di informazioni.

CVS

CVS: GIT8

02Dividere lo sviluppo del progetto in più linee indipendenti , chiamati "rami ", che possono evolvere separatamente

03

Periodicamente ricombinare i rami in un processo per riconciliare le modifiche apportate in due o più ram

01

Esaminare lo stato di un progetto nel più breve tempo possibile

04

Mostrare le differenze tra le varie versioni del progetto

CVS

Funzionamento GIT9

File A

Version 1 Version 2 Version 3 Version 4 Version 5

File B

File C

File A

File C

File A1

File B

File C1

File B1 File B

File C2

File B1

File A1

File B

File C3

File B1

File A2

File B1

CVS

FLUSSO DI LAVORO10

Build PrivataServer CI

Lancio di una build privataLo sviluppatore effettua una Build Privata sulla propria postazione così da integrare eventual i cambiamenti effettuati dagli altri membri del team e verificato che l’integrazione dia un sistema funzionante.

Commit sul CVS del codiceLo sviluppatore conclusa l’attività effettua un commit sul repository del sistema di controllo di versione. 5

Lancio SCRIPT su server CII l s e r v e r d i C I a c c o r t o s i d e l camb iamento scar i ca i l cod ice aggiornato e lancia uno script di build così da integrare questi cambiamenti e da ricostruire il sistema e ri-testarlo ed a seguito del risultato della build, genera un feedback (es: email) visibile al team

CVS DELIVERY

MOTORE CI e BUILD11

Il sistema di CI viene utilizzato per:- collezionare il codice dai repository remoti- lanciare i test automatici- lanciare test statici sul codice- generare report più o meno complessi- effettuare delle misurazioni rispetto a delle metriche- notificare a chi di dovere

Privata

Test sul codiceTest PHPTest Javascript Deploy

MinifizzazioneCambio URLDisattivazione Warning

Pubblica

Test IntegrazioneProd. DocumentazioneTest Sicurezza

Differenti tipi di BUILD

CI SERVER

JENKINS: I PROGETTI12

CI SERVER

JENKINS: LA BUILD 1/213

CI SERVER

JENKINS: LA BUILD 2/214

CI SERVER

Metriche del software15

Affidabilità

Le metriche software sono degli standard per misurare alcune proprietà del software permettendo di valutare funzionalità e il rapporto costi/efficacia, così da realizzare software di qualità.

Efficienza Sicurezza Manutenibilità

High Quality Code

CI SERVER

PHPCSPHP Code Sniffer

Tools: PHPLOC16

Permette di misurare le dimensioni di un progetto PHP, ottenendo informazioni utili riguardanti il numero di elementi presenti.

PHP DEPEND

PHPCPDCopy/Paste Detector

PHPMDPHP Mass Detector

PHPLOCPHP Lines of Code

Informazioni sulle dimensioni di un progettolinee di codice, linee di codice commentate e non commentate, numero di classi,dimensione media delle classi, media di funzioni nelle classi.

Informazioni sulle complessità di un progettoComplessità ciclomatica rispetto alle linee di codice.

Informazioni sulle struttura Numero di Namespace, Interfacce, Classi( Astratte e Concrete), Numero di metodi (pubblici e Non), Numero Funzioni e Numero Costanti.

Autore: S. Bergmann

PHPCSPHP Code Sniffer

Tools: PHP DEPEND17

Software che esegue l'analisi statica del codice sorgente.

PHP DEPEND

PHPCPDCopy/Paste Detector

PHPMDPHP Mass Detector

PHPLOCPHP Lines of Code

Analizza il codice sorgente di un applicativo PHP e ne produce un albero sintattico astratto (AST)

In output genera:due grafici

PHPCSPHP Code Sniffer

Tools: PHP DEPEND18

PHP DEPEND

PHPCPDCopy/Paste Detector

PHPMDPHP Mass Detector

PHPLOCPHP Lines of Code

Coupling

Inheritance

Number Of Methods

Number Of Packages

Size & Complexity

Number of Classes

Lines Of Code

Cyclomatic Complexy

CALLS

FANOUT

Coupling

Average Num of Derived Classes

Inheritance

Average Hierarchy Height

Size & Complexity

Software che esegue l'analisi statica del codice sorgente.

PHPCSPHP Code Sniffer

Tools: PHP DEPEND19

PHP DEPEND

PHPCPDCopy/Paste Detector

PHPMDPHP Mass Detector

PHPLOCPHP Lines of Code

Software che esegue l'analisi statica del codice sorgente.

PHPCSPHP Code Sniffer

Tools: PHP Mess Detector20

Analizza il codice sorgente di un progetto PHP e cerca di estrarne i potenziali problemi, applicando un insieme predefinito di regole per l’analisi del codice.

PHP DEPEND

PHPCPDCopy/Paste Detector

PHPMDPHP Mass Detector

PHPLOCPHP Lines of Code Regole sulle

Dimensioni

Regole su Codice

inutilizzato

RegoleDesign

Regole attribuzione

nomi

PHPCSPHP Code Sniffer

Tools: PHP Mess Detector21

PHP DEPEND

PHPCPDCopy/Paste Detector

PHPMDPHP Mass Detector

PHPLOCPHP Lines of Code

Regole sulleDimensioni

Regole su Codice

inutilizzatoRegoleDesign

Cyclomatic Complexity

NPath Complexity

ExcessiveMethodLength

ExcessiveClassLength

ExcessivePublicCount

TooManyFields

ExcessiveClassComplexity

TooManyFields

UnusedPrivateField

UnusedLocalVariable

ExitExpression

EvalExpression

GotoStatement

NumberOfChildren

DepthOfInheritance

CouplingBetweenObjects

Regole attribuzione

nomi

ShortVariable

LongVariable

ShortMethodName

ConstructorWithName

ConstantNaming.

BooleanGetMethod.

PHPCSPHP Code Sniffer

Tools: PHP Code Sniffer22

Tool per l’analisi del codice che rileva violazioni delle convenzioni di scrittura (coding standard), così da aiutare a mantenere il codice pulito, consistente e manutenibile.

PHP DEPEND

PHPCPDCopy/Paste Detector

PHPMDPHP Mass Detector

PHPLOCPHP Lines of Code

AgaviAWS SDK for PHP (Amazon Web Services)Apache log4phpAssetic and BuzzAura Project and Solar FrameworkCakePHPComposer and PackagistContao Open Source CMSDoctrineDrupaleZ PublishTYPO3 FlowJackalopeJoomlaLaravelPEARPhalcon

PHPCSPHP Code Sniffer

Tools: PHP Code Sniffer23

PHP Framework Interoperability Group

PHP DEPEND

PHPCPDCopy/Paste Detector

PHPMDPHP Mass Detector

PHPLOCPHP Lines of Code

PhingphpBB

phpDocumentorPPI Framework

PrestaShopPropel

PyroCMSSabreDAV

SculpinStash

SugarCRMSymfony2

The community at largeWikibase and Semantic MediaWiki

Yii frameworkZend Framework 2

Zikula

PHPCSPHP Code Sniffer

Tools: PHP Code Sniffer24

Tool per l’analisi del codice che rileva violazioni delle convenzioni di scrittura (coding standard), così da aiutare a mantenere il codice pulito, consistente e manutenibile.

PHP DEPEND

PHPCPDCopy/Paste Detector

PHPMDPHP Mass Detector

PHPLOCPHP Lines of Code

PSR 1

PSR-1 Garantisce un elevato livello di interoperabilità tecnica tra codice PHP condiviso.

PSR-2 Fornisce una guida dello stile di codifica da adottare nella scrittura codice estendendo il PSR-1

PSR-3 Descrive una interfaccia comune per le librerie di log.

PSR 2

PSR 0

PSR 3 PSR 4

PSR-4 Descr ive un nuovo standard per l’autoloading

FPSR-0 descrive i requisiti necessari ai quali ci si deve uniformare per garantire l''interoperabilità tra gli autoloader.

PHPCSPHP Code Sniffer

Tools: PHPCPD25

Strumento che rivela la presenza di codice duplicato all’interno del codice sorgente

PHP DEPEND

PHPCPDCopy/Paste Detector

PHPMDPHP Mass Detector

PHPLOCPHP Lines of Code

PHP User Group PALERMOhttp://olomedia.it

GRAZIE!

[email protected]

@dmondello

daniele.mondello