I lean toward involving Test from the beginning. When building something, if you don’t support ways of testing it from the beginning, you end up having to rip it up and add that later. This hurts the company.
Let’s discuss “testing”.
As a developer, I consider test to be essential feedback, many kinds of tests to be important, and the Test department an essential ally in keeping the results of mistakes, poor assumptions, miscommunications etc. from making it out the door to customers.
I consider some areas to be the developer’s responsibility, and some areas to best be done by someone independent, with a different mind-set and set of skills.
Developer’s responsibility and tools: inside the edit / compile / debug loop
Don’t ever tell me developers shouldn’t (or don’t) do test:
- When using a syntax-highlighting editor: it examines the source code and provides immediate feedback to tell me whether e.g. my syntax is correct. Is this not “testing”?
- When compiling and linking: the compiler and linker perform highly complex and detailed processing of the code and returns pass / warning / error results in addition to the binaries. Is this not “testing”?
- I use TDD / unit testing, essentially a customized extension of the compiler’s code checking. I would MUCH rather write a second set of programs (unit tests), that help automate testing and debugging, than repeatedly manually step through the code by hand to debug it by hand. TDD is also much more productive and a better use of my time than repeated manual testing. It remembers how to test something after I haven’t touched that code for six months (or the original developer has moved on).
Best done by others:
- System test
- Manual exploratory testing
- Usability testing.
The problem is: I know exactly how the system should work – and will tend to politely give it only the expected inputs. I may not e.g. pound on the keyboard, skip configuration settings, enter commands too fast, enter foreign characters, enter 257-character names, click and drag a large document to an input field…
I build things, and my time is limited. I need someone else to help try to break them, in ways I did not expect.