Performance Engineering Approaches for Software Systems
Course proposal for seminar course in Winter (or Spring) 2002
Course type: co-listed graduate & undergraduate. Targeted
primarily at graduate students. Possibly cross-listed with Software
Engg if there is interest in doing that.
Instructor: Swaminathan Natarajan, and possibly some guest speakers
Course description
This course will familiarize participants with a framework and basket
of techniques for taking an engineering approach to determining the behavioural
profile of software systems, including time and space performance, reliability,
availability, usability and evolvability. It will cover techniques
for determining the behavioural requirements, talk briefly about design
techniques and methodology for meeting the requirements, and go more extensively
into how to determine the behavioural profile through analysis and testing.
This will be a discussion-type course that surveys a wide body of work,
much of it still evolving, rather than a classroom course that presents
a coherent, well-understood and well-integrated set of concepts.
Textbook
There will be no required textbook for the course. There will
be several reference books and papers.
Prerequisites
-
Operating systems
-
Software Engineering I
Topics
-
System attributes (1 week)
-
Performance
-
Time performance: response time, throughput, deadlines
-
Space performance
-
Resource utilization
-
Dependability
-
Reliability
-
Availability
-
Accuracy (precision)
-
Usability
-
Evolvability
-
Usability
-
(functionality)
-
Operability
-
Learnability
-
Helpfulness
-
Interoperability
-
Evolvability
-
Maintainability
-
Extensibility
-
Scalability
-
Portability
-
(Business attributes)
-
Cost
-
Cycletime
-
Reusability
-
Defining behavioural requirements (2 weeks)
-
Operational profiles and frequency of usage
-
Identifying critical system parameters
-
Eliciting tradeoff information: "Just enough quality"
-
Quantitative vs. qualitative understanding of desired profile
-
Impacts on design (2 weeks)
-
Approach
-
Basic design + mechanisms
-
Architecture + design choices + post-development
-
Behavior analysis during architecture
-
Identifying high-leverage parameters
-
Profiling and incremental optimization
-
Techniques for designing to meet attributes
-
Hot-spot optimization
-
Fault-detection and fault-tolerance
-
Componentization
-
Tuning interfaces
-
Analysis techniques (2 weeks)
-
Benchmarking
-
Constructing views to facilitate analysis
-
Flow-based estimation for time and space performance
-
Complexity considerations for performance, scalability
-
Statistical software reliability analysis
-
Fault-tree and FMEA causal chain analysis for fault-tolerance
-
Survey-based estimation of usability: SUMI
-
Review-based estimation of evolvability: Software Architecture Analysis
Method
-
Performance modeling
-
Constructing a performance model
-
Tools for analyzing performance models
-
Simulation-based performance analysis
-
Testing techniques (2 weeks)
-
Performance testing
-
Reliability testing
-
Availability testing using fault-injection
-
Usability testing
-
Metrics (1 week)
-
Performance metrics
-
Availability metrics
-
Usability metrics
-
Evolvability metrics
-
Wrapup
Method of evaluation
-
2 quizzes (10% total)
-
Final exam (20%)
-
Term paper (20%) (graduate students only - exam, project count more for
undergrads)
-
5 mini-projects (25% total)
-
project (25%)
The students will have a chance to customize the above i.e. rework
the grading elements to suit their preferences e.g. do bigger project and
no term paper.