Professional Documents
Culture Documents
1. Introduction
Computers are becoming a key element in our daily lives. Slowly and surely they are
taking over many of the functions that affect our lives critically. They are now
controlling all forms of monetary transactions, manufacturing, transportation,
communication, defense systems, process control systems, and so on. In the near
future, they will be found in our homes, controlling all forms of appliances. Left to
themselves, they are harmless pieces of hardware. Load the right kind of software;
they can take you to the moon, both literally and figuratively. It is the software that
gives life to them. When they are going to play such a crucial role, one small flaw
either in the hardware or the software can lead to catastrophic consequences. The
sad part is, while there are well defined processes based on theoretical foundations
to ensure the reliability of the hardware, same thing can not be said about software.
There is no theory for software development as yet. But at the same time, it is
mandatory that software always behaves in a predictable manner, even in
unforeseen circumstances. Hence there is a need to control its development through
a well defined and systematic process. The old fashioned 'code & test' approach will
not do any more. It may be good enough for 'toy' problems, but in real life, software
is expected to solve enormously complex problems. Some of the aspects of real life
software projects are:
• Team effort: Any large development effort requires the services of a team of
specialists. For example the team could consist of domain experts, software
design experts, coding specialists, testing experts, hardware specialists, etc.
Each group could concentrate on a specific aspect of the problem and design
suitable solution. However no group can work in isolation. There will be
constant interaction among team members.
• Methodology: Broadly there are two types of methodologies, namely,
'procedure oriented methodolgies' and 'object oriented methodologies'.
Though theoretically either of them could be used in any given problem
situation, one of them should be chosen in advance.
• Documentation: Clear and unambiguous documentation of the artifacts of
the development process are critical for the success of the software project.
Oral communication and 'back of the envelop designs' are not sufficient. For
example, documentation is necessary if client signoff is required at various
stages of the process. Once developed, the software lives for a long time.
During its life, it has to undergo lot of changes. Without clear design
specifications and well documented code, it will be impossible to make
changes.
• Planning: Since the development takes place against a client's requirements
it is imperative that the whole effort is well planned to meet the schedule and
cost constraints.
• Quality assurance: Clients expect value for money. In addition to meeting
the client's requirements, the software also should meet additional quality
constraints. They could be in terms of performance, security, etc.
• Lay user: Most of the time, these software packages will be used by non-
computer savvy users. Hence the software has to be highly robust.
• Software tools: Documentation is important for the success of a software
project, but it is a cumbersome task and many software practitioners balk at
the prospect of documentation. There are tools known as Computer Aided
Software Engineering (CASE) tools which simplify the process of
documentation.
• Conformance to standards: We need to follow certain standards to ensure
clear and unambiguous documentation. For example, IEEE standards for
requirements specifications, design, etc. Sometimes, clients may specify the
standards to be used.
• Reuse: The development effort can be optimised, by reusing well-tested
components. For example, mathematical libraries, graphical user interface
tool kits, EJBs, etc.
• Non-developer maintenance: Software lives for a long time. The
development team, may not be available to maintain the package. Some
other team will have to ensure that the software continues to provide
services.
• Change management: Whenever a change has to be made, it is necessary
to analyse its impact on various parts of the software. Imagine modifying the
value of global variable. Every function that accesses the variable will be
effected. Unless care is taken to minimise the impact, the software may not
behave as expected.
• Version control: Once changes are made to the software, it is important
that the user gets the right copy of the software. In case of failures, it should
be possible to roll back to the previous versions.
• Subject to risks: Any large effort is subject to risks. The risks could be in
terms of non-availability of skills, technology, inadequate resources, etc. It is
necessary to constantly evaluate the risks, and put in place risk mitigation
measures.
2. Software Quality
The goal of any software development process is to produce high quality software.
What is software quality? It has been variously defined as:
Some of the important attributes that can be used to measure software quality are:
Correctness is the most important attribute. Every software must be correct. The
other attributes may be present in varying degrees. For example, it is an expensive
proposition to make a software 100% reliable and it is not required in all contexts. If
the software is going to be used in life critical situations, then 100% reliability is
mandatory. But, say, in a weather monitoring system, a little less reliability may be
acceptable. However, the final decision lies with the client. One should keep in mind
that some of the above attributes conflict with each other. For example, portability
and efficiency could conflict with each other. To improve efficiency, one may resort to
using system dependent features. but that will effect the portability. In the days,
when DOS ruled the world, it was possible to access the internal architecture directly
to improve performance. To port such a program to any other platform would require
enormous changes. So in practice there will always be a tradeoff.
• view software development as a value added business activity and not merely
as a technical activity
• ensure that every product is checked to see if value addition has indeed taken
place
• safeguard against loss of value once the product is complete
• provide management information for in-situ control of the process
• Identify the phases of development and the tasks to be carried out in each
phase
• Model the intra and inter phase transitions
• Use techniques to carry out the tasks
• Verify and Validate each task and the results
• Exercise process and project management skills
The words 'verify' and 'validate' need some clarification. Verify means to check if the
task has been executed correctly, while validate means to check if the correct task
has been executed. In the context of software, the process of checking if an
algorithm has been implemented correctly, is verification, while the process of
checking if the result of the algorithm execution is the solution to the desired
problem, is validation.
The generic phases that are normally used in a software development process are:
• Analysis: In this phase user needs are gathered and converted into software
requirements. For example, if the user need is to generate the trajectory of a
missile, the software requirement is to solve the governing equations. This
phase should answer the question: what is to be done to meet user needs?
• Design: This phase answers the question: How to meet the user needs? With
respect to the above example, design consists of deciding the algorithm to be
used to solve the governing equations. The choice of the algorithm depends
on design objectives like execution time, accuracy, etc. In this phase we
determine organisation of various modules in the software system
• Construction: Coding is the main activity in this phase
• Testing: There are three categories of testing: unit testing, integration
testing, and system testing. There are two types of testing: Black box testing
and White box testing. Black box testing focuses on generating test cases
based on requirements. White box testing focuses on generating test cases
based on the internal logic of various modules
• Implementation
In practice, two types of software life cycle models are used - sequential model and
iterative model.
Sequential model, also known as water fall model, is pictorially shown thus:
Barry Boehm has suggested another iteartive model called the spiral model. It is
more in the nature of a framework, which needs to be adapted to specific projects.
Pictorially it can be shown thus:
It allows best
mix of other
approaches
and focusses
on eliminating
errors and
unattractive
alternatives
early. An
important
feature of this
model is the
stress on risk analysis. Once the objectives, alternatives, and constraints for a phase
are identified, the risks involved in carrying out the phase are evaluated, which is
expected to result in a 'go, no go' decision. For evaluation purposes, one could use
prototyping, simulations, etc. This model is best suited for projects, which involve
new technology development. Risk analysis expertise is most critical for such
projects.
IBM introduced the ETVX model during the 80's to document their processes. 'E'
stands for the entry criteria which must be satisfied before a set of tasks can be
performed, 'T' is the set of tasks to be performed, 'V' stands for the verification &
validation process to ensure that the right tasks are performed, and 'X' stands for the
exit criteria or the outputs of the tasks. If an activity fails in the validation check,
either corrective action is taken or a rework is ordered. It can be used in any
development process. Each phase in the process can be considered as an activity and
structured using the ETVX model. If required, the tasks can be further subdivided
and each subtask can be further structured using the ETVX model.
4.5 Rational Unified Process Model
Among the modern process models, Rational Unified Process (RUP) developed by
Rational Corporation is noteworthy. It is an iterative model and captures many of the
best practices of modern software development. RUP is explained more fully in the
module OOAD with UML. More information on RUP can be obtained from
http://en.wikipedia.org/wiki/Rational_Unified_Processand from http://www-
128.ibm.com/developerworks/rational/library/content/RationalEdge/jan01/WhatIsthe
RationalUnifiedProcessJan01.pdf
All the methodologies described before are based on the premise that any software
development process should be predictable and repeatable. One of the criticisms
against these methodologies is that there is more emphasis on following procedures
and preparing documentation. They are considered to be heavyweight or rigorous.
They are also criticised for their excessive emphasis on structure. There is a
movement called Agile Software Movement, questioning this premise. The
proponents argue that software development being essentially a human activity,
there will always have variations in processes and inputs and the model should be
flexible enough to handle the variations. For example: the entire set of software
requirements cannot be known at the begining of the project nor do they remain
static. If the model cannot handle this dynamism, then there can be lot of wastage of
effort or the final product may not meet the customer's needs. Hence the agile
methodolgies advocate the principle "build short, build often". That is the given
project is broken up in to subprojects and each subproject is developed and
integrated in to the already delivered system. This way the customer gets continuous
delivery of useful and usable systems. The subprojects are chosen so that they have
short delivery cycles, usually of the order of 3 to 4 weeks. The development team
also gets continuous feedback. A number of agile methodologies have been
proposed. The more popular among them are SCRUM, DYNAMIC SYSTEMS
DEVELOPMENT METHOD (DSDM), CRYSTAL METHODS, FEATURE-DRIVEN
DEVELOPMENT, LEAN DEVELOPMENT (LD), EXTREME PROGRAMMING (XP). A short
description of each of these methods follows:
Among the plethora of available processes, how can we choose one? There is no
single answer to this question. Probably the best way to attack this problem is to
look at the software requirements.
• If they are stable and well understood, then waterfall model may be
sufficient.
• If they are stable, but not clear, then throw away prototyping can be used.
• Where the requirements are changing, evolutionary prototyping is better.
• If the requirements are coupled with the underlying business processes,
which are going through a process of change, then a model based on Boehm's
spiral model, like the Rational Unified Process should be used.
• In these days of dynamic business environment, where 'time to market' is
critical, and project size is relatively small, an agile process should be chosen.
These are but guidelines only. Many organisations choose a model and adapt it to
their business requirements. For example, some organisations use waterfall model,
modified to include iterations within phases.
6. Conclusions
The most important take away from this module is that software development should
follow a discplined process. The choice of the process should depend upon the
stabilty of the requirements, completeness of requirements, underlying business
processes, organisational structure, and the prevailing business environment.
7. References