Introduction to Software Engineering, Software Engineering Issues Computer Science Engineering (CSE) Notes | EduRev

Computer Science Engineering (CSE) : Introduction to Software Engineering, Software Engineering Issues Computer Science Engineering (CSE) Notes | EduRev

 Page 1


 
 
 
 
 
 
 
 
Module 
7 
 
Software Engineering 
Issues 
Version 2 EE IIT, Kharagpur 1
Page 2


 
 
 
 
 
 
 
 
Module 
7 
 
Software Engineering 
Issues 
Version 2 EE IIT, Kharagpur 1
 
 
 
 
 
 
 
 
 
Lesson 
33 
 
Introduction to Software 
Engineering  
Version 2 EE IIT, Kharagpur 2
Page 3


 
 
 
 
 
 
 
 
Module 
7 
 
Software Engineering 
Issues 
Version 2 EE IIT, Kharagpur 1
 
 
 
 
 
 
 
 
 
Lesson 
33 
 
Introduction to Software 
Engineering  
Version 2 EE IIT, Kharagpur 2
Specific Instructional Objectives 
 
At the end of this lesson, the student would be able to: 
• Get an introduction to software engineering 
• Understand the need for software engineering principles 
• Identify the causes of and solutions for software crisis 
• Differentiate a piece of program from a software product 
• Understand the evolution of software design techniques over last 50 years 
• Identify the features of a structured program and its advantages 
• Identify the features of various design techniques 
• Differentiate between the exploratory style and modern styles of software 
development 
• Explain what a life cycle model is 
• Understand the need for a software life cycle model  
• Identify the different phases of the classical waterfall model and related activities 
• Identify the phase-entry and phase-exit criteria of each phase 
• Explain what a prototype is 
• Explain the need for prototype development 
• State the activities carried out during each phase of a spiral model 
 
1. Introduction 
 
With the advancement of technology, computers have become more powerful and 
sophisticated. The more powerful a computer is, the more sophisticated programs it can run. 
Thus, programmers have been tasked to solve larger and more complex problems. They have 
coped with this challenge by innovating and by building on their past programming experience. 
All those past innovations and experience of writing good quality programs in efficient and cost-
effective ways have been systematically organized into a body of knowledge. This body of 
knowledge forms the basis of software engineering principles. Thus, we can view software 
engineering as a systematic collection of past experience. The experience is arranged in the form 
of methodologies and guidelines. 
 
1.1. The Need for Software Engineering 
 
Alternatively, software engineering can be viewed an engineering approach to software 
development. A small program can be written without using software engineering principles. But 
if one wants to develop a large software product, then software engineering principles are 
indispensable to achieve a good quality software cost effectively. These definitions can be 
elaborated with the help of a building construction analogy. 
Version 2 EE IIT, Kharagpur 3
Page 4


 
 
 
 
 
 
 
 
Module 
7 
 
Software Engineering 
Issues 
Version 2 EE IIT, Kharagpur 1
 
 
 
 
 
 
 
 
 
Lesson 
33 
 
Introduction to Software 
Engineering  
Version 2 EE IIT, Kharagpur 2
Specific Instructional Objectives 
 
At the end of this lesson, the student would be able to: 
• Get an introduction to software engineering 
• Understand the need for software engineering principles 
• Identify the causes of and solutions for software crisis 
• Differentiate a piece of program from a software product 
• Understand the evolution of software design techniques over last 50 years 
• Identify the features of a structured program and its advantages 
• Identify the features of various design techniques 
• Differentiate between the exploratory style and modern styles of software 
development 
• Explain what a life cycle model is 
• Understand the need for a software life cycle model  
• Identify the different phases of the classical waterfall model and related activities 
• Identify the phase-entry and phase-exit criteria of each phase 
• Explain what a prototype is 
• Explain the need for prototype development 
• State the activities carried out during each phase of a spiral model 
 
1. Introduction 
 
