32
Testing, The Ugly Stepchild of Software Development Better Living through Software Testing Chris Berry Feb 21, 2000 Chris Berry [email protected]

BerrySandiaTestingtalk.ppt

Embed Size (px)

Citation preview

Page 1: BerrySandiaTestingtalk.ppt

Testing, The Ugly Stepchild of Software Development

Better Living through Software Testing

Chris Berry – Feb 21, 2000

Chris Berry [email protected]

Page 2: BerrySandiaTestingtalk.ppt

Why Test?

It’s easy to fool yourself.

Increase confidence.

Increase productivity.

Increase courage.

It simply makes programming more fun!

Page 3: BerrySandiaTestingtalk.ppt

Test Early, Test Often

Defects are order of magnitude cheaper to fix when programmers find their own errors.

No communication cost.

The bug tracking system does not become involved.

The error does not block or corrupt the work of other developers.

Page 4: BerrySandiaTestingtalk.ppt

Preemptive Testing

The Art of catching bugs before they happen.

Defensive Programming.

Programming by Contract.

Page 5: BerrySandiaTestingtalk.ppt

The Assertion

The hallmark of Defensive Programming.

Allows you to assert that a particular condition is met, and commonly, if it is not, terminate execution.

Pre and post conditions.

Not to be confused with Exceptions.

Page 6: BerrySandiaTestingtalk.ppt
Page 7: BerrySandiaTestingtalk.ppt

Sanity Checking

A simple coding convention which requires all Classes to provide a boolean isSane method.

Used to determine whether a particular Instance is in a sane state.

Page 8: BerrySandiaTestingtalk.ppt

Logging/Debug Prints

Low tech debugging technique. Often the only way to debug threaded code.

Can speed development.

Permanent artifact.

Can result in “Scroll-blindness”. Best to divert logging to a file rather than standard out.

The log4j package for Java.

Page 9: BerrySandiaTestingtalk.ppt

Unit Testing

Test each unit of code independently.

In OO, this equates to testing a Class and its public interface.

Involves debugging, simultaneously, the code, the test, and the Spec.

Page 10: BerrySandiaTestingtalk.ppt

Unit Testing is Glass Box Testing

You Must be aware of

All branches of the method under test.

What inputs should produce what results or Exceptions.

The interplay of affected member variables and arguments.

Page 11: BerrySandiaTestingtalk.ppt

Building a Good Unit Test

Test for

Data integrity:

Valid input: Insure that correct outputs are generated for correct input conditions.

Invalid input: Insures proper error handling.

Page 12: BerrySandiaTestingtalk.ppt

Deciding on Unit Test Input

Equivalence Partitioning.

Good partitioning gives rigor without redundancy.

Boundary Analysis

Things go wrong at the edges.

Expected and unexpected Exceptions.

Page 13: BerrySandiaTestingtalk.ppt

Equivalence Partitioning

An equivalence class is a definition of a group of inputs, any one of which should be treated exactly the same by the method under test.

Eliminates redundant tests. The behavior of the method should be “equivalent” so only one test need be run for any equivalence class.

Page 14: BerrySandiaTestingtalk.ppt

Boundary Analysis

The term for choosing the appropriate values to test a particular equivalence subset.

Choose values at the edge of the set.

Also a good idea to include the transition values.

Page 15: BerrySandiaTestingtalk.ppt

Dealing with Exceptions

Catch all unplanned Exceptions.

Match all thrown Exceptions with the conditions expected to produce them.

Page 16: BerrySandiaTestingtalk.ppt

Classic Unit Test construct

Generate argument providers

Loops over all argument providers

Construct the Object under test (OUT)

Optionally save the state of the OUT

Call the method under test (MUT)

If an exception was generated

Test for unhandled exceptions

Else

Assertions on the resultant, OUT, andarguments

End loops

Page 17: BerrySandiaTestingtalk.ppt

Integration Testing

Tests which prove that the program properly executes some required functionality.

Typically involves the integration of many Classes.

Often a test from the perspective of the customer.

Page 18: BerrySandiaTestingtalk.ppt

eXtreme Programming

“A lightweight, low-risk, flexible, predictable, and fun way to develop software”.

Takes commonsense best practices and applies them to an extreme degree.

Page 19: BerrySandiaTestingtalk.ppt

XP in a Nutshell

Code is king.

Embrace change.

Constant design.

Emphasis on refactoring.

Page 20: BerrySandiaTestingtalk.ppt

The Four Variables

Cost

Time

Quality

Scope.

Page 21: BerrySandiaTestingtalk.ppt

The Four Values of XP

Communication

Simplicity

Feedback

Courage.

Page 22: BerrySandiaTestingtalk.ppt

Central Principles of XP

Rapid Feedback.

Assume Simplicity.

Incremental change.

Embrace change.

Quality work.

Page 23: BerrySandiaTestingtalk.ppt

Secondary Principles of XP

Teach Learning.

Small Initial Investment.

Play to Win.

Concrete Experiments.

Honest communication.

Page 24: BerrySandiaTestingtalk.ppt

Secondary Principles of XP, continued

Work with instincts.

Accepted responsibility.

Local adaptation.

Travel Light.

Honest measurement.

Page 25: BerrySandiaTestingtalk.ppt

Four Basic Activities of XP

Coding.

Testing.

Listening.

Designing.

Page 26: BerrySandiaTestingtalk.ppt

XP Development Practices

On-site Customer

System Metaphor

Pair Programming

Tests Before Code

Simple Design

Page 27: BerrySandiaTestingtalk.ppt

XP Development Practices, continued

Merciless Refactoring

Continuous Integration

Collective Ownership

Coding Standards

Page 28: BerrySandiaTestingtalk.ppt

Testing the XP way

A simplified, pragmatic, and less rigorous approach to testing.

Tests things that might break. Testing simple methods, like accessors, is valueless.

Write the tests first.

Keep the tests running.

Tests are automatic. Run the full suite several times a day.

JUnit, a Java testing framework. A C++ version (CPPUnit) is now available.

Page 30: BerrySandiaTestingtalk.ppt

Summary

The earlier you catch a bug the less it is going to cost you.

Testing can actually speed up your development time, and improve your quality of life.

XP is a pragmatic approach to writing better software.

XP embraces change.

Page 31: BerrySandiaTestingtalk.ppt

Acknowledgements

Some of the Slide Notes for this presentation were lifted verbatim from several sources; “Test Infected. Programmers Love Writing Tests”

by Eric Gamma and Kent Beck.

“eXtreme Summary - An Overview of eXtreme Programming eXplained: Embrace Change” by Brad Appleton.

“Divide and Conquer - Preemptive and Unit Testing” by Chris Berry

“The Pragmatic Programmer” by Andrew Hunt and David Thomas.

Page 32: BerrySandiaTestingtalk.ppt

Resources

www.xprogramming.com/software.htm

www.extremeprogramming.org

www.pragmaticprogrammer.com