database development using tdd

31
Database Database Development Using Development Using TDD TDD Chris Oldwood Chris Oldwood ACCU Conference 2012 ACCU Conference 2012 @chrisoldwood / @chrisoldwood / [email protected] [email protected]

Upload: illana-lindsay

Post on 30-Dec-2015

46 views

Category:

Documents


4 download

DESCRIPTION

Database Development Using TDD. Chris Oldwood ACCU Conference 2012. @chrisoldwood / [email protected]. SELECT * FROM Scope. Prologue Principles of TDD The Public Interface SQL Unit Testing TDD by Example Continuous Integration & Deployment Database Refactoring Questions. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Database Development Using TDD

Database Database Development Using Development Using

TDDTDD

Chris OldwoodChris Oldwood

ACCU Conference 2012ACCU Conference 2012

@chrisoldwood / @chrisoldwood / [email protected]@cix.co.uk

Page 2: Database Development Using TDD

SELECT * FROM ScopeSELECT * FROM Scope ProloguePrologue Principles of TDDPrinciples of TDD The Public InterfaceThe Public Interface SQL Unit TestingSQL Unit Testing TDD by ExampleTDD by Example Continuous Integration & Continuous Integration &

DeploymentDeployment Database RefactoringDatabase Refactoring QuestionsQuestions

Page 3: Database Development Using TDD

@chrisoldwood is the only @chrisoldwood is the only person I know with a person I know with a convincing Agile SQL story.convincing Agile SQL story.

@allankelly@allankelly

Page 4: Database Development Using TDD

EnvironmentsEnvironments

SQL based RDBMSSQL based RDBMS Applicable to OLTP & OLAPApplicable to OLTP & OLAP Distributed systemsDistributed systems

Page 5: Database Development Using TDD

Principles of TDDPrinciples of TDD

Test DrivenTest Driven

(Development|Design)(Development|Design)

Page 6: Database Development Using TDD

The TDD CycleThe TDD Cycle

Write a failing test(red)

Write production code(green)

Clean-up code(refactor)

Small steps

Done (done)

Page 7: Database Development Using TDD

Test-First vs Test-LaterTest-First vs Test-Later

Test-first promotes a client-Test-first promotes a client-side perspectiveside perspective

Page 8: Database Development Using TDD

Top-Down Design & Top-Down Design & ImplementationImplementation

Client

Services

Database

Design

Implementation

Design & Implementation

Page 9: Database Development Using TDD

Executable SpecificationExecutable Specification

Helps ensure correctness firstHelps ensure correctness first Aids continued correctness afterAids continued correctness after Acts as documentationActs as documentation

Page 10: Database Development Using TDD

The Public InterfaceThe Public Interface

Encapsulation buys you Encapsulation buys you freedomfreedom

Page 11: Database Development Using TDD

Public ObjectsPublic Objects

Stored proceduresStored procedures User-defined functionsUser-defined functions ViewsViews User-defined typesUser-defined types

Page 12: Database Development Using TDD

Implementation DetailsImplementation Details

TablesTables Constraints Constraints

(triggers)(triggers) IndexesIndexes

Page 13: Database Development Using TDD

Observable BehaviourObservable Behaviour

Tests should verify the Tests should verify the publicly observable behaviour publicly observable behaviour

not the choice of not the choice of implementationimplementation

Page 14: Database Development Using TDD

Code StructureCode Structure

Use schemas for partitioningUse schemas for partitioning Embrace compositionEmbrace composition Single Responsibly PrincipleSingle Responsibly Principle

Page 15: Database Development Using TDD

PerformancePerformance

Encapsulation buys you Encapsulation buys you freedomfreedom

Page 16: Database Development Using TDD

SQL Unit TestingSQL Unit Testing

Page 17: Database Development Using TDD

SQL UnitsSQL Units

ProcedureProcedure FunctionFunction ViewView Legacy Legacy

(constraints/triggers)(constraints/triggers)

Page 18: Database Development Using TDD

Development SandboxDevelopment Sandbox

IsolationIsolation Fast feedbackFast feedback DeterministicDeterministic ToolingTooling

Page 19: Database Development Using TDD

SS-Unit Example TestSS-Unit Example Test

create procedure test._@TestSetUp@_Somethingas -- common arrangementgo

create procedure test._@Test@_Something_ShouldDoAnotherThingas declare @arrangement varchar(100) = 'arrangement'; declare @expected int = 42;

declare @actual int = public.ActOnArrangement();

exec ssunit.AssertIntegerEqualTo @expected, @actual;go

exec ssunit.RunTests;

Page 20: Database Development Using TDD

TDD By ExampleTDD By Example

Page 21: Database Development Using TDD

Example FeatureExample Feature

Produce a report showing how Produce a report showing how many bugs each developer many bugs each developer has fixed.has fixed.

Page 22: Database Development Using TDD

Continuous Continuous Integration & Integration & DeploymentDeployment

Page 23: Database Development Using TDD

Continuous (SQL) Continuous (SQL) IntegrationIntegration

Build Database

Run Test Suite

Run Static Analysis

Page 24: Database Development Using TDD

Continuous (System) Continuous (System) IntegrationIntegration

Build Database

Run Unit Tests

Build Client

Run Unit Tests

Build Services

Run Unit Tests

Run Integration Tests Run Integration Tests

Page 25: Database Development Using TDD

Continuous DeploymentContinuous Deployment

PackageDatabase

Run End-to-EndTests

Deploy Database

PackageServices

PackageClient

Deploy Services Deploy Client

Page 26: Database Development Using TDD

Developer’s Workstation

Development CycleDevelopment Cycle

Feature Write test Write code Refactor

Build Server

Build DB Unit Tests Int. Tests

System Test Environments

Package Deploy Sys TestsDoneDone

Page 27: Database Development Using TDD

Database RefactoringDatabase Refactoring

Page 28: Database Development Using TDD

RefactoringRefactoring

Encapsulation buys you Encapsulation buys you freedomfreedom

Page 29: Database Development Using TDD

Schema ChangesSchema Changes

Object namesObject names Rationalising data typesRationalising data types Remove dead objectsRemove dead objects Table splits/mergesTable splits/merges

Page 30: Database Development Using TDD

Questions?Questions?

Page 31: Database Development Using TDD

Want to Know More?Want to Know More?

BlogBlog

http://chrisoldwood.blogspot.comhttp://chrisoldwood.blogspot.com

SS-Unit / SS-Cop / sql2doxygenSS-Unit / SS-Cop / sql2doxygen

http://www.cix.co.uk/~gort/sql.htmhttp://www.cix.co.uk/~gort/sql.htm

@chrisoldwood / @chrisoldwood / [email protected]@cix.co.uk