Vous êtes sur la page 1sur 86
Test-Driven Development on a Large Scale Project

Test-Driven Development on a Large Scale Project

Speaker

Jan Van Reusel

1997 Speaker Jan Van Reusel

1997

Speaker

Jan Van Reusel

1997 1999 Speaker Jan Van Reusel

1997

1997 1999 Speaker Jan Van Reusel

1999

Speaker

Jan Van Reusel

1997 1999 2002 Speaker Jan Van Reusel

1997

1997 1999 2002 Speaker Jan Van Reusel

1999

1997 1999 2002 Speaker Jan Van Reusel

2002

Speaker

Jan Van Reusel

1997 1999 2002 2003 2003 Speaker Jan Van Reusel

1997

1997 1999 2002 2003 2003 Speaker Jan Van Reusel

1999

1997 1999 2002 2003 2003 Speaker Jan Van Reusel

2002

1997 1999 2002 2003 2003 Speaker Jan Van Reusel

2003

1997 1999 2002 2003 2003 Speaker Jan Van Reusel

2003

Speaker

Jan Van Reusel

Speaker Development Manager

Speaker

Development Manager

Speaker

What keeps me awake at night?

... sometimes ...
...
sometimes
...
... more often ...
...
more
often
...
... summer 2005 ...
...
summer
2005
...

...

summer

2006

...

12 Load factor 10 8 6 4 2 0 05/05 07/05 09/05 11/05 01/06 03/06 05/06
12
Load factor
10
8
6
4
2
0
05/05
07/05
09/05
11/05
01/06
03/06
05/06
07/06
09/06

This Session

What did we do about it?

Context

Ventouris Renewal Program

Accountancy Bank • Self-employed activity • Look up and process income data • Career data •
Accountancy
Bank
• Self-employed activity
• Look up and process income data
• Career data
• Continued insurance
Payments
• receive
Bailiff
• reassign
• reimburse
Request remission /
exemption
Modifications
Debt administration
• Reminder
• Summons
• Subpoena
FCP
File
Calculation
Family allowance
• Discharge
• Pension
• Decease
• Failure (insurance)
• Normal suspension: request
• equalization
• continued insurance
NISSE
Self-employed
Affiliation
Suspension

8

customers

60

team size

100 my
100 my
8 customers 60 team size 100 my 3 year

3 year

BPEL Engine <<JCAPS>> Presentation Layer Service Layer HTML Browser Web Service Client Batch Client NISSE <<POJO
BPEL Engine
<<JCAPS>>
Presentation Layer
Service Layer
HTML Browser
Web Service Client
Batch Client
NISSE
<<POJO / MDB>>
NISSE Gateway
<<POJO / MDB>>
Batch Dispatcher
Application clients
<<JSF>>
Web User Interface
<<Session Bean>>
Application Services
Domain Layer Business Object <<POJO>>
Domain Layer
Business Object
<<POJO>>
<<JESS>> Rule Engine
<<JESS>>
Rule Engine
<<POJO>> Database <<Oracle>> Domain Store File System <<JDO>> Application Infrastructure <<POJO / MDB>> File Gateway Data
<<POJO>>
Database
<<Oracle>>
Domain Store
File System
<<JDO>>
Application Infrastructure
<<POJO / MDB>>
File Gateway
Data Source Layer
Document Gateway
<<Scriptura>>
Document Generator

Design

Documentation

Why TDD?

Scope

Trust

Support Programming

Critique Product

Business Facing

Exploratory (proxy)

Integration (XML) Exploratory (customer) System Alfa Beta

Unit Integration (Java)

Data conversion Performance Fail over

Technology Facing

Brian Marick

Test Strategy

Test Strategy

Test Strategy
Application Server Application Server Application Server Build/Test Process Developer 1 Machine Developer 2 Machine Developer 3
Application Server Application Server Application Server Build/Test Process Developer 1 Machine Developer 2 Machine Developer 3
Application Server
Application Server
Application Server
Build/Test Process
Developer 1 Machine
Developer 2 Machine
Developer 3 Machine
Build/Test Process
Build/Test Process
Database Server
Schema 3
Schema 2
Schema 1
Database
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager
http://xunitpatterns.com Replace code on which SUT depends
http://xunitpatterns.com Replace code on which SUT depends

