The role of testing in many development shops has been much under valued, relegated as it is to something of an afterthought in the project life cycle. In part because of the distributed nature of our teams, testing at Cognifide is tightly integrated into the specification and requirements analysis processes.
To be successful in our goal of producing reliably high quality software we need to ensure that we understand and deliver not just what our customers ask us for, but also answer a number of deeper questions, such as: Who are our customer's customers? Why are they asking for this?
At Cognifide we emphasise automation of quality assurance processes as far as possible. Manual testing may be suitable for one-off "throw away" efforts, but in most cases maintenance of a code base as it evolves over time, be it a web site or an infrastructure product, requires dependable and efficient regression testing. By focusing on producing automated test suites during development, future maintenance costs can be greatly reduced.
Manual testing is still important, allowing deviation from test scripts to make use of testers' natural deviousness to break things long before they reach the hands of customers.