Software development process: Difference between revisions

Content deleted Content added
compensating for prejudice of previous para
Comparison: Reduce table width
 
Line 1:
{{Short description|Process by which software is developed}}
A '''software development process''' is a process used to develop [[computer software]]. It may be an ad hoc process, devised by the team for one [[project]], but the term often refers to a standardised, documented [[methodology]] which has been used before on similar projects or one which is used habitually within an [[organisation]].
{{Use mdy dates|date=December 2023}}
{{more citations needed|date=December 2010}}
{{Use American English|date=April 2022}}
{{software development process|Core activities}}
 
A '''software development process''' prescribes a process for [[software development|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 [[deliverable]]s {{endash}} artifacts to be created and completed.<ref name="CMS08">{{cite web |website=Centers for Medicare & Medicaid Services (CMS) Office of Information Service |url=http://www.cms.gov/Research-Statistics-Data-and-Systems/CMS-Information-Technology/XLC/Downloads/SelectingDevelopmentApproach.pdf |title=Selecting a development approach |publisher=United States Department of Health and Human Services (HHS) |orig-date=Original Issuance: February 17, 2005 |date=March 27, 2008 |access-date=October 27, 2008 |archive-url=https://web.archive.org/web/20120620212919/http://www.cms.gov/Research-Statistics-Data-and-Systems/CMS-Information-Technology/XLC/Downloads/SelectingDevelopmentApproach.pdf |archive-date=June 20, 2012 |url-status=dead}}</ref>
Some managers who are held accountable for software development, may seek to find the commonalities in the efforts of their organizations. If those managers are process-oriented, (rather than people-oriented, task-oriented, profit-oriented, project-oriented, etc.) then they may seek methodologies or other proxies which can serve as templates for the software development process.
 
Although not strictly limited to it, software development process often refers to the high-level process that governs the development of a software system from its beginning to its end of life {{endash}} known as a methodology, model or framework. 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 {{endash}} including a software system. A methodology prescribes how [[engineer]]s go about their work in order to move the system through its life cycle. A methodology is a classification of processes or a blueprint for a process that is devised for the SDLC. For example, many processes can be classified as a spiral model.
Of course, it is entirely rational for other managers who are not process-oriented to use a documented software development process or methodology. In such a case one might say that the methodology is used by them as a "proxy" for the necessary set of process-oriented skills required in any [[software engineering]] project.
 
Software process and [[software quality]] are closely interrelated; some unexpected facets and effects have been observed in practice.<ref name="ieeesw">{{Cite journal | doi = 10.1109/MS.2015.87 | title = Software Process versus Design Quality: Tug of War? | journal = IEEE Software | volume = 32 | issue = 4 | pages = 7–11 | year = 2015 | last1 = Suryanarayana | first1 = Girish | doi-access = free }}</ref>
== Processes and meta-processes ==
 
==Methodology==
A growing body of [[software development]] [[organisation]]s implement process methodologies. Many of them are in the [[defence industry]], which in the U.S. requires a '[[Rating]]' based on '[[Process model]]s' to obtain [[contract]]s.
The SDLC drives the definition of a methodology in that a methodology must address the phases of the SDLC. Generally, a methodology is designed to result in a high-quality system that meets or exceeds expectations (requirements) and is delivered on time and within budget even though computer systems can be complex and integrate disparate components.<ref>{{cite web|url=http://foldoc.org/Systems+Development+Life+Cycle |title=Systems Development Life Cycle from |publisher=FOLDOC |access-date=2013-06-14}}</ref> Various methodologies have been devised, including [[Waterfall model|waterfall]], [[Spiral model|spiral]], [[Agile software development|agile]], [[Software prototyping#Throwaway prototyping|rapid prototyping]], [[Incremental development|incremental]], and synchronize and stabilize.<ref>{{cite web |date=May 2012 |title=Software Development Life Cycle (SDLC) |url=http://softwarelifecyclepros.com/wp-content/uploads/2012/05/Tutorial-Software-Development-LifeCycle-SDLC.pdf |access-date=2025-06-26 |website=softwarelifecyclepros.com }}</ref>
 
A major difference between methodologies is the degree to which the phases are sequential vs. iterative. Agile methodologies, such as [[Extreme Programming|XP]] and [[Scrum (development)|scrum]], focus on lightweight processes that allow for rapid changes.<ref>{{Cite web | url=https://aristeksystems.com/blog/sdlc-overview/| title=SDLC Overview: Models & Methodologies| access-date=2021-12-12}}</ref> [[Iterative and incremental development|Iterative]] methodologies, such as [[Rational Unified Process]] and [[dynamic systems development method]], focus on stabilizing project scope and iteratively expanding or improving products. Sequential or big-design-up-front (BDUF) models, such as waterfall, focus on complete and correct planning to guide larger projects and limit risks to successful and predictable results.<ref>{{Cite book |last=Arden |first=Trevor |title=Information technology applications |date=1991 |publisher=Pitman |isbn=978-0-273-03470-4 |___location=London}}</ref> [[Anamorphic development]] is guided by project scope and adaptive iterations. In scrum,<ref>{{cite web |url=https://www.scrum.org/resources/what-is-scrum |title=What is Scrum? |date=December 24, 2019 }}</ref> for example, one could say a single user story goes through all the phases of the SDLC within a two-week sprint. By contrast the waterfall methodology, where every business requirement{{Citation needed|date=August 2021}} is translated into feature/functional descriptions which are then all implemented typically over a period of months or longer.{{Citation needed|date=August 2021}}
The [[Capability Maturity Model]] (CMM) grades organizations on how well they create software accrording to how they define and execute their processes. [[ISO 9000]] describes standards for formally organizing processes with documentation.
 
A project can include both a [[project life cycle]] (PLC) and an SDLC, which describe different activities. According to Taylor (2004), "the project life cycle encompasses all the activities of the [[project]], while the systems development life cycle focuses on realizing the product [[requirement]]s".<ref>{{cite book |first=James |last=Taylor |year=2004 |title=Managing Information Technology Projects |page=39}}</ref>
[[ISO 15504]] or [[Software Process Improvement Capability dEtermination|SPICE]], The software process life cycle is also gaining wide usage. This standard is aimed at setting out a clear model for process comparison. SPICE is used much like CMM and 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.
 
===History===
[[Six Sigma]] is a [[methodology]] that uses data and [[statistical analysis]] to measure and improve a company's [[operational performance]]. It works by identifying and eliminating "[[defect]]s" in manufacturing and service-related processes. The maximum permissible defects are 3.4 per million opportunities. However Six Sigma is manufacturing-oriented, not software development-oriented and needs further research to even apply to software development.
The term ''SDLC'' is often used as an abbreviated version of ''SDLC methodology''. Further, some use ''SDLC'' and ''traditional SDLC'' to mean the waterfall methodology.
 
According to Elliott (2004), SDLC "originated in the 1960s, to develop large scale functional [[business systems]] in an age of large scale [[business conglomerate]]s. Information systems activities revolved around heavy [[data processing]] and [[number crunching]] routines".<ref name="Ell04"/> The [[structured systems analysis and design method]] (SSADM) was produced for the UK government [[Office of Government Commerce]] in the 1980s. Ever since, according to Elliott (2004), "the traditional life cycle approaches to systems development have been increasingly replaced with alternative approaches and frameworks, which attempted to overcome some of the inherent deficiencies of the traditional SDLC".<ref name="Ell04"/> 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"<ref name="Ell04">{{cite book |author=Geoffrey Elliott |date=2004 |title=Global Business Information Technology: an integrated systems approach |publisher=Pearson Education |page=87}}</ref> within the context of the framework being applied.
[[Agile Methods]], such as [[Extreme programming]] and [[Lean manufacturing|Lean software development]] are full blown methods that take an incremental or [[evolutionary approach]] to software development.
 
Other methodologies were devised later:
== Lists ==
 
; 1970s
Some [[software development]] methods:
* [[Structured programming]] since 1969
* [[Top-Down Model]]
* [[Cap Gemini SDM]], originally from PANDATA, the first English translation was published in 1974. SDM stands for System Development Methodology
* [[Bottom Up]]
; 1980s
* [[Waterfall model]]
* [[Structured systems analysis and design method]] (SSADM) from 1980 onwards
* [[Spiral model]]
* [[soft systems methodology|Information Requirement Analysis/Soft systems methodology]]
* [[Chaos model]]
; 1990s
* [[Prototyping]]
* [[Object-oriented programming]] (OOP) developed in the early 1960s and became a dominant programming approach during the mid-1990s
* [[Evolutionary prototyping]]
* [[IterativeRapid and Incrementalapplication development]] (RAD), since 1991
* [[Dynamic systems development method]] (DSDM), since 1994
* [[Extreme Programming]]
* [[Scrum (software development)|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).
Some paradigms for programming software:
* [[Procedural programming]]
* [[Structured programming]]
* [[Imperative programming]]
* [[Declarative programming]]
* [[Functional programming]]
* [[Literate programming]]
* [[Object oriented programming]]
* [[Concurrent programming]]
* [[Component-oriented programming]]
 
===Examples===
There are also a variety of kinds of [[software documentation]].
 
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 application development| rapid prototyping]], in an effort to combine advantages of [[top-down and bottom-up design| 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
[[Iterative and incremental development|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 [[prototype]]s 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 (company)|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 model|waterfall]], [[Agile software development|agile]], or [[Scrum (software development)|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.<ref>{{Cite web |title=Foreword by Jason Fried {{!}} Shape Up |url=https://basecamp.com/shapeup/0.1-foreword |access-date=September 11, 2022 |website=basecamp.com}}</ref><ref>{{Cite web |title=Is Shape Up just a nice theory? |url=https://www.curiouslab.io/blog/is-shape-up-just-a-nice-theory |access-date=September 12, 2022 |website=Curious Lab |language=en-AU}}</ref>
 
; 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 (culture)|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.
 
===Comparison===
{{More citations needed section|date=January 2024}}
 
The waterfall model describes the SDLC phases such that each builds on the result of the previous one.<ref name="US DJ03">US Department of Justice (2003). [https://www.justice.gov/archive/jmd/irm/lifecycle/table.htm INFORMATION RESOURCES MANAGEMENT] Chapter 1. Introduction.</ref><ref name="EverettSoftware07">{{cite book |chapter-url=https://books.google.com/books?id=z8UdPmvkBHEC&pg=PA29 |chapter=Chapter 2: The Software Development Life Cycle |title=Software Testing: Testing Across the Entire Software Development Life Cycle |author=Everatt, G.D. |author2=McLeod, R Jr |publisher=John Wiley & Sons |pages=29–58 |year=2007 |isbn=9780470146347}}</ref><ref name="UnhelkarTheArt16">{{cite book |url=https://books.google.com/books?id=ZqnMBQAAQBAJ&pg=PA56 |title=The Art of Agile Practice: A Composite Approach for Projects and Organizations |author=Unhelkar, B. |publisher=CRC Press |pages=56–59 |year=2016 |isbn=9781439851197}}</ref><ref name="LandPract12">{{cite book |url=https://books.google.com/books?id=SsBF_lVbK_gC&pg=PA341 |title=Practical Support for Lean Six Sigma Software Process Definition: Using IEEE Software Engineering Standards |author=Land, S.K.|author-link= Susan K. Land |author2=Smith, D.B. |author3=Walz, J.W. |publisher=John Wiley & Sons |pages=341–3 |year=2012 |isbn=9780470289952}}</ref> Not every project requires that the phases be sequential. For relatively simple projects, phases may be combined or overlapping.<ref name="US DJ03" /> Alternative methodologies to waterfall are described and compared below.<ref name="Post, G. 2006">Post, G., & Anderson, D., (2006). ''Management information systems: Solving business problems with information technology''. (4th ed.). New York: McGraw-Hill Irwin.</ref>
 
{| class="wikitable" style="margin:auto;"
|+ Comparison of methodologies
|-
! style="width:5%;"|
!| Waterfall
!| [[Rapid application development| RAD]]
!| [[Open-source software development| Open source]]
!| [[Object-oriented programming|OOP]]
!| [[Joint applications development| JAD]]
!| [[Software prototyping| proto-typing]]
!| [[End-user development| End User]]
|-
| Control
| Formal
| MIS
| Weak
| Standards
| Joint
| User
| User
|-
| Time frame
| Long
| Short
| Medium
| Any
| Medium
| Short
| Short
|-
| Users
| Many
| Few
| Few
| Varies
| Few
| One or two
| One
|-
| MIS staff
| Many
| Few
| Hundreds
| Split
| Few
| One or two
| None
|-
| Transaction/[[Decision support system|DSS]]
| Transaction
| Both
| Both
| Both
| DSS
| DSS
| DSS
|-
| Interface
| Minimal
| Minimal
| Weak
| Windows
| Crucial
| Crucial
| Crucial
|-
| Documentation and training
| Vital
| Limited
| Internal
| In Objects
| Limited
| Weak
| None
|-
| Integrity and security
| Vital
| Vital
| Unknown
| In Objects
| Limited
| Weak
| Weak
|-
| Reusability
| Limited
| Some
| Maybe
| Vital
| Limited
| Weak
| None
|}
 
== Process meta-models ==
{{Further|Process patterns}}
 
Some [[process model]]s 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 [[Capability Maturity Model|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 ==
 
<!-- Please don't list individual software development methodologies here. Instead, integrate them in the text above or in the articles mentioned -->
[[project lifecycle]], [[project]], [[process]], [[programming tool|software tool]], [[model]], [[methodology]], [[software engineering]], and [[list of software engineering topics]].
 
* [[Computer-aided software engineering]]
* [[List of software development philosophies]]
* [[Outline of software engineering]]
* [[Software development effort estimation]]
* [[Software documentation]]
* [[Software project management]]
* [[Software release life cycle]]
 
== References ==
{{Reflist}}
 
== External links ==
{{Commons category|Software development methodology}}
 
* [http://www.cms.gov/Research-Statistics-Data-and-Systems/CMS-Information-Technology/XLC/Downloads/SelectingDevelopmentApproach.pdf Selecting a development approach] {{Webarchive|url=https://web.archive.org/web/20190102182947/http://www.cms.gov/Research-Statistics-Data-and-Systems/CMS-Information-Technology/XLC/Downloads/SelectingDevelopmentApproach.pdf |date=January 2, 2019 }} at cms.hhs.gov.
* Gerhard Fischer, [http://l3d.cs.colorado.edu/~gerhard/papers/isfst2001.pdf "The Software Technology of the 21st Century: From Software Reuse to Collaborative Software Design"] {{Webarchive|url=https://web.archive.org/web/20090915033939/http://l3d.cs.colorado.edu/~gerhard/papers/isfst2001.pdf |date=September 15, 2009 }}, 2001
 
{{Software engineering}}
{{Authority control}}
 
{{DEFAULTSORT:Software Development Methodology}}
 
[[Category:Software development process| ]]
[[Category:Methodology]]
[[Category:Software engineering]]