http://xunitpatterns.com

Replace code on which SUT depends

http://xunitpatterns.com
http://xunitpatterns.com

http://xunitpatterns.com

http://xunitpatterns.com
http://xunitpatterns.com

http://xunitpatterns.com

http://xunitpatterns.com Control indirect input
http://xunitpatterns.com
http://xunitpatterns.com

Control indirect input

http://xunitpatterns.com Verify indirect output
http://xunitpatterns.com Verify indirect output

http://xunitpatterns.com

Verify indirect output

Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Mock Object or Test
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Mock Object or Test
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Mock Object or Test Stub
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager
Test Helper Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway
Test
Helper
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager
http://xunitpatterns.com
http://xunitpatterns.com

http://xunitpatterns.com

http://www.thoughtworks.com/object-mother-easing-test-object-creation.pdf Object Mother
http://www.thoughtworks.com/object-mother-easing-test-object-creation.pdf Object Mother

http://www.thoughtworks.com/object-mother-easing-test-object-creation.pdf

Object Mother

Object Mother Test Helper Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade
Object Mother
Test
Helper
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Humble Object
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager
Mock Object
Mock Object

Mock Object or Test Stub

Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager
http://www.openqa.org/selenium JUnit Test Process Selenium Driver Selenium Browser Bot AUT Browser Process Selenese Proxy WebApp Selenium
http://www.openqa.org/selenium JUnit Test Process Selenium Driver Selenium Browser Bot AUT Browser Process Selenese Proxy WebApp Selenium

http://www.openqa.org/selenium

JUnit Test Process Selenium Driver
JUnit Test Process
Selenium Driver
Selenium Browser Bot
Selenium Browser Bot
AUT
AUT

Browser Process

Selenese Proxy WebApp
Selenese Proxy WebApp

Selenium Server

Web Server AUT WebApp
Web Server
AUT WebApp
http://www.openqa.org/selenium JUnit Test Process AUT Selenium Browser Bot Browser Process Selenium Driver 1. Launches Selenese Proxy
http://www.openqa.org/selenium JUnit Test Process AUT Selenium Browser Bot Browser Process Selenium Driver 1. Launches Selenese Proxy

http://www.openqa.org/selenium

JUnit Test Process
JUnit Test Process
AUT
AUT

Selenium Browser Bot

Browser Process

Selenium Driver 1. Launches
Selenium Driver
1. Launches
Selenese Proxy WebApp
Selenese Proxy WebApp

Selenium Server

Web Server AUT WebApp
Web Server
AUT WebApp
http://www.openqa.org/selenium JUnit Test Process Selenese Proxy WebApp Selenium Browser Bot Selenium Server Selenium Driver Browser Process
http://www.openqa.org/selenium JUnit Test Process Selenese Proxy WebApp Selenium Browser Bot Selenium Server Selenium Driver Browser Process

http://www.openqa.org/selenium

JUnit Test Process Selenese Proxy WebApp Selenium Browser Bot Selenium Server Selenium Driver Browser Process AUT
JUnit Test Process
Selenese Proxy WebApp
Selenium Browser Bot
Selenium Server
Selenium Driver
Browser Process
AUT WebApp
2. Requests command
Web Server
1. Launches
AUT
http://www.openqa.org/selenium JUnit Test Process Selenese Proxy WebApp Selenium Browser Bot Selenium Server Selenium Driver Browser Process
http://www.openqa.org/selenium JUnit Test Process Selenese Proxy WebApp Selenium Browser Bot Selenium Server Selenium Driver Browser Process

http://www.openqa.org/selenium

JUnit Test Process Selenese Proxy WebApp Selenium Browser Bot Selenium Server Selenium Driver Browser Process AUT
JUnit Test Process
Selenese Proxy WebApp
Selenium Browser Bot
Selenium Server
Selenium Driver
Browser Process
AUT WebApp
2. Requests command
Web Server
1. Launches
3. Waits
AUT
http://www.openqa.org/selenium JUnit Test Process Browser Process AUT 3. Waits 1. Launches Web Server 2. Requests command
http://www.openqa.org/selenium JUnit Test Process Browser Process AUT 3. Waits 1. Launches Web Server 2. Requests command

