Software development: Difference between revisions

Content deleted Content added
m Tidying, link
 
(8 intermediate revisions by 7 users not shown)
Line 18:
*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.{{sfn|Dooley|2017|pp=8-9}}
*In the top-down [[waterfall model]], feasibility, analysis, [[software design|design]], development, [[Software quality assurance|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.{{sfn|Dooley|2017|p=9}}{{sfn|Langer|2016|pp=2-3, 5–6}}{{sfn|Tucker |Morelli |de Silva |2011|p=8}}
*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 and incremental development|Iterative development]] also lets developers prioritize the most important features, enabling lower priority ones to be dropped later on if necessary.{{sfn|Langer|2016|pp=2-3, 5–6}}{{sfn|Dooley|2017|p=11}} [[agile software development|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.{{sfn|Dooley|2017|p=13}} Derivatives of agile include [[extreme programming]] and [[Scrum (software development)|Scrum]].{{sfn|Dooley|2017|p=13}} [[Open-source software development]] typically uses agile methodology with concurrent design, coding, and testing, due to reliance on a distributed network of volunteer contributors.{{sfn|Tucker |Morelli |de Silva |2011|pp=41-42}}
*Beyond agile, some companies integrate [[information technology]] (IT) operations with software development, which is called [[DevOps]] or [[DevSecOps]] including [[computer security]].{{sfn|Vishnu|2019|pp=1-2}} DevOps includes continuous development, [[continuous testing|testing]], [[continuous integration|integration]] of new code in the version control system, [[continuous deployment|deployment]] of the new code, and sometimes [[continuous delivery|delivery]] of the code to clients.<ref>{{Cite journal |last=Laukkanen |first=Eero |last2=Itkonen |first2=Juha |last3=Lassenius |first3=Casper |date=2017 |title=Problems, causes and solutions when adopting continuous delivery—A systematic literature review |journal=Information and Software Technology |volume=82 |pages=55–79 |doi=10.1016/j.infsof.2016.10.001|doi-access=free }}</ref> The purpose of this integration is to deliver IT services more quickly and efficiently.{{sfn|Vishnu|2019|pp=1-2}}
Another focus in many programming methodologies is the idea of trying to catch issues such as [[security vulnerabilities]] and [[Bug (computer programming)|bugs]] as early as possible ([[shift-left testing]]) to reduce the cost of tracking and fixing them.{{sfn|Winters|Manshreck|Wright |2020|p=17}}
Line 63:
{{main|Software development 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 [[Software project management|project manager]].{{sfn|Saif|2019|pp=50–51}} Because the effort estimation is directly related to the size of the complete application, it is strongly influenced by the addition of features in the requirements—the more requirements, the higher the development cost. Aspects not related to functionality, such as the experience of the software developers and code reusability, are also essential to consider in estimation.{{sfn|Saif|2019|pp=52–53}} {{as of|2019}}, most of the tools for estimating the amount of time and resources for software development were designed for conventional applications and are not applicable to [[web application]]s or [[mobile application]]s.{{sfn|Saif|2019|p=45}}
 
===Integrated development environment===
 
Line 71 ⟶ 72:
{{main|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.{{sfn|Dooley|2017|pp=246–247}}
 
===View model===
[[File:TEAF Matrix of Views and Perspectives.svg|thumb|The [[TEAF]] Matrix of Views and Perspectives]]