This Book Doesn't Tell You How to Write Faster Code, Or How to Write Code with Fewer Memory Leaks, Or Even How to Debug Code at All
Total Page:16
File Type:pdf, Size:1020Kb
Practical Development Environments By Matthew B. Doar ............................................... Publisher: O'Reilly Pub Date: September 2005 ISBN: 0-596-00796-5 Pages: 328 Table of Contents | Index This book doesn't tell you how to write faster code, or how to write code with fewer memory leaks, or even how to debug code at all. What it does tell you is how to build your product in better ways, how to keep track of the code that you write, and how to track the bugs in your code. Plus some more things you'll wish you had known before starting a project. Practical Development Environments is a guide, a collection of advice about real development environments for small to medium-sized projects and groups. Each of the chapters considers a different kind of tool - tools for tracking versions of files, build tools, testing tools, bug-tracking tools, tools for creating documentation, and tools for creating packaged releases. Each chapter discusses what you should look for in that kind of tool and what to avoid, and also describes some good ideas, bad ideas, and annoying experiences for each area. Specific instances of each type of tool are described in enough detail so that you can decide which ones you want to investigate further. Developers want to write code, not maintain makefiles. Writers want to write content instead of manage templates. IT provides machines, but doesn't have time to maintain all the different tools. Managers want the product to move smoothly from development to release, and are interested in tools to help this happen more often. Whether as a full-time position or just because they are helpful, all projects have toolsmiths: making choices about tools, installing them, and then maintaining the tools that everyone else depends upon. This book is especially for everyone who ends up being a toolsmith for his or her group. Practical Development Environments By Matthew B. Doar ............................................... Publisher: O'Reilly Pub Date: September 2005 ISBN: 0-596-00796-5 Pages: 328 Table of Contents | Index Dedication Copyright Preface What This Book Is About What This Book Is Not About Who Should Read This Book What's Inside Style Conventions Using Code Examples Safari Enabled Comments and Questions Acknowledgments Chapter 1. Introduction Section 1.1. Developing Software Products Section 1.2. Open and Closed Software Development Section 1.3. Dirty Secrets of Software Projects Section 1.4. What Does "Practical" Mean? Section 1.5. A Personal Tools Quiz Chapter 2. Project Basics Section 2.1. The Parts of a Project Section 2.2. Software Configuration Management Section 2.3. Building Software Section 2.4. Testing Software Section 2.5. Tracking Bugs Section 2.6. Writing Documentation Section 2.7. Releasing Products Section 2.8. Maintenance Section 2.9. Recommended Tools Chapter 3. Project Concepts Section 3.1. Preconstructed Development Environments Section 3.2. Why Integration Is Helpful Section 3.3. Why Automation Is Vital Section 3.4. Automation Environments Section 3.5. Labeling Builds Section 3.6. Naming Projects and Machines Section 3.7. Choosing New Tools Section 3.8. Internationalization and Localization Section 3.9. Authentication, Authorization, and Accounting Chapter 4. Software Configuration Management Section 4.1. Why Do I Need SCM? Section 4.2. What SCM Is and Is Not Section 4.3. Drawbacks of SCM Section 4.4. A Typical Day's Work with SCM Section 4.5. SCM Annoyances Section 4.6. SCM Tools Section 4.7. Comparison of SCM Tools Section 4.8. Wider Uses of SCM Section 4.9. Checklist Chapter 5. Building Software Section 5.1. How Software Gets Built Section 5.2. Build States: Virgin, Up-to-date, Changed, Interrupted, Clean Section 5.3. Build Dependencies Section 5.4. Common Build Problems Section 5.5. Build Tools Section 5.6. Comparison of Build Tools Section 5.7. Changing Your Build Tool Section 5.8. Checklist Chapter 6. Testing Software Section 6.1. Different Kinds of Tests Section 6.2. Why Automate Your Tests? Section 6.3. Evaluating Test Environments Section 6.4. Test Environments Section 6.5. Types of Test Tools Section 6.6. The Difficult Parts of Testing Section 6.7. Checklist Chapter 7. Tracking Bugs Section 7.1. Tool Requirements Section 7.2. Bug Tracking Tools Section 7.3. Bug Tracking Annoyances Section 7.4. Integrating with SCM Tools Section 7.5. Checklist Chapter 8. Documentation Environments Section 8.1. Technical Documentation Section 8.2. Documents and SCM Section 8.3. File Formats for Documentation Section 8.4. Documentation Environments Section 8.5. More File Formats Section 8.6. Automated Production of Documentation Section 8.7. Bad Ideas for Documentation Section 8.8. Internal Project Documentation Section 8.9. Checklist Chapter 9. Releasing Products Section 9.1. Overview Section 9.2. Before the Release Section 9.3. Creating the Release Section 9.4. Packaging Formats Section 9.5. Installation Tools Section 9.6. Installation IrritationsShip Happens! Section 9.7. After the Release Section 9.8. Checklist Chapter 10. Maintenance Section 10.1. Maintaining an Environment Section 10.2. What Is Product Maintenance? Section 10.3. Product Maintenance Tasks Section 10.4. Product Maintenance and Development Environments Section 10.5. Cleaning Up Your Environment Section 10.6. Checklist Chapter 11. Project Communication Section 11.1. Tools for Communication Section 11.2. A Project Web Site Section 11.3. Different Areas for the Project Web Site Section 11.4. Creating the Web Site Section 11.5. Avoiding Content Rot Chapter 12. Politics and People Section 12.1. The Role of the Toolsmith Section 12.2. When Good Projects Go Bad Section 12.3. Awkward People Section 12.4. Twisted Communications Section 12.5. Commit Rights Section 12.6. Automation Discipline Section 12.7. What Do Developers Really Want? Section 12.8. An Upbeat Ending Appendix A. How Tools Scale Section A.1. Scaling of Compilers Section A.2. Scaling of Build Tools Appendix B. Resources Section B.1. Online Section B.2. Magazines Section B.3. Books Section B.4. Conferences Section B.5. University and College Courses Colophon Index Dedication To all the toolsmiths who haven't yet found a name for what they do Copyright © 2005 O'Reilly Media, Inc. All rights reserved. Printed in the United States of America. Published by O'Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O'Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (http://safari.oreilly.com). For more information, contact our corporate/institutional sales department: (800) 998-9938 or [email protected]. The O'Reilly logo is a registered trademark of O'Reilly Media, Inc. The Theory in Practice series designations, Practical Development Environments, and related trade dress are trademarks of O'Reilly Media, Inc. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and O'Reilly Media, Inc. was aware of a trademark claim, the designations have been printed in caps or initial caps. While every precaution has been taken in the preparation of this book, the publisher and authors assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. Preface A good technical environment for developing your software can make or break a project, or even a company. What goes into a good technical development environment? This book contains helpful answers to that question and describes some of the current tools that can help provide a good software development environment. Areas covered include: version control, build tools, testing tools, bug tracking systems, documentation, release, and maintenance. What This Book Is About A development environment is the whole collection of tools that people use to create software, not just a few tools that are specific to a particular programming language. Examples of these tools are version control tools such as CVS, build tools such as make, and bug tracking tools such as Bugzilla. Practical development environments are the environments that are really used by successful projects, and are consequently reused for many different projects. Just as there is a wide range of productivity for different programmers, there is a wide range of productivity for different projects, and that's often due to differences in development environments. This book is a guidea collection of advice about real development environments. Each of the core chapters considers a different kind of tool: tools for tracking versions of files, build tools, testing tools, bug tracking tools, and tools for creating documentation. Each chapter discusses what you should look for in each kind of tool and what to avoid, and also describes some good ideas, bad ideas, and annoyances for each development activity. Specific instances of each type of tool are described in detail so that you can decide which ones you want to investigate further. The tools described in this book are mostly intended for small to medium-sized projects, up to around 200 developers. However, the concepts and concerns described in each chapter are equally valid for large projects. One of the key ideas throughout this book is to automate wherever possible, and this becomes even more important as a project grows. Finally, this book recognizes that some progress is better than none, and encourages you to take even the smallest steps to improve your own development environment. What This Book Is Not About This book is not about a set of abstract concepts, patterns, or a single way of doing things. It is a collection of practical, commonsense advicethe kind of ideas that you wish you had thought of before the project began.