SlideShare a Scribd company logo
1 of 19
Testing your databases
Effettuare unit testing con SQL Server database e tSQLt
Alessandro Alpi
Microsoft MVP – SQL Server dal 2008
Blog ITA: http://blogs.dotnethell.it/suxstellino
Blog ENG: http://suxstellino.wordpress.com/
Website: http://www.alessandroalpi.net
CTO Engage IT Services S.r.l.
www.engageitservices.it
Team leader (Agile)
Communities
Getlatestversion.it
Agenda
• Concetti di Unit Testing
• Perché Unit Testing su database
• Unit Testing framework
• Unit Testing solution
• Conclusioni
• Q&A
Parleremo di
• Development teams
• Codice e funzionalità
• Evitare e prevenire le regressioni
• Evitare i down e gli stop presso i nostri clienti
• Ridurre i bug
• Perdere il meno tempo possibile
• Migliorare la qualità
• Affinchè non sia solo un’opzione, ma una costante
I nostri obbiettivi
• Considerare team di QA
• Un team o una parte di esso che controlla la qualità
• Implementare la retrocompatibilità
• Seguendo pattern di refactor ben definiti
• Coprire con unit test
• Unit test ancor prima dell’implementazione della feature
• Qualità sì, ma con produttività
• Tool e framework “integrati” ed integrabili
Concetto di unit test
• In computer programming, unit testing is a software testing
method by which individual units of source code, sets of one
or more computer program modules together with
associated control data, usage procedures, and operating
procedures are tested to determine if they are fit for use. The
primary purpose of this approach is to find out bugs and
prevent regressions.
(source: Wikipedia)
Perchè unit test
• Focus sulle attività Mission-critical
• Supporto allo sviluppo evolutivo
• Con continuous improvement
• Prevenzione delle regressioni
• Riduzione del numero di bug
• Riduzione dei costi di sviluppo
• Altrimenti impiegato in fix
Best practices
• «Fix bugs as soon as you find them»
• Non rimandare a domani quello che potresti fare oggi
• I bug non risolti camuffano altri potenziali bug
• I bug non risolti indicano che “la qualità è un’opzione”
• Discutere dei bug è una perdita di tempo
• I bug non risolti sono anche un costo in termini di effort
Lezioni derivanti
• I bug non risolti viziano le metriche del team e del progetto
• I bug non risolti portano il team ad essere distratto (discussioni)
• I bug non risolti ostacolano i ritmi di release
• I bug, così come per le metriche, viziano le stime preventive
Perciò
• Più il codice è “buono” più è leggibile
• Più il codice segue regole, più è comprensibile
• Più il codice è familiare, più è semplice intervenire
• Scrivere fix il prima possibile costa molto meno che “più avanti”
• Qualità!
Cosa facciamo di solito su database
• Esecuzione di codice in ambienti di produzione o estratti di dati
• Test manuale
• T-SQL debug, check su valori variable
• PRINT, PRINT, SELECT…
• Non ripetibile, soggetto ad errori umani
• Alcuni test non sono più validi appena cambia la situazione
• Alcuni test sono fatti su vincoli che bloccano l’operatività del test
stesso, viziando, di fatto, la sessione di test manuale per intero
Cosa dovremmo testare
• Calcoli in procedure e funzioni
• Constraints (schema)
• Casi limite di DML e dati
• Comportamenti attesi dalle regole sui dati e dai DLM
• Error Handling
• Security
• Standard (SQLCop)
Una soluzione possibile
• tSQLt (free)
• Semplice da installare
• Struttura comune (Assemble, Act, Assert)
• Framework in t-sql
• SQL Server Management Studio
• Via t-sql
• Con Red Gate SQL Test
• Integrato anche con il framework SQLCop
Struttura di un test tSQLt
• Built-in
• tsqlt schema
• Classes
• Gruppi di stored procedure (i test)
• User defined schema
• Convenzioni
• Naming: test*
• Tool
• Run
• NewTestClass/DropClass
• Fail/Assert
• Uninstall
tSQLt test – Pipeline
Assemble Act Assert
Creazione fake
Set opzioni fake
Popolamento fake
Esecuzione comandi
Business logic
Esecuzione proc/func
Valori attesi
Metadati attesi
Comportamenti attesi
DEMO - tSQLt + SSMS + SQL Test
Conclusioni
• Nessuna scusa per non testare
• Esattamente come per ogni metodo lato codice
• I tool esistono
• Ed esistono anche i generatori di dati
• I processi di test aumentano la qualità
• I requisiti di business sono più rispettati e «coperti»
Q&A
• Domande?
Risorse
• http://www.red-gate.com/products/sql-development/sql-test/
• http://tsqlt.org/
• http://sourceforge.net/projects/tsqlunit/
• http://msdn.microsoft.com/en-us/library/dd172118(v=vs.100).aspx (VS 2010)
• http://blogs.msdn.com/b/ssdt/archive/2012/12/07/getting-started-with-sql-server-database-unit-testing-in-
ssdt.aspx (SSDT)
• http://msdn.microsoft.com/en-us/library/jj851200(v=vs.103).aspx (VS 2012)
• http://channel9.msdn.com/Events/Visual-Studio/Launch-2013/QE107 (VS 2013)
• http://msdn.microsoft.com/it-it/library/dn383992.aspx (Article on CI)
• http://msdn.microsoft.com/en-us/library/jj907294.aspx (DLM)
• http://en.wikipedia.org/wiki/Unit_testing
• https://www.simple-talk.com/sql/t-sql-programming/getting-started-testing-databases-with-tsqlt/
• http://utplsql.sourceforge.net/ (PL-SQL)
• https://github.com/chrisoldwood/SS-Unit
GRAZIE!
Continuate a seguire i PASS GLOBAL Italian Virtual Chapters
http://globalitalian.sqlpass.org/

