02 PDF
02 PDF
Lifecycle
Steve Macbeth
Group Program Manager
Search Technology Center
Microsoft Research Asia
About Me
Currently manage a team of 10 Program
Managers at Microsoft Research Asia
Over 20 years experience in all aspects
and stages of software development and
the software business
Worked at Microsoft for 5 years
Started two software/technology
companies before joining Microsoft
Agenda
Overview of Software Development
Lifecycle
Organization and Roles
Break (10 minutes)
Tools of the Trade
Best Practices
Break (15 minutes)
Q&A
Definition
A software development lifecycle is a
structure imposed on the development of
a software product. Synonyms include
development lifecycle and software
process. There are several models for
such processes, each describing
approaches to a variety of tasks or
activities that take place during the
process.
Various Methodologies
Waterfall
Traditional sequential development requirements, design, code, test, release,
often used for large-scale mission critical applications
Iterative Development
Small design, code, test cycles to uncover problems early, often used for
commercial development contracts
Agile Software Development
Built on iterative model, more people centric, relies on feedback for control,
difficult to do long-term planning
Extreme Programming
Built on iterative model, coding is done in pairs, design and coding are merged,
Test Driven Development
Write unit test automation first, then write production code until unit test passes
Formal Methods
Mathematically based, designed to ensure quality in mission critical systems
Product Development
Identify a Problem that needs to be solved
Create a plan for your Solution to the
Problem
Design the software necessary for the
Solution
Implement the software that supports the
Design
Release/Deploy the software
Support the software
Process at Microsoft
High-level guidelines, interpreted and
implemented differently across teams and
projects
Phases can overlap and can have smaller
cycles nested
Most projects use a hybrid model that is
waterfall for high-level planning and
release, but iterative for
design/development
Engineering Disciplines
Program Management (PM)
Development (Dev)
Testing (Test)
PUM Organizational Model
PUM Organizational Model
Single point of ownership across
disciplines
Doesnt scale as well to large complex
systems
Smaller teams create less career
development opportunities
10 minutes
Review
Product Development Methodologies
Development Team Roles & Organization
Next?
Roles during each phase
Tools of the trade
Best Practices
Early Phase
Know the product vision/problem space
Fully understand and document the key
user scenarios
Learn about your customers
Establish good relationships between
disciplines and partner teams
Design before you code
Research technologies and educate
yourself
PM during early phase
This part of the project is driven by PMs
Should start before the last phase in the
previous cycle ends
PMs should be gathering user data,
requirements, feedback, etc in order to plan
next set of features
Deliverables:
Quality code!
Unit Testing
Developers are responsible for testing
their own code, to ensure that it works
within local constrains and can be checked
in without breaking other code
Unit testing can and should be automated
to provide regression testing for old
features during changes
Code Complete
Target date for completing all features for
this milestone
Feature should be unit tested, checked in,
integrated with other code, BVTs pass
Shift focus from quality at a local level to
quality at a global level
Focus on stabilizing, not adding new
features
Source Code Control
Used to manage all source code
necessary to build the system
Enables version control, roll-back, merging,
branching
Automated system to build the software
from source code
Automated system to verify new code
didnt break existing functionality,
regression testing
Code Reviews
Every line of code should be reviewed by
peers before declaring code complete
Great coaching/mentoring opportunity for
junior engineering staff
Good mechanism to ensure architectural
continuity
Ensure quality at an early stage in project
Test during middle phase
Developing automated test frameworks to
ensure quality end to end functionality,
system performance, scalability
Tracking defect rates to alert team to
quality problems
Deliverables:
Test automation
Defect Tracking
Necessary to track every defect that is
detected after a piece of code is declared
code complete
Triage used to determine which defects to
fix, which to punt, how to resolve
Bug Jail used to prevent quality from
getting out of control
Three Disciplines, Three Tools
Program Manager
Feature List, Automated User Feedback
Developer
Source Code Control System, BVT
Tester
Defect Tracking System
Late Phase
End game!
Stabilize, tightly manage any changes
All changes are linked to defects or design
change requests
Everyone should be focused on shipping
PM during late phase
Working with test on driving triage
Writing specs for design change requests
Making sure no details are overlooked
Starting to think about next cycle
Triage
Triage is usually driven by either senior
tester or senior PM
During the end phase of a project all
defects should be reviewed by triage team
Determine which defects should be fixed
Determine how defects will be resolved
Not all bugs are worth fixing!
1. When this bug happens, how bad is the impact?
(Severity)
2. How often does this bug happen? (Frequency)
3. How much effort would be required to fix this bug?
(Effort)
4. What is the risk of fixing this bug? (Risk)
Deliverables:
Decision to ship!
Three disciplines, Three
deliverables
Program Management
Problem definition, feature list, solution
specification
Development
Quality code that meets solution specification
Testing
Deciding when to ship
Break
15 minutes
Review
Software Development Lifecycle
Team structure and roles
Tools of the trade
Best Practices
Things to insist on!
Vision document with executive support
End to end user scenarios for all high priority features
Feature list with engineering estimates
Solution specification for all high priority features
Code complete should only be declared when unit testing and code
review is complete
All code managed by a version control system
All defects managed by a defect management system
Defects come before new features
Daily build, build breaks come before everything
Triage all changes after code complete
Well defined release criteria
Test automation coverage of all high priority user scenarios
Test decides when system is ready to ship
Open Discussion