Dooley US $49.99 Shelve in Software Engineering/ Software Development User level: Beginning–Advanced www.apress.com SOURCE CODE ONLINE BOOKS FOR PROFESSIONALS BY PROFESSIONALS ® Software Development and Professional Practice Make your code work harder! Software Development and Professional Practice will show you how you can improve your coding practices and write better programs. It teaches you: • Characteristics of good programs • Coding standards and how to apply them to real coding • Debugging, unit testing, and modularity • Object-oriented programming (OOP) design principles and great coding Software Development and Professional Practice will help you to understand the prin- ciples of good software design and, in turn, how to write great code. You’ll learn: • What methods and processes are available to help you design great software • How to apply software engineering principles to your daily coding practice • How to apply the principles you’ve learned to specific and real-world coding problems • How to construct professional standard code Software Development and Professional Practice covers many of the topics described for the ACM Computing Curricula 2001 course C292c Software Development and Professional Practice. Making it both an ideal textbook and authoritative manual for the working professional. RELATED www.it-ebooks.info For your convenience Apress has placed some of the front matter material after the index. Please use the Bookmarks and Contents at a Glance links to access them. www.it-ebooks.info Software Development and Professional Practice John Dooley www.it-ebooks.info Software Development and Professional Practice Copyright © 2011 by John Dooley All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher. ISBN-13 (pbk): 978-1-4302-3801-0 ISBN-13 (electronic): 978-1-4302-3802-7 Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1 Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. President and Publisher: Paul Manning Lead Editor: Dominic Shakeshaft Technical Reviewer: John Zukowski Editorial Board: Steve Anglin, Mark Beckner, Ewan Buckingham, Gary Cornell, Jonathan Gennick, Jonathan Hassell, Michelle Lowman, James Markham, Matthew Moodie, Jeff Olson, Jeffrey Pepper, Frank Pohlmann, Douglas Pundick, Ben Renow-Clarke, Dominic Shakeshaft, Matt Wade, Tom Welsh Coordinating Editor: Adam Heath Copy Editor: Tracy Brown Compositor: Bytheway Publishing Services Indexer: Toma Mulligan Artist: April Milne Cover Designer: Anna Ishchenko Distributed to the book trade worldwide by Springer Science+Business Media, LLC., 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer- sbm.com, or visit www.springeronline.com. For information on translations, please e-mail rights@apress.com, or visit www.apress.com. Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Special Bulk Sales–eBook Licensing web page at www.apress.com/info/bulksales. The information in this book is distributed on an “as is” basis, without warranty. Although every precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work. The source code for this book is available to readers at www.apress.com. You will need to answer questions pertaining to this book in order to successfully download the code. www.it-ebooks.info For Diane, wh o is always there; for Patrick, the best son a guy could have; and for Margaret Teresa Hume Dooley (1926–1976), the first one is for you, Mom. www.it-ebooks.info iv Contents at a Glance About the Author xiv About the Technical Reviewer xv Acknowledgments xvi Preface xvii Chapter 1: Introduction to Software Development 1 Chapter 2: Process Life Cycle Models 7 Chapter 3: Project Management Essentials 27 Chapter 4: Requirements 37 Chapter 5: Software Architecture 47 Chapter 6: Design Principles 59 Chapter 7: Structured Design 71 Chapter 8: Object-Oriented Analysis and Design—An Overview 87 Chapter 9: Object-Oriented Analysis and Design 99 Chapter 10: Object-Oriented Design Principles 115 Chapter 11: Design Patterns 137 Chapter 12: Code Construction 159 Chapter 13: Debugging 181 Chapter 14: Unit Testing 193 Chapter 15: Walkthroughs, Code Reviews, and Inspections 209 Chapter 16: Wrapping It all Up 221 Index 227 www.it-ebooks.info v Contents About the Author xiv About the Technical Reviewer xv Acknowledgments xvi Preface xvii Chapter 1: Introduction to Software Development 1 What We’re Doing 2 So, How to Develop Software? 2 Conclusion 4 References 5 Chapter 2: Process Life Cycle Models 7 A Model That’s not a Model At All: Code and Fix 8 Cruising over the Waterfall 9 Backing Up the Waterfall 11 Loops Are Your Friend 12 Evolving the Incremental Model 13 Agile Is as Agile Does 14 eXtreme Programming (XP) 15 XP Overview 15 XP Motivation 16 The Four Variables 16 www.it-ebooks.info CONTENTS vi The Four Values 17 The 15 Principles 17 The Four Basic Activities 19 Implementing XP: The 12 Practices 20 The XP Life Cycle 22 Scrum, mate 23 Conclusion 25 References 25 Chapter 3: Project Management Essentials 27 Project Planning 27 Project Organization 28 Risk Analysis 28 Resource Requirements 30 Work Breakdown and Task Estimates 31 Project Schedule 31 Project Oversight 34 Status Reviews and Presentations 34 Defects 35 The Post-Mortem 35 Conclusion 36 References 36 Chapter 4: Requirements 37 What Types of Requirements Are We Talking About Here? 37 Functional Specification? 38 But I Don’t Like Writing! 38 www.it-ebooks.info CONTENTS vii That Natural Language Thing 38 Outline of a Functional Specification 39 Overview 39 Disclaimer 39 Author’s Name 39 Scenarios of Typical Usage 40 Detailed Screen-By-Screen Specifications 40 Non-requirements 40 Open Issues 41 Design and Feature Ideas 41 Backlog 41 One More Thing 42 Types of Requirements 42 User Requirements 42 Domain Requirements 42 Non-functional Requirements 43 Non-requirements 43 Requirements Digging 43 Why Requirements Digging Is Hard 44 Analyzing the Requirements 45 Conclusion 46 References 46 Chapter 5: Software Architecture 47 General Architectural Patterns 48 Pipe-and-filter Architecture 48 www.it-ebooks.info CONTENTS viii An Object-Oriented Architectural Pattern 49 An MVC Example: Let’s Hunt! 51 The Problem 51 Model 52 View 52 Controller 53 Model 53 The Client-Server Architectural Pattern 53 The Layered Approach 54 The Main Program: Subroutine Architectural Pattern 56 Conclusion 57 References 58 Chapter 6: Design Principles 59 The Design Process 62 Desirable Design Characteristics (Things Your Design Should Favor) 63 Design Heuristics 64 Designers and Creativity 66 Conclusion 67 References 68 Chapter 7: Structured Design 71 Structured Programming 71 Stepwise Refinement 72 Example of Stepwise Refinement: The Eight-Queens Problem 73 Modular Decomposition 79 Example: Keyword in Context: Indexes for You and Me 80 www.it-ebooks.info [...]... book called Software Development and Professional Practice? Why isn’t it called All About Programming or Software Engineering? After all, isn’t that what software development is? Well, no Programming is a part of software development, but it’s certainly not all of it Likewise, software development is a part of software engineering, but it’s not all of it Here’s the definition of software development. .. about estimation and scheduling The key to iterative development is “live a balanced life – learn some and think some and draw and paint and sing and dance and play and work every day some,”6 or in the software development world, analyze some and design some and code some and test some every day We’ll revisit this idea when we talk about the agile development models Evolving the Incremental Model 7... about professional practice, the ethics and the responsibilities of being a software developer, social issues, privacy, how to write secure and robust code, and the like In short, those fuzzy other things one needs in order to be a professional software developer This book covers many of the topics described for the ACM Computing Curricula 2001 course C292c Software Development and Professional Practice. .. introduction into what software development is all about and what you need to do to write great code It has its own perspective, but that’s a perspective based on 20 years writing code professionally and another 16 years trying to figure out how to teach others to do it Despite the fact that software development is only part of software engineering, software development is the heart of every software project... baseline building and scheduling, managing people, and several other things Software development is the fun part of software engineering So software development is a narrowing of the focus of software engineering to just that part concerned with the creation of the actual software And it’s a broadening of the focus of programming to include analysis, design and release issues 1 Brooks, Frederick “No Silver... software development, but it’s not the whole thing Well, then, isn’t it software engineering? Again, no Software engineering also involves a process and includes software development, but it also includes the entire management side of creating a computer program that people will use Software engineering includes project management, configuration management, scheduling and estimation, baseline building and. .. You’ll begin to understand project management, know some metrics, know how to review work products, and understand configuration management I’ll not cover everything in software development by a long stretch, and we’ll only be giving a cursory look at the management side of software engineering, but you’ll be in a much better position to visualize, design, implement, and test software of many sizes,... how to design and implement programs that solve specific problems By the way, there’s at least one person (besides me) who thinks software development is not an engineering discipline I’m referring to Alistair Cockburn, and you can read his paper, “The End of Software Engineering and the Start of Economic-Cooperative Gaming” at http://alistair.cockburn.us/The+end+of +software+ engineering +and+ the+start+of+economiccooperative+gaming... principles to the development of software. ” What are “engineering principles?” Well, first, all engineering efforts follow a defined process So we’ll be spending a bit of time talking about how you run a software development project and what phases there are to a project All engineering work has a basis in the application of science and mathematics to real-world problems So does software development As... new development tools (say that new web development framework) you’ll uncover limitations you weren’t aware of and side-effects that cause you to have to learn, for example, three other tools to understand them (That web development tool is Python based, requires a specific relational database system to run, and needs a particular configuration of Apache to work correctly.) Conclusion Software development . construct professional standard code Software Development and Professional Practice covers many of the topics described for the ACM Computing Curricula 2001 course C292c Software Development and Professional. in Software Engineering/ Software Development User level: Beginning–Advanced www.apress.com SOURCE CODE ONLINE BOOKS FOR PROFESSIONALS BY PROFESSIONALS ® Software Development and Professional Practice Make. Coding standards and how to apply them to real coding • Debugging, unit testing, and modularity • Object-oriented programming (OOP) design principles and great coding Software Development and Professional