Iterative and incremental developmentIterative and Incremental development is a software development process developed in response to the weaknesses of the more traditional waterfall model. The two most well known iterative development frameworks are the Rational Unified Process and the Dynamic Systems Development Method. Iterative and incremental development is also an essential part of Extreme Programming and all other agile software development frameworks.
Life-CycleThe basic idea behind iterative enhancement is to develop a software system incrementally, allowing the developer to take advantage of what was being learned during the development of earlier, incremental, deliverable versions of the system. Learning comes from both the development and use of the system, where possible. Key steps in the process were to start with a simple implementation of a subset of the software requirements and iteratively enhance the evolving sequence of versions until the full system is implemented. At each iteration, design modifications are made and new functional capabilities are added. The Procedure itself consists of the Initialization step, the Iteration step, and the Project Control List. The initialization step creates a base version of the system. The goal for this initial implementation is to create a product to which the user can react. It should offer a sampling of the key aspects of the problem and provide a solution that is simple enough to understand and implement easily. To guide the iteration process, a project control list is created that contains a record of all tasks that need to be performed. It includes such items as new features to be implemented and areas of redesign of the existing solution. The control list is constantly being revised as a result of the analysis phase. The iteration step involves the redesign and implementation of a task from project control list, and the analysis of the current version of the system. The goal for the design and implementation of any iteration is to be simple, straightforward, and modular, supporting redesign at that stage or as a task added to the project control list. The code can, in some cases, represent the major source of documentation of the system. The analysis of an iteration is based upon user feedback, and the program analysis facilities available. It involves analysis of the structure, modularity, usability, reliability, efficiency, and achievement of goals. The project control list is modified in light of the analysis results. Guidelines that drive the implementation and analysis include:
CharacteristicsUsing analysis and measurement as drivers of the enhancement process is one major difference between iterative enhancement and the current agile software development. It provides support for determining the effectiveness of the processes and the quality of product. It allows one to study, and therefore improve and tailor, the processes for the particular environment. This measurement and analysis activity can be added to existing agile development methods. In fact, the context of multiple iterations provides advantages in the use of measurement. Measures are sometimes difficult to understand in the absolute but the relative changes in measures over the evolution of the system can be very informative as they provide a basis for comparison. For example, a vector of measures, m1, m 2, ... mn, can be defined to characterize various aspects of the product at some point in time, e.g., effort to date, changes, defects, logical, physical, and dynamic attributes, environmental considerations. Thus an observer can tell how product characteristics like size, complexity, coupling, and cohesion are increasing or decreasing over time. One can monitor the relative change of the various aspects of the product or can provide bounds for the measures to signal potential problems and anomalies. Several utility software have been developed using this model, wherein the requirement is basically providing the customer with some working model at an early stage of the development cycle. As new features are added in, a new release is launched which has fewer bugs and more features than the previous release. Some of the typical examples of this kind of model are: Yahoo Messenger, Azureus, Cyber Sitter, Net Meter, PC Security, Limewire, P2P, etc. History
1970: Royce, W.W., Managing the Development of Large-Scale Software: Concepts and Techniques Proceedings, Wescon, August 1970 (also reprinted in Proceedings, ICSE9), which includes a "build it twice" prototyping step -- entered by Barry Boehm 1971: Mills, H., Top-down programming in large systems Debugging Techniques in Large Systems, R. Rustin, ed., Englewood Cliffs, N.J., Prentice-Hall, 1971. (Frederick Brooks mentions this in NoSilverBullet: "Some years ago Harlan Mills proposed that any software system should be grown by incremental development.") - entered by Christian Ohman 1973: Mills, H., On the Development of Large, Reliable Programs IEEE Symp. Comp. SW Reliability. Notes: I have heard this paper has relevance to iterative, but haven't read it yet. - CraigLarman 1975: Williams, R.D., Managing the Development of Reliable Software Proceedings, 1975 International Conference on Reliable Software, ACM/IEEE, April 1975, pp.3-8.
1975: Brooks, F., The Mythical Man-Month
1975: Basili, V. and Turner, A., Iterative Enhancement: A Practical Technique for Software Development :IEEE Transactions on SW Eng. 1981: Boehm, B., Software Engineering Economics Prentice-Hall. ISBN 0-13-822122-7 (pages 41-2, 254) allows for an iterative process when developing software. 1983: Booch, G., Software Engineering with Ada Benjamin-Cummings. (Around page 43) describes an iterative process for growing an object-oriented system. 1984: Madden, W and Rone, K., Design, Development, Integration: Space Shuttle Primary Flight Software System, CACM 27 9, Sept 1984, 914-925.
1984: Rzevski, G., Prototypes Versus Pilot Systems: Strategies For Evolutionary Information Systems Development, Approaches to Prototyping, Editors Budde et al, Springer-Verlag 1985: Boehm, B., A Spiral Model Of Software Development And Enhancement, 2nd. International Software Process Workshop. Coto de Caza, Trabuco Canyon, USA 1985. Wileden, J. and Dowson, M. (Eds.)
1986: Barry Boehm, A Spiral Model of Software Development and Enhancement, ACM SIGSOFT Software Engineering Notes (SEN), August 1986 1985: Rzevski, G., Trends in Information Systems Design, Infotech State of the Art Review, Mature Systems Design, edited by L. Evans, Pergamon Press 1986: Currit, P. Allen, Dyer, Michael and Mills, Harlan D, Certifying the Reliability of Software IEEE TOSE, Vol. SE-12, No. 1, Jan86.
1988: Gilb, T Principles of Software Engineering Management AW.
1988: Brigader General H Edward USA (ret.), Evolutionary Acquisition of Command and Control Systems: Becoming a Reality Signal, January 1988
1988: Boehm, B, A Spiral Model Of Software Development And Enhancement IEEE Computer. May 1988. 1991: Booch, G, Object-oriented Analysis and Design with Applications Addison-Wesley
1992: Ph. Kruchten, Un Processus de D¡§2Bloppement de Logiciel It??tif et Centr?dur l?Architecture 4?¨¢_ Congr?rde G?me Logiciel, Toulouse, France, D?€mbre 1991, EC2, Paris
1993: Cockburn, A, The Impact of Object-Orientation on Application Development IBM Systems Journal, 32(3), March 1993, pp. 420-444, reprinted in the 50-year anniversary issue, IBM Systems Journal 38(2-3), 1999. http://www.research.ibm.com/journal/sj38-23.html
1996: Ph. Kruchten, A Rational Development Process Crosstalk, 9 (7) July 1996, pp.11-16.
1996: Barry W. Boehm, 1996, Anchoring the Software Process IEEE Software, July 1996, pp.73-82.
1996: Booch, G, Object Solutions Addison-Wesley.
1998: Jennifer Stapleton, DSDM: Dynamic Systems Development Method Addison-Wesley 1998: Walker Royce, Software Project Management?A Unified Framework, Addison-Wesley-Longman 1999: Beedle, Mike; Devos, Martine; Sharon, Yonat; Schwaber, Ken; Sutherland, Jeff. SCRUM: An extension pattern language for hyperproductive software development. In Harrison, Neil; Foote, Brian; Ronhert, Hans (Eds.) Pattern Languages of Program Design 4. Addison-Wesley Software Patterns Series. 1992: Jacobson, Ivar, Object-Oriented Software Engineering: A Use Case Driven Approach. Chapter 2, The system life cycle.
|