Available:*
Library | Item Barcode | Call Number | Material Type | Item Category 1 | Status |
---|---|---|---|---|---|
Searching... | 30000010207870 | QA76.76.D47 P39 2008 | Open Access Book | Book | Searching... |
Searching... | 30000010207871 | QA76.76.D47 P39 2008 | Open Access Book | Book | Searching... |
On Order
Summary
Summary
Structured to follow the software life cycle, Patterns for Performance and Operability provides advice and examples-based instructions at every phase. You can read it from start to finish or go directly to those chapters that interest you the most. Whatever approach you choose, you will learn:
How to:
· Define and document comprehensive non-functional requirements for any software system
· Define scope and logistics for non-functional test activities
· Execute non-functional tests and report results clearly and effectively
· Patterns for defensive software designs in common software scenarios that promote operability and availability
· Implement the right level of reporting, monitoring, and trending for highly available production software systems
Patterns for:
· Software designs that support simpler and more efficient operation in a production environment
· Software design that support high-performance and scalability
Strategies and Techniques for:
· Techniques for managing and troubleshooting during a production crisis
· Strategies for resisting project pressure to compromise on quality or completeness of non-functional activities in the software cycle
Table of Contents
Dedications | p. v |
The Purpose of This Book | p. xv |
Acknowledgments | p. xvii |
About the Authors | p. xix |
1 Introduction | p. 1 |
Production Systems in the Real World | p. 1 |
Case 1 The Case of the Puzzlingly Poor Performance | p. 2 |
Case 2 The Case of the Disappearing Database | p. 5 |
Why Should I Read This Book? | p. 7 |
The Non-Functional Systems Challenge | p. 8 |
What Is Covered by Non-Functional Testing | p. 9 |
Planning for the Unexpected | p. 10 |
Patterns for Operability in Application Design | p. 11 |
Ensuring Data and Transaction Integrity | p. 11 |
Capturing and Reporting Exception Conditions in a Consistent Fashion | p. 11 |
Automated Recovery from Exception Conditions | p. 14 |
Application Availability and Health | p. 14 |
Summary | p. 14 |
2 Planning and Project Initiation | p. 17 |
The Business Case for Non-Functional Testing | p. 17 |
What Should Be Tested | p. 17 |
How Far Should the System Be Tested? | p. 19 |
Justifying the Investment | p. 20 |
Negative Reasoning | p. 21 |
Scoping and Estimating | p. 22 |
Determining the Scope of Non-Functional Testing | p. 22 |
Estimating Effort and Resource | p. 26 |
Estimating the Delivery Timeline | p. 29 |
Test and Resource Planning | p. 33 |
Test Types and Base Requirements | p. 33 |
Test Environments | p. 36 |
The Test Team | p. 37 |
Communication Planning | p. 39 |
Setting Expectations | p. 39 |
Summary | p. 40 |
3 Non-Functional Requirements | p. 41 |
What Are Non-Functional Requirements? | p. 43 |
Do I Need Non-Functional Requirements? | p. 43 |
Roles and Responsibilities | p. 44 |
Challenging Requirements | p. 45 |
Establishing a Business Usage Model | p. 46 |
Quantifying Human and Machine Inputs | p. 46 |
Expressing Load Scenarios | p. 54 |
Non-Functional Requirements | p. 56 |
An Important Clarification | p. 56 |
Performance Requirements | p. 58 |
Operability Requirements | p. 62 |
Availability Requirements | p. 64 |
Archive Requirements | p. 65 |
Summary | p. 67 |
4 Designing for Operability | p. 69 |
Error Categorization | p. 70 |
Design Patterns | p. 71 |
Retry for Fault Tolerance | p. 71 |
Software Fuses | p. 74 |
Software Valves | p. 75 |
System Health Checks | p. 78 |
The Characteristics of a Robust System | p. 80 |
Simple Is Better | p. 80 |
Application Logging | p. 81 |
Transparency: Visibility into System State | p. 83 |
Traceability and Reconciliation | p. 84 |
Resume versus Abort | p. 86 |
Exception Handling | p. 87 |
Infrastructure Services | p. 91 |
Design Reviews | p. 91 |
The Design Checklist | p. 91 |
The Operability Review | p. 92 |
Summary | p. 94 |
5 Designing for Performance | p. 95 |
Requirements | p. 95 |
The "Ilities" | p. 95 |
Architecture | p. 101 |
Hotspots | p. 101 |
Patterns | p. 102 |
Divide and Conquer | p. 102 |
Load Balancing | p. 102 |
Parallelism | p. 103 |
Synchronous versus Asynchronous Execution | p. 107 |
Caching | p. 109 |
Antipatterns | p. 112 |
Overdesign | p. 114 |
Overserialization | p. 114 |
Oversynchronization | p. 117 |
User Session Memory Consumption | p. 118 |
Algorithms | p. 119 |
Technology | p. 120 |
Programming Languages | p. 120 |
Distributed Processing | p. 123 |
XML | p. 125 |
Software | p. 126 |
Databases | p. 127 |
Application Servers | p. 129 |
Messaging Middleware | p. 129 |
ETLs | p. 132 |
Hardware Infrastructure | p. 134 |
Resources | p. 134 |
Summary | p. 136 |
6 Test Planning | p. 139 |
Defining Your Scope | p. 140 |
System Boundaries | p. 140 |
Scope of Operability | p. 142 |
Scope of Performance | p. 145 |
Load Testing Software | p. 145 |
Product Features | p. 146 |
Vendor Products | p. 147 |
Additional Testing Apparatus | p. 149 |
Test Beds | p. 150 |
Test-Case Data | p. 150 |
Test Environments | p. 151 |
Isolation | p. 151 |
Capacity | p. 153 |
Change Management | p. 154 |
Historical Data | p. 154 |
Summary | p. 157 |
7 Test Preparation and Execution | p. 159 |
Preparation Activities | p. 159 |
Script Development | p. 160 |
Validating the Test Environment | p. 164 |
Establishing Mixed Load | p. 164 |
Seeding the Test Bed | p. 167 |
Tuning the Load | p. 167 |
Performance Testing | p. 171 |
Priming Effects | p. 172 |
Performance Acceptance | p. 173 |
Reporting Performance Results | p. 176 |
Performance Regression: Baselining | p. 177 |
Stress Testing | p. 181 |
Operability Testing | p. 181 |
Boundary Condition Testing | p. 182 |
Failover Testing | p. 183 |
Fault Tolerance Testing | p. 186 |
Sustainability Testing | p. 188 |
Challenges | p. 192 |
Repeatable Results | p. 193 |
Limitations | p. 193 |
Summary | p. 194 |
8 Deployment Strategies | p. 195 |
Procedure Characteristics | p. 196 |
Packaging | p. 197 |
Configuration | p. 197 |
Deployment Rehearsal | p. 198 |
Rollout Strategies | p. 198 |
The Pilot Strategy | p. 198 |
The Phased Rollout Strategy | p. 199 |
The Big Bang Strategy | p. 199 |
The Leapfrog Strategy | p. 200 |
Case Study: Online Banking | p. 200 |
Case Study: The Banking Front Office | p. 202 |
Back-Out Strategies | p. 204 |
Complete Back-Out | p. 204 |
Partial Back-Out | p. 204 |
Logical Back-Out | p. 204 |
Summary | p. 205 |
9 Resisting Pressure from the Functional Requirements Stream | p. 207 |
A Question of Degree | p. 208 |
Pressures from the Functional Requirements Stream | p. 209 |
Attention | p. 212 |
Human Resources | p. 212 |
Hardware Resources | p. 213 |
Software Resources | p. 213 |
Issue Resolution | p. 213 |
Defining Success | p. 213 |
Setting the Stage for Success | p. 214 |
Framework | p. 215 |
Roles and Responsibilities | p. 216 |
Raw Resources Required by the Non-Functional Requirements Stream | p. 216 |
Performance Metrics | p. 221 |
Setting Expectations | p. 222 |
Controls | p. 222 |
The Impact of Not Acting | p. 223 |
Summary | p. 223 |
10 Operations Trending and Monitoring | p. 225 |
Monitoring | p. 225 |
Attributes of Effective Monitoring | p. 227 |
Monitoring Scope | p. 228 |
Infrastructure Monitoring | p. 230 |
Container Monitoring | p. 233 |
Application Monitoring | p. 238 |
End-User Monitoring | p. 239 |
Trending and Reporting | p. 241 |
Historical Reporting | p. 241 |
Performance Trending | p. 241 |
Error Reporting | p. 243 |
Reconciliation | p. 244 |
Business Usage Reporting | p. 245 |
Capacity Planning | p. 245 |
Planning Inputs | p. 245 |
Best Practice | p. 248 |
Case Study: Online Dating | p. 248 |
Maintaining the Model | p. 255 |
Completing a Capacity Plan | p. 255 |
Summary | p. 256 |
11 Troubleshooting and Crisis Management | p. 257 |
Reproducing the Issue | p. 257 |
Determining Root Cause | p. 258 |
Troubleshooting Strategies | p. 259 |
Understanding Changes in the Environment | p. 259 |
Gathering All Possible Inputs | p. 261 |
Approach Based on Type of Failure | p. 263 |
Predicting Related Failures | p. 265 |
Discouraging Bias | p. 268 |
Pursuing Parallel Paths | p. 268 |
Considering System Age | p. 269 |
Working Around the Problem | p. 269 |
Applying a Fix | p. 270 |
Fix versus Mitigation versus Tolerance | p. 270 |
Assessing Level of Testing | p. 271 |
Post-Mortem Review | p. 272 |
Reviewing the Root Cause | p. 272 |
Reviewing Monitoring | p. 272 |
Summary | p. 275 |
12 Common Impediments to Good Design | p. 277 |
Design Dependencies | p. 277 |
What Is the Definition of Good Design? | p. 279 |
What Are the Objectives of Design Activities? | p. 279 |
Rating a Design | p. 281 |
Testing a Design | p. 286 |
Contributors to Bad Design | p. 287 |
Common Impediments to Good Design | p. 287 |
Confusing Architecture with Design | p. 288 |
Insufficient Time/Tight Timeframes | p. 288 |
Missing Design Skills on the Project Team | p. 288 |
Lack of Design Standards | p. 288 |
Personal Design Preferences | p. 289 |
Insufficient Information | p. 289 |
Constantly Changing Technology | p. 289 |
Fad Designs | p. 290 |
Trying to Do Too Much | p. 290 |
The 80/20 Rule | p. 290 |
Minimalistic Viewpoint | p. 290 |
Lack of Consensus | p. 291 |
Constantly Changing Requirements | p. 291 |
Bad Decisions/Incorrect Decisions | p. 291 |
Lack of Facts | p. 291 |
External Impacts | p. 291 |
Insufficient Testing | p. 291 |
Lack of Design Tools | p. 292 |
Design Patterns Matter | p. 292 |
Lack of Financial Resources | p. 292 |
Design Principles | p. 292 |
Summary | p. 293 |
References | p. 295 |
Index | p. 297 |