Large Scale Software Development

Bart Massey 2013-11-26

Overview

Large Scale Software Development

  • Everything is harder

  • Some bits are fundamentally different

  • Key topics:

    • Software Process Management

    • Software Product Lines and Versioning

    • Large Scale Deployment

    • Software Maintenance

Software Process Management

  • Process must be well-controlled

  • Pick a "Process Model" and stick with it

    • Waterfall (incremental and iterative)

    • "Agile"

    • ???

  • The "V Model"

  • The "Spiral Model"

The V Model

  • Discussed previously

  • Fundamental idea: during an activity, construct the V&V plan for that activity

    Planning ->                       Deployment V&V
        \                              /
      Requirements ->               System V&V
          \                          /
        Architecture ->           Integration V&V
            \                      /
          Detailed Design ->    Module V&V
              \                  /
            Implementation -> Unit V&V
                \              /
                 \            /
    
  • Works well on several levels

The Spiral Model

  • Some projects are extra-risky. This threatens fail-early

  • Idea: be iterative at a higher level

                                  |
         1. Determine Objectives  |  2. Identify and Resolve Risks
                                  |
       ---------------------------+-----------------------------
                                  |
         4. Plan Next Iteration   |  3. Development and Test
                                  |
    
  • "Spiral" outward through these steps until full scope is reached

SEI CMM

  • Capabilities Maturity Model: Example of process improvement

    • Initial (1)
    • Repeatable (2)
    • Defined (3)
    • Managed (4)
    • Optimizing (5)
  • At each level, a number of specific process characteristics are required

  • Example of CMM L5 organization: NASA Space Shuttle SW group

Versioning

  • Large projects rarely have a single product even at one point in time

    • Multiple simultaneous development threads
    • Multiple configurations
  • Automated frameworks are key for management

    • Able to build and test all versions automatically
    • Able to track configurations and config change history
  • Large products must be built for size (c.f. Brooks' "Programming Systems Product"

Software Product Lines

  • Sometimes projects are built with a great deal of project-specific infrastructure

  • Keeping track of interrelationships and "soft SKUs" requires its own infrastructure

Large Scale Deployment

  • Number one rule: customer contact is... expensive

  • Number two rule: OOBE must be flawless

  • Risk management is key

    • Incremental deployment
    • Parallel deployment
    • Deployment team resource management

Software Maintenance

  • Only one kind of unmaintained software

  • Perhaps biggest effort in software life cycle

  • See rule number one

  • Infrastructure is crucial

    • Adequate staffing
    • Adequate knowledge transfer
    • Workable issue tracking system

Risk Management

  • All risks are magnified in a large project

  • Risk equation:

    R = P x S
    

    where P is the probability of the risk and S is the severity

  • Key document: Risk Management Plan

    • Identify all risks of significant R value (including a few highly improbable or not severe ones)

    • For each risk, have plans for what to do if it materializes

    • Maintain the RMP over time

Open Source Software Development

  • An "alternate" model for large projects

    • OK, not that alternate
  • Key ideas:

    • Asynchrony and non-locality force a lot of large project practices anyhow
    • Some hard constraints removed
    • Some easy opportunites
  • Key practices:

    • Code-centric development
    • Tool-based practices
    • Intensive user feedback
Last modified: Monday, 25 November 2013, 10:43 PM