You are previewing Build Master, The: Microsoft’s Software Configuration Management Best Practices.
O'Reilly logo
Build Master, The: Microsoft’s Software Configuration Management Best Practices

Book Description

"Wow, what can I say? Chapter 4, 'The Build Lab and Personnel,' by itself is enough justification to purchase the book! Vince is obviously a 'Dirty Finger Nails' build meister and there is a lot we can all learn from how he got them dirty! There are so many gems of wisdom throughout this book it's hard to know where to start describing them! It starts where SCM should start, at the end, and works its way forward. This book is a perfect complement to the 'Follow the Files' approach to SCM that I espouse. I will recommend that every software lead and software configuration management person I work with be required to read this book!"

—Bob Ventimiglia, autonomic logistics software configuration manager, Lockheed Martin Aeronautics

"The Build Master contains some truly new information; most of the chapters discuss points that many people in the industry don't have a full understanding of and need to know. It's written in a way that is easy to read and will help a reader fill holes in their vision regarding software build management. I especially liked Vince's use of Microsoft stories to make his points throughout the book. I will purchase the book and make certain chapters mandatory reading for my build manager consultants."

—Steve Konieczka, SCM consultant

"Vince does a great job of providing the details of an actual working build process. It can be very useful for those who must tackle this task within their own organization. Also the 'Microsoft Notes' found throughout the book provide a very keen insight into the workings of Microsoft. This alone is worth purchasing this book."

—Mario E. Moreira, author of Software Configuration Management Implementation Roadmap and columnist at CM Crossroads

"Software configuration management professionals will find this book presents practical ideas for managing code throughout the software development and deployment lifecycles. Drawing on lessons learned, the author provides real-world examples and solutions to help you avoid the traps and pitfalls common in today's environments that require advanced and elegant software controls."

—Sean W. Sides, senior technical configuration manager, Great-West Healthcare Information Systems

"If you think compiling your application is a build process, then this book is for you. Vince gives us a real look at the build process. With his extensive experience in the area at Microsoft, a reader will get a look in at the Microsoft machine and also how a mature build process should work. This is a must read for anyone doing serious software development."

—Jon Box, Microsoft regional director, ProTech Systems Group

"Did you ever wonder how Microsoft manages to ship increasingly complex software? In The Build Master, specialist Vince Maraia provides an insider's look."

—Bernard Vander Beken, software developer, jawn.net

"This book offers an interesting look into how Microsoft manages internal development of large projects and provides excellent insight into the kinds of build/SCM things you can do for your large-scale projects."

—Lance Johnston, vice president of Software Development, SCM Labs, Inc.

"The Build Master provides an interesting insight into how large software systems are built at Microsoft covering the set up of their build labs and the current and future tools used. The sections on security, globalization, and versioning were quite helpful as these areas tend to be overlooked."

—Chris Brown, ThoughtWorks, consultant

"The Build Master is a great read. Managing builds is crucial to the profitable delivery of high-quality software. Until now, the build process has been one of the least-understood stages of the entire development lifecycle. This book helps you implement a smoother, faster, more effective build process and use it to deliver better software."

—Robert J. Shimonski, Networking and Security Expert, http://www.rsnetworks.net

The first best-practice, start-to-finish guide for the software build process

Managing builds is crucial to the profitable delivery of high-quality software; however, the build process has been one of the least-understood stages of the entire development lifecycle. Now, one of Microsoft's leading software build experts introduces step-by-step best practices for maximizing the reliability, effectiveness, timeliness, quality, and security of every build you create.