With the advancement of technology, computers have become more powerful and 
sophisticated. The more powerful a computer is, the more sophisticated programs it can run. 
Thus, programmers have been tasked to solve larger and more complex problems. They have 
coped with this challenge by innovating and by building on their past programming experience. 
All those past innovations and experience of writing good quality programs in efficient and cost-
effective ways have been systematically organized into a body of knowledge. This body of 
knowledge forms the basis of software engineering principles. Thus, we can view software 
engineering as a systematic collection of past experience. The experience is arranged in the form 
of methodologies and guidelines. 
 
1.1. The Need for Software Engineering 
 
Alternatively, software engineering can be viewed an engineering approach to software 
development. A small program can be written without using software engineering principles. But 
if one wants to develop a large software product, then software engineering principles are 
indispensable to achieve a good quality software cost effectively. These definitions can be 
elaborated with the help of a building construction analogy. 
Version 2 EE IIT, Kharagpur 3
Suppose you have a friend who asked you to build a small wall as shown in fig. 33.1. You 
would be able to do that using your common sense. You will get building materials like bricks; 
cement etc. and you will then build the wall. 
 
Fig. 33.1 A Small Wall 
 
But what would happen if the same friend asked you to build a large multistoried building as 
shown in fig. 33.2? 
 
Fig. 33.2 A Multistoried Building 
 
 
 
You don't have a very good idea about building such a huge complex. It would be very 
difficult to extend your idea about a small wall construction into constructing a large building. 
Even if you tried to build a large building, it would collapse because you would not have the 
requisite knowledge about the strength of materials, testing, planning, architectural design, etc. 
Building a small wall and building a large building are entirely different ball games. You can use 
your intuition and still be successful in building a small wall, but building a large building 
requires knowledge of civil, architectural and other engineering principles. 
Without using software engineering principles it would be difficult to develop large 
programs. In industry it is usually needed to develop large programs to accommodate multiple 
functions. A problem with developing such large commercial programs is that the complexity 
and difficulty levels of the programs increase exponentially with their sizes as shown in fig. 33.3. 
For example, a program of size 1,000 lines of code has some complexity. But a program with 
10,000 LOC is not just 10 times more difficult to develop, but may as well turn out to be 100 
times more difficult unless software engineering principles are used. In such situations software 
engineering techniques come to the rescue. Software engineering helps to reduce programming 
complexity. Software engineering principles use two important techniques to reduce problem 
complexity: abstraction and decomposition. 
The principle of abstraction (in fig. 33.4) implies that a problem can be simplified by 
omitting irrelevant details. Once the simpler problem is solved then the omitted details can be 
taken into consideration to solve the next lower level abstraction, and so on. 
 
 
 
Version 2 EE IIT, Kharagpur 4
Page 5


 
 
 
 
 
 
 
 
Module 
7 
 
Software Engineering 
Issues 
Version 2 EE IIT, Kharagpur 1
 
 
 
 
 
 
 
 
 
Lesson 
33 
 
Introduction to Software 
Engineering  
Version 2 EE IIT, Kharagpur 2
Specific Instructional Objectives 
 
At the end of this lesson, the student would be able to: 
• Get an introduction to software engineering 
• Understand the need for software engineering principles 
• Identify the causes of and solutions for software crisis 
• Differentiate a piece of program from a software product 
• Understand the evolution of software design techniques over last 50 years 
• Identify the features of a structured program and its advantages 
• Identify the features of various design techniques 
• Differentiate between the exploratory style and modern styles of software 
development 
• Explain what a life cycle model is 
• Understand the need for a software life cycle model  
• Identify the different phases of the classical waterfall model and related activities 
• Identify the phase-entry and phase-exit criteria of each phase 
• Explain what a prototype is 
• Explain the need for prototype development 
• State the activities carried out during each phase of a spiral model 
 
1. Introduction 
 
With the advancement of technology, computers have become more powerful and 
sophisticated. The more powerful a computer is, the more sophisticated programs it can run. 
Thus, programmers have been tasked to solve larger and more complex problems. They have 
coped with this challenge by innovating and by building on their past programming experience. 
All those past innovations and experience of writing good quality programs in efficient and cost-
effective ways have been systematically organized into a body of knowledge. This body of 
knowledge forms the basis of software engineering principles. Thus, we can view software 
engineering as a systematic collection of past experience. The experience is arranged in the form 
of methodologies and guidelines. 
 
