My focus is the intersection of testing and programming in projects with changing requirements, frequent releases, and an emphasis on communication (in two words, agile projects). In that intersection, I concentrate on three things:
helping programmers test. I especially enjoy sitting down in pairs or small groups and showing programmers what test-first programming is like.
helping testers program. For automated tests, I recommend common scripting languages like Ruby. For that to be successful, the product must have testability interfaces. That's both a technical matter and a social one. What are the right interfaces? How are people persuaded to create them and use them?
shifting the emphasis of testing from "finding bugs" to "specification by example." When testing is done before coding, it becomes a matter of collaboratively exploring the possibilities of the product, then writing decisions down in a way most useful to programmers.
I also consult on other types of testing in other types of projects, but be warned: I will encourage them to move in the Agile direction or, if more suitable, in the direction that some of my colleagues and I call "context-driven".
I strongly favor hands-on training work over classroom-style training.
1992 - present: Testing Foundations
As a consultant, my responsibility is to teach testers and programmers what they need to know, help managers understand what their employees need, and consult on process improvement and testing strategy (typically, how to do more within a fixed cost).
I have been a technical editor of Better Software Magazine since Volume 1 (1999).
1988 - 1992: Motorola Microcomputer Division
Motorola MCD produced UNIX systems, including one of the first symmetric multiprocessor systems on the market. I led an effort that specifically targeted the risks of such systems, constructed a tool to better evaluate existing stress tests, and wrote tests that targeted under-stressed parts of the system. The effort was a notably successful part of the overall testing program, discovering a high number of severity 1 bugs and producing a set of tests used by testers and developers until Motorola exited that business.
Motorola funded joint research with the University of Illinois, where I concentrated on extensible, cost-effective testing techniques, including development of supporting tools and experimental evaluation. The techniques formed the basis for my book, The Craft of Software Testing. One of the tools (the Generic Coverage Tool) was used in the stress testing effort and has since been released under an open source license. Although now rather old, I believe it is still used in some UNIX shops.
1984 - 1988: Gould Computer Systems Division
I was chief programmer and later project manager for a port and enhancement of CMU Common Lisp. The project was ill-conceived, there being no market for Common Lisp on Gould hardware, but it was a technical success, in large part because of my insistence on sound testing during development.
After that project, I rejoined the mainstream of the Urbana Development Center, whose task was to add real-time extensions to UNIX. I was project manager for a training project staffed with new hires. They were to learn how to develop software well while doing real tasks of moderate criticality. This project was successful, as measured by the later success of the participants, most of whom went off to significantly better jobs.
1981 - 1984: Compion Corporation
In my first job out of college, I tested, then developed, network protocol modules for UNIX. Although I left testing early, its influence lingered, and there was always a strong testing component to my programming work. The interaction between testing and programming remains central to my thinking.
Compion Corporation also did secure computing work for the U.S. government. As part of this work, it developed a design verification system for proving the correctness of designs specified in a variant of first-order predicate calculus. I wrote the language parser, a specification checker, and most of the user documentation. I also developed a training course.
In January, 2005, I am most fluent in Ruby, with Java as my secondary language and Python as my tertiary language. I am somewhat rusty in C and Lisp (Common Lisp and Emacs Lisp). I have insignificant experience with C++, Objective-C, Smalltalk, and Delphi.
Chair of the Agile Alliance board during 2004-2005. The Agile Alliance is a non-profit organization dedicated to supporting people on Agile projects and causing more Agile projects to exist.
Track chair for the OOPSLA 2005 Essays track.
Program chair for the 2003 Pattern Languages of Programs (PLoP) conference.
Program committee member for the XP Agile Universe conference (2002-2004), the Agile Development Conference (2003), the International Quality Week conference (1997-1999), and the ACM International Symposium on Software Testing and Analysis (1993, 1994).
One of the authors of the Manifesto for Agile Software Development.
Organized a series of workshops on software testing patterns.
Cofounder and moderater of the agile-testing mailing list.
Taught courses on software testing or the pragmatics of software development for graduate students and advanced undergraduates at the University of Illinois (1992-1998).
MS Computer Science, University of Illinois, 1989
BS Math and Computer Science, University of Illinois, 1981
BA English Literature, University of Illinois, 1981
' Methodology Work is Ontology Work', OOPSLA Onward!, 2004.
'Behind the Screens', Better Software Magazine, April 2004.
'Bypassing the GUI', Software Testing and Quality Engineering Magazine, September 2002.
'A Manager's Guide to Evaluating Test Suites' (with Cem Kaner and James Bach), International Quality Week, May 2000.
'The Tester's Triad: Bug, Product, User', invited paper, Software Testing, Analysis, and Review (STAR), May 2000.
'Faults of Omission', Software Testing and Quality Engineering Magazine, January 2000.
'How to Misuse Code Coverage', International Symposium and Exposition on Testing Computer Software, June 1999 (previously presented at STAR 95).
'New Models for Test Development', keynote, International Quality Week, May 1999.
'Working Effectively With Developers', invited paper, Software Testing, Analysis, and Review, October 1998.
'When Should a Test be Automated?', International Quality Week, May 1998.
'Classic Testing Mistakes,' invited paper, Software Testing, Analysis, and Review (STAR), May 1997.
'The Test Manager at the Project Status Meeting' (with Steve Stukenborg), International Quality Week, May 1997.
The Craft of Software Testing, Prentice Hall 1995.
'Three Ways to Improve Your Testing,' invited paper, Pacific Northwest Software Quality Conference, October 1992.
'The Weak Mutation Hypothesis,' Proceedings of the ACM SIGSOFT Symposium on Testing, Analysis, and Verification, October 1991.
'Experience with the Cost of Different Coverage Goals for Testing', Pacific Northwest Software Quality Conference, October 1991.
'Two Experiments in Software Testing,' Technical Report UIUCDCS-R-90-1644, University of Illinois, 1990.
'A Survey of Test Effectiveness and Cost Studies,' Technical Report UIUCDCS-R-90-1652, University of Illinois, 1990.
'A Survey of Software Fault Surveys,' Technical Report UIUCDCS-R-90-1651, University of Illinois, 1990.
'Lynx: Hypertext on-the-Cheap for Software Maintenance,' M.S. Thesis, University of Illinois, 1989.
'The VERUS Design Verification System,' in Proceedings of the 1983 IEEE Symposium on Security and Privacy, April 1983.