More Related Content

Viewers also liked

Oraciones simples con solucionario (ppt)
Oraciones simples con solucionario (ppt)Oraciones simples con solucionario (ppt)
Oraciones simples con solucionario (ppt)CastilloAguilera
 
Educational managment task_2
Educational managment task_2Educational managment task_2
Educational managment task_2alexandersaa2013
 
[Ita] Sql Saturday 462 Parma - Sql Server 2016 JSON support
[Ita] Sql Saturday 462 Parma - Sql Server 2016 JSON support[Ita] Sql Saturday 462 Parma - Sql Server 2016 JSON support
[Ita] Sql Saturday 462 Parma - Sql Server 2016 JSON supportAlessandro Alpi
 
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgroundsAlessandro Alpi
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...Alessandro Alpi
 
#DOAW16 - DevOps@work Roma 2016 - Databases under source control
#DOAW16 - DevOps@work Roma 2016 - Databases under source control#DOAW16 - DevOps@work Roma 2016 - Databases under source control
#DOAW16 - DevOps@work Roma 2016 - Databases under source controlAlessandro Alpi
 
Lietuviai praranda laisvę
Lietuviai praranda laisvęLietuviai praranda laisvę
Lietuviai praranda laisvęErika Bražienė
 
[ITA] SQL Saturday 257 - Put databases under source control
[ITA] SQL Saturday 257 - Put databases under source control[ITA] SQL Saturday 257 - Put databases under source control
[ITA] SQL Saturday 257 - Put databases under source controlAlessandro Alpi
 
2 67-1379416025-9. automation nad virtual.full
2 67-1379416025-9. automation nad virtual.full2 67-1379416025-9. automation nad virtual.full
2 67-1379416025-9. automation nad virtual.fullKier Francisco
 
Cwit interview
Cwit interviewCwit interview
Cwit interviewakhtarsaad
 
PASS Virtual Chapter - SQL Server Continuous Deployment
PASS Virtual Chapter - SQL Server Continuous DeploymentPASS Virtual Chapter - SQL Server Continuous Deployment
PASS Virtual Chapter - SQL Server Continuous DeploymentAlessandro Alpi
 
