andrew@theinternet

Software Dev Process Lecture Notes - Part 1 Lesson 2 - Life Cycle Models


Life Cycle Models

Phases of the software lifecycle

  • Each of these will be covered in great depth
    1. Requirements Engineering
    • The process of establishing th needs of stakeholders
    • Cost of correction climbs over time. Cheapest to find mistakes here.
    • 4 phases
      1. Elicitation
      2. Analysis
      3. Specification
      4. Validation
      5. Management
        • Accounts for changes * Iterative process
      6. Design
    • Consists of series of design activities
    • General theme is to design from high level view down to low
    • Result in a set of design products
      1. Implementation
    • 4 pillars
      1. Reduction of complexity
      2. Anticipation of diversity
      3. Structuring for validation
      4. Use of standards
      1. Verification and Validation
    • Validation: did we build the right system?
    • Verification: did we build the system right?
    • Can be done at multiple levels
      • Unit - is each unit right?
      • Integration - do the units interact correctly?
      • System - does the system overall behave correctly?
        1. Maintenance
    • After software is finished and deployed, might have environment changes, feature requests, or bug reports
    • 3 kinds of maintenace
      1. Corrective maintenance - fix bugs
      2. Perfective maintenance - add features
      3. Adaptive maintenance - adjust for env changes
    • maintenance is expensive
      • regression testing is testing software after changes to ensure no new bugs were added

Software Process Model (aka Software Lifecycle Model)

  • Main function is to determine the order of software dev activities
  • Also to determine transition criteria between each step
  1. Waterfall Process
    • Performs well for products where there is a stable product definition
    • Progresses through orderly steps from first to alst with review before each step forward
    • Pro: Allows you to find errors early
    • Con: Very inflexible
  2. Spiral Process
    • Incremental risk-oriented model
    • 4 main phases
      1. Determine objectives
      2. Identify and resolve risks
      3. Development and Tests
      4. Plan the next iteration
    • A project iterates through all 4 phases
    • Pros: risk reduction advantage. Functionality can be added later. Software produced pretty early in iterative lifecycle
    • Cons: requires specific expertise, lots more complexity
  3. Evolutionary prototyping *4 main phases 1. Initial concept 2. Design and implement initial prototype 3. Refine prototype until acceptable 4. Complete and release prototype

    • Ideal when not all requirements are well understood
    • Pros: Immediate feedback
    • Cons: Difficult to plan
  4. Rational Unified Process
    • Based on UML
    • Iterative
    • Each iteration has 4 phases
      1. Inception
      2. elaboration
      3. Construction
      4. Transition
    • We do different software dev stuff in each phase. We do more or less of each thing depending on the phase
  5. Agile
    • Highly iterative and flexible
    • Going to focus on TDD. Iterates through 3 phases
      1. Write tests. Red phase, no code yet, they all fail
      2. Green phase, write just enough code to make all tests past
      3. Refactor, rewrite code to make it more readable and maintainable

Choosing a model

  • How to choose a model?
    • Requirements understanding
      • Also requirements stability
    • Expected lifetime
    • Risk
    • Schedule constraints
    • Interaction with stakeholders
      • Hard to iterate a lot if they don’t respond
    • Level of expertise of people involved

Lifecycle Documents

  • Lots of different kinds
  • IEEE has official ones, very heavy
  • This class will use our own lightweight versions

Classic Mistakes

  • People
    • Heroics
      • too much emphasis on ‘heroic efforts’
      • causes risk-taking and burnout
    • Bad work environment
      • strong evidence this affects productivity (no duh)
    • Poor people management
      • lack of leadership, poor leadership
      • adding people to a late project. never works!
  • Process
    • Scheduling issues - due to poor time estimation
    • Planning issues
    • unforeseen failures
  • Product
    • gold plating - excessive unnecessary requirements
    • feature creep - adding additional (unneeded) feature creep
      • avg 25% creeped features on projects
    • Research /= development - manage research differently
  • Technology
    • Silver bullet syndrome - too much reliance on some (new) technology
    • Switching tools (or adding)
    • No version control