This article needs additional citations for verification. (December 2010) |
A software development process prescribes a process for developing software. It typically divides an overall effort into smaller steps or sub-processes that are intended to ensure high-quality results. The process may describe specific deliverables – artifacts to be created and completed.[1]
The system development life cycle (SDLC) describes the typical phases that a development effort goes through from the beginning to the end of life for a system – including a software system. A development process prescribes how engineers go about their work in order to move the system through its life cycle. An SDLC methodology (a.k.a. model, framework) is a classification of processes or a blueprint for a process that is devised for the SDLC. For example, many software development processes can be classified as the spiral model. Process methodologies include: agile, waterfall, prototyping, iterative and incremental development, spiral development, rapid application development, and extreme programming.
History
The SDLC was first described in the 1960s, and was often conflated with the waterfall model for many years. According to Elliott (2004), the SDLC [waterfall model] can be considered the oldest formalized methodology for building information systems. The main idea of the SDLC has been "to pursue the development of information systems in a very deliberate, structured and methodical way, requiring each stage of the life cycle––from the inception of the idea to delivery of the final system––to be carried out rigidly and sequentially"[2] within the context of the framework being applied. The main goal of this methodology was "to develop large scale functional business systems in an age of large scale business conglomerates. Information systems activities revolved around heavy data processing and number crunching routines."[2] Other methodologies were devised later:
- 1970s
- Structured programming since 1969
- Cap Gemini SDM, originally from PANDATA, the first English translation was published in 1974. SDM stands for System Development Methodology
- 1980s
- Structured systems analysis and design method (SSADM) from 1980 onwards
- Information Requirement Analysis/Soft systems methodology
- 1990s
- Object-oriented programming (OOP) developed in the early 1960s and became a dominant programming approach during the mid-1990s
- Rapid application development (RAD), since 1991
- Dynamic systems development method (DSDM), since 1994
- Scrum, since 1995
- Team software process, since 1998
- Rational Unified Process (RUP), maintained by IBM since 1998
- Extreme programming, since 1999
- 2000s
- Agile Unified Process (AUP) maintained since 2005 by Scott Ambler
- Disciplined agile delivery (DAD) Supersedes AUP
- 2010s
- Scaled Agile Framework (SAFe)
- Large-Scale Scrum (LeSS)
- DevOps
Since DSDM in 1994, all of the methodologies on the above list except RUP have been agile methodologies - yet many organizations, especially governments, still use pre-agile processes (often waterfall or similar). Software process and software quality are closely interrelated; some unexpected facets and effects have been observed in practice.[3]
Among these, another software development process has been established in open source. The adoption of these best practices known and established processes within the confines of a company is called inner source.
Methodologies
The following are notable methodologies somewhat ordered by popularity.
- Agile
Agile software development refers to a group of frameworks based on iterative development, where requirements and solutions evolve via collaboration between self-organizing cross-functional teams. The term was coined in the year 2001 when the Agile Manifesto was formulated.
- Waterfall
The waterfall model is a sequential development approach, in which development flows one-way (like a waterfall) through the SDLC phases.
- Spiral
In 1988, Barry Boehm published a software system development spiral model, which combines key aspects of the waterfall model and rapid prototyping, in an effort to combine advantages of top-down and bottom-up concepts. It emphases a key area many felt had been neglected by other methodologies: deliberate iterative risk analysis, particularly suited to large-scale complex systems.
- Incremental
Various methods combine linear and iterative methodologies, with the primary objective of reducing inherent project risk by breaking a project into smaller segments and providing more ease-of-change during the development process.
- Prototyping
Software prototyping is about creating prototypes, i.e. incomplete versions of the software program being developed.
- Rapid
Rapid application development (RAD) is a methodology which favors iterative development and the rapid construction of prototypes instead of large amounts of up-front planning. The "planning" of software developed using RAD is interleaved with writing the software itself. The lack of extensive pre-planning generally allows software to be written much faster and makes it easier to change requirements.
- Shape Up
Shape Up is a software development approach introduced by Basecamp in 2018. It is a set of principles and techniques that Basecamp developed internally to overcome the problem of projects dragging on with no clear end. Its primary target audience is remote teams. Shape Up has no estimation and velocity tracking, backlogs, or sprints, unlike waterfall, agile, or scrum. Instead, those concepts are replaced with appetite, betting, and cycles. As of 2022, besides Basecamp, notable organizations that have adopted Shape Up include UserVoice and Block.[4][5]
- Chaos
Chaos model has one main rule: always resolve the most important issue first.
- Incremental funding
Incremental funding methodology - an iterative approach.
- Lightweight
Lightweight methodology - a general term for methods that only have a few rules and practices.
- Structured systems analysis and design
Structured systems analysis and design method - a specific version of waterfall.
- Slow programming
As part of the larger slow movement, emphasizes careful and gradual work without (or minimal) time pressures. Slow programming aims to avoid bugs and overly quick release schedules.
- V-Model
V-Model (software development) - an extension of the waterfall model.
- Unified Process
Unified Process (UP) is an iterative software development methodology framework, based on Unified Modeling Language (UML). UP organizes the development of software into four phases, each consisting of one or more executable iterations of the software at that stage of development: inception, elaboration, construction, and guidelines.
Process meta-models
Some process models are abstract descriptions for evaluating, comparing, and improving the specific process adopted by an organization.
- ISO/IEC 12207
ISO/IEC 12207 is the international standard describing the method to select, implement, and monitor the life cycle for software.
- Capability Maturity Model Integration
The Capability Maturity Model Integration (CMMI) is one of the leading models and is based on best practices. Independent assessments grade organizations on how well they follow their defined processes, not on the quality of those processes or the software produced. CMMI has replaced CMM.
- ISO 9000
ISO 9000 describes standards for a formally organized process to manufacture a product and the methods of managing and monitoring progress. Although the standard was originally created for the manufacturing sector, ISO 9000 standards have been applied to software development as well. Like CMMI, certification with ISO 9000 does not guarantee the quality of the end result, only that formalized business processes have been followed.
- ISO/IEC 15504
ISO/IEC 15504 Information technology—Process assessment, a.k.a. Software Process Improvement Capability Determination (SPICE), is a framework for the assessment of software processes. This standard is aimed at setting out a clear model for process comparison. SPICE is used much like CMMI. It models processes to manage, control, guide, and monitor software development. This model is then used to measure what a development organization or project team actually does during software development. This information is analyzed to identify weaknesses and drive improvement. It also identifies strengths that can be continued or integrated into common practice for that organization or team.
- ISO/IEC 24744
ISO/IEC 24744 Software Engineering—Metamodel for Development Methodologies, is a power type-based metamodel for software development methodologies.
- Soft systems methodology
Soft systems methodology is a general method for improving management processes.
- Method engineering
Method engineering is a general method for improving information system processes.
See also
- Systems development life cycle
- Computer-aided software engineering (some of these tools support specific methodologies)
- List of software development philosophies
- Outline of software engineering
- Software Project Management
- Software development
- Software development effort estimation
- Software documentation
- Software release life cycle
- Top-down and bottom-up design#Computer science
References
- ^ "Selecting a development approach" (PDF). Centers for Medicare & Medicaid Services (CMS) Office of Information Service. United States Department of Health and Human Services (HHS). March 27, 2008 [Original Issuance: February 17, 2005]. Archived from the original (PDF) on June 20, 2012. Retrieved October 27, 2008.
- ^ a b Geoffrey Elliott (2004). Global Business Information Technology: an integrated systems approach. Pearson Education. p. 87.
- ^ Suryanarayana, Girish (2015). "Software Process versus Design Quality: Tug of War?". IEEE Software. 32 (4): 7–11. doi:10.1109/MS.2015.87.
- ^ "Foreword by Jason Fried | Shape Up". basecamp.com. Retrieved September 11, 2022.
- ^ "Is Shape Up just a nice theory?". Curious Lab. Retrieved September 12, 2022.
External links
- Selecting a development approach Archived January 2, 2019, at the Wayback Machine at cms.hhs.gov.
- Gerhard Fischer, "The Software Technology of the 21st Century: From Software Reuse to Collaborative Software Design" Archived September 15, 2009, at the Wayback Machine, 2001