#DOAW16 - DevOps@work Roma 2016 - Testing your databases
#DOAW16 - DevOps@work Roma 2016 - Testing your databases#DOAW16 - DevOps@work Roma 2016 - Testing your databases
#DOAW16 - DevOps@work Roma 2016 - Testing your databasesAlessandro Alpi
 
[ENG] Sql Saturday 355 in Parma - New "SQL Server databases under source cont...
[ENG] Sql Saturday 355 in Parma - New "SQL Server databases under source cont...[ENG] Sql Saturday 355 in Parma - New "SQL Server databases under source cont...
[ENG] Sql Saturday 355 in Parma - New "SQL Server databases under source cont...Alessandro Alpi
 
Quick intro sul Source Control su SQL Server
Quick intro sul Source Control su SQL ServerQuick intro sul Source Control su SQL Server
Quick intro sul Source Control su SQL ServerAlessandro Alpi
 

Viewers also liked (20)

Acting In The Digital Age Workshop @UMFF
Acting In The Digital Age Workshop @UMFFActing In The Digital Age Workshop @UMFF
Acting In The Digital Age Workshop @UMFF
 
Oraciones simples con solucionario (ppt)
Oraciones simples con solucionario (ppt)Oraciones simples con solucionario (ppt)
Oraciones simples con solucionario (ppt)
 
Educational managment task_2
Educational managment task_2Educational managment task_2
Educational managment task_2
 
[Ita] Sql Saturday 462 Parma - Sql Server 2016 JSON support
[Ita] Sql Saturday 462 Parma - Sql Server 2016 JSON support[Ita] Sql Saturday 462 Parma - Sql Server 2016 JSON support
[Ita] Sql Saturday 462 Parma - Sql Server 2016 JSON support
 
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
 
#DOAW16 - DevOps@work Roma 2016 - Databases under source control
#DOAW16 - DevOps@work Roma 2016 - Databases under source control#DOAW16 - DevOps@work Roma 2016 - Databases under source control
#DOAW16 - DevOps@work Roma 2016 - Databases under source control
 
Lista 5
Lista 5Lista 5
Lista 5
 
Lietuviai praranda laisvę
Lietuviai praranda laisvęLietuviai praranda laisvę
Lietuviai praranda laisvę
 
Directing teaching resume 2015
Directing teaching resume 2015Directing teaching resume 2015
Directing teaching resume 2015
 
[ITA] SQL Saturday 257 - Put databases under source control
[ITA] SQL Saturday 257 - Put databases under source control[ITA] SQL Saturday 257 - Put databases under source control
[ITA] SQL Saturday 257 - Put databases under source control
 
2 67-1379416025-9. automation nad virtual.full
2 67-1379416025-9. automation nad virtual.full2 67-1379416025-9. automation nad virtual.full
2 67-1379416025-9. automation nad virtual.full
 
Gordonas sausio
Gordonas sausioGordonas sausio
Gordonas sausio
 
Cwit interview
Cwit interviewCwit interview
Cwit interview
 
PASS Virtual Chapter - SQL Server Continuous Deployment
PASS Virtual Chapter - SQL Server Continuous DeploymentPASS Virtual Chapter - SQL Server Continuous Deployment
PASS Virtual Chapter - SQL Server Continuous Deployment
 
#DOAW16 - DevOps@work Roma 2016 - Testing your databases
#DOAW16 - DevOps@work Roma 2016 - Testing your databases#DOAW16 - DevOps@work Roma 2016 - Testing your databases
#DOAW16 - DevOps@work Roma 2016 - Testing your databases
 
Activity 3
Activity 3Activity 3
Activity 3
 
Slide sharing
Slide sharingSlide sharing
Slide sharing
 
[ENG] Sql Saturday 355 in Parma - New "SQL Server databases under source cont...
[ENG] Sql Saturday 355 in Parma - New "SQL Server databases under source cont...[ENG] Sql Saturday 355 in Parma - New "SQL Server databases under source cont...
[ENG] Sql Saturday 355 in Parma - New "SQL Server databases under source cont...
 
