Professional Documents
Culture Documents
Download pdf Fundamentals Of Software Engineering 5Th Edition Mall ebook full chapter
Download pdf Fundamentals Of Software Engineering 5Th Edition Mall ebook full chapter
https://textbookfull.com/product/fundamentals-of-software-
engineering-fifth-edition-mall/
https://textbookfull.com/product/concise-guide-to-software-
engineering-from-fundamentals-to-application-methods-1st-edition-
gerard-oregan/
https://textbookfull.com/product/model-driven-engineering-and-
software-development-5th-international-conference-
modelsward-2017-luis-ferreira-pires/
https://textbookfull.com/product/foundations-of-software-
engineering-ashfaque-ahmed/
Engineering Software Products: An Introduction to
Modern Software Engineering 1st Edition Ian Sommerville
https://textbookfull.com/product/engineering-software-products-
an-introduction-to-modern-software-engineering-1st-edition-ian-
sommerville/
https://textbookfull.com/product/fundamentals-of-turfgrass-
management-5th-edition-nick-e-christians/
https://textbookfull.com/product/the-essence-of-software-
engineering-volker-gruhn/
https://textbookfull.com/product/fundamentals-of-thermal-fluid-
sciences-5th-edition-yunus-a-cengel/
https://textbookfull.com/product/fundamentals-of-electric-
circuits-5th-edition-alexander-charles-sadiku-matthew/
Fifth Edition
FUNDAMENTALS OF
SOFTWARE
ENGINEERING
Rajib Mall
Fundamentals of
Software
Engineering
FIFTH EDITION
RAJIB MALL
Professor
Department of Computer Science and Engineering
Indian Institute of Technology Kharagpur
Delhi-110092
2018
FUNDAMENTALS OF SOFTWARE ENGINEERING, Fifth Edition
Rajib Mall
© 2018 by PHI Learning Private Limited, Delhi. All rights reserved. No part of this book may be
reproduced in any form, by mimeograph or any other means, without permission in writing from the
publisher.
The export rights of this book are vested solely with the publisher.
Published by Asoke K. Ghosh, PHI Learning Private Limited, Rimjhim House, 111, Patparganj
Industrial Estate, Delhi-110092 and Printed by Rajkamal Electric Press, Plot No. 2, Phase IV, HSIDC,
Kundli-131028, Sonepat, Haryana.
To
Bapa, Maa,
and
my beloved wife Prabina
CONTENTS
List of Figures xv
Preface xix
Preface to the First Edition xxi
1. Introduction 1–33
1.1 Evolution—From an Art Form to an Engineering Discipline 4
1.1.1 Evolution of an Art into an Engineering Discipline 4
1.1.2 Evolution Pattern for Engineering Disciplines 4
1.1.3 A Solution to the Software Crisis 6
1.2 Software Development Projects 7
1.2.1 Programs versus Products 7
1.2.2 Types of Software Development Projects 8
1.2.3 Software Projects Being Undertaken by Indian Companies 10
1.3 Exploratory Style of Software Development 10
1.3.1 Perceived Problem Complexity: An Interpretation Based on Human
Cognition Mechanism 12
1.3.2 Principles Deployed by Software Engineering to Overcome Human
Cognitive Limitations 15
1.4 Emergence of Software Engineering 18
1.4.1 Early Computer Programming 19
1.4.2 High-level Language Programming 19
1.4.3 Control Flow-based Design 19
1.4.4 Data Structure-oriented Design 23
1.4.5 Data Flow-oriented Design 23
1.4.6 Object-oriented Design 24
1.4.7 What Next? 25
1.4.8 Other Developments 26
1.5 Notable Changes in Software Development Practices 26
1.6 Computer Systems Engineering 28
Summary 29
Exercises 30
v
vi Contents
References 581–583
Index 585–590
LIST OF FIGURES
The revision to this book had become necessary on account of the rapid advancements that
have taken place in software engineering techniques and practices since the last edition was
written. In this book, almost all the chapters have been enhanced. Also, many objective type
questions have been included in almost every chapter. This book has taken shape over the
two decades while teaching the Software Engineering subject to the undergraduate and
postgraduate students at IIT Kharagpur.
While teaching to the students, I had acutely felt the necessity of a book that treats all
the important topics in software engineering, including the important recent advancements
in a coherent framework and at the same time deals the topics from the perspective of the
practising engineer. A large portion of the text is based on my own practical experience
which I gained while working on software development projects in several organizations.
Software development techniques are highly dynamic. Almost every year, new techniques
and tools relating to all areas of software development are emerging. Occasionally, there
are paradigm shifts as well. This edition is an attempt to incorporate some of the latest
developments. I have also attempted to make it more usable by the students by adding
several examples and exercise.
This book is designed to serve as a textbook for one-semester course on software
engineering for undergraduate students by excluding the star marked sections in different
chapters. The topics on Halsteads software science, Software reuse, and Formal specification
can be omitted for a basic study of the subject, if so desired by the teacher. However, these
topics should be included in a postgraduate level course. For postgraduate students, this
textbook may be supplemented with some additional topics.
The students intending to go through this book must be familiar with at least one high
level programming and one low level programming language. They are also expected to
possess basic ideas about operating systems, systems programming, compiler writing, and
computer architecture issues. Experience in writing large-sized programs would be very
helpful in grasping some of the important concepts discussed in this book. The emphasis
of this book is to illustrate the important concepts through small examples rather than
through a single large running example. I have intentionally selected the former approach
as I believe that this would make it easier to illustrate several subtle and important concepts
through appropriate small examples. It would have been very difficult to illustrate all these
concepts through a single running example.
The layout of the chapters has been guided by the sequence of activities undertaken
during the life of a software product. However, since the project management activity is
xix
xx Preface
spread over all phases, I thought that it is necessary to discuss these as early in the book
as possible. Software project management has been discussed in Chapter 3. However, while
teaching from this book, I prefer to teach the project management topic after Chapter 11,
since that way I am able to give the design assignments to the students early and they get
sufficient time to complete them.
In the text, I have taken the liberty to use he/his to actually mean both the genders
This has been done only to increase the readability of the writing rather than with intent
of any bias.
The power-point slides to teach the book as well as the solution manual can be obtained
either from the publisher or by sending me an e-mail.
Typographical and other errors and comments should be reported to me at:
rajib@cse.iitkgp.ernet.in
or at my following postal address.
RAJIB MALL
Professor
Department of Computer Science and Engineering
Indian Institute of Technology Kharagpur
PREFACE TO THE FIRST EDITION
xxi
xxii Preface to the First Edition
Acknowledgements
Many persons have contributed to make this book a reality. I would especially like to
express my appreciation to Prof. L.M. Patnaik for his unstinted support and encouragement.
I would also like to thank Prof. Sunil Sarangi, Dean (CEP) for his guidance throughout the
preparation of the manuscript. Thanks are also due to Prof. Ajit Pal, the present Head of the
Department, and all my colleagues at the Computer Science and Engineering Department
of IIT Kharagpur for their helpful comments and suggestions. I express my special thanks
to Prof. P.K.J. Mahapatra of IEM Department for his help during the final preparation of
the manuscript.
I acknowledge the help and cooperation received from all the staff members of the
Computer Science and Engineering Department of IIT Kharagpur.
I would like to acknowledge the financial assistance provided by IIT Kharagpur for
the preparation of the manuscript and I wish to thank the numerous B.Tech and M.Tech
students whose enthusiastic participation in classroom discussions helped me to present
many ideas and concepts, as discussed in this book, with greater clarity.
Finally, I wish to express my sincere thanks to all my family members for their moral
support. In particular, I thank my parents, Sanjib, Kanika Bhabhi, Sudip, Shivani, Sonali
and Amitabha, my parents-in-law and GUGLOO. I am grateful to my wife Prabina for her
constant encouragement.
RAJIB MALL
Introduction 1
CHAPTER
1
INTRODUCTION
CHAPTER OUTLINE
®® Evolution of technology with time
®® Relative changes of hardware and
software costs over time
®® Exploratory program development
®® Increase in development time and
effort with problem size
®® Human cognition mechanism model
®® Data flow model of a car assembly
plant
®® Evolution of software design
techniques
®® Computer systems engineering
C
ommercial usage of computers now spans the last sixty
LEARNING OBJECTIVES years. Computers were very slow in the initial years
®® Exploratory style of and lacked sophistication. Since then, their computational
software development power and sophistication increased rapidly, while their prices
and its shortcomings. dropped dramatically. To get an idea of the kind of
®® Perceived problem improvements that have occurred to computers, consider the
complexity and following analogy. If similar improvements could have occurred
techniques to to aircrafts, now personal mini-airplanes should have become
overcome them
available, costing as much as a bicycle, and flying at over 1000
®® Evolution of software times the speed of the supersonic jets. To say it in other words,
engineering principles the rapid strides in computing technologies are unparalleled
in any other field of human endeavour.
Let us now reflect the impact of the astounding progress
made to the hardware technologies on the software. The more
powerful a computer is, the
more sophisticated programs The innovations and past expe-
can it run. Therefore, with riences towards writing good
every increase in the raw quality programs cost-effec-
computing capabilities of tively, have contributed to the
computers, software engineers emergence of the software en-
have been called upon to gineering discipline.
solve increasingly larger and
complex problems, and that too in cost-effective and efficient
ways. Software engineers have coped up with this challenge
by innovating and building upon their past programming
experiences.
Let us now examine the scope of the software engineering
discipline more closely.
and at most undertake very small building works such as the construction of boundary
walls. Now faced with the task of building a complete house, your petty contractor
would draw upon all his knowledge regarding house building. Yet, he may often be
clueless regarding what to do. For example, he might not know the optimal proportion
in which cement and sand should be mixed to realise sufficient strength for supporting
the roof. In such situations, he would have to fall back upon his intuitions. He would
normally succeed in his work, if the house you asked him to construct is sufficiently small.
Of course, the house constructed by him may not look as good as one constructed by a
professional, may lack proper planning, and display several defects and imperfections. It
may even cost more and take longer to build.
Now, suppose you entrust your petty contractor to build a large 50-storeyed
commercial complex for you. He might exercise prudence, and politely refuse to undertake
your request. On the other hand, he might be ambitious and agree to undertake the
task. In the later case, he is sure to fail. The failure might come in several forms—the
building might collapse during the construction stage itself due to his ignorance of the
basic theories concerning the strengths of materials; the construction might get unduly
delayed, since he may not prepare proper estimates and detailed plans regarding the
types and quantities of raw materials required, the times at which these are required,
etc. In short, to be successful in constructing a building of large magnitude, one needs
a good understanding of various civil and architectural engineering techniques such as
analysis, estimation, prototyping, planning, designing, and testing. Similar is the case
with the software development projects. For sufficiently small-sized problems, one might
proceed according to one’s intuition and succeed; though the solution may have several
imperfections, cost more, take longer to complete, etc. But, failure is almost certain,
if one without a sound understanding of the software engineering principles undertakes
a large-scale software development work.
maintainability, and usability. Therefore, while arriving at the final solution, several
iterations and backtracking are usually needed. In science, on the other hand,
only unique solutions are possible.
Engineering disciplines such as software engineering make use of only well-
understood and well-documented principles. Art, on the other hand, is often based
on making subjective judgement based on qualitative attributes and using ill-
understood principles.
From the above discussions, we can easily infer that software engineering is in
many ways similar to other engineering disciplines such as civil engineering or electronics
engineering.
we can easily notice that it has evolved from an esoteric art form to a craft form,
and then has slowly emerged as an engineering discipline. As a matter of fact, this
pattern of evolution is not very different from that seen in other engineering disciplines.
Irrespective of whether it is iron making, paper making, software development, or building
construction; evolution of technology has followed strikingly similar patterns. This pattern
of technology development has schematically been shown in Figure 1.1. It can be seen from
Figure 1.1 that every technology in the initial years starts as a form of art. Over time, it
graduates to a craft and finally emerges as an engineering discipline. Let us illustrate this
fact using an example. Consider the evolution of the iron making technology. In ancient
times, only a few people knew how to make iron. Those who knew iron making, kept
it a closely-guarded secret. This esoteric knowledge got transferred from generation to
generation as a family secret. Slowly, over time technology graduated from an art to
a craft form where tradesmen shared their knowledge with their apprentices and the
knowledge pool continued to grow. Much later, through a systematic organisation and
documentation of knowledge, and incorporation of scientific basis, modern steel making
technology emerged. The story of the evolution of the software engineering discipline is
not much different. As we have already pointed out, in the early days of programming,
there were good programmers and bad programmers. The good programmers knew
certain principles (or tricks) that helped them write good programs, which they seldom
shared with the bad programmers. Program writing in later years was akin to a
craft. Over the next several years, all good principles (or tricks) that were discovered by
programmers along with research innovations have systematically been organised into a
body of knowledge that forms the discipline of software engineering.
Software engineering principles are now being widely used in industry, and new
principles are still continuing to emerge at a very rapid rate—making this discipline
highly dynamic. In spite of its wide acceptance, critics point out that many of the
methodologies and guidelines provided by the software engineering discipline lack
scientific basis, are subjective, and often inadequate. Yet, there is no denying the fact
that adopting software engineering techniques facilitates development of high quality
software in a cost-effective and timely manner. Software engineering practices have proven
to be indispensable to the development of large software products—though exploratory
styles are often used successfully to develop small programs such as those written by
students as classroom assignments.
FIGURE 1.2 Relative changes of hardware and software costs over time.
At present, many organisations are actually spending much more on software than on
hardware. If this trend continues, we might soon have a rather amusing scenario. Not
Another random document with
no related content on Scribd:
suicide in sane people. There is no danger of deliberate homicidal
acts in persons of good character. A criminally disposed person
would more readily commit murder in simple melancholia than if free
from that disease.
Before the courts the fact should be kept in mind that persons with
acute melancholia have diminished power of self-control by virtue of
their disease, and so yield more readily to temptation than in health.
They also may have imperative conceptions—ideas so strong that
they cannot, or can with difficulty, resist carrying them out even when
they know them to be wrong; and there may be sudden outbursts of
almost maniacal excitement. They are often able to make wills and
perform contracts, in form and in detail, as well as ever, when they
are so filled with insane delusions as to be on the point of killing
themselves and their families. There is impaired capacity, however,
of recognizing the relations of persons and things to one another, a
distinct moral perversion, and a diminished recognition of obligations
and sense of responsibility. In other words, they are not always fully
themselves on those points in which they seem to be so, and yet
patients in asylums with acute melancholia have been known to give
the best of advice to their business-partners.
The COURSE AND DURATION of acute mania vary within wide limits, with
an average of not far from six months, with recoveries in about 60
per cent. of first cases uncomplicated by pneumonia, chronic
disease, or a marked neuropathic state: 5 or 6 per cent. die, chiefly
from pneumonia, phthisis, accidents, or exhaustion, seldom suicide.
Incurable cases drop slowly into dementia or into chronic delusional
insanity, the motor excitement subsiding. The delusional insanity
may be simply a stage in the process toward dementia.
In the DIAGNOSIS of acute mania, unless great care is used, the
physician sometimes finds that he has sent to the asylum a case of
acute, especially infectious disease, in the early stage and with
unusual manifestations of febrile delirium. The indications for
avoiding this unfortunate mistake are care and time in making
diagnoses.
The term subacute mania is used by some writers for the milder
cases of acute mania, just as acute delirious mania is a term which
is applied to those violent cases of acute mania in which furious and
prolonged delirium marks the disease, and in which there is a high
death-rate and low proportion of recoveries.
The COURSE AND DURATION of katatonia are tedious, and even if there
is apparent recovery from the first attack, the tendency is to relapses
and to slowly-advancing dementia and death from those causes of
which dements in hospitals die, especially phthisis. I have never
seen a complete and permanent recovery.