Test Driven Development - Overview and Adoption

17
© Copyright Pyxis Technologies Test-Driven Development

description

- What is TDD- TDD adoption stages- Adopting a test strategy- Making TDD stick

Transcript of Test Driven Development - Overview and Adoption

Page 1: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

Test-Driven Development

Page 2: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

Why Test-Driven Development (TDD)?

Agile implies adapting to change quickly…

In code, this translates to “easy to maintain & refactor” and implies…• Clean design• No duplication• Low/loose coupling• Eliminating “code smells”• Thorough test coverage

TDD is a technique that helps getting there

Page 3: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

What is TDD?

Originates from test-first programming concepts of Extreme Programming (XP)

Is a software design method more than a testing method

Developers create automated unit tests that define code requirements before writing the code itself

3

Page 4: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

Extreme Programming Practices Overview

source: www.xprogramming.com

Page 5: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

The TDD cycle

Add a test

Run all tests and see if the new one fails

Write code

Run all tests and see the new test succeed

Refactor the code

Test

CodeRefactor

source: Test-Driven Development by Example, by Kent Beck

Page 6: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

TDD Key Principles

Write code if and only if an automated unit test fails

Eliminate duplication and other “smells”

Page 7: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

Benefits

If done well, TDD can bring tons of benefits:

Better test coverage• A safety net for refactoring• Helps prevent regression• Measurable

Better design• Developer acts as user of his own code• Looser coupling• Easier to test• Constant elimination of “code smells”

Page 8: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

Benefits (continued)

Functionality required only• “You Ain’t Gonna Need It” (YAGNI) principle• Lower maintenance cost

Helps managing fear in face of complexity• Brings confidence in the code base• Decreases pressure

Documents code• Lots of example usage of the code

Page 9: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

Benefits (continued)

Improves overall quality• Reduces number of bugs released• Reduces chances of bugs reoccuring

Page 10: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

TDD Adoption Stages

1. The developer starts writing unit tests around their code using a test framework like JUnit or TestNG.

2. As the body of tests increases the developer begins to enjoy a strongly increased sense of confidence in their work.

3. At some point the developer has the insight (or are shown) that writing the tests before writing the code, helps them focus on only writing the code that they need.

Page 11: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

TDD Adoption Stages (continued)

4. The developer also notices that when they return to some code that they haven't seen for a while, the tests serve to document how the code works.

5. A point of revelation occurs when the developer realizes that writing tests in this way helps them to "discover" the API to their code. TDD has now become a design process.

6. Expertise in TDD begins to be drawn at the point where the developer realizes that TDD is not about testing, it is about defining behavior.

7. Behavior is about the interactions between components of the system and so the use of mocking is a fundamental to advanced TDD.

source: www.behaviour-driven.org

Page 12: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

Pitfall stopping midway

Too many integration tests vs unit tests

Tests more complex

Tests become constraint on change

Tests take much time to run

Tests code tightly coupled to implementation

A common failure mode for code bases on Agile projects

A solution: Use Mocks!

Page 13: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies13

Adopting a test strategy

Unit tests

Integration tests

Functional tests

Acceptance tests

+

-

$$

Page 14: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies14

Another Categorization

Unit tests

Integration tests

+

-

$$

Unit tests

Integration tests

End-to-end tests

Customer tests

Developer tests

Page 15: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

Making TDD stick

Classroom training

Use measurement tools

Pair programming

Support from management

Community

Coding dojos

Reading workshops

Patience… it will take more time than you expect!

Pizza

source: www.infoq.com, Making TDD stick, Problems and Solutions for Adopters, by Mark Levison

Page 16: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

References

Test-Driven Development by Example,

Kent Beck – Addison-Wesley, 2002

http://www.xprogramming.com

http://www.behaviour-driven.org

Making TDD Stick, Problems and Solutions for Adopters, Mark Levison, http://www.infoq.com, January 2009

Page 17: Test Driven Development - Overview and Adoption

© Copyright Pyxis Technologies

Questions

?