8. Device Drivers
ship and see
test it!
Test-Driven
∃x:
(∀y∈[1..x]:
f(y)>0)
Formal Methods
prove it works
9. 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?
11. JUnit
* unit test framework in Java
(or C++, Python, Ruby, C#, ...)
* simple to learn
* good tool support
* somewhat low-level
* extensions for system testing
12.
13. 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());
}
}
14. System Testing
* deploy, then:
HttpUnit, XmlUnit, Cactus
* needs automated deployment
* Distributed Testing still a research topic
* performance testing by comparing timings w.r.t.
old runs
18. Interop Testing
* Your client against my server
* My client against your server
Issues:
* Blame assignment: a formal test suite makes
blame easier to assign
* Dependent libraries: what if your WS-A doesn’t
interop with others?
Nor does anyone else's. Not first time, anyway.
Welcome to low-quality-coders anonymous
This Bluescreen is courtesy of Sony's 'enhanced' CD. Music that can toast your PC. Whatever next?
One of the big problems of Software Engineering. The others are
-scale
-change
I'm not going to deny the value of formal proofs of things. I mean, how do you know quicksort works?
However, they are hard to do, and a skill that is not broadly known in the sw eng community. If you have the skill, use it when appropriate.
This is cruise control. see also gump.apache.org
These are machines that