http://www.openqa.org/selenium

JUnit Test Process
JUnit Test Process
Browser Process
Browser Process
AUT 3. Waits 1. Launches Web Server 2. Requests command AUT WebApp Selenium Driver Selenium Browser
AUT
3. Waits
1. Launches
Web Server
2. Requests command
AUT WebApp
Selenium Driver
Selenium Browser Bot
Selenese Proxy WebApp
Selenium Server
Selenium Server
JUnit Test Process Browser Process AUT 3. Waits 1. Launches Web Server 2. Requests command AUT

4. “Go to AUT” & request result

http://www.openqa.org/selenium JUnit Test Process Browser Process AUT 3. Waits 1. Launches Web Server 2. Requests command
http://www.openqa.org/selenium JUnit Test Process Browser Process AUT 3. Waits 1. Launches Web Server 2. Requests command

http://www.openqa.org/selenium

JUnit Test Process
JUnit Test Process
Browser Process
Browser Process
AUT 3. Waits 1. Launches Web Server 2. Requests command AUT WebApp Selenium Driver Selenium Browser
AUT
3. Waits
1. Launches
Web Server
2. Requests command
AUT WebApp
Selenium Driver
Selenium Browser Bot
Selenese Proxy WebApp
Selenium Server
Selenium Server
JUnit Test Process Browser Process AUT 3. Waits 1. Launches Web Server 2. Requests command AUT

4. “Go to AUT” & request result

http://www.openqa.org/selenium JUnit Test Process Browser Process Selenese Proxy WebApp Selenium Browser Bot Selenium Driver AUT WebApp
http://www.openqa.org/selenium JUnit Test Process Browser Process Selenese Proxy WebApp Selenium Browser Bot Selenium Driver AUT WebApp

http://www.openqa.org/selenium

JUnit Test Process
JUnit Test Process
Browser Process
Browser Process
Selenese Proxy WebApp Selenium Browser Bot Selenium Driver AUT WebApp 2. Requests command Web Server 5.
Selenese Proxy WebApp
Selenium Browser Bot
Selenium Driver
AUT WebApp
2. Requests command
Web Server
5. “Go to AUT”
1. Launches
3. Waits
AUT
Selenium Server
Selenium Server
JUnit Test Process Browser Process Selenese Proxy WebApp Selenium Browser Bot Selenium Driver AUT WebApp 2.

4. “Go to AUT” & request result

http://www.openqa.org/selenium JUnit Test Process Browser Process AUT WebApp AUT 3. Waits 1. Launches 5. “Go to
http://www.openqa.org/selenium JUnit Test Process Browser Process AUT WebApp AUT 3. Waits 1. Launches 5. “Go to

http://www.openqa.org/selenium

JUnit Test Process
JUnit Test Process
Browser Process
Browser Process
AUT WebApp AUT 3. Waits 1. Launches 5. “Go to AUT” 6. “Go to AUT” Web
AUT WebApp
AUT
3. Waits
1. Launches
5. “Go to AUT”
6. “Go to AUT”
Web Server
2. Requests command
Selenium Driver
Selenium Browser Bot
Selenese Proxy WebApp
Selenium Server
Selenium Server
JUnit Test Process Browser Process AUT WebApp AUT 3. Waits 1. Launches 5. “Go to AUT”

4. “Go to AUT” & request result

http://www.openqa.org/selenium 7. HTTP Request 6. “Go to AUT” Selenese Proxy WebApp Selenium Browser Bot JUnit Test
http://www.openqa.org/selenium 7. HTTP Request 6. “Go to AUT” Selenese Proxy WebApp Selenium Browser Bot JUnit Test

http://www.openqa.org/selenium

7. HTTP Request 6. “Go to AUT” Selenese Proxy WebApp Selenium Browser Bot JUnit Test Process
7. HTTP Request
6. “Go to AUT”
Selenese Proxy WebApp
Selenium Browser Bot
JUnit Test Process
2. Requests command
Selenium Server
Selenium Driver
Browser Process
AUT WebApp
5. “Go to AUT”
Web Server
1. Launches
3. Waits
AUT

4. “Go to AUT” & request result

