A software development methodology refers to the framework that is used to structure, plan, and control
the process of developing an information system. A wide variety of such frameworks have evolved over
the years, each with its own recognized strengths and weaknesses. 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.
The framework of a software development methodology consists of:
- A software development philosophy, with the approach or approaches of the software development process
- Multiple tools, models and methods, to assist in the software development process.
These frameworks are often bound to some kind of organization, which further develops, supports the use, and promotes the methodology. The methodology is often documented in some kind of formal documentation.
Every software development methodology has more or less its own approach to software development.
There is a set of more general approaches, which are developed into several specific methodologies.
These approaches are:
- Waterfall: linear framework type.
- Prototyping: iterative framework type
- Incremental: combination of linear and iterative framework type
- Spiral: combination of linear and iterative framework type
- Rapid Application Development (RAD): Iterative Framework Type
The waterfall model is a sequential development process, in which development is seen as flowing steadily
downwards (like a waterfall) through the phases of requirements analysis, design, implementation, testing
(validation), integration, and maintenance.
Project is divided into sequential phases, with some overlap and splashback acceptable between phases.
Emphasis is on planning, time schedules, target dates, budgets and implementation of an entire system
at one time.
Tight control is maintained over the life of the project through the use of extensive written documentation,
as well as through formal reviews and approval/signoff by the user and information technology management
occurring at the end of most phases before beginning the next phase.
Software prototyping, is the framework of activities during software development of creating prototypes,
i.e., incomplete versions of the software program being developed.
Not a standalone, complete development methodology, but rather an approach to handling selected portions of
a larger, more traditional development methodology (i.e. Incremental, Spiral, or Rapid Application Development
(RAD)).
Attempts to reduce inherent project risk by breaking a project into smaller segments and providing more
ease-of-change during the development process. User is involved throughout the process, which increases
the likelihood of user acceptance of the final implementation. Small-scale mock-ups of the system are
developed following an iterative modification process until the prototype evolves to meet the users’
requirements.
Various methods are acceptable for combining linear and iterative systems development methodologies,
with the primary objective of each being to reduce inherent project risk by breaking a project into
smaller segments and providing more ease-of-change during the development process.
A series of mini-Waterfalls are performed, where all phases of the Waterfall development model are
completed for a small part of the systems, before proceeding to the next incremental, or Overall
requirements are defined before proceeding to evolutionary, mini-Waterfall development of individual
increments of the system, or The initial software concept, requirements analysis, and design of
architecture and system core are defined using the Waterfall approach, followed by iterative
Prototyping, which culminates in installation of the final prototype (i.e., working system).
The spiral model.The spiral model is a software development process combining elements of both design
and prototyping-in-stages, in an effort to combine advantages of top-down and bottom-up concepts.
Focus is on risk assessment and on minimizing project risk by breaking a project into smaller segments
and providing more ease-of-change during the development process, as well as providing the opportunity
to evaluate risks and weigh consideration of project continuation throughout the life cycle.
Each cycle involves a progression through the same sequence of steps, for each portion of the product
and for each of its levels of elaboration, from an overall concept-of-operation document down to the
coding of each individual program. Each trip around the spiral traverses four basic quadarants:
- determine objectives, alternatives, and constrainst of the iteration
- Evaluate alternatives; Identify and resolve risks
- develop and verify deliverables from the iteration
- plan the next iteration
Begin each cycle with an identification of stakeholders and their win conditions, and end each cycle
with review and commitment.
Rapid Application Development (RAD) is a software development methodology, which involves iterative
development and the construction of prototypes. Rapid application development is a term originally
used to describe a software development process introduced by James Martin in 1991.
Key objective is for fast development and delivery of a high quality system at a relatively low investment cost.
Attempts to reduce inherent project risk by breaking a project into smaller segments and providing more
ease-of-change during the development process. Aims to produce high quality systems quickly, primarily through
the use of iterative Prototyping (at any stage of development), active user involvement, and computerized
development tools. These tools may include Graphical User Interface (GUI) builders, Computer Aided Software
Engineering (CASE) tools, Database Management Systems (DBMS), fourth-generation programming languages,
code generators, and object-oriented techniques.
Key emphasis is on fulfilling the business need, while technological or engineering excellence is of lesser
importance.
Project control involves prioritizing development and defining delivery deadlines or “timeboxes”. If the project
starts to slip, emphasis is on reducing requirements to fit the timebox, not in increasing the deadline.
Generally includes Joint Application Development (JAD), where users are intensely involved in system design,
either through consensus building in structured workshops, or through electronically facilitated interaction.
Active user involvement is imperative. Iteratively produces production software, as opposed to a throwaway prototype.
Produces documentation necessary to facilitate future development and maintenance. Standard systems analysis and
design techniques can be fitted into this framework.
- Object oriented development methodologies, such as 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.
- Top-down programming evolved in the 1970s by IBM researcher Harlan Mills (and Niklaus Wirth) in
developed structured programming.
- Unified Process (UP) is an iterative software development methodology approach, based on 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. There are a number
of tools and products available designed to facilitate UP implementation. One of the more popular versions of UP
is the Rational Unified Process (RUP).
- Agile Software Development refers to a group of software development methodologies based on iterative
development, where requirements and solutions evolve through collaboration between self-organizing
cross-functional teams. The term was coined in the year 2001 when the Agile Manifesto was formulated.
- Integrated Methodology Software Development refers to a group of software development practices and
deliverables that can be applied in a multitude (iterative, waterfall, spiral, agile) of software
development environments, where requirements and solutions evolve through collaboration between
self-organizing cross-functional teams.