All Document Reader 1740499507169
All Document Reader 1740499507169
1.1 Introduction
Software engineering is an interesting subject. In order to understand this subject, we will
need to look at a number of examples and case studies. And we will need to see how we
can develop good software and how it could be improved in different scenarios? Before
we move on to software engineering, we need to understand what software actually is.
What is Software?
When we write a program for computer we named it as software. But software is not just
a program; many things other than the program are also included in software.
So the software is not just the code written in Cobol, Java, Fortran or C++. It also
includes the data and all the documentation related to the program.
Why is it important?
Undoubtedly software is playing a vital role in all the field of life these days. We can see
many software applications being operated around us in our daily routine.
Some of the major areas in which software has played an important role are identified as
under.
Similarly in many other fields like education, office automation, Internet applications etc,
software is being used. Due to its central importance and massive use in many fields it is
contributing a lot in terms of economic activity started by the software products. Billions
and trillions of dollars are being invested in this field throughout the world every year.
Engineering
Before moving on to software engineering lets first discuss something about engineering
itself. If you survey some of the dictionaries then you will find the following definition of
engineering.
So the major thing that distinguishes a software system from other systems is that;
Therefore one of the major reasons of complexity in software is due to its basic nature
that the software passes through a constant process of evolution. The name of the game is
change and evolution all the times in all the dimensions. This change has the direct
impact on software in the form of defects. Therefore software engineers also have to
deals with the challenge of managing this process of change and evolution.
Let’s imagine a person who use to live in a village and who have constructed a hut for
him to live. Definitely he should have face some problems in the beginning but was
managed to build a hurt for him. Now if you ask him to construct another hut, he may be
able to construct one more easily and in a better way. This new hut may be better than the
first one and he may construct it in a relatively less time. But if you ask him to construct
concrete and iron houses then he may not be able to handle it. Since he made a hut and he
know how to make a place to live so you may expect from him to build concrete and iron
buildings. If this is the case then you should all agree that the building constructed by that
person will not have a stable structure or he may not even be able to build one.
In early 60s software had suffered from the similar kind of problem to which we call
Software Crisis. Techniques that were used to develop small software were not applicable
for large software systems. This thing resulted in the following consequences.
In most of the cases that software which was tried to be build using those old tools
and techniques were not complete.
Most of the times it was delivered too late.
Most of the projects were over-budgeted.
And in most of the case systems build using these techniques were not reliable –
meaning that they were not be able to do what they were expected to do.
As a result of these problems a conference were held in 1960 in which the term software
crisis was introduced. And the major issue discussed was that the development of
software is in crisis and we have not been able to handle its complexities. And the term of
Software Engineering was also coined in the same conference. People have said that, we
should use engineering principles in developing software in the same way as we use these
principles in developing cars, buildings, electronic devices etc. Software engineering is
the result of software crisis when people realized that it is not possible to construct
complex software using the techniques applicable in 1960s. An important result of this
thing was that people had realized that just coding is not enough.
Before explaining this definition lets first look at another definition of Software
Engineering given by Ian Somerville.
“All aspects of software production’ Software engineering is not just concerned with the
technical processes of software development but also with activities such as software
project management and with the development of tools, methods and theories to support
software production”.
These definitions make it clear that Software Engineering is not just about writing code.
1.5 Software Engineering
Software Engineering is the set of processes and tools to develop software. Software
Engineering is the combination of all the tools, techniques, and processes that used in
software production. Therefore Software Engineering encompasses all those things that
are used in software production like:
Programming Language
Programming Language Design
Software Design Techniques
Tools
Testing
Maintenance
Development etc.
So all those thing that are related to software are also related to software engineering.
Some of you might have thought that how programming language design could be related
to software engineering. If you look more closely at the software engineering definitions
described above then you will definitely see that software engineering is related to all
those things that are helpful in software development. So is the case with programming
language design. Programming language design is one of the major successes in last fifty
years. The design of Ada language was considered as the considerable effort in software
engineering.
Well-Engineered Software
Let’s talk something about what is well-engineered software. Well-engineered software is
one that has the following characteristics.
It is reliable
It has good user-interface
It has acceptable performance
It is of good quality
It is cost-effective
Every company can build software with unlimited resources but well-engineered software
is one that conforms to all characteristics listed above.
Software has very close relationship with economics. Whenever we talk about
engineering systems we always first analyze whether this is economically feasible or not.
Therefore you have to engineer all the activities of software development while keeping
its economical feasibility intact.
The major challenges for a software engineer is that he has to build software within
limited time and budget in a cost-effective way and with good quality
But most of the times software engineers ends up in conflict among all these goals. It is
also a big challenge for a software engineer to resolve all these conflicts.
These requirements may be conflicting. For example, there may be tension among the
following:
A Software engineer is required to analyze these conflicting entities and tries to strike a
balance.
In some software the efficiency is more important and desirable. For example if we talk
about a cruise missile or a nuclear reactor controller that are droved by the software
systems then performance and reliability is far more important than the cost-effectiveness
and user-friendliness. In these cases if your software does not react within a certain
amount of time then it may result in the disaster like Chernobyl accident.
Therefore software development is a process of balancing among different characteristics
of software described in the previous section. And it is an art to come up with such a
good balance and that art can be learned from experience.
The law of diminishing act describes the same phenomenon. Similar is the case with
software engineering. Whenever you perform any task like improving the efficiency of
the system, try to improve its quality or user friendliness then all these things involve an
element of cost. If the quality of your system is not acceptable then with the investment
of little money it could be improved to a higher degree. But after reaching at a certain
level of quality the return on investment on the system’s quality will become reduced.
Meaning that the return on investment on quality of software will be less than the effort
or money we invest. Therefore, in most of the cases, after reaching at a reasonable level
of quality we do not try to improve the quality of software any further. This phenomenon
is shown in the figure below.
cos
t
benefit
benefi
t
Software Background
Caper Jones a renounced practitioner and researcher in the filed of Software Engineering,
had made immense research in software team productivity, software quality, software
cost factors and other fields relate to software engineering. He made a company named
Software Productivity Research in which they analyzed many projects and published the
results in the form of books. Let’s look at the summary of these results.
Project Management
Requirement Engineering
Design
Coding
Testing
Software Quality Assurance
Software Configuration Management
Software Integration and
Rest of the activities
One thing to note here is that you cannot say that anyone of these activities is dominant
among others in terms of effort putted into it. Here the point that we want to emphasize is
that, though coding is very important but it is not more than 13-14% of the whole effort
of software development.
Fred Brook is a renowned software engineer; he wrote a great book related to software
engineering named “A Mythical Man Month”. He combined all his articles in this book.
Here we will discuss one of his articles named “No Silver Bullet” which he included in
the book.
So, according to Fred Brook, in the eye of an unsophisticated manager software is like a
giant. Sometimes it reveals as an unscheduled delay and sometimes it shows up in the
form of cost overrun. To kill this giant the managers, look for magical solutions.
But
unfortunately magic is not a reality. We do not have any magic to defeat
this giant. There is only one solution and that is to follow a disciplined
approach to build software. We can defeat the giant named software by
using disciplined and engineered approach towards software development.
1.6 Summary
Today we have discussed the following things related to software engineering.
What is software engineering?
Why is it important?
What is software crisis?
How software engineering derived from software crisis.
What is the importance of engineering principles in developing software?
What is balancing act and how apply in software engineering?
What is law of diminishing returns?
And what are the major activities involved in the development of software.