A brief history of Software Engineering
Being a Software Test Professional, you must know a brief history of Software
Engineering. Software Testing comes into picture in every phase of Software
Engineering.
The software industry has evolved through 4 eras, 50’s –60’s, mid 60’s –late
70’s, mid 70’s- mid 80’s, and mid 80’s-present. Each era has its own distinctive
characteristics, but over the years the software’s have increased in size and
complexity. Several problems are common to almost all of the eras and are
discussed below.
The Software Crisis dates back to the 1960’s when the primary reasons for this
situation were less than acceptable software engineering practices. In the early
stages of software there was a lot of interest in
computers, a lot of code writtenbut no established standards. Then
in early 70’s a lot of
computer
programs started failing and people lost confidence and thus an
industry crisis was declared. Various reasons leading to the crisis included:
- Hardware advances outpacing the ability to build software for this hardware.
- The ability to build in pace with the demands.
- Increasing dependency on software’s
- Struggle to build reliable and high quality software
- Poor design and inadequate resources.
This crisis though identified in the early years, exists to date and we have
examples of software failures around the world. Software is basically considered
a failure if the project is terminated because of costs or overrun schedules, if
the project has experienced overruns in excess of 50% of the original or if the
software results in client lawsuits. Some examples of failures include failure
of Air traffic control
systems, failure of medical software, and failure in
telecommunication software. The primary reason for these failures other than
those mentioned above is due to bad software engineering practices adopted. Some
of the worst software practices include:
- No historical software-measurement data.
- Rejection of accurate cost estimates.
- Failure to use automated estimating and planning tools.
- Excessive, irrational schedule pressure and creep in user requirements.
- Failure to monitor progress and to perform risk management.
- Failure to use design reviews and code inspections.
To avoid these failures and thus improve the record, what is needed is a better
understanding of the process, better estimation techniques for cost time and
quality measures. But the question is, what is a process? Process transform
inputs to outputs i.e. a product. A software process is a set of activities,
methods and practices involving transformation that people use to develop and
maintain software.
At present a large number of problems exist due to a chaotic software process
and the occasional success depends on individual efforts. Therefore to be able
to deliver successful
software
projects, a focus on the process is essential since a focus on the
product alone is likely to miss the scalability issues, and improvements in the
existing system. This focus would help in the predictability of outcomes,
project trends, and project characteristics.
The process that has been defined and adopted needs to be managed well and thus
process management comes into play. Process management is concerned with the
knowledge and management of the software process, its technical aspects and also
ensures that the processes are being followed as expected and improvements are
shown.
From this we conclude that a set of defined processes can possibly save us from
software project failures. But it is nonetheless important to note that the
process alone cannot help us avoid all the problems, because with varying
circumstances the need varies and the process has to be adaptive to these
varying needs. Importance needs to be given to the human aspect of
software
development since that alone can have a lot of impact on the
results, and effective cost and time estimations may go totally waste if the
human resources are not planned and managed effectively. Secondly, the reasons
mentioned related to the software engineering principles may be resolved when
the needs are correctly identified. Correct identification would then make it
easier to identify the best practices that can be applied because one process
that might be suitable for one organization may not be most suitable for
another.
Therefore to make a successful product a combination of Process and
Technicalities will be required under the umbrella of a well-defined process.
Having talked about the Software process overall, it is important to identify
and relate the role software testing plays not only in producing quality
software but also maneuvering the overall process.
The computer society defines testing as follows: “Testing -- A
verification method that applies a controlled set of conditions and stimuli for
the purpose of finding errors. This is the most desirable method of verifying
the functional and performance requirements. Test results are documented proof
that requirements were met and can be repeated. The resulting data can be
reviewed by all concerned for confirmation of capabilities.”
There may be many definitions of software testing and many which appeal to us
from time to time, but its best to start by defining testing and then move on
depending on the requirements or needs.
Edited by Mithi25 - 10Aug2009 at 11:22pm