Each large software project consists of several feature teams. Members of a team collaborate closely. Their offices are adjacent, and they fold their work into the product continuously, using automated testing tools to ensure that the pieces interlock and that the speed of key operations such as opening and saving files is maintained. As each team nears completion of its tasks, there are periodic milestones where we stop adding new functionality and take time to examine everything carefully to make sure all the new pieces work together correctly. Throughout the process, we test.
Developers test half the time, and testers test all the time.
As is true with most any of the world's complex engineering projects, we put more man-years into testing our products than we do in developing them. And that's before we begin beta testing, in which customers test software before its official release. One of our main beta testing sites is our own company. All in all, the development and testing process works well and the inefficiencies are surprisingly small.