1.1. The Need for Software Engineering 
 
Alternatively, software engineering can be viewed an engineering approach to software 
development. A small program can be written without using software engineering principles. But 
if one wants to develop a large software product, then software engineering principles are 
indispensable to achieve a good quality software cost effectively. These definitions can be 
elaborated with the help of a building construction analogy. 
Version 2 EE IIT, Kharagpur 3
Suppose you have a friend who asked you to build a small wall as shown in fig. 33.1. You 
would be able to do that using your common sense. You will get building materials like bricks; 
cement etc. and you will then build the wall. 
 
Fig. 33.1 A Small Wall 
 
But what would happen if the same friend asked you to build a large multistoried building as 
shown in fig. 33.2? 
 
Fig. 33.2 A Multistoried Building 
 
 
 
You don't have a very good idea about building such a huge complex. It would be very 
difficult to extend your idea about a small wall construction into constructing a large building. 
Even if you tried to build a large building, it would collapse because you would not have the 
requisite knowledge about the strength of materials, testing, planning, architectural design, etc. 
Building a small wall and building a large building are entirely different ball games. You can use 
your intuition and still be successful in building a small wall, but building a large building 
requires knowledge of civil, architectural and other engineering principles. 
Without using software engineering principles it would be difficult to develop large 
programs. In industry it is usually needed to develop large programs to accommodate multiple 
functions. A problem with developing such large commercial programs is that the complexity 
and difficulty levels of the programs increase exponentially with their sizes as shown in fig. 33.3. 
For example, a program of size 1,000 lines of code has some complexity. But a program with 
10,000 LOC is not just 10 times more difficult to develop, but may as well turn out to be 100 
times more difficult unless software engineering principles are used. In such situations software 
engineering techniques come to the rescue. Software engineering helps to reduce programming 
complexity. Software engineering principles use two important techniques to reduce problem 
complexity: abstraction and decomposition. 
The principle of abstraction (in fig. 33.4) implies that a problem can be simplified by 
omitting irrelevant details. Once the simpler problem is solved then the omitted details can be 
taken into consideration to solve the next lower level abstraction, and so on. 
 
 
 
Version 2 EE IIT, Kharagpur 4
 
Complexity, 
Efforts and Time 
taken to develop  
Size 
Fig. 33.3 Increase in development time and effort with problem size 
 
 
 
 
 
 
 
1.1.1. Abstraction and Decomposition 
 
 
 
 
 
 
 
 
 
 
 
The other approach to tackle problem complexity is decomposition. In this technique, a 
complex problem is divided into several smaller problems and then the smaller problems are 
solved one by one. However, in this technique any random decomposition of a problem into 
smaller parts will not help. The problem has to be decomposed such that each component of the 
decomposed problem can be solved independently and then the solution of the different 
3
rd
 abstraction 
3
rd
 abstraction 
1
st
 abstraction 
Full problem 
Fig. 33.4 A hierarchy of abstraction 
Version 2 EE IIT, Kharagpur 5
Read More
Offer running on EduRev: Apply code STAYHOME200 to get INR 200 off on our premium plan EduRev Infinity!

Related Searches

pdf

,

Free

,

Semester Notes

,

shortcuts and tricks

,

Introduction to Software Engineering

,

Important questions

,

Previous Year Questions with Solutions

,

Software Engineering Issues Computer Science Engineering (CSE) Notes | EduRev

,

Summary

,

Sample Paper

,

Software Engineering Issues Computer Science Engineering (CSE) Notes | EduRev

,

video lectures

,

ppt

,

mock tests for examination

,

Extra Questions

,

Viva Questions

,

Introduction to Software Engineering

,

Objective type Questions

,

past year papers

,

study material

,

MCQs

,

Exam

,

Software Engineering Issues Computer Science Engineering (CSE) Notes | EduRev

,

Introduction to Software Engineering

,

practice quizzes

;