Testing
Steve Loughran
HP Laboratories
Thursday November 6th, 2006
your code doesn't work
i know this because...
my code doesn't work
it's OK to write code
that doesn’t work
just don’t ship it
especially if it matters
how do you get from
"broken" to "shipping"?
test it!
ship and see
prove it works
∃x:
(∀y∈[1..x]:
f(y)>0)
Device Drivers Formal Methods Test-Driven
proofs of correctness
+ shows an algorithm really works
+ good for concurrency
+ and distributed things
- makes assumptions about system
- needs lots of maths/CS skills
(Pi-Calculus, The HOL System)
- regression proofs?
Test Driven Development
any feature without a test
doesn’t exist
JUnit
* unit test framework in Java
-versions for C++, Python, Ruby...
* simple to learn
* good tool support
* somewhat low-level
* extensions for system testing
public class LessSimpleTest extends TestCase {
public LessSimpleTest(String s) {
super(s);
}
public void testAssignment() {
final Date date = new Date();
Event event = new Event(UUID.randomUUID(),
date, "now", "Text");
assertEquals("self equality failed",
event, event);
assertEquals(date, event.getDate());
assertNotNull(date.getID());
}
}
swing GUI
TestRunner
Ant-generated report
scales better; reports published
Continuous Integration
System Testing
* deploy, then:
HttpUnit, XmlUnit, Cactus
* needs automated deployment, database
setup, teardown
* performance testing by comparing
timings w.r.t. old runs
* Simulate entire behaviour of the client
user/application
Distributed System Testing
* Still a research topic
* Set up complex configurations
* Run tests on remote machines
* collect results and log data
* Post-mortem analysis
* Virtualization can help
see http://tinyurl.com/y99tez
limitations of testing
- good tests are hard to write
- distributed tests very hard
- different system configurations are
still a problem
- status of "tester" below "coder"
A good test breaks the application
-–-––––-–--–-----------------------------------------
politics:
resistance to change
developers: ignorance, fear
E.E.E. Educate, Evangelise, Encourage
* gently show benefits
* use testing to track down a bug
* retain test for regression testing
* add tests for new code and old
problems, not existing codebase
* adopt cruise control, reporting
management: ignorance
"too much time spent on testing"
* out of date with modern processes
* belief that testing slows the schedule
(only if you follow the ship-and-see
process)
E.E.E., then D.D.D:
Distract, Dissemble, Defeat
Test Driven Standards?
any standard without a test
doesn’t exist