Quick intro sul Source Control su SQL Server
Quick intro sul Source Control su SQL ServerQuick intro sul Source Control su SQL Server
Quick intro sul Source Control su SQL Server
 

Similar to PASS Virtual Chapter - Unit Testing su SQL Server

CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERDotNetCampus
 
SQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload AnalysisSQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload AnalysisGianluca Sartori
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Gian Maria Ricci
 
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...Meet Magento Italy
 
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
 
Database project alla riscossa
Database project alla riscossaDatabase project alla riscossa
Database project alla riscossaGian Maria Ricci
 
DSTORIE DALLA TRINCEA: TEAM FOUNDATION SERVER IN CASI LIMITE E NON SOLO...
DSTORIE DALLA TRINCEA: TEAM FOUNDATION SERVER IN CASI LIMITE E NON SOLO...DSTORIE DALLA TRINCEA: TEAM FOUNDATION SERVER IN CASI LIMITE E NON SOLO...
DSTORIE DALLA TRINCEA: TEAM FOUNDATION SERVER IN CASI LIMITE E NON SOLO...DotNetCampus
 
Software Engineering Introduction in Italian
Software Engineering Introduction in ItalianSoftware Engineering Introduction in Italian
Software Engineering Introduction in ItalianPierpaoloCaricato
 
Code quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScriptCode quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScriptRoberto Messora
 
Java Unit Testing - Introduction
Java Unit Testing - IntroductionJava Unit Testing - Introduction
Java Unit Testing - Introductionfgianneschi
 
Perché è così difficile il deploy dei database - DevCast DevOps Serie
Perché è così difficile il deploy dei database  - DevCast DevOps SeriePerché è così difficile il deploy dei database  - DevCast DevOps Serie
Perché è così difficile il deploy dei database - DevCast DevOps SerieGiulio Vian
 
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...Emerasoft, solutions to collaborate
 
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
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaXPeppers
 
Agile Project Management - the Board Game workshop
Agile Project Management  - the Board Game workshopAgile Project Management  - the Board Game workshop
Agile Project Management - the Board Game workshopGiulio Roggero
 

Similar to PASS Virtual Chapter - Unit Testing su SQL Server (20)

Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Software Testing e TDD
Software Testing e TDDSoftware Testing e TDD
Software Testing e TDD
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVER
 
SQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload AnalysisSQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload Analysis
 
Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011Alm pills - Sessione community tour Dot Net Umbria 2011
Alm pills - Sessione community tour Dot Net Umbria 2011
 
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
 
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
 
Database project alla riscossa
Database project alla riscossaDatabase project alla riscossa
Database project alla riscossa
 
DSTORIE DALLA TRINCEA: TEAM FOUNDATION SERVER IN CASI LIMITE E NON SOLO...
DSTORIE DALLA TRINCEA: TEAM FOUNDATION SERVER IN CASI LIMITE E NON SOLO...DSTORIE DALLA TRINCEA: TEAM FOUNDATION SERVER IN CASI LIMITE E NON SOLO...
DSTORIE DALLA TRINCEA: TEAM FOUNDATION SERVER IN CASI LIMITE E NON SOLO...
 
Software Engineering Introduction in Italian
Software Engineering Introduction in ItalianSoftware Engineering Introduction in Italian
Software Engineering Introduction in Italian
 
Code quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScriptCode quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScript
 
Java Unit Testing - Introduction
Java Unit Testing - IntroductionJava Unit Testing - Introduction
Java Unit Testing - Introduction
 
Perché è così difficile il deploy dei database - DevCast DevOps Serie
Perché è così difficile il deploy dei database  - DevCast DevOps SeriePerché è così difficile il deploy dei database  - DevCast DevOps Serie
Perché è così difficile il deploy dei database - DevCast DevOps Serie
 
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
Webinar: “Testing automatico: la scelta vincente per ottenere una riduzione d...
 
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
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 
Test automatizzati & serenity bdd
Test automatizzati & serenity bddTest automatizzati & serenity bdd
Test automatizzati & serenity bdd
 
