Professional Documents
Culture Documents
The software engineering approach requires that the process of developing a software
product be planned and structured. However, this does not mean that all projects will be
executed in exactly the same manner. On the contrary, there are several SDLC process
models which are available to the software engineer.
A Software Process is as a set of activities, methods, and practices that people use to
develop and maintain software; and a software process model (or life cycle model) is a
simplified but abstract representation of a software process. A model describes, in
varying details, the organisation of the elements of a process, and provides a definition of
the process which can be used for evaluation and improvement. A software process
model therefore describes one possible approach to the development of a software
product and is a form of standardization.
Waterfall stages :
-Requirements
specification (analysis
and definition)
- Implementation and
unit testing
- Operation and
maintenance
Imagine a waterfall going down the side of a steep mountain. Once the water has flowed
over the edge of the cliff and has begun its journey down the side of the mountain, it
cannot turn back. It is the same with waterfall development.
In the Waterfall Model then, there are distinct activities and goals for each phase of
development. The following phase cannot begin until the previous phase has finished.
Each phase is expected to produce a specific outcome and subsequent work is based on
the outcome of the previous phase. Once a phase of development is completed it is
'signed off' on, and the development proceeds to the next phase. No turning back is
allowed.
The waterfall model is the best-known and oldest process model and is known as a plan
driven process.
[2]
C-A Jardette
Pros
- allows for departmentalization and managerial control. A schedule can be set with
deadlines for each stage of development and a product can proceed through the
development process in an orderly manner; the staged development cycle enforces
discipline
- The emphasis on requirements and design before writing any line of code ensures
minimal wastage of time and effort and reduces the risk of schedule slippage, or of
customer expectations not being met.
- Getting the requirements and design out of the way first also improves quality; it's much
easier to catch and correct possible flaws at the design stage than at the testing stage, after
all the components have been integrated and tracking down specific errors is more
complex.
- because the first two phases end in the production of a formal specification, the waterfall
model can aid efficient knowledge transfer when team members are dispersed in different
locations
- Theoretically, the product can be delivered on time.
Cons
- The waterfall model does not allow for much reflection or revision. Once an application
is in the testing stage, it is very difficult to go back and change something that was not
well-thought out in the concept stage. It is almost impossible to accommodate changes
after the process is underway.
- Another criticism revolves around the model's implicit assumption that designs can be
feasibly translated into real products; this sometimes runs into roadblocks when
developers actually begin implementation. Often, designs that look feasible on paper turn
out to be expensive or difficult in practice, requiring a re-design and hence destroying the
clear distinctions between phases of the traditional waterfall model
- Some criticisms also centre on the fact that the waterfall model implies a clear division of
labour between, say, "designers", "programmers" and "testers"; in reality, such a division
of labour in most software firms is neither realistic nor efficient.
Implications
- It is very important to gather all possible requirements during the first phase of
requirements collection and analysis. If not all requirements are obtained at once the
subsequent phases will suffer from it. Usually though, only a part of the requirements is
known at the beginning as customers are unable to fully articulate what they want from a
system.
- Iterations are only meant to happen within a particular phase. If the process is kept
according to the book this tends to shift the solution of problems into later phases which
eventually results in a bad system design. Instead of solving the root causes the tendency
is to patch problems with inadequate measures.
[3]
Computer Science Unit 2 Module 2
- There may be a very big "Maintenance" phase at the end. The waterfall process model
only allows for a single run through the activities. All defects detected during
development then have to be fixed in the maintenance/evolution phase.
Notwithstanding the fact that it is considered old-fashioned and simplistic, the waterfall
model is a popular version of the systems development life cycle for software
engineering.
Note though that the waterfall approach should only be used when the requirements are
well understood and are unlikely to change radically during the development process.
6. Evolutionary Development
The approach in this
model, sees the activities
of specification,
development and
validation being
interleaved with each
other. An initial system is
rapidly developed from
very abstract specifications
(a prototype). This is then
refined with customer
input to produce a system
which satisfies the
customer's needs. The
system may then be delivered. Fig. 47 – Evolutionary Development
Alternatively, it may be re-implemented
using a more structured approach
to produce a more robust and maintainable system.
Generally, the early versions of the system include the most important or most urgent
functionality. Each increment of the system then incorporates some more of the
functionality needed by the users. Evolutionary development is also called incremental
development and is now one of the most common process models in use.
[4]
C-A Jardette
performance version of a software system early in its development in order to test out key
features of the product. Evolutionary development therefore by definition involves the
production, and use, of prototypes. The use of quickly developed prototypes means that
early end-user participation in the software process is accommodated/encouraged. A
prototype can be discarded (throw away prototyping) after the requirements are deemed
to be fully understood and a more structured product built, or it itself can form the basis
for the final product.
Disadvantages
- The process is not visible. Documentation of the project's rapid changes is difficult and
so progress is also sometimes difficult to measure.
- system structure degrades as new increments are added. As time goes on incorporating
further software changes become increasingly difficult and costly (poor maintainability).
These problems are especially acute for large, complex, long-life systems where different
teams develop different parts of the system.
1. Identify initial requirements: In this step, the software publisher decides what the
software will be able to do. The publisher considers who the user will likely be
and what the user will want from the product, then the publisher sends the project
and specifications to a software designer or developer.
2. Develop initial prototype: In step two, the developer will consider the
requirements as proposed by the publisher and begin to put together a model of
what the finished product might look like. An initial prototype may be as simple
as a drawing on a whiteboard, or it may consist of sticky notes on a wall, or it may
be a more elaborate working model.
[5]
Computer Science Unit 2 Module 2
3. Review: Once the prototype is developed, the publisher has a chance to see what
the product might look like; how the developer has envisioned the publisher's
specifications. In more advanced prototypes, the end consumer may have an
opportunity to try out the product and offer suggestions for improvement. This is
what we know of as beta testing.
4. Revise: The final step in the process is to make revisions to the prototype based on
the feedback of the publisher and/or beta testers.
Steps 3 and 4 are repeated until the parties are satisfied with the product.
[6]
C-A Jardette
Analysis:
Its strengths are that it supports iteration within phases, allows parallelism
between phases (overlapped activities), and it is an incremental development.
And its weakness is that it may degrade into code-a-bit test-a-bit which requires
frequent iterations and refinements. However, for OOP programming, the
overlapping between activities reduces maintenance effort.
Though it would be a bit inappropriate for small projects, it has the flexibility to
fall back on any phase if some problems arise in between any of the previous
phases. It also works well where the requirements keep on changing frequently.
Even if there is an error in the understanding of the client requirements, those can
be easily rectified without much loss of project time for not very huge systems.
[7]
Computer Science Unit 2 Module 2
8. Formal Transformation
For more than 30 years, theoretical computer scientists have been advocating this
approach, which is steeped in mathematics, to software development. Using this model,
the developer converts the requirements from the customer into a formal mathematical
system specification, then use automated tools to generate the executable program from
the formal specifications through a series of transformations. These transformations are
'correctness preserving', meaning that you can be sure that the developed program meets
its specification. The implication of this is that no unit testing is necessary.
Formal methods use predictive logic and set theory and proponents of this model claim
that their use lead to more reliable and safer systems.
Concerns
- There is a need for specialized skills and training to apply the techniques
- It is difficult to formulate some aspects of a system in terms of mathematical functions
(such as
the user interface)
- Writing formal methods is time consuming and costly
- End-users can not comment on the designs as they cannot interpret formal specifications
Applicability
- Used in the production of critical systems especially those where safety or security is
paramount.
[8]
C-A Jardette
Note that the formal methods model is not really a complete model but is a different
approach to the design and implementation phases of the SDLC.
9. Reuse Model
This technique assumes that parts of the system as we want it to be, already exist. The
premise behind the Reuse Model therefore, is that systems should be built using existing
components, as opposed to custom-building new components. The system development
process focuses on integrating these parts rather than developing them from scratch. This
technique is also called component based software engineering.
Within the Reuse Model, libraries of software modules are maintained that can be copied
for use in any system. These components are of two types: procedural modules and
database modules. When building a new system, the developer will borrow a copy of a
module from the system library and then plug it into a function or procedure. If the
needed module is not available, the developer will build it, and store a copy in the system
library for future usage. If the modules are well engineered, the developer, with minimal
changes, can implement them.
[9]
Computer Science Unit 2 Module 2
Software houses can operate with this model in mind and when they are creating new
modules in a project they can design them such that they can be stored as functional
modules which they could reuse in future not yet identified projects.
[10]
C-A Jardette
In Conclusion :
Evolutionary development
Fountain Model
Formal Development
[11]
Computer Science Unit 2 Module 2
[12]