Post on 28-Jun-2015
description
Daniele Mondello
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
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
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
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
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
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
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
JENKINS: I PROGETTI11
JENKINS: LA BUILD 1/212
JENKINS: LA BUILD 2/213
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
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
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
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.
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.
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
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.
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
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
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.
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
Daniele Mondello
GRAZIE!
info@danielemondello.it
@dmondello
Daniele.Mondello
Continuous Integration e High Quality Code