SlideShare a Scribd company logo
1 of 29
WEB05 – Code quality e test
automatizzati con JavaScript
Roberto Messora
roberto.messora@ugidotnet.org - @robymes
http://blogs.ugidotnet.org/robymes
#CDays15 – Milano 24, 25 e 26 Marzo 2015
Grazie a
Platinum
Sponsor
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Agenda
• Qualità
• Struttura
• Strumenti
• Build
• Automazione
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
#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)
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
“Questa è struttura”
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Struttura della soluzione JavaScript
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Patterns
#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, …)
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Strumenti
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
demo
Installare gli strumenti e le librerie
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
“Cerbero, fiera crudele e diversa”
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Karma (adattamento del
termine sanscrito kārma (devanagari: कार्म),
aggettivo derivante dal sostantivo
neutro karman (devanagari: कर्मन्))
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
demo
Unit testing
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Build
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Automazione
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
demo
Automatizzare il processo di build
#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
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Un po’ di autopromozione ;-)
#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

More Related Content

What's hot

Best Practices on SQL Server
Best Practices on SQL ServerBest Practices on SQL Server
Best Practices on SQL ServerGianluca Hotz
 
Cassandra + Hadoop: Analisi Batch con Apache Cassandra
Cassandra + Hadoop: Analisi Batch con Apache CassandraCassandra + Hadoop: Analisi Batch con Apache Cassandra
Cassandra + Hadoop: Analisi Batch con Apache CassandraJeremy Hanna
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query ProcessingGianluca Hotz
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query ProcessingGianluca Hotz
 
Azure Saturday Pordenone 2018 IoT real time processing for lazy developer
Azure Saturday Pordenone 2018 IoT real time processing for lazy developerAzure Saturday Pordenone 2018 IoT real time processing for lazy developer
Azure Saturday Pordenone 2018 IoT real time processing for lazy developerAlessio Biasiutti
 
Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)Davide Mauri
 
SQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWSSQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWSGianluca Hotz
 
Db2 11.1: l'evoluzione del Database secondo IBM
Db2 11.1: l'evoluzione del Database secondo IBMDb2 11.1: l'evoluzione del Database secondo IBM
Db2 11.1: l'evoluzione del Database secondo IBMJürgen Ambrosi
 
Come utilizzare AWS DMS per migrare SQL Server ad Amazon Aurora
Come utilizzare AWS DMS per migrare SQL Server ad Amazon AuroraCome utilizzare AWS DMS per migrare SQL Server ad Amazon Aurora
Come utilizzare AWS DMS per migrare SQL Server ad Amazon AuroraGianluca Hotz
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databasesGianluca Hotz
 
SQL Server Workload Profiling
SQL Server Workload ProfilingSQL Server Workload Profiling
SQL Server Workload ProfilingGianluca Hotz
 
SQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed DisksSQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed DisksGianluca Hotz
 
Azure SQL Database Ledger
Azure SQL Database LedgerAzure SQL Database Ledger
Azure SQL Database LedgerGianluca Hotz
 
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on Azure
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on AzureSQL Saturday 871 - Sardegna 2019 - SQL Server DR on Azure
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on AzureMarco Obinu
 
Mettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql serverMettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql serverGianluca Hotz
 
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 1
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 1MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 1
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 1MongoDB
 
CDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo AzureCDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo AzureDavide Benvegnù
 

What's hot (20)

Best Practices on SQL Server
Best Practices on SQL ServerBest Practices on SQL Server
Best Practices on SQL Server
 
Cassandra + Hadoop: Analisi Batch con Apache Cassandra
Cassandra + Hadoop: Analisi Batch con Apache CassandraCassandra + Hadoop: Analisi Batch con Apache Cassandra
Cassandra + Hadoop: Analisi Batch con Apache Cassandra
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query Processing
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query Processing
 
Azure Saturday Pordenone 2018 IoT real time processing for lazy developer
Azure Saturday Pordenone 2018 IoT real time processing for lazy developerAzure Saturday Pordenone 2018 IoT real time processing for lazy developer
Azure Saturday Pordenone 2018 IoT real time processing for lazy developer
 
Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)Datarace: IoT e Big Data (Italian)
Datarace: IoT e Big Data (Italian)
 
SQL Server in AWS
SQL Server in AWSSQL Server in AWS
SQL Server in AWS
 
SQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWSSQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWS
 
Db2 11.1: l'evoluzione del Database secondo IBM
Db2 11.1: l'evoluzione del Database secondo IBMDb2 11.1: l'evoluzione del Database secondo IBM
Db2 11.1: l'evoluzione del Database secondo IBM
 
SQL Server in AWS
SQL Server in AWSSQL Server in AWS
SQL Server in AWS
 
Come utilizzare AWS DMS per migrare SQL Server ad Amazon Aurora
Come utilizzare AWS DMS per migrare SQL Server ad Amazon AuroraCome utilizzare AWS DMS per migrare SQL Server ad Amazon Aurora
Come utilizzare AWS DMS per migrare SQL Server ad Amazon Aurora
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databases
 
SQL Server Workload Profiling
SQL Server Workload ProfilingSQL Server Workload Profiling
SQL Server Workload Profiling
 
SQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed DisksSQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed Disks
 
Azure sql database
Azure sql databaseAzure sql database
Azure sql database
 
Azure SQL Database Ledger
Azure SQL Database LedgerAzure SQL Database Ledger
Azure SQL Database Ledger
 
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on Azure
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on AzureSQL Saturday 871 - Sardegna 2019 - SQL Server DR on Azure
SQL Saturday 871 - Sardegna 2019 - SQL Server DR on Azure
 
Mettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql serverMettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql server
 
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 1
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 1MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 1
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 1
 
CDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo AzureCDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
CDays15 - AZ08 - DocumentDB: il NoSql secondo Azure
 

Viewers also liked

Viewers also liked (7)

Javascript Unit Testing
Javascript Unit TestingJavascript Unit Testing
Javascript Unit Testing
 
Code metrics
Code metricsCode metrics
Code metrics
 
SonarQube - Should I Stay or Should I Go ?
SonarQube - Should I Stay or Should I Go ? SonarQube - Should I Stay or Should I Go ?
SonarQube - Should I Stay or Should I Go ?
 
Sonarqube
SonarqubeSonarqube
Sonarqube
 
Sonar Metrics
Sonar MetricsSonar Metrics
Sonar Metrics
 
Sonar Overview
Sonar OverviewSonar Overview
Sonar Overview
 
SONAR
SONAR SONAR
SONAR
 

Similar to Code quality e test automatizzati con JavaScript

Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page ApplicationsRoberto Messora
 
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...Marco Parenzan
 
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...Gianluca Carucci
 
Single Page web Application
Single Page web ApplicationSingle Page web Application
Single Page web ApplicationRoberto Messora
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Giuseppe Vizzari
 
Da JavaScript a TypeScript
Da JavaScript a TypeScriptDa JavaScript a TypeScript
Da JavaScript a TypeScriptRoberto Messora
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaXPeppers
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinNicolò Carandini
 
Musixmatch Cloud: Microsoft Azure Media Services and UGC Content
Musixmatch Cloud: Microsoft Azure Media Services and UGC ContentMusixmatch Cloud: Microsoft Azure Media Services and UGC Content
Musixmatch Cloud: Microsoft Azure Media Services and UGC ContentLoreto Parisi
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDDotNetCampus
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source controlAlessandro Alpi
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloudRiccardo Zamana
 
PASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerPASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerAlessandro Alpi
 
DbUp - A real case of database migration
DbUp - A real case of database migrationDbUp - A real case of database migration
DbUp - A real case of database migrationAndrea Cirioni
 
Azure Machine Learning (Italian)
Azure Machine Learning (Italian)Azure Machine Learning (Italian)
Azure Machine Learning (Italian)Davide Mauri
 

Similar to Code quality e test automatizzati con JavaScript (20)

Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page Applications
 
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...
Sviluppare applicazioni web (completamente) on-line con Visual Studio Online ...
 
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...
CommunityDays 2015 - NPM, GRUNT E BOWER: IL NUOVO PACKAGE MANAGER DI VISUAL S...
 
Single Page web Application
Single Page web ApplicationSingle Page web Application
Single Page web Application
 
Sviluppare SPA con Vue
Sviluppare SPA con VueSviluppare SPA con Vue
Sviluppare SPA con Vue
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)
 
Sviluppare SPA con Vue.js
Sviluppare SPA con Vue.jsSviluppare SPA con Vue.js
Sviluppare SPA con Vue.js
 
