Modules / Lectures
Video Player is loading.
Current Time 0:00
Duration -:-
Loaded: 0%
Stream Type LIVE
Remaining Time -:-
 
1x

Video Transcript:

Welcome to this course on Software Engineering.
Now, we will just have a brief introduction to various issues in Software Engineering,
the motivation, why we need to study this course, what are the benefits that we will
acquired from here and so on.
So, let get started.
First is about myself: I will be the instructor for this course, my name is Rajib Mall.
Completed all my education, Bachelors, Masters, Ph.D. from the Indian Institute of Science
Bangalore; that is quite some years back.
That is the institute where I graduated.
And then worked few years with Motorola India and then have been with IIT Kharagpur since
1994 and currently a Professor at CSE department So that is the institute, Indian Institute
of Technology, Kharagpur.
To start with any course, we need to know what the course deals with, we will also do
the same thing.
We start with the basic definition of software engineering.
If somebody asks that what is software engineering, we should be able to answer based on this.
The simplest answer what is software engineering is an engineering approach to develop software.
But then, the question arises that what exactly is the engineering approach to develop software,
how is it different from the traditional approach to develop software.
To appreciate this distinction between the engineering approach to develop software and
traditional, novice approach to develop software; we will just look at a analogy with a building
construction.
Let say, you want to construct a building what would you do?
First let’s consider that you want to build a small wall like this, that you will be very
easily be able to do from your basic intuition that you need some bricks, cement, colour
and so on.
And you will succeed in developing a good small wall like this.
But let say, you are now asked to build a large building like this, having 30-40 floors
a complex.
Your basic intuition about construction will not work here.
If you actually get started building this with your basic intuition building may collapse,
it will never complete, it will be poor quality and so on.
The same thing is with respect to software.
If somebody is asked to write a small program let say 10-20, 50 lines of code he will be
able to do it based on this basic intuition.
But let us consider developing a software which is 100-1000 lines of code.
Now, if he wants to extend the intuition and develop a large software again, he will face
the same effect as constructing a large building from the basic intuition.
The engineering approach to develop software, let’s one develop software based on some
techniques and tools.
So, we look at those techniques and tools as part of the software engineering.
So, an alternate definition of software engineering can be that it is a collection of past experience
which has resulted in various techniques for development of large software, methodologies
for development, and some guidelines, and tools.
As we proceed with this course, we will be clear about what are the techniques, what
are the methodologies and guidelines, tools and so on.
Now, let us look at the IEEE definition of what software engineering is.
The IEEE definition is “software engineering is the application of systematic, disciplined,
quantifiable approach to the development, operation and maintenance of software and
that is the application of engineering to software”.
So, the IEEE definition also says that software engineering is the engineering approach to
develop software and it further elaborates this by saying application of systematic,
disciplined, quantifiable approach.
And all this systematic, disciplined, quantifiable approach have as we will see been developed
from experience of programmers over the last several years.
To motivate the need for software engineering why it is important for the software developers
to learn software engineering; let’s just understand what the software crisis is, because
everybody says that there is a software crisis.
The software crisis, the symptoms are that they fail to meet user requirements.
Software is delivered and then the users feel that it is not what they wanted.
Software is expensive, much more expensive than hardware and every year the difference
between software and hardware prices have been increasing.
It’s difficult to make any changes to the software to debug if there is a problem reported,
it takes a long time to correct it.
Sometimes the bugs cannot be corrected, difficult to enhance, add new features.
It is 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 projects have these symptoms,
that they rarely meet the user requirements, turn out to be very expensive, difficult to
alter, debug and enhance, delivered late, and use resources non-optimally.
Just to explain how expensive is the software compared to hardware.
Over the years if we compute how much a company spent on hardware and how much it’s spent
on software.
If we plot the ratio: we will see that 1960s are and so, the hardware was the major aspects
millions of dollars of hardware, and then software was very inexpensive, compared to
the hardware.
But then, the hardware costs have dropped dramatically and software costs are risen.
So, now the hardware cost divided by software cost is almost nominal approaching 0.
Just to give a feel.
Just let say that a laptop or desktop costs 45000 rupees and let say some software, let
say rationally it costs 3 lakh rupees, if it is node locked and floating license costs
6 lakh rupees which runs on a desktop.
So, just see that the cost of one software is many times the cost of the hardware and
then we need to run various types of software and hardware.
So, now the software is much more expensive, companies spend much more on software than
on hardware.
But then the question arises is that, why is that the cost of hardware has dropped so
much, but then software has not really the cost has not dropped and actually increased.
There are many reasons for this.
We will examine the reasons, but before that just want to ask a very fundamental question-
that if hardware is so good, delivered in time, extremely reliable, inexpensive, then
why not have everything in hardware; because, after all, whatever can be done by software
can also be done by hardware.
There must be some reasons otherwise people would only be developing hardware and using
it and there would be no software.
Let us look at the reasons why software is indispensable.
And actually, the use of software is increasing as compared to hardware.
There are two or three major virtues or strong points of software which actually make it
a preferred solution compared to hardware.
One of the most important thing 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 is a VLSI chip that you are considering
then it is multiyear, starting from requirements to fabrication it is a long process.
And if you later want to make a small change again you have to make that long process;
change requirements, change design, mass, and so on fabricate test.
So that’s a long duration several years.
Compared to software, making a fix a small change may be just a few days.
And also software consumes no space, weight or power.
If you want to develop something that works in software let say rational enterprise suite.
Let’s consider any software or may be let say the word processing software let’s consider
Microsoft Word.
It is possible to have this developed in hardware, but then the size of the hardware will be
enormous.
It will be extremely expensive and it will consume huge power.
But then if you add software it just resides in your hard disk and just gets executed feature
by feature.
And that’s the reason why software is the preferred mode of solution for applications
as compared to hardware.
But then, one thing we need to appreciate that software is becoming more complex, and
as we change software it also the complexity increases.
But then, what’s the basic reason?
We are trying to answer some fundamental questions here, and as we proceed these questions are
actually the basics based on which the other techniques are built up.
Must understand these basic principles, that the more complex is the software the hardware
it is to change, and also if we change it the complexity of the software further increases;
what’s the reason.
The main reason is that to change the software we must first understand it, without understanding
how it works, where exactly we have to change, we cannot change it.
And if it is very complex software will take lot of effort to understand and then make
the change.
And also if we make a small change it changes the basic underline design, modularity and
so on.
As we will see later that, every change actually degrades the structure of the software and
makes it much more complex for somebody else to understand.
As changes keep on happening to a software may be due to additional features to be supported,
may be to correct bugs and so on the software becomes more complex; it’s becomes much
more difficult for somebody to understand and make further changes.
This is one of the very basic principles as we proceed will need these principles.
And it will help us understand why some techniques are the way that they are.
Now, let’s look at the large number of projects that are done.
What is the statistics about the success rate of the projects?
The success rate is very surprising, that only a quarter is successful: just 28 percent
is successful.
A quarter is never see the light of the day, they are cancelled.
And half of the projects they are delayed, delivered late and also the cost overrun the
price increases.
But then, why is it that only quarter of the software is actually successful, half of the
software is challenged and another quarter is actually failure, they are to be cancelled.
Let’s try to understand what is the reason.
The reasons are that: now there is a demand for more and more software, the hardware is
simpler and the software is much more complex due to obvious reason that any complexity
in the application has to be done in the software.
Because, otherwise hardware will be very difficult to develop, it will be large; it will consume
lots of power volume and so on.
So, the problem sizes of software is increasing year after year.
Poor project management, because these are after all entirely manual efforts, the programmers
have to develop, they have to write the code test and so on.
But, surprisingly one of the major reasons that has been identified for the software
crisis is the lack of adequate training in software engineering.
The developers, they are not very conversant with the latest software engineering techniques.
When they graduate from a college, they don’t have proper background in software engineering,
they have studied some things that don’t really help in developing good quality software.
There is a increasing skills or tests as far as software development, software engineering
principles are concerned.
And even with software engineering the skill improvements are not really very drastic,
it improves moderately, very slowly over the years.
Compared to the way the problem sizes are increasing the productivity development has
not really kept pace.
Let’s just try to understand another very basic aspect.
Might have heard that somebody saying programming is an art but then we said software engineering
and there is a engineering approach to develop software.
So, is software an art or engineering.
Let just try to understand the issues concerned.
Now let’s look at how the technology develops for any specific domain, whether it is steel
making, whether it is paper making.
Let see how the technology develops.
We look at the technology development pattern, initially somebody comes up with some idea
and then follows it, comes up with solution.
Let say paper making was known to some people in China, and only they could develop good
quality paper.
The others tried they don’t know how to make paper, possibly came up with some very
bad quality paper.
And they thought that paper making is an art.
And artist as you know that if you ask somebody that how come he paints so well.
Let say an artist is draws a nice drawing and you ask him how did you come up with such
a nice drawing.
He will say that ok, it just comes to me I just draw it like that.
Same thing 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 they can identify how they make it and they
don’t share it actually with lot of people, they share with only their apprentice.
It’s basically a hidden secret.
Let’s say paper making or steel making, they don’t like to share with many people.
They know the techniques, but they don’t share it.
And there are craftsman who know how to do it.
So, they are basically the apprentices and then they also share with very less number
of people.
And slowly it transits to an engineering approach.
In engineering the techniques are all investigated.
The past experience is analyzed and scientific basis is given to these techniques.
These are well documented.
And, these can be studied by anybody.
These are open knowledge and then it has graduated into engineering.
But what about program writing: yes, it’s same pattern the program writing has followed.
In the 1960s, there were good programmers and there were bad programmers.
The good programmers they just wrote good programs and they don’t know how they write
good programs, but then they just wrote good programs.
And other programmers they just struggled and could not come up with good programs.
But then 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 programmers could train other programmers, who can become good programmers.
But later the techniques that they were using for writing good programs were all systematically
investigated, scientific basis given to them and published in the literature, in the book
form and so on.
So that anybody can read and then it has graduated to an engineering form where somebody can
read what are required to really develop good software, large software, the basic principles
one need to know and so on.
And our focus is looking at this software engineering techniques.
If we look at the engineering approach to develop software there is heavy use of past
experience, the past experience is systematically arranged.
And, for this experience investigation has been made theoretical basis and quantifiable
techniques; quantitative techniques have been provided.
But then, for many of the techniques that has come from experience, quantitative techniques
have not been provided, could not be provided and these are just thumb rules.
There is tradeoff between alternatives, because when we design a software we have to look
at various kinds of tradeoff: the complexity of the software, the cost and so on; and because
of the tradeoff between alternatives we have a pragmatic approach to cost effectiveness.
Just to summarize our discussion: software engineering is actually an engineering approach
to develop software, and this engineering approach has developed from past experience
of large number of programmers, over the years the programmers have innovated new ways of
looking at how to write program, good programs and so on.
All these techniques have been systematically organized so that somebody can go through
this topics and be a good programmer, be able to write large programs in a team and so on.
So, that is the focus of our discussion and over the next few lectures we will discuss
various techniques, issues and so on.
Thank you.
Auto Scroll Hide
NameDownloadDownload Size
Lecture NoteDownload as zip file10M
Module NameDownload
noc19_cs69_assignment_Week_1noc19_cs69_assignment_Week_1
noc19_cs69_assignment_Week_10noc19_cs69_assignment_Week_10
noc19_cs69_assignment_Week_11noc19_cs69_assignment_Week_11
noc19_cs69_assignment_Week_12noc19_cs69_assignment_Week_12
noc19_cs69_assignment_Week_2noc19_cs69_assignment_Week_2
noc19_cs69_assignment_Week_3noc19_cs69_assignment_Week_3
noc19_cs69_assignment_Week_4noc19_cs69_assignment_Week_4
noc19_cs69_assignment_Week_5noc19_cs69_assignment_Week_5
noc19_cs69_assignment_Week_6noc19_cs69_assignment_Week_6
noc19_cs69_assignment_Week_7noc19_cs69_assignment_Week_7
noc19_cs69_assignment_Week_8noc19_cs69_assignment_Week_8
noc19_cs69_assignment_Week_9noc19_cs69_assignment_Week_9





Sl.No Language Book link
1EnglishDownload
2BengaliNot Available
3GujaratiNot Available
4HindiNot Available
5KannadaNot Available
6MalayalamNot Available
7MarathiNot Available
8TamilDownload
9TeluguNot Available