The document discusses various software life cycle models including:
1. Traditional "waterfall" model and alternative agile methods like scrum and extreme programming.
2. Software maintenance is an ongoing process of modifying software to fix bugs, improve performance, or adapt to new environments. Each maintenance task involves analysis, design, implementation, and testing similar to initial development.
3. Software evolution follows "laws" like continuing change and increasing complexity over time if preventative measures are not taken during maintenance.
The document discusses various software life cycle models including:
1. Traditional "waterfall" model and alternative agile methods like scrum and extreme programming.
2. Software maintenance is an ongoing process of modifying software to fix bugs, improve performance, or adapt to new environments. Each maintenance task involves analysis, design, implementation, and testing similar to initial development.
3. Software evolution follows "laws" like continuing change and increasing complexity over time if preventative measures are not taken during maintenance.
Notes based on Vliet, Hans. (2007) Software Engineering: Principles and
Practices. Wiley
USTM - Business School. Computer Science: Software
Development Foundamentals Lecturer: Afrosio Sadie ([email protected]) Traditional models versus Real projects • Traditional models for the phased development of software are, to a large extent, ‘document-driven’. The pile of paper that is produced in the course of the project guides the development process. The development process is seen as a series of transformations. It starts with a clear requirements document, and ends with running code. In the next section we discuss the waterfall model, a well- known variation of the process model introduced on previous lectures. Alternative Models • Water Fall Model • Agile Methods • Incremental Developments • Rapid Application Development and DSDM • Extreme Programming • Scrum
• Rational Unified Process
• V-Formatted • Dev-Ops Maintenance or Evolution • Software maintenance is defined in IEEE Standard 1219 [IEEE93] as:
“The modification of a software product after delivery to correct faults, to
improve performance or other attributes, or to adapt the product to a modified environment.”
Each maintenance task, whether it concerns repairing an error or adapting a
system to new user requirements, in principle entails all aspects of the initial development cycle. During maintenance, we also have to analyze the problem and conceive a design which is subsequently implemented and tested. Maintenance • Made to an existing product • Analyze the problem and conceive a design which is subsequently implemented and tested • We do not start from scratch either • time pressure has larger impact Laws of evolution 1. Law of continuing change: A system that is being used undergoes continuous change, until it is judged more cost-effective to restructure the system or replace it by a completely new version. 2. Law of increasing complexity: A program that is changed becomes less and less structured (the entropy increases) and thus becomes more complex. One has to invest extra effort in order to avoid increasing complexity. 3. Law of self regulation: Software evolution processes are self-regulating and promote a smooth growth of the software. 4. Law of conservation of organisational stability (invariant work rate) The global progress in software development projects is statistically invariant. 5. Law of conservation of familiarity: A system develops a constant growth increment to sustain the organization’s familiarity with the system. When this increment is exceeded, problems concerning quality and usage will result. 6. Law of continuing growth: The functionality of a system needs to continuously increase in order to maintain user satisfaction. 7. Law of declining quality: The quality of a system declines, unless it is actively maintained and adapted to its changing environment. 8. Law of system feedback: Software evolution must be seen as a feedback system in order to achieve improvements. • Progressive activities: Activities contribute to an increase in the living standard;(Lehman ) • Anti-progressive activities: serve to maintain the status quo. It is an investment in the future, which had better be left to others.(Lehman) • Generating new code and changing existing code are progressive activities. These are interesting, challenging and rewarding activities. They provide the user with new or better functionality. Writing documentation, improving the structure of the code, and maintaining good communication between the people involved are anti-regressive activities. Neglecting these activities may not be harmful in the short term, but it certainly will be in the long term. Software Product Lines “A software product line is a set of software-intensive systems sharing a common, managed set of features that satisfy the specific needs of a particular market segment or mission and that are developed from a common set of core assets in a prescribed way.”
Variability and reuse are increasingly important in developing large-
scale and reliable, but also customized software systems. The goal of software product line engineering is the large-scale strategic reuse of functionality across multiple software products within a domain, such that different software configurations tailored for different customers or use cases are derived from a common code base. Software Product Line Engineering (SPLE) Software Product Line Engineering (SPLE) is a software engineering paradigm, which guides organizations toward the development of products from core assets rather than the development of products one by one from scratch. Product Line Development • Core Asset Management • Product Development • Management References • https://www.cs.cmu.edu/~ckaestne/17708/