is the process of conceiving, specifying, designing, programming
, and bug fixing
involved in creating and maintaining applications
, or other software components. Software development is a process of writing and maintaining
the source code
, but in a broader sense, it includes all that is involved between the conception of the desired software through to the final manifestation of the software, sometimes in a planned and structured
Therefore, software development may include research, new development, prototyping, modification, reuse, re-engineering, maintenance, or any other activities that result in software products.
The software can be developed for a variety of purposes, the three most common being to meet specific needs of a specific client/business (the case with custom software
), to meet a perceived need of some set of potential users
(the case with commercial
and open source software
), or for personal use (e.g. a scientist may write software to automate a mundane task). Embedded software development
, that is, the development of embedded software
, such as used for controlling consumer products, requires the development process to be integrated
with the development of the controlled physical product. System software
underlies applications and the programming process itself, and is often developed separately.
A software development process
(also known as a software development methodology, model, or life cycle) is a framework that is used to structure
, 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 software, 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 software
- Devising a plan or design for the software
- Implementation (coding) of the software
- Testing the software
- Maintenance and bug fixing
These stages are often referred to collectively as the software development life-cycle, 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 life-cycle, 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 life-cycle 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 work 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 cannot be easily envisioned, then a more "extreme" incremental approach may work best.
Software development activities
The sources of ideas for software products are plentiful. These ideas can come from market research
including the demographics
of potential new customers, existing customers, sales prospects who rejected the product, other internal software development staff, or a creative third party. Ideas for software products are usually first evaluated by marketing
personnel for economic feasibility, for fit with existing channels distribution, for possible effects on existing product lines, required features
, and for fit with the company's marketing objectives. In a marketing evaluation phase, the cost and time assumptions become evaluated. A decision is reached early in the first phase as to whether, based on the more detailed information generated by the marketing and development staff, the project should be pursued further.
In the book "Great Software Debates"
, Alan M. Davis
states in the chapter "Requirements"
, sub-chapter "The Missing Piece of Software Development"
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.
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.
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 requirements.
Implementation, testing and documenting Software testing
is an integral and important phase of the software development process. This part of the process ensures that defects
are recognized as soon as possible. In some processes, generally known as test-driven development
, tests may be developed just before implementation and serve as a guide for the implementation's correctness.
the internal design of software for the purpose of future maintenance and enhancement is done throughout development. This may also include the writing of an API
, be it external or internal. The software engineering process chosen by the developing team will determine how much internal documentation (if any) is necessary. Plan-driven models (e.g., Waterfall
) generally produce more documentation than Agile
Deployment and maintenance
starts directly after the code is appropriately tested, approved for release
, and sold or otherwise distributed into a production environment. This may involve installation, customization (such as by setting parameters to the customer's values), testing, and possibly an extended period of evaluation.
Software training and support
is important, as software is only effective if it is used correctly.
and enhancing software to cope with newly discovered faults
or requirements can take substantial time and effort, as missed requirements may force redesign of the software.
. In most cases maintenance is required on regular basis to fix reported issues and keep the software running.
Matrix of Views and Perspectives.
The purpose of viewpoints and views is to enable human engineers to comprehend very complex systems
and to organize the elements of the problem around domains of expertise
. In the engineering
of physically intensive systems, viewpoints often correspond to capabilities and responsibilities within the engineering organization.
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
. 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.
Business process and data modelling
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 operations.
Computer-aided software engineering
Computer-aided software engineering
(CASE), in the field software engineering
, is the scientific application of a set of software tools and methods to the development of software
which results in high-quality, defect-free, and maintainable software products.
It also refers to methods for the development of information systems
together with automated tools that can be used in the software development process.
The term "computer-aided software engineering" (CASE) can refer to the software
used for the automated development of systems software
, i.e., computer code. The CASE functions include analysis, design, and programming. CASE tools automate methods for designing, documenting, and producing structured computer code in the desired programming language
Two key ideas of Computer-aided Software System Engineering (CASE) are:
- Foster computer assistance in software development and software maintenance processes, and
- An engineering approach to software development and maintenance.
Integrated development environment
, a C and C++ IDE for the GNOME environment
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.
A modeling language
is any artificial language
that can be used to express information
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 standardized 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 distributed systems
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.
Just as different groups in software engineering
advocate different methodologies
, different programming languages
advocate different programming paradigms
. Some languages are designed to support one paradigm (Smalltalk
supports object-oriented programming, Haskell
supports functional programming), while other programming languages support multiple paradigms (such as Object Pascal
, Visual Basic
, Common Lisp
, and Oz
Many programming paradigms are as well known for what methods they forbid
as for what they enable. For instance, pure functional programming forbids using side-effects
; structured programming
forbids using goto
statements. Partly for this reason, new paradigms are often regarded as doctrinaire or overly rigid by those accustomed to earlier styles.
Avoiding certain methods can make it easier to prove theorems about a program's correctness, or simply to understand its behavior.
Examples of high-level paradigms include:
A definition of software reuse
is the process of creating software from predefined software components. A software reuse approach seeks to increase or maximise the use of existing software artefacts in the software development lifecycle
The following are some common software reuse methods:
Roles and industry
- ^ "Application Development (AppDev) Defined and Explained". Bestpricecomputers.co.uk. 2007-08-13. Retrieved 2012-08-05.
- ^ DRM Associates (2002). "New Product Development Glossary". Retrieved 2006-10-29.
- ^ 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)
- ^ Joseph M. Morris (2001). Software Industry Accounting. p.1.10
- ^ Alan M. Davis. Great Software Debates (October 8, 2004), pp:125-128 Wiley-IEEE Computer Society Press
- ^ Ralph, P., and Wand, Y. A Proposal for a Formal Definition of the Design Concept. In, Lyytinen, K., Loucopoulos, P., Mylopoulos, J., and Robinson, W., (eds.), Design Requirements Engineering: A Ten-Year Perspective: Springer-Verlag, 2009, pp. 103-136
- ^ Otero, Carlos. "Software Design Challenges". IT Performance Improvement. Taylor & Francis LLC. Retrieved 19 October 2017.
- ^ Edward J. Barkmeyer ea (2003). Concepts for Automating Systems Integration NIST 2003.
- ^ a b c d Paul R. Smith & Richard Sarfaty (1993). Creating a strategic plan for configuration management using Computer Aided Software Engineering (CASE) tools. Paper For 1993 National DOE/Contractors and Facilities CAD/CAE User's Group.
- ^ Kuhn, D.L (1989). "Selecting and effectively using a computer-aided software engineering tool". Annual Westinghouse computer symposium; 6-7 Nov 1989; Pittsburgh, PA (USA); DOE Project.
- ^ P. Loucopoulos and V. Karakostas (1995). System Requirements Engineering. McGraw-Hill.
- ^ CASE Archived 2012-02-18 at the Wayback Machine definition In: Telecom Glossary 2000Archived 2005-11-22 at the Wayback Machine. Retrieved 26 Oct 2008.
- ^ K. Robinson (1992). Putting the Software Engineering into CASE. New York : John Wiley and Sons Inc.
- ^ Xiao He (2007). "A metamodel for the notation of graphical modeling languages". In: Computer Software and Applications Conference, 2007. COMPSAC 2007 – Vol. 1. 31st Annual International, Volume 1, Issue, 24–27 July 2007, pp 219-224.
- ^ Merx, Georges G.; Norman, Ronald J. (2006). Unified Software Engineering with Java. Prentice-Hall, Inc. p. 201. ISBN 0130473766.
- Kit, Edward (1992). Software Testing in The Real World. Addison-Wesley Professional. ISBN 0201877562.
- McCarthy, Jim (1995). Dynamics of Software Development. Microsoft Press. ISBN 1556158238.
- Conde, Dan (2002). Software Product Management: Managing Software Development from Idea to Product to Marketing to Sales. Aspatore Books. ISBN 1587622025.
- Davis, A. M. (2005). Just enough requirements management: Where software development meets marketing. Dorset House Publishing Company, Incorporated. ISBN 0932633641.
- Hasted, Edward (2005). Software That Sells: A Practical Guide to Developing and Marketing Your Software Project. Wiley Publishing. ISBN 0764597833.
- Hohmann, Luke (2003). Beyond Software Architecture: Creating and Sustaining Winning Solutions. Addison-Wesley Professional. ISBN 0201775948.
- John W. Horch (2005). "Two Orientations On How To Work With Objects." In: IEEE Software. vol. 12, no. 2, pp. 117–118, Mar., 1995.
- Rittinghouse, John (2003). Managing Software Deliverables: A Software Development Management Methodology. Digital Press. ISBN 155558313X.
- Wiegers, Karl E. (2005). More About Software Requirements: Thorny Issues and Practical Advice. Microsoft Press. ISBN 0735622671.
- Wysocki, Robert K. (2006). Effective Software Project Management. Wiley. ISBN 0764596365.
Last edited on 22 April 2021, at 01:44
Content is available under CC BY-SA 3.0
unless otherwise noted.