Incremental and Iterative Development
Incremental and Iterative Development advocates the development of software systems through several iterations where each one of them increments the system functionality. The main idea of these approaches is to promote a short product assessment cycle in order to foster learning and avoid the propagation of error.
The different approaches differ on what is assessed. In agile development the iterations produce working software that adds value to the client, and so, it is the value of the product that is assessed denoting the stress these approaches put on validation. There are approaches where the iterations produce increments of functionality that are not immediately delivered to the client, and requirement specifications are used to assess the increment (verification). For instance, in the Construction phase of the Unified Process the system functionalities are produced incrementally through several iterations but the software is only delivered to the client after the transition phase.
Almost all software development processes follow an incremental and iterative approach but they differ on how often the produced value is delivered to the client. This difference denotes a spectrum which indicates whether the emphasis is on validation or verification.
The increments can be done either by implementing new functionality or by refining existing one. The latter is done to enhance the quality of the system, it can be a refactoring to enhance the understandability of the code or a refinement to improve, for instance, the performance.