Uploaded by p148748

Ch02 - Building a System Computer Science

advertisement
Chapter 2
Building a System
Introduction
• Explore differences between building a
program and building a system
• Identify techniques to cope with these
differences
Building a System
• Writing a program vs Building a system
• What’s the difference?
Size and Complexity
• Size - Lines of Code (LOC)
–
–
–
–
School projects: 100 – 5,000
DISCUS: 2 million
Windows 10: 50 million
Google: 2 billion
• Effort – Full Time Equivalent (FTE)
Resources
–
–
–
–
School projects: < 1 FTE
DISCUS: < 200 FTE (5 – 25 developers for 10+ years)
Windows 10: 7,000 developers x ?? years
Google: 30,000 developers x ?? years
Increased Complexity
Everywhere
Problem
Increase in
size & complexity
Transformation
Increase in
effort due to
size & complexity
• Breadth of Complexity
• Depth of Complexity
Solution
Increase in
size & complexity
Complexity (Breadth)
• More Functions
• More Features within each functionality
• More varieties of Interfaces (internal &
external)
• More Users and varieties of users
• More data, varieties of data, data structures
Breadth of Complexity
Complexity (Depth)
• More Linkages and Connections
– Data sharing among the functionalities &
logic
– Control Passing among functionalities
Depth of Complexity
Handling Complexities
• Simplification
– Decomposition of the problem and of
solution
– Modularization of solution
– Separation of Concerns of problem and of
solution
– Incrementally resolve problems
• Reduce the Problem
– Postpone or eliminate functionality
– Utilize existing functionality
Handling Complexities
• Improve Technology and Tools
– Database Management System (DBMS): Addresses large
amounts of data and relationships
– Interactive Development Environment (IDE): Reduces
syntactic errors and decreases debugging effort
– Computing Network: Enables developers to split
development tasks even when dispersed geographically
– Multi-Developer Configuration Management: Coordinates
development effort
– Modeling techniques: Simplifies problem and solution
through abstraction
– Automated Testing: Reduces effort for testing tasks
Handling Complexities
• Improve Process and Methodologies
– Coordinate multiple and different people
performing different tasks
– Guidance for overlapping incremental
tasks
– Guidance for measuring separate
artifacts and outcomes
Example of Size and Complexity Increases
Simple
Increased Size and Complexity
Start
Start
Wait for signal
Perform task A
Signal is?
Perform task B
‘a’
Perform task A
other
‘b’
Perform task C
Perform task C
Perform task A2
Perform task B
Stop
Stop
Task Breakdown (Macro) Example
Handling Complexity
Requirements
Definition
Code/Unit Test
Design
Support &
Problem Fixes
Integration &
System Test
1. Who performs what task?
2. How is the task completed with what technique or tool?
3. When should which task start and end?
4. Who should coordinate the people and the tasks?
Iterative Process Example
Handling Complexity
Understanding the Broad Problem (Req.)
Architecture and High Level Design
Specific Requirements
.
.
Detail design
.
.
Code
.
.
Specific Requirements
.
.
.
Detail design
.
.
.
Code
Integration
Test / Fix
Test / Fix
Handling the “Details”
Separately
Integration
Test / Fix
Test / Fix
• Test/Fix and Integrate steps:
–
–
–
–
–
–
–
–
Should there be a separate and independent test group?
How should problems be reported and to whom?
How much information must accompany a problem report?
Who decides on the priority of the problem?
How is the problem fix returned?
Should all problems be fixed?
How are fixes integrated back to the system?
What should we do problems that are not fixed?
Some ‘Non-technical’ Considerations
• Effort & Schedule Expansion
– How does one estimate and handle this?
• Assignment and Communications
Expansion?
– Do we need some process?
– Do we need some tools?
Requires more effort, more resources, etc.
Increases in system complexity increases effort (i.e.,
human resources) in a non-linear ways.
For example, communication -
2 people: 1 path
4 people: possibly 6 paths
6 people: potentially 15 paths
For n people, number of potential communications paths
= ∑ (n-1) = [n x (n-1)] / 2
As # of people increases, amount of communications increases
Also, an increase in the number of communications errors committed
How can the increase in the number of people be managed to
minimize the increase in communication?
A Large, Complex System
• What is a Mission or Business Critical system
• Building Mission Critical system requires
– Several separate activities performed by
– More than 1 person (e.g. 50 ~ 100):
• Separate Activities
– Requirements: elicitation, analysis, specification, and
agreement
– Design: Architecture,
abstraction, decomposition, interaction, cohesion and
coupling analysis
– Implementation: language choices, coding and unit testing
– Integration and tracking of pieces and parts
– Separate testing: functional testing, component testing,
system testing, and performance testing
– Packaging and releasing the system
Support of System after Release
Complex Systems are never perfect
• Pre-release: preparation for education &
support:
– Number of expected users
– Number of known problems and expected quality
– Amount of training for both user and support
personnel
– Fix and maintenance cycle
• Post-release: preparation for user/customer
support:
– Call center and problem resolutions
– Major problem fixes and code changes
– Functional modifications and enhancements
Coordination
• Because there are more
– parts,
– developers and
– users
• There is the need for Coordination of
(3P’s):
– Processes and methodologies to be used
– Product and intermediate artifacts
– People (developers, support personnel, and
users)
Summary
• Systems are orders of magnitude
larger and more complex than any
program
• Size and complexity increases effort
necessary to develop systems in nonlinear ways
• Organization, processes and tools are
necessary to manage the size and
complexity of systems
Download