JavaScript è ormai ovunque nel mondo dello sviluppo web, è sbarcato persino sul server, la produzione di codice è aumentata a dismisura, framework e librerie sono spuntati come funghi, ma... siamo sicuri di mandare in produzione codice di qualità? quali strumenti e quali tecniche abbiamo a disposizione per aumentare la confidenza circa la bontà di ciò che scriviamo? Quali strategie possiamo adottare per migliorare il ciclo di vita delle nostre soluzioni e le attività di sviluppo?
In questa sessione proveremo a illustrare come organizzare la codebase di una tipica solution JavaScript, quali strategie adottare per migliorare la qualità del codice a cominciare dallo unit testing, quali strumenti utilizzare per automatizzare tutte le attività ripetitive a valle della scrittura del codice,
L'obiettivo è quello di proporre un modo per disciplinare le attività di sviluppo e rendere il più possibile confortevole la vita professionale dello sviluppatore web.
5. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Code quality
• JavaScript 2015: abbiamo a disposizione molta potenza di fuoco per
sviluppare le nostre applicazioni, decine di framework e librerie
• Ma “La potenza è nulla senza controllo”: dobbiamo assicurarci che il
nostro codice sia di qualità
• Non presenti gli errori e le criticità più comuni insite nel linguaggio
• Si attenga a pratiche di buon design (patterns, patterns, patterns)
• Sia privo di difetti funzionali e non funzionali (unit & integration testing)
9. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
JavaScript design & idiom patterns
• Affidarsi sempre a pratiche di buon design anche per applicazioni di
piccola entità
• Sfruttare i pattern idiomatici più importanti di JavaScript
• Module pattern
• Scegliere e applicare un presentation pattern come base fondante
dello sviluppo della logica client
• MVC
• MVVM
• Functional Event Stream (React, Bacon, …)
11. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Node.JS, Npm, Bower
• Node.JS NON è solo un ottimo web server
• Node.JS è ANCHE un ambiente di processo in cui far
girare moduli applicativi
• Npm è il package manager più diffuso in ambito sviluppo
JavaScript, permette di gestire il download e
l’installazione dei moduli applicativi Node.JS
• Bower è uno dei più utilizzati library & framework
manager, permette di gestire il download e l’installazione
delle librerie JavaScript di terze parti
12. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
demo
Installare gli strumenti e le librerie
13. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
“Cerbero, fiera crudele e diversa”
14. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
JSLint
• Quando si parla di JavaScript code quality JSLint è il Re dei Re
• Ideato e implementato da Duoglas Crockford forse la massima
autorità mondiale in fatto di linguaggio JavaScript
• Sostanzialmente è un sesquipedale rompiballe fondamentale
controllore della qualità del codice scritto
• Scova e segnala i più comuni errori
• Strutturazione del codice
• Verifica delle specificità del linguaggio (hoisting, …)
• Potenziali criticità legate alle Bad Parts di JavaScript
16. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Jasmine BDD
• Jasmine è uno dei numerosi framework di unit testing per
JavaScript
• È fortemente orientato al BDD (Behavior Driven
Development)
• Offre un ottimo supporto al mocking e al test-double
• Permette di testare codice asincrono
17. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Karma (adattamento del
termine sanscrito kārma (devanagari: कार्म),
aggettivo derivante dal sostantivo
neutro karman (devanagari: कर्मन्))
18. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Karma
• Karma è un ambiente integrato di esecuzione di test
• È in grado di eseguire test dei più diffusi framework di unit testing
(Mocha, Jasmine, QUnit)
• Permette di testare il codice su tutti i browser più importanti
pilotandone l’esecuzione(compreso Phantom.JS)
• Il suo funzionamento è basato su file di configurazione json
21. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Processo di build
• Il codice che scriviamo NON è lo stesso che va in produzione (vero?!?)
• Anche solo la minificazione del codice modifica il sorgente che verrà
interpretato ed eseguito dal browser rispetto alla versione scritta
dallo sviluppatore
• È necessario testare il codice di produzione esattamente come quello
di sviluppo
• Si prospetta quindi un vero e proprio processo di build che coinvolge
la minificazione e il test del codice minificato
23. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Automazione della build
• Il processo di build è operativamente oneroso e a bassissimo valore
aggiunto per lo sviluppatore
• È necessario trovare il modo di automatizzare l’intero processo nel
modo più semplice e ripetibile possibile
25. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Gulp! Devo automatizzare :-S
• Gulp è un ambiente di esecuzione di task di processo
• È basato sul concetto di plug-in ognuno dei quali permette di
eseguire una particolare operazione (minificazione, test, rename,
copy, … ci sono letteralmente migliaia di plug-in)
• Ogni task si basa su uno stream di file (lista di file sorgente) su cui
vengono applicate le singole operazioni sequenzialmente
• Il suo funzionamento è basato su file di configurazione json
26. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
demo
Automatizzare il processo di build
27. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Ci sarebbe anche la Page Automation…
• Se volessimo (ma proprio se volessimo) completare il processo di
verifica della qualità del codice sarebbe necessario anche testare
l’applicazione web finale
• Esistono alcuni tool che permettono di pilotare tramite scripting
replicabile le azioni da eseguire sulla pagina web e verificarne il
risultato
• Phantom.JS
• Selenium
28. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Un po’ di autopromozione ;-)
29. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Q&A
Tutto il materiale di questa sessione su
http://www.communitydays.it/
Lascia subito il feedback su questa sessione,
potrai essere estratto per i nostri premi!
Seguici su
Twitter @CommunityDaysIT
Facebook http://facebook.com/cdaysit
#CDays15
Editor's Notes
Slide da mostrare prima di iniziare la sessione – non rimuovere!