http://www.openqa.org/selenium 7. HTTP Request 6. “Go to AUT” Selenese Proxy WebApp Selenium Browser Bot JUnit Test
http://www.openqa.org/selenium 7. HTTP Request 6. “Go to AUT” Selenese Proxy WebApp Selenium Browser Bot JUnit Test

http://www.openqa.org/selenium

7. HTTP Request 6. “Go to AUT” Selenese Proxy WebApp Selenium Browser Bot JUnit Test Process
7. HTTP Request
6. “Go to AUT”
Selenese Proxy WebApp
Selenium Browser Bot
JUnit Test Process
2. Requests command
Selenium Server
Selenium Driver
Browser Process
AUT WebApp
5. “Go to AUT”
Web Server
1. Launches
3. Waits
AUT

8. HTTP Response

4. “Go to AUT” & request result

http://www.openqa.org/selenium 7. HTTP Request 6. “Go to AUT” Selenese Proxy WebApp Selenium Browser Bot JUnit Test
http://www.openqa.org/selenium 7. HTTP Request 6. “Go to AUT” Selenese Proxy WebApp Selenium Browser Bot JUnit Test

http://www.openqa.org/selenium

7. HTTP Request 6. “Go to AUT” Selenese Proxy WebApp Selenium Browser Bot JUnit Test Process
7. HTTP Request
6. “Go to AUT”
Selenese Proxy WebApp
Selenium Browser Bot
JUnit Test Process
2. Requests command
Selenium Server
Selenium Driver
Browser Process
AUT WebApp
5. “Go to AUT”
Web Server
9. Gets result
1. Launches
3. Waits
AUT

8. HTTP Response

4. “Go to AUT” & request result

http://www.openqa.org/selenium Browser Process AUT 3. Waits 1. Launches 9. Gets result Web Server 5. “Go to
http://www.openqa.org/selenium Browser Process AUT 3. Waits 1. Launches 9. Gets result Web Server 5. “Go to

http://www.openqa.org/selenium

Browser Process AUT 3. Waits 1. Launches 9. Gets result Web Server 5. “Go to AUT”
Browser Process
AUT
3. Waits
1. Launches
9. Gets result
Web Server
5. “Go to AUT”
AUT WebApp
10. Returns result &
requests command
7. HTTP Request
Selenium Driver
Selenium Server
2. Requests command
JUnit Test Process
Selenium Browser Bot
Selenese Proxy WebApp
6. “Go to AUT”

8. HTTP Response

4. “Go to AUT” & request result

http://www.openqa.org/selenium 10. Returns result & requests command AUT 3. Waits 11. Waits 1. Launches 9. Gets
http://www.openqa.org/selenium 10. Returns result & requests command AUT 3. Waits 11. Waits 1. Launches 9. Gets

http://www.openqa.org/selenium

10. Returns result & requests command AUT 3. Waits 11. Waits 1. Launches 9. Gets result
10. Returns result &
requests command
AUT
3. Waits
11. Waits
1. Launches
9. Gets result
Web Server
5. “Go to AUT”
AUT WebApp
7. HTTP Request
Browser Process
Selenium Driver
Selenium Server
2. Requests command
JUnit Test Process
Selenium Browser Bot
Selenese Proxy WebApp
6. “Go to AUT”

8. HTTP Response

4. “Go to AUT” & request result

http://www.openqa.org/selenium 10. Returns result & requests command AUT 3. Waits 11. Waits 12. Result 1. Launches
http://www.openqa.org/selenium 10. Returns result & requests command AUT 3. Waits 11. Waits 12. Result 1. Launches

http://www.openqa.org/selenium

10. Returns result & requests command AUT 3. Waits 11. Waits 12. Result 1. Launches 9.
10. Returns result &
requests command
AUT
3. Waits
11. Waits
12. Result
1. Launches
9. Gets result
Web Server
5. “Go to AUT”
AUT WebApp
7. HTTP Request
Browser Process
Selenium Driver
Selenium Server
2. Requests command
JUnit Test Process
Selenium Browser Bot
Selenese Proxy WebApp
6. “Go to AUT”

8. HTTP Response

4. “Go to AUT” & request result

