Artima Weblogs | Alberto Savoia's Weblog | Discuss | Email | Print | Bloggers | Previous | Next
Sponsored Link •
Testing is tough for most programmers, but without some amount of developer testing delivering quality software is even tougher. We propose a new software specialization and position – Developer Testing Master – to help software organizations fill the horrifically expensive testing gap between development and QA.
Today, we take having a software quality assurance department armed with dedicated QA engineers and tools for granted. Even most software start-ups, when they get to half-a-dozen or so engineers, start thinking about their first dedicated QA hire. This wasn’t always so. I remember that when I joined Sun Microsystems in the early 80s, the company headcount was about three hundred people and there was no formal software QA department, or even a dedicated software QA person. I was told “If you can run ‘vi’ after building the system, then everything is probably working OK.” By the time I left Sun in 1998, they had a VP of Quality and hundreds of software QA engineers.
A cynic would probably explain the evolution and growth of software QA as a ploy for developers to pawn off testing responsibilities. But the reality, and my experience, is that having an organization and group of people whose main job and focus is software testing makes a lot of sense. In most fields, when the scope of work and body of knowledge grows past a certain point, specialists eventually emerge. In the beginning, almost all doctors were general practitioners; today most of them are specialists. In the Old West your dentist and barber might have been the same person – I guess the kind of chairs they used were close enough. It’s more likely, however, that in those Old West towns there weren’t enough people to keep both a barber and a dentist fully employed, nor many hairstyles to master, or cures to know about. But if there is enough work to keep busy, and enough domain knowledge to leverage, specialization makes a lot of sense. I’d rather have a surgeon operate on me than a general practitioner. And if my gray matter needed tending, I would not settle for any surgeon, I’d want someone even more specialized – a brain surgeon.
A QA organization is a must. The kind of black-box, functional, integration, testing that most QA organizations perform is necessary, but it is not sufficient. Waiting for QA to find all bugs is very inefficient – especially when it comes to unit level defects that could have been caught and fixed during development at a fraction of the cost.
I am a big believer in developer testing. The idea that developers should take responsibility for unit testing their own code makes a lot of sense. Thanks to eXtreme Programming and other Agile methodologies, and testing frameworks like JUnit, developer testing is finally catching on – but slowly, and it is also encountering a number adoption problems and technical difficulties that could keep it from becoming a mainstream practice.
In many cases, developers lack the drive or skills to adequately unit test their own code. Testing can be as technically challenging as development – and often more challenging. On top of that, unit testing takes time. It takes 3-4 lines of JUnit for every line of Java to get good code coverage, for example. And when most developers, or their managers, are pressed for time, features and schedules usually trump testing.
I believe that software development has gotten to the point where we need more specialization in testing. We need a new type of tester. One that will bridge the gap between development and QA. A champion that will leverage and maximize the developer testing effort. Let’s tentatively call this position Developer Testing Master (as in Build Master and Web Master) – feel free to suggest better names.
What would a Developer Testing Master (DTM) do? Here’s the draft for a hypothetical job spec:
This is a high-visibility, high-impact, senior software development position, reporting to the VP of Software Engineering at Company ABC. The successful candidate will help our software engineering organization bridge the gap between development and QA by providing developers with the infrastructure, tools, training, and support necessary to be successful at developer/unit testing.
[Should start with the organization’s standard requirements for non-junior software developers. Remember, this should not be an entry-level or junior position. This person has to be at least as good as other developers – ideally better than most of them since the DTM will often have to understand, clean-up, and make testable some of the un-testable code the other developers have created.]
Must have demonstrated passion for, and experience in, developer testing. Should be extremely familiar with continuous integration and testing tools and frameworks (CruiseControl, xUnit, code-coverage tools, etc.)
Must have leadership ability to evangelize, motivate, and train developers in the art and science of unit testing.
Help to set-up a software development environment that enables continuous integration and testing. Environment must support automated hourly and nightly builds. The former must run smoke tests and the latter the full battery of developer tests. Might have to implement distributed testing framework to allow parallel test execution.
Analyze the existing code base and recommend and/or implement re-designs and refactorings to make the code base testable.
Extend and customize xUnit framework to standardize and simplify unit test writing for the other developers. Extend the “TestCase” class by creating “CompanyABCTestCase” and maintain the latter. Implement initial set of mocks, test fixtures, and other set-up methods to enable other developers to write true unit tests that don’t depend on external system resources.
Create and deliver basic unit testing training material to educate all developers in the art and science of unit testing.
Work with the team to decide on developer testing metrics and objectives. Create, maintain, and publish a developer-testing dashboard to track those objectives.
There it is. Any takers? Needless to say, the position should pay at least as much as a similar pure development position, ideally more (specialists usually charge more).
Note: To give credit where credit is due, this post (including the brain surgeon analogy) was inspired by the following David Rubinstein’s article in SD Times:
David concludes the article as follows: “Bring in the specialist. Just as you wouldn’t have your family doctor perform brain surgery, you should leave the test scripting and maintenance to a tester, freeing up the developers to do what they do best—innovate.”
While I like the idea of bringing in a specialist, I think that completely exonerating developers from testing, as David’s last sentence suggest, might be going to far. The job of the Developer Testing Master is to help get things started and keep them going, overcome the initial hurdles, make it easier for the developers to test their own code by providing the basic framework, and then hang around to provide additional help as needed. In other words: teach a man to fish, but stick around to help them clean the fish, cook it, and eat it.
Have an opinion? Readers have already posted 23 comments about this weblog entry. Why not add yours?
If you'd like to be notified whenever Alberto Savoia adds a new entry to his weblog, subscribe to his RSS feed.
|Alberto Savoia is founder and CTO at Agitar Software, and he has been life-long agitator and innovator in the area of software development and testing tools and technology. Alberto's software products have won a number of awards including: the JavaOne's Duke Award, Software Development Magazine's Productivity Award, Java Developer Journal's World Class Award, and Java World Editor's Choice Award. His current mission is to make developer unit testing a broadly adopted and standar industry practice rather than a rare exception. Before Agitar, Alberto worked at Google as the engineering executive in charge of the highly successful and profitable ads group. In October 1998, he cofounded and became CTO of Velogic/Keynote (NASD:KEYN), the pioneer and leading innovator in Internet performance and scalability testing. Prior to Velogic, Alberto had 13-year career at Sun Microsystems where his most recent positions were Founder and General Manager of the SunTest business unit, and Director of Software Technology Research at Sun Microsystems Laboratories.|