Welcome to the course on Software Engineering. We will have a brief introduction to the various issues in Software Engineering, the motivation and the benefits that you will acquire from here.
What is Software Engineering ?
The definition of Software Engineering is that it’s an engineering approach to develop software.
But the question arises that what exactly is the engineering approach to develop software and how it’s different from the traditional approach to developing software.
The distinction between an engineering approach to develop software and traditional novice approach to develop software, looking at an analogy with building construction, consider that you want to build a small wall that you will very easily be able to do from your basic intuition with the help of bricks, cement, colour and etc and you will succeed in developing a good small wall. But when you are asked to build a large building having 30-40 floors a complex. Your basic intuition about construction will not work. If you actually start building this with your basic intuition then the building may collapse and never complete and it will be of a poor quality.
Same is with respect to the software. If someone is asked to write a small program like 10-20 or 50 lines of code, you will be able to do it based on this basic intuition. But consider developing a software which is 100-1000 lines of code. Now, if you want to extend the intuition and develop a large software, again you will face the same effect as constructing a large building from the basic intuition.
An alternate definition of software engineering is that it’s a collection of past experience
which has resulted in various techniques for the development of large software, the
methodologies for development, some guidelines and tools.
IEEE definition of Software Engineering
Software Engineering is that it’s the application of a systematic, disciplined, quantifiable approach to the development, operation and maintenance of software; that is the application of engineering to software”.
The definition also states that software engineering is the engineering approach to
develop software and it further elaborates this by saying: application of a systematic,
disciplined, quantifiable approach. All this systematic, disciplined and quantifiable
approach has been developed from the experience of past programmers over the last
- The software crisis is that crisis when the software fails to meet the user requirements due to the complexity of the problems.
- Software is more expensive than hardware and every year the difference between software and hardware prices have been increasing dramatically.
- It’s difficult to make any changes to the software and to debug if there is a problem reported and requires a longer time to correct it.
- Sometimes the bugs cannot be corrected and it’s very usual for software to be delivered late and use resources non-optimally.
- For most of the software that you order or develop as a part of the project have these symptoms, that they rarely meet the user requirements and turn out to be very expensive.
It’s quite difficult to alter, debug and enhance, mostly delivered late and use resources
To compare and contrast the expensiveness of software to that of hardware, if we plot the
graph, we will see that 1960s, the hardware was the major aspect, millions of dollars. But
then, the hardware costs dropped dramatically and the software costs got risen.
Now, the hardware cost divided by software cost is almost nominal approaching 0.
Considering a laptop or desktop which costs 45000 rupees and the software on the other
hand such as rational suite costs which costs up to 3 lakh rupees and if its node-locked
and floating license it costs around 6 lakh rupees which runs on a desktop, I.e.; the cost
of one software is X times the cost of the hardware.
The software is more expensive & companies spend more on software than on hardware.
The fundamental question which arises is that if the hardware is so good, delivered in
time, extremely reliable, inexpensive then why not have everything in hardware. After
all, whatever can be done by software can also be done by hardware.
There are two or three major virtues of software’s which actually make it a preferred
solution compared to hardware. One of the important reasons is that developing software
is easy, faster and also if you find anything to be changed you can easily change it.
Hardware development is a long run process. If it’s a VLSI chip that you are considering,
then it requires multiyear, starting from the requirements to fabrication and if you want
to make a small change again you have to go on that long process; change requirements,
change design, mass and fabrication test which requires a long duration of several years.
Compared to software’s, making a fix or a small change may be done just in a few days
as software consumes no space, weight or power. If you want to develop something that
works in software consider Microsoft Word. It’s possible to have this developed in
hardware, but then the size of the hardware will be enormous. It will be extremely
expensive will consume huge power. But if you add this into the software it will just
reside in the hard disk and get executed feature by feature. That’s the reason why
software is the preferred mode of solution for applications as compared to hardware.
Software is becoming more complex and as we change the software it’s complexity
increases. To change the software, initially you must understand it, without understanding how it works, you cannot change it. If the software is very complex, it will require a lot of time to make the change. Also, if we make a small change it will change the basic underline, modularity and etc.
Every change degrades the structure of the software and makes it much more complex
for someone to understand it. As changes keep on happening to a software due to
additional features to be supported or to correct the bugs and etc.
Looking into the large number of projects. What are the statistics about the success rate
of the projects? Just 28 percent is successful. A quarter never see the light of the day and
they are cancelled. Meanwhile, half of the projects are delayed, delivered late and also
the cost overrun price increases.
Only a quarter of the software is successful while half of the software is challenged and
another quarter is a failure and are to be cancelled and the reasons is as follows:
As there is a demand for more software’s, the hardware is simpler and the software is
Due to obvious reason, any complexity in the application has to be done
in the software. Otherwise, the hardware will be very difficult to develop as it will be
large, consume lots of power volume and etc.
Poor project management because these are entirely manual efforts, the programmers
have to develop, write the code test and etc. But, surprisingly one of the major reasons
that have been identified for the software crisis is the lack of adequate training in
software engineering. The developers are not very conversant with the latest software
Even with software engineering the skill improvements are not really very drastic, it
improves moderately, slowly over the years. Compared to the way the problem sizes are
increasing the productivity development has not really kept pace.
Is software an art or engineering?
Looking at how the technology develops for any specific domain, whether it is steel
making or paper making and also look at the technology development pattern. As stated,
paper making was known to some people in China and only, they could develop good
quality paper. The others tried but they do not know how to make paper, possibly came
up with some very bad quality paper and thought paper making is an art.
Consider an artist draws a nice drawing and if you ask him how did you come up with
such a nice drawing. He will say I just draw it. Same with technology, initially they say
that we just know how to make it. But then slowly the art form in technology
development graduates to a craft form. In a craft form, there are some techniques which
can be identified and they share it with only their apprentice.
It’s basically a hidden secret. Be it paper making or steel making, there is a craftsman
who knows how to do it. Basically, they are the apprentices and they share their skillset
with a very smaller number of people. Slowly it transits to an engineering approach. In
engineering, the techniques are all investigated. The past experience is analyzed and a
scientific basis is given to these techniques. These are then well documented and can be
studied by anyone in their open knowledge. But what about program writing; yes, it’s the
In the early 1960s, there were good programmers and bad programmers. The good
programmers just wrote good programs and other programmers struggled and could not
come up with good programs. Slowly, the techniques that they were using in writing the
good programs were identified and shared with few and that was the craft form. A good
programmer was to train other programmers, who can become good programmers.
Later, the techniques that they were using for writing good programs were all
systematically investigated, scientific basis was given to them and published in the
literature and in the book form.
If you look at the engineering approach to develop software, there is heavy use of past
experience, the past experience is systematically arranged. For this, the experience
investigation has been made a theoretical basis and quantifiable technique’s i.e.;
quantitative techniques have been provided. There is a tradeoff between alternatives
because when you design software, you have to look at various kinds of tradeoff, the
complexity of the software and the cost. Because of that, the tradeoff between
alternatives, you will have a pragmatic approach to cost effectiveness.
Software engineering is an engineering approach to develop software’s and this engineering approach has developed from past experience of a large number of programmers. Over the years the programmers have innovated new ways of looking at how to write good programs. All these techniques have been systematically organized so that anyone can go through these topics and be a good programmer and write large programs in a team and also as an individual.