http://www.openqa.org/selenium 13. Asserts on result AUT 3. Waits 11. Waits 12. Result 1. Launches 9. Gets
http://www.openqa.org/selenium 13. Asserts on result AUT 3. Waits 11. Waits 12. Result 1. Launches 9. Gets

http://www.openqa.org/selenium

13. Asserts on result AUT 3. Waits 11. Waits 12. Result 1. Launches 9. Gets result
13. Asserts on result
AUT
3. Waits
11. Waits
12. Result
1. Launches
9. Gets result
Web Server
5. “Go to AUT”
AUT WebApp
7. HTTP Request
10. Returns result &
requests command
Browser Process
Selenium Driver
Selenium Server
2. Requests command
JUnit Test Process
Selenium Browser Bot
Selenese Proxy WebApp
6. “Go to AUT”

8. HTTP Response

4. “Go to AUT” & request result

import com.thoughtworks.selenium.*; import junit.framework.*; public class GoogleTest extends TestCase { private Selenium sel; public void setUp()

import com.thoughtworks.selenium.*; import junit.framework.*; public class GoogleTest extends TestCase { private Selenium sel; public void setUp() { sel = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com"); sel.start();

}

public void testGoogle() { sel.open("http://www.google.com/webhp"); sel.type("q", "hello world"); sel.click("btnG");

sel.waitForPageToLoad("5000");

assertEquals("hello world - Google Search", sel.getTitle());

}

public void tearDown() { sel.stop();

}

}

Test Smells

Test Smells

12 Load factor 10 8 6 4 2 0 05/05 07/05 09/05 11/05 01/06 03/06 05/06
12
Load factor
10
8
6
4
2
0
05/05
07/05
09/05
11/05
01/06
03/06
05/06
07/06
09/06

Buggy Tests

Buggy Tests

Buggy Tests

12 Load factor 10 8 6 4 2 0 05/05 07/05 09/05 11/05 01/06 03/06 05/06
12
Load factor
10
8
6
4
2
0
05/05
07/05
09/05
11/05
01/06
03/06
05/06
07/06
09/06

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

http://xunitpatterns.com High Test Maintenance Cost

http://xunitpatterns.com

High Test Maintenance Cost

Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Mock Object Servlet Facade Business Gateway
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Mock Object
Servlet
Facade
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager
Mock Object
Mock Object

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

High Test Maintenance Cost

12 Load factor 10 8 6 4 2 0 05/05 07/05 09/05 11/05 01/06 03/06 05/06
12
Load factor
10
8
6
4
2
0
05/05
07/05
09/05
11/05
01/06
03/06
05/06
07/06
09/06

Slow Tests

Slow Tests

Slow Tests

Slow Tests

Slow Tests

Slow Tests

Slow Tests

Mock Object Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway
Mock Object
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager

Slow Tests

Slow Tests

Slow Tests

Slow Tests

Slow Tests

Not Enough

2HRS build

time

!

test

maintenance

Not Enough

Lost ability to

respond to change

Not Enough

Too many tests

too much overlap

Not Enough

Slow component usage

Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager

Not Enough

Test type

number

%

time

%

predeploy

  • 5020 66

 

170

3

postdeploy

  • 2606 34

 

5072

97

Not Enough

Test type

number

%

time

%

predeploy

5020

66

170

3

postdeploy

2606

34

5072

97

Test type number % time % predeploy 5020 66 170 3 postdeploy 2606 34 5072 97

Reduce to smoke tests

Result!

10 minute build

Client Presentation Service Domain Data Source Infrastructure Faces Session Browser Servlet Facade Business Gateway Object JSF
Client
Presentation
Service
Domain
Data Source
Infrastructure
Faces
Session
Browser
Servlet
Facade
Business
Gateway
Object
JSF
Facade
Component
Impl
Business
Object
Managed
Persistence
JDO
RDBMS
Bean
Manager

TTTTeeeessssttttssss aaaassss wwwweeeellllllll!!!!

TTTTeeeessssttttssss aaaassss wwwweeeellllllll!!!!

Continuous design

Educate your team

Be agile with test strategy

Conclusion

More?

Agile Applied on The Largest J2EE Project in The Benelux

by Johan Lybaert

by Kathleen Cornelis

Agile Development Workshop

www.ardatissoftwarefactory.com