Test, Test, and Retest with All Stakeholders
Let's start by explaining what testing is not. Testing is not a written script for the intern to click on buttons and arrive at some expected result. Unfortunately, this is the way many development shops operate, and it's a ridiculously narrow view that misses most of the big picture.In my frequently less-than-humble opinion, testing actually begins with the development of specifications and requirements. Before any developer types "public class" in Visual Studio, an extensive discovery process must take place to flesh out exactly what your application is supposed to do. This requires involvement from every stakeholder in the process. End-users, subject matter experts (generally the "business people"), DBAs, hardware people…everyone. What's more, these people should stay involved throughout the entire process. It's easier to view development as an evolutionary process than getting a sign-off at the start of the project and delivering what you think they wanted.Using test-driven development (TDD) principles (more on that in a moment), you'll write tests before the actual code. These tests are frequently simple enough that requirements analysts (yeah, that might be the same person as you) can read the code to understand what's going on and determine whether they match the stated goals or use cases of the application's function.As development progresses, your suite of tests must still pass. If one or more of the tests fails, you'll have to revisit the code and fix it so that it passes the tests. This absolutely must not be a process that comes when you're "done" writing code.When the code is closer to "done," then you can start to get into some of the traditional testing and use human beings to find out if your user interface does what it should (along with automated tools such as ACT). The theory is that your underlying business logic already works because you've been testing it all along.Right up to the end of this process, to the release of the greatest software ever, all your stakeholders should be involved to make sure that the application performs as it should.