(cid:83)(cid:111)(cid:102)(cid:116)(cid:119)(cid:97)(cid:114)(cid:101) (cid:69)(cid:110)(cid:103)(cid:105)(cid:110)(cid:101)(cid:101)(cid:114)(cid:105)(cid:110)(cid:103) (cid:40)(cid:65)(cid:32)(cid:76)(cid:105)(cid:102)(cid:101)(cid:99)(cid:121)(cid:99)(cid:108)(cid:101)(cid:32)(cid:65)(cid:112)(cid:112)(cid:114)(cid:111)(cid:97)(cid:99)(cid:104)(cid:41) This page intentionally left blank (cid:83)(cid:111)(cid:102)(cid:116)(cid:119)(cid:97)(cid:114)(cid:101) (cid:69)(cid:110)(cid:103)(cid:105)(cid:110)(cid:101)(cid:101)(cid:114)(cid:105)(cid:110)(cid:103) (cid:40)(cid:65)(cid:32)(cid:76)(cid:105)(cid:102)(cid:101)(cid:99)(cid:121)(cid:99)(cid:108)(cid:101)(cid:32)(cid:65)(cid:112)(cid:112)(cid:114)(cid:111)(cid:97)(cid:99)(cid:104)(cid:41) (cid:80)(cid:114)(cid:97)(cid:116)(cid:97)(cid:112)(cid:32)(cid:75)(cid:46)(cid:74)(cid:46)(cid:32)(cid:77)(cid:111)(cid:104)(cid:97)(cid:112)(cid:97)(cid:116)(cid:114)(cid:97) (cid:80)(cid:114)(cid:111)(cid:102)(cid:101)(cid:115)(cid:115)(cid:111)(cid:114) (cid:68)(cid:101)(cid:112)(cid:97)(cid:114)(cid:116)(cid:109)(cid:101)(cid:110)(cid:116)(cid:32)(cid:111)(cid:102)(cid:32)(cid:73)(cid:110)(cid:100)(cid:117)(cid:115)(cid:116)(cid:114)(cid:105)(cid:97)(cid:108)(cid:32)(cid:69)(cid:110)(cid:103)(cid:105)(cid:110)(cid:101)(cid:101)(cid:114)(cid:105)(cid:110)(cid:103)(cid:32)(cid:38)(cid:32)(cid:77)(cid:97)(cid:110)(cid:97)(cid:103)(cid:101)(cid:109)(cid:101)(cid:110)(cid:116) (cid:73)(cid:110)(cid:100)(cid:105)(cid:97)(cid:110)(cid:32)(cid:73)(cid:110)(cid:115)(cid:116)(cid:105)(cid:116)(cid:117)(cid:116)(cid:101)(cid:32)(cid:111)(cid:102)(cid:32)(cid:84)(cid:101)(cid:99)(cid:104)(cid:110)(cid:111)(cid:108)(cid:111)(cid:103)(cid:121)(cid:44)(cid:32)(cid:75)(cid:104)(cid:97)(cid:114)(cid:97)(cid:103)(cid:112)(cid:117)(cid:114) (cid:75)(cid:104)(cid:97)(cid:114)(cid:97)(cid:103)(cid:112)(cid:117)(cid:114)(cid:44)(cid:32)(cid:87)(cid:101)(cid:115)(cid:116)(cid:32)(cid:66)(cid:101)(cid:110)(cid:103)(cid:97)(cid:108) Copyright © 2010, New Age International (P) Ltd., Publishers Published by New Age International (P) Ltd., Publishers All rights reserved. No part of this ebook may be reproduced in any form, by photostat, microfilm, xerography, or any other means, or incorporated into any information retrieval system, electronic or mechanical, without the written permission of the publisher. All inquiries should be emailed to [email protected] ISBN (13) : 978-81-224-2846-9 PUBLISHING FOR ONE WORLD NEW AGE INTERNATIONAL (P) LIMITED, PUBLISHERS 4835/24, Ansari Road, Daryaganj, New Delhi - 110002 Visit us at www.newagepublishers.com Preface With the growth of computer-based information systems in all walks of life, software engineering discipline has undergone amazing changes and has spurred unprecedented interest among individuals — both old and new to the disciplines. New concepts in software engineering discipline are emerging very fast, both enveloping and replacing the old ones. Books on the subject are many and their sizes are getting bigger and bigger everyday. A few trends are visible. Software engineering books used to contain a few chapters on software project management. Today, with new concepts on software project management evolving, the newly published books on software engineering try to cover topics of software project management, some topics such as requirements analysis, central to software engineering, get less priority, and the coverage of details of software tools is less than adequate. Further, many topics of historical importance, such as Jackson and Wariner-Orr approach, do not find place, or find only passing reference, in the books. The book on Software Engineering — The Development Process is the first of a two-volume series planned to cover the entire gamut of areas in the broad discipline of software engineering and management. The book encompasses the approaches and tools required only in the software development process and does not cover topics of software project management. It focuses on the core software development life cycle processes and the associated tools. The book divides itself into five parts: • Part 1 consists of two chapters in which it gives an historical overview and an introduction to the field of software engineering, elaborating on different software development life cycles. • Part 2 consists of eight chapters covering various facets of requirements analysis. Highlighting the importance and difficulty in requirements elicitation process, it covers a wide variety of approaches spanning from the document flow chart to Petri nets. • Part 3 consists of seven chapters dealing with the approaches and tools for software design. It covers the most fundamental design approach of top-down design and the most advanced approach of design patterns and software architecture. For convenience, we have included a chapter on coding in this part. • Part 4 consists of six chapters on coding and unit testing. Keeping the phenomenal growth of object-oriented approaches in mind, we have also included here a chapter on object-oriented testing. • Part 5 contains a chapter on integration testing. Written on the basis of two decades of experience of teaching the subject, this book, we hope, will enthuse teachers, students, and professionals in the field of software engineering to get better insights into the historical and current perspectives of the subject. Pratap K. J. Mohapatra This page intentionally left blank Acknowledgement The book is a result of thirty-five years of teaching and learning the subject and ten years of effort at compiling the work. My knowledge of the subject has grown with the evolution of the area of Software Engineering. The subjects I introduced in the M. Tech. curricula from time to time are: Business Data Processing in the seventies, Management Information System in the eighties, System Analysis and Design in the early nineties, Software Engineering in the late nineties, and Software Project Management in the current decade. I acknowledge the inspiration I drew from my philosopher guide Professor Kailas Chandra Sahu who as Head of the Department always favoured introduction of new subjects in the curricula. I owe my learning the subject from numerous books and journals. The students in my class had gone through the same pains and pleasures of learning the subject as I. I acknowledge their inquisitiveness in the class and their painstaking effort of doing their home tasks at late nights. The effort of writing the book would not have succeeded without the encouraging words from my wife, Budhi, and without the innocent inquiries regarding the progress in the book front from our daughter, Roni. I dedicate the book to them. Pratap K. J. Mohapatra This page intentionally left blank Contents Preface v Acknowledgement vii THE BASICS 1–60 1. Introduction 3–16 1.1 History of Software Engineering 3 1.2 Software Crisis 5 1.3 Evolution of a Programming System Product 6 1.4 Characteristics of Software 7 1.5 Definitions 9 1.6 No Silver Bullets 13 1.7 Software Myths 14 2. Software Development Life Cycles 17–60 2.1 Software Development Process 17 2.2 The Code-and-fix Model 17 2.3 The Waterfall Model 18 2.4 The Evolutionary Model 25 2.5 The Incremental Implementation (BOEHM 1981, GILB 1988) 25 2.6 Prototyping 27 2.7 The Spiral Model 31 2.8 Software Reuse 33 2.9 Automatic Software Synthesis 35 2.10 Comparing Alternative Software Development Life Cycle Models 35 2.11 Phasewise Distribution of Efforts 41 2.12 Life Cycle Interrelationships 42 2.13 Choosing an Application Development Strategy 43 2.14 Non-Traditional Software Development Processes 45 2.15 Differing Concepts of ‘Life Cycle’ 58 REQUIREMENTS 61–228 3. Requirements Analysis 63–92 3.1 Importance of Requirements Analysis 63