Da JavaScript a TypeScript
Da JavaScript a TypeScriptDa JavaScript a TypeScript
Da JavaScript a TypeScript
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con Xamarin
 
Cmdays mxm ugc
Cmdays mxm ugcCmdays mxm ugc
Cmdays mxm ugc
 
Musixmatch Cloud: Microsoft Azure Media Services and UGC Content
Musixmatch Cloud: Microsoft Azure Media Services and UGC ContentMusixmatch Cloud: Microsoft Azure Media Services and UGC Content
Musixmatch Cloud: Microsoft Azure Media Services and UGC Content
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
[ITA] Sql Saturday 355 in Parma - New SQL Server databases under source control
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
 
PASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL ServerPASS Virtual Chapter - Unit Testing su SQL Server
PASS Virtual Chapter - Unit Testing su SQL Server
 
DbUp - A real case of database migration
DbUp - A real case of database migrationDbUp - A real case of database migration
DbUp - A real case of database migration
 
Azure Machine Learning (Italian)
Azure Machine Learning (Italian)Azure Machine Learning (Italian)
Azure Machine Learning (Italian)
 

More from Roberto Messora

Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerRoberto Messora
 
Docker as a hosting target
Docker as a hosting targetDocker as a hosting target
Docker as a hosting targetRoberto Messora
 
Da imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JSDa imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JSRoberto Messora
 
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extension
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extensionEvent streaming pipeline with Windows Azure and ArcGIS Geoevent extension
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extensionRoberto Messora
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webRoberto Messora
 
Self-adaptive geospatial web applications
Self-adaptive geospatial web applicationsSelf-adaptive geospatial web applications
Self-adaptive geospatial web applicationsRoberto Messora
 
Web technologies and patterns in HTML5 mapping
Web technologies and patterns in HTML5 mappingWeb technologies and patterns in HTML5 mapping
Web technologies and patterns in HTML5 mappingRoberto Messora
 
MV* presentation frameworks in Javascript: en garde, pret, allez!
MV* presentation frameworks in Javascript: en garde, pret, allez!MV* presentation frameworks in Javascript: en garde, pret, allez!
MV* presentation frameworks in Javascript: en garde, pret, allez!Roberto Messora
 

More from Roberto Messora (11)

Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
 
Seminario Big Data
Seminario Big DataSeminario Big Data
Seminario Big Data
 
Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker Container
 
Docker as a hosting target
Docker as a hosting targetDocker as a hosting target
Docker as a hosting target
 
Da imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JSDa imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JS
 
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extension
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extensionEvent streaming pipeline with Windows Azure and ArcGIS Geoevent extension
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extension
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
 
Self-adaptive geospatial web applications
Self-adaptive geospatial web applicationsSelf-adaptive geospatial web applications
Self-adaptive geospatial web applications
 
Web technologies and patterns in HTML5 mapping
Web technologies and patterns in HTML5 mappingWeb technologies and patterns in HTML5 mapping
Web technologies and patterns in HTML5 mapping
 
Usare Knockout JS
Usare Knockout JSUsare Knockout JS
Usare Knockout JS
 
MV* presentation frameworks in Javascript: en garde, pret, allez!
MV* presentation frameworks in Javascript: en garde, pret, allez!MV* presentation frameworks in Javascript: en garde, pret, allez!
MV* presentation frameworks in Javascript: en garde, pret, allez!
 

Code quality e test automatizzati con JavaScript

  • 1. WEB05 – Code quality e test automatizzati con JavaScript Roberto Messora roberto.messora@ugidotnet.org - @robymes http://blogs.ugidotnet.org/robymes
  • 2. #CDays15 – Milano 24, 25 e 26 Marzo 2015 Grazie a Platinum Sponsor
  • 3. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Agenda • Qualità • Struttura • Strumenti • Build • Automazione
  • 4. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 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)
  • 6. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 “Questa è struttura”
  • 7. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Struttura della soluzione JavaScript
  • 8. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Patterns
  • 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, …)
  • 10. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Strumenti
  • 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
  • 15. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 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
  • 19. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 demo Unit testing
  • 20. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Build
  • 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
  • 22. #CDays14 – Milano 25, 26 e 27 Febbraio 2014 Automazione
  • 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
  • 24. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  • 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

  1. Slide da mostrare prima di iniziare la sessione – non rimuovere!
  2. Ultima slide, obbligatoria