25
Daniele Mondello Continuous Integration e High Quality Code

Continuous Integration e High Quality Code

Embed Size (px)

DESCRIPTION

In queste slide, presentate durante il Google Developer Group Dev Fest Mediterranean 2014 vi è una introduzione alla "Continuous integration" una pratica di sviluppo software dove i membri di un team integrano il loro lavoro frequentemente.Sono inoltre presentati alcuni tool integrabili in una "build" per misurare la qualità del codice PHP così da rispettare diverse metriche ed avere codice di qualità.

Citation preview

Page 1: Continuous Integration e High Quality Code

Daniele Mondello

Continuous Integration e High Quality Code

Page 2: Continuous Integration e High Quality Code

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

Page 3: Continuous Integration e High Quality Code

19863

Diego!

Page 4: Continuous Integration e High Quality Code

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

Page 5: Continuous Integration e High Quality Code

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

Page 6: Continuous Integration e High Quality Code

Cosa è un Control Version System?6

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

CVS

Page 7: Continuous Integration e High Quality Code

CVS: GIT7

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

Page 8: Continuous Integration e High Quality Code

Funzionamento GIT8

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

Page 9: Continuous Integration e High Quality Code

FLUSSO DI LAVORO9

Build Privata Server 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

Page 10: Continuous Integration e High Quality Code

MOTORE CI e BUILD10

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

Page 11: Continuous Integration e High Quality Code

JENKINS: I PROGETTI11

Page 12: Continuous Integration e High Quality Code

JENKINS: LA BUILD 1/212

Page 13: Continuous Integration e High Quality Code

JENKINS: LA BUILD 2/213

Page 14: Continuous Integration e High Quality Code

Metriche del software14

Affidabilità

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

Efficienza Sicurezza Manutenibilità

High Quality Code

Page 15: Continuous Integration e High Quality Code

PHPCSPHP Code Sniffer

Tools: PHPLOC15

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

Page 16: Continuous Integration e High Quality Code

PHPCSPHP Code Sniffer

Tools: PHP DEPEND16

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

Page 17: Continuous Integration e High Quality Code

PHPCSPHP Code Sniffer

Tools: PHP DEPEND17

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.

Page 18: Continuous Integration e High Quality Code

PHPCSPHP Code Sniffer

Tools: PHP DEPEND18

PHP DEPEND

PHPCPDCopy/Paste Detector

PHPMDPHP Mass Detector

PHPLOCPHP Lines of Code

Software che esegue l'analisi statica del codice sorgente.

Page 19: Continuous Integration e High Quality Code

PHPCSPHP Code Sniffer

Tools: PHP Mess Detector19

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

Page 20: Continuous Integration e High Quality Code

PHPCSPHP Code Sniffer

Tools: PHP Mess Detector20

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.

Page 21: Continuous Integration e High Quality Code

PHPCSPHP Code Sniffer

Tools: PHP Code Sniffer21

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

Page 22: Continuous Integration e High Quality 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 Sniffer22

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

Page 23: Continuous Integration e High Quality Code

PHPCSPHP Code Sniffer

Tools: PHP Code Sniffer23

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.

Page 24: Continuous Integration e High Quality Code

PHPCSPHP Code Sniffer

Tools: PHPCPD24

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

Page 25: Continuous Integration e High Quality Code

Daniele Mondello

GRAZIE!

[email protected]

@dmondello

Daniele.Mondello

Continuous Integration e High Quality Code