2.1 Identification of need 2.2 Planning 2.3 Designing 2.4 Implementation, testing and documenting 2.5 Deployment and maintenance
3.1 View model
4 See also
4.1 Roles and industry 4.2 Specific applications
5 References 6 Further reading
This section does not cite any sources. Please help improve this section by adding citations to reliable sources. Unsourced material may be challenged and removed. (August 2010) (Learn how and when to remove this template message)
A software development process (also known as a software development methodology, model, or life cycle) is a framework that is used to structure, plan, and control the process of developing information systems. A wide variety of such frameworks has evolved over the years, each with its own recognized strengths and weaknesses. There are several different approaches to software development: some take a more structured, engineering-based approach to developing business solutions, whereas others may take a more incremental approach, where software evolves as it is developed piece-by-piece. One system development methodology is not necessarily suitable for use by all projects. Each of the available methodologies is best suited to specific kinds of projects, based on various technical, organizational, project and team considerations. Most methodologies share some combination of the following stages of software development:
Analyzing the problem Market research Gathering requirements for the proposed business solution Devising a plan or design for the software-based solution Implementation (coding) of the software Testing the software Deployment Maintenance and bug fixing
These stages are often referred to collectively as the software
development lifecycle, or SDLC. Different approaches to software
development may carry out these stages in different orders, or devote
more or less time to different stages. The level of detail of the
documentation produced at each stage of software development may also
vary. These stages may also be carried out in turn (a “waterfall”
based approach), or they may be repeated over various cycles or
iterations (a more "extreme" approach). The more extreme approach
usually involves less time spent on planning and documentation, and
more time spent on coding and development of automated tests. More
“extreme” approaches also promote continuous testing throughout
the development lifecycle, as well as having a working (or bug-free)
product at all times. More structured or “waterfall” based
approaches attempt to assess the majority of risks and develop a
detailed plan for the software before implementation (coding) begins,
and avoid significant design changes and re-coding in later stages of
the software development lifecycle planning.
There are significant advantages and disadvantages to the various
methodologies, and the best approach to solving a problem using
software will often depend on the type of problem. If the problem is
well understood and a solution can be effectively planned out ahead of
time, the more "waterfall" based approach may work the best. If, on
the other hand, the problem is unique (at least to the development
team) and the structure of the software solution cannot be easily
envisioned, then a more "extreme" incremental approach may work best.
Students of engineering learn engineering and are rarely exposed to finance or marketing. Students of marketing learn marketing and are rarely exposed to finance or engineering. Most of us become specialists in just one area. To complicate matters, few of us meet interdisciplinary people in the workforce, so there are few roles to mimic. Yet, software product planning is critical to the development success and absolutely requires knowledge of multiple disciplines.
Because software development may involve compromising or going beyond
what is required by the client, a software development project may
stray into less technical concerns such as human resources, risk
management, intellectual property, budgeting, crisis management, etc.
These processes may also cause the role of business development to
overlap with software development.
Planning is an objective of each and every activity, where we want to
discover things that belong to the project. An important task in
creating a software program is extracting the requirements or
requirements analysis. Customers typically have an abstract idea of
what they want as an end result but do not know what software should
do. Skilled and experienced software engineers recognize incomplete,
ambiguous, or even contradictory requirements at this point.
Frequently demonstrating live code may help reduce the risk that the
requirements are incorrect.
"Although much effort is put in the requirements phase to ensure that
requirements are complete and consistent, rarely that is the case;
leaving the software design phase as the most influential one when it
comes to minimizing the effects of new or changing requirements.
Requirements volatility is challenging because they impact future or
already going development efforts."
Once the general requirements are gathered from the client, an
analysis of the scope of the development should be determined and
clearly stated. This is often called a scope document.
Software design and Systems design
Once the requirements are established, the design of the software can
be established in a software design document. This involves a
preliminary, or high-level design of the main modules with an overall
picture (such as a block diagram) of how the parts fit together. The
language, operating system, and hardware components should all be
known at this time. Then a detailed or low-level design is created,
perhaps with prototyping as proof-of-concept or to firm up
Implementation, testing and documenting
Implementation is the part of the process where software engineers
actually program the code for the project.
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
The purpose of viewpoints and views is to enable human engineers to
comprehend very complex systems and to organize the elements of the
problem and the solution around domains of expertise. In the
engineering of physically intensive systems, viewpoints often
correspond to capabilities and responsibilities within the engineering
Most complex system specifications are so extensive that no one
individual can fully comprehend all aspects of the specifications.
Furthermore, we all have different interests in a given system and
different reasons for examining the system's specifications. A
business executive will ask different questions of a system make-up
than would a system implementer. The concept of viewpoints framework,
therefore, is to provide separate viewpoints into the specification of
a given complex system. These viewpoints each satisfy an audience with
interest in some set of aspects of the system. Associated with each
viewpoint is a viewpoint language that optimizes the vocabulary and
presentation for the audience of that viewpoint.
example of the interaction between business process and data models.
A business model illustrates the functions associated with the business process being modeled and the organizations that perform these functions. By depicting activities and information flows, a foundation is created to visualize, define, understand, and validate the nature of a process. A data model provides the details of information to be stored and is of primary use when the final product is the generation of computer software code for an application or the preparation of a functional specification to aid a computer software make-or-buy decision. See the figure on the right for an example of the interaction between business process and data models.
Usually, a model is created after conducting an interview, referred to
as business analysis. The interview consists of a facilitator asking a
series of questions designed to extract required information that
describes a process. The interviewer is called a facilitator to
emphasize that it is the participants who provide the information. The
facilitator should have some knowledge of the process of interest, but
this is not as important as having a structured methodology by which
the questions are asked of the process expert. The methodology is
important because usually a team of facilitators is collecting
information across the facility and the results of the information
from all the interviewers must fit together once completed.
The models are developed as defining either the current state of the
process, in which case the final product is called the "as-is"
snapshot model, or a collection of ideas of what the process should
contain, resulting in a "what-can-be" model. Generation of process and
data models can be used to determine if the existing processes and
information systems are sound and only need minor modifications or
enhancements, or if re-engineering is required as a corrective action.
The creation of business models is more than a way to view or automate
your information process. Analysis can be used to fundamentally
reshape the way your business or organization conducts its
Computer-aided software engineering
Computer-aided software engineering
Foster computer assistance in software development and or software maintenance processes, and An engineering approach to software development and or maintenance.
Typical CASE tools exist for configuration management, data modeling, model transformation, refactoring, source code generation. Integrated development environment
Anjuta, a C and
An integrated development environment (IDE) also known as integrated design environment or integrated debugging environment is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of a:
IDEs are designed to maximize programmer productivity by providing tight-knit components with similar user interfaces. Typically an IDE is dedicated to a specific programming language, so as to provide a feature set which most closely matches the programming paradigms of the language. Modeling language A modeling language is any artificial language that can be used to express information or knowledge or systems in a structure that is defined by a consistent set of rules. The rules are used for interpretation of the meaning of components in the structure. A modeling language can be graphical or textual. Graphical modeling languages use a diagram techniques with named symbols that represent concepts and lines that connect the symbols and that represent relationships and various other graphical annotation to represent constraints. Textual modeling languages typically use standardised keywords accompanied by parameters to make computer-interpretable expressions. Examples of graphical modelling languages in the field of software engineering are:
Not all modeling languages are executable, and for those that are,
using them doesn't necessarily mean that programmers are no longer
needed. On the contrary, executable modeling languages are intended to
amplify the productivity of skilled programmers, so that they can
address more difficult problems, such as parallel computing and
A programming paradigm is a fundamental style of computer programming,
which is not generally dictated by the project management methodology
(such as waterfall or agile). Paradigms differ in the concepts and
abstractions used to represent the elements of a program (such as
objects, functions, variables, constraints) and the steps that
comprise a computation (such as assignations, evaluation,
continuations, data flows). Sometimes the concepts asserted by the
paradigm are utilized cooperatively in high-level system architecture
design; in other cases, the programming paradigm's scope is limited to
the internal structure of a particular program or module.
A programming language can support multiple paradigms. For example,
programs written in
Aspect-oriented software development
Grady Booch's object-oriented design (OOD), also known as object-oriented analysis and design (OOAD). The Booch model includes six diagrams: class, object, state transition, interaction, module, and process.
Search-based software engineering Service-oriented modeling Structured programming Top-down and bottom-up design
Top-down programming: evolved in the 1970s by IBM researcher Harlan Mills (and Niklaus Wirth) in developed structured programming.
Reuse of solutions
This section may need to be rewritten entirely to comply with Wikipedia's quality standards. You can help. The discussion page may contain suggestions. (May 2016)
A software framework is a re-usable design or implementation for a software system or subsystem. Existing components (Component-based software engineering) can be reused, assembled together to create a larger application. API (Application programming interface, Web service) establish a set of "subroutine definitions, protocols, and tools for building application software" which can be utilized in future builds. Open Source documentions, via libraries such as GitHub, provide free code for software developers to re-use and implement into new applications or designs.
Roles and industry
Bachelor of Science in
^ "Application Development (AppDev) Defined and Explained".
Bestpricecomputers.co.uk. 2007-08-13. Retrieved 2012-08-05.
^ DRM Associates (2002). "New Product Development Glossary". Retrieved
^ Joseph M. Morris (2001).
Wikimedia Commons has media related to
Kit, Edward (1992).
v t e
Agile Aspect-oriented Object orientation Ontology Service orientation SDLC
Agile EUP Executable UML Incremental model Iterative model Prototype model RAD UP Scrum Spiral model V-Model Waterfall model XP
IDEF UML USL SysML
Victor Basili Kent Beck Grady Booch Fred Brooks Barry Boehm Peter Chen Danese Cooper Ward Cunningham Tom DeMarco Edsger W. Dijkstra Delores M. Etter Martin Fowler Adele Goldstine Margaret Hamilton C. A. R. Hoare Lois Haibt Mary Jean Harrold Grace Hopper Watts Humphrey Michael A. Jackson Ivar Jacobson Alan Kay Nancy Leveson Stephen J. Mellor Bertrand Meyer David Parnas Trygve Reenskaug Winston W. Royce James Rumbaugh Mary Shaw Peri Tarr Elaine Weyuker Niklaus Wirth Edward Yourdon
Computer science Computer engineering Project management Risk management Systems engineering
v t e
Major fields of computer science
Note: This template roughly follows the 2012 ACM Computing Classification System.
Printed circuit board Peripheral Integrated circuit Very-large-scale integration Energy consumption Electronic design automation
Computer systems organization
Computer architecture Embedded system Real-time computing Dependability
Network architecture Network protocol Network components Network scheduler Network performance evaluation Network service
Theory of computation
Model of computation Formal language Automata theory Computational complexity theory Logic Semantics
Mathematics of computing
Database management system
Intrusion detection system
Interaction design Social computing Ubiquitous computing Visualization Accessibility
Concurrent computing Parallel computing Distributed computing Multithreading Multiprocessing
Natural language processing
Supervised learning Unsupervised learning Reinforcement learning Multi-task learning Cross-validation
Animation Rendering Image manipulation Graphics processing unit Mixed reality Virtual reality Image compression Solid modeling
E-commerce Enterprise software Computational mathematics Computational physics Computational chemistry Computational biology Computational social science Computational engineering Computational healthcare Digital art Electronic publishing Cyberwarfare Electronic voting Video game Word processing Operations research Educational technology Document management
Book Category Portal WikiProject Commons