Continuous Integration

Improving Software Quality and Reducing Risk

Paul M. Duvall, Steve M. Matyas III, Andrew Glover

Publisher: Addison-Wesley, 2007, 283 pages

ISBN: 978-0-321-33638-5

Keywords: DevOps

Last modified: July 30, 2021, 8:41 p.m.

For any software developer who has spent days in integration hell, cobbling together myriad software components,Continuous Integration: Improving Software Quality and Reducing Risk illustrates how to transform integration from a necessary evil into an everyday part of the development process. The key, as the authors show, is to integrate regularly and often using continuous integration (CI) practices and techniques.

The authors first examine the concept of CI and its practices from the ground up and then move on to explore other effective processes performed by CI systems, such as database integration, testing, inspection, deployment, and feedback. Through more than forty CI-related practices using application examples in different languages, readers learn that CI leads to more rapid software development, produces deployable software at every step in the development lifecycle, and reduces the time between defect introduction and detection, saving time and lowering costs. With successful implementation of CI, developers reduce risks and repetitive manual processes, and teams receive better project visibility.

The book covers

  • How to make integration a “non-event” on your software development projects
  • How to reduce the amount of repetitive processes you perform when building your software
  • Practices and techniques for using CI effectively with your teams
  • Reducing the risks of late defect discovery, low-quality software, lack of visibility, and lack of deployable software
  • Assessments of different CI servers and related tools on the market
  1. A Background on CI: Principles and Practices
    1. Getting Started
      • Build Software at Every Change
        • Developer
        • Version Control Repository
        • CI Server
        • Build Script
        • Feedback Mechanism
        • Integration Build Machine
      • Features of CI
        • Source Code Compilation
        • Database Integration
        • Testing
        • Inspection
        • Deployment
        • Documentation and Feedback
      • Summary
      • Questions
    2. Introducing Continuous Integration
      • A Day in the Life of CI
      • What Is the Value of CI?
        • Reduce Risks
        • Reduce Repetitive Processes
        • Generate Deployable Software
        • Enable Better Project Visibility
        • Establish Greater Product Confidence
      • What Prevents Teams from Using CI?
      • How Do I Get to "Continuous" Integration?
      • When and How Should a Project Implement CI?
      • The Evolution of Integration
      • How Does CI Complement Other Development Practices?
      • How Long Does CI Take to Set Up?
      • CI and You
      • Commit Code Frequently
      • Don't Commit Broken Code
      • Fix Broken Builds Immediately
      • Write Automated Developer Tests
      • All Tests and Inspections Must Pass
      • Run Private Builds
      • Avoid Getting Broken Code
      • Summary
      • Questions
    3. Reducing Risks Using CI
      • Risk: Lack of Deployable Software
        • Scenario: "It Works on My Machine"
          • Solution
        • Scenario: Synching with the Database
          • Solution
        • Scenario: The Missing Click
          • Solution
      • Risk: Late Discovery of Defects
        • Scenario: Regression Testing
          • Solution
        • Scenario: Test Coverage
          • Solution
      • Risk: Lack of Project Visibility
        • Scenario: "Did You Get the Memo?"
          • Solution
        • Scenario: Inability to Visualize Software
          • Solution
      • Risk: Low-Quality Software
        • Scenario: Coding Standard Adherence
          • Solution
        • Scenario: Architectural Adherence
          • Solution
        • Scenario: Duplicate Code
          • Solution
      • Summary
      • Questions
    4. Building Software at Every Change
      • Automate Builds
      • Perform Single Command Builds
      • Separate Build Scripts from Your IDE
      • Centralize Software Assets
      • Create a Consistent Directory Structure
      • Fail Builds Fast
      • Build for Any Environment
      • Build Types and Mechanisms
        • Build Types
          • Private Build
          • Integration Build
          • Release Build
        • Build Mechanisms
        • Triggering Builds
      • Use a Dedicated Integration Build Machine
      • Use a CI Server
      • Run Manual Integration Builds
      • Run Fast Builds
        • Gather Build Metrics
        • Analyze Build Metrics
        • Choose and Implement Improvements
      • Use a Dedicated Integration Build Machine
      • Increase Integration Build Machine(s) Hardware Capacity
      • Improve Test Performance
      • Stage Builds
          • Examine Infrastructure
          • Optimize the Build Process
          • Build System Components Separately
          • Improve Software Inspection Performance
          • Perform Distributed Integration Builds
        • Reevaluate
      • How Will This Work for You?
        • "My project has seven billion lines of code. How is this going to work for me?"
        • "I have a legacy application, so how will this work for me?"
        • "What if our source code is in multiple version control repositories?"
        • "Our project is separated geographically, so how can we practice CI?"
        • "My integration builds are taking too long!"
        • "We frequently get build failures. Are we doing something wrong?"
        • "We can't afford a separate build machine."
        • "Our software is too complex; we have to do things manually" or "No — we have all sorts of stuff going on."
        • "Our software uses a version control repository, but we need to support multiple versions using branching. How will this work?"
      • Summary
      • Questions
  2. Creating a Full-Featured CI System
    1. Continuous Database Integration
      • Automate Database Integration
        • Creating Your Database
        • Manipulating Your Database
        • Creating a Build Database Orchestration Script
      • Use a Local Database Sandbox
      • Use a Version Control Repository to Share Database Assets
      • Continuous Database Integration
      • Give Developers the Capability to Modify the Database
      • The Team Focuses Together on Fixing Broken Builds
      • Make the DBA Part of the Development Team
      • Database Integration and the Integrate Button
        • Testing
        • Inspection
        • Deployment
        • Feedback and Documentation
      • Summary
      • Questions
    2. Continuous Testing
      • Automate Unit Tests
      • Automate Component Tests
      • Automate System Tests
      • Automate Functional Tests
      • Categorize Developer Tests
      • Run Faster Tests First
        • Unit Tests
        • Component Tests
        • System Tests
      • Write Tests for Defects
      • Make Component Tests Repeatable
      • Limit Test Cases to One Assert
      • Summary
      • Questions
    3. Continuous Inspection
      • What Is the Difference between Inspection and Testing?
      • How Often Should You Run Inspectors?
      • Code Metrics: A History
      • Reduce Code Complexity
      • Perform Design Reviews Continuously
      • Maintain Organizational Standards with Code Audits
      • Reduce Duplicate Code
        • Using PMD-CPD
        • Using Simian
      • Assess Code Coverage
      • Evaluate Code Quality Continuously
        • Coverage Frequency
        • Coverage and Performance
      • Summary
      • Questions
    4. Continuous Deployment
      • Release Working Software Any Time, Any Place
      • Label a Repository's Assets
      • Produce a Clean Environment
      • Label Each Build
      • Run All Tests
      • Create Build Feedback Reports
      • Possess Capability to Roll Back Release
      • Summary
      • Questions
    5. Continuous Feedback
      • All the Right Stuff
        • The Right Information
        • The Right People
        • The Right Time
        • The Right Way
      • Use Continuous Feedback Mechanisms
        • E-mail
        • SMS (Text Messages)
        • Ambient Orb and X10 Devices
        • Ambient Orb
        • X10 Devices
        • Windows Taskbar
        • Sounds
        • Wide-Screen Monitors
      • Summary
      • Questions
      • The Future of CI
  1. CI Resources
    • Continuous Integration Web Sites/Articles
      • Automation for the people: Continuous feedback
      • Automation for the people: Continuous Inspection
      • Automation for the people: Remove the smell from your build scripts
      • Continuous Integration
      • Continuous Integration
      • Daily Build and Smoke Test
      • IntegrateButton.com
      • Realizing continuous integration
    • CI Tools/Product Resources
      • AnthillPro
      • Apache Continuum
      • Bamboo
      • BuildForge
      • Continuous Integration Server Matrix
      • CruiseControl
      • CruiseControl.NET
      • Draco.NET
      • Gauntlet
      • Luntbuild
      • ParaBuild
      • PMEase QuickBuild
      • Sin
      • Other CI Tools and Product Resources
    • Build Scripting Resources
      • Ant
      • Groovy
      • Maven
      • NAnt
      • Rake
    • Version Control Resources
      • ClearCase
      • Concurrent Versions System (CVS)
      • MKS
      • Subversion
      • Other Version Control Resources
    • Database Resources
      • Hypersonic DB
      • Mckoi
      • MySQL
      • Oracle
      • PostgreSQL
    • Testing Resources
      • Agitator
      • DbUnit
      • Fit
      • FitNesse
      • Floyd
      • HtmlUnit
      • JUnit
      • JWebUnit
      • NDbUnit
      • NUnit
      • Selenium
      • SQLUnit
      • TestEarly.com
      • TestNG
      • utPLSQL
      • Watir
      • xUnit Test Patterns
    • Automated Inspection Resources
      • Checkstyle
      • Clover
      • Cobertura
      • EMMA
      • FindBugs
      • FxCop
      • JavaNCSS
      • JDepend
      • NCover
      • NDepend
      • PMD
      • Simian
      • SourceMonitor
    • Deployment Resources
      • Capistrano (formerly SwitchTower)
    • Feedback Resources
      • Ambient Devices
      • GoogleTalk
      • Jabber
      • X10
      • Others
    • Documentation Resources
      • Doxygen
      • Javadoc
      • NDoc
  2. Evaluating CI Tools
    • Considerations When Evaluating Tools
      • Functionality
      • Build Tools — Essential Functionality
      • Build Tools — Extended Functionality
      • Build Schedulers — Essential Functionality
      • Build Schedulers — Extended Functionality
      • Compatibility with Your Environment
      • Reliability
      • Longevity
      • Usability
    • Automated Build Tools
      • Ant
      • Maven 1
      • Maven 2
      • NAnt
      • Rake
    • Build Scheduler Tools
      • AnthillPro
      • Continuum
      • CruiseControl
      • CruiseControl.NET
      • Draco.NET
      • Luntbuild
    • Conclusion

Reviews

Continuous Integration

Reviewed by Roland Buresund

Mediocre **** (4 out of 10)

Last modified: May 2, 2016, 1:31 p.m.

Well, nothing new under the sun here. This is what most people did in operating system development circles in the beginning of the 90-ties.

Feels like another try to introduce something that already exists to the ignorant masses of new programmers that believe they invented everything in development…

Add to this that it is not very enlightening and fails to make a good introduction to the reason why continuous build and test cycles are a very good idea. OK, it is not bad, but it could have been so much more.

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required

captcha

required