Lec3
Lec3
Lecture – 03
Introduction- III
In the last lecture we discussed about the human cognitive limitations & we stated that
while developing large software this is the main problem that is being faced.
Software engineering is essential for developing large software as it tries to restrict its
complexity so that the effort and time required to develop software is linear with the size
of the software. Otherwise, if the software engineering principles are not applied and an
intuitive approach like a build and fix module is used then the complexity growth, that is
basically the cost, effort and the time for development increases exponentially.
As there are two major principles involved: one is abstraction and the other is
decomposition.
Abstraction is basically leaving out unnecessary part and focusing on some parts that you
require. Given a problem if you look at the problem entirely, it appears very complex.
We need to focus only on one aspect of the problem and ignore the rest. This process is
basically called as Abstraction. As you focus, the attention is only on one aspect of the
problem and ignore the other aspects that are irrelevant to the point that you are focusing,
this process is also known as Model Building.
Every abstraction requires construction of a model and a model focuses on one aspect
and ignores the rest. For example: you have a very large and complex building to be
developed and you focus on how will it appear. You will construct a frontal model of a
building & ignore the rest including its material it is build off, the thickness, floor plan,
internal design and etc as you are just focused on the frontal view of the building.
Every abstraction require some model building and a model basically focuses on some
aspect and ignores the rest.
Considering a hypothetical case that you have been asked to develop an overall
understanding of some country and given the responsibility to head the marketing &
department of a company for some country.
Would you like go to that country move around try to meet people, look at where are the
mountains, the rivers and etc. It will be extremely complex task as it will take tens or
hundreds of years still you will not be able to develop a proper understanding. What can
be really done is to refer to various types of maps of the country.
(Refer Slide Time: 05:51)
The maps are basically model or an abstraction of a country. We can study the political
map which focuses on the different provinces, capital, major cities, railway road
connectivity and etc. You will look into the physical map and try to find out the
vegetation, the elevation of the different places, rivers, sea shore and etc.
An abstraction can help solve the complex problem very easily. One thing to notice is
that there are various types of abstraction which can be made for the same problem.
Let’s look at the abstraction of a complex problem that is to understand all the life forms
that inhabit the earth containing billions or trillions of species.
In order to understand this life form, you can go on examining various species but
nobody can complete the study in his lifetime. On the contrary you can create a hierarchy
of abstraction.
Looking at a biology book you will be able to find such an abstraction, as at the topmost
level there are only three types of living organisms these are: the animals, plant, and the
fungae. Then there are the mollusca, chordate & etc and the further hierarchies until you
reach the bottom. Thus, for a complex problem the number of layers in the hierarchy can
be large and each of these layers is basically a model.
What exactly is a model. A model is an abstraction where we focus on some issues and
ignore the rest. Several types of models can be there for a problem and if it is a complex
problem, we would create a hierarchy of models.
You may come up with hundreds of different models that we use in the real life.
(Refer Slide Time: 13:47)
Example situations in daily life: There were many places where you can use the principle
of decomposition. We need to divided a large problem into small parts and as you put
them together, you will get the solution to the entire full problem.
(Refer Slide Time: 15:06)
Popular example of the decomposition principle is that if you try to break a bunch of
sticks tied together it would be extremely complex but if you decompose it then you can
break the sticks individually.
You need to decompose them such that each small problem can be solved separately and
this is also a corner stone in all software engineering principles.
Consider a book is written half hazard, all mixed up. It would become extremely
complex for someone trying to read the book. So, a chapter organization of a book is
required and it’s actually a decomposition of a complex large thought into small
manageable parts.
Software engineering helps when you have large problems to solve that are the industry
standard problems. But there are two main techniques: abstraction and decomposition.
The benefits of the software engineering principles are as follows:
Firstly, you will get the skills to develop the large programs because the intuitive
technique of build and fix, try to program and debug does not work for developing large
programs. We should be able to create models that is abstraction and decompose the
large programs, that would be the way to handle the exponential growth in complexity.
Hence, these are the systematic techniques which will help us in applying the principles
of abstraction and decomposition and develop large programs.
(Refer Slide Time: 19:08)
The second reason is that you will learn systematic techniques. To specify a problem,
designing, do user interphase development, testing, project management, maintenance,
etc and look into the issues that arise in team-based development.
The software engineering principles will be also useful to develop small programs in a
better way after acquiring the required skillset. Even for small programs after studying
the software engineering principles we will have a higher productivity and be able to
write better quality programs.
(Refer Slide Time: 20:18)
The difference between the job and project. A job is a repetition of some well-defined
and well understood tasks with little uncertainty whereas Project involves some
challenges and exploration is where there is an uncertainty of outcome. For example:
Consider to go to the market and fetch a chocolate, yes it can be done. It’s a well-
defined, well understood task can be easily accomplished, there is no uncertainty you can
definitely do it.
A software development project consists of some routine work as well as there are
challenges in it.
There are mainly two types of software projects: one is product development projects or
generic software development projects and services projects or custom software
development. The total size of the industry for software development is extremely large,
several trillions of US dollar and half of this is about developing and selling products. On
the other hand, the rest are services.
The growth in services is much more than that of products and soon we will have the
services market more than the product market. Nearly, 50 ago, almost everything was
product & there was hardly any services.
(Refer Slide Time: 23:58)
The issues in the software product development project and the services projects. The
product development projects are basically packaged software. These are available for
every individual. Anybody can order and buy this software. But if you look at the
packaged software, they are of two types: one is the horizontal product which meets the
need of mini companies. For example: Consider a word processing software or an
operating system and etc. These are horizontal because a large number of companies and
individuals are interested.
Whereas, a vertical market software or a vertical product focuses only a small group of
companies. For example, considering the telecom domain or chemical plant simulation,
that is another vertical market or the banking software where only the banks are
interested.
There are of two types, one is the horizontal products which is developed for almost
everyone whereas for the vertical products only a specific type of industry would be
interested.
Every custom software will basically have some software generic version or might be
done for some customer and get tailored or custom made for the other customers.