User:Buidhe paid/sandbox
Part of a series on |
Software development |
---|
Software development is the process used to create software. Programming and maintaining the source code is the central step of this process, but it also includes conceiving the project, evaluating its feasibility, analyzing the business requirements, software design, testing, to release. Software engineering, in addition to development, also includes project management, employee management, and other overhead functions.[1] Software development may be sequential, in which each step is complete before the next begins, but iterative development methods where multiple steps can be executed at once and earlier steps can be revisited have also been devised to improve flexibility, efficiency, and scheduling.
Software development involves professionals from various fields, not just
Methodologies
Each of the available methodologies are best suited to specific kinds of projects, based on various technical, organizational, project, and team considerations.[3]
- The simplest methodology is the "code and fix", typically used by a single programmer working on a small project. After briefly considering the purpose of the program, the programmer codes it and runs it to see if it works. When they are done, the product is released. This methodology is useful for prototypes but cannot be used for more elaborate programs.[4]
- In the top-down waterfall model, feasibility, analysis, design, development, quality assurance, and implementation occur sequentially in that order. This model requires one step to be complete before the next begins, causing delays, and makes it impossible to revise previous steps if necessary.[5][6][7]
- With iterative processes these steps are interleaved with each other for improved flexibility, efficiency, and more realistic scheduling. Instead of completing the project all at once, one might go through most of the steps with one component at a time. Iterative development also lets developers prioritize the most important features, enabling lower priority ones to be dropped later on if necessary.[6][8] Agile is one popular method, originally intended for small or medium sized projects, that focuses on giving developers more control over the features that they work on to reduce the risk of time or cost overruns.[9] Derivatives of agile include extreme programming and Scrum.[9] Open-source software development typically uses agile methodology with concurrent design, coding, and testing, due to reliance on a distributed network of volunteer contributors.[10]
- Beyond agile, some companies integrate DevSecOps including computer security.[11] DevOps includes continuous development, testing, integration of new code in the version control system, deployment of the new code, and sometimes delivery of the code to clients.[12] The purpose of this integration is to deliver IT services more quickly and efficiently.[11]
Another focus in many programming methodologies is the idea of trying to catch issues such as
In 2009, it was estimated that 32 percent of software projects were delivered on time and budget, and with the full functionality. An additional 44 percent were delivered, but missing at least one of these features. The remaining 24 percent were cancelled prior to release.[14]
Steps
Feasibility
The sources of ideas for software products are plentiful. These ideas can come from
Analysis
Software analysis begins with a
During the analysis and design phases of software development,
Design
Design involves choices about the implementation of the software, such as which
Programming
The central feature of software development is creating and understanding the software that implements the desired functionality.[26] There are various strategies for writing the code. Cohesive software has various components that are independent from each other.[19] Coupling is the interrelation of different software components, which is viewed as undesirable because it increases the difficulty of maintenance.[27] Often, software programmers do not follow industry best practices, resulting in code that is inefficient, difficult to understand, or lacking documentation on its functionality.[28] These standards are especially likely to break down in the presence of deadlines.[29] As a result, testing, debugging, and revising the code becomes much more difficult. Code refactoring, for example adding more comments to the code, is a solution to improve the understandibility of code.[30]
Testing
Testing is the process of ensuring that the code executes correctly and without errors.
Production
Production is the phase in which software is deployed to the end user.[34] During production, the developer may create technical support resources for users[35][34] or a process for fixing bugs and errors that were not caught earlier. There might also be a return to earlier development phases if user needs changed or were misunderstood.[34]
Workers
Software development is performed by
Models and tools
Computer-aided software engineering
Documentation
Documentation comes in two forms that are usually kept separate—that intended for software developers, and that made available to the end user to help them use the software.
Effort estimation
Accurate estimation is crucial at the feasibility stage and in delivering the product on time and within budget. The process of generating estimations is often delegated by the
Integrated development environment
![](http://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Anjuta-2.0.0-2.png/220px-Anjuta-2.0.0-2.png)
An
Version control
Version control is a popular way of managing changes made to the software. Whenever a new version is checked in, the software saves a backup of all modified files. If multiple programmers are working on the software simultaneously, it manages the merging of their code changes. The software highlights cases where there is a conflict between two sets of changes and allows programmers to fix the conflict.[54]
View model
A view model is a framework that provides the viewpoints on the system and its environment, to be used in the software development process. It is a graphical representation of the underlying semantics of a view.
The purpose of viewpoints and views is to enable human engineers to comprehend very
Intellectual property
References
- ^ Dooley 2017, p. 1.
- ^ Dooley 2017, p. 12.
- ^ System Development Methodologies for Web-Enabled E-Business: A Customization Framework Linda V. Knight (DePaul University, USA), Theresa A. Steinbach (DePaul University, USA) and Vince Kellen (Blue Wolf, USA)
- ^ Dooley 2017, pp. 8–9.
- ^ Dooley 2017, p. 9.
- ^ a b Langer 2016, pp. 2–3, 5–6.
- ^ Tucker, Morelli & de Silva 2011, p. 8.
- ^ Dooley 2017, p. 11.
- ^ a b Dooley 2017, p. 13.
- ^ Tucker, Morelli & de Silva 2011, pp. 41–42.
- ^ a b Vishnu 2019, pp. 1–2.
- .
- ^ Winters, Manshreck & Wright 2020, p. 17.
- ^ Tucker, Morelli & de Silva 2011, p. 6.
- ^ Saif 2019, pp. 46–47.
- ^ Joseph M. Morris (2001). Software Industry Accounting. p.1.10
- ^ Langer 2016, p. 7.
- ^ Dooley 2017, pp. 3, 8.
- ^ a b c d Langer 2016, p. 8.
- ^ Langer 2016, pp. 2–3.
- ^ Dooley 2017, pp. 193–194.
- ^ Langer 2016, pp. 103–104.
- ^ Langer 2016, pp. 117, 127, 131, 137, 141.
- ^ Langer 2016, p. 106.
- ^ Dooley 2017, p. 142.
- ^ Tucker, Morelli & de Silva 2011, p. 31.
- ^ Langer 2016, pp. 8–9.
- ^ Tucker, Morelli & de Silva 2011, pp. 31–32.
- ^ Tucker, Morelli & de Silva 2011, pp. 34–35.
- ^ Tucker, Morelli & de Silva 2011, pp. 31–32, 35.
- ^ a b c Langer 2016, p. 9.
- ^ Dooley 2017, p. 272.
- ^ Tucker, Morelli & de Silva 2011, p. 9.
- ^ a b c Langer 2016, p. 10.
- ^ Tucker, Morelli & de Silva 2011, p. 37.
- ^ Dooley 2017, p. 2.
- ^ Winters, Manshreck & Wright 2020, pp. 30–31.
- ^ Tucker, Morelli & de Silva 2011, p. 7.
- ^ Tucker, Morelli & de Silva 2011, pp. 14–15.
- ^ Langer 2016, p. 22.
- ^ Langer 2016, pp. 108–110, 206.
- ^ Tucker, Morelli & de Silva 2011, p. 243.
- ^ Winters, Manshreck & Wright 2020, p. 192.
- ^ Winters, Manshreck & Wright 2020, pp. 193–195.
- ^ Tucker, Morelli & de Silva 2011, p. 143.
- ^ Tucker, Morelli & de Silva 2011, p. 144.
- ^ Winters, Manshreck & Wright 2020, p. 204.
- ^ Saif 2019, pp. 50–51.
- ^ Saif 2019, pp. 52–53.
- ^ Saif 2019, p. 45.
- ^ a b Tucker, Morelli & de Silva 2011, p. 68.
- ^ Dooley 2017, p. 236.
- ^ Dooley 2017, p. 239.
- ^ Dooley 2017, pp. 246–247.
- ^ Edward J. Barkmeyer ea (2003). Concepts for Automating Systems Integration Archived 25 January 2017 at the Wayback Machine NIST 2003.
- ^ Langer 2016, pp. 44–45.
Further reading
- Dooley, John F. (2017). Software Development, Design and Coding: With Patterns, Debugging, Unit Testing, and Refactoring. Apress. ISBN 978-1-4842-3153-1.
- Langer, Arthur M. (2016). Guide to Software Development: Designing and Managing the Life Cycle. Springer. ISBN 978-1-4471-6799-0.
- Saif, Syed Mohsin (2019). "Software Effort Estimation for Successful Software Application Development". In Vishnu, Pendyala (ed.). Tools and Techniques for Software Development in Large Organizations: Emerging Research and Opportunities: Emerging Research and Opportunities. IGI Global. pp. 45–97. ISBN 978-1-7998-1865-6.
- Tucker, Allen; Morelli, Ralph; de Silva, Chamindra (2011). Software Development: An Open Source Approach. CRC Press. ISBN 978-1-4398-8460-7.
- Vishnu, Pendyala (2019). "Evolution of Integration, Build, Test, and Release Engineering Into DevOps and to DevSecOps". In Vishnu, Pendyala (ed.). Tools and Techniques for Software Development in Large Organizations: Emerging Research and Opportunities: Emerging Research and Opportunities. IGI Global. pp. 1–20. ISBN 978-1-7998-1865-6.
- Winters, Titus; Manshreck, Tom; Wright, Hyrum (2020). Software Engineering at Google: Lessons Learned from Programming Over Time. O'Reilly Media, Inc. ISBN 978-1-4920-8276-7.
External links
Media related to Software development at Wikimedia Commons