Upstream Prerequisites

advertisement
Upstream Prerequisites
“Measure Twice, Cut Once”
Before construction, preparations must be
made.
 These preparations are custom built to the
projects specific needs
 The success or failure of the project is
determined before the construction
begins.
 “Measure twice, cut once”: construction
can account for up to 65% of total project
cost.

“Blueprints”

High quality practices = high quality
software.
◦ Quality start: Focus on planning
◦ Quality middle: Focus on construction
◦ Quality End: Focus on testing
The goal of preparation is risk reduction.
Most common project risks are poor
requirements and planning.
 Preparation for construction is not an
exact science.


Importance of Prerequisites

Causes of Incomplete preparation
◦ Developers with lack of expertise.
◦ “I want to code now!!!!” : Coding ASAP
◦ “I want to SEE code now!!”: Unsympathetic
managers
 Refuse, Trick, Educate, Relocate

Educate people about the development
process.
◦ Appeal to logic
◦ Use Analogies
◦ Show the data
Importance of Prerequisites

Boss Test
◦ We’d Better start coding right away because
we’re going to have a lot of debugging to do.
◦ We haven’t planned much time for testing
because we’re not going to find many defects.
◦ We’ve investigated requirements and design so
much that I can’t think of and major problems
we’ll run into during coding or debugging.
Importance of Prerequisites
Different kinds of software projects
require different balances between
preparation and construction.
 Projects tend to fall into development
styles.

◦ Business Systems
◦ Mission-Critical Systems
◦ Embedded Life- Critical Systems
“What software am I working
on?”

Business Systems
◦ Internet site, Games, Management information
systems, Payroll
◦ Planning is interleaved with construction
◦ Less quality assurance activities, done in
house.
◦ Informal
“What software am I working
on?”

Mission –Critical Systems
◦ Embedded software, Software tools, Web
services
◦ Up- front planning and semi-formal
requirements
◦ Informal check-ins while coding
◦ Testing with a separate group. (In house
always done)
“What software am I working
on?”

Embedded Life- Critical Systems
◦ Avionics software, Medical devices, Operating
Systems
◦ Formal and extensive planning, requirements,
and design
◦ Formal check-ins while coding
◦ Extensive out of house testing.
◦ Everything must go correctly
“What software am I working
on?”

Sequential approach
◦ Upfront prerequisites
 Requirements are stable
 Design is straightforward
 Low risk project
 Long term predictability
 High change cost.
“What software am I working
on?”

Iterative approach
◦ As you go prerequisites
 Unclear requirements
 Complex design
 Lots of risks
 Long term is not important
 Low change cost.

Adapt approaches based on your specific
project.
“What software am I working
on?”
“Mission Statement”
 Problem definition defines what the
problem is without a reference to a
solution.
 If it sounds like a problem it is a good
problem definition.
 “GGC students have a hard time
managing all they have to do at the
school.”

Problem-Definition Prerequisite
Problem definition lays the foundation of
the programming process.
 State the definition in the users language
and not in computer terms.

◦ The best solution may not require
programming.

Exception: When it deals with computers
◦ Programming tools are buggy, compile times
are slow, ect.
Problem-Definition Prerequisite






Requirements describe in detail what a
software system is supposed to do.
First step toward a solution.
Allows the user to determine system
functionality.
Minimizes changes mid project.
Stable requirements don’t really happen
but must be strived for.
On average a 25% change in
requirements is bound to happen.
Requirements Prerequisite

How to handle requirement changes.
◦ Requirement checklist at the end of each
section
◦ Make the change cost known to everyone
◦ Set up a change-control procedure
◦ Use development approaches that can
accommodate changes.
◦ If all else fails: Dump the project. (Or at least
think about it)
Problem-Definition Prerequisite
Software architecture is the high-level
part of software design.
 The frame that holds the detailed parts
together.
 A single document that defines constraints
that apply system wide.
 Provides guidance to programmers
because it is detailed to the skills of the
coders.

Architecture Prerequisite

Architectural Components
◦ Program Organization
 How many subsystems, what are the building
blocks
◦ Major Classes
◦ Data Design
 Major files and tables
◦ Business Rules
◦ User Interface Design
◦ Input/Output
Problem-Definition Prerequisite

Architectural Components Con’t
◦
◦
◦
◦
Resource Management
Security
Performance
Scalability
 Growth?
◦ Interoperability
◦ Localization
◦ Error Processing
Problem-Definition Prerequisite

Architectural Components Con’t
◦
◦
◦
◦
◦
◦
◦
Fault Tolerance
Architectural Feasibility
Overengineering
Buy vs Build
Reuse Decisions
Change Strategy
General Architectural Quality
Problem-Definition Prerequisite
10 to 20% of its effort and 20 to 30% of
its time.
 Allow time to consult the requirements
and for revisions.
 Treat requirements as its own project if
necessary.
 Smaller the project, less time necessary.

How much time to spend on
upstream prerequisites






Main goal is risk reduction
Educate everyone about the development
process.
Different projects means different
prerequisites. (Iterative vs Sequential)
Problem definition
Requirements
Architectural design
Key Points
Download