In the beginning, the waterfall method of software development dominated. The requirements flowed over the cliff to the designers; the design flowed over the cliff to the developers; the code flowed over the cliff to the testers; and the software was tflowed the cliff to manufacturing. Over time it was determined that as long as bugs were being found in testing, the design/development/testing cycle had to go through several iterations before it went to manufacturing. Thus was born the tornado variant of the waterfall method. It was still the case that all requirements and features were coded prior to the first iteration release to testing.
Then, testing started using automation as tools used to develop automated test suites became available. That meant that testers needed the software available sooner - or at least in pre-release form - to be able to write the automated tests. Software managers discovered that they did not have to implement all the requirements and features for the first iteration. They needed to do just enough to give the testers the ability to write their tests.
Soon software managers discovered that if they did small iterations, testing was simpler and rework was easier. Thus, about ten years ago the agile methodology was born. Agile is built on the premise that each iteration implements a few requirements and the software is built up incrementally. Instead of having two to four large iterations, ten or more small ones are done. Agile also introduced a new concept: at the end of each iteration, the software would be fully releasable and management could decide not to implement any more requirements or features. These unimplemented requirements and features could be left to the next release.
Now agile is all the rage. But agile is not a silver bullet. If not done properly, it may lead to chaos and loss of control.
Agile requires good detailed requirements definition. Agile iterations are two to four weeks long and there is only one to two weeks of development time. There can be no confusion as to what requirements and features are being implemented. Under the waterfall method, requirements and feature definitions can be left very general. The designers and developers can work out the details. There is no time for this in agile development. Additionally, in the waterfall method, the order in which the requirements and features are implemented is unimportant and sometimes they are done inside to outside, i.e. the internals are done first and the user interface last. In agile order is critical since each iteration results in a releasable product. You can't wait until iteration six to do the user interface. You must have enough requirements and features done to result in a usable product.
Agile requires unit testing to be more rigorous. In the waterfall method some developers would leave complex testing to be done by system testing and then fix any bugs found. The shortened iteration times don't allow for this. More problems need to be caught earlier for agile to succeed. Automated unit testing is very important. That can lead to test driven development where developers code to test cases instead of requirements and features.
Agile requires a well defined integration testing plan. Only a few days can be devoted to integration testing. In the waterfall method, integration testing can be ad hoc since a week or more can be devoted to it. Not so in agile. A detailed plan has to be created to keep the iteration on track.
Agile requires system testing to be very efficient. One to two weeks isn't much time to do testing. Additionally as each iteration is tested, the requirements and features from previous iterations must be retested to ensure that new requirements and features didn't break those previously implemented. That means that testing must rely on automation. Yet not everything can be tested using automation. Some user interface elements must be tested by visual inspection.
Agile requires that build and release software and documentation be kept up to date. Since the product can be released at the end of any iteration, the build and release scripts and the documentation must be ready. In the waterfall method documentation could be left until the last iteration.
Agile requires that the entire software development process and team be more efficient and more disciplined. With the shortened iteration cycles there is no time to be wasteful. Otherwise the iterations will start being longer and longer until the process turns back into the waterfall method.