What Every Engineer Should Know About Software Engineering
Total Page:16
File Type:pdf, Size:1020Kb
7228_C000.fm Page v Tuesday, March 20, 2007 6:04 PM WHAT EVERY ENGINEER SHOULD KNOW ABOUT SOFTWARE ENGINEERING Phillip A. Laplante Boca Raton London New York CRC Press is an imprint of the Taylor & Francis Group, an informa business © 2007 by Taylor & Francis Group, LLC 7228_C000.fm Page vi Tuesday, March 20, 2007 6:04 PM CRC Press Taylor & Francis Group 6000 Broken Sound Parkway NW, Suite 300 Boca Raton, FL 33487-2742 © 2007 by Taylor & Francis Group, LLC CRC Press is an imprint of Taylor & Francis Group, an Informa business No claim to original U.S. Government works Printed in the United States of America on acid-free paper 10 9 8 7 6 5 4 3 2 1 International Standard Book Number-10: 0-8493-7228-3 (Softcover) International Standard Book Number-13: 978-0-8493-7228-5 (Softcover) This book contains information obtained from authentic and highly regarded sources. Reprinted material is quoted with permission, and sources are indicated. A wide variety of references are listed. Reasonable efforts have been made to publish reliable data and information, but the author and the publisher cannot assume responsibility for the validity of all materials or for the conse- quences of their use. No part of this book may be reprinted, reproduced, transmitted, or utilized in any form by any electronic, mechanical, or other means, now known or hereafter invented, including photocopying, microfilming, and recording, or in any information storage or retrieval system, without written permission from the publishers. For permission to photocopy or use material electronically from this work, please access www. copyright.com (http://www.copyright.com/) or contact the Copyright Clearance Center, Inc. (CCC) 222 Rosewood Drive, Danvers, MA 01923, 978-750-8400. CCC is a not-for-profit organization that provides licenses and registration for a variety of users. For organizations that have been granted a photocopy license by the CCC, a separate system of payment has been arranged. Trademark Notice: Product or corporate names may be trademarks or registered trademarks, and are used only for identification and explanation without intent to infringe. Library of Congress Cataloging-in-Publication Data Laplante, Phillip A. What every engineer should know about software engineering / Phillip A. Laplante. p. cm. -- (What every engineer should know ; no. 1:40) Includes bibliographical references and index. ISBN-13: 978-0-8493-7228-5 (alk. paper) ISBN-10: 0-8493-7228-3 (alk. paper) 1. Software engineering. I. Title. II. Series. QA76.758.L327 2007 005.3--dc22 2006036497 Visit the Taylor & Francis Web site at http://www.taylorandfrancis.com and the CRC Press Web site at http://www.crcpress.com © 2007 by Taylor & Francis Group, LLC 7228_C000.fm Page vii Tuesday, March 20, 2007 6:04 PM What Every Engineer Should Know: Series Statement What every engineer should know amounts to a bewildering array of knowl- edge. Regardless of the areas of expertise, engineering intersects with all the fields that constitute modern enterprises. The engineer discovers soon after graduation that the range of subjects covered in the engineering curriculum omits many of the most important problems encountered in the line of daily practice—problems concerning new technology, business, law, and related technical fields. With this series of concise, easy-to-understand volumes, every engineer now has within reach a compact set of primers on important subjects such as patents, contracts, software, business communication, management sci- ence, and risk analysis, as well as more specific topics such as embedded systems design. These are books that require only a lay knowledge to under- stand properly, and no engineer can afford to remain uniformed of the fields involved. © 2007 by Taylor & Francis Group, LLC 7228_C000.fm Page ix Tuesday, March 20, 2007 6:04 PM Introduction What is the goal of this book? This is a book about software engineering, but its purpose is not to enable you to leap into the role of a fully trained software engineer. That goal would be impossible to achieve solely with the reading of any book. Instead, the goal of this book is to help you better understand the nature of software engineering as a profession, as an engineering discipline, as a culture, and as an art form. And it is because of its ever morphing, multidimensional nature that non-software engineers have so much difficulty understanding the challenges software engineers must face. Many practicing software engineers have little or no formal education in software engineering. While software engineering is a discipline in which practice and experience are important, it is rare that someone who has not studied software engineering will have the skills and knowledge needed to efficiently build industrial strength, reliable software systems. While these individuals may be perfectly capable of building working systems, unless a deliberate software engineering approach is followed, the cost of develop- ment will probably be higher than necessary, and the cost of maintaining the system will certainly be higher than it ought to be. How is this book different from other software engineering books? It is different from other software engineering books and from every other book I have written in that it is in Socratic form; that is, in the form of questions and answers. In some places I have shamelessly reused material from my books, particularly Software Engineering for Image Processing Systems (with attributions), but even then, significant rewriting was needed to place the material in the appropriate form of discourse. Indeed, in this present text I have generalized the concepts from that of predecessors to address the broader needs of all kinds of engineers. © 2007 by Taylor & Francis Group, LLC 7228_C000.fm Page x Tuesday, March 20, 2007 6:04 PM Can this book convert me into a software engineer? I don’t promise that after reading this book you will become a master soft- ware engineer — no book can deliver on that promise. What this book will do, I hope, is help you better understand the limits of software engineering and the advances that have been made over the years. If nothing else, it is my hope that you will come away from reading this book with a deeper, more sympathetic understanding of the software engineer as an engineer. Are software engineers really engineers? Yes, the software engineer should be regarded as an engineer, particularly if he has the proper training, discipline, and mindset. How should I use this book? To get the most benefit from this book, I suggest you use it in one or more of the following ways: • Read it through in its entirety to provide a general framework for and understanding of the profession of software engineering. • Use it as a regular reference when questions about software, software engineering, or software engineers arise. You will find most of your questions directly addressed in this book. • Skip around and read sections as needed to answer specific ques- tions. There is no harm in reading this book out of order; after all, it was written out of order. Who is the intended audience? The target reader is the practicing engineer who has found he must write software, integrate off-the-shelf software into the systems he builds, or who works with software engineers on a regular basis. Undergraduate and grad- uate engineering students would be well served to have this book for refer- ence, as it is likely that they will find themselves in the position of building software, and it is good to establish a rigorous framework early in their careers. Did anyone help you with this book? I have to acknowledge the help of several people along the way. Some of this book is derived from lectures given by Drs. Colin Neill, Raghu Sangwan, and myself in the course, “Advanced Software Engineering,” at The Pennsylvania State University (Penn State) School of Graduate Profes- sional Studies. Some of the other material comes from my graduate software project management and software testing courses. © 2007 by Taylor & Francis Group, LLC 7228_C000.fm Page xi Tuesday, March 20, 2007 6:04 PM Drs. Sangwan and Neill and Professor Sally Richmond also reviewed various portions of the text and provided constructive criticism and useful ideas. Dr. Pamela Vercellone-Smith offered some of the information on software evolution and reviewed various portions of the text. My friend, Tom Costello, who is an expert in Open Source software, pro- vided a great deal of information for and a review of Chapter 8. Another friend, Will Gilreath, reviewed early drafts of the manuscript and provided many insights and some of the sample code. Gary Birkmaier, my brother-in-law and principal software engineer with 25+ year’s experience, reviewed and commented on the manuscript. Chris Garrell, a former graduate student, provided the software require- ments and design documents in Appendices A, B, and C. Chris is a registered professional engineer (civil) and also a holds a Master’s degree in software engineering (the perfect combination for someone designing a wet well control system). He also reviewed and provided feedback on the finished manuscript. Ken Sassa, another graduate student, provided the software archeology examples. Over the years, many students in my graduate software engineering courses (many of them with degrees in various engineering disciplines) have contributed ideas that have influenced this book. I wish to thank them collectively. I must also give thanks to my long-suffering wife and children for allowing me to work on this book when they would have preferred my undivided attention. Finally, I would like to thank the wonderful folks at Taylor & Francis, particularly my editor, Allison Taub; Publisher, Nora Konopka; and my friends in the production department, particularly Helena Redshaw.