Drawing on his extensive experience working with Microsoft's enterprise and development customers, Vincent Maraia covers all facets of the build process—introducing techniques that will work on any platform, on projects of any size. Maraia places software builds in context, showing how they integrate with configuration management, setup, and even customer support. Coverage includes

  • How Microsoft manages builds: process flows, check-in windows, reporting status, and more

  • Understanding developer and project builds, pre- and post-build steps, clean builds, incremental builds, continuous integration builds, and more

  • Choosing the right build tools for your projects

  • Configuring source trees and establishing your build environment—introducing Virtual Build Labs (VBLs)

  • Planning builds for multiple-site development projects or teams

  • Determining what should (and shouldn't) be kept under source control

  • Managing versioning, including build, file, and .NET assembly versions

  • Using automation as effectively as possible

  • Securing builds: a four layer approach—physical, tracking sources, binary/release bits assurance, and beyond

  • Builds powerfully impact every software professional: developers, architects, managers, project leaders, configuration specialists, testers, and release managers. Whatever your role, this book will help you implement a smoother, faster, more effective build process—and use it to deliver better software.

    © Copyright Pearson Education. All rights reserved.

    Table of Contents

    1. Copyright
      1. Dedication
    2. Praise for The Build Master
    3. Foreword
    4. Preface
      1. What This Book Is About
      2. Defining Software Configuration Management
      3. Who Should Read This Book
        1. Information Technology (IT) Managers
        2. Software Development and Testing Managers
        3. Build Teams and Build Managers
        4. Technical Project and Product Managers
        5. Anyone Interested in a Microsoft Case Study
      4. Assumptions Made on the Background of People Reading This Book
      5. How This Book Is Organized
        1. Contents at a Glance
        2. The Story
      6. Get Stuck or Get Results. Period.
      7. Outsourcing
      8. What This Book Is Not About: Software Factories
      9. Updates and Contact Information
    5. About the Author
    6. In Appreciation and Acknowledgment
    7. Introduction
      1. What “NT” Really Stands For
      2. How MSN Builds Code
    8. 1. Defining a Build
      1. The Two Types of Builds: Developers and Project
      2. Building from the Inside Out
      3. More Important Build Definitions
      4. How Your Product Should Flow
        1. Software Development Flow
        2. Some Work Item Field Definitions
        3. WAR or Ship Meeting
        4. Release to Staging Servers
        5. Important Definitions
          1. Solution Files
          2. Project
      5. Microsoft Solution Framework
      6. Summary
      7. Recommendations
    9. 2. Source Tree Configuration for Multiple Sites and Parallel (Multi-Version) Development Work
      1. Definitions
      2. How This Process Works: An Example Using VSS
        1. Golden Tree (Mainline “Pristine” Build) Setup
        2. VBLs and Multisite Development
        3. What Should Be Kept Under Source Control
      3. Hatteras: A Look Into the Future of SCC at Microsoft
        1. Merging Functionality in TFSC
        2. How TFSC Addresses the Scenarios
        3. Branching in TFSC
          1. Release Branching
          2. Promotion Modeling
          3. Developer Isolation
          4. Label Branching
          5. Component Branching
          6. Partial Branching
        4. Identifying Branches (Configurations)
        5. More Scenarios
          1. Shelving Current Changes
          2. Offline Checkout/Check-In
      4. Summary
      5. Recommendations
    10. 3. Daily, Not Nightly, Builds
      1. The Importance of a Successful Daily Build
        1. How to Successfully Release Builds and Police Build Breaks
          1. Build Breaks Always Have the Highest Priority for Everyone
          2. Enforce All Build Policies on Reviews
      2. What Are You Building Every Day?
      3. Summary
      4. Recommendations
    11. 4. The Build Lab and Personnel
      1. The Need for a Build Lab
      2. Build Lab Rules
      3. Hardware Configuration
        1. Hardware Requirements
        2. Set Up the Software
        3. Set Up the Operating System
        4. Set Up the Applications
        5. Set Up the Build Environment for the Build Machines
      4. Build Personnel
      5. Summary
      6. Recommendations
    12. 5. Build Tools and Technologies
      1. First, Every Build Needs a Script
      2. Binary Generating Tools—Also Referred to Loosely as “Build Tools”
      3. “You Provide the Nose; We Provide the Grindstone”
        1. Make or NMake
        2. ANT or NANT
      4. In Steps the 800-Pound Gorilla!
      5. XML Is the Here, the Now, and the Future
      6. What Build Tool Should You Be Using and When?
      7. Summary
      8. Recommendations
    13. 6. SNAP Builds—aka Integration Builds
      1. What Is a SNAP Build?
      2. When to Use SNAP Builds
      3. How SNAP Works
      4. Sample Machine Configuration
      5. Operations Staff
      6. Managing Throughput
      7. Summary
      8. Recommendations
    14. 7. The Build Environment
      1. Setting Up the Environment
      2. Setting Up a Developer or Tester Machine
      3. A Makefile Example That Explains How This Works
      4. Summary
      5. Recommendations
    15. 8. Versioning
      1. Why Worry About Versioning?
      2. File Versioning
      3. Build Number
      4. Source Code Control Trees
      5. Should There Be Other Fields in the File Version Number?
      6. DLL or Executable Versions for .NET (Assembly Versions)
      7. How Versioning Affects Setup
        1. Install the Correct Version of a Component for the Operating System and Locale
        2. Write Components to the Right Places
        3. Do Not Install Older Components Over Newer Ones
        4. ”Copy on Reboot” If Component Is in Use
        5. Register Components Correctly; Take Security into Account
        6. Copy Any Component That You Overwrite
        7. Redistribute a Self-Extracting EXE Rather Than Raw Components
        8. Test Setup on Real-World Systems
      8. Even Installing Correctly Does Not Always Work
      9. Summary
      10. Recommendations
    16. 9. Build Security
      1. Physical Security for the Build, Source, and Release Lab
      2. Tracking Source Changes (All Check-Ins)—The Build Process
      3. Binary/Release Bits Assurance
      4. IT Infrastructure
      5. Want More Security?
      6. Summary
      7. Recommendations
    17. 10. Building Managed Code
      1. The Official Definition of Managed Code
      2. What Is the CLR, and How Does It Relate to Managed Code?
      3. Managed Execution Process
      4. The Definition of Assemblies As It Pertains to the .NET Framework
      5. Delay Signing and When to Use It
        1. The Problem with This Command
        2. Protecting Yourself from the Security Hole You Just Created
      6. One Solution or Many Solution Files?
      7. Summary
      8. Recommendations
    18. 11. International Builds
      1. Important Concepts and Definitions
      2. Method 1: Internationally Ignorant Code
      3. Method 2: Locale-Dependent Source
      4. Method 3: Single Worldwide Source
      5. Method 4: Single Worldwide Binary
      6. USE Unicode
      7. Summary
      8. Recommendations
    19. 12. Build Verification Tests and Smoke Tests
      1. Smoke Test
      2. Build Verification Tests
        1. Define the Scope or Span of the BVTs
        2. BVT States
      3. Summary
      4. Recommendations
    20. 13. Building Setup
      1. The Basic Definitions
      2. Setup Is Not a Testing Tool
      3. Summary
      4. Recommendations
    21. 14. Ship It!
      1. Software Release at Microsoft
      2. Summary
      3. Recommendations
    22. 15. Customer Service and Support
      1. Goals of Support
      2. How Support Works and Communicates with the Product Teams
      3. Summary
      4. Recommendations
    23. 16. Managing Hotfixes and Service Packs
      1. Introduction to “Release Management with VSS”
        1. Tools
        2. Versioning
          1. Versioning in .NET Code
          2. Versioning in Source Control
      2. Release Management: General Scenarios
        1. Primary Releases
          1. Share and Pin
          2. Branch
          3. Label
          4. Clone
        2. Patch Releases (Service Packs)
          1. Merge
          2. Other Approaches
        3. Parallel Releases
      3. Summary
      4. Recommendations
    24. 17. 7 Suggestions to Change Your Corporate or Group Culture
      1. What Is Corporate Culture?
      2. It Starts at the Top
      3. When All Else Fails...
      4. Don’t Go Gipper...
      5. Nasa Columbia and Challenger Disasters: When Management Pulls Rank and There Is a Big Disconnect Between the Manager’s View and the Engineer’s View
        1. Background
        2. What Can Be Learned
        3. A Look at the Organization
        4. Conclusion of Shuttle Investigations
      6. Summary
      7. Recommendations
    25. 18. Future Build Tools from Microsoft
      1. MSBuild
        1. Basic MSBuild Definitions
      2. Visual Studio Team System
      3. Visual Studio Team Build
      4. The Microsoft Shell (MSH, or Monad)
      5. Summary
      6. Recommendations
    26. A. Embedded Builds
      1. Nuts and Bolts of the CE Build System
    27. B. Extreme Programming
      1. Extreme Programming Fundamentals
      2. Test-Driven Development and Refactoring
      3. An Extreme Programming Scenario
      4. Microsoft Case Study
      5. References and Further Reading
    28. C. Testing Guide
      1. Test Guide: A Compilation from the Developer Division at Microsoft
        1. File Tests: Does Your Code Rely on Files?
        2. File Paths: Are File Paths Ever Given As Input to Your Program?
        3. Input from Registry: Is the Registry Used to Store or Retrieve Information?
        4. Strings: Do You Input Strings into Your Application?
        5. Numeric Values: Does Your Program Take Numeric Values for Input?
        6. What Inputs Does Your Web Application Take?
        7. Network Connectivity Tests: Are You Connected to a LAN or WAN?
        8. General Advice
        9. References
        10. Tools
    29. D. Debug Symbols
      1. The Windows Scenario That You May Run into with Your Applications
    30. Final Thoughts