Académique Documents
Professionnel Documents
Culture Documents
Software Engineering
Objectives: Best Practices of SE
Challenges
• Larger teams Performance
Engineer
• Specialization
Analyst
• Distribution
• Rapid technology change Project
Manager
Developer
Tester
Release
Engineer
How Are We Doing?
Performance
Engineer
Analyst
Project
Manager
Developer
Tester
Release
Engineer
Symptoms of Software Development
Problems
• Inaccurate understanding of end-user needs
• Inability to deal with changing requirements
• Modules that don’t fit together
• Software that’s hard to maintain or extend
• Late discovery of serious project flaws
• Poor software quality
• Unacceptable software performance
• Team members in each other’s way, unable to
reconstruct who changed what, when, where, why
• An untrustworthy build-and-release process
Treating Symptoms Does Not Solve the
Problem
Root Causes
Symptoms insufficient requirements
end-user needs
ambiguous
changing communications
requirements
brittle architectures
modules don’t fit
overwhelming
hard to maintain complexity
late discovery undetected
poor quality inconsistencies
colliding waterfall
developers development
build-and- uncontrolled
release change
insufficient
Best Practices of Software Engineering
Develop Iteratively
Use
Manage Model Verify
Component Visually
Requirements Architectures Quality
Control Changes
Best Practices Enable High-Performance Teams
Results
Performance
• More Successful Engineer
projects Analyst
Project
Manager
Developer
Develop Iteratively
Tester
Use Model
Manage Component Visually Verify
Requirements Architectures Quality
Release
Engineer
Control
Changes
Practice 1: Develop Software
Iteratively
Develop Iteratively
Use
Manage Model Verify
Component Visually
Requirements Quality
Architectures
Control Changes
Practice 1: Develop Software Iteratively
Design
Subsystem
Testing
System Testing
T I M E
Waterfall Development Delays
Reduction of Risk
Requirements
R Analysis
I
Design
S
K Code & Unit
Testing
Subsystem
Testing
System Testing
T I M E
Apply the Waterfall Iteratively to System
Increments
Iteration 1 Iteration 2 Iteration 3
R R R
D D D
C C C
T T T
T I M E
K Iterative Waterfall
Business Modeling
Requirements
Analysis & Design
Implementation
Test
Deployment
Supporting Workflows
Configuration Mgmt
Management
Environment
Preliminary Iter. Iter. Iter. Iter. Iter. Iter. Iter.
Iteration(s) #1 #2 #n #n+1 #n+2 #m #m+1
Iterations
Problems Addressed by Iterative Development
Root Causes Solutions
Insufficient requirements Enables and encourages user
feedback
Ambiguous
communications Serious misunderstandings evident
early in the life cycle
Brittle architectures
Overwhelming complexity Development focuses on critical
Subjective assessment issues
Undetected Objective assessment thru testing
inconsistencies
Poor testing Inconsistencies detected early
Waterfall development Testing starts earlier
Uncontrolled change
Risks identified and addressed
Insufficient automation early
Practice 2: Manage
Requirements
Develop Iteratively
Use
Model Verify
Manage Component Visually Quality
Requirements Architectures
Control Changes
Practice 2: Manage Requirements
Customer System
User Community To Be Built
Requirements Surrogate
Verification Goal
Control Changes
Software Architecture Defined
• Software architecture encompasses significant
decisions about the organization of a software system
– Selection of the structural elements and their
interfaces by which a system is composed
– Behavior as specified in collaborations among those
elements
– Composition of these structural and behavioral
elements into progressively larger subsystems
– Architectural style that guides this organization, these
elements and their interfaces, their collaborations,
and their composition
Architectural Concerns
• Software architecture is concerned with structure and
behavior and context:
– Usage
– Functionality
– Performance
– Resilience
– Reuse
– Comprehensibility
– Economic and technological constraints and tradeoffs
– Aesthetics
Resilient, Component-Based Architectures
• Good architectures meet their requirements, are
resilient, and are component-based
• A resilient architecture enables
– Improved maintainability and extensibility
– Economically-significant reuse
– Clean division of work among teams of developers
– Encapsulation of hardware and system dependencies
• A component-based architecture permits
– Reuse or customization of existing components
– Choice of thousands of commercially-available
components
– Incremental evolution of existing software
Example: Component-Based
Architecture
Lead Tracking
User Interface
Licensing
User Interface
User Interface
Mechanisms
Key:
- Purchased Oracle Vantive
- Built
- New
Problems Addressed by Component
Architectures
Root Solutions
Components facilitate resilient
Causes architectures
Insufficient requirements Reuse of commercially available
Ambiguous components and frameworks is
communications facilitated
Brittle architectures Modularity enables separation of
Overwhelming complexity concerns
Subjective assessment Components provide a natural basis
Undetected inconsistencies for configuration management
Poor testing Visual modeling tools provide
automation for component-based
Waterfall development
design
Uncontrolled change
Insufficient automation
Practice 4: Visually Model
Software
Develop Iteratively
Use
Manage Verify
Component Model
Requirements Quality
Architectures Visually
Control Changes
Practice 4: Visually Model Software
Scenario State
Scenario
Diagrams State
Diagrams
Sequence
Diagrams State
Diagrams
Diagrams Model Diagrams
Scenario Component
Scenario
Diagrams
Component
Diagrams
Component
Collaboration
Diagrams Deployment Diagrams
Diagrams Diagram Diagrams
Visual Modeling Using UML Diagrams
Use-Case Diagram Class Diagram State Diagram add file
DocumentList
FileMgr Document
add( )
name : int
fetchDoc( ) delete( ) docid : int
sortByName( ) numField : int
Writing
add file [ numberOffile==MAX ] /
get( ) flag OFF
open( ) read() fill the
close( ) code..
FileList read( )
sortFileList( ) Openning
Actor A Actor B
close file
Closing
Reading
rep
Use Case 2 File
<<entity>>
Repository
Customer
(from Persistence) GrpFile
read( )
name
name : char * = 0
read( )
readDoc( )
addr
readFile( ) open( )
create( )
fillFile( )
receive()
Use Case 3 withdraw()
Domain fetch()
Expert UI
send()
Deployment
MFC Class Diagram
DocumentApp
DocumentList
RogueWave
Persistence
Repository Window95 Windows95
9: sortByName ( ) Windows95
global
¹®¼-°ü¸®
FileManager Ŭ¶óÀ̾ðÆ®.EXE
¹®¼-°ü¸® ¾ÖÇø´
Package
NT
2: fetchDoc( )
¹®¼-°ü¸® ¿£Áø.EXE
Diagram
Alpha
UNIX
8: fillFile ( ) ÀÀ¿ë¼-¹ö.EXE
Windows
NT
3: create ( )
File FileList
6: fillDocument ( )
µ¥ÀÌŸº£À̽º¼-¹ö
7: readFile ( )
5: readDoc ( )
document : Document
repository : Repository
2: fetchDoc()
3: create ( )
4: create ( )
5: readDoc ( )
7: readFile ( )
8: fillFile ( )
Sequence Diagram
Executable System
Problems Addressed by Visual Modeling
Root Causes Solutions
Use cases and scenarios
Insufficient requirements
unambiguously specify behavior
Ambiguous
Models capture software designs
communications
unambiguously
Brittle architectures
Non-modular or inflexible
Overwhelming complexity architectures are exposed
Subjective assessment Unnecessary detail hidden when
Undetected appropriate
inconsistencies Unambiguous designs reveal
Poor testing inconsistencies more readily
Waterfall development Application quality starts with
Uncontrolled change good design
Insufficient automation Visual modeling tools provide
support for UML modeling
Practice 5: Verify Software Quality
Develop Iteratively
Use
Manage Model
Component Visually Verify
Requirements Architectures Quality
Control Changes
Practice 5: Verify Software Quality
Cost
Development Deployment
Iterative Development Permits
Continuous Testing
Iteration 1 Iteration 2 Iteration 3
R R R
D D D
C C C
T T T
Test
Automation
13,000 Tests
6 hours Run More Tests More Often
1 Person
Dimensions of Software Quality
Type Why? How?
Reliability Does my app leak memory? Analysis tools and code
instrumentation
Use
Manage Model Verify
Component Visually
Requirements Quality
Architectures
Control Changes
Practice 6: Control Changes to Software
• Multiple developers
• Multiple teams
• Multiple sites
• Multiple iterations
• Multiple releases
• Multiple projects
• Multiple platforms
Project
Manager
Develop Iteratively
Developer
Use Model
Manage Component Visually Verify
Quality
Tester
Requirements Architectures
Control Release
Changes
Engineer