Agile Project Management - the Board Game workshop
Agile Project Management  - the Board Game workshopAgile Project Management  - the Board Game workshop
Agile Project Management - the Board Game workshop
 

More from Alessandro Alpi

Mvp4 croatia - Being a dba in a devops world
Mvp4 croatia - Being a dba in a devops worldMvp4 croatia - Being a dba in a devops world
Mvp4 croatia - Being a dba in a devops worldAlessandro Alpi
 
Digital warriors 2020 - Smart?
Digital warriors 2020 - Smart?Digital warriors 2020 - Smart?
Digital warriors 2020 - Smart?Alessandro Alpi
 
Sql Wars - SQL the attack of the Clones and the rebellion of the Containers
Sql Wars - SQL the attack of the Clones and the rebellion of the Containers Sql Wars - SQL the attack of the Clones and the rebellion of the Containers
Sql Wars - SQL the attack of the Clones and the rebellion of the Containers Alessandro Alpi
 
Sql Wars - SQL Clone vs Docker Containers
Sql Wars - SQL Clone vs Docker Containers Sql Wars - SQL Clone vs Docker Containers
Sql Wars - SQL Clone vs Docker Containers Alessandro Alpi
 
Doaw2020 - Dalla produzione alla QA, provisioning su SQL Server
Doaw2020 - Dalla produzione alla QA, provisioning su SQL ServerDoaw2020 - Dalla produzione alla QA, provisioning su SQL Server
Doaw2020 - Dalla produzione alla QA, provisioning su SQL ServerAlessandro Alpi
 
Wpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero teamWpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero teamAlessandro Alpi
 
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerSql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerAlessandro Alpi
 
Configuration e change management con Disciplined Agile Framework
Configuration e change management con Disciplined Agile FrameworkConfiguration e change management con Disciplined Agile Framework
Configuration e change management con Disciplined Agile FrameworkAlessandro Alpi
 
Basta poco per distruggere DevOps
Basta poco per distruggere DevOpsBasta poco per distruggere DevOps
Basta poco per distruggere DevOpsAlessandro Alpi
 
Automatizzare il processo di link dei database con redgate source control
Automatizzare il processo di link dei database con redgate source controlAutomatizzare il processo di link dei database con redgate source control
Automatizzare il processo di link dei database con redgate source controlAlessandro Alpi
 
Sql saturday parma 2017 (#sqlsat675) - Deep space Cosmos DB
Sql saturday parma 2017 (#sqlsat675) - Deep space Cosmos DBSql saturday parma 2017 (#sqlsat675) - Deep space Cosmos DB
Sql saturday parma 2017 (#sqlsat675) - Deep space Cosmos DBAlessandro Alpi
 
Sql Saturday a Pordenone - Sql Server journey, da dev a ops
Sql Saturday a Pordenone - Sql Server journey, da dev a opsSql Saturday a Pordenone - Sql Server journey, da dev a ops
Sql Saturday a Pordenone - Sql Server journey, da dev a opsAlessandro Alpi
 
[Eng] Sql Saturday TorinoExpo - Sql Server 2016 JSON support
[Eng] Sql Saturday TorinoExpo - Sql Server 2016 JSON support[Eng] Sql Saturday TorinoExpo - Sql Server 2016 JSON support
[Eng] Sql Saturday TorinoExpo - Sql Server 2016 JSON supportAlessandro Alpi
 
[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
 

More from Alessandro Alpi (14)

Mvp4 croatia - Being a dba in a devops world
Mvp4 croatia - Being a dba in a devops worldMvp4 croatia - Being a dba in a devops world
Mvp4 croatia - Being a dba in a devops world
 
Digital warriors 2020 - Smart?
Digital warriors 2020 - Smart?Digital warriors 2020 - Smart?
Digital warriors 2020 - Smart?
 
Sql Wars - SQL the attack of the Clones and the rebellion of the Containers
Sql Wars - SQL the attack of the Clones and the rebellion of the Containers Sql Wars - SQL the attack of the Clones and the rebellion of the Containers
Sql Wars - SQL the attack of the Clones and the rebellion of the Containers
 
Sql Wars - SQL Clone vs Docker Containers
Sql Wars - SQL Clone vs Docker Containers Sql Wars - SQL Clone vs Docker Containers
Sql Wars - SQL Clone vs Docker Containers
 
Doaw2020 - Dalla produzione alla QA, provisioning su SQL Server
Doaw2020 - Dalla produzione alla QA, provisioning su SQL ServerDoaw2020 - Dalla produzione alla QA, provisioning su SQL Server
Doaw2020 - Dalla produzione alla QA, provisioning su SQL Server
 
Wpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero teamWpc2019 - Distruggere DevOps, la storia di un vero team
Wpc2019 - Distruggere DevOps, la storia di un vero team
 
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL ServerSql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
Sql start!2019 Migliorare la produttività per lo sviluppo su SQL Server
 
Configuration e change management con Disciplined Agile Framework
Configuration e change management con Disciplined Agile FrameworkConfiguration e change management con Disciplined Agile Framework
Configuration e change management con Disciplined Agile Framework
 
Basta poco per distruggere DevOps
Basta poco per distruggere DevOpsBasta poco per distruggere DevOps
Basta poco per distruggere DevOps
 
Automatizzare il processo di link dei database con redgate source control
Automatizzare il processo di link dei database con redgate source controlAutomatizzare il processo di link dei database con redgate source control
Automatizzare il processo di link dei database con redgate source control
 
Sql saturday parma 2017 (#sqlsat675) - Deep space Cosmos DB
Sql saturday parma 2017 (#sqlsat675) - Deep space Cosmos DBSql saturday parma 2017 (#sqlsat675) - Deep space Cosmos DB
Sql saturday parma 2017 (#sqlsat675) - Deep space Cosmos DB
 
Sql Saturday a Pordenone - Sql Server journey, da dev a ops
Sql Saturday a Pordenone - Sql Server journey, da dev a opsSql Saturday a Pordenone - Sql Server journey, da dev a ops
Sql Saturday a Pordenone - Sql Server journey, da dev a ops
 
[Eng] Sql Saturday TorinoExpo - Sql Server 2016 JSON support
[Eng] Sql Saturday TorinoExpo - Sql Server 2016 JSON support[Eng] Sql Saturday TorinoExpo - Sql Server 2016 JSON support
[Eng] Sql Saturday TorinoExpo - Sql Server 2016 JSON support
 
[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
 

PASS Virtual Chapter - Unit Testing su SQL Server

  • 1. Testing your databases Effettuare unit testing con SQL Server database e tSQLt
  • 2. Alessandro Alpi Microsoft MVP – SQL Server dal 2008 Blog ITA: http://blogs.dotnethell.it/suxstellino Blog ENG: http://suxstellino.wordpress.com/ Website: http://www.alessandroalpi.net CTO Engage IT Services S.r.l. www.engageitservices.it Team leader (Agile) Communities Getlatestversion.it
  • 3. Agenda • Concetti di Unit Testing • Perché Unit Testing su database • Unit Testing framework • Unit Testing solution • Conclusioni • Q&A
  • 4. Parleremo di • Development teams • Codice e funzionalità • Evitare e prevenire le regressioni • Evitare i down e gli stop presso i nostri clienti • Ridurre i bug • Perdere il meno tempo possibile • Migliorare la qualità • Affinchè non sia solo un’opzione, ma una costante
  • 5. I nostri obbiettivi • Considerare team di QA • Un team o una parte di esso che controlla la qualità • Implementare la retrocompatibilità • Seguendo pattern di refactor ben definiti • Coprire con unit test • Unit test ancor prima dell’implementazione della feature • Qualità sì, ma con produttività • Tool e framework “integrati” ed integrabili
  • 6. Concetto di unit test • In computer programming, unit testing is a software testing method by which individual units of source code, sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures are tested to determine if they are fit for use. The primary purpose of this approach is to find out bugs and prevent regressions. (source: Wikipedia)
  • 7. Perchè unit test • Focus sulle attività Mission-critical • Supporto allo sviluppo evolutivo • Con continuous improvement • Prevenzione delle regressioni • Riduzione del numero di bug • Riduzione dei costi di sviluppo • Altrimenti impiegato in fix
  • 8. Best practices • «Fix bugs as soon as you find them» • Non rimandare a domani quello che potresti fare oggi • I bug non risolti camuffano altri potenziali bug • I bug non risolti indicano che “la qualità è un’opzione” • Discutere dei bug è una perdita di tempo • I bug non risolti sono anche un costo in termini di effort
  • 9. Lezioni derivanti • I bug non risolti viziano le metriche del team e del progetto • I bug non risolti portano il team ad essere distratto (discussioni) • I bug non risolti ostacolano i ritmi di release • I bug, così come per le metriche, viziano le stime preventive Perciò • Più il codice è “buono” più è leggibile • Più il codice segue regole, più è comprensibile • Più il codice è familiare, più è semplice intervenire • Scrivere fix il prima possibile costa molto meno che “più avanti” • Qualità!
  • 10. Cosa facciamo di solito su database • Esecuzione di codice in ambienti di produzione o estratti di dati • Test manuale • T-SQL debug, check su valori variable • PRINT, PRINT, SELECT… • Non ripetibile, soggetto ad errori umani • Alcuni test non sono più validi appena cambia la situazione • Alcuni test sono fatti su vincoli che bloccano l’operatività del test stesso, viziando, di fatto, la sessione di test manuale per intero
  • 11. Cosa dovremmo testare • Calcoli in procedure e funzioni • Constraints (schema) • Casi limite di DML e dati • Comportamenti attesi dalle regole sui dati e dai DLM • Error Handling • Security • Standard (SQLCop)
  • 12. Una soluzione possibile • tSQLt (free) • Semplice da installare • Struttura comune (Assemble, Act, Assert) • Framework in t-sql • SQL Server Management Studio • Via t-sql • Con Red Gate SQL Test • Integrato anche con il framework SQLCop
  • 13. Struttura di un test tSQLt • Built-in • tsqlt schema • Classes • Gruppi di stored procedure (i test) • User defined schema • Convenzioni • Naming: test* • Tool • Run • NewTestClass/DropClass • Fail/Assert • Uninstall
  • 14. tSQLt test – Pipeline Assemble Act Assert Creazione fake Set opzioni fake Popolamento fake Esecuzione comandi Business logic Esecuzione proc/func Valori attesi Metadati attesi Comportamenti attesi
  • 15. DEMO - tSQLt + SSMS + SQL Test
  • 16. Conclusioni • Nessuna scusa per non testare • Esattamente come per ogni metodo lato codice • I tool esistono • Ed esistono anche i generatori di dati • I processi di test aumentano la qualità • I requisiti di business sono più rispettati e «coperti»
  • 18. Risorse • http://www.red-gate.com/products/sql-development/sql-test/ • http://tsqlt.org/ • http://sourceforge.net/projects/tsqlunit/ • http://msdn.microsoft.com/en-us/library/dd172118(v=vs.100).aspx (VS 2010) • http://blogs.msdn.com/b/ssdt/archive/2012/12/07/getting-started-with-sql-server-database-unit-testing-in- ssdt.aspx (SSDT) • http://msdn.microsoft.com/en-us/library/jj851200(v=vs.103).aspx (VS 2012) • http://channel9.msdn.com/Events/Visual-Studio/Launch-2013/QE107 (VS 2013) • http://msdn.microsoft.com/it-it/library/dn383992.aspx (Article on CI) • http://msdn.microsoft.com/en-us/library/jj907294.aspx (DLM) • http://en.wikipedia.org/wiki/Unit_testing • https://www.simple-talk.com/sql/t-sql-programming/getting-started-testing-databases-with-tsqlt/ • http://utplsql.sourceforge.net/ (PL-SQL) • https://github.com/chrisoldwood/SS-Unit
  • 19. GRAZIE! Continuate a seguire i PASS GLOBAL Italian Virtual Chapters http://globalitalian.sqlpass.org/