<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>PerfTestingGuide Wiki &amp; Documentation Rss Feed</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Home</link><description>PerfTestingGuide Wiki Rss Description</description><item><title>Updated Wiki: Home</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Home&amp;version=19</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;
patterns &amp;amp; practices Performance Testing Guidance for Web Applications
&lt;/h2&gt;Welcome to the &lt;b&gt;patterns &amp;amp; practices Performance Testing Guidance for Web Applications&lt;/b&gt;!  This guide shows you an end-to-end approach for implementing performance testing.  Whether you are new to performance testing, or looking for ways to improve your current performance testing approach, you will find insights that you can tailor for your specific scenarios.  This guide is related to our &lt;a href="http://www.CodePlex.com/PerfTesting" class="externalLink"&gt;Performance Testing Guidance Project &lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. - &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=PerfTestingGuide&amp;amp;DownloadId=23765" alt="ptg.gif" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Download the Guide
&lt;/h3&gt;The Final Release is Available!  Start using the guide today, while we continue to make improvements.&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Release/ProjectReleases.aspx?ReleaseId=6690" class="externalLink"&gt;Download the Performance Testing Guidance for Web Applications Guide &lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Parts
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Part 1, Introduction to Performance Testing&lt;/li&gt;&lt;li&gt;Part II, Exemplar Performance Testing Approaches&lt;/li&gt;&lt;li&gt;Part III, Identify the Test Environment&lt;/li&gt;&lt;li&gt;Part IV, Identify Performance Acceptance Criteria&lt;/li&gt;&lt;li&gt;Part V, Plan and Design Tests&lt;/li&gt;&lt;li&gt;Part VI, Execute Tests&lt;/li&gt;&lt;li&gt;Part VII, Analyze Results and Report&lt;/li&gt;&lt;li&gt;Part VIII, Performance Testing Techniques&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;
Forewards
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Foreword%20By%20Alberto%20Savoia&amp;amp;referringTitle=Home"&gt;Foreword By Alberto Savoia&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Foreword%20By%20Rico%20Mariani&amp;amp;referringTitle=Home"&gt;Foreword By Rico Mariani&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;
Chapters
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Introduction&amp;amp;referringTitle=Home"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Part 1, Introduction to Performance Testing&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%201%20%u2013%20Fundamentals%20of%20Web%20Application%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 1 – Fundamentals of Web Application Performance Testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%202%20%u2013%20Types%20of%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 2 – Types of Performance Testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%203%20%u2013%20Risks%20Addressed%20Through%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 3 – Risks Addressed Through Performance Testing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part II, Exemplar Performance Testing Approaches&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%204%20%u2013%20Web%20Application%20Performance%20Testing%20Core%20Activities&amp;amp;referringTitle=Home"&gt;Chapter 4 – Web Application Performance Testing Core Activities&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%205%20%u2013%20Coordinating%20Performance%20Testing%20with%20an%20Iteration-Based%20Process&amp;amp;referringTitle=Home"&gt;Chapter 5 – Coordinating Performance Testing with an Iteration-Based Process&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%206%20%u2013%20Managing%20an%20Agile%20Performance%20Test%20Cycle&amp;amp;referringTitle=Home"&gt;Chapter 6 – Managing an Agile Performance Test Cycle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%207%20%u2013%20Managing%20the%20Performance%20Test%20Cycle%20in%20a%20Regulated%20%28CMMI%29%20Environment&amp;amp;referringTitle=Home"&gt;Chapter 7 – Managing the Performance Test Cycle in a Regulated (CMMI) Environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part III, Identify the Test Environment&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%208%20%u2013%20Evaluating%20Systems%20to%20Increase%20Performance-Testing%20Effectiveness&amp;amp;referringTitle=Home"&gt;Chapter 8 – Evaluating Systems to Increase Performance-Testing Effectiveness&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part IV, Identify Performance Acceptance Criteria&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%209%20%u2013%20Determining%20Performance%20Testing%20Objectives&amp;amp;referringTitle=Home"&gt;Chapter 9 – Determining Performance Testing Objectives&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2010%20%u2013%20Quantifying%20End-User%20Response%20Time%20Goals&amp;amp;referringTitle=Home"&gt;Chapter 10 – Quantifying End-User Response Time Goals&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2011%20%u2013%20Consolidating%20Various%20Types%20of%20Performance%20Acceptance%20Criteria&amp;amp;referringTitle=Home"&gt;Chapter 11 – Consolidating Various Types of Performance Acceptance Criteria&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part V, Plan and Design Tests&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2012%20%u2013%20Modeling%20Application%20Usage&amp;amp;referringTitle=Home"&gt;Chapter 12 – Modeling Application Usage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2013%20%u2013%20Determining%20Individual%20User%20Data%20and%20Variances&amp;amp;referringTitle=Home"&gt;Chapter 13 – Determining Individual User Data and Variances&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VI, Execute Tests&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2014%20%u2013%20Test%20Execution&amp;amp;referringTitle=Home"&gt;Chapter 14 – Test Execution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VII, Analyze Results and Report&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2015%20%u2013%20Key%20Mathematic%20Principles%20for%20Performance%20Testers&amp;amp;referringTitle=Home"&gt;Chapter 15 – Key Mathematic Principles for Performance Testers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2016%20%u2013%20Performance%20Test%20Reporting%20Fundamentals&amp;amp;referringTitle=Home"&gt;Chapter 16 – Performance Test Reporting Fundamentals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VIII, Performance-Testing Techniques&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2017%20%u2013%20Load-Testing%20Web%20Applications&amp;amp;referringTitle=Home"&gt;Chapter 17 – Load-Testing Web Applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2018%20%u2013%20Stress-Testing%20Web%20Applications&amp;amp;referringTitle=Home"&gt;Chapter 18 – Stress-Testing Web Applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Reference
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Glossary&amp;amp;referringTitle=Home"&gt;Glossary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Team
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Core Team: &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Contributors%20and%20Reviewers&amp;amp;referringTitle=Home"&gt;Contributors and Reviewers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>mycodeplexuser</author><pubDate>Thu, 28 Aug 2008 00:15:20 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20080828121520A</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Home&amp;version=18</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;
patterns &amp;amp; practices Performance Testing Guidance for Web Applications
&lt;/h2&gt;Welcome to the &lt;b&gt;patterns &amp;amp; practices Performance Testing Guidance for Web Applications&lt;/b&gt;!  This guide shows you an end-to-end approach for implementing performance testing.  Whether you are new to performance testing, or looking for ways to improve your current performance testing approach, you will find insights that you can tailor for your specific scenarios.  This guide is related to our &lt;a href="http://www.CodePlex.com/PerfTesting" class="externalLink"&gt;Performance Testing Guidance Project &lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. - &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=PerfTestingGuide&amp;amp;DownloadId=23765" alt="ptg.gif" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Download the Guide
&lt;/h3&gt;The Final Release is Available!  Start using the guide today, while we continue to make improvements.&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Release/ProjectReleases.aspx?ReleaseId=6690" class="externalLink"&gt;Download the Performance Testing Guidance for Web Applications Guide &lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Parts
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Part 1, Introduction to Performance Testing&lt;/li&gt;&lt;li&gt;Part II, Exemplar Performance Testing Approaches&lt;/li&gt;&lt;li&gt;Part III, Identify the Test Environment&lt;/li&gt;&lt;li&gt;Part IV, Identify Performance Acceptance Criteria&lt;/li&gt;&lt;li&gt;Part V, Plan and Design Tests&lt;/li&gt;&lt;li&gt;Part VI, Execute Tests&lt;/li&gt;&lt;li&gt;Part VII, Analyze Results and Report&lt;/li&gt;&lt;li&gt;Part VIII, Performance Testing Techniques&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;
Forewards
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Foreword%20By%20Alberto%20Savoia&amp;amp;referringTitle=Home"&gt;Foreword By Alberto Savoia&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Foreword%20By%20Rico%20Mariani&amp;amp;referringTitle=Home"&gt;Foreword By Rico Mariani&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;
Chapters
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Introduction&amp;amp;referringTitle=Home"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Part 1, Introduction to Performance Testing&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%201%20%u2013%20Fundamentals%20of%20Web%20Application%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 1 – Fundamentals of Web Application Performance Testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%202%20%u2013%20Types%20of%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 2 – Types of Performance Testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%203%20%u2013%20Risks%20Addressed%20Through%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 3 – Risks Addressed Through Performance Testing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part II, Exemplar Performance Testing Approaches&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%204%20%u2013%20Web%20Application%20Performance%20Testing%20Core%20Activities&amp;amp;referringTitle=Home"&gt;Chapter 4 – Web Application Performance Testing Core Activities&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%205%20%u2013%20Coordinating%20Performance%20Testing%20with%20an%20Iteration-Based%20Process&amp;amp;referringTitle=Home"&gt;Chapter 5 – Coordinating Performance Testing with an Iteration-Based Process&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%206%20%u2013%20Managing%20an%20Agile%20Performance%20Test%20Cycle&amp;amp;referringTitle=Home"&gt;Chapter 6 – Managing an Agile Performance Test Cycle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%207%20%u2013%20Managing%20the%20Performance%20Test%20Cycle%20in%20a%20Regulated%20%28CMMI%29%20Environment&amp;amp;referringTitle=Home"&gt;Chapter 7 – Managing the Performance Test Cycle in a Regulated (CMMI) Environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part III, Identify the Test Environment&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%208%20%u2013%20Evaluating%20Systems%20to%20Increase%20Performance-Testing%20Effectiveness&amp;amp;referringTitle=Home"&gt;Chapter 8 – Evaluating Systems to Increase Performance-Testing Effectiveness&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part IV, Identify Performance Acceptance Criteria&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%209%20%u2013%20Determining%20Performance%20Testing%20Objectives&amp;amp;referringTitle=Home"&gt;Chapter 9 – Determining Performance Testing Objectives&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2010%20%u2013%20Quantifying%20End-User%20Response%20Time%20Goals&amp;amp;referringTitle=Home"&gt;Chapter 10 – Quantifying End-User Response Time Goals&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2011%20%u2013%20Consolidating%20Various%20Types%20of%20Performance%20Acceptance%20Criteria&amp;amp;referringTitle=Home"&gt;Chapter 11 – Consolidating Various Types of Performance Acceptance Criteria&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part V, Plan and Design Tests&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2012%20%u2013%20Modeling%20Application%20Usage&amp;amp;referringTitle=Home"&gt;Chapter 12 – Modeling Application Usage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2013%20%u2013%20Determining%20Individual%20User%20Data%20and%20Variances&amp;amp;referringTitle=Home"&gt;Chapter 13 – Determining Individual User Data and Variances&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VI, Execute Tests&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2014%20%u2013%20Test%20Execution&amp;amp;referringTitle=Home"&gt;Chapter 14 – Test Execution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VII, Analyze Results and Report&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2015%20%u2013%20Key%20Mathematic%20Principles%20for%20Performance%20Testers&amp;amp;referringTitle=Home"&gt;Chapter 15 – Key Mathematic Principles for Performance Testers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2016%20%u2013%20Performance%20Test%20Reporting%20Fundamentals&amp;amp;referringTitle=Home"&gt;Chapter 16 – Performance Test Reporting Fundamentals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VIII, Performance-Testing Techniques&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2017%20%u2013%20Load-Testing%20Web%20Applications&amp;amp;referringTitle=Home"&gt;Chapter 17 – Load-Testing Web Applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2018%20%u2013%20Stress-Testing%20Web%20Applications&amp;amp;referringTitle=Home"&gt;Chapter 18 – Stress-Testing Web Applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Reference
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Glossary&amp;amp;referringTitle=Home"&gt;Glossary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Team
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Core Team: &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Contributors%20and%20Reviewers&amp;amp;referringTitle=Home"&gt;Contributors and Reviewers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Related Sites
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.CodePlex.com/PerfTesting" class="externalLink"&gt;patterns &amp;amp; practices Performance Testing Guidance &lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>sbarber</author><pubDate>Sat, 15 Dec 2007 04:50:42 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20071215045042A</guid></item><item><title>UPDATED WIKI: Foreword By Rico Mariani</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Foreword By Rico Mariani&amp;version=1</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Foreword By Rico Mariani
&lt;/h3&gt; &lt;br /&gt;It’s hard to imagine anything than is considered a more arcane art than performance tuning – unless perhaps it is performance testing.  &lt;br /&gt;If you were to go door to door between groups just within Microsoft you would find many different approaches with various different degrees of quality or success.  Pretty much everyone will vow that their approach is certainly the one that is best for them – except maybe an honest few, who might say something more modest.  Some have good reason to be confident because they really have studied the space very well.  In my own experience at least, the situation is not altogether different outside of Microsoft than it is inside where I do my work.  It’s a mixed bag, on a good day.&lt;br /&gt;If I had to describe the most common problem I see in this space with one word it would imbalance.  There are many aspects to testing and teams tend to unduly focus on one or another and then sometimes get blindsided by the ones they missed.  Perhaps they’re only thinking about throughput – what about consumption?   Perhaps only latency – what about smooth delivery?  Perhaps only cost  -- what about scalability?  &lt;br /&gt;You get great performance by balancing the key factors, considering them in your designs and then tracking them carefully.  So perhaps the greatest service that a book like Performance Testing Guidance for Web Applications can provide to you is a broader understanding of what all the factors might be so that you have an excellent menu of considerations to choose from in your testing plan.  Luckily, that is just what you’re going to get.&lt;br /&gt;The Guidance that follows provides a great survey of the most important considerations:  From how to understand and quantify your desired end user experience, how to choose key resources for study, to advice on summarizing results in a statistically meaningful way, and how to fit these practices into different software lifecycles.  And even though the focus is squarely on web applications, the teachings are actually much more general and can easily be applied for many different kinds of applications.&lt;br /&gt;Great engineering comes from creating predictable results at predictable costs. In fact, I like to say that if you’re not measuring you’re not engineering.  This volume will provide you with the performance testing fundamentals to give you the ongoing metrics you need to do great engineering.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Rico Mariani&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Chief Architect of Visual Studio&lt;/b&gt; &lt;br /&gt;&lt;b&gt;Microsoft Corporation&lt;/b&gt; &lt;br /&gt;&lt;b&gt;July, 2007&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;Rico Mariani began his career at Microsoft in 1988, working on language products beginning with Microsoft&amp;#174; C version 6.0, and contributed there until the release of the Microsoft Visual C++&amp;#174; version 5.0 development system. In 1995, Rico became development manager for what was to become the &amp;quot;Sidewalk&amp;quot; project, which started his 7 years of platform work on various MSN technologies. In the summer of 2002, Rico returned to the Developer Division to as a Performance Architect on the CLR team.  His performance work led to his most recent assignment as Chief Architect of Visual Studio. Rico's interests include compilers and language theory, databases, 3-D art, and good fiction.&lt;/i&gt;&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Wed, 29 Aug 2007 20:09:34 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Foreword By Rico Mariani 20070829080934P</guid></item><item><title>UPDATED WIKI: Foreword By Alberto Savoia</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Foreword By Alberto Savoia&amp;version=1</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Foreword By Alberto Savoia
&lt;/h3&gt; &lt;br /&gt;Testing the performance of web applications is easy.  It’s easy to design unrealistic scenarios.  Easy to collect and measure irrelevant performance data.  And, even if you manage to design a sound scenario and collect the right data, it’s easy to use the wrong statistical methods to summarize and present the results.&lt;br /&gt; &lt;br /&gt;Starting in the late 90s, through the peak of the Internet bubble and beyond, I spent a lot of time testing the performance of web applications.  During that period, I designed and led several mission-critical web performance and load tests for high-profile Internet companies.  Working with the in-house performance &lt;i&gt;experts&lt;/i&gt; at each company was very revealing – and quite frightening.  Most of the engineers assigned to work on web application performance were smart, hard-working, and dedicated; they invested in expensive software and hardware, read the right books, and followed the &lt;i&gt;best practices&lt;/i&gt; of the day.  But, somehow, the results of their performance measurements and predictions did not match reality.  In some cases the performance tests &lt;i&gt;over&lt;/i&gt;estimated the performance and scalability of the web applications – leading to embarrassing and costly crashes when the web application was deployed.  In other cases, they &lt;i&gt;under&lt;/i&gt;estimated capacity and scalability – leading to unnecessary spending on hardware and infrastructure.  The errors in these tests were not small; some tests overestimated or underestimated actual performance and capacity by an order of magnitude or more! How is this possible?&lt;br /&gt; &lt;br /&gt;Based on my experience, the majority of gross errors in web application performance testing are the result of oversimplification.  More precisely, they are the result oversimplification of user behavior and oversimplification in summarizing and reporting test results.  Imagine a transportation engineer estimating traffic patterns for a proposed stretch of highway by assuming that most drivers will drive at the same average speed, break and accelerate with the same response time and at the same rate, and never change lanes. A simple – but completely worthless – scenario.  Or imagine the same transportation engineer reporting that there are no traffic issues because the average speed is 57mph – without bringing up that during rush-hour the average speed is 25mph. A simple, but very misleading, result.  Unfortunately, most web application performance testers commit errors of oversimplification as bad, or worse, as the ones committed by our hypothetical transportation engineer.&lt;br /&gt; &lt;br /&gt;I am all for simplicity but, as Albert Einstein once said: “Make everything as simple as possible, but not simpler.”  When it comes to testing the performance of web applications, that’s exactly what this remarkable – and much needed – book teaches you.  The authors leverage their passion, experience, and hard-earned knowledge and provide you with the broad, thorough, and extensible foundation you need to tackle web performance testing the right way. &lt;i&gt;Performance Testing Guidance for Web Applications&lt;/i&gt; does not get bogged down with unnecessary details, but it does make sure that you know about – and don’t overlook – the key parameters and variables that you need to take into account in designing, conducting, and analyzing your tests.&lt;br /&gt; &lt;br /&gt;If you are new to web performance testing, this book will get you started on the right path and save you a lot of time and embarrassment.  Even if you are a seasoned web performance testing veteran, I am confident that this book will provide you with new insights and, most likely, have you slap your forehead a few times as you read about some common and familiar mistakes.  In either case, &lt;i&gt;Performance Testing Guidance for Web Applications&lt;/i&gt;, is a must-have for any web performance engineer bookshelf.&lt;br /&gt; &lt;br /&gt;&lt;b&gt;Alberto Savoia&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Founder and CTO, Agitar Software Inc.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;July, 2007&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;Author of: “&lt;i&gt;The Science and Art of Web Site Load Testing&lt;/i&gt;”, “&lt;i&gt;Web Load Test Planning&lt;/i&gt;”, and “&lt;i&gt;Trade Secrets from a Web Testing Expert&lt;/i&gt;”.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Wed, 29 Aug 2007 20:07:53 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Foreword By Alberto Savoia 20070829080753P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Home&amp;version=17</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;
patterns &amp;amp; practices Performance Testing Guidance for Web Applications
&lt;/h2&gt;Welcome to the &lt;b&gt;patterns &amp;amp; practices Performance Testing Guidance for Web Applications&lt;/b&gt;!  This guide shows you an end-to-end approach for implementing performance testing.  Whether you are new to performance testing, or looking for ways to improve your current performance testing approach, you will find insights that you can tailor for your specific scenarios.  This guide is related to our &lt;a href="http://www.CodePlex.com/PerfTesting" class="externalLink"&gt;Performance Testing Guidance Project &lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. - &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=12962" alt="PerfTestGuide.gif" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Download the Guide
&lt;/h3&gt;The Final Release is Available!  Start using the guide today, while we continue to make improvements.&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Release/ProjectReleases.aspx?ReleaseId=6690" class="externalLink"&gt;Download the Performance Testing Guidance for Web Applications Guide &lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Parts
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Part 1, Introduction to Performance Testing&lt;/li&gt;&lt;li&gt;Part II, Exemplar Performance Testing Approaches&lt;/li&gt;&lt;li&gt;Part III, Identify the Test Environment&lt;/li&gt;&lt;li&gt;Part IV, Identify Performance Acceptance Criteria&lt;/li&gt;&lt;li&gt;Part V, Plan and Design Tests&lt;/li&gt;&lt;li&gt;Part VI, Execute Tests&lt;/li&gt;&lt;li&gt;Part VII, Analyze Results and Report&lt;/li&gt;&lt;li&gt;Part VIII, Performance Testing Techniques&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;
Forewards
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Foreword%20By%20Alberto%20Savoia&amp;amp;referringTitle=Home"&gt;Foreword By Alberto Savoia&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Foreword%20By%20Rico%20Mariani&amp;amp;referringTitle=Home"&gt;Foreword By Rico Mariani&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;
Chapters
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Introduction&amp;amp;referringTitle=Home"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Part 1, Introduction to Performance Testing&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%201%20%u2013%20Fundamentals%20of%20Web%20Application%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 1 – Fundamentals of Web Application Performance Testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%202%20%u2013%20Types%20of%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 2 – Types of Performance Testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%203%20%u2013%20Risks%20Addressed%20Through%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 3 – Risks Addressed Through Performance Testing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part II, Exemplar Performance Testing Approaches&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%204%20%u2013%20Web%20Application%20Performance%20Testing%20Core%20Activities&amp;amp;referringTitle=Home"&gt;Chapter 4 – Web Application Performance Testing Core Activities&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%205%20%u2013%20Coordinating%20Performance%20Testing%20with%20an%20Iteration-Based%20Process&amp;amp;referringTitle=Home"&gt;Chapter 5 – Coordinating Performance Testing with an Iteration-Based Process&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%206%20%u2013%20Managing%20an%20Agile%20Performance%20Test%20Cycle&amp;amp;referringTitle=Home"&gt;Chapter 6 – Managing an Agile Performance Test Cycle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%207%20%u2013%20Managing%20the%20Performance%20Test%20Cycle%20in%20a%20Regulated%20%28CMMI%29%20Environment&amp;amp;referringTitle=Home"&gt;Chapter 7 – Managing the Performance Test Cycle in a Regulated (CMMI) Environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part III, Identify the Test Environment&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%208%20%u2013%20Evaluating%20Systems%20to%20Increase%20Performance-Testing%20Effectiveness&amp;amp;referringTitle=Home"&gt;Chapter 8 – Evaluating Systems to Increase Performance-Testing Effectiveness&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part IV, Identify Performance Acceptance Criteria&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%209%20%u2013%20Determining%20Performance%20Testing%20Objectives&amp;amp;referringTitle=Home"&gt;Chapter 9 – Determining Performance Testing Objectives&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2010%20%u2013%20Quantifying%20End-User%20Response%20Time%20Goals&amp;amp;referringTitle=Home"&gt;Chapter 10 – Quantifying End-User Response Time Goals&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2011%20%u2013%20Consolidating%20Various%20Types%20of%20Performance%20Acceptance%20Criteria&amp;amp;referringTitle=Home"&gt;Chapter 11 – Consolidating Various Types of Performance Acceptance Criteria&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part V, Plan and Design Tests&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2012%20%u2013%20Modeling%20Application%20Usage&amp;amp;referringTitle=Home"&gt;Chapter 12 – Modeling Application Usage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2013%20%u2013%20Determining%20Individual%20User%20Data%20and%20Variances&amp;amp;referringTitle=Home"&gt;Chapter 13 – Determining Individual User Data and Variances&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VI, Execute Tests&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2014%20%u2013%20Test%20Execution&amp;amp;referringTitle=Home"&gt;Chapter 14 – Test Execution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VII, Analyze Results and Report&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2015%20%u2013%20Key%20Mathematic%20Principles%20for%20Performance%20Testers&amp;amp;referringTitle=Home"&gt;Chapter 15 – Key Mathematic Principles for Performance Testers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2016%20%u2013%20Performance%20Test%20Reporting%20Fundamentals&amp;amp;referringTitle=Home"&gt;Chapter 16 – Performance Test Reporting Fundamentals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VIII, Performance-Testing Techniques&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2017%20%u2013%20Load-Testing%20Web%20Applications&amp;amp;referringTitle=Home"&gt;Chapter 17 – Load-Testing Web Applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2018%20%u2013%20Stress-Testing%20Web%20Applications&amp;amp;referringTitle=Home"&gt;Chapter 18 – Stress-Testing Web Applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Reference
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Glossary&amp;amp;referringTitle=Home"&gt;Glossary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Team
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Core Team: &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Contributors%20and%20Reviewers&amp;amp;referringTitle=Home"&gt;Contributors and Reviewers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Related Sites
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.CodePlex.com/PerfTesting" class="externalLink"&gt;patterns &amp;amp; practices Performance Testing Guidance &lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Wed, 29 Aug 2007 20:04:56 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20070829080456P</guid></item><item><title>UPDATED WIKI: Home</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Home&amp;version=16</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;
patterns &amp;amp; practices Performance Testing Guidance for Web Applications
&lt;/h2&gt;Welcome to the &lt;b&gt;patterns &amp;amp; practices Performance Testing Guidance for Web Applications&lt;/b&gt;!  This guide shows you an end-to-end approach for implementing performance testing.  Whether you are new to performance testing, or looking for ways to improve your current performance testing approach, you will find insights that you can tailor for your specific scenarios.  This guide is related to our &lt;a href="http://www.CodePlex.com/PerfTesting" class="externalLink"&gt;Performance Testing Guidance Project &lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. - &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=12962" alt="PerfTestGuide.gif" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Download the Guide
&lt;/h3&gt;The Final Release is Available!  Start using the guide today, while we continue to make improvements.&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Release/ProjectReleases.aspx?ReleaseId=6690" class="externalLink"&gt;Download the Performance Testing Guidance for Web Applications Guide &lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Parts
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Part 1, Introduction to Performance Testing&lt;/li&gt;&lt;li&gt;Part II, Exemplar Performance Testing Approaches&lt;/li&gt;&lt;li&gt;Part III, Identify the Test Environment&lt;/li&gt;&lt;li&gt;Part IV, Identify Performance Acceptance Criteria&lt;/li&gt;&lt;li&gt;Part V, Plan and Design Tests&lt;/li&gt;&lt;li&gt;Part VI, Execute Tests&lt;/li&gt;&lt;li&gt;Part VII, Analyze Results and Report&lt;/li&gt;&lt;li&gt;Part VIII, Performance Testing Techniques&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Chapters
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Introduction&amp;amp;referringTitle=Home"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Part 1, Introduction to Performance Testing&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%201%20%u2013%20Fundamentals%20of%20Web%20Application%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 1 – Fundamentals of Web Application Performance Testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%202%20%u2013%20Types%20of%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 2 – Types of Performance Testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%203%20%u2013%20Risks%20Addressed%20Through%20Performance%20Testing&amp;amp;referringTitle=Home"&gt;Chapter 3 – Risks Addressed Through Performance Testing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part II, Exemplar Performance Testing Approaches&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%204%20%u2013%20Web%20Application%20Performance%20Testing%20Core%20Activities&amp;amp;referringTitle=Home"&gt;Chapter 4 – Web Application Performance Testing Core Activities&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%205%20%u2013%20Coordinating%20Performance%20Testing%20with%20an%20Iteration-Based%20Process&amp;amp;referringTitle=Home"&gt;Chapter 5 – Coordinating Performance Testing with an Iteration-Based Process&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%206%20%u2013%20Managing%20an%20Agile%20Performance%20Test%20Cycle&amp;amp;referringTitle=Home"&gt;Chapter 6 – Managing an Agile Performance Test Cycle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%207%20%u2013%20Managing%20the%20Performance%20Test%20Cycle%20in%20a%20Regulated%20%28CMMI%29%20Environment&amp;amp;referringTitle=Home"&gt;Chapter 7 – Managing the Performance Test Cycle in a Regulated (CMMI) Environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part III, Identify the Test Environment&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%208%20%u2013%20Evaluating%20Systems%20to%20Increase%20Performance-Testing%20Effectiveness&amp;amp;referringTitle=Home"&gt;Chapter 8 – Evaluating Systems to Increase Performance-Testing Effectiveness&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part IV, Identify Performance Acceptance Criteria&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%209%20%u2013%20Determining%20Performance%20Testing%20Objectives&amp;amp;referringTitle=Home"&gt;Chapter 9 – Determining Performance Testing Objectives&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2010%20%u2013%20Quantifying%20End-User%20Response%20Time%20Goals&amp;amp;referringTitle=Home"&gt;Chapter 10 – Quantifying End-User Response Time Goals&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2011%20%u2013%20Consolidating%20Various%20Types%20of%20Performance%20Acceptance%20Criteria&amp;amp;referringTitle=Home"&gt;Chapter 11 – Consolidating Various Types of Performance Acceptance Criteria&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part V, Plan and Design Tests&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2012%20%u2013%20Modeling%20Application%20Usage&amp;amp;referringTitle=Home"&gt;Chapter 12 – Modeling Application Usage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2013%20%u2013%20Determining%20Individual%20User%20Data%20and%20Variances&amp;amp;referringTitle=Home"&gt;Chapter 13 – Determining Individual User Data and Variances&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VI, Execute Tests&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2014%20%u2013%20Test%20Execution&amp;amp;referringTitle=Home"&gt;Chapter 14 – Test Execution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VII, Analyze Results and Report&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2015%20%u2013%20Key%20Mathematic%20Principles%20for%20Performance%20Testers&amp;amp;referringTitle=Home"&gt;Chapter 15 – Key Mathematic Principles for Performance Testers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2016%20%u2013%20Performance%20Test%20Reporting%20Fundamentals&amp;amp;referringTitle=Home"&gt;Chapter 16 – Performance Test Reporting Fundamentals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VIII, Performance-Testing Techniques&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2017%20%u2013%20Load-Testing%20Web%20Applications&amp;amp;referringTitle=Home"&gt;Chapter 17 – Load-Testing Web Applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2018%20%u2013%20Stress-Testing%20Web%20Applications&amp;amp;referringTitle=Home"&gt;Chapter 18 – Stress-Testing Web Applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Reference
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Glossary&amp;amp;referringTitle=Home"&gt;Glossary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Team
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Core Team: &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Contributors%20and%20Reviewers&amp;amp;referringTitle=Home"&gt;Contributors and Reviewers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Related Sites
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.CodePlex.com/PerfTesting" class="externalLink"&gt;patterns &amp;amp; practices Performance Testing Guidance &lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Mon, 27 Aug 2007 20:24:33 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Home 20070827082433P</guid></item><item><title>UPDATED WIKI: Contributors and Reviewers</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Contributors and Reviewers&amp;version=17</link><description>&lt;div class="wikidoc"&gt;
&lt;h2&gt;
Contributors and Reviewers
&lt;/h2&gt;&lt;h3&gt;
Microsoft Contributors / Reviewers
&lt;/h3&gt;Alan Ridlehoover; Clint Huffman; Edmund Wong; Ken Perilman; Larry Brader; Mark Tomlinson; Paul Williams; Pete Coupland; Rico Mariani&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
External Contributors/Reviewers
&lt;/h3&gt;Alberto Savoia; Ben Simo; Cem Kaner; Chris Loosley; Corey Goldberg; Dawn Haynes; Derek Mead; Karen N. Johnson; Mike Bonar; Pradeep Soundararajan; Richard Leeke; Roland Stens; Ross Collard; Steven Woody&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 19:08:24 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Contributors and Reviewers 20070823070824P</guid></item><item><title>UPDATED WIKI: Chapter 18 – Stress-Testing Web Applications</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 18 %25u2013 Stress-Testing Web Applications&amp;version=2</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 18 – Stress Testing Web Applications
&lt;/h3&gt;- &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Understand the key concepts of stress testing.&lt;/li&gt;&lt;li&gt;Learn how to stress-test a Web application.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;&lt;i&gt;Stress testing&lt;/i&gt; is a type of performance testing focused on determining an application’s robustness, availability, and reliability under extreme conditions. The goal of stress testing is to identify application issues that arise or become apparent only under extreme conditions. These conditions can include heavy loads, high concurrency, or limited computational resources. Proper stress testing is useful in finding synchronization and timing bugs, interlock problems, priority problems, and resource loss bugs. The idea is to stress a system to the breaking point in order to find bugs that will make that break potentially harmful. The system is not expected to process the overload without adequate resources, but to behave (e.g., fail) in an acceptable manner (e.g., not corrupting or losing data). &lt;br /&gt; &lt;br /&gt;Stress tests typically involve simulating one or more key production scenarios under a variety of stressful conditions. For example, you might deploy your application on a server that is already running a processor-intensive application; in this way, your application is immediately “starved” of processor resources and must compete with the other application for processor cycles. You can also stress-test a single Web page or even a single item such as a stored procedure or class. &lt;br /&gt; &lt;br /&gt;This chapter presents a high-level introduction to stress-testing a Web application. Stress testing can help you identify application issues that surface only under extreme conditions.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Examples of Stress Conditions
&lt;/h4&gt;Examples of stress conditions include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Excessive volume in terms of either users or data; examples might include a denial of service (DoS) attack or a situation where a widely viewed news item prompts a large number of users to visit a Web site during a three-minute period.&lt;/li&gt;&lt;li&gt;Resource reduction such as a disk drive failure. &lt;/li&gt;&lt;li&gt;Unexpected sequencing.&lt;/li&gt;&lt;li&gt;Unexpected outages/outage recovery.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Examples of Stress-Related Symptoms 
&lt;/h4&gt;Examples of stress-related symptoms include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Data is lost or corrupted.&lt;/li&gt;&lt;li&gt;Resource utilization remains unacceptably high after the stress is removed.&lt;/li&gt;&lt;li&gt;Application components fail to respond.&lt;/li&gt;&lt;li&gt;Unhandled exceptions are presented to the end user.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Chapter
&lt;/h3&gt;Use this chapter to understand the key concepts of stress testing and the steps involved in stress-testing a Web application. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “Input” and “Output” sections to understand the key inputs for stress-testing a Web application and the key outcomes of this type of testing. &lt;/li&gt;&lt;li&gt;Use the “Approach for Stress Testing” section to get** an overview of the approach for stress-testing a Web application, and as quick reference guide for you and your team.&lt;/li&gt;&lt;li&gt;Use the various steps sections to understand the details of each step involved in stress-testing a Web application.&lt;/li&gt;&lt;li&gt;Use the “Usage Scenario for Stress Testing” section to understand various real-world scenarios where stress testing is employed.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Input
&lt;/h3&gt;To perform stress testing, you are likely to use as reference one or more of the following items:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Results from previous stress tests&lt;/li&gt;&lt;li&gt;Application usage characteristics (scenarios)&lt;/li&gt;&lt;li&gt;Concerns about those scenarios under extreme conditions&lt;/li&gt;&lt;li&gt;Workload profile characteristics&lt;/li&gt;&lt;li&gt;Current peak load capacity (obtained from load testing)&lt;/li&gt;&lt;li&gt;Hardware and network architecture and data&lt;/li&gt;&lt;li&gt;Disaster-risk assessment (e.g., likelihood of blackouts, earthquakes, etc.)&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Output
&lt;/h3&gt;Output from a stress test may include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Measures of the application under stressful conditions&lt;/li&gt;&lt;li&gt;Symptoms of the application under stress&lt;/li&gt;&lt;li&gt;Information the team can use to address robustness, availability, and reliability  &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Approach for Stress Testing
&lt;/h3&gt;The following steps are involved in stress-testing a Web application:&lt;br /&gt;&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Step1 - Identify test objectives.&lt;/b&gt;  Identify the objectives of stress testing in terms of the desired outcomes of the testing activity. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 2 - Identify key scenario(s).&lt;/b&gt;  Identify the application scenario or cases that need to be stress-tested to identify potential problems.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 3 - Identify the workload.&lt;/b&gt;  Identify the workload that you want to apply to the scenarios identified during the “Identify objectives” step. This is based on the workload and peak load capacity inputs.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 4 - Identify metrics.&lt;/b&gt;  Identify the metrics that you want to collect about the application’s performance. Base these metrics on the potential problems identified for the scenarios you identified during the “Identify objectives” step.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 5 - Create test cases.&lt;/b&gt;  Create the test cases in which you define steps for running a single test, as well as your expected results.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 6 - Simulate load.&lt;/b&gt;  Use test tools to simulate the required load for each test case and capture the metric data results.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 7 - Analyze results.&lt;/b&gt;  Analyze the metric data captured during the test.&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt; &lt;br /&gt;These steps are graphically represented below; the following sections discuss each step in detail.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17770" alt="Fig18.1.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 18.1&lt;/b&gt; Stress Testing Steps_&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 1 - Identify Test Objectives
&lt;/h3&gt;Asking yourself or others the following questions can help in identifying the desired outcomes of your stress testing:&lt;br /&gt;&lt;ol&gt;
&lt;li&gt;&lt;i&gt;Is the purpose of the test to identify the ways the system can possibly fail catastrophically in production?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Is it to provide information to the team in order to build defenses against catastrophic failures?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Is it to identify how the application behaves when system resources such as memory, disk space, network bandwidth, or processor cycles are depleted?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Is it to ensure that functionality does not break under stress?&lt;/i&gt; For example, there may be cases where operational performance metrics meet the objectives, but the functionality of the application is failing to meet them — orders are not inserted in the database, the application is not returning the complete product information in searches, form controls are not being populated properly, redirects to custom error pages are occurring during the stress testing, and so on.&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;&lt;h3&gt;
Step 2 - Identify Key Scenario(s)
&lt;/h3&gt;To get the most value out of a stress test, the test needs to focus on the behavior of the usage scenario or scenarios that matter most to the overall success of the application. To identify these scenarios, you generally start by defining a single scenario that you want to stress-test in order to identify a potential performance issue. Consider these guidelines when choosing appropriate scenarios:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Select scenarios based on how critical they are to overall application performance.&lt;/li&gt;&lt;li&gt;Try to test those operations that are most likely to affect performance. These might include operations that perform intensive locking and synchronization, long transactions, and disk-intensive input/output (I/O) operations.&lt;/li&gt;&lt;li&gt;Base your scenario selection on the specific areas of your application identified as potential bottlenecks by load-testing data. Although you should have fine-tuned and removed the bottlenecks after load testing, you should still stress-test the system in these areas to verify how well your changes handle extreme stress levels.&lt;/li&gt;
&lt;/ul&gt;  &lt;br /&gt;Examples of scenarios that may need to be stress tested separately from other usage scenarios for a typical e-commerce application include the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;An order-processing scenario that updates the inventory for a particular product. This functionality has the potential to exhibit locking and synchronization problems.&lt;/li&gt;&lt;li&gt;A scenario that pages through search results based on user queries. If a user specifies a particularly wide query, there could be a large impact on memory utilization. For example, memory utilization could be affected if a query returns an entire data table.&lt;/li&gt;
&lt;/ul&gt;  &lt;br /&gt;&lt;h3&gt;
Step 3 - Identify the Workload 
&lt;/h3&gt;The load you apply to a particular scenario should stress the system sufficiently beyond threshold limits to enable you to observe the consequences of the stress condition. One method to determine the load at which an application begins to exhibit signs of stress is to incrementally increase the load and observe the application behavior under various load conditions. The key is to systematically test with various workloads until you create a significant failure. These variations may be accomplished by adding more users, reducing delay times, adding or reducing the number and type of user activities represented, or adjusting test data. &lt;br /&gt; &lt;br /&gt;For example, a stress test could be designed to simulate every registered user of the application attempting to log on during one 30-second period. This would simulate a situation where the application suddenly became available again after a period of downtime and all users were anxiously refreshing their browsers, waiting for the application to come back online. Although this situation does not occur frequently in the real world, it does happen often enough for there to be real value in learning how the application will respond if it does. &lt;br /&gt; &lt;br /&gt;Remember to represent the workload with accurate and realistic test data — type and volume, different user logins, product IDs, product categories, and so on — allowing you to simulate important failures such as deadlocks or resource consumption. &lt;br /&gt; &lt;br /&gt;The following activities are generally useful in identifying appropriate workloads for stress testing:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Identify the distribution of work.&lt;/b&gt;  For each key scenario, identify the distribution of work to be simulated. The distribution is based on the number and type of users executing the scenario during the stress test. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Estimate peak user loads.&lt;/b&gt;  Identify the maximum expected number of users during peak load conditions for the application. Using the work distribution you identified for each scenario, calculate the percentage of user load per key scenario.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Identify the anti-profile.&lt;/b&gt;  As an alternative, you can start by applying an anti-profile to the normal workload. In an &lt;i&gt;anti-profile&lt;/i&gt;, the workload distributions are inverted for the scenario under consideration. For example, if the normal load for the order-processing scenario is 10 percent of the total workload, the anti-profile would be 90 percent of the total workload. The remaining load can be distributed among the other scenarios. Using an anti-profile can serve as a valuable starting point for your stress tests because it ensures that the critical scenarios are subjected to loads beyond the normal load conditions.&lt;/li&gt;
&lt;/ul&gt;  &lt;br /&gt;&lt;h3&gt;
Step 4 - Identify Metrics
&lt;/h3&gt;When identified and captured correctly, metrics provide information about how well or poorly your application is performing as compared to your performance objectives. In addition, metrics can help you identify problem areas and bottlenecks within your application. &lt;br /&gt; &lt;br /&gt;Using the desired performance characteristics identified during the “Identify objectives” step, identify metrics to be captured that focus on potential pitfalls for each scenario. The metrics can be related to both performance and throughput goals as well as providing information about potential problems; for example, custom performance counters that have been embedded in the application. &lt;br /&gt; &lt;br /&gt;When identifying metrics, you will use either direct objectives or indicators that are directly or indirectly related to those objectives. The following table describes performance metrics in terms of related performance objectives.&lt;br /&gt; &lt;br /&gt;&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Performance metrics	&lt;/th&gt;&lt;th&gt;Category&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Base set of metrics	&lt;/th&gt;&lt;th&gt; &lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Processor	&lt;/th&gt;&lt;th&gt; Processor utilization&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Process	&lt;/th&gt;&lt;th&gt; Memory consumption&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Processor utilization&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Process recycles&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Memory	&lt;/th&gt;&lt;th&gt; Memory available&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Memory utilization&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Disk	&lt;/th&gt;&lt;th&gt; Disk utilization&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Network	&lt;/th&gt;&lt;th&gt; Network utilization&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Transactions/business metrics	&lt;/th&gt;&lt;th&gt; Transactions/sec&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Transactions succeeded&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Transactions failed&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Orders succeeded&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Orders failed&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Threading	&lt;/th&gt;&lt;th&gt; Contentions per second&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Deadlocks&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Thread allocation&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Response times	&lt;/th&gt;&lt;th&gt; Transactions times&lt;/th&gt;
&lt;/tr&gt;
&lt;/table&gt;    &lt;br /&gt;&lt;h3&gt;
Step 5 - Create Test Cases 
&lt;/h3&gt;Identifying workload profiles and key scenarios generally does not provide all of the information necessary to implement and execute test cases. Additional inputs for completely designing a stress test include performance objectives, workload characteristics, test data, test environments, and identified metrics. Each test design should mention the expected results and/or the key data of interest to be collected, in such a way that each test case can be marked as a “pass,” “fail,” or “inconclusive” after execution. &lt;br /&gt; &lt;br /&gt;The following is an example of a test case based on the order-placement scenario.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Test 1 – Place Order Scenario
&lt;/h4&gt;&lt;b&gt;Workload:&lt;/b&gt; 1,000 simultaneous users. &lt;br /&gt;&lt;b&gt;Think time:&lt;/b&gt; Use a random think time between 1 and 10 seconds in the test script after each operation. &lt;br /&gt;&lt;b&gt;Test Duration:&lt;/b&gt; Run the test for two days. &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Expected results:&lt;/b&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Application hosting process should not recycle because of deadlock or memory consumption. &lt;/li&gt;&lt;li&gt;Throughput should not fall below 35 requests per second. &lt;/li&gt;&lt;li&gt;Response time should not be greater than 7 seconds for 95 percent of total transactions completed. &lt;/li&gt;&lt;li&gt;“Server busy” errors should not be more than 10 percent of the total response because of contention-related issues. &lt;/li&gt;&lt;li&gt;Order transactions should not fail during test execution. Database entries should match the “Transactions succeeded” count.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Step 6 - Simulate Load
&lt;/h3&gt;After you have completed the previous steps to an appropriate degree, you should be ready to simulate the load executing the stress test. Typically, test execution follows these steps: &lt;br /&gt;&lt;ol&gt;
&lt;li&gt;Validate that the test environment matches the configuration that you were expecting and/or designed your test for.&lt;/li&gt;&lt;li&gt;Ensure that both the test and the test environment are correctly configured for metrics collection.  &lt;/li&gt;&lt;li&gt;Before running the test, execute a quick “smoke test” to make sure that the test script and remote performance counters are working correctly.&lt;/li&gt;&lt;li&gt;Reset the system (unless your scenario is to do otherwise) and start a formal test execution.&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; Make sure that the client (a.k.a. load generator) computers that you use to generate load are not overly stressed. Utilization of resources such as processor and memory should remain low enough to ensure that the load-generation environment is not itself a bottleneck.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 7 - Analyze Results
&lt;/h3&gt;Analyze the captured data and compare the results against the metric’s accepted level. If the results indicate that your required performance levels have not been attained, analyze and fix the cause of the bottleneck. To address observed issues, you might need to do one or more of the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Perform a design review. &lt;/li&gt;&lt;li&gt;Perform a code review.&lt;/li&gt;&lt;li&gt;Run stress tests in environments where it is possible to debug possible causes of failures, during test execution.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;In situations where performance issues are observed, but only under conditions that are deemed to be unlikely enough to warrant tuning at the current time, you may want to consider conducting additional tests to identify an early indicator for the issue in order to avoid unwanted surprises.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Usage Scenarios for Stress Testing
&lt;/h3&gt;The following are examples of how stress testing is applied in practice:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Application stress testing.&lt;/b&gt;  This type of test typically focuses on more than one transaction on the system under stress, without the isolation of components. With application stress testing, you are likely to uncover defects related to data locking and blocking, network congestion, and performance bottlenecks on different components or methods across the entire application. Because the test scope is a single application, it is common to use this type of stress testing after a robust application load-testing effort, or as a last test phase for capacity planning. It is also common to find defects related to race conditions and general memory leaks from shared code or components.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Transactional stress testing.&lt;/b&gt;  Transactional stress tests aim at working at a transactional level with load volumes that go beyond those of the anticipated production operations. These tests are focused on validating behavior under stressful conditions, such as high load with same resource constraints, when testing the entire application. Because the test isolates an individual transaction, or group of transactions, it allows for a very specific understanding of throughput capacities and other characteristics for individual components without the added complication of inter-component interactions that occurs in testing at the application level. These tests are useful for tuning, optimizing, and finding error conditions at the specific component level.   &lt;/li&gt;&lt;li&gt;&lt;b&gt;*Systemic stress testing.*&lt;/b&gt;  In this type of test, stress or extreme load conditions are generated across multiple applications running on the same system, thereby pushing the boundaries of the applications’ expected capabilities to an extreme. The goal of systemic stress testing is to uncover defects in situations where different applications block one another and compete for system resources such as memory, processor cycles, disk space, and network bandwidth. This type of testing is also known as &lt;i&gt;integration stress testing&lt;/i&gt; or &lt;i&gt;consolidation stress testing&lt;/i&gt;. In large-scale systemic stress tests, you stress all of the applications together in the same consolidated environment. Some organizations choose to perform this type of testing in a larger test lab facility, sometimes with the hardware or software vendor’s assistance.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Exploratory Stress Testing
&lt;/h3&gt;&lt;i&gt;Exploratory stress testing&lt;/i&gt; is an approach to subjecting a system, application, or component to a set of unusual parameters or conditions that are unlikely to occur in the real world but are nevertheless possible. In general, exploratory testing can be viewed as an interactive process of simultaneous learning, test design, and test execution. Most often, exploratory stress tests are designed by modifying existing tests and/or working with application/system administrators to create unlikely but possible conditions in the system. This type of stress testing is seldom conducted in isolation because it is typically conducted to determine if more systematic stress testing is called for related to a particular failure mode. The following are some examples of exploratory stress tests to determine the answer to “How will the system respond if…?”&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;All of the users logged on at the same time.&lt;/li&gt;&lt;li&gt;The load balancer suddenly failed.&lt;/li&gt;&lt;li&gt;All of the servers started their scheduled virus scan at the same time during a period of peak load.&lt;/li&gt;&lt;li&gt;The database went offline during peak usage.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;Stress testing allows you to identify potential application issues that surface only under extreme conditions. Such conditions range from exhaustion of system resources such as memory, processor cycles, network bandwidth, and disk capacity to excessive load due to unpredictable usage patterns, common in Web applications. &lt;br /&gt; &lt;br /&gt;Stress testing centers around objectives and key user scenarios with an emphasis on the robustness, reliability, and stability of the application. The effectiveness of stress testing relies on applying the correct methodology and being able to effectively analyze testing results. Applying the correct methodology is dependent on the capacity for reproducing workload conditions for both user load and volume of data, reproducing key scenarios, and interpreting the key performance metrics.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 19:06:51 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 18 – Stress-Testing Web Applications 20070823070651P</guid></item><item><title>UPDATED WIKI: Chapter 18 – Stress-Testing Web Applications</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 18 %25u2013 Stress-Testing Web Applications&amp;version=1</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 18 – Stress Testing Web Applications
&lt;/h3&gt;- &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Understand the key concepts of stress testing.&lt;/li&gt;&lt;li&gt;Learn how to stress-test a Web application.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;&lt;i&gt;Stress testing&lt;/i&gt; is a type of performance testing focused on determining an application’s robustness, availability, and reliability under extreme conditions. The goal of stress testing is to identify application issues that arise or become apparent only under extreme conditions. These conditions can include heavy loads, high concurrency, or limited computational resources. Proper stress testing is useful in finding synchronization and timing bugs, interlock problems, priority problems, and resource loss bugs. The idea is to stress a system to the breaking point in order to find bugs that will make that break potentially harmful. The system is not expected to process the overload without adequate resources, but to behave (e.g., fail) in an acceptable manner (e.g., not corrupting or losing data). &lt;br /&gt; &lt;br /&gt;Stress tests typically involve simulating one or more key production scenarios under a variety of stressful conditions. For example, you might deploy your application on a server that is already running a processor-intensive application; in this way, your application is immediately “starved” of processor resources and must compete with the other application for processor cycles. You can also stress-test a single Web page or even a single item such as a stored procedure or class. &lt;br /&gt; &lt;br /&gt;This chapter presents a high-level introduction to stress-testing a Web application. Stress testing can help you identify application issues that surface only under extreme conditions.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Examples of Stress Conditions
&lt;/h4&gt;Examples of stress conditions include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Excessive volume in terms of either users or data; examples might include a denial of service (DoS) attack or a situation where a widely viewed news item prompts a large number of users to visit a Web site during a three-minute period.&lt;/li&gt;&lt;li&gt;Resource reduction such as a disk drive failure. &lt;/li&gt;&lt;li&gt;Unexpected sequencing.&lt;/li&gt;&lt;li&gt;Unexpected outages/outage recovery.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Examples of Stress-Related Symptoms 
&lt;/h4&gt;Examples of stress-related symptoms include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Data is lost or corrupted.&lt;/li&gt;&lt;li&gt;Resource utilization remains unacceptably high after the stress is removed.&lt;/li&gt;&lt;li&gt;Application components fail to respond.&lt;/li&gt;&lt;li&gt;Unhandled exceptions are presented to the end user.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Chapter
&lt;/h3&gt;Use this chapter to understand the key concepts of stress testing and the steps involved in stress-testing a Web application. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “Input” and “Output” sections to understand the key inputs for stress-testing a Web application and the key outcomes of this type of testing. &lt;/li&gt;&lt;li&gt;Use the “Approach for Stress Testing” section to get** an overview of the approach for stress-testing a Web application, and as quick reference guide for you and your team.&lt;/li&gt;&lt;li&gt;Use the various steps sections to understand the details of each step involved in stress-testing a Web application.&lt;/li&gt;&lt;li&gt;Use the “Usage Scenario for Stress Testing” section to understand various real-world scenarios where stress testing is employed.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Input
&lt;/h3&gt;To perform stress testing, you are likely to use as reference one or more of the following items:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Results from previous stress tests&lt;/li&gt;&lt;li&gt;Application usage characteristics (scenarios)&lt;/li&gt;&lt;li&gt;Concerns about those scenarios under extreme conditions&lt;/li&gt;&lt;li&gt;Workload profile characteristics&lt;/li&gt;&lt;li&gt;Current peak load capacity (obtained from load testing)&lt;/li&gt;&lt;li&gt;Hardware and network architecture and data&lt;/li&gt;&lt;li&gt;Disaster-risk assessment (e.g., likelihood of blackouts, earthquakes, etc.)&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Output
&lt;/h3&gt;Output from a stress test may include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Measures of the application under stressful conditions&lt;/li&gt;&lt;li&gt;Symptoms of the application under stress&lt;/li&gt;&lt;li&gt;Information the team can use to address robustness, availability, and reliability  &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Approach for Stress Testing
&lt;/h3&gt;The following steps are involved in stress-testing a Web application:&lt;br /&gt;&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Step1 - Identify test objectives.&lt;/b&gt;  Identify the objectives of stress testing in terms of the desired outcomes of the testing activity. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 2 - Identify key scenario(s).&lt;/b&gt;  Identify the application scenario or cases that need to be stress-tested to identify potential problems.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 3 - Identify the workload.&lt;/b&gt;  Identify the workload that you want to apply to the scenarios identified during the “Identify objectives” step. This is based on the workload and peak load capacity inputs.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 4 - Identify metrics.&lt;/b&gt;  Identify the metrics that you want to collect about the application’s performance. Base these metrics on the potential problems identified for the scenarios you identified during the “Identify objectives” step.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 5 - Create test cases.&lt;/b&gt;  Create the test cases in which you define steps for running a single test, as well as your expected results.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 6 - Simulate load.&lt;/b&gt;  Use test tools to simulate the required load for each test case and capture the metric data results.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Step 7 - Analyze results.&lt;/b&gt;  Analyze the metric data captured during the test.&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt; &lt;br /&gt;These steps are graphically represented below; the following sections discuss each step in detail.&lt;br /&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig18.1.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 18.1&lt;/b&gt; Stress Testing Steps_&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 1 - Identify Test Objectives
&lt;/h3&gt;Asking yourself or others the following questions can help in identifying the desired outcomes of your stress testing:&lt;br /&gt;&lt;ol&gt;
&lt;li&gt;&lt;i&gt;Is the purpose of the test to identify the ways the system can possibly fail catastrophically in production?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Is it to provide information to the team in order to build defenses against catastrophic failures?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Is it to identify how the application behaves when system resources such as memory, disk space, network bandwidth, or processor cycles are depleted?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Is it to ensure that functionality does not break under stress?&lt;/i&gt; For example, there may be cases where operational performance metrics meet the objectives, but the functionality of the application is failing to meet them — orders are not inserted in the database, the application is not returning the complete product information in searches, form controls are not being populated properly, redirects to custom error pages are occurring during the stress testing, and so on.&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;&lt;h3&gt;
Step 2 - Identify Key Scenario(s)
&lt;/h3&gt;To get the most value out of a stress test, the test needs to focus on the behavior of the usage scenario or scenarios that matter most to the overall success of the application. To identify these scenarios, you generally start by defining a single scenario that you want to stress-test in order to identify a potential performance issue. Consider these guidelines when choosing appropriate scenarios:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Select scenarios based on how critical they are to overall application performance.&lt;/li&gt;&lt;li&gt;Try to test those operations that are most likely to affect performance. These might include operations that perform intensive locking and synchronization, long transactions, and disk-intensive input/output (I/O) operations.&lt;/li&gt;&lt;li&gt;Base your scenario selection on the specific areas of your application identified as potential bottlenecks by load-testing data. Although you should have fine-tuned and removed the bottlenecks after load testing, you should still stress-test the system in these areas to verify how well your changes handle extreme stress levels.&lt;/li&gt;
&lt;/ul&gt;  &lt;br /&gt;Examples of scenarios that may need to be stress tested separately from other usage scenarios for a typical e-commerce application include the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;An order-processing scenario that updates the inventory for a particular product. This functionality has the potential to exhibit locking and synchronization problems.&lt;/li&gt;&lt;li&gt;A scenario that pages through search results based on user queries. If a user specifies a particularly wide query, there could be a large impact on memory utilization. For example, memory utilization could be affected if a query returns an entire data table.&lt;/li&gt;
&lt;/ul&gt;  &lt;br /&gt;&lt;h3&gt;
Step 3 - Identify the Workload 
&lt;/h3&gt;The load you apply to a particular scenario should stress the system sufficiently beyond threshold limits to enable you to observe the consequences of the stress condition. One method to determine the load at which an application begins to exhibit signs of stress is to incrementally increase the load and observe the application behavior under various load conditions. The key is to systematically test with various workloads until you create a significant failure. These variations may be accomplished by adding more users, reducing delay times, adding or reducing the number and type of user activities represented, or adjusting test data. &lt;br /&gt; &lt;br /&gt;For example, a stress test could be designed to simulate every registered user of the application attempting to log on during one 30-second period. This would simulate a situation where the application suddenly became available again after a period of downtime and all users were anxiously refreshing their browsers, waiting for the application to come back online. Although this situation does not occur frequently in the real world, it does happen often enough for there to be real value in learning how the application will respond if it does. &lt;br /&gt; &lt;br /&gt;Remember to represent the workload with accurate and realistic test data — type and volume, different user logins, product IDs, product categories, and so on — allowing you to simulate important failures such as deadlocks or resource consumption. &lt;br /&gt; &lt;br /&gt;The following activities are generally useful in identifying appropriate workloads for stress testing:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Identify the distribution of work.&lt;/b&gt;  For each key scenario, identify the distribution of work to be simulated. The distribution is based on the number and type of users executing the scenario during the stress test. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Estimate peak user loads.&lt;/b&gt;  Identify the maximum expected number of users during peak load conditions for the application. Using the work distribution you identified for each scenario, calculate the percentage of user load per key scenario.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Identify the anti-profile.&lt;/b&gt;  As an alternative, you can start by applying an anti-profile to the normal workload. In an &lt;i&gt;anti-profile&lt;/i&gt;, the workload distributions are inverted for the scenario under consideration. For example, if the normal load for the order-processing scenario is 10 percent of the total workload, the anti-profile would be 90 percent of the total workload. The remaining load can be distributed among the other scenarios. Using an anti-profile can serve as a valuable starting point for your stress tests because it ensures that the critical scenarios are subjected to loads beyond the normal load conditions.&lt;/li&gt;
&lt;/ul&gt;  &lt;br /&gt;&lt;h3&gt;
Step 4 - Identify Metrics
&lt;/h3&gt;When identified and captured correctly, metrics provide information about how well or poorly your application is performing as compared to your performance objectives. In addition, metrics can help you identify problem areas and bottlenecks within your application. &lt;br /&gt; &lt;br /&gt;Using the desired performance characteristics identified during the “Identify objectives” step, identify metrics to be captured that focus on potential pitfalls for each scenario. The metrics can be related to both performance and throughput goals as well as providing information about potential problems; for example, custom performance counters that have been embedded in the application. &lt;br /&gt; &lt;br /&gt;When identifying metrics, you will use either direct objectives or indicators that are directly or indirectly related to those objectives. The following table describes performance metrics in terms of related performance objectives.&lt;br /&gt; &lt;br /&gt;&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;Performance metrics	&lt;/th&gt;&lt;th&gt;Category&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Base set of metrics	&lt;/th&gt;&lt;th&gt; &lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Processor	&lt;/th&gt;&lt;th&gt; Processor utilization&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Process	&lt;/th&gt;&lt;th&gt; Memory consumption&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Processor utilization&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Process recycles&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Memory	&lt;/th&gt;&lt;th&gt; Memory available&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Memory utilization&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Disk	&lt;/th&gt;&lt;th&gt; Disk utilization&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Network	&lt;/th&gt;&lt;th&gt; Network utilization&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Transactions/business metrics	&lt;/th&gt;&lt;th&gt; Transactions/sec&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Transactions succeeded&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Transactions failed&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Orders succeeded&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Orders failed&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Threading	&lt;/th&gt;&lt;th&gt; Contentions per second&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Deadlocks&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt; &lt;/th&gt;&lt;th&gt; Thread allocation&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;th&gt;Response times	&lt;/th&gt;&lt;th&gt; Transactions times&lt;/th&gt;
&lt;/tr&gt;
&lt;/table&gt;    &lt;br /&gt;&lt;h3&gt;
Step 5 - Create Test Cases 
&lt;/h3&gt;Identifying workload profiles and key scenarios generally does not provide all of the information necessary to implement and execute test cases. Additional inputs for completely designing a stress test include performance objectives, workload characteristics, test data, test environments, and identified metrics. Each test design should mention the expected results and/or the key data of interest to be collected, in such a way that each test case can be marked as a “pass,” “fail,” or “inconclusive” after execution. &lt;br /&gt; &lt;br /&gt;The following is an example of a test case based on the order-placement scenario.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Test 1 – Place Order Scenario
&lt;/h4&gt;&lt;b&gt;Workload:&lt;/b&gt; 1,000 simultaneous users. &lt;br /&gt;&lt;b&gt;Think time:&lt;/b&gt; Use a random think time between 1 and 10 seconds in the test script after each operation. &lt;br /&gt;&lt;b&gt;Test Duration:&lt;/b&gt; Run the test for two days. &lt;br /&gt; &lt;br /&gt;&lt;b&gt;Expected results:&lt;/b&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Application hosting process should not recycle because of deadlock or memory consumption. &lt;/li&gt;&lt;li&gt;Throughput should not fall below 35 requests per second. &lt;/li&gt;&lt;li&gt;Response time should not be greater than 7 seconds for 95 percent of total transactions completed. &lt;/li&gt;&lt;li&gt;“Server busy” errors should not be more than 10 percent of the total response because of contention-related issues. &lt;/li&gt;&lt;li&gt;Order transactions should not fail during test execution. Database entries should match the “Transactions succeeded” count.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Step 6 - Simulate Load
&lt;/h3&gt;After you have completed the previous steps to an appropriate degree, you should be ready to simulate the load executing the stress test. Typically, test execution follows these steps: &lt;br /&gt;&lt;ol&gt;
&lt;li&gt;Validate that the test environment matches the configuration that you were expecting and/or designed your test for.&lt;/li&gt;&lt;li&gt;Ensure that both the test and the test environment are correctly configured for metrics collection.  &lt;/li&gt;&lt;li&gt;Before running the test, execute a quick “smoke test” to make sure that the test script and remote performance counters are working correctly.&lt;/li&gt;&lt;li&gt;Reset the system (unless your scenario is to do otherwise) and start a formal test execution.&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; Make sure that the client (a.k.a. load generator) computers that you use to generate load are not overly stressed. Utilization of resources such as processor and memory should remain low enough to ensure that the load-generation environment is not itself a bottleneck.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 7 - Analyze Results
&lt;/h3&gt;Analyze the captured data and compare the results against the metric’s accepted level. If the results indicate that your required performance levels have not been attained, analyze and fix the cause of the bottleneck. To address observed issues, you might need to do one or more of the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Perform a design review. &lt;/li&gt;&lt;li&gt;Perform a code review.&lt;/li&gt;&lt;li&gt;Run stress tests in environments where it is possible to debug possible causes of failures, during test execution.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;In situations where performance issues are observed, but only under conditions that are deemed to be unlikely enough to warrant tuning at the current time, you may want to consider conducting additional tests to identify an early indicator for the issue in order to avoid unwanted surprises.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Usage Scenarios for Stress Testing
&lt;/h3&gt;The following are examples of how stress testing is applied in practice:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Application stress testing.&lt;/b&gt;  This type of test typically focuses on more than one transaction on the system under stress, without the isolation of components. With application stress testing, you are likely to uncover defects related to data locking and blocking, network congestion, and performance bottlenecks on different components or methods across the entire application. Because the test scope is a single application, it is common to use this type of stress testing after a robust application load-testing effort, or as a last test phase for capacity planning. It is also common to find defects related to race conditions and general memory leaks from shared code or components.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Transactional stress testing.&lt;/b&gt;  Transactional stress tests aim at working at a transactional level with load volumes that go beyond those of the anticipated production operations. These tests are focused on validating behavior under stressful conditions, such as high load with same resource constraints, when testing the entire application. Because the test isolates an individual transaction, or group of transactions, it allows for a very specific understanding of throughput capacities and other characteristics for individual components without the added complication of inter-component interactions that occurs in testing at the application level. These tests are useful for tuning, optimizing, and finding error conditions at the specific component level.   &lt;/li&gt;&lt;li&gt;&lt;b&gt;*Systemic stress testing.*&lt;/b&gt;  In this type of test, stress or extreme load conditions are generated across multiple applications running on the same system, thereby pushing the boundaries of the applications’ expected capabilities to an extreme. The goal of systemic stress testing is to uncover defects in situations where different applications block one another and compete for system resources such as memory, processor cycles, disk space, and network bandwidth. This type of testing is also known as &lt;i&gt;integration stress testing&lt;/i&gt; or &lt;i&gt;consolidation stress testing&lt;/i&gt;. In large-scale systemic stress tests, you stress all of the applications together in the same consolidated environment. Some organizations choose to perform this type of testing in a larger test lab facility, sometimes with the hardware or software vendor’s assistance.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Exploratory Stress Testing
&lt;/h3&gt;&lt;i&gt;Exploratory stress testing&lt;/i&gt; is an approach to subjecting a system, application, or component to a set of unusual parameters or conditions that are unlikely to occur in the real world but are nevertheless possible. In general, exploratory testing can be viewed as an interactive process of simultaneous learning, test design, and test execution. Most often, exploratory stress tests are designed by modifying existing tests and/or working with application/system administrators to create unlikely but possible conditions in the system. This type of stress testing is seldom conducted in isolation because it is typically conducted to determine if more systematic stress testing is called for related to a particular failure mode. The following are some examples of exploratory stress tests to determine the answer to “How will the system respond if…?”&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;All of the users logged on at the same time.&lt;/li&gt;&lt;li&gt;The load balancer suddenly failed.&lt;/li&gt;&lt;li&gt;All of the servers started their scheduled virus scan at the same time during a period of peak load.&lt;/li&gt;&lt;li&gt;The database went offline during peak usage.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;Stress testing allows you to identify potential application issues that surface only under extreme conditions. Such conditions range from exhaustion of system resources such as memory, processor cycles, network bandwidth, and disk capacity to excessive load due to unpredictable usage patterns, common in Web applications. &lt;br /&gt; &lt;br /&gt;Stress testing centers around objectives and key user scenarios with an emphasis on the robustness, reliability, and stability of the application. The effectiveness of stress testing relies on applying the correct methodology and being able to effectively analyze testing results. Applying the correct methodology is dependent on the capacity for reproducing workload conditions for both user load and volume of data, reproducing key scenarios, and interpreting the key performance metrics.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 19:06:15 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 18 – Stress-Testing Web Applications 20070823070615P</guid></item><item><title>UPDATED WIKI: Chapter 17 – Load-Testing Web Applications</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 17 %25u2013 Load-Testing Web Applications&amp;version=2</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 17 – Load-Testing Web Applications
&lt;/h3&gt;- &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Understand the key concepts of load testing.&lt;/li&gt;&lt;li&gt;Learn how to load-test a Web application.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;This chapter explains how to load-test a Web application. Load testing helps to identify the maximum operating capacity of an application as well as any bottlenecks that might interfere with its operating at capacity. The basic approach to performing load testing on a Web application is:&lt;br /&gt;&lt;ol&gt;
&lt;li&gt;Identify the performance-critical scenarios.&lt;/li&gt;&lt;li&gt;Identify the workload profile for distributing the entire load among the key scenarios.&lt;/li&gt;&lt;li&gt;Identify the metrics that you want to collect in order to verify them against your performance objectives.&lt;/li&gt;&lt;li&gt;Design tests to simulate the load.&lt;/li&gt;&lt;li&gt;Use tools to implement the load according to the designed tests, and capture the metrics.&lt;/li&gt;&lt;li&gt;Analyze the metric data captured during the tests. &lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;By using an iterative testing process, these steps should help you achieve your performance objectives.&lt;br /&gt; &lt;br /&gt;There are many reasons for load-testing a Web application. The most basic type of load testing is used to determine the Web application’s behavior under both normal and anticipated peak load conditions. As you begin load testing, it is recommended that you start with a small number of virtual users and then incrementally increase the load from normal to peak. You can then observe how your application performs during this gradually increasing load condition. Eventually, you will cross a threshold limit for your performance objectives. For example, you might continue to increase the load until the server processor utilization reaches 75 percent, or when end-user response times exceed 8 seconds. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Chapter
&lt;/h3&gt;Use this chapter to understand the key concepts of load testing and the steps involved in load-testing Web applications. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “Input” and “Output” sections to understand the key inputs for load testing a Web application and the key outcomes of doing so. &lt;/li&gt;&lt;li&gt;Use the “Approach for Load Testing” section to get** an overview of the approach for load testing a Web application, and as quick reference guide for you and your team.&lt;/li&gt;&lt;li&gt;Use the various steps sections to understand the details of each step involved in load-testing a Web application.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Input
&lt;/h3&gt;The following are useful inputs for load-testing a Web application:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Performance-critical usage scenarios&lt;/li&gt;&lt;li&gt;Workload models&lt;/li&gt;&lt;li&gt;Performance acceptance criteria&lt;/li&gt;&lt;li&gt;Performance metrics associated with the acceptance criteria&lt;/li&gt;&lt;li&gt;Interview feedback from the designer or developer of the Web application&lt;/li&gt;&lt;li&gt;Interview feedback from end users of the application&lt;/li&gt;&lt;li&gt;Interview feedback from the operations personnel who will maintain and manage the application&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Output
&lt;/h3&gt;The main outcomes that load testing helps you to accomplish are:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Updated test plans and test designs for load and performance testing&lt;/li&gt;&lt;li&gt;Various performance measures such as throughput, response time, and resource utilization&lt;/li&gt;&lt;li&gt;Potential bottlenecks that need to be analyzed in the white-box testing phase&lt;/li&gt;&lt;li&gt;The behavior of the application at various load levels&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Approach for Load Testing
&lt;/h3&gt;The following steps are involved in load-testing a Web application:&lt;br /&gt;&lt;ol&gt;
&lt;li&gt;Step 1 - Identify performance acceptance criteria&lt;/li&gt;&lt;li&gt;Step 2 - Identify key scenarios&lt;/li&gt;&lt;li&gt;Step 3 - Create a workload model&lt;/li&gt;&lt;li&gt;Step 4 - Identify the target load levels&lt;/li&gt;&lt;li&gt;Step 5 - Identify metrics&lt;/li&gt;&lt;li&gt;Step 6 - Design specific tests&lt;/li&gt;&lt;li&gt;Step 7 - Run tests &lt;/li&gt;&lt;li&gt;Step 8 - Analyze the results&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;These steps are graphically represented below. The sections that follow discuss each step in detail.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17769" alt="Fig17.1.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 17.1&lt;/b&gt; Load Testing Steps_&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 1 - Identify Performance Acceptance Criteria
&lt;/h3&gt;Identifying performance acceptance criteria is most valuable when initiated early in the application’s development life cycle. It is frequently valuable to record the acceptance criteria for your application and store them in a place and format that is available to the entire team for review and comment. Criteria are typically determined by balancing your business, industry, technology, competitive, and user requirements.&lt;br /&gt; &lt;br /&gt;Test objectives frequently include the following: &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Response time.&lt;/b&gt;  For example, the product catalog must be displayed in less than 3 seconds.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Throughput.&lt;/b&gt;  For example, the system must support 100 transactions per second.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Resource utilization.&lt;/b&gt;  A frequently overlooked aspect is the amount of resources your application is consuming, in terms of processor, memory, disk input output (I/O), and network I/O.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Maximum user load.&lt;/b&gt;  This test objective determines how many users can run on a specific hardware configuration.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Business related metrics.&lt;/b&gt;  This objective is mapped to business volume at normal and peak values; for example, the number of orders or Help desk calls handled at a given time. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Step 2 - Identify Key Scenarios 
&lt;/h3&gt;&lt;i&gt;Scenarios&lt;/i&gt; are anticipated user paths that generally incorporate multiple application activities. Key scenarios are those for which you have specific performance goals, those considered to be high-risk, those that are most commonly used, or those with a significant performance impact. The basic steps for identifying key scenarios are.&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Identify all the scenarios for a Web application. For example, even the most basic e-commerce application must support the following user scenarios:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Browse catalog&lt;/li&gt;&lt;li&gt;Search for a product&lt;/li&gt;&lt;li&gt;Place an order &lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Identify the activities involved in each of the scenarios. For example, a “Place an Order” scenario will include the following activities:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Log on to the application.&lt;/li&gt;&lt;li&gt;Browse the product catalog.&lt;/li&gt;&lt;li&gt;Search for a specific product.&lt;/li&gt;&lt;li&gt;Add items to the shopping cart.&lt;/li&gt;&lt;li&gt;Validate credit card details and place an order. &lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Identify the scenarios that are most commonly executed or most resource-intensive; these will be the key scenarios used for load testing. For example, in an e-commerce application, browsing a catalog may be the most commonly executed scenario, whereas placing an order may be the most resource-intensive scenario because it accesses the database. &lt;/li&gt;&lt;ul&gt;
&lt;li&gt; The most commonly executed scenarios for an existing Web application can be determined by examining the log files.&lt;/li&gt;&lt;li&gt;The most commonly executed scenarios for a new Web application can be obtained from market research, historical data, market trends, and so on.&lt;/li&gt;&lt;li&gt;Resource-intensive scenarios can be identified by using design documents or the actual code implementation. The primary resources are: &lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Processor&lt;/li&gt;&lt;li&gt;Memory&lt;/li&gt;&lt;li&gt;Disk I/O&lt;/li&gt;&lt;li&gt;Network I/O&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;Once they have been identified, you will use these key scenarios to create workload profiles and to design load tests. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 3 - Create a Workload Model
&lt;/h3&gt;When defining workload distribution, consider the following key points for determining the characteristics for user scenarios:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;A user scenario is defined as a navigational path, including intermediate steps or activities, taken by the user to complete a task. This can also be thought of as a user session. &lt;/li&gt;&lt;li&gt;A user will typically pause between pages during a session. This is known as &lt;i&gt;user delay&lt;/i&gt; or &lt;i&gt;think time&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;A session will have an average duration when viewed across multiple users. It is important to account for this when defining the load levels that will translate into concurrent usage, overlapping users, or user sessions per unit of time.&lt;/li&gt;&lt;li&gt;Not all scenarios can be performed by a new user, a returning user, or either; know who you expect your primary users to be and test accordingly.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Step 4 - Identify Target Load Levels
&lt;/h3&gt;Identify the load levels to be applied to the workload distribution(s) identified during the previous step. The purpose of identifying target load levels is to ensure that your tests can be used to predict or compare a variety of production load conditions. The following are common inputs used for determining target load levels:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Business volume (both current and projected) as it relates to your performance objectives&lt;/li&gt;&lt;li&gt;Key scenarios&lt;/li&gt;&lt;li&gt;Distribution of work&lt;/li&gt;&lt;li&gt;Session characteristics (navigational path, duration, percentage of new users)&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;By combining the items above, you can determine the remaining details necessary to implement the workload model under a particular target load. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 5 - Identify Metrics
&lt;/h3&gt;There is a virtually unlimited number of metrics that can be collected during a performance test execution. However, collecting too many metrics can make analysis unwieldy as well as negatively impact the application’s actual performance. For these reasons, it is important to identify the metrics that are most relevant to your performance objectives and those that you anticipate will help you to identify bottlenecks. Only well-selected metrics that are analyzed correctly and contextually provide information of value.  &lt;br /&gt; &lt;br /&gt;The following are a few suggestions for identifying the metrics that will provide the most valuable information to your project:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Define questions related to your application performance that can be easily tested.&lt;/b&gt;  For example, what is the checkout response time when placing an order? How many orders are placed in a minute? These questions have definite answers.&lt;/li&gt;&lt;li&gt;&lt;b&gt;With the answers to these questions, determine quality goals for comparison against external expectations.&lt;/b&gt;  For example, checkout response time should be 30 seconds, and a maximum of 10 orders should be placed in a minute. The answers are based on market research, historical data, market trends, and so on. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Identify the metrics.&lt;/b&gt;  Using your list of performance-related questions and answers, identify the metrics that provide information related to those questions and answers. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Identify supporting metrics.&lt;/b&gt;  Using the same approach, you can identify lower-level metrics that focus on measuring the performance and identifying the bottlenecks in the system. When identifying low-level metrics, most teams find it valuable to determine a baseline for those metrics under single-user and/or normal load conditions. This helps you determine the acceptable load levels for your application. Baseline values help you analyze your application performance at varying load levels and serve as a starting point for trend analysis across builds or releases. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Reevaluate the metrics to be collected regularly.&lt;/b&gt;  Goals, priorities, risks, and current issues are bound to change over the course of a project. With each of these changes, different metrics may provide more value than the ones that have previously been identified. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;Additionally, to evaluate the performance of your application in more detail and to identify potential bottlenecks, it is frequently useful to monitor metrics in the following categories:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Network-specific metrics.&lt;/b&gt;  This set of metrics provides information about the overall health and efficiency of your network, including routers, switches, and gateways.&lt;/li&gt;&lt;li&gt;&lt;b&gt;System-related metrics.&lt;/b&gt;  This set of metrics helps you identify the resource utilization on your server. The resources being utilized are processor, memory, disk I/O, and network I/O.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Platform-specific metrics.&lt;/b&gt;  Platform-specific metrics are related to software that is used to host your application, such as the Microsoft .NET Framework common language runtime (CLR) and ASP.NET-related metrics.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Application-specific metrics.&lt;/b&gt;  These include custom performance counters inserted in your application code to monitor application health and identify performance issues. You might use custom counters to determine the number of concurrent threads waiting to acquire a particular lock, or the number of requests queued to make an outbound call to a Web service.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Service-level metrics.&lt;/b&gt;  These metrics can help to measure overall application throughput and latency, or they might be tied to specific business scenarios.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Business metrics.&lt;/b&gt;  These metrics are indicators of business-related information, such as the number of orders placed in a given timeframe.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Step 6 - Design Specific Tests
&lt;/h3&gt;Using your scenarios, key metrics, and workload analysis, you can now design specific tests to be conducted. Each test will generally have a different purpose, collect different data, include different scenarios, and have different target load levels. The key is to design tests that will help the team collect the information it needs in order to understand, evaluate, or tune the application. &lt;br /&gt; &lt;br /&gt;Points to consider when designing tests include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Do not change your test design because the design is difficult to implement in your tool. &lt;/li&gt;&lt;li&gt;If you cannot implement your test as designed, ensure that you record the details pertaining to the test that you do implement.&lt;/li&gt;&lt;li&gt;Ensure that the model contains all of the supplementary data needed to create the actual test.&lt;/li&gt;&lt;li&gt;Consider including invalid data in your performance tests. For example, include some users who mistype their password on the first attempt but get it correct on a second try. &lt;/li&gt;&lt;li&gt;First-time users usually spend significantly more time on each page or activity than experienced users.&lt;/li&gt;&lt;li&gt;The best possible test data is test data collected from a production database or log file.&lt;/li&gt;&lt;li&gt;Think about nonhuman system users and batch processes as well as end users. For example, there might be a batch process that runs to update the status of orders while users are performing activities on the site. In this situation, you would need to account for those processes because they might be consuming resources.&lt;/li&gt;&lt;li&gt;Do not get overly caught up in striving for perfection, and do not fall into the trap of oversimplification. In general, it is a good idea to start executing tests when you have a reasonable test designed and then enhance the design incrementally while collecting results.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Step 7 - Run Tests
&lt;/h3&gt;Poor load simulations can render all of the work in the previous activities useless. To understand the data collected from a test execution, the load simulation must reflect the test design. When the simulation does not reflect the test design, the results are prone to misinterpretation. Consider the following steps when preparing to simulate load:&lt;br /&gt; &lt;br /&gt;&lt;ol&gt;
&lt;li&gt;Configure the test environment in such a way that it mirrors your production environment as closely as possible, noting and accounting for all differences between the two.&lt;/li&gt;&lt;li&gt;Ensure that performance counters relevant for identified metrics and resource utilization are being measured and are not interfering with the accuracy of the simulation.&lt;/li&gt;&lt;li&gt;Use appropriate load-generation tools to create a load with the characteristics specified in your test design.&lt;/li&gt;&lt;li&gt;Using the load-generation tool(s), execute tests by first building up to the target load specified in your test design, in order to validate the correctness of the simulation. Some things to consider during test execution include:&lt;/li&gt;
&lt;/ol&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;Begin load testing with a small number of users distributed against your user profile, and then incrementally increase the load. It is important to allow time for the system to stabilize between increases in load while evaluating the correctness of the simulation. &lt;/li&gt;&lt;li&gt;Consider continuing to increase the load and record the behavior until you reach the threshold for the resources identified in your performance objectives, even if that load is beyond the target load specified in the test design. Information about when the system crosses identified thresholds is just as important as the value of the metrics at the target load of the test. &lt;/li&gt;&lt;li&gt;Similarly, it is frequently valuable to continue to increase the number of users until you run up against the service-level limits beyond which you would be violating your SLAs for throughput, response time, and resource utilization.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt;  Make sure that the client computers (agents) you use to generate load are not overly stressed. Resource utilization such as processor and memory must remain well below the utilization threshold values to ensure accurate test results.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 8 - Analyze the Results
&lt;/h3&gt;You can analyze the test results to find performance bottlenecks between each test run or after all testing has been completed. Analyzing the results correctly requires training and experience with graphing correlated response time and system data. &lt;br /&gt; &lt;br /&gt;The following are the steps for analyzing the data:&lt;br /&gt; &lt;br /&gt;&lt;ol&gt;
&lt;li&gt;Analyze the captured data and compare the results against the metric’s accepted level to determine whether the performance of the application being tested shows a trend toward or away from the performance objectives. &lt;/li&gt;&lt;li&gt;Analyze the measured metrics to diagnose potential bottlenecks. Based on the analysis, if required, capture additional metrics in subsequent test cycles. For example, suppose that during the first iteration of load tests, the process shows a marked increase in memory consumption, indicating a possible memory leak. In the subsequent iterations, additional memory counters related to generations can be captured to study the memory allocation pattern for the application.&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;Load testing helps to identify the maximum operating capacity of the application and any bottlenecks that might be degrading performance. &lt;br /&gt; &lt;br /&gt;The basic methodology for performing load testing on a Web application is to identify the performance-critical key scenarios; identify the workload profile for distributing all the load among the key scenarios; identify metrics that you want to collect in order to verify them against your performance objectives; create test cases that will be used to simulate the load test; use tools to simulate the load according to the test cases and capture the metrics; and finally, analyze the metrics data captured during the tests.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 18:49:14 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 17 – Load-Testing Web Applications 20070823064914P</guid></item><item><title>UPDATED WIKI: Chapter 17 – Load-Testing Web Applications</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 17 %25u2013 Load-Testing Web Applications&amp;version=1</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 17 – Load-Testing Web Applications
&lt;/h3&gt;- &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Understand the key concepts of load testing.&lt;/li&gt;&lt;li&gt;Learn how to load-test a Web application.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;This chapter explains how to load-test a Web application. Load testing helps to identify the maximum operating capacity of an application as well as any bottlenecks that might interfere with its operating at capacity. The basic approach to performing load testing on a Web application is:&lt;br /&gt;&lt;ol&gt;
&lt;li&gt;Identify the performance-critical scenarios.&lt;/li&gt;&lt;li&gt;Identify the workload profile for distributing the entire load among the key scenarios.&lt;/li&gt;&lt;li&gt;Identify the metrics that you want to collect in order to verify them against your performance objectives.&lt;/li&gt;&lt;li&gt;Design tests to simulate the load.&lt;/li&gt;&lt;li&gt;Use tools to implement the load according to the designed tests, and capture the metrics.&lt;/li&gt;&lt;li&gt;Analyze the metric data captured during the tests. &lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;By using an iterative testing process, these steps should help you achieve your performance objectives.&lt;br /&gt; &lt;br /&gt;There are many reasons for load-testing a Web application. The most basic type of load testing is used to determine the Web application’s behavior under both normal and anticipated peak load conditions. As you begin load testing, it is recommended that you start with a small number of virtual users and then incrementally increase the load from normal to peak. You can then observe how your application performs during this gradually increasing load condition. Eventually, you will cross a threshold limit for your performance objectives. For example, you might continue to increase the load until the server processor utilization reaches 75 percent, or when end-user response times exceed 8 seconds. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Chapter
&lt;/h3&gt;Use this chapter to understand the key concepts of load testing and the steps involved in load-testing Web applications. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “Input” and “Output” sections to understand the key inputs for load testing a Web application and the key outcomes of doing so. &lt;/li&gt;&lt;li&gt;Use the “Approach for Load Testing” section to get** an overview of the approach for load testing a Web application, and as quick reference guide for you and your team.&lt;/li&gt;&lt;li&gt;Use the various steps sections to understand the details of each step involved in load-testing a Web application.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Input
&lt;/h3&gt;The following are useful inputs for load-testing a Web application:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Performance-critical usage scenarios&lt;/li&gt;&lt;li&gt;Workload models&lt;/li&gt;&lt;li&gt;Performance acceptance criteria&lt;/li&gt;&lt;li&gt;Performance metrics associated with the acceptance criteria&lt;/li&gt;&lt;li&gt;Interview feedback from the designer or developer of the Web application&lt;/li&gt;&lt;li&gt;Interview feedback from end users of the application&lt;/li&gt;&lt;li&gt;Interview feedback from the operations personnel who will maintain and manage the application&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Output
&lt;/h3&gt;The main outcomes that load testing helps you to accomplish are:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Updated test plans and test designs for load and performance testing&lt;/li&gt;&lt;li&gt;Various performance measures such as throughput, response time, and resource utilization&lt;/li&gt;&lt;li&gt;Potential bottlenecks that need to be analyzed in the white-box testing phase&lt;/li&gt;&lt;li&gt;The behavior of the application at various load levels&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Approach for Load Testing
&lt;/h3&gt;The following steps are involved in load-testing a Web application:&lt;br /&gt;&lt;ol&gt;
&lt;li&gt;Step 1 - Identify performance acceptance criteria&lt;/li&gt;&lt;li&gt;Step 2 - Identify key scenarios&lt;/li&gt;&lt;li&gt;Step 3 - Create a workload model&lt;/li&gt;&lt;li&gt;Step 4 - Identify the target load levels&lt;/li&gt;&lt;li&gt;Step 5 - Identify metrics&lt;/li&gt;&lt;li&gt;Step 6 - Design specific tests&lt;/li&gt;&lt;li&gt;Step 7 - Run tests &lt;/li&gt;&lt;li&gt;Step 8 - Analyze the results&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;These steps are graphically represented below. The sections that follow discuss each step in detail.&lt;br /&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig17.1.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 17.1&lt;/b&gt; Load Testing Steps_&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 1 - Identify Performance Acceptance Criteria
&lt;/h3&gt;Identifying performance acceptance criteria is most valuable when initiated early in the application’s development life cycle. It is frequently valuable to record the acceptance criteria for your application and store them in a place and format that is available to the entire team for review and comment. Criteria are typically determined by balancing your business, industry, technology, competitive, and user requirements.&lt;br /&gt; &lt;br /&gt;Test objectives frequently include the following: &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Response time.&lt;/b&gt;  For example, the product catalog must be displayed in less than 3 seconds.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Throughput.&lt;/b&gt;  For example, the system must support 100 transactions per second.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Resource utilization.&lt;/b&gt;  A frequently overlooked aspect is the amount of resources your application is consuming, in terms of processor, memory, disk input output (I/O), and network I/O.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Maximum user load.&lt;/b&gt;  This test objective determines how many users can run on a specific hardware configuration.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Business related metrics.&lt;/b&gt;  This objective is mapped to business volume at normal and peak values; for example, the number of orders or Help desk calls handled at a given time. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Step 2 - Identify Key Scenarios 
&lt;/h3&gt;&lt;i&gt;Scenarios&lt;/i&gt; are anticipated user paths that generally incorporate multiple application activities. Key scenarios are those for which you have specific performance goals, those considered to be high-risk, those that are most commonly used, or those with a significant performance impact. The basic steps for identifying key scenarios are.&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Identify all the scenarios for a Web application. For example, even the most basic e-commerce application must support the following user scenarios:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Browse catalog&lt;/li&gt;&lt;li&gt;Search for a product&lt;/li&gt;&lt;li&gt;Place an order &lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Identify the activities involved in each of the scenarios. For example, a “Place an Order” scenario will include the following activities:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Log on to the application.&lt;/li&gt;&lt;li&gt;Browse the product catalog.&lt;/li&gt;&lt;li&gt;Search for a specific product.&lt;/li&gt;&lt;li&gt;Add items to the shopping cart.&lt;/li&gt;&lt;li&gt;Validate credit card details and place an order. &lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Identify the scenarios that are most commonly executed or most resource-intensive; these will be the key scenarios used for load testing. For example, in an e-commerce application, browsing a catalog may be the most commonly executed scenario, whereas placing an order may be the most resource-intensive scenario because it accesses the database. &lt;/li&gt;&lt;ul&gt;
&lt;li&gt; The most commonly executed scenarios for an existing Web application can be determined by examining the log files.&lt;/li&gt;&lt;li&gt;The most commonly executed scenarios for a new Web application can be obtained from market research, historical data, market trends, and so on.&lt;/li&gt;&lt;li&gt;Resource-intensive scenarios can be identified by using design documents or the actual code implementation. The primary resources are: &lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Processor&lt;/li&gt;&lt;li&gt;Memory&lt;/li&gt;&lt;li&gt;Disk I/O&lt;/li&gt;&lt;li&gt;Network I/O&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;Once they have been identified, you will use these key scenarios to create workload profiles and to design load tests. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 3 - Create a Workload Model
&lt;/h3&gt;When defining workload distribution, consider the following key points for determining the characteristics for user scenarios:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;A user scenario is defined as a navigational path, including intermediate steps or activities, taken by the user to complete a task. This can also be thought of as a user session. &lt;/li&gt;&lt;li&gt;A user will typically pause between pages during a session. This is known as &lt;i&gt;user delay&lt;/i&gt; or &lt;i&gt;think time&lt;/i&gt;.&lt;/li&gt;&lt;li&gt;A session will have an average duration when viewed across multiple users. It is important to account for this when defining the load levels that will translate into concurrent usage, overlapping users, or user sessions per unit of time.&lt;/li&gt;&lt;li&gt;Not all scenarios can be performed by a new user, a returning user, or either; know who you expect your primary users to be and test accordingly.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Step 4 - Identify Target Load Levels
&lt;/h3&gt;Identify the load levels to be applied to the workload distribution(s) identified during the previous step. The purpose of identifying target load levels is to ensure that your tests can be used to predict or compare a variety of production load conditions. The following are common inputs used for determining target load levels:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Business volume (both current and projected) as it relates to your performance objectives&lt;/li&gt;&lt;li&gt;Key scenarios&lt;/li&gt;&lt;li&gt;Distribution of work&lt;/li&gt;&lt;li&gt;Session characteristics (navigational path, duration, percentage of new users)&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;By combining the items above, you can determine the remaining details necessary to implement the workload model under a particular target load. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 5 - Identify Metrics
&lt;/h3&gt;There is a virtually unlimited number of metrics that can be collected during a performance test execution. However, collecting too many metrics can make analysis unwieldy as well as negatively impact the application’s actual performance. For these reasons, it is important to identify the metrics that are most relevant to your performance objectives and those that you anticipate will help you to identify bottlenecks. Only well-selected metrics that are analyzed correctly and contextually provide information of value.  &lt;br /&gt; &lt;br /&gt;The following are a few suggestions for identifying the metrics that will provide the most valuable information to your project:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Define questions related to your application performance that can be easily tested.&lt;/b&gt;  For example, what is the checkout response time when placing an order? How many orders are placed in a minute? These questions have definite answers.&lt;/li&gt;&lt;li&gt;&lt;b&gt;With the answers to these questions, determine quality goals for comparison against external expectations.&lt;/b&gt;  For example, checkout response time should be 30 seconds, and a maximum of 10 orders should be placed in a minute. The answers are based on market research, historical data, market trends, and so on. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Identify the metrics.&lt;/b&gt;  Using your list of performance-related questions and answers, identify the metrics that provide information related to those questions and answers. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Identify supporting metrics.&lt;/b&gt;  Using the same approach, you can identify lower-level metrics that focus on measuring the performance and identifying the bottlenecks in the system. When identifying low-level metrics, most teams find it valuable to determine a baseline for those metrics under single-user and/or normal load conditions. This helps you determine the acceptable load levels for your application. Baseline values help you analyze your application performance at varying load levels and serve as a starting point for trend analysis across builds or releases. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Reevaluate the metrics to be collected regularly.&lt;/b&gt;  Goals, priorities, risks, and current issues are bound to change over the course of a project. With each of these changes, different metrics may provide more value than the ones that have previously been identified. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;Additionally, to evaluate the performance of your application in more detail and to identify potential bottlenecks, it is frequently useful to monitor metrics in the following categories:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Network-specific metrics.&lt;/b&gt;  This set of metrics provides information about the overall health and efficiency of your network, including routers, switches, and gateways.&lt;/li&gt;&lt;li&gt;&lt;b&gt;System-related metrics.&lt;/b&gt;  This set of metrics helps you identify the resource utilization on your server. The resources being utilized are processor, memory, disk I/O, and network I/O.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Platform-specific metrics.&lt;/b&gt;  Platform-specific metrics are related to software that is used to host your application, such as the Microsoft .NET Framework common language runtime (CLR) and ASP.NET-related metrics.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Application-specific metrics.&lt;/b&gt;  These include custom performance counters inserted in your application code to monitor application health and identify performance issues. You might use custom counters to determine the number of concurrent threads waiting to acquire a particular lock, or the number of requests queued to make an outbound call to a Web service.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Service-level metrics.&lt;/b&gt;  These metrics can help to measure overall application throughput and latency, or they might be tied to specific business scenarios.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Business metrics.&lt;/b&gt;  These metrics are indicators of business-related information, such as the number of orders placed in a given timeframe.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Step 6 - Design Specific Tests
&lt;/h3&gt;Using your scenarios, key metrics, and workload analysis, you can now design specific tests to be conducted. Each test will generally have a different purpose, collect different data, include different scenarios, and have different target load levels. The key is to design tests that will help the team collect the information it needs in order to understand, evaluate, or tune the application. &lt;br /&gt; &lt;br /&gt;Points to consider when designing tests include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Do not change your test design because the design is difficult to implement in your tool. &lt;/li&gt;&lt;li&gt;If you cannot implement your test as designed, ensure that you record the details pertaining to the test that you do implement.&lt;/li&gt;&lt;li&gt;Ensure that the model contains all of the supplementary data needed to create the actual test.&lt;/li&gt;&lt;li&gt;Consider including invalid data in your performance tests. For example, include some users who mistype their password on the first attempt but get it correct on a second try. &lt;/li&gt;&lt;li&gt;First-time users usually spend significantly more time on each page or activity than experienced users.&lt;/li&gt;&lt;li&gt;The best possible test data is test data collected from a production database or log file.&lt;/li&gt;&lt;li&gt;Think about nonhuman system users and batch processes as well as end users. For example, there might be a batch process that runs to update the status of orders while users are performing activities on the site. In this situation, you would need to account for those processes because they might be consuming resources.&lt;/li&gt;&lt;li&gt;Do not get overly caught up in striving for perfection, and do not fall into the trap of oversimplification. In general, it is a good idea to start executing tests when you have a reasonable test designed and then enhance the design incrementally while collecting results.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Step 7 - Run Tests
&lt;/h3&gt;Poor load simulations can render all of the work in the previous activities useless. To understand the data collected from a test execution, the load simulation must reflect the test design. When the simulation does not reflect the test design, the results are prone to misinterpretation. Consider the following steps when preparing to simulate load:&lt;br /&gt; &lt;br /&gt;&lt;ol&gt;
&lt;li&gt;Configure the test environment in such a way that it mirrors your production environment as closely as possible, noting and accounting for all differences between the two.&lt;/li&gt;&lt;li&gt;Ensure that performance counters relevant for identified metrics and resource utilization are being measured and are not interfering with the accuracy of the simulation.&lt;/li&gt;&lt;li&gt;Use appropriate load-generation tools to create a load with the characteristics specified in your test design.&lt;/li&gt;&lt;li&gt;Using the load-generation tool(s), execute tests by first building up to the target load specified in your test design, in order to validate the correctness of the simulation. Some things to consider during test execution include:&lt;/li&gt;
&lt;/ol&gt;&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;Begin load testing with a small number of users distributed against your user profile, and then incrementally increase the load. It is important to allow time for the system to stabilize between increases in load while evaluating the correctness of the simulation. &lt;/li&gt;&lt;li&gt;Consider continuing to increase the load and record the behavior until you reach the threshold for the resources identified in your performance objectives, even if that load is beyond the target load specified in the test design. Information about when the system crosses identified thresholds is just as important as the value of the metrics at the target load of the test. &lt;/li&gt;&lt;li&gt;Similarly, it is frequently valuable to continue to increase the number of users until you run up against the service-level limits beyond which you would be violating your SLAs for throughput, response time, and resource utilization.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt;  Make sure that the client computers (agents) you use to generate load are not overly stressed. Resource utilization such as processor and memory must remain well below the utilization threshold values to ensure accurate test results.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Step 8 - Analyze the Results
&lt;/h3&gt;You can analyze the test results to find performance bottlenecks between each test run or after all testing has been completed. Analyzing the results correctly requires training and experience with graphing correlated response time and system data. &lt;br /&gt; &lt;br /&gt;The following are the steps for analyzing the data:&lt;br /&gt; &lt;br /&gt;&lt;ol&gt;
&lt;li&gt;Analyze the captured data and compare the results against the metric’s accepted level to determine whether the performance of the application being tested shows a trend toward or away from the performance objectives. &lt;/li&gt;&lt;li&gt;Analyze the measured metrics to diagnose potential bottlenecks. Based on the analysis, if required, capture additional metrics in subsequent test cycles. For example, suppose that during the first iteration of load tests, the process shows a marked increase in memory consumption, indicating a possible memory leak. In the subsequent iterations, additional memory counters related to generations can be captured to study the memory allocation pattern for the application.&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;Load testing helps to identify the maximum operating capacity of the application and any bottlenecks that might be degrading performance. &lt;br /&gt; &lt;br /&gt;The basic methodology for performing load testing on a Web application is to identify the performance-critical key scenarios; identify the workload profile for distributing all the load among the key scenarios; identify metrics that you want to collect in order to verify them against your performance objectives; create test cases that will be used to simulate the load test; use tools to simulate the load according to the test cases and capture the metrics; and finally, analyze the metrics data captured during the tests.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 18:48:08 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 17 – Load-Testing Web Applications 20070823064808P</guid></item><item><title>UPDATED WIKI: Chapter 16 – Performance Test Reporting Fundamentals</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 16 %25u2013 Performance Test Reporting Fundamentals&amp;version=2</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 16 – Performance Test Reporting Fundamentals
&lt;/h3&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Learn how to apply principles of effective reporting to performance test data.&lt;/li&gt;&lt;li&gt;Learn when to share technical results versus produce stakeholder reports.&lt;/li&gt;&lt;li&gt;Learn what questions various team members expect performance reports to answer.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;Managers and stakeholders need more than simply the results from various tests — they need conclusions based on those results, and consolidated data that supports those conclusions. Technical team members also need more than just results — they need analysis, comparisons, and details of how the results were obtained. Team members of all types get value from performance results being shared more frequently. In this chapter, you will learn how to satisfy the needs of all the consumers of performance test results and data by employing a variety of reporting and results-sharing techniques, and by learning exemplar scenarios where each technique tends be well received. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Chapter
&lt;/h3&gt;Use this chapter to understand the principles of effective performance test results reporting, and as a reference for exemplars of effective data presentation. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “Principles of Effective Reporting” section to understand the key concepts and principles behind effective reporting.&lt;/li&gt;&lt;li&gt;Use the “Frequently Reported Performance Data” section to learn about various ways that performance data can be presented and the types of results to which those methods are most effectively applied.&lt;/li&gt;&lt;li&gt;Use the “Questions to Be Answered by Reporting” section to understand how reports are designed for various audiences, and how to deliver the right information to the right audience in a format that they find intuitive.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Principles of Effective Reporting
&lt;/h3&gt;The key to effective reporting is to present information of interest to the intended audience in a quick, simple, and intuitive manner. The following are some of underlying principles of effective reporting:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Report early, report often&lt;/li&gt;&lt;li&gt;Report visually&lt;/li&gt;&lt;li&gt;Report intuitively&lt;/li&gt;&lt;li&gt;Use the right statistics&lt;/li&gt;&lt;li&gt;Consolidate data correctly&lt;/li&gt;&lt;li&gt;Summarize data effectively&lt;/li&gt;&lt;li&gt;Customize reports for the intended audience&lt;/li&gt;&lt;li&gt;Use concise verbal summaries&lt;/li&gt;&lt;li&gt;Make the data available&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Report Early, Report Often 
&lt;/h4&gt;Continual sharing of information and data is critical to the efficiency and overall success of a performance-testing project. However, not all of the information and data to be shared needs to take the form of a formal or semiformal report. One effective approach is to send stakeholders summary charts and tables every day or two in an e-mail message that contains a concise statement of key points. Use the feedback and questions you receive from those stakeholders when deciding what to put in the next formal or semiformal report. In this way you can gauge the needs of your audience before writing what is intended to be a stand-alone or final document. &lt;br /&gt; &lt;br /&gt;Sharing information and data with the technical team can be an even more straightforward process. It may be as simple as posting the location of the new results files to a team wiki before you begin analyzing them, and then posting links to any charts and graphs that derive from your analysis.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Report Visually
&lt;/h4&gt;Most people find that data and statistics reported in a graphical format are easier to digest. This is especially true of performance results data, where the volume of data is frequently very large and most significant findings result from detecting patterns in the data. It is possible to find these patterns by scanning through tables or by using complex mathematical algorithms, but the human eye is far quicker and more accurate in the vast majority of cases. &lt;br /&gt; &lt;br /&gt;Once a pattern or “point of interest” has been identified visually, you will typically want to isolate that pattern by removing the remaining “chart noise.” In this context, chart noise includes all of the data points representing activities and time slices that contain no points of interest (that is, the ones that look like you expect them to). Removing the chart noise enables you to more clearly evaluate the pattern you are interested in, and makes reports more clear.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Report Intuitively
&lt;/h4&gt;Whether formal or informal, reports should be able to stand on their own. If a report leaves the reader with questions as to why the information is important, the report has failed. While reports do not need to provide the answers to issues to be effective, the issues should be quickly and intuitively clear from the presentation.&lt;br /&gt; &lt;br /&gt;One method to validate the intuitiveness of a report is to remove all labels or identifiers from charts and graphs and all identifying information from narratives and then present the report to someone unfamiliar with the project. If that person is able to quickly and correctly point to the issue of concern in the chart or graph, or identify why the issue discussed in the narrative is relevant, then you have created an intuitive report.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Use the Right Statistics
&lt;/h4&gt;Even though there is a widespread need to understand many statistical concepts, many software developers, testers, and managers either do not have strong backgrounds in or do not enjoy statistics. This can lead to significant misrepresentations of performance test results when reporting. If you are not sure what statistics to use to highlight a particular issue, do not hesitate to ask for assistance.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Consolidate Data Correctly
&lt;/h4&gt;While it is not strictly necessary to consolidate results, it tends to be much easier to demonstrate patterns in results when those results are consolidated into one or two graphs rather than distributed over dozens. That said, it is important to remember that only results from identical test executions that are statistically similar can be consolidated into performance report output tables and charts.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;In order for results to be consolidated, both the test and the test environment must be identical, and the test results must be statistically equivalent. One approach to determining if results are similar enough to be consolidated is to compare results from at least five test executions and apply the following rules:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;If more than 20 percent (or one out of five) of the test execution results appear &lt;i&gt;not&lt;/i&gt; to be similar to the rest, something is generally wrong with the test environment, the application, or the test itself.&lt;/li&gt;&lt;li&gt;If a 95th percentile value for any test execution is greater than the maximum or less than the minimum value for any of the other test executions, it is not statistically similar.&lt;/li&gt;&lt;li&gt;If every page/timer result in a test execution is noticeably higher or lower on the chart than the results of all the rest of the test executions, it is not statistically similar.&lt;/li&gt;&lt;li&gt;If a single page/timer result in a test execution is noticeably higher or lower on the chart than all the rest of the test execution results, but the results for all the rest of the pages/timers in that test execution are not, the test executions are probably statistically similar.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Summarize Data Effectively
&lt;/h4&gt;Summarizing results frequently makes it much easier to demonstrate meaningful patterns in the test results. Summary charts and tables present data from different test executions side by side so that trends and patterns are easy to identify. The overall point of these tables and charts is to show team members how the test results compare to the performance goals of the system so they can make important decisions about taking the system live, upgrading the system, or even, in some cases, completely reevaluating the project.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;Keep the following key points in mind when summarizing test data:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use charts and tables that make your findings clear.&lt;/li&gt;&lt;li&gt;Use text to supplement tables and charts, not the other way around.&lt;/li&gt;&lt;li&gt;If a chart or table is confusing to the reader, don’t use it.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Customize Reports for the Intended Audience
&lt;/h4&gt;Performance test results are most commonly read by one of three audiences: technical team members, non-technical team members, and stakeholders outside of the core team. These three groups tend to look for very different things in a performance report and are inclined to prefer different presentation methods. When reporting, make sure that you identify which group or groups you are reporting to and what their expectations are before deciding on the best way to present the results you have collected.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Use Concise Verbal Summaries
&lt;/h4&gt;Results should have at least a short verbal summary associated with them, and some results are best or most easily presented in writing alone. What you decide to include in that text depends entirely on your intended audience. Some audiences may require just one or two sentences capturing the key point(s) you are trying to make with the graphic. For example:&lt;br /&gt;&lt;i&gt;“From observing this graph, you can see that the system under test meets all stated performance goals up to 150 hourly users but at that point degrades quickly to an essentially unusable state.”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;Other audiences may also require a detailed explanation of the graph being presented. For example:&lt;br /&gt; &lt;br /&gt;&lt;i&gt;“In this graph, you see the average response time in seconds, portrayed vertically on the left side of the graph, plotted against the total number of hourly users simulated during each test execution, portrayed horizontally along the bottom of the graph. The intersection points depict    ”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Make the Data Available 
&lt;/h4&gt;There is a disturbingly popular belief that performance testing (or other testing) data should not be shared in its raw form out of fear that the consumers of that data will use or analyze it improperly. While this concern is not invalid, of much greater concern is the fact that it is simply not reasonable to expect any one person or team to be able to extract all of the value from a set of data at one point in time. Data provides different value to different people at different times, and the only way to get the most out of the data is to make that data continually available to the team. Additionally, making the data available tends to minimize some people’s perception that the performance results are simply fabrications based on a set of tools and processes that they do not understand.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Frequently Reported Performance Data
&lt;/h3&gt;The following are the most frequently reported types of results data. The sections that follow describe what makes this data interesting to whom, as well as considerations for reporting that type of data.&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;End-user response times&lt;/li&gt;&lt;li&gt;Resource utilizations&lt;/li&gt;&lt;li&gt;Volumes, capacities, and rates &lt;/li&gt;&lt;li&gt;Component response times&lt;/li&gt;&lt;li&gt;Trends&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
End-user Response Times
&lt;/h4&gt;End-user response time is by far the most commonly requested and reported metric in performance testing. If you have captured goals and requirements effectively, this is a measure of presumed user satisfaction with the performance characteristics of the system or application. Stakeholders are interested in end-user response times to judge the degree to which users will be satisfied with the application. Technical team members are interested because they want to know if they are achieving the overall performance goals from a user’s perspective, and if not, in what areas those goals not being met.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar1
&lt;/h5&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17754" alt="Fig16.1.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.1&lt;/b&gt; Response Time_&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar2
&lt;/h5&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17755" alt="Fig16.2.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.2&lt;/b&gt; Response Time Degradation_ &lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Considerations
&lt;/h5&gt;Even though end-user response times are the most commonly reported performance-testing metric, there are still important points to consider.&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Eliminate outliers before reporting.&lt;/b&gt;  Even one legitimate outlier can dramatically skew your results.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Ensure that the statistics are clearly communicated.&lt;/b&gt;  The difference between an average and a 90th percentile, for example, can easily be the difference between “ship it” and “fix it.”&lt;/li&gt;&lt;li&gt;&lt;b&gt;Report abandonment separately.&lt;/b&gt;  If you are accounting for user abandonment, the collected response times for abandoned pages may not represent the same activity as non-abandoned pages. To be safe, report response times for non-abandoned pages with an end-user response time graph and response times and abandonment percentages by page on a separate graph or table.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Report every page or transaction separately.&lt;/b&gt;  Even though some pages may appear to represent an equivalence class, there could be differences that you are unaware of. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Resource Utilizations
&lt;/h4&gt;Resource utilizations are the second most requested and reported metrics in performance testing. Most frequently, resource utilization metrics are reported verbally or in a narrative fashion. For example, “The CPU utilization of the application server never exceeded 45 percent. The target is to stay below 70 percent.” It is generally valuable to report resource utilizations graphically when there is an issue to be communicated.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar for Stakeholders
&lt;/h5&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17756" alt="Fig16.3.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.3&lt;/b&gt; Processor Time_ &lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar for Technical Team Members
&lt;/h5&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17757" alt="Fig16.4.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.4&lt;/b&gt; Processor Time and Queue_&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;Points to consider when reporting resource utilizations include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Know when to report all of the data and when to summarize.&lt;/b&gt;  Very often, simply reporting the peak value for a monitored resource during the course of a test is adequate. Unless an issue is detected, the report only needs to demonstrate that the correct metrics were collected to detect the issue if it were present during the test. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Overlay resource utilization metrics with other load and response data.&lt;/b&gt;  Resource utilization metrics are most powerful when presented on the same graph as load and/or response time data. If there is a performance issue, this helps to identify relationships across various metrics.&lt;/li&gt;&lt;li&gt;&lt;b&gt;If you decide to present more than one data point, present them all.&lt;/b&gt;  Resource utilization rates will often change dramatically from one measurement to the next. The pattern of change across measurements is at least as important as the current value. Moving averages and trend lines obfuscate these patterns, which can lead to incorrect assumptions and regrettable decisions.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Volumes, Capacities, and Rates
&lt;/h4&gt;Volume, capacity, and rate metrics are also frequently requested by stakeholders, even though the implications of these metrics are often more challenging to interpret. For this reason, it is important to report these metrics in relation to specific performance criteria or a specific performance issue. Some examples of commonly requested volume, capacity, and rate metrics include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Bandwidth consumed&lt;/li&gt;&lt;li&gt;Throughput&lt;/li&gt;&lt;li&gt;Transactions per second&lt;/li&gt;&lt;li&gt;Hits per second&lt;/li&gt;&lt;li&gt;Number of supported registered users&lt;/li&gt;&lt;li&gt;Number of records/items able to be stored in the database&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar
&lt;/h5&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17758" alt="Fig16.5.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.5&lt;/b&gt; Throughput_ &lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;Points to consider when reporting volumes, capacities and rates include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Report metrics in context.&lt;/b&gt;  Volume, capacity, and rate metrics typically have little stand-alone value.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Have test conditions and supporting data available.&lt;/b&gt;  While this is a good idea in general, it is particularly important with volume, capacity, and rate metrics.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Include narrative summaries with implications.&lt;/b&gt;  Again, while this is a good idea in general, it is virtually critical to ensure understanding of volume, capacity, and rate metrics.  &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Component Response Times
&lt;/h4&gt;Even though component response times are not reported to stakeholders as commonly as end-user response times or resource utilization metrics, they are frequently collected and shared with the technical team. These response times help developers, architects, database administrators (DBAs), and administrators determine what sub-part or parts of the system are responsible for the majority of end-user response times.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar
&lt;/h5&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17759" alt="Fig16.6.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.6&lt;/b&gt; Sequential Consecutive Database Updates_&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;Points to consider when reporting component response times include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Relate component response times to end-user activities.&lt;/b&gt;  Because it is not always obvious what end-user activities are impacted by a component’s response time, it is a good idea to include those relationships in your report. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Explain the degree to which the component response time matters.&lt;/b&gt;  Sometimes the concern is that a component might become a bottleneck under load because it is processing too slowly; at other times, the concern is that end-user response times are noticeably degraded as a result of the component. Knowing which of these conditions applies to your project enables you to make effective decisions. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Trends
&lt;/h4&gt;Trends are one of the most powerful but least-frequently used data-reporting methods. Trends can show whether performance is improving or degrading from build to build, or the rate of degradation as load increases. Trends can help technical team members quickly understand whether the changes they recently made achieved the desired performance impact.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar
&lt;/h5&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17760" alt="Fig16.7.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.7&lt;/b&gt; Response Time Trends for Key Pages_&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;Points to consider when reporting trends include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Trends typically do not add value until there are at least three measurements.&lt;/b&gt;  Sometimes trends cannot be effectively detected until there are more than three measurements. Start creating your trend charts with the first set of data, but be cautious about including them in formal reports until you have collected enough data for there to be an actual trend to report.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Share trends with the technical team before including them in formal reports.&lt;/b&gt;  This is another generally good practice, but it is particularly relevant to trends because developers, architects, administrators, and DBAs often will have already backed out a change that caused the trend to move in the wrong direction before they are able to compile their report. In this case, you can decide that the trend report is not worth including, or you can simply make an annotation describing the cause and stating that the issue has already been resolved. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Questions to Be Answered By Reporting
&lt;/h3&gt;Almost every team member has unique wants, needs, and expectations when it comes to reporting data and results obtained through performance testing. While this makes sharing information obtained through performance testing challenging, knowing what various team members expect and value in advance makes providing valuable information to the right people, at the right level of detail and at the right time, much easier&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
All Roles
&lt;/h4&gt;Some questions that are commonly posed by team members include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Is performance getting better or worse?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Have we met the requirements/service level agreements (SLAs)?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;What reports are available?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;How frequently can I get reports?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Can I get a report with more/less detail?&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Executive Stakeholders
&lt;/h4&gt;Executive stakeholders tend to have very specific reporting needs and expectations that are often quite different from those of other team members. Stakeholders tend to prefer information in small, digestible chunks that clearly highlight the key points. Additionally, stakeholders like visual representations of data that are intuitive at a glance, as well as “sound bite”–size explanations of those visual representations. Finally, stakeholders tend to prefer consolidated and summarized information on a less frequent (though not significantly less frequent) basis than other team members. The following are common questions that executive stakeholders want performance test reports to answer:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Is this ready to ship?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;How will these results relate to production?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;How much confidence should I have in these results?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;What needs to be done to get this ready to ship?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Is the performance testing proceeding as anticipated?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Is the performance testing adding value?&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Project-Level Managers
&lt;/h4&gt;Project-level managers — including the project manager, development lead or manager, and the test lead or manager — have all of the same needs and questions as the executive stakeholders, except that they want the answers more frequently and in more detail. Additionally, they commonly want to know the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Are performance issues being detected efficiently?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Are performance issues being resolved efficiently?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;What performance testing should we be conducting that we currently are not?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;What performance testing are we currently doing that is not adding value?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;_Are there currently any blockers? If so, what are they? _&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Technical Team Members
&lt;/h4&gt;Although technical team members have some degree of interest in all of the questions posed by managers and stakeholders, they are more interested in receiving a continual flow of information related to test results, monitored data, observations, and opportunities for analysis and improvement. Technical team members tend to want to know the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;What do these results mean to my specialty/focus area?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Where can I go to see the results for the last test?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Where can I go to get the raw data?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Can you capture metric X during the next test run?&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Types of Results Sharing
&lt;/h3&gt;In the most basic sense, there are three distinct types of results sharing: raw data display, technical reports, and stakeholder reports. While all are based on timely, accurate, and relevant communication of results, observations, concerns, and recommendations, each type targets a different audience, and the most effective methods of communicating data differ dramatically.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Raw Data Display
&lt;/h4&gt;While not explicitly a reporting scenario, the sharing of raw data for collaboration purposes involves many of the same principles of data presentation that are applied to reports in order to improve the effectiveness of the collaboration.&lt;br /&gt; &lt;br /&gt;In general, most people would rather view data and statistics in graphical form instead of in tables. In some cases, however, tables are the most efficient way to show calculated results for all of the data. It is recommended that you use tables sparingly in reports, while including the tabular form of the data used to create charts and graphs as an appendix or attachment to a report, so that interested stakeholders can refer to it. &lt;br /&gt; &lt;br /&gt;Results from the following types of tests can be well represented in a tabular format: &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Baseline &lt;/li&gt;&lt;li&gt;Benchmark&lt;/li&gt;&lt;li&gt;Scalability&lt;/li&gt;&lt;li&gt;Any other user-experience–based test&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;Tables are an excellent way to present volumes of data in a clean and orderly manner and to support the findings they ultimately lead to. However, you should be careful not to overuse tables in your reports. Many people quickly skip over tables and read only the surrounding text or examine only the charts that go with them. Be certain that whether you use the tables discussed below or other types, you present in your report only those tables that clearly make an important point. Huge tables containing all of the supporting data may be of interest to a few individuals, but not to most, and thus should be included only in an appendix to a report. Raw data is most commonly shared in the following formats:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Spreadsheets&lt;/li&gt;&lt;li&gt;Text files (and regular expression searches)&lt;/li&gt;&lt;li&gt;Data collection tools (“canned” reports)&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Technical Reports
&lt;/h4&gt;Technical reports are generally more formal than raw data display, but not excessively so. Technical reports should stand on their own, but since they are intended for technical members of the team who are currently working on the project, they do not need to contain all of the supplemental detail that a stakeholder report normally does. In the simplest sense, technical reports are made up of the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Description of the test, including workload model and test environment &lt;/li&gt;&lt;li&gt;Easily digestible data with minimal pre-processing&lt;/li&gt;&lt;li&gt;Access to the complete data set and test conditions&lt;/li&gt;&lt;li&gt;Short statements of observations, concerns, questions, and requests for collaboration &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;Technical reports most commonly include data in the following formats:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Scatter plots&lt;/li&gt;&lt;li&gt;Pareto charts&lt;/li&gt;&lt;li&gt;Trend charts&lt;/li&gt;&lt;li&gt;Summary spreadsheets&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Stakeholder Reports
&lt;/h4&gt;Stakeholder reports are the most formal of the performance data sharing formats. These reports must be able to stand alone while at the same time being intuitive to someone who is not working on the project in a day-to-day technical role. Typically, these reports center on acceptance criteria and risks. To be effective, stakeholder reports typically need to include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The acceptance criteria to which the results relate &lt;/li&gt;&lt;li&gt;Intuitive, visual representations of the most relevant data&lt;/li&gt;&lt;li&gt;A brief verbal summary of the chart or graph in terms of criteria&lt;/li&gt;&lt;li&gt;Intuitive, visual representations of the workload model and test environment &lt;/li&gt;&lt;li&gt;Access to associated technical reports, complete data sets, and test conditions&lt;/li&gt;&lt;li&gt;A summary of observations, concerns, and recommendations&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;When preparing stakeholder reports, consider that most stakeholder reports meet with one (or more) of the following three reactions. All three are positive in their own way but may not seem to be at first. These reactions and some recommended responses follow:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;“These are great, but where’s the supporting data?”&lt;/b&gt;  This is the most common response from a technical stakeholder. Many people and organizations want to have all of the data so that they can draw their own conclusions. Fortunately, this is an easy question to handle: simply include the entire spreadsheet with this supporting data as an appendix to the report.&lt;/li&gt;&lt;li&gt;&lt;b&gt;“Very pretty, but what do they mean?”&lt;/b&gt;  This is where text explanations are useful. People who are not familiar with performance testing or performance results often need to have the implications of the results spelled out for them. Remember that more than 90 percent of the times, performance testers are the bearers of bad news that the stakeholder was not expecting. The tester has the responsibility to ensure that the stakeholder has confidence in the findings, as well as presenting this news in a constructive manner.&lt;/li&gt;&lt;li&gt;&lt;b&gt;“Terrific! This is exactly what I wanted! Don’t worry about the final report — these will do nicely.”&lt;/b&gt;  While this &lt;i&gt;seems&lt;/i&gt; like a blessing, do not take it as one. Sooner or later, your tables and charts will be presented to someone who asks one of the two preceding questions, or worse, asks how the data was obtained. If there is not at least a final report that tells people where to find the rest of the data, people will question the results because you are not present to answer those questions. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Creating a Technical Report
&lt;/h3&gt;Although six key components of a technical report are listed below, all six may not be appropriate for every technical report. Similarly, there may be additional information that should be included based on exactly what message you are trying to convey with the report. While these six components will result in successful technical reports most of the time, remember that sometimes creativity is needed to make your message clear and intuitive. &lt;br /&gt; &lt;br /&gt;Consider including the following key components when preparing a technical report:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;A results graph&lt;/li&gt;&lt;li&gt;A table for single-instance measurements (e.g., maximum throughput achieved)&lt;/li&gt;&lt;li&gt;Workload model (graphic)&lt;/li&gt;&lt;li&gt;Test environment (annotated graphic)&lt;/li&gt;&lt;li&gt;Short statements of observations, concerns, questions, and requests for collaboration&lt;/li&gt;&lt;li&gt;References section&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Results Graph
&lt;/h4&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17761" alt="Fig16.8.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.8&lt;/b&gt; Consolidated Statistics_ &lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Tables for Single-Instance Measurements 
&lt;/h4&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17762" alt="Fig16.9.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.9&lt;/b&gt; Single Instance Measurements_  &lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Workload Model Graphic
&lt;/h4&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17763" alt="Fig16.10.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.10&lt;/b&gt; Workload Model_ &lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Test Environment Graphic
&lt;/h4&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17764" alt="Fig16.11.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.11&lt;/b&gt; Test Environment_&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Summary Statement
&lt;/h4&gt;&lt;i&gt;“The results graph shows both response times and resource utilization together. Close examination shows that Application Server CPU Usage and queue length coincide with significantly degraded response time. It appears as if the application server CPU usage was the catalyst to the degradation, but this has yet to be confirmed. The remaining charts and graphs are included as supplemental information for easy reference.”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar References Section
&lt;/h4&gt;&lt;i&gt;“Raw data and additional supporting information is checked into the version-control system with the build and tagged as PerfTest-{date}-{issue number}.”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Creating a Stakeholder Report
&lt;/h3&gt;Although eight key components of a stakeholder report are listed below, all eight may not be appropriate for every stakeholder report. Similarly, there may be additional information that should be included based on exactly what message you are trying to convey with the report. While these eight components will result in successful stakeholder reports most of the time, remember that sometimes creativity is needed to make your message clear and intuitive. &lt;br /&gt; &lt;br /&gt;Consider including the following key components when preparing a stakeholder report:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Criteria to which the results relate&lt;/li&gt;&lt;li&gt;A results graph&lt;/li&gt;&lt;li&gt;A table for single-instance measurements (e.g., maximum throughput achieved)&lt;/li&gt;&lt;li&gt;A brief verbal summary of the chart or graph in terms of criteria &lt;/li&gt;&lt;li&gt;Workload model (graphic)&lt;/li&gt;&lt;li&gt;Test environment (annotated graphic)&lt;/li&gt;&lt;li&gt;Summary of observations, concerns, and recommendations&lt;/li&gt;&lt;li&gt;References section&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Criteria Statement
&lt;/h4&gt;&lt;i&gt;“This report relates to end-user response time compliances as documented in the requirements management system as requirements Perf### through Perf??? at one-half of the expected peak load with the most commonly expected usage scenario.”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Results Graph
&lt;/h4&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17765" alt="Fig16.12.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.12&lt;/b&gt; Response Time Compliance Summary_&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Tables for Single-Instance Measurements
&lt;/h4&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17756" alt="Fig16.3.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.13&lt;/b&gt; Single Instance Measurements_ &lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Criteria-Based Results Summary
&lt;/h4&gt;&lt;i&gt;“All metrics collected achieved their required values except for the response times of pages 8 and 10.&lt;/i&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Page 10 failed to achieve its required value by 2 percent.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Page 8 failed to achieve its required value by 38 percent.”&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Workload Model Graphic
&lt;/h4&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17767" alt="Fig16.14.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.14&lt;/b&gt; Workload Model_&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Test Environment Graphic
&lt;/h4&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17768" alt="Fig16.15.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.15&lt;/b&gt; Test Environment_&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Observations and Recommendations Statement
&lt;/h4&gt;&lt;i&gt;“Based on the test conditions and results, the performance testing and tuning team recommends the following.&lt;/i&gt;&lt;br /&gt;&lt;ol&gt;
&lt;li&gt;&lt;i&gt;Continue performance testing with increasingly strenuous scenarios and loads.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Priority should be given to determining the root cause of pages 8 and 10 not achieving their acceptance criteria, and subsequently tuning those root causes.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;At such time as additional pages demonstrate a failure to achieve their acceptance criteria, a dedicated root cause and tuning cycle should be undertaken.”&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar References Section
&lt;/h4&gt;&lt;i&gt;“All of the data used to create this report and execute the tests that generated that data is checked into the version-control system as read-only with the release candidate and tagged as PerfTest-{date}-{RC number}-Validation.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;“The same data has been temporarily copied to {\\shared-resource\location} for individuals without access to the version-control system.”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;Performance test reporting is the process of presenting results data that will support key technological and business decisions. The key to creating effective reports is to consider the audience of the data before determining how best to present the data. The most effective performance-test results will present analysis, comparisons, and details behind how the results were obtained, and will influence critical business decision-making.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 18:40:00 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 16 – Performance Test Reporting Fundamentals 20070823064000P</guid></item><item><title>UPDATED WIKI: Chapter 16 – Performance Test Reporting Fundamentals</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 16 %25u2013 Performance Test Reporting Fundamentals&amp;version=1</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 16 – Performance Test Reporting Fundamentals
&lt;/h3&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Learn how to apply principles of effective reporting to performance test data.&lt;/li&gt;&lt;li&gt;Learn when to share technical results versus produce stakeholder reports.&lt;/li&gt;&lt;li&gt;Learn what questions various team members expect performance reports to answer.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;Managers and stakeholders need more than simply the results from various tests — they need conclusions based on those results, and consolidated data that supports those conclusions. Technical team members also need more than just results — they need analysis, comparisons, and details of how the results were obtained. Team members of all types get value from performance results being shared more frequently. In this chapter, you will learn how to satisfy the needs of all the consumers of performance test results and data by employing a variety of reporting and results-sharing techniques, and by learning exemplar scenarios where each technique tends be well received. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Chapter
&lt;/h3&gt;Use this chapter to understand the principles of effective performance test results reporting, and as a reference for exemplars of effective data presentation. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “Principles of Effective Reporting” section to understand the key concepts and principles behind effective reporting.&lt;/li&gt;&lt;li&gt;Use the “Frequently Reported Performance Data” section to learn about various ways that performance data can be presented and the types of results to which those methods are most effectively applied.&lt;/li&gt;&lt;li&gt;Use the “Questions to Be Answered by Reporting” section to understand how reports are designed for various audiences, and how to deliver the right information to the right audience in a format that they find intuitive.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Principles of Effective Reporting
&lt;/h3&gt;The key to effective reporting is to present information of interest to the intended audience in a quick, simple, and intuitive manner. The following are some of underlying principles of effective reporting:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Report early, report often&lt;/li&gt;&lt;li&gt;Report visually&lt;/li&gt;&lt;li&gt;Report intuitively&lt;/li&gt;&lt;li&gt;Use the right statistics&lt;/li&gt;&lt;li&gt;Consolidate data correctly&lt;/li&gt;&lt;li&gt;Summarize data effectively&lt;/li&gt;&lt;li&gt;Customize reports for the intended audience&lt;/li&gt;&lt;li&gt;Use concise verbal summaries&lt;/li&gt;&lt;li&gt;Make the data available&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Report Early, Report Often 
&lt;/h4&gt;Continual sharing of information and data is critical to the efficiency and overall success of a performance-testing project. However, not all of the information and data to be shared needs to take the form of a formal or semiformal report. One effective approach is to send stakeholders summary charts and tables every day or two in an e-mail message that contains a concise statement of key points. Use the feedback and questions you receive from those stakeholders when deciding what to put in the next formal or semiformal report. In this way you can gauge the needs of your audience before writing what is intended to be a stand-alone or final document. &lt;br /&gt; &lt;br /&gt;Sharing information and data with the technical team can be an even more straightforward process. It may be as simple as posting the location of the new results files to a team wiki before you begin analyzing them, and then posting links to any charts and graphs that derive from your analysis.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Report Visually
&lt;/h4&gt;Most people find that data and statistics reported in a graphical format are easier to digest. This is especially true of performance results data, where the volume of data is frequently very large and most significant findings result from detecting patterns in the data. It is possible to find these patterns by scanning through tables or by using complex mathematical algorithms, but the human eye is far quicker and more accurate in the vast majority of cases. &lt;br /&gt; &lt;br /&gt;Once a pattern or “point of interest” has been identified visually, you will typically want to isolate that pattern by removing the remaining “chart noise.” In this context, chart noise includes all of the data points representing activities and time slices that contain no points of interest (that is, the ones that look like you expect them to). Removing the chart noise enables you to more clearly evaluate the pattern you are interested in, and makes reports more clear.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Report Intuitively
&lt;/h4&gt;Whether formal or informal, reports should be able to stand on their own. If a report leaves the reader with questions as to why the information is important, the report has failed. While reports do not need to provide the answers to issues to be effective, the issues should be quickly and intuitively clear from the presentation.&lt;br /&gt; &lt;br /&gt;One method to validate the intuitiveness of a report is to remove all labels or identifiers from charts and graphs and all identifying information from narratives and then present the report to someone unfamiliar with the project. If that person is able to quickly and correctly point to the issue of concern in the chart or graph, or identify why the issue discussed in the narrative is relevant, then you have created an intuitive report.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Use the Right Statistics
&lt;/h4&gt;Even though there is a widespread need to understand many statistical concepts, many software developers, testers, and managers either do not have strong backgrounds in or do not enjoy statistics. This can lead to significant misrepresentations of performance test results when reporting. If you are not sure what statistics to use to highlight a particular issue, do not hesitate to ask for assistance.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Consolidate Data Correctly
&lt;/h4&gt;While it is not strictly necessary to consolidate results, it tends to be much easier to demonstrate patterns in results when those results are consolidated into one or two graphs rather than distributed over dozens. That said, it is important to remember that only results from identical test executions that are statistically similar can be consolidated into performance report output tables and charts.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;In order for results to be consolidated, both the test and the test environment must be identical, and the test results must be statistically equivalent. One approach to determining if results are similar enough to be consolidated is to compare results from at least five test executions and apply the following rules:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;If more than 20 percent (or one out of five) of the test execution results appear &lt;i&gt;not&lt;/i&gt; to be similar to the rest, something is generally wrong with the test environment, the application, or the test itself.&lt;/li&gt;&lt;li&gt;If a 95th percentile value for any test execution is greater than the maximum or less than the minimum value for any of the other test executions, it is not statistically similar.&lt;/li&gt;&lt;li&gt;If every page/timer result in a test execution is noticeably higher or lower on the chart than the results of all the rest of the test executions, it is not statistically similar.&lt;/li&gt;&lt;li&gt;If a single page/timer result in a test execution is noticeably higher or lower on the chart than all the rest of the test execution results, but the results for all the rest of the pages/timers in that test execution are not, the test executions are probably statistically similar.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Summarize Data Effectively
&lt;/h4&gt;Summarizing results frequently makes it much easier to demonstrate meaningful patterns in the test results. Summary charts and tables present data from different test executions side by side so that trends and patterns are easy to identify. The overall point of these tables and charts is to show team members how the test results compare to the performance goals of the system so they can make important decisions about taking the system live, upgrading the system, or even, in some cases, completely reevaluating the project.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;Keep the following key points in mind when summarizing test data:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use charts and tables that make your findings clear.&lt;/li&gt;&lt;li&gt;Use text to supplement tables and charts, not the other way around.&lt;/li&gt;&lt;li&gt;If a chart or table is confusing to the reader, don’t use it.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Customize Reports for the Intended Audience
&lt;/h4&gt;Performance test results are most commonly read by one of three audiences: technical team members, non-technical team members, and stakeholders outside of the core team. These three groups tend to look for very different things in a performance report and are inclined to prefer different presentation methods. When reporting, make sure that you identify which group or groups you are reporting to and what their expectations are before deciding on the best way to present the results you have collected.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Use Concise Verbal Summaries
&lt;/h4&gt;Results should have at least a short verbal summary associated with them, and some results are best or most easily presented in writing alone. What you decide to include in that text depends entirely on your intended audience. Some audiences may require just one or two sentences capturing the key point(s) you are trying to make with the graphic. For example:&lt;br /&gt;&lt;i&gt;“From observing this graph, you can see that the system under test meets all stated performance goals up to 150 hourly users but at that point degrades quickly to an essentially unusable state.”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;Other audiences may also require a detailed explanation of the graph being presented. For example:&lt;br /&gt; &lt;br /&gt;&lt;i&gt;“In this graph, you see the average response time in seconds, portrayed vertically on the left side of the graph, plotted against the total number of hourly users simulated during each test execution, portrayed horizontally along the bottom of the graph. The intersection points depict    ”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Make the Data Available 
&lt;/h4&gt;There is a disturbingly popular belief that performance testing (or other testing) data should not be shared in its raw form out of fear that the consumers of that data will use or analyze it improperly. While this concern is not invalid, of much greater concern is the fact that it is simply not reasonable to expect any one person or team to be able to extract all of the value from a set of data at one point in time. Data provides different value to different people at different times, and the only way to get the most out of the data is to make that data continually available to the team. Additionally, making the data available tends to minimize some people’s perception that the performance results are simply fabrications based on a set of tools and processes that they do not understand.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Frequently Reported Performance Data
&lt;/h3&gt;The following are the most frequently reported types of results data. The sections that follow describe what makes this data interesting to whom, as well as considerations for reporting that type of data.&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;End-user response times&lt;/li&gt;&lt;li&gt;Resource utilizations&lt;/li&gt;&lt;li&gt;Volumes, capacities, and rates &lt;/li&gt;&lt;li&gt;Component response times&lt;/li&gt;&lt;li&gt;Trends&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
End-user Response Times
&lt;/h4&gt;End-user response time is by far the most commonly requested and reported metric in performance testing. If you have captured goals and requirements effectively, this is a measure of presumed user satisfaction with the performance characteristics of the system or application. Stakeholders are interested in end-user response times to judge the degree to which users will be satisfied with the application. Technical team members are interested because they want to know if they are achieving the overall performance goals from a user’s perspective, and if not, in what areas those goals not being met.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar1
&lt;/h5&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.1.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.1&lt;/b&gt; Response Time_&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar2
&lt;/h5&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.2.GIF]&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.2&lt;/b&gt; Response Time Degradation_ &lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Considerations
&lt;/h5&gt;Even though end-user response times are the most commonly reported performance-testing metric, there are still important points to consider.&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Eliminate outliers before reporting.&lt;/b&gt;  Even one legitimate outlier can dramatically skew your results.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Ensure that the statistics are clearly communicated.&lt;/b&gt;  The difference between an average and a 90th percentile, for example, can easily be the difference between “ship it” and “fix it.”&lt;/li&gt;&lt;li&gt;&lt;b&gt;Report abandonment separately.&lt;/b&gt;  If you are accounting for user abandonment, the collected response times for abandoned pages may not represent the same activity as non-abandoned pages. To be safe, report response times for non-abandoned pages with an end-user response time graph and response times and abandonment percentages by page on a separate graph or table.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Report every page or transaction separately.&lt;/b&gt;  Even though some pages may appear to represent an equivalence class, there could be differences that you are unaware of. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Resource Utilizations
&lt;/h4&gt;Resource utilizations are the second most requested and reported metrics in performance testing. Most frequently, resource utilization metrics are reported verbally or in a narrative fashion. For example, “The CPU utilization of the application server never exceeded 45 percent. The target is to stay below 70 percent.” It is generally valuable to report resource utilizations graphically when there is an issue to be communicated.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar for Stakeholders
&lt;/h5&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.3.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.3&lt;/b&gt; Processor Time_ &lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar for Technical Team Members
&lt;/h5&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.4.GIF]&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.4&lt;/b&gt; Processor Time and Queue_&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;Points to consider when reporting resource utilizations include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Know when to report all of the data and when to summarize.&lt;/b&gt;  Very often, simply reporting the peak value for a monitored resource during the course of a test is adequate. Unless an issue is detected, the report only needs to demonstrate that the correct metrics were collected to detect the issue if it were present during the test. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Overlay resource utilization metrics with other load and response data.&lt;/b&gt;  Resource utilization metrics are most powerful when presented on the same graph as load and/or response time data. If there is a performance issue, this helps to identify relationships across various metrics.&lt;/li&gt;&lt;li&gt;&lt;b&gt;If you decide to present more than one data point, present them all.&lt;/b&gt;  Resource utilization rates will often change dramatically from one measurement to the next. The pattern of change across measurements is at least as important as the current value. Moving averages and trend lines obfuscate these patterns, which can lead to incorrect assumptions and regrettable decisions.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Volumes, Capacities, and Rates
&lt;/h4&gt;Volume, capacity, and rate metrics are also frequently requested by stakeholders, even though the implications of these metrics are often more challenging to interpret. For this reason, it is important to report these metrics in relation to specific performance criteria or a specific performance issue. Some examples of commonly requested volume, capacity, and rate metrics include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Bandwidth consumed&lt;/li&gt;&lt;li&gt;Throughput&lt;/li&gt;&lt;li&gt;Transactions per second&lt;/li&gt;&lt;li&gt;Hits per second&lt;/li&gt;&lt;li&gt;Number of supported registered users&lt;/li&gt;&lt;li&gt;Number of records/items able to be stored in the database&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar
&lt;/h5&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.5.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.5&lt;/b&gt; Throughput_ &lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;Points to consider when reporting volumes, capacities and rates include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Report metrics in context.&lt;/b&gt;  Volume, capacity, and rate metrics typically have little stand-alone value.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Have test conditions and supporting data available.&lt;/b&gt;  While this is a good idea in general, it is particularly important with volume, capacity, and rate metrics.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Include narrative summaries with implications.&lt;/b&gt;  Again, while this is a good idea in general, it is virtually critical to ensure understanding of volume, capacity, and rate metrics.  &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Component Response Times
&lt;/h4&gt;Even though component response times are not reported to stakeholders as commonly as end-user response times or resource utilization metrics, they are frequently collected and shared with the technical team. These response times help developers, architects, database administrators (DBAs), and administrators determine what sub-part or parts of the system are responsible for the majority of end-user response times.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar
&lt;/h5&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.6.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.6&lt;/b&gt; Sequential Consecutive Database Updates_&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;Points to consider when reporting component response times include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Relate component response times to end-user activities.&lt;/b&gt;  Because it is not always obvious what end-user activities are impacted by a component’s response time, it is a good idea to include those relationships in your report. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Explain the degree to which the component response time matters.&lt;/b&gt;  Sometimes the concern is that a component might become a bottleneck under load because it is processing too slowly; at other times, the concern is that end-user response times are noticeably degraded as a result of the component. Knowing which of these conditions applies to your project enables you to make effective decisions. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Trends
&lt;/h4&gt;Trends are one of the most powerful but least-frequently used data-reporting methods. Trends can show whether performance is improving or degrading from build to build, or the rate of degradation as load increases. Trends can help technical team members quickly understand whether the changes they recently made achieved the desired performance impact.&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Exemplar
&lt;/h5&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.7.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.7&lt;/b&gt; Response Time Trends for Key Pages_&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Additional Considerations
&lt;/h5&gt;Points to consider when reporting trends include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Trends typically do not add value until there are at least three measurements.&lt;/b&gt;  Sometimes trends cannot be effectively detected until there are more than three measurements. Start creating your trend charts with the first set of data, but be cautious about including them in formal reports until you have collected enough data for there to be an actual trend to report.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Share trends with the technical team before including them in formal reports.&lt;/b&gt;  This is another generally good practice, but it is particularly relevant to trends because developers, architects, administrators, and DBAs often will have already backed out a change that caused the trend to move in the wrong direction before they are able to compile their report. In this case, you can decide that the trend report is not worth including, or you can simply make an annotation describing the cause and stating that the issue has already been resolved. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Questions to Be Answered By Reporting
&lt;/h3&gt;Almost every team member has unique wants, needs, and expectations when it comes to reporting data and results obtained through performance testing. While this makes sharing information obtained through performance testing challenging, knowing what various team members expect and value in advance makes providing valuable information to the right people, at the right level of detail and at the right time, much easier&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
All Roles
&lt;/h4&gt;Some questions that are commonly posed by team members include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Is performance getting better or worse?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Have we met the requirements/service level agreements (SLAs)?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;What reports are available?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;How frequently can I get reports?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Can I get a report with more/less detail?&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Executive Stakeholders
&lt;/h4&gt;Executive stakeholders tend to have very specific reporting needs and expectations that are often quite different from those of other team members. Stakeholders tend to prefer information in small, digestible chunks that clearly highlight the key points. Additionally, stakeholders like visual representations of data that are intuitive at a glance, as well as “sound bite”–size explanations of those visual representations. Finally, stakeholders tend to prefer consolidated and summarized information on a less frequent (though not significantly less frequent) basis than other team members. The following are common questions that executive stakeholders want performance test reports to answer:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Is this ready to ship?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;How will these results relate to production?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;How much confidence should I have in these results?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;What needs to be done to get this ready to ship?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Is the performance testing proceeding as anticipated?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Is the performance testing adding value?&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Project-Level Managers
&lt;/h4&gt;Project-level managers — including the project manager, development lead or manager, and the test lead or manager — have all of the same needs and questions as the executive stakeholders, except that they want the answers more frequently and in more detail. Additionally, they commonly want to know the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Are performance issues being detected efficiently?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Are performance issues being resolved efficiently?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;What performance testing should we be conducting that we currently are not?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;What performance testing are we currently doing that is not adding value?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;_Are there currently any blockers? If so, what are they? _&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Technical Team Members
&lt;/h4&gt;Although technical team members have some degree of interest in all of the questions posed by managers and stakeholders, they are more interested in receiving a continual flow of information related to test results, monitored data, observations, and opportunities for analysis and improvement. Technical team members tend to want to know the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;What do these results mean to my specialty/focus area?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Where can I go to see the results for the last test?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Where can I go to get the raw data?&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Can you capture metric X during the next test run?&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Types of Results Sharing
&lt;/h3&gt;In the most basic sense, there are three distinct types of results sharing: raw data display, technical reports, and stakeholder reports. While all are based on timely, accurate, and relevant communication of results, observations, concerns, and recommendations, each type targets a different audience, and the most effective methods of communicating data differ dramatically.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Raw Data Display
&lt;/h4&gt;While not explicitly a reporting scenario, the sharing of raw data for collaboration purposes involves many of the same principles of data presentation that are applied to reports in order to improve the effectiveness of the collaboration.&lt;br /&gt; &lt;br /&gt;In general, most people would rather view data and statistics in graphical form instead of in tables. In some cases, however, tables are the most efficient way to show calculated results for all of the data. It is recommended that you use tables sparingly in reports, while including the tabular form of the data used to create charts and graphs as an appendix or attachment to a report, so that interested stakeholders can refer to it. &lt;br /&gt; &lt;br /&gt;Results from the following types of tests can be well represented in a tabular format: &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Baseline &lt;/li&gt;&lt;li&gt;Benchmark&lt;/li&gt;&lt;li&gt;Scalability&lt;/li&gt;&lt;li&gt;Any other user-experience–based test&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;Tables are an excellent way to present volumes of data in a clean and orderly manner and to support the findings they ultimately lead to. However, you should be careful not to overuse tables in your reports. Many people quickly skip over tables and read only the surrounding text or examine only the charts that go with them. Be certain that whether you use the tables discussed below or other types, you present in your report only those tables that clearly make an important point. Huge tables containing all of the supporting data may be of interest to a few individuals, but not to most, and thus should be included only in an appendix to a report. Raw data is most commonly shared in the following formats:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Spreadsheets&lt;/li&gt;&lt;li&gt;Text files (and regular expression searches)&lt;/li&gt;&lt;li&gt;Data collection tools (“canned” reports)&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Technical Reports
&lt;/h4&gt;Technical reports are generally more formal than raw data display, but not excessively so. Technical reports should stand on their own, but since they are intended for technical members of the team who are currently working on the project, they do not need to contain all of the supplemental detail that a stakeholder report normally does. In the simplest sense, technical reports are made up of the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Description of the test, including workload model and test environment &lt;/li&gt;&lt;li&gt;Easily digestible data with minimal pre-processing&lt;/li&gt;&lt;li&gt;Access to the complete data set and test conditions&lt;/li&gt;&lt;li&gt;Short statements of observations, concerns, questions, and requests for collaboration &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;Technical reports most commonly include data in the following formats:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Scatter plots&lt;/li&gt;&lt;li&gt;Pareto charts&lt;/li&gt;&lt;li&gt;Trend charts&lt;/li&gt;&lt;li&gt;Summary spreadsheets&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Stakeholder Reports
&lt;/h4&gt;Stakeholder reports are the most formal of the performance data sharing formats. These reports must be able to stand alone while at the same time being intuitive to someone who is not working on the project in a day-to-day technical role. Typically, these reports center on acceptance criteria and risks. To be effective, stakeholder reports typically need to include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The acceptance criteria to which the results relate &lt;/li&gt;&lt;li&gt;Intuitive, visual representations of the most relevant data&lt;/li&gt;&lt;li&gt;A brief verbal summary of the chart or graph in terms of criteria&lt;/li&gt;&lt;li&gt;Intuitive, visual representations of the workload model and test environment &lt;/li&gt;&lt;li&gt;Access to associated technical reports, complete data sets, and test conditions&lt;/li&gt;&lt;li&gt;A summary of observations, concerns, and recommendations&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;When preparing stakeholder reports, consider that most stakeholder reports meet with one (or more) of the following three reactions. All three are positive in their own way but may not seem to be at first. These reactions and some recommended responses follow:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;“These are great, but where’s the supporting data?”&lt;/b&gt;  This is the most common response from a technical stakeholder. Many people and organizations want to have all of the data so that they can draw their own conclusions. Fortunately, this is an easy question to handle: simply include the entire spreadsheet with this supporting data as an appendix to the report.&lt;/li&gt;&lt;li&gt;&lt;b&gt;“Very pretty, but what do they mean?”&lt;/b&gt;  This is where text explanations are useful. People who are not familiar with performance testing or performance results often need to have the implications of the results spelled out for them. Remember that more than 90 percent of the times, performance testers are the bearers of bad news that the stakeholder was not expecting. The tester has the responsibility to ensure that the stakeholder has confidence in the findings, as well as presenting this news in a constructive manner.&lt;/li&gt;&lt;li&gt;&lt;b&gt;“Terrific! This is exactly what I wanted! Don’t worry about the final report — these will do nicely.”&lt;/b&gt;  While this &lt;i&gt;seems&lt;/i&gt; like a blessing, do not take it as one. Sooner or later, your tables and charts will be presented to someone who asks one of the two preceding questions, or worse, asks how the data was obtained. If there is not at least a final report that tells people where to find the rest of the data, people will question the results because you are not present to answer those questions. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Creating a Technical Report
&lt;/h3&gt;Although six key components of a technical report are listed below, all six may not be appropriate for every technical report. Similarly, there may be additional information that should be included based on exactly what message you are trying to convey with the report. While these six components will result in successful technical reports most of the time, remember that sometimes creativity is needed to make your message clear and intuitive. &lt;br /&gt; &lt;br /&gt;Consider including the following key components when preparing a technical report:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;A results graph&lt;/li&gt;&lt;li&gt;A table for single-instance measurements (e.g., maximum throughput achieved)&lt;/li&gt;&lt;li&gt;Workload model (graphic)&lt;/li&gt;&lt;li&gt;Test environment (annotated graphic)&lt;/li&gt;&lt;li&gt;Short statements of observations, concerns, questions, and requests for collaboration&lt;/li&gt;&lt;li&gt;References section&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Results Graph
&lt;/h4&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.8.GIF]&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.8&lt;/b&gt; Consolidated Statistics_ &lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Tables for Single-Instance Measurements 
&lt;/h4&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.9.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.9&lt;/b&gt; Single Instance Measurements_  &lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Workload Model Graphic
&lt;/h4&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.10.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.10&lt;/b&gt; Workload Model_ &lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Test Environment Graphic
&lt;/h4&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.11.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.11&lt;/b&gt; Test Environment_&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Summary Statement
&lt;/h4&gt;&lt;i&gt;“The results graph shows both response times and resource utilization together. Close examination shows that Application Server CPU Usage and queue length coincide with significantly degraded response time. It appears as if the application server CPU usage was the catalyst to the degradation, but this has yet to be confirmed. The remaining charts and graphs are included as supplemental information for easy reference.”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar References Section
&lt;/h4&gt;&lt;i&gt;“Raw data and additional supporting information is checked into the version-control system with the build and tagged as PerfTest-{date}-{issue number}.”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Creating a Stakeholder Report
&lt;/h3&gt;Although eight key components of a stakeholder report are listed below, all eight may not be appropriate for every stakeholder report. Similarly, there may be additional information that should be included based on exactly what message you are trying to convey with the report. While these eight components will result in successful stakeholder reports most of the time, remember that sometimes creativity is needed to make your message clear and intuitive. &lt;br /&gt; &lt;br /&gt;Consider including the following key components when preparing a stakeholder report:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Criteria to which the results relate&lt;/li&gt;&lt;li&gt;A results graph&lt;/li&gt;&lt;li&gt;A table for single-instance measurements (e.g., maximum throughput achieved)&lt;/li&gt;&lt;li&gt;A brief verbal summary of the chart or graph in terms of criteria &lt;/li&gt;&lt;li&gt;Workload model (graphic)&lt;/li&gt;&lt;li&gt;Test environment (annotated graphic)&lt;/li&gt;&lt;li&gt;Summary of observations, concerns, and recommendations&lt;/li&gt;&lt;li&gt;References section&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Criteria Statement
&lt;/h4&gt;&lt;i&gt;“This report relates to end-user response time compliances as documented in the requirements management system as requirements Perf### through Perf??? at one-half of the expected peak load with the most commonly expected usage scenario.”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Results Graph
&lt;/h4&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.12.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.12&lt;/b&gt; Response Time Compliance Summary_&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Tables for Single-Instance Measurements
&lt;/h4&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.3.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.13&lt;/b&gt; Single Instance Measurements_ &lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Criteria-Based Results Summary
&lt;/h4&gt;&lt;i&gt;“All metrics collected achieved their required values except for the response times of pages 8 and 10.&lt;/i&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Page 10 failed to achieve its required value by 2 percent.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Page 8 failed to achieve its required value by 38 percent.”&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Workload Model Graphic
&lt;/h4&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.14.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.14&lt;/b&gt; Workload Model_&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Test Environment Graphic
&lt;/h4&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig16.15.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 16.15&lt;/b&gt; Test Environment_&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar Observations and Recommendations Statement
&lt;/h4&gt;&lt;i&gt;“Based on the test conditions and results, the performance testing and tuning team recommends the following.&lt;/i&gt;&lt;br /&gt;&lt;ol&gt;
&lt;li&gt;&lt;i&gt;Continue performance testing with increasingly strenuous scenarios and loads.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Priority should be given to determining the root cause of pages 8 and 10 not achieving their acceptance criteria, and subsequently tuning those root causes.&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;At such time as additional pages demonstrate a failure to achieve their acceptance criteria, a dedicated root cause and tuning cycle should be undertaken.”&lt;/i&gt;&lt;/li&gt;
&lt;/ol&gt; &lt;br /&gt;&lt;h4&gt;
Exemplar References Section
&lt;/h4&gt;&lt;i&gt;“All of the data used to create this report and execute the tests that generated that data is checked into the version-control system as read-only with the release candidate and tagged as PerfTest-{date}-{RC number}-Validation.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;“The same data has been temporarily copied to {\\shared-resource\location} for individuals without access to the version-control system.”&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;Performance test reporting is the process of presenting results data that will support key technological and business decisions. The key to creating effective reports is to consider the audience of the data before determining how best to present the data. The most effective performance-test results will present analysis, comparisons, and details behind how the results were obtained, and will influence critical business decision-making.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 18:12:24 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 16 – Performance Test Reporting Fundamentals 20070823061224P</guid></item><item><title>UPDATED WIKI: Introduction</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Introduction&amp;version=4</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Introduction
&lt;/h3&gt;- &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;i&gt;Performance Testing Guidance for Web Applications&lt;/i&gt; provides an end-to-end approach for implementing performance testing. Whether you are new to performance testing or looking for ways to improve your current performance-testing approach, you will gain insights that you can tailor to your specific scenarios.&lt;br /&gt; &lt;br /&gt;The information in this guide is based on applied use in customer scenarios. It reflects the lessons learned from multiple performance-testing professionals. The guidance is task-based and presented in the following parts:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Part 1, “Introduction to Performance Testing,”&lt;/b&gt; gives you an overview of common types of performance testing, key concepts, and a set of common terms used in performance testing.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Part II, “Exemplar Performance Testing Approaches,”&lt;/b&gt; shows you seven core activities for performance testing. This section also contains information designed to show you how to apply performance testing to different environments, including Agile and CMMI&amp;#174; software development.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Part III, “Identify the Test Environment,”&lt;/b&gt; shows you how to collect information about your project that you will need for your performance tests. This includes collecting information on system architecture, the physical deployment, user activities, and any relevant batch processes.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Part IV, “Identify Performance Acceptance Criteria,”&lt;/b&gt; shows you how to determine your performance testing objectives. You will also learn how to achieve clarity around your various performance goals and requirements, from a performance testing perspective.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Part V, “Plan and Design Tests,”&lt;/b&gt; shows you how to model the workload and user experience to design more effective performance tests.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Part VI, “Execute Tests,”&lt;/b&gt; walks you through the main activities of actual performance testing.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Part VII, “Analyze Results and Report,”&lt;/b&gt; shows you how to organize and present your findings in a way that is useful based on the audience and the intent of the report.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Part VIII, “Performance-Testing Techniques,”&lt;/b&gt; shows you the core techniques for performing load and stress testing.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Scope of This Guide
&lt;/h3&gt;This guide is focused on Web application performance testing. It provides recommendations on the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Managing and conducting performance testing in both dynamic (e.g., Agile) and structured (e.g., CMMI) environments.&lt;/li&gt;&lt;li&gt;Performance testing, including load testing, stress testing, and other types of performance related testing.&lt;/li&gt;&lt;li&gt;Core activities of performance testing: identifying objectives, designing tests, executing tests, analyzing results, and reporting.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;Even though many of the topics addressed in this guide apply equally well to other types of applications, the topics are all explained from a Web application perspective for consistency and to ensure that the concepts are presented in a manner that is most intuitive to the majority of anticipated readers.&lt;br /&gt; &lt;br /&gt;This guide is intended to be tool-agnostic. What that means is that none of the concepts presented in this guide require any specific tool to accomplish, though some techniques or concepts will require the use of a certain class of tools.&lt;br /&gt; &lt;br /&gt;This guide does not directly address performance tuning. Performance tuning is extremely application- and technology-specific and thus is not a good fit for the style and format of the guide. The guide does, however, address high-level approaches around how performance testing and performance tuning activities overlap and feed one another. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Why We Wrote This Guide
&lt;/h3&gt;We wrote this guide to accomplish the following:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;To consolidate real-world lessons learned around performance testing.&lt;/li&gt;&lt;li&gt;To present a roadmap for end-to-end performance testing.&lt;/li&gt;&lt;li&gt;To narrow the gap between state of the art and state of the practice.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Features of This Guide
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Approach for performance testing.&lt;/b&gt;  The guide provides an approach that organizes performance testing into logical units to help you incrementally adopt performance testing throughout your application life cycle. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Principles and practices.&lt;/b&gt;  These serve as the foundation for the guide and provide a stable basis for recommendations. They also reflect successful approaches used in the field. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Processes and methodologies.&lt;/b&gt;  These provide steps for managing and conducting performance testing. For simplification and tangible results, they are broken down into activities with inputs, outputs, and steps. You can use the steps as a baseline or to help you evolve your own process. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Life cycle approach.&lt;/b&gt;  The guide provides end-to-end guidance on managing performance testing throughout your application life cycle, to reduce risk and lower total cost of ownership (TCO).&lt;/li&gt;&lt;li&gt;&lt;b&gt;Modular.&lt;/b&gt;  Each chapter within the guide is designed to be read independently. You do not need to read the guide from beginning to end to benefit from it. Use the parts you need. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Holistic.&lt;/b&gt;  The guide is designed with the end in mind. If you do read the guide from beginning to end, it is organized to fit together in a comprehensive way. The guide, in its entirety, is better than the sum of its parts. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Subject matter expertise.&lt;/b&gt;  The guide exposes insight from various experts throughout Microsoft and from customers in the field. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Who Should Read This Guide
&lt;/h3&gt;This guide is targeted at providing individuals with the resources, patterns, and practices they need to conduct effective performance testing. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Guide
&lt;/h3&gt;You can read this guide from beginning to end, or you can read only the relevant parts or chapters. You can adopt the guide in its entirety for your organization or you can use critical components to address your highest-priority needs.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Ways to Use the Guide
&lt;/h4&gt;There are many ways to use this comprehensive guidance. The following are some suggestions: &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Use it as a mentor.&lt;/b&gt;  Use the guide as your mentor for learning how to conduct performance testing. The guide encapsulates the lessons learned and experiences gained by many subject matter experts. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Use it as a reference.&lt;/b&gt;  Use the guide as a reference for learning the do’s and don’ts of performance testing. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Incorporate performance testing into your application development life cycle.&lt;/b&gt;  Adopt the approach and practices that work for you and incorporate them into your application life cycle. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Use it when you design your performance tests.&lt;/b&gt;  Design applications using the principles and best practices presented in this guide. Benefit from lessons learned. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Create training.&lt;/b&gt;  Create training based on the concepts and techniques used throughout the guide.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Organization of This Guide
&lt;/h3&gt;You can read this guide from end to end, or you can read only the chapters you need to do your job.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Parts
&lt;/h4&gt;The guide is divided into eight parts:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Part 1, Introduction to Performance Testing&lt;/li&gt;&lt;li&gt;Part II, Exemplar Performance Testing Approaches&lt;/li&gt;&lt;li&gt;Part III, Identify the Test Environment&lt;/li&gt;&lt;li&gt;Part IV, Identify Performance Acceptance Criteria&lt;/li&gt;&lt;li&gt;Part V, Plan and Design Tests&lt;/li&gt;&lt;li&gt;Part VI, Execute Tests&lt;/li&gt;&lt;li&gt;Part VII, Analyze Results and Report&lt;/li&gt;&lt;li&gt;Part VIII, Performance-Testing Techniques&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part 1, Introduction to Performance Testing&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%201%20%u2013%20Fundamentals%20of%20Web%20Application%20Performance%20Testing&amp;amp;referringTitle=Introduction"&gt;Chapter 1 – Fundamentals of Web Application Performance Testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%202%20%u2013%20Types%20of%20Performance%20Testing&amp;amp;referringTitle=Introduction"&gt;Chapter 2 – Types of Performance Testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%203%20%u2013%20Risks%20Addressed%20Through%20Performance%20Testing&amp;amp;referringTitle=Introduction"&gt;Chapter 3 – Risks Addressed Through Performance Testing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part II, Exemplar Performance Testing Approaches&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%204%20%u2013%20Web%20Application%20Performance%20Testing%20Core%20Activities&amp;amp;referringTitle=Introduction"&gt;Chapter 4 – Web Application Performance Testing Core Activities&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%205%20%u2013%20Coordinating%20Performance%20Testing%20with%20an%20Iteration-Based%20Process&amp;amp;referringTitle=Introduction"&gt;Chapter 5 – Coordinating Performance Testing with an Iteration-Based Process&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%206%20%u2013%20Managing%20an%20Agile%20Performance%20Test%20Cycle&amp;amp;referringTitle=Introduction"&gt;Chapter 6 – Managing an Agile Performance Test Cycle&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%207%20%u2013%20Managing%20the%20Performance%20Test%20Cycle%20in%20a%20Regulated%20%28CMMI%29%20Environment&amp;amp;referringTitle=Introduction"&gt;Chapter 7 – Managing the Performance Test Cycle in a Regulated (CMMI) Environment&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part III, Identify the Test Environment&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%208%20%u2013%20Evaluating%20Systems%20to%20Increase%20Performance-Testing%20Effectiveness&amp;amp;referringTitle=Introduction"&gt;Chapter 8 – Evaluating Systems to Increase Performance-Testing Effectiveness&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part IV, Identify Performance Acceptance Criteria&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%209%20%u2013%20Determining%20Performance%20Testing%20Objectives&amp;amp;referringTitle=Introduction"&gt;Chapter 9 – Determining Performance Testing Objectives&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2010%20%u2013%20Quantifying%20End-User%20Response%20Time%20Goals&amp;amp;referringTitle=Introduction"&gt;Chapter 10 – Quantifying End-User Response Time Goals&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2011%20%u2013%20Consolidating%20Various%20Types%20of%20Performance%20Acceptance%20Criteria&amp;amp;referringTitle=Introduction"&gt;Chapter 11 – Consolidating Various Types of Performance Acceptance Criteria&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part V, Plan and Design Tests&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2012%20%u2013%20Modeling%20Application%20Usage&amp;amp;referringTitle=Introduction"&gt;Chapter 12 – Modeling Application Usage&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2013%20%u2013%20Determining%20Individual%20User%20Data%20and%20Variances&amp;amp;referringTitle=Introduction"&gt;Chapter 13 – Determining Individual User Data and Variances&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VI, Execute Tests&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2014%20%u2013%20Test%20Execution&amp;amp;referringTitle=Introduction"&gt;Chapter 14 – Test Execution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VII, Analyze Results and Report&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2015%20%u2013%20Key%20Mathematic%20Principles%20for%20Performance%20Testers&amp;amp;referringTitle=Introduction"&gt;Chapter 15 – Key Mathematic Principles for Performance Testers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2016%20%u2013%20Performance%20Test%20Reporting%20Fundamentals&amp;amp;referringTitle=Introduction"&gt;Chapter 16 – Performance Test Reporting Fundamentals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;b&gt;Part VIII, Performance-Testing Techniques&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2017%20%u2013%20Load-Testing%20Web%20Applications&amp;amp;referringTitle=Introduction"&gt;Chapter 17 – Load-Testing Web Applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter%2018%20%u2013%20Stress-Testing%20Web%20Applications&amp;amp;referringTitle=Introduction"&gt;Chapter 18 – Stress-Testing Web Applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Approach Used in This Guide
&lt;/h3&gt;The primary task of any testing activity is to collect information in order to be able to help stakeholders make informed decisions related to the overall quality of the application being tested. Performance testing additionally tends to focus on helping to identify bottlenecks in a system, tuning a system, establishing a baseline for future testing, and determining compliance with performance goals and requirements. In addition, the results from performance testing and analysis can help you to estimate the hardware configuration required to support the application(s) when you “go live” to production operation. &lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17679" alt="CoreActivities.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;The performance-testing approach used in this guide consists of the following activities:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Activity 1. Identify the Test Environment.&lt;/b&gt;  Identify the physical test environment and the production environment as well as the tools and resources available to the test team. The physical environment includes hardware, software, and network configurations. Having a thorough understanding of the entire test environment at the outset enables more efficient test design and planning and helps you identify testing challenges early in the project. In some situations, this process must be revisited periodically throughout the project’s life cycle.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Activity 2. Identify Performance Acceptance Criteria.&lt;/b&gt;  Identify the response time, throughput, and resource utilization goals and constraints. In general, response time is a user concern, throughput is a business concern, and resource utilization is a system concern. Additionally, identify project success criteria that may not be captured by those goals and constraints; for example, using performance tests to evaluate what combination of configuration settings will result in the most desirable performance characteristics.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Activity 3. Plan and Design Tests.&lt;/b&gt;  Identify key scenarios, determine variability among representative users and how to simulate that variability, define test data, and establish metrics to be collected. Consolidate this information into one or more models of system usage to be implemented, executed, and analyzed.   &lt;/li&gt;&lt;li&gt;&lt;b&gt;Activity 4. Configure the Test Environment.&lt;/b&gt;  Prepare the test environment, tools, and resources necessary to execute each strategy as features and components become available for test. Ensure that the test environment is instrumented for resource monitoring as necessary.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Activity 5. Implement the Test Design.&lt;/b&gt;  Develop the performance tests in accordance with the test design.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Activity 6. Execute the Test.&lt;/b&gt;  Run and monitor your tests. Validate the tests, test data, and results collection. Execute validated tests for analysis while monitoring the test and the test environment.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Activity 7. Analyze Results, Report, and Retest.&lt;/b&gt;  Consolidate and share results data. Analyze the data both individually and as a cross-functional team. Reprioritize the remaining tests and re-execute them as needed. When all of the metric values are within accepted limits, none of the set thresholds have been violated, and all of the desired information has been collected, you have finished testing that particular scenario on that particular configuration.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Feedback on the Guide
&lt;/h3&gt;We have made every effort to ensure the accuracy of this guide and its companion content. If you have comments on this guide, send e-mail to&lt;br /&gt; &lt;a href="mailto:PerfTest@microsoft.com" class="externalLink"&gt;mailto:PerfTest@microsoft.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; . &lt;br /&gt; &lt;br /&gt;We are particularly interested in feedback regarding the following: &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Technical issues specific to recommendations &lt;/li&gt;&lt;li&gt;Usefulness and usability issues&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
The Team Who Brought You This Guide
&lt;/h3&gt;This guide was created by the following team members:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;J.D. Meier&lt;/li&gt;&lt;li&gt;Carlos Farre&lt;/li&gt;&lt;li&gt;Prashant Bansode&lt;/li&gt;&lt;li&gt;Scott Barber&lt;/li&gt;&lt;li&gt;Dennis Rea&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Contributors and Reviewers
&lt;/h3&gt;Alan Ridlehoover; Clint Huffman; Edmund Wong; Ken Perilman; Larry Brader; Mark Tomlinson; Paul Williams; Pete Coupland; Rico Mariani&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
External Contributors and Reviewers
&lt;/h3&gt;Alberto Savoia; Ben Simo; Cem Kaner; Chris Loosley; Corey Goldberg; Dawn Haynes; Derek Mead; Karen N. Johnson; Mike Bonar; Pradeep Soundararajan; Richard Leeke; Roland Stens; Ross Collard; Steven Woody&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Tell Us About Your Success
&lt;/h3&gt;If this guide helps you, we would like to know. Please tell us by writing a short summary of the problems you faced and how this guide helped you out. Submit your summary to:&lt;br /&gt;&lt;a href="mailto:MyStory@Microsoft.com" class="externalLink"&gt;mailto:MyStory@Microsoft.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 17:52:26 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Introduction 20070823055226P</guid></item><item><title>UPDATED WIKI: Chapter 15 – Key Mathematic Principles for Performance Testers</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 15 %25u2013 Key Mathematic Principles for Performance Testers&amp;version=3</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 15 – Key Mathematic Principles for Performance Testers
&lt;/h3&gt;- &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Learn the uses, meanings of, and concepts underlying common mathematical and statistical principles as they apply to performance test analysis and reporting.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;Members of software development teams, developers, testers, administrators, and managers alike need to know how to apply mathematics and interpret statistical data in order to do their jobs effectively. Performance analysis and reporting are particularly math-intensive. This chapter describes the most commonly used, misapplied, and misunderstood mathematical and statistical concepts in performance testing, in a way that will benefit any member of the team. &lt;br /&gt; &lt;br /&gt;Even though there is a need to understand many mathematical and statistical concepts, many software developers, testers, and managers either do not have strong backgrounds in or do not enjoy mathematics and statistics. This leads to significant misrepresentations and misinterpretation of performance-testing results. The information presented in this article is not intended to replace formal training in these areas, but rather to provide common language and commonsense explanations for mathematical and statistical operations that are valuable to understanding performance testing. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Chapter
&lt;/h3&gt;Use this chapter to understand the different metrics and calculations that are used for analyzing performance data results and preparing performance results reports. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “Exemplar Data Sets” section to gain an understanding of the exemplars, which are used to illustrate the key mathematical principles explained throughout the chapter.&lt;/li&gt;&lt;li&gt;Use the remaining sections to learn about key mathematical principles that will help you to understand and present meaningful performance testing reports. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Exemplar Data Sets
&lt;/h3&gt;This chapter refers to three exemplar data sets for the purposes of illustration, namely.&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Data Set A&lt;/li&gt;&lt;li&gt;Data Set B&lt;/li&gt;&lt;li&gt;Data Set C&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Data Sets Summary
&lt;/h4&gt;The following is a summary of Data Sets A, B, and C.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17746" alt="Fig15.1.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.1&lt;/b&gt; Summary of Data Sets A, B, and C_&lt;br /&gt;&lt;h4&gt;
Data Set A
&lt;/h4&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17747" alt="Fig15.2.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.2&lt;/b&gt; Data Set A_&lt;br /&gt; &lt;br /&gt;100 total data points, distributed as follows:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;5 data points have a value of 1.&lt;/li&gt;&lt;li&gt;10 data points have a value of 2.&lt;/li&gt;&lt;li&gt;20 data points have a value of 3.&lt;/li&gt;&lt;li&gt;30 data points have a value of 4.&lt;/li&gt;&lt;li&gt;20 data points have a value of 5.&lt;/li&gt;&lt;li&gt;10 data points have a value of 6.&lt;/li&gt;&lt;li&gt;5 data points have a value of 7.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Data Set B
&lt;/h4&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17748" alt="Fig15.3.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.3&lt;/b&gt; Data Set B_&lt;br /&gt; &lt;br /&gt;100 total data points, distributed as follows:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;80 data points have a value of 1.&lt;/li&gt;&lt;li&gt;20 data points have a value of 16.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Data Set C
&lt;/h4&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17749" alt="Fig15.4.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.4&lt;/b&gt; Data Set C_&lt;br /&gt; &lt;br /&gt;100 total data points, distributed as follows:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;11 data points have a value of 0.&lt;/li&gt;&lt;li&gt;10 data points have a value of 1.&lt;/li&gt;&lt;li&gt;11 data points have a value of 2.&lt;/li&gt;&lt;li&gt;13 data points have a value of 3.&lt;/li&gt;&lt;li&gt;11 data points have a value of 4.&lt;/li&gt;&lt;li&gt;11 data points have a value of 5.&lt;/li&gt;&lt;li&gt;11 data points have a value of 6.&lt;/li&gt;&lt;li&gt;12 data points have a value of 7.&lt;/li&gt;&lt;li&gt;10 data points have a value of 8.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Averages
&lt;/h3&gt;An average ? also known as an &lt;i&gt;arithmetic mean&lt;/i&gt;, or &lt;i&gt;mean&lt;/i&gt; for short ? is probably the most commonly used, and most commonly misunderstood, statistic of all. To calculate an average, you simply add up all the numbers and divide the sum by the quantity of numbers you just added. What seems to confound many people the most when it comes to performance testing is that, in this example, Data Sets A, B, and C each have an average of exactly 4. In terms of application response times, these sets of data have extremely different meanings. Given a response time goal of 5 seconds, looking at only the average of these sets, all three seem to meet the goal. Looking at the data, however, shows that none of the data sets is composed only of data that meets the goal, and that Data Set B probably demonstrates some kind of performance anomaly. Use caution when using averages to discuss response times and, if at all possible, avoid using averages as the only reported statistic. When reporting averages, it is a good idea to include the sample size, minimum value, maximum value, and standard deviation for the data set.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Percentiles
&lt;/h3&gt;Few people involved with developing software are familiar with percentiles. A &lt;i&gt;percentile&lt;/i&gt; is a straightforward concept that is easier to demonstrate than define. For example, to find the 95th percentile value for a data set consisting of 100 page-response-time measurements, you would sort the measurements from largest to smallest and then count down six data points from the largest. The 6th data point value represents the 95th percentile of those measurements. For the purposes of response times, this statistic is read “95 percent of the simulated users experienced a response time of &lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=the%206th-slowest%20value&amp;amp;referringTitle=Chapter%2015%20%u2013%20Key%20Mathematic%20Principles%20for%20Performance%20Testers"&gt;the 6th-slowest value&lt;/a&gt; or less for this test scenario.”&lt;br /&gt; &lt;br /&gt;It is important to note that percentile statistics can only stand alone when used to represent data that is uniformly or normally distributed with an acceptable number of outliers (see “Statistical Outliers” below). To illustrate this point, consider the exemplar data sets. The 95th percentile of Data Set B is 16 seconds. Obviously, this does not give the impression of achieving the 5-second response time goal. Interestingly, this can be misleading as well because the 80th percentile value of Data Set B is 1 second. With a response time goal of 5 seconds, it is likely unacceptable to have any response times of 16 seconds, so in this case neither of these percentile values represent the data in a manner that is useful to summarizing response time. &lt;br /&gt; &lt;br /&gt;Data Set A is a normally distributed data set that has a 95th percentile value of 6 seconds, an 85th percentile value of 5 seconds, and a maximum value of 7 seconds. In this case, reporting either the 85th or 95th percentile values represents the data in a manner where the assumptions a stakeholder is likely to make about the data are likely to be appropriate to the data.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Medians
&lt;/h3&gt;A &lt;i&gt;median&lt;/i&gt; is simply the middle value in a data set when sequenced from lowest to highest. In cases where there is an even number of data points and the two center values are not the same, some disciplines suggest that the median is the average of the two center data points, while others suggest choosing the value closer to the average of the entire set of data. In the case of the exemplar data sets, Data Sets A and B have median values of 4, and Data Set C has a median value of 1.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Normal Values
&lt;/h3&gt;A &lt;i&gt;normal value&lt;/i&gt; is the single value that occurs most often in a data set. Data Set A has a normal value of 4, Data Set B has a normal value of 3, and Data Set C has a normal value of 1.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Standard Deviations
&lt;/h3&gt;By definition, one &lt;i&gt;standard deviation&lt;/i&gt; is the amount of variance within a set of measurements that encompasses approximately the top 68 percent of all measurements in the data set; in other words, knowing the standard deviation of your data set tells you how densely the data points are clustered around the mean. Simply put, the smaller the standard deviation, the more consistent the data. To illustrate, the standard deviation of Data Set A is approximately 1.5, the standard deviation of Data Set B is approximately 6.0, and the standard deviation of Data Set C is approximately 2.6. &lt;br /&gt; &lt;br /&gt;A common rule in this case is: “Data with a standard deviation greater than half of its mean should be treated as suspect. If the data is accurate, the phenomenon the data represents is not displaying a normal distribution pattern.” Applying this rule, Data Set A is likely to be a reasonable example of a normal distribution; Data Set B may or may not be a reasonable representation of a normal distribution; and Data Set C is undoubtedly not a reasonable representation of a normal distribution.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Uniform Distributions
&lt;/h3&gt;Uniform distributions ? sometimes known as &lt;i&gt;linear distributions&lt;/i&gt; ? represent a collection of data that is roughly equivalent to a set of random numbers evenly spaced between the upper and lower bounds. In a uniform distribution, every number in the data set is represented approximately the same number of times. Uniform distributions are frequently used when modeling user delays, but are not common in response time results data. In fact, uniformly distributed results in response time data may be an indication of suspect results.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17750" alt="Fig15.5.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.5&lt;/b&gt; Uniform Distributions_ &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Normal Distributions
&lt;/h3&gt;Also known as &lt;i&gt;bell curves&lt;/i&gt;, &lt;i&gt;normal distributions&lt;/i&gt; are data sets whose member data are weighted toward the center (or median value). When graphed, the shape of the “bell” of normally distributed data can vary from tall and narrow to short and squat, depending on the standard deviation of the data set. The smaller the standard deviation, the taller and more narrow the “bell.” Statistically speaking, most measurements of human variance result in data sets that are normally distributed. As it turns out, end-user response times for Web applications are also frequently normally distributed. &lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17751" alt="Fig15.6.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.6&lt;/b&gt; Normal Distribution_&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Statistical Significance
&lt;/h3&gt;Mathematically calculating statistical significance, or reliability, based on sample size is a task that is too arduous and complex for most commercially driven software-development projects. Fortunately, there is a commonsense approach that is both efficient and accurate enough to identify the most significant concerns related to statistical significance. Unless you have a good reason to use a mathematically rigorous calculation for statistical significance, a commonsense approximation is generally sufficient. In support of the commonsense approach described below, consider this excerpt from a StatSoft, Inc. (http://www.statsoftinc.com) discussion on the topic:&lt;br /&gt; &lt;br /&gt;There is no way to avoid arbitrariness in the final decision as to what level of significance will be treated as really ‘significant.’ That is, the selection of some level of significance, up to which the results will be rejected as invalid, is arbitrary. &lt;br /&gt; &lt;br /&gt;Typically, it is fairly easy to add iterations to performance tests to increase the total number of measurements collected; the best way to ensure statistical significance is simply to collect additional data if there is any doubt about whether or not the collected data represents reality. Whenever possible, ensure that you obtain a sample size of at least 100 measurements from at least two independent tests. &lt;br /&gt; &lt;br /&gt;Although there is no strict rule about how to decide which results are statistically similar without complex equations that call for huge volumes of data that commercially driven software projects rarely have the time or resources to collect, the following is a reasonable approach to apply if there is doubt about the significance or reliability of data after evaluating two test executions where the data was expected to be similar. Compare results from at least five test executions and apply the rules of thumb below to determine whether or not test results are similar enough to be considered reliable:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;If more than 20 percent (or one out of five) of the test-execution results appear not to be similar to the others, something is generally wrong with the test environment, the application, or the test itself.&lt;/li&gt;&lt;li&gt;If a 90th percentile value for any test execution is greater than the maximum or less than the minimum value for any of the other test executions, that data set is probably not statistically similar.&lt;/li&gt;&lt;li&gt;If measurements from a test are noticeably higher or lower, when charted side-by-side, than the results of the other test executions, it is probably not statistically similar.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17752" alt="Fig15.7.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.7&lt;/b&gt; Result Comparison_ &lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;If one data set for a particular item (e.g., the response time for a single page) in a test is noticeably higher or lower, but the results for the data sets of the remaining items appear similar, the test itself is probably statistically similar (even though it is probably worth the time to investigate the reasons for the difference of the one dissimilar data set.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Statistical Equivalence
&lt;/h3&gt;The method above for determining statistical significance actually is applying the principle of statistical equivalence. Essentially, the process outlined above for determining statistical significance could be restated as “Given results data from multiple tests intended to be equivalent, the data from any one of those tests may be treated as statistically significant if that data is statistically equivalent to 80 percent or more of all the tests intended to be equivalent.” Mathematical determination of equivalence using such formal methods as chi-squared and t-tests are not common on commercial software development projects. Rather, it is generally deemed acceptable to estimate equivalence by using charts similar to those used to determine statistical significance. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Statistical Outliers
&lt;/h3&gt;From a purely statistical point of view, any measurement that falls outside of three standard deviations, or 99 percent, of all collected measurements is considered an &lt;i&gt;outlier&lt;/i&gt;. The problem with this definition is that it assumes that the collected measurements are both statistically significant and distributed normally, which is not at all automatic when evaluating performance test data.&lt;br /&gt; &lt;br /&gt;For the purposes of this explanation, a more applicable definition of an outlier from a StatSoft, Inc. (http://www.statsoftinc.com) is the following:&lt;br /&gt;Outliers are atypical, infrequent observations: data points which do not appear to follow the distribution of the rest of the sample. These may represent consistent but rare traits, or be the result of measurement errors or other anomalies which should not be modeled.&lt;br /&gt;Note that this (or any other) description of outliers only applies to data that is deemed to be a statistically significant sample of measurements. Without a statistically significant sample, there is no generally acceptable approach to determining the difference between an outlier and a representative measurement. &lt;br /&gt; &lt;br /&gt;Using this description, results graphs can be used to determine evidence of outliers — occasional data points that just don’t seem to belong. A reasonable approach to determining if any apparent outliers are truly atypical and infrequent is to re-execute the tests and then compare the results to the first set. If the majority of the measurements are the same, except for the potential outliers, the results are likely to contain genuine outliers that can be disregarded. However, if the results show similar potential outliers, these are probably valid measurements that deserve consideration.&lt;br /&gt; &lt;br /&gt;After identifying that a dataset appears to contain outliers, the next question is, how many outliers can be dismissed as “atypical infrequent observations?”&lt;br /&gt; &lt;br /&gt;There is no set number of outliers that can be unilaterally dismissed, but rather a maximum percentage of the total number of observations. Applying the spirit of the two definitions above, a reasonable conclusion would be that up to 1 percent of the total values for a particular measurement that are outside of three standard deviations from the mean are significantly atypical and infrequent enough to be considered outliers.&lt;br /&gt; &lt;br /&gt;In summary, in practice for commercially driven software development, it is generally acceptable to say that values representing less than 1 percent of all the measurements for a particular item that are at least three standard deviations off the mean are candidates for omission in results analysis if (and only if) identical values are not found in previous or subsequent tests. To express the same concept in a more colloquial way: obviously rare and strange data points that can’t immediately be explained, account for a very small part of the results, and are not identical to any results from other tests are probably outliers. &lt;br /&gt; &lt;br /&gt;A note of caution: identifying a data point as an outlier and excluding it from results summaries does not imply ignoring the data point. Excluded outliers should be tracked in some manner appropriate to the project context in order to determine, as more tests are conducted, if a pattern of concern is identified in what by all indications are outliers for individual tests.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Confidence Intervals
&lt;/h3&gt;Because determining levels of confidence in data is even more complex and time-consuming than determining statistical significance or the existence of outliers, it is extremely rare to make such a determination during commercial software projects. A confidence interval for a specific statistic is the range of values around the statistic where the ‘true’ statistic is likely to be located within a given level of certainty. &lt;br /&gt; &lt;br /&gt;Because stakeholders do frequently ask for some indication of the presumed accuracy of test results ? for example, what is the confidence interval for these results? ? another commonsense approach must be employed.&lt;br /&gt; &lt;br /&gt;When performance testing, the answer to that question is directly related to the accuracy of the model tested. Since in many cases the accuracy of the model cannot be reasonably determined until after the software is released into production, this is not a particularly useful dependency. However, there is__ a way to demonstrate a confidence interval in the results.&lt;br /&gt; &lt;br /&gt;By testing a variety of scenarios, including what the team determines to be “best,” “worst,” and “expected” cases in terms of the measurements being collected, a graphical depiction of a confidence interval can be created, similar to the one below. &lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17753" alt="Fig15.8.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.8&lt;/b&gt; Usage Models_&lt;br /&gt; &lt;br /&gt;In this graph, a dashed line represents the performance goal, and the three curves represent the results from the worst-case (most performance-intensive), best-case (least performance-intensive), and expected-case user community models. As one would expect, the blue curve from the expected case falls between the best- and worst-case curves. Observing where these curves cross the red line, one can see how many users can access the system in each case while still meeting the stated performance goal. If the team is 95-percent confident (by their own estimation) that the best- and worst-case user community models are truly best- and worst-case, this chart can be read as follows: the tests show, with 95-percent confidence, that between 100 and 200 users can access the system while experiencing acceptable performance.&lt;br /&gt; &lt;br /&gt;Although a confidence interval of between 100 and 200 users might seem quite large, it is important to note that without empirical data representing the actual production usage, it is unreasonable to expect higher confidence in results than there is in the models that generate those results. The best that one can do is to be 100-percent confident that the test results accurately represent the model being tested. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;Members of software development teams, developers, testers, administrators, and managers alike need to know how to apply mathematics and interpret statistical data in order to do their jobs effectively. Performance analysis and reporting are particularly math-intensive. It is critical that mathematical and statistical concepts in performance testing be understood so that correct performance-testing analysis and reporting can be done.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 17:51:28 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 15 – Key Mathematic Principles for Performance Testers 20070823055128P</guid></item><item><title>UPDATED WIKI: Chapter 15 – Key Mathematic Principles for Performance Testers</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 15 %25u2013 Key Mathematic Principles for Performance Testers&amp;version=2</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 15 – Key Mathematic Principles for Performance Testers
&lt;/h3&gt;- &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Learn the uses, meanings of, and concepts underlying common mathematical and statistical principles as they apply to performance test analysis and reporting.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;Members of software development teams, developers, testers, administrators, and managers alike need to know how to apply mathematics and interpret statistical data in order to do their jobs effectively. Performance analysis and reporting are particularly math-intensive. This chapter describes the most commonly used, misapplied, and misunderstood mathematical and statistical concepts in performance testing, in a way that will benefit any member of the team. &lt;br /&gt; &lt;br /&gt;Even though there is a need to understand many mathematical and statistical concepts, many software developers, testers, and managers either do not have strong backgrounds in or do not enjoy mathematics and statistics. This leads to significant misrepresentations and misinterpretation of performance-testing results. The information presented in this article is not intended to replace formal training in these areas, but rather to provide common language and commonsense explanations for mathematical and statistical operations that are valuable to understanding performance testing. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Chapter
&lt;/h3&gt;Use this chapter to understand the different metrics and calculations that are used for analyzing performance data results and preparing performance results reports. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “Exemplar Data Sets” section to gain an understanding of the exemplars, which are used to illustrate the key mathematical principles explained throughout the chapter.&lt;/li&gt;&lt;li&gt;Use the remaining sections to learn about key mathematical principles that will help you to understand and present meaningful performance testing reports. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Exemplar Data Sets
&lt;/h3&gt;This chapter refers to three exemplar data sets for the purposes of illustration, namely.&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Data Set A&lt;/li&gt;&lt;li&gt;Data Set B&lt;/li&gt;&lt;li&gt;Data Set C&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Data Sets Summary
&lt;/h4&gt;The following is a summary of Data Sets A, B, and C.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17746" alt="Fig15.1.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.1&lt;/b&gt; Summary of Data Sets A, B, and C_&lt;br /&gt;&lt;h4&gt;
Data Set A
&lt;/h4&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17747" alt="Fig15.2.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.2&lt;/b&gt; Data Set A_&lt;br /&gt; &lt;br /&gt;100 total data points, distributed as follows:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;5 data points have a value of 1.&lt;/li&gt;&lt;li&gt;10 data points have a value of 2.&lt;/li&gt;&lt;li&gt;20 data points have a value of 3.&lt;/li&gt;&lt;li&gt;30 data points have a value of 4.&lt;/li&gt;&lt;li&gt;20 data points have a value of 5.&lt;/li&gt;&lt;li&gt;10 data points have a value of 6.&lt;/li&gt;&lt;li&gt;5 data points have a value of 7.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Data Set B
&lt;/h4&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17748" alt="Fig15.3.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.3&lt;/b&gt; Data Set B_&lt;br /&gt; &lt;br /&gt;100 total data points, distributed as follows:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;80 data points have a value of 1.&lt;/li&gt;&lt;li&gt;20 data points have a value of 16.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Data Set C
&lt;/h4&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17749" alt="Fig15.4.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.4&lt;/b&gt; Data Set C_&lt;br /&gt; &lt;br /&gt;100 total data points, distributed as follows:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;11 data points have a value of 0.&lt;/li&gt;&lt;li&gt;10 data points have a value of 1.&lt;/li&gt;&lt;li&gt;11 data points have a value of 2.&lt;/li&gt;&lt;li&gt;13 data points have a value of 3.&lt;/li&gt;&lt;li&gt;11 data points have a value of 4.&lt;/li&gt;&lt;li&gt;11 data points have a value of 5.&lt;/li&gt;&lt;li&gt;11 data points have a value of 6.&lt;/li&gt;&lt;li&gt;12 data points have a value of 7.&lt;/li&gt;&lt;li&gt;10 data points have a value of 8.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Averages
&lt;/h3&gt;An average ? also known as an &lt;i&gt;arithmetic mean&lt;/i&gt;, or &lt;i&gt;mean&lt;/i&gt; for short ? is probably the most commonly used, and most commonly misunderstood, statistic of all. To calculate an average, you simply add up all the numbers and divide the sum by the quantity of numbers you just added. What seems to confound many people the most when it comes to performance testing is that, in this example, Data Sets A, B, and C each have an average of exactly 4. In terms of application response times, these sets of data have extremely different meanings. Given a response time goal of 5 seconds, looking at only the average of these sets, all three seem to meet the goal. Looking at the data, however, shows that none of the data sets is composed only of data that meets the goal, and that Data Set B probably demonstrates some kind of performance anomaly. Use caution when using averages to discuss response times and, if at all possible, avoid using averages as the only reported statistic. When reporting averages, it is a good idea to include the sample size, minimum value, maximum value, and standard deviation for the data set.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Percentiles
&lt;/h3&gt;Few people involved with developing software are familiar with percentiles. A &lt;i&gt;percentile&lt;/i&gt; is a straightforward concept that is easier to demonstrate than define. For example, to find the 95th percentile value for a data set consisting of 100 page-response-time measurements, you would sort the measurements from largest to smallest and then count down six data points from the largest. The 6th data point value represents the 95th percentile of those measurements. For the purposes of response times, this statistic is read “95 percent of the simulated users experienced a response time of &lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=the%206th-slowest%20value&amp;amp;referringTitle=Chapter%2015%20%u2013%20Key%20Mathematic%20Principles%20for%20Performance%20Testers"&gt;the 6th-slowest value&lt;/a&gt; or less for this test scenario.”&lt;br /&gt; &lt;br /&gt;It is important to note that percentile statistics can only stand alone when used to represent data that is uniformly or normally distributed with an acceptable number of outliers (see “Statistical Outliers” below). To illustrate this point, consider the exemplar data sets. The 95th percentile of Data Set B is 16 seconds. Obviously, this does not give the impression of achieving the 5-second response time goal. Interestingly, this can be misleading as well because the 80th percentile value of Data Set B is 1 second. With a response time goal of 5 seconds, it is likely unacceptable to have any response times of 16 seconds, so in this case neither of these percentile values represent the data in a manner that is useful to summarizing response time. &lt;br /&gt; &lt;br /&gt;Data Set A is a normally distributed data set that has a 95th percentile value of 6 seconds, an 85th percentile value of 5 seconds, and a maximum value of 7 seconds. In this case, reporting either the 85th or 95th percentile values represents the data in a manner where the assumptions a stakeholder is likely to make about the data are likely to be appropriate to the data.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Medians
&lt;/h3&gt;A &lt;i&gt;median&lt;/i&gt; is simply the middle value in a data set when sequenced from lowest to highest. In cases where there is an even number of data points and the two center values are not the same, some disciplines suggest that the median is the average of the two center data points, while others suggest choosing the value closer to the average of the entire set of data. In the case of the exemplar data sets, Data Sets A and B have median values of 4, and Data Set C has a median value of 1.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Normal Values
&lt;/h3&gt;A &lt;i&gt;normal value&lt;/i&gt; is the single value that occurs most often in a data set. Data Set A has a normal value of 4, Data Set B has a normal value of 3, and Data Set C has a normal value of 1.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Standard Deviations
&lt;/h3&gt;By definition, one &lt;i&gt;standard deviation&lt;/i&gt; is the amount of variance within a set of measurements that encompasses approximately the top 68 percent of all measurements in the data set; in other words, knowing the standard deviation of your data set tells you how densely the data points are clustered around the mean. Simply put, the smaller the standard deviation, the more consistent the data. To illustrate, the standard deviation of Data Set A is approximately 1.5, the standard deviation of Data Set B is approximately 6.0, and the standard deviation of Data Set C is approximately 2.6. &lt;br /&gt; &lt;br /&gt;A common rule in this case is: “Data with a standard deviation greater than half of its mean should be treated as suspect. If the data is accurate, the phenomenon the data represents is not displaying a normal distribution pattern.” Applying this rule, Data Set A is likely to be a reasonable example of a normal distribution; Data Set B may or may not be a reasonable representation of a normal distribution; and Data Set C is undoubtedly not a reasonable representation of a normal distribution.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Uniform Distributions
&lt;/h3&gt;Uniform distributions ? sometimes known as &lt;i&gt;linear distributions&lt;/i&gt; ? represent a collection of data that is roughly equivalent to a set of random numbers evenly spaced between the upper and lower bounds. In a uniform distribution, every number in the data set is represented approximately the same number of times. Uniform distributions are frequently used when modeling user delays, but are not common in response time results data. In fact, uniformly distributed results in response time data may be an indication of suspect results.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17750" alt="Fig15.5.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.5&lt;/b&gt; Uniform Distributions_ &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Normal Distributions
&lt;/h3&gt;Also known as &lt;i&gt;bell curves&lt;/i&gt;, &lt;i&gt;normal distributions&lt;/i&gt; are data sets whose member data are weighted toward the center (or median value). When graphed, the shape of the “bell” of normally distributed data can vary from tall and narrow to short and squat, depending on the standard deviation of the data set. The smaller the standard deviation, the taller and more narrow the “bell.” Statistically speaking, most measurements of human variance result in data sets that are normally distributed. As it turns out, end-user response times for Web applications are also frequently normally distributed. &lt;br /&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:15.6.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.6&lt;/b&gt; Normal Distribution_&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Statistical Significance
&lt;/h3&gt;Mathematically calculating statistical significance, or reliability, based on sample size is a task that is too arduous and complex for most commercially driven software-development projects. Fortunately, there is a commonsense approach that is both efficient and accurate enough to identify the most significant concerns related to statistical significance. Unless you have a good reason to use a mathematically rigorous calculation for statistical significance, a commonsense approximation is generally sufficient. In support of the commonsense approach described below, consider this excerpt from a StatSoft, Inc. (http://www.statsoftinc.com) discussion on the topic:&lt;br /&gt; &lt;br /&gt;There is no way to avoid arbitrariness in the final decision as to what level of significance will be treated as really ‘significant.’ That is, the selection of some level of significance, up to which the results will be rejected as invalid, is arbitrary. &lt;br /&gt; &lt;br /&gt;Typically, it is fairly easy to add iterations to performance tests to increase the total number of measurements collected; the best way to ensure statistical significance is simply to collect additional data if there is any doubt about whether or not the collected data represents reality. Whenever possible, ensure that you obtain a sample size of at least 100 measurements from at least two independent tests. &lt;br /&gt; &lt;br /&gt;Although there is no strict rule about how to decide which results are statistically similar without complex equations that call for huge volumes of data that commercially driven software projects rarely have the time or resources to collect, the following is a reasonable approach to apply if there is doubt about the significance or reliability of data after evaluating two test executions where the data was expected to be similar. Compare results from at least five test executions and apply the rules of thumb below to determine whether or not test results are similar enough to be considered reliable:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;If more than 20 percent (or one out of five) of the test-execution results appear not to be similar to the others, something is generally wrong with the test environment, the application, or the test itself.&lt;/li&gt;&lt;li&gt;If a 90th percentile value for any test execution is greater than the maximum or less than the minimum value for any of the other test executions, that data set is probably not statistically similar.&lt;/li&gt;&lt;li&gt;If measurements from a test are noticeably higher or lower, when charted side-by-side, than the results of the other test executions, it is probably not statistically similar.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17752" alt="Fig15.7.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.7&lt;/b&gt; Result Comparison_ &lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;If one data set for a particular item (e.g., the response time for a single page) in a test is noticeably higher or lower, but the results for the data sets of the remaining items appear similar, the test itself is probably statistically similar (even though it is probably worth the time to investigate the reasons for the difference of the one dissimilar data set.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Statistical Equivalence
&lt;/h3&gt;The method above for determining statistical significance actually is applying the principle of statistical equivalence. Essentially, the process outlined above for determining statistical significance could be restated as “Given results data from multiple tests intended to be equivalent, the data from any one of those tests may be treated as statistically significant if that data is statistically equivalent to 80 percent or more of all the tests intended to be equivalent.” Mathematical determination of equivalence using such formal methods as chi-squared and t-tests are not common on commercial software development projects. Rather, it is generally deemed acceptable to estimate equivalence by using charts similar to those used to determine statistical significance. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Statistical Outliers
&lt;/h3&gt;From a purely statistical point of view, any measurement that falls outside of three standard deviations, or 99 percent, of all collected measurements is considered an &lt;i&gt;outlier&lt;/i&gt;. The problem with this definition is that it assumes that the collected measurements are both statistically significant and distributed normally, which is not at all automatic when evaluating performance test data.&lt;br /&gt; &lt;br /&gt;For the purposes of this explanation, a more applicable definition of an outlier from a StatSoft, Inc. (http://www.statsoftinc.com) is the following:&lt;br /&gt;Outliers are atypical, infrequent observations: data points which do not appear to follow the distribution of the rest of the sample. These may represent consistent but rare traits, or be the result of measurement errors or other anomalies which should not be modeled.&lt;br /&gt;Note that this (or any other) description of outliers only applies to data that is deemed to be a statistically significant sample of measurements. Without a statistically significant sample, there is no generally acceptable approach to determining the difference between an outlier and a representative measurement. &lt;br /&gt; &lt;br /&gt;Using this description, results graphs can be used to determine evidence of outliers — occasional data points that just don’t seem to belong. A reasonable approach to determining if any apparent outliers are truly atypical and infrequent is to re-execute the tests and then compare the results to the first set. If the majority of the measurements are the same, except for the potential outliers, the results are likely to contain genuine outliers that can be disregarded. However, if the results show similar potential outliers, these are probably valid measurements that deserve consideration.&lt;br /&gt; &lt;br /&gt;After identifying that a dataset appears to contain outliers, the next question is, how many outliers can be dismissed as “atypical infrequent observations?”&lt;br /&gt; &lt;br /&gt;There is no set number of outliers that can be unilaterally dismissed, but rather a maximum percentage of the total number of observations. Applying the spirit of the two definitions above, a reasonable conclusion would be that up to 1 percent of the total values for a particular measurement that are outside of three standard deviations from the mean are significantly atypical and infrequent enough to be considered outliers.&lt;br /&gt; &lt;br /&gt;In summary, in practice for commercially driven software development, it is generally acceptable to say that values representing less than 1 percent of all the measurements for a particular item that are at least three standard deviations off the mean are candidates for omission in results analysis if (and only if) identical values are not found in previous or subsequent tests. To express the same concept in a more colloquial way: obviously rare and strange data points that can’t immediately be explained, account for a very small part of the results, and are not identical to any results from other tests are probably outliers. &lt;br /&gt; &lt;br /&gt;A note of caution: identifying a data point as an outlier and excluding it from results summaries does not imply ignoring the data point. Excluded outliers should be tracked in some manner appropriate to the project context in order to determine, as more tests are conducted, if a pattern of concern is identified in what by all indications are outliers for individual tests.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Confidence Intervals
&lt;/h3&gt;Because determining levels of confidence in data is even more complex and time-consuming than determining statistical significance or the existence of outliers, it is extremely rare to make such a determination during commercial software projects. A confidence interval for a specific statistic is the range of values around the statistic where the ‘true’ statistic is likely to be located within a given level of certainty. &lt;br /&gt; &lt;br /&gt;Because stakeholders do frequently ask for some indication of the presumed accuracy of test results ? for example, what is the confidence interval for these results? ? another commonsense approach must be employed.&lt;br /&gt; &lt;br /&gt;When performance testing, the answer to that question is directly related to the accuracy of the model tested. Since in many cases the accuracy of the model cannot be reasonably determined until after the software is released into production, this is not a particularly useful dependency. However, there is__ a way to demonstrate a confidence interval in the results.&lt;br /&gt; &lt;br /&gt;By testing a variety of scenarios, including what the team determines to be “best,” “worst,” and “expected” cases in terms of the measurements being collected, a graphical depiction of a confidence interval can be created, similar to the one below. &lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17753" alt="Fig15.8.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.8&lt;/b&gt; Usage Models_&lt;br /&gt; &lt;br /&gt;In this graph, a dashed line represents the performance goal, and the three curves represent the results from the worst-case (most performance-intensive), best-case (least performance-intensive), and expected-case user community models. As one would expect, the blue curve from the expected case falls between the best- and worst-case curves. Observing where these curves cross the red line, one can see how many users can access the system in each case while still meeting the stated performance goal. If the team is 95-percent confident (by their own estimation) that the best- and worst-case user community models are truly best- and worst-case, this chart can be read as follows: the tests show, with 95-percent confidence, that between 100 and 200 users can access the system while experiencing acceptable performance.&lt;br /&gt; &lt;br /&gt;Although a confidence interval of between 100 and 200 users might seem quite large, it is important to note that without empirical data representing the actual production usage, it is unreasonable to expect higher confidence in results than there is in the models that generate those results. The best that one can do is to be 100-percent confident that the test results accurately represent the model being tested. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;Members of software development teams, developers, testers, administrators, and managers alike need to know how to apply mathematics and interpret statistical data in order to do their jobs effectively. Performance analysis and reporting are particularly math-intensive. It is critical that mathematical and statistical concepts in performance testing be understood so that correct performance-testing analysis and reporting can be done.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 17:50:23 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 15 – Key Mathematic Principles for Performance Testers 20070823055023P</guid></item><item><title>UPDATED WIKI: Chapter 15 – Key Mathematic Principles for Performance Testers</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 15 %25u2013 Key Mathematic Principles for Performance Testers&amp;version=1</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 15 – Key Mathematic Principles for Performance Testers
&lt;/h3&gt;- &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Learn the uses, meanings of, and concepts underlying common mathematical and statistical principles as they apply to performance test analysis and reporting.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;Members of software development teams, developers, testers, administrators, and managers alike need to know how to apply mathematics and interpret statistical data in order to do their jobs effectively. Performance analysis and reporting are particularly math-intensive. This chapter describes the most commonly used, misapplied, and misunderstood mathematical and statistical concepts in performance testing, in a way that will benefit any member of the team. &lt;br /&gt; &lt;br /&gt;Even though there is a need to understand many mathematical and statistical concepts, many software developers, testers, and managers either do not have strong backgrounds in or do not enjoy mathematics and statistics. This leads to significant misrepresentations and misinterpretation of performance-testing results. The information presented in this article is not intended to replace formal training in these areas, but rather to provide common language and commonsense explanations for mathematical and statistical operations that are valuable to understanding performance testing. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Chapter
&lt;/h3&gt;Use this chapter to understand the different metrics and calculations that are used for analyzing performance data results and preparing performance results reports. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “Exemplar Data Sets” section to gain an understanding of the exemplars, which are used to illustrate the key mathematical principles explained throughout the chapter.&lt;/li&gt;&lt;li&gt;Use the remaining sections to learn about key mathematical principles that will help you to understand and present meaningful performance testing reports. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Exemplar Data Sets
&lt;/h3&gt;This chapter refers to three exemplar data sets for the purposes of illustration, namely.&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Data Set A&lt;/li&gt;&lt;li&gt;Data Set B&lt;/li&gt;&lt;li&gt;Data Set C&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Data Sets Summary
&lt;/h4&gt;The following is a summary of Data Sets A, B, and C.&lt;br /&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig15.1.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.1&lt;/b&gt; Summary of Data Sets A, B, and C_&lt;br /&gt;&lt;h4&gt;
Data Set A
&lt;/h4&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig15.2.GIF]&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.2&lt;/b&gt; Data Set A_&lt;br /&gt; &lt;br /&gt;100 total data points, distributed as follows:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;5 data points have a value of 1.&lt;/li&gt;&lt;li&gt;10 data points have a value of 2.&lt;/li&gt;&lt;li&gt;20 data points have a value of 3.&lt;/li&gt;&lt;li&gt;30 data points have a value of 4.&lt;/li&gt;&lt;li&gt;20 data points have a value of 5.&lt;/li&gt;&lt;li&gt;10 data points have a value of 6.&lt;/li&gt;&lt;li&gt;5 data points have a value of 7.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Data Set B
&lt;/h4&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig15.3.GIF]&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.3&lt;/b&gt; Data Set B_&lt;br /&gt; &lt;br /&gt;100 total data points, distributed as follows:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;80 data points have a value of 1.&lt;/li&gt;&lt;li&gt;20 data points have a value of 16.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Data Set C
&lt;/h4&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig15.4.GIF]&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.4&lt;/b&gt; Data Set C_&lt;br /&gt; &lt;br /&gt;100 total data points, distributed as follows:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;11 data points have a value of 0.&lt;/li&gt;&lt;li&gt;10 data points have a value of 1.&lt;/li&gt;&lt;li&gt;11 data points have a value of 2.&lt;/li&gt;&lt;li&gt;13 data points have a value of 3.&lt;/li&gt;&lt;li&gt;11 data points have a value of 4.&lt;/li&gt;&lt;li&gt;11 data points have a value of 5.&lt;/li&gt;&lt;li&gt;11 data points have a value of 6.&lt;/li&gt;&lt;li&gt;12 data points have a value of 7.&lt;/li&gt;&lt;li&gt;10 data points have a value of 8.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Averages
&lt;/h3&gt;An average ? also known as an &lt;i&gt;arithmetic mean&lt;/i&gt;, or &lt;i&gt;mean&lt;/i&gt; for short ? is probably the most commonly used, and most commonly misunderstood, statistic of all. To calculate an average, you simply add up all the numbers and divide the sum by the quantity of numbers you just added. What seems to confound many people the most when it comes to performance testing is that, in this example, Data Sets A, B, and C each have an average of exactly 4. In terms of application response times, these sets of data have extremely different meanings. Given a response time goal of 5 seconds, looking at only the average of these sets, all three seem to meet the goal. Looking at the data, however, shows that none of the data sets is composed only of data that meets the goal, and that Data Set B probably demonstrates some kind of performance anomaly. Use caution when using averages to discuss response times and, if at all possible, avoid using averages as the only reported statistic. When reporting averages, it is a good idea to include the sample size, minimum value, maximum value, and standard deviation for the data set.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Percentiles
&lt;/h3&gt;Few people involved with developing software are familiar with percentiles. A &lt;i&gt;percentile&lt;/i&gt; is a straightforward concept that is easier to demonstrate than define. For example, to find the 95th percentile value for a data set consisting of 100 page-response-time measurements, you would sort the measurements from largest to smallest and then count down six data points from the largest. The 6th data point value represents the 95th percentile of those measurements. For the purposes of response times, this statistic is read “95 percent of the simulated users experienced a response time of &lt;a href="http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=the%206th-slowest%20value&amp;amp;referringTitle=Chapter%2015%20%u2013%20Key%20Mathematic%20Principles%20for%20Performance%20Testers"&gt;the 6th-slowest value&lt;/a&gt; or less for this test scenario.”&lt;br /&gt; &lt;br /&gt;It is important to note that percentile statistics can only stand alone when used to represent data that is uniformly or normally distributed with an acceptable number of outliers (see “Statistical Outliers” below). To illustrate this point, consider the exemplar data sets. The 95th percentile of Data Set B is 16 seconds. Obviously, this does not give the impression of achieving the 5-second response time goal. Interestingly, this can be misleading as well because the 80th percentile value of Data Set B is 1 second. With a response time goal of 5 seconds, it is likely unacceptable to have any response times of 16 seconds, so in this case neither of these percentile values represent the data in a manner that is useful to summarizing response time. &lt;br /&gt; &lt;br /&gt;Data Set A is a normally distributed data set that has a 95th percentile value of 6 seconds, an 85th percentile value of 5 seconds, and a maximum value of 7 seconds. In this case, reporting either the 85th or 95th percentile values represents the data in a manner where the assumptions a stakeholder is likely to make about the data are likely to be appropriate to the data.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Medians
&lt;/h3&gt;A &lt;i&gt;median&lt;/i&gt; is simply the middle value in a data set when sequenced from lowest to highest. In cases where there is an even number of data points and the two center values are not the same, some disciplines suggest that the median is the average of the two center data points, while others suggest choosing the value closer to the average of the entire set of data. In the case of the exemplar data sets, Data Sets A and B have median values of 4, and Data Set C has a median value of 1.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Normal Values
&lt;/h3&gt;A &lt;i&gt;normal value&lt;/i&gt; is the single value that occurs most often in a data set. Data Set A has a normal value of 4, Data Set B has a normal value of 3, and Data Set C has a normal value of 1.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Standard Deviations
&lt;/h3&gt;By definition, one &lt;i&gt;standard deviation&lt;/i&gt; is the amount of variance within a set of measurements that encompasses approximately the top 68 percent of all measurements in the data set; in other words, knowing the standard deviation of your data set tells you how densely the data points are clustered around the mean. Simply put, the smaller the standard deviation, the more consistent the data. To illustrate, the standard deviation of Data Set A is approximately 1.5, the standard deviation of Data Set B is approximately 6.0, and the standard deviation of Data Set C is approximately 2.6. &lt;br /&gt; &lt;br /&gt;A common rule in this case is: “Data with a standard deviation greater than half of its mean should be treated as suspect. If the data is accurate, the phenomenon the data represents is not displaying a normal distribution pattern.” Applying this rule, Data Set A is likely to be a reasonable example of a normal distribution; Data Set B may or may not be a reasonable representation of a normal distribution; and Data Set C is undoubtedly not a reasonable representation of a normal distribution.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Uniform Distributions
&lt;/h3&gt;Uniform distributions ? sometimes known as &lt;i&gt;linear distributions&lt;/i&gt; ? represent a collection of data that is roughly equivalent to a set of random numbers evenly spaced between the upper and lower bounds. In a uniform distribution, every number in the data set is represented approximately the same number of times. Uniform distributions are frequently used when modeling user delays, but are not common in response time results data. In fact, uniformly distributed results in response time data may be an indication of suspect results.&lt;br /&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig15.5.GIF]&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.5&lt;/b&gt; Uniform Distributions_ &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Normal Distributions
&lt;/h3&gt;Also known as &lt;i&gt;bell curves&lt;/i&gt;, &lt;i&gt;normal distributions&lt;/i&gt; are data sets whose member data are weighted toward the center (or median value). When graphed, the shape of the “bell” of normally distributed data can vary from tall and narrow to short and squat, depending on the standard deviation of the data set. The smaller the standard deviation, the taller and more narrow the “bell.” Statistically speaking, most measurements of human variance result in data sets that are normally distributed. As it turns out, end-user response times for Web applications are also frequently normally distributed. &lt;br /&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:15.6.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.6&lt;/b&gt; Normal Distribution_&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Statistical Significance
&lt;/h3&gt;Mathematically calculating statistical significance, or reliability, based on sample size is a task that is too arduous and complex for most commercially driven software-development projects. Fortunately, there is a commonsense approach that is both efficient and accurate enough to identify the most significant concerns related to statistical significance. Unless you have a good reason to use a mathematically rigorous calculation for statistical significance, a commonsense approximation is generally sufficient. In support of the commonsense approach described below, consider this excerpt from a StatSoft, Inc. (http://www.statsoftinc.com) discussion on the topic:&lt;br /&gt; &lt;br /&gt;There is no way to avoid arbitrariness in the final decision as to what level of significance will be treated as really ‘significant.’ That is, the selection of some level of significance, up to which the results will be rejected as invalid, is arbitrary. &lt;br /&gt; &lt;br /&gt;Typically, it is fairly easy to add iterations to performance tests to increase the total number of measurements collected; the best way to ensure statistical significance is simply to collect additional data if there is any doubt about whether or not the collected data represents reality. Whenever possible, ensure that you obtain a sample size of at least 100 measurements from at least two independent tests. &lt;br /&gt; &lt;br /&gt;Although there is no strict rule about how to decide which results are statistically similar without complex equations that call for huge volumes of data that commercially driven software projects rarely have the time or resources to collect, the following is a reasonable approach to apply if there is doubt about the significance or reliability of data after evaluating two test executions where the data was expected to be similar. Compare results from at least five test executions and apply the rules of thumb below to determine whether or not test results are similar enough to be considered reliable:&lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;If more than 20 percent (or one out of five) of the test-execution results appear not to be similar to the others, something is generally wrong with the test environment, the application, or the test itself.&lt;/li&gt;&lt;li&gt;If a 90th percentile value for any test execution is greater than the maximum or less than the minimum value for any of the other test executions, that data set is probably not statistically similar.&lt;/li&gt;&lt;li&gt;If measurements from a test are noticeably higher or lower, when charted side-by-side, than the results of the other test executions, it is probably not statistically similar.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig15.7.GIF]&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.7&lt;/b&gt; Result Comparison_ &lt;br /&gt; &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;If one data set for a particular item (e.g., the response time for a single page) in a test is noticeably higher or lower, but the results for the data sets of the remaining items appear similar, the test itself is probably statistically similar (even though it is probably worth the time to investigate the reasons for the difference of the one dissimilar data set.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Statistical Equivalence
&lt;/h3&gt;The method above for determining statistical significance actually is applying the principle of statistical equivalence. Essentially, the process outlined above for determining statistical significance could be restated as “Given results data from multiple tests intended to be equivalent, the data from any one of those tests may be treated as statistically significant if that data is statistically equivalent to 80 percent or more of all the tests intended to be equivalent.” Mathematical determination of equivalence using such formal methods as chi-squared and t-tests are not common on commercial software development projects. Rather, it is generally deemed acceptable to estimate equivalence by using charts similar to those used to determine statistical significance. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Statistical Outliers
&lt;/h3&gt;From a purely statistical point of view, any measurement that falls outside of three standard deviations, or 99 percent, of all collected measurements is considered an &lt;i&gt;outlier&lt;/i&gt;. The problem with this definition is that it assumes that the collected measurements are both statistically significant and distributed normally, which is not at all automatic when evaluating performance test data.&lt;br /&gt; &lt;br /&gt;For the purposes of this explanation, a more applicable definition of an outlier from a StatSoft, Inc. (http://www.statsoftinc.com) is the following:&lt;br /&gt;Outliers are atypical, infrequent observations: data points which do not appear to follow the distribution of the rest of the sample. These may represent consistent but rare traits, or be the result of measurement errors or other anomalies which should not be modeled.&lt;br /&gt;Note that this (or any other) description of outliers only applies to data that is deemed to be a statistically significant sample of measurements. Without a statistically significant sample, there is no generally acceptable approach to determining the difference between an outlier and a representative measurement. &lt;br /&gt; &lt;br /&gt;Using this description, results graphs can be used to determine evidence of outliers — occasional data points that just don’t seem to belong. A reasonable approach to determining if any apparent outliers are truly atypical and infrequent is to re-execute the tests and then compare the results to the first set. If the majority of the measurements are the same, except for the potential outliers, the results are likely to contain genuine outliers that can be disregarded. However, if the results show similar potential outliers, these are probably valid measurements that deserve consideration.&lt;br /&gt; &lt;br /&gt;After identifying that a dataset appears to contain outliers, the next question is, how many outliers can be dismissed as “atypical infrequent observations?”&lt;br /&gt; &lt;br /&gt;There is no set number of outliers that can be unilaterally dismissed, but rather a maximum percentage of the total number of observations. Applying the spirit of the two definitions above, a reasonable conclusion would be that up to 1 percent of the total values for a particular measurement that are outside of three standard deviations from the mean are significantly atypical and infrequent enough to be considered outliers.&lt;br /&gt; &lt;br /&gt;In summary, in practice for commercially driven software development, it is generally acceptable to say that values representing less than 1 percent of all the measurements for a particular item that are at least three standard deviations off the mean are candidates for omission in results analysis if (and only if) identical values are not found in previous or subsequent tests. To express the same concept in a more colloquial way: obviously rare and strange data points that can’t immediately be explained, account for a very small part of the results, and are not identical to any results from other tests are probably outliers. &lt;br /&gt; &lt;br /&gt;A note of caution: identifying a data point as an outlier and excluding it from results summaries does not imply ignoring the data point. Excluded outliers should be tracked in some manner appropriate to the project context in order to determine, as more tests are conducted, if a pattern of concern is identified in what by all indications are outliers for individual tests.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Confidence Intervals
&lt;/h3&gt;Because determining levels of confidence in data is even more complex and time-consuming than determining statistical significance or the existence of outliers, it is extremely rare to make such a determination during commercial software projects. A confidence interval for a specific statistic is the range of values around the statistic where the ‘true’ statistic is likely to be located within a given level of certainty. &lt;br /&gt; &lt;br /&gt;Because stakeholders do frequently ask for some indication of the presumed accuracy of test results ? for example, what is the confidence interval for these results? ? another commonsense approach must be employed.&lt;br /&gt; &lt;br /&gt;When performance testing, the answer to that question is directly related to the accuracy of the model tested. Since in many cases the accuracy of the model cannot be reasonably determined until after the software is released into production, this is not a particularly useful dependency. However, there is__ a way to demonstrate a confidence interval in the results.&lt;br /&gt; &lt;br /&gt;By testing a variety of scenarios, including what the team determines to be “best,” “worst,” and “expected” cases in terms of the measurements being collected, a graphical depiction of a confidence interval can be created, similar to the one below. &lt;br /&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig15.8.GIF] &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 15.8&lt;/b&gt; Usage Models_&lt;br /&gt; &lt;br /&gt;In this graph, a dashed line represents the performance goal, and the three curves represent the results from the worst-case (most performance-intensive), best-case (least performance-intensive), and expected-case user community models. As one would expect, the blue curve from the expected case falls between the best- and worst-case curves. Observing where these curves cross the red line, one can see how many users can access the system in each case while still meeting the stated performance goal. If the team is 95-percent confident (by their own estimation) that the best- and worst-case user community models are truly best- and worst-case, this chart can be read as follows: the tests show, with 95-percent confidence, that between 100 and 200 users can access the system while experiencing acceptable performance.&lt;br /&gt; &lt;br /&gt;Although a confidence interval of between 100 and 200 users might seem quite large, it is important to note that without empirical data representing the actual production usage, it is unreasonable to expect higher confidence in results than there is in the models that generate those results. The best that one can do is to be 100-percent confident that the test results accurately represent the model being tested. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;Members of software development teams, developers, testers, administrators, and managers alike need to know how to apply mathematics and interpret statistical data in order to do their jobs effectively. Performance analysis and reporting are particularly math-intensive. It is critical that mathematical and statistical concepts in performance testing be understood so that correct performance-testing analysis and reporting can be done.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 17:41:28 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 15 – Key Mathematic Principles for Performance Testers 20070823054128P</guid></item><item><title>UPDATED WIKI: Chapter 14 – Test Execution</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 14 %25u2013 Test Execution&amp;version=1</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 14 – Test Execution
&lt;/h3&gt;- &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Understand common principles and considerations of performance test execution.&lt;/li&gt;&lt;li&gt;Understand the common activities of performance test execution.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;Performance test execution is the activity that occurs between developing test scripts and reporting and analyzing test results. Much of the performance testing–related training available today treats this activity as little more than starting a test and monitoring it to ensure that the test appears to be running as expected. In reality, this activity is significantly more complex than just clicking a button and monitoring machines. This chapter addresses these complexities based on numerous real-world project experiences.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
How to Use this Chapter
&lt;/h3&gt;Use this chapter to understand the key principles and considerations underlying performance test execution and the various activities that it entails. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “Approach for Test Execution” section to get** an overview of the approach for performance test execution and as quick reference guide for you and your team.&lt;/li&gt;&lt;li&gt;Use the various activity sections to understand the details of each activity involved in performance test execution.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Approach for Test Execution 
&lt;/h3&gt;The following activities are involved in performance test execution:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Validate the test environment&lt;/li&gt;&lt;li&gt;Validate tests&lt;/li&gt;&lt;li&gt;Run tests&lt;/li&gt;&lt;li&gt;Baseline and benchmark&lt;/li&gt;&lt;li&gt;Archive tests&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;The following sections discuss each of these activities in detail.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Validate the Test Environment
&lt;/h3&gt;The goal is for the test environment to mirror your production environment as closely as possible. Typically, any differences between the test and production environments are noted and accounted for while designing tests. Before running your tests, it is important to validate that the test environment matches the configuration that you were expecting and/or designed your test for. If the test environment is even slightly different from the environment you designed your tests to be run against, there is a high probability that your tests might not work at all, or worse, that they will work but will provide misleading data. &lt;br /&gt; &lt;br /&gt;The following activities frequently prove valuable when validating a test environment:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Ensure that the test environment is correctly configured for metrics collection. &lt;/li&gt;&lt;li&gt;Turn off any active virus-scanning on load-generating machines during testing, to minimize the likelihood of unintentionally skewing results data as a side-effect of resource consumption by the antivirus/anti-spyware software. &lt;/li&gt;&lt;li&gt;Consider simulating background activity, when necessary. For example, many servers run batch processing during predetermined time periods, while servicing users’ requests. Not accounting for such activities in those periods may result in overly optimistic performance results.&lt;/li&gt;&lt;li&gt;Run simple usage scenarios to validate the Web server layer first if possible, separately from other layers. Run your scripts without think times. Try to run a scenario that does not include database activity. Inability to utilize 100 percent of the Web server’s processor can indicate a network problem or that the load generator clients have reached their maximum output capacity.&lt;/li&gt;&lt;li&gt;Run simple usage scenarios that are limited to reading data to validate database scenarios. Run your script without think times. Use test data feeds to simulate randomness. For example, query for a set of products. Inability to utilize 100 percent of the Web server’s processor can indicate a network problem or that the load-generator clients have reached their maximum output capacity.&lt;/li&gt;&lt;li&gt;Validate the test environment by running more complex usage scenarios with updates and writes to the database, using a mix of test scripts that simulate business actions.&lt;/li&gt;&lt;li&gt;In Web farm environments, check to see if your load tests are implementing Internet Protocol (IP) switching. Not doing so may cause IP affinity, a situation where all of the requests from the load-generation client machine are routed to the same server rather than being balanced across all of the servers in the farm. IP affinity leads to inaccurate load test results because other servers participating in the load balancing will not be utilized.&lt;/li&gt;&lt;li&gt;Work with key performance indicators (KPIs) on all the servers to assess your test environment (processor, network, disk, and memory). Include all servers in the cluster to ensure correct evaluation of your environment.&lt;/li&gt;&lt;li&gt;Consider spending time creating data feeds for the test application. For example, database tables containing production data such as number of users, products, and orders shipped, so that you can create similar conditions to replicate problems in critical usage scenarios. Many scenarios involve running queries against tables containing several thousands of entries, to simulate lock timeouts or deadlocks. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Additional Considerations
&lt;/h4&gt;Consider the following key points when troubleshooting performance-testing environments:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Look for problems in the load-generation clients from which load is simulated. Client machines often produce inaccurate performance-testing results due to insufficient processor or memory resources. Consider adding more client computers to compensate for fast transactions that may cause higher processor utilization; also consider using more memory when this becomes the bottleneck. Memory can be consumed when test data feeds are cached in load generators, or by more complex scripting in load tests. &lt;/li&gt;&lt;li&gt;Some network interface cards (NICs) when set to auto mode will fail to negotiate with switches in proper full-duplex mode. The result is that the NICs will operate in half-duplex negotiation, which causes inaccurate performance-testing results. A typical perimeter network with a Web server and database server in different layers will be deployed with the Web server having two NICs, one facing your clients and another using a different route to communicate with the database layer. However, be aware that having one NIC in the Web server facing both the clients and the database tier may cause network bottleneck congestion. &lt;/li&gt;&lt;li&gt;The database server in the production environment may be using separate hard drives for log files and data files associated with the database as a matter of policy. Replicate such deployment configurations to avoid inaccurate performance-testing results. Consider that if DNS is not properly configured, it might cause broadcast messages to be sent when opening database connections by using the database server name. Name-resolution issues may cause connections to open slowly. &lt;/li&gt;&lt;li&gt;Improper data feeds consumed by your scripts will frequently cause you to overlook problems with the environment. For example, low processor activity may be caused by artificial locking due to scripts querying the same record from the database. Consider creating test data feeds that simulate the correct business actions, accounting for variability of data sent from the post request. Load-generation tools may use a central repository such as a database or files in a directory structure to collect performance test data. Make sure that the data repository is located on a machine that will not cause traffic in the route used by your load-generation tools; for example, putting the data repository in the same virtual local-area network (VLAN) of the machine used to manage data collection.&lt;/li&gt;&lt;li&gt;Load-generation tools may require the use of special accounts between load-generator machines and the computers that collect performance data. Make sure that you set such configurations correctly. Verify that data collection is occurring in the test environment, taking into consideration that the traffic may be required to pass through a firewall. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Validate Tests
&lt;/h3&gt;Poor load simulations can render all previous work useless. To understand the data collected from a test run, the load simulation must accurately reflect the test design. When the simulation does not reflect the test design, the results are prone to misinterpretation. Even if your tests accurately reflect the test design, there are still many ways that the test can yield invalid or misleading results. Although it may be tempting to simply trust your tests, it is almost always worth the time and effort to validate the accuracy of your tests before you need to depend on them to provide results intended to assist in making the “go-live” decision. It may be useful to think about test validation in terms of the following four categories:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Test design implementation.&lt;/b&gt;  To validate that you have implemented your test design accurately (using whatever method you have chosen), you will need to run the test and examine exactly what the test does. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Concurrency.&lt;/b&gt;  After you have validated that your test conforms to the test design when run with a single user, run the test with several users. Ensure that each user is seeded with unique data, and that users begin their activity within a few seconds of one another — not all at the same second, as this is likely to create an unrealistically stressful situation that would add complexity to validating the accuracy of your test design implementation. One method of validating that tests run as expected with multiple users is to use three test runs; one with 3 users, one with 5 users, and one with 11 users. These three tests have a tendency to expose many common issues with both the configuration of the test environment (such as a limited license being installed on an application component) and the test itself (such as parameterized data not varying as intended).  &lt;/li&gt;&lt;li&gt;&lt;b&gt;Combinations of tests.&lt;/b&gt;  Having validated that a test runs as intended with a single user and with multiple users, the next logical step is to validate that the test runs accurately in combination with other tests. Generally, when testing performance, tests get mixed and matched to represent various combinations and distributions of users, activities, and scenarios. If you do not validate that your tests have been both designed and implemented to handle this degree of complexity prior to running critical test projects, you can end up wasting a lot of time debugging your tests or test scripts when you could have been collecting valuable performance information. &lt;/li&gt;&lt;li&gt;&lt;b&gt;Test data validation.&lt;/b&gt;  Once you are satisfied that your tests are running properly, the last critical validation step is to validate your test data. Performance testing can utilize and/or consume large volumes of test data, thereby increasing the likelihood of errors in your dataset. In addition to the data used by your tests, it is important to validate that your tests share that data as intended, and that the application under test is seeded with the correct data to enable your tests. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Dynamic Data
&lt;/h4&gt;The following are technical reasons for using dynamic data correctly in load test scripts:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Using the same data value causes artificial usage of caching because the system will retrieve data from copies in memory. This can happen throughout different layers and components of the system, including databases, file caches of the operating systems, hard drives, storage controllers, and buffer managers. Reusing data from the cache during performance testing might account for faster testing results than would occur in the real world.&lt;/li&gt;&lt;li&gt;Some business scenarios require a relatively small range of data selection. In such a case, even reusing the cache more frequently will simulate other performance-related problems, such as database deadlocks and slower response times due to timeouts caused by queries to the same items. This type of scenario is typical of marketing campaigns and seasonal sales events.&lt;/li&gt;&lt;li&gt;Some business scenarios require using unique data during load testing; for example, if the server returns session-specific identifiers during a session after login to the site with a specific set of credentials. Reusing the same login data would cause the server to return a bad session identifier error. Another frequent scenario is when the user enters a unique set of data, or the system fails to accept the selection; for example, registering new users that would require entering a unique user ID on the registration page.&lt;/li&gt;&lt;li&gt;In some business scenarios, you need to control the number of parameterized items; for example, a caching component that needs to be tested for its memory footprint to evaluate server capacity, with a varying number of products in the cache.&lt;/li&gt;&lt;li&gt;In some business scenarios, you need to reduce the script size or the number of scripts; for example, several instances of an application will live in one server, reproducing a scenario where an independent software vendor (ISV) will host them. In this scenario, the Uniform Resource Locators (URLs) need to be parameterized during load test execution for the same business scenarios.&lt;/li&gt;&lt;li&gt;Using dynamic test data in a load test tends to reproduce more complicated and time-sensitive bugs; for example, a deadlock encountered as a result of performing different actions using different user accounts.&lt;/li&gt;&lt;li&gt;Using dynamic test data in a load test allows you to use error values if they suit your test plan; for example, using an ID that is always a positive number when testing to simulate hacker behavior. It may be beneficial to use zero or negative values when testing to replicate application errors, such as scanning the database table when an invalid value is supplied. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Test Validation
&lt;/h4&gt;The following are some commonly employed methods of test validation, which are frequently used in combination with one another:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Run the test first with a single user only. This makes initial validation much less complex.&lt;/li&gt;&lt;li&gt;Observe your test while it is running and pay close attention to any behavior you feel is unusual. Your instincts are usually right, or at least valuable.&lt;/li&gt;&lt;li&gt;Use the system manually during test execution so that you can compare your observations with the results data at a later time.&lt;/li&gt;&lt;li&gt;Make sure that the test results and collected metrics represent what you intended them to represent.&lt;/li&gt;&lt;li&gt;Check to see if any of the parent requests or dependent requests failed.  &lt;/li&gt;&lt;li&gt;Check the content of the returned pages, as load-generation tools sometimes report summary results that appear to “pass” even though the correct page or data was not returned. &lt;/li&gt;&lt;li&gt;Run a test that loops through all of your data to check for unexpected errors.&lt;/li&gt;&lt;li&gt;If appropriate, validate that you can reset test and/or application data following a test run.&lt;/li&gt;&lt;li&gt;At the conclusion of your test run, check the application database to ensure that it has been updated (or not) according to your test design. Consider that many transactions in which the Web server returns a success status with a “200” code might be failing internally; for example, errors due to a previously used user name in a new user registration scenario, or an order number that is already in use. &lt;/li&gt;&lt;li&gt;Consider cleaning the database entries between error trials to eliminate data that might be causing test failures; for example, order entries that you cannot reuse in subsequent test execution.&lt;/li&gt;&lt;li&gt;Run tests in a variety of combinations and sequences to ensure that one test does not corrupt data needed by another test in order to run properly.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Additional Considerations
&lt;/h4&gt;Consider the following additional points when validating your tests:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Do not use performance results data from your validation test runs as part of your final report.&lt;/li&gt;&lt;li&gt;Report performance issues uncovered during your validation test runs.&lt;/li&gt;&lt;li&gt;Use appropriate load-generation tools to create a load that has the characteristics specified in your test design.&lt;/li&gt;&lt;li&gt;Ensure that the intended performance counters for identified metrics and resource utilization are being measured and recorded, and that they are not interfering with the accuracy of the simulation.&lt;/li&gt;&lt;li&gt;Run other tests during your performance test to ensure that the simulation is not impacting other parts of the system. These other tests may be either automated or manual.&lt;/li&gt;&lt;li&gt;Repeat your test, adjusting variables such as user names and think times to see if the test continues to behave as anticipated.&lt;/li&gt;&lt;li&gt;Remember to simulate ramp-up and cool-down periods appropriately.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Questions to Ask
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;What additional team members should be involved in evaluating the accuracy of this test?&lt;/li&gt;&lt;li&gt;Do the preliminary results make sense?&lt;/li&gt;&lt;li&gt;Is the test providing the data we expected?&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Run Tests
&lt;/h3&gt;Although the process and flow of running tests are extremely dependent on your tools, environment, and project context, there are some fairly universal tasks and considerations to keep in mind when running tests.&lt;br /&gt; &lt;br /&gt;Once it has been determined that the application under test is in an appropriate state to have performance tests run against it, the testing generally begins with the highest-priority performance test that can reasonably be completed based on the current state of the project and application. After each test run, compile a brief summary of what happened during the test and add these comments to the test log for future reference. These comments may address machine failures, application exceptions and errors, network problems, or exhausted disk space or logs. After completing the final test run, ensure that you have saved all of the test results and performance logs before you dismantle the test environment.&lt;br /&gt; &lt;br /&gt;Whenever possible, limit tasks to one to two days each to ensure that no time will be lost if the results from a particular test or battery of tests turn out to be inconclusive, or if the initial test design needs modification to produce the intended results. One of the most important tasks when running tests is to remember to modify the tests, test designs, and subsequent strategies as results analysis leads to new priorities.&lt;br /&gt; &lt;br /&gt;A widely recommended guiding principle is: &lt;i&gt;Run test tasks in one- to two-day batches. See the tasks through to completion, but be willing to take important detours along the way if an opportunity to add additional value presents itself.&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Keys to Efficiently and Effectively Running Tests
&lt;/h4&gt;In general, the keys to efficiently and effectively running tests include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Revisit performance-testing priorities after no more than two days.&lt;/li&gt;&lt;li&gt;Remember to capture and use a performance baseline.&lt;/li&gt;&lt;li&gt;Plan to spend some time fixing application errors, or debugging the test.&lt;/li&gt;&lt;li&gt;Analyze results immediately so that you can modify your test plan accordingly.&lt;/li&gt;&lt;li&gt;Communicate test results frequently and openly across the team. &lt;/li&gt;&lt;li&gt;Record results and significant findings.&lt;/li&gt;&lt;li&gt;Record other data needed to repeat the test later.&lt;/li&gt;&lt;li&gt;At appropriate points during test execution, stress the application to its maximum capacity or user load, as this can provide extremely valuable information.&lt;/li&gt;&lt;li&gt;Remember to validate application tuning or optimizations.&lt;/li&gt;&lt;li&gt;Consider evaluating the effect of application failover and recovery.&lt;/li&gt;&lt;li&gt;Consider measuring the effects of different system configurations.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Additional Considerations
&lt;/h4&gt;Consider the following additional points when running your tests:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Performance testing is frequently conducted on an isolated network segment to prevent disruption of other business operations. If this is not the case for your test project, ensure that you obtain permission to generate loads during certain hours on the available network.&lt;/li&gt;&lt;li&gt;Before running the real test, consider executing a quick “smoke test” to make sure that the test script and remote performance counters are working correctly.&lt;/li&gt;&lt;li&gt;If you choose to execute a smoke test, do not report the results as official or formal parts of your testing.&lt;/li&gt;&lt;li&gt;Reset the system (unless your scenario is to do otherwise) before running a formal test.&lt;/li&gt;&lt;li&gt;If at all possible, execute every test twice. If the results produced are not very similar, execute the test again. Try to determine what factors account for the difference.&lt;/li&gt;&lt;li&gt;No matter how far in advance a test is scheduled, give the team 30-minute and 5-minute warnings before launching the test (or starting the day’s testing). Inform the team whenever you are not going to be executing for more than one hour in succession.&lt;/li&gt;&lt;li&gt;Do not process data, write reports, or draw diagrams on your load-generating machine while generating a load because this can corrupt the data.&lt;/li&gt;&lt;li&gt;Do not throw away the first iteration because of script compilation or other reasons. Instead, measure this iteration separately so you will know what the first user after a system-wide reboot can expect.&lt;/li&gt;&lt;li&gt;Test execution is never really finished, but eventually you will reach a point of diminishing returns on a particular test. When you stop obtaining valuable information, change your test.&lt;/li&gt;&lt;li&gt;If neither you nor your development team can figure out the cause of an issue in twice as much time as it took the test to execute, it may be more efficient to eliminate one or more variables/potential causes and try again.&lt;/li&gt;&lt;li&gt;If your intent is to measure performance related to a particular load, it is important to allow time for the system to stabilize between increases in load to ensure the accuracy of measurements.&lt;/li&gt;&lt;li&gt;Make sure that the client computers (also known as load-generation client machines) that you use to generate load are not overly stressed. Utilization of resources such as processor and memory should remain low enough to ensure that the load-generation environment is not itself a bottleneck.&lt;/li&gt;&lt;li&gt;Analyze results immediately and modify your test plan accordingly. &lt;/li&gt;&lt;li&gt;Work closely with the team or team sub-set that is most relevant to the test.&lt;/li&gt;&lt;li&gt;Communicate test results frequently and openly across the team. &lt;/li&gt;&lt;li&gt;If you will be repeating the test, consider establishing a test data restore point before you begin testing. &lt;/li&gt;&lt;li&gt;In most cases, maintaining a test execution log that captures notes and observations for each run is invaluable.&lt;/li&gt;&lt;li&gt;Treat workload characterization as a moving target. Adjust new settings for think times and number of users to model the new total number of users for normal and peak loads.&lt;/li&gt;&lt;li&gt;Observe your test during execution and pay close attention to any behavior you feel is unusual. Your instincts are usually right, or at least valuable.&lt;/li&gt;&lt;li&gt;Ensure that performance counters relevant for identified metrics and resource utilization are being measured and are not interfering with the accuracy of the simulation.&lt;/li&gt;&lt;li&gt;Use the system manually during test execution so that you can compare your observations with the results data at a later time.&lt;/li&gt;&lt;li&gt;Remember to simulate ramp-up and cool-down periods appropriately.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Questions to ask:
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Have recent test results or project updates made this task more or less valuable compared to other tests we could be conducting right now?&lt;/li&gt;&lt;li&gt;What additional team members should be involved with this task?&lt;/li&gt;&lt;li&gt;Do the preliminary results make sense?&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Baseline and Benchmark
&lt;/h3&gt;When baselines and benchmarks are used, they are generally the first and last tests you will execute, respectively. Of all the tests that may be executed during the course of a project, it is most important that baselines and benchmarks be well understood and controlled, making the validations discussed above even more important.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Baselines 
&lt;/h4&gt;Creating a &lt;i&gt;baseline&lt;/i&gt; is the process of running a set of tests to capture performance metric data for the purpose of evaluating the effectiveness of subsequent performance-improving changes to the system or application. &lt;br /&gt; &lt;br /&gt;With respect to Web applications, you can use a baseline to determine whether performance is improving or declining and to find deviations across builds and versions. For example, you could measure load time, number of transactions processed per unit of time, number of Web pages served per unit of time, and resource utilization such as memory and processor usage. Some considerations about using baselines include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;A baseline can be created for a system, component, or application. &lt;/li&gt;&lt;li&gt;A baseline can be created at different layers: database, Web services, etc.&lt;/li&gt;&lt;li&gt;A baseline can be used as a standard for comparison to track future optimizations or regressions. When using a baseline for this purpose, it is important to validate that the baseline tests and results are well understood and repeatable. &lt;/li&gt;&lt;li&gt;Baselines can help product teams articulate variances that represent degradation or optimization during the course of the development life cycle by providing a known starting point for trend analysis. Baselines are most valuable if created using a set of reusable test assets; it is important that such tests are representative of workload characteristics that are both repeatable and provide an appropriately accurate simulation.&lt;/li&gt;&lt;li&gt;Baseline results can be articulated by using combinations of a broad set of key performance indicators such as response time, processor, memory, disk, and network. &lt;/li&gt;&lt;li&gt;Sharing baseline results across the team establishes a common foundation of information about performance characteristics to enable future communication about performance changes in an application or component.&lt;/li&gt;&lt;li&gt;A baseline is specific to an application and is most useful for comparing performance across different builds, versions, or releases. &lt;/li&gt;&lt;li&gt;Establishing a baseline before making configuration changes almost always saves time because it enables you to quickly determine what effect the changes had on the application’s performance.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Benchmarking
&lt;/h4&gt;&lt;i&gt;Benchmarking&lt;/i&gt; is the process of comparing your system performance against an industry standard that is endorsed by some other organization. &lt;br /&gt; &lt;br /&gt;From the perspective of Web application development, benchmarking involves running a set of tests that comply with the specifications of an industry benchmark to capture the performance metrics for your application necessary to determine its benchmark score. You can then compare your application against other systems or applications that have also calculated their score for the same benchmark. You may choose to tune your application performance to achieve or surpass a certain benchmark score. Some considerations about benchmarking include:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;A benchmark score is achieved by working within industry specifications or by porting an existing implementation to comply with those specifications. &lt;/li&gt;&lt;li&gt;Benchmarking generally requires identifying all of the necessary components that will run together, the market where the product exists, and the specific metrics to measure.&lt;/li&gt;&lt;li&gt;Benchmark scores can be published publicly and may result in comparisons being made by competitors. Performance metrics that may be included along with benchmark scores include response time, transactions processed per unit of time, Web pages accessed per unit of time, processor usage, memory usage, and search times.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Archive Tests
&lt;/h3&gt;Some degree of change control or version control can be extremely valuable for managing scripts, scenarios, and/or data changes between each test execution, and for communicating these differences to the rest of the team. Some teams prefer to check their test scripts, results, and reports into the same version-control system as the build of the application to which they apply. Other teams simply save copies into dated folders on a periodic basis, or have their own version-control software dedicated to the performance team. It is up to you and your team to decide what method is going to work best for you, but in most cases archiving tests, test data, and test results saves much more time than it takes over the course of a performance-testing project.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Additional Considerations
&lt;/h4&gt;Consider the following additional points when creating baselines and benchmarking:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;You can use archived test scripts, data, and results to create the baseline for the next version of your product. Archiving this information together with the build of the software that was tested satisfies many auditability standards.&lt;/li&gt;&lt;li&gt;In most cases, performance test scripts are improved or modified with each new build. If you do not save a copy of the script and identify the build it was used against, you can end up doing a lot of extra work to get your scripts running again in the case of a build rollback.&lt;/li&gt;&lt;li&gt;With the overwhelming majority of load-generation tools, implementing the test is a minor software-development effort in itself. While this effort generally does not need to follow all of the team’s standards and procedures for software development, it is a good idea to adopt a sound and appropriately “weighted” development process for performance scripts that complements or parallels the process your development team employs.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;Performance test execution involves activities such as validating test environments/scripts, running the test, and generating the test results. It can also include creating baselines and/or benchmarks of the performance characteristics. &lt;br /&gt; &lt;br /&gt;It is important to validate the test environment to ensure that the environment truly represents the production environment.&lt;br /&gt; &lt;br /&gt;Validate test scripts to check if correct metrics are being collected, and if the test script design is correctly simulating workload characteristics.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 17:34:48 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 14 – Test Execution 20070823053448P</guid></item><item><title>UPDATED WIKI: Chapter 13 – Determining Individual User Data and Variances</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 13 %25u2013 Determining Individual User Data and Variances&amp;version=3</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 13 – Determining Individual User Data and Variances 
&lt;/h3&gt;- &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Learn how to determine realistic durations and distribution patters for user delay times.&lt;/li&gt;&lt;li&gt;Learn how to incorporate realistic user delays into test designs and test scripts.&lt;/li&gt;&lt;li&gt;Learn about key variables to consider when defining workload characterization.&lt;/li&gt;&lt;li&gt;Learn about the elements of user behavior that will aid with modeling the user experience when creating load tests.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;This chapter describes the process of determining realistic individual user delays, user data, and abandonment. For performance testing to yield results that are directly applicable to understanding the performance characteristics of an application in production, the tested workloads must represent the real-world production environment. To create a reasonably accurate representation of reality, you must model users with a degree variability and randomness similar to that found in a representative cross-section of users. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Chapter
&lt;/h3&gt;Use this chapter to understand how to model variances such as user delays, user data, and user abandonment so that your workload characterization will create realistic usage patterns, thus improving the accuracy of production simulations. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “User Delay” section, along with the sections that follow, to understand the key concepts of user delay modeling and its impact on workload characterization. &lt;/li&gt;&lt;li&gt;Use the “Determining Individual User Data” section to understand the key concepts of user data and its impact on workload characterization.&lt;/li&gt;&lt;li&gt;Use the “User Abandonment” section to understand the key concepts of user abandonment and its impact on workload characterization.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
User Delays
&lt;/h3&gt;The more accurately users are modeled, the more reliable performance test results will be. One frequently overlooked aspect of accurate user modeling is the modeling of user delays. This section explains how to determine user delay times to be incorporated into your workload model and subsequently into your performance scripts. &lt;br /&gt; &lt;br /&gt;During a session, the user can be in a number of different states — browsing, logging onto the system, and so on. Customers will have different modes of interacting with the Web site; some users are familiar with the site and quickly go from one page to another, while others take longer to decide which action they will take. Therefore, characterizing user behavior must involve modeling the customer sessions based on page flow, frequency of hits, the amount of time users’ pause between viewing pages, and any other factor specific to how users interact with your Web site.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Consequences of Improperly Modeling User Delays
&lt;/h3&gt;To ensure realistic load tests, any reasonable attempt at applying ranges and distributions is preferable to ignoring the concept of varying user delays. Creating a load test in which every user spends exactly the same amount of time on each page is simply not realistic and will generate misleading results. For example, you can very easily end up with results similar to the following.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17738" alt="Fig13.1.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.1&lt;/b&gt; Results for Using Static User Delays_&lt;br /&gt;In case you are not familiar with response graphs, each dot represents a user activity (in this case, a page request); the horizontal axis shows the time, in seconds, from the start of the test run; and individual virtual testers are listed on the vertical axis. This particular response graph is an example of “banding” or “striping.” Banding should be avoided when doing load or performance testing, although it may be valuable as a stress test. From the server’s perspective, this test is the same as 10 users executing the identical actions synchronously: Home page??? wait x seconds??? page1.&lt;br /&gt;To put a finer point on it, hold a ruler vertically against your screen and move it slowly across the graph from left to right. This is what the server sees: no dots, no dots, no dots, lots of dots, no dots. This is a very poor representation of actual user communities.&lt;br /&gt;The following figure is a much better representation of actual users, achieved by adding some small-range uniform and normally distributed delays to the same test. &lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17739" alt="Fig13.2.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.2&lt;/b&gt; Results for Using Normally Distributed User Delays_&lt;br /&gt;If you perform the same activity with the ruler, you will see that the dots are more evenly distributed this time, which dramatically increases both the realism of the simulated load and the accuracy of the performance test results.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Step 1 – Determine User Delays
&lt;/h4&gt;Delays that occur while users view content on Web pages — also commonly known as &lt;i&gt;think times&lt;/i&gt; — represent the answers to questions such as “How long does it take a user to enter their login credentials?” and “How much time will users spend reading this page?” You can use several different methods to estimate think times associated with user activities on your Web site. The best method, of course, is to use real data collected about your production site. This is rarely possible, however, because testing generally occurs before the site is released to production. This necessitates making educated guesses or approximations regarding activity on the site. &lt;br /&gt; &lt;br /&gt;The most commonly useful methods of determining this include the following: &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;When testing a Web site that is already in production, you can determine the actual values and distribution by extracting the average and standard deviation for user viewing (or typing) time from the log file for each page. With this information, you can easily determine the think time for each page. Your production site may also have Web traffic–monitoring software that provides this type of information directly. &lt;/li&gt;&lt;li&gt;If you have no log files, you can run simple in-house experiments using employees, customers, clients, friends, or family members to determine, for example, the page-viewing time differences between new and returning users. This type of simplified usability study tends to be a highly effective method of data collection for Web sites that have never been live, as well as validation of data collected by using other methods. &lt;/li&gt;&lt;li&gt;Time yourself using the site, or by performing similar actions on a similar site. Obviously, this method is highly vulnerable to personal bias, but it is a reasonable place to start until you get a chance to time actual users during User Acceptance Testing (UAT) or conduct your own usability study.&lt;/li&gt;&lt;li&gt;In the absence of any better source of information, you can leverage some of the metrics and statistics that have already been collected by research companies such as Nielsen//NetRatings, Keynote, or MediaMetrix. These statistics provide data on average page-viewing times and user session duration based on an impersonal sample of users and Web sites. Although these numbers are not from your specific Web site, they can work quite well as first approximations. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;There is no need to spend a lot of time collecting statistically significant volumes of data, or to be excessively precise. All you really need to know is how long a typical user will spend performing an activity, give or take a second or two. However, depending on the nature of your site, you may want to determine user delay times separately for first-time and experienced users.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Step 2 – Apply Delay Ranges
&lt;/h4&gt;Simply determining how much time one person spends visiting your pages, or what the variance in time between users is, is not enough in itself — you must vary delay times by user. It is extremely unlikely that each user will spend exactly the same amount of time on a page. It is also extremely likely that conducting a performance test in which all users spend the same amount of time on a page will lead to unrealistic or at least unreliable results.&lt;br /&gt; &lt;br /&gt;To convert the delay times or delay ranges from step 1 into something that also represents the variability between users, the following three pieces of information are required:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The minimum delay time&lt;/li&gt;&lt;li&gt;The maximum delay time&lt;/li&gt;&lt;li&gt;The distribution or pattern of user delays between those points&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;If you do not have a minimum and maximum value from your analysis in step 1, you can apply heuristics as follows to determine acceptable estimates:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The minimum value could be:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;An experienced user who intended to go to the page but will not remain there long (for example, a user who only needs the page to load in order to scan, find, and click the next link). &lt;/li&gt;&lt;li&gt;A user who realized that they clicked to the wrong page.&lt;/li&gt;&lt;li&gt;A user who clicked through a form that had all of its values pre-filled.&lt;/li&gt;&lt;li&gt;The minimum length of time you think a user needs to type the required information into the form.&lt;/li&gt;&lt;li&gt;Half of the value that you determined was “typical.”&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The maximum value could be:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Session time-out. &lt;/li&gt;&lt;li&gt;Sufficient time for a user to look up information for a form.&lt;/li&gt;&lt;li&gt;No longer than it takes a slow reader to read the entire page.&lt;/li&gt;&lt;li&gt;The time it takes to read, three times out loud, the text that users are expected to read. (This is the heuristic used by the film industry for any onscreen text.)&lt;/li&gt;&lt;li&gt;Double the value that you determined was “typical.”&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;Although you want your estimate to be relatively close to reality, any range that covers ~75 percent of the expected users is sufficient to ensure that you are not unintentionally skewing your results.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Step 3 – Apply Distributions
&lt;/h4&gt;There are numerous mathematical models for these types of distributions. Four of these models cover the overwhelming majority of user delay scenarios:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Linear or uniform distribution&lt;/li&gt;&lt;li&gt;Normal distribution&lt;/li&gt;&lt;li&gt;Negative exponential distribution&lt;/li&gt;&lt;li&gt;Double hump normal distribution&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h5&gt;
Linear or Uniform Distribution
&lt;/h5&gt;A uniform distribution between a minimum and a maximum value is the easiest to model. This distribution model simply selects random numbers that are evenly distributed between the upper and lower bounds of the range. This means that it is no more likely that the number generated will be closer to the middle or either end of the range. The figure below shows a uniform distribution of 1000 values generated between 0 and 25. Use a uniform distribution in situations where there is a reasonably clear minimum and maximum value, but either have or expect to have a distinguishable pattern between those end points.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17740" alt="Fig13.3.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.3&lt;/b&gt; Uniform Distribution_ &lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Normal Distribution
&lt;/h5&gt;A normal distribution, also known as a &lt;i&gt;bell curve&lt;/i&gt;, is more difficult to model but is more accurate in almost all cases. This distribution model selects numbers randomly in such a way that the frequency of selection is weighted toward the center, or average value. The figure below shows a normal distribution of 1000 values generated between 0 and 25 (that is, a mean of 12.5 and a standard deviation of 3.2). Normal distribution is generally considered to be the most accurate mathematical model of quantifiable measures of large cross-sections of people when actual data is unavailable. Use a normal distribution in any situation where you expect the pattern to be shifted toward the center of the end points. The valid range of values for the standard deviation is from 0 (equivalent to a static delay of the midpoint between the maximum and minimum values) and the maximum value minus the minimum value (equivalent to a uniform distribution). If you have no way to determine the actual standard deviation, a reasonable approximation is 25 percent of (or .25 times the range) of the delay.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17741" alt="Fig13.4.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.4&lt;/b&gt; Normal Distribution_ &lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Negative Exponential Distribution
&lt;/h5&gt;Negative exponential distribution creates a distribution similar to that shown in the graph below. This model skews the frequency of delay times strongly toward one end of the range. This model is most useful for situations such as users clicking a “play again” link that only activates after multimedia content has completed playing. The following figure shows a negative exponential distribution of 1000 values generated between 0 and 25. &lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17742" alt="Fig13.5.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.5&lt;/b&gt; Negative Exponential Distribution_&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Double Hump Normal Distribution
&lt;/h5&gt;The double hump normal distribution creates a distribution similar to that shown in the graph below. To understand when this distribution would be used, consider the first time you visit a Web page that has a large amount of text. On that first visit, you will probably want to read the text, but the next time you might simply click through that page on the way to a page located deeper in the site. This is precisely the type of user behavior this distribution represents. The figure below shows that 60 percent of the users who view this page spend about 8 seconds on the page scanning for the next link to click, and the other 40 percent of the users actually read the entire page, which takes about 45 seconds. You can see that both humps are normal distributions with different minimum, maximum, and standard deviation values.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17743" alt="Fig13.6.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.6&lt;/b&gt; Double Hump Normal Distribution_&lt;br /&gt; &lt;br /&gt;To implement this pattern, simply write a snippet of code to generate a number between 1 and 100 to represent a percentage of users. If that number is below a certain threshold (in the graph above, below 61), call the normal distribution function with the parameters to generate delays with the first distribution pattern. If that number is at or above that threshold, call the normal distribution function with the correct parameters to generate the second distribution pattern.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Determining Individual User Data
&lt;/h3&gt;Once you have a list of key scenarios, you will need to determine how individual users actually accomplish the tasks or activities related to those scenarios, and the user-specific data associated with a user accomplishing that task or activity.&lt;br /&gt; &lt;br /&gt;Unfortunately, navigation paths alone do not provide all of the information required to implement a workload simulation. To fully implement the workload model, you need several more pieces of information. This information includes:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;How long users may spend on a page?&lt;/li&gt;&lt;li&gt;What data may need to be entered on each page?&lt;/li&gt;&lt;li&gt;What conditions may cause a user to change navigation paths?&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Considerations
&lt;/h4&gt;Consider the following key points when identifying unique data for navigation paths and/or simulated users:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Performance tests frequently consume large amounts of test data. Ensure that you have enough data to conduct an effective test.&lt;/li&gt;&lt;li&gt;Using the same data repeatedly will frequently lead to invalid performance test results.&lt;/li&gt;&lt;li&gt;Especially when designing and debugging performance tests, test databases can become dramatically overloaded with data. Periodically check to see if the data base is storing unrealistic volumes of data for the situation you are trying to simulate.&lt;/li&gt;&lt;li&gt;Consider including invalid data in your performance tests. For example, include some users who mistype their password on the first attempt but do it correctly on a second try. &lt;/li&gt;&lt;li&gt;First-time users usually spend significantly longer on each page or activity than experienced users.&lt;/li&gt;&lt;li&gt;The best possible test data is test data collected from a production database or log file.&lt;/li&gt;&lt;li&gt;Consider client-side caching. First-time users will be downloading every object on the site, while frequent visitors are likely to have many static objects and/or cookies stored in their local cache. When capturing the uniqueness of the user’s behavior, consider whether that user represents a first-time user or a user with an established client-side cache.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
User Abandonment
&lt;/h3&gt;&lt;i&gt;User abandonment&lt;/i&gt; refers to situations where customers exit the Web site before completing a task, because of performance slowness. People have different rates of tolerance for performance, depending on their psychological profile and the type of page they request. Failing to account for user abandonment will cause loads that are highly unrealistic and improbable. Load tests should simulate user abandonment as realistically as possible or they may cause types of load that will never occur in real life — and create bottlenecks that might never happen with real users. Load tests should report the number of users that might abandon the Web site due to poor performance. &lt;br /&gt; &lt;br /&gt;In a typical Web site traffic pattern, when the load gets too heavy for the system/application to handle, the site slows down, causing people to abandon it, thus decreasing the load until the system speeds back up to an acceptable rate. Abandonment creates a self-policing mechanism that recovers performance at previous levels (when the overload occurred), even at the cost of losing some customers. Therefore, one reason to accurately account for user abandonment is to see just how many users “some” is. Another reason is to determine the actual volume your application can maintain before you start losing customers. Yet another reason to account for user abandonment is to avoid simulating, and subsequently resolving, bottlenecks that realistically might not even be possible.&lt;br /&gt; &lt;br /&gt;If you do not account for abandonment at all, the load test may wait indefinitely to receive the page or object it requested. When the test eventually receives that object, even if “eventually” takes hours longer than a real user would wait, the test will move on to the next object as if nothing were wrong. If the request for an object simply is not acknowledged, the test skips it and makes a note in the test execution log with no regard as to whether that object was critical to the user. Note that there &lt;i&gt;are&lt;/i&gt; some cases where not accounting for abandonment is an accurate representation of reality; for instance, a Web-based application that has been exclusively created for an audience that has no choice but to wait because there are no alternative methods of completing a required task. &lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Considerations
&lt;/h4&gt;The following are generally useful guidelines related to user abandonment:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Check the abandonment rate before evaluating response times. If the abandonment rate for a particular page is less than about 2 percent, consider the possibility of those response times being outliers. &lt;/li&gt;&lt;li&gt;Check the abandonment rate before drawing conclusions about load. Remember, every user who abandons is one less user applying load. Although the response-time statistics may look good, if you have 75-percent abandonment, load is roughly 75 percent lighter than it was being tested for.&lt;/li&gt;&lt;li&gt;If the abandonment rate is more than about 20 percent, consider disabling the abandonment routine and re-executing the test to help gain information about what is causing the problem.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;The process of designing realistic user delays into tests and test scripts is critical for workload characterizations to generate accurate results. For performance testing to yield results that are directly applicable to understanding the performance characteristics of an application in production or a projected future business volume, the tested workloads must represent reality, replicating user delay patterns.  &lt;br /&gt; &lt;br /&gt;To create a reasonably accurate representation of reality, you must model user delays with variability and randomness by taking into account individual user data and user abandonment, similar to a representative cross-section of users.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 17:04:21 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 13 – Determining Individual User Data and Variances 20070823050421P</guid></item><item><title>UPDATED WIKI: Chapter 13 – Determining Individual User Data and Variances</title><link>http://www.codeplex.com/PerfTestingGuide/Wiki/View.aspx?title=Chapter 13 %25u2013 Determining Individual User Data and Variances&amp;version=2</link><description>&lt;div class="wikidoc"&gt;
&lt;h3&gt;
Chapter 13 – Determining Individual User Data and Variances 
&lt;/h3&gt;- &lt;i&gt;&lt;a href="http://blogs.msdn.com/jmeier" class="externalLink"&gt;J.D. Meier&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Carlos Farre, &lt;a href="http://prashantbansode.blogspot.com/" class="externalLink"&gt;Prashant Bansode&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://www.perftestplus.com/scott_blog.php" class="externalLink"&gt;Scott Barber&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;, Dennis Rea&lt;/i&gt;&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Objectives
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Learn how to determine realistic durations and distribution patters for user delay times.&lt;/li&gt;&lt;li&gt;Learn how to incorporate realistic user delays into test designs and test scripts.&lt;/li&gt;&lt;li&gt;Learn about key variables to consider when defining workload characterization.&lt;/li&gt;&lt;li&gt;Learn about the elements of user behavior that will aid with modeling the user experience when creating load tests.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Overview
&lt;/h3&gt;This chapter describes the process of determining realistic individual user delays, user data, and abandonment. For performance testing to yield results that are directly applicable to understanding the performance characteristics of an application in production, the tested workloads must represent the real-world production environment. To create a reasonably accurate representation of reality, you must model users with a degree variability and randomness similar to that found in a representative cross-section of users. &lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
How to Use This Chapter
&lt;/h3&gt;Use this chapter to understand how to model variances such as user delays, user data, and user abandonment so that your workload characterization will create realistic usage patterns, thus improving the accuracy of production simulations. To get the most from this chapter:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Use the “User Delay” section, along with the sections that follow, to understand the key concepts of user delay modeling and its impact on workload characterization. &lt;/li&gt;&lt;li&gt;Use the “Determining Individual User Data” section to understand the key concepts of user data and its impact on workload characterization.&lt;/li&gt;&lt;li&gt;Use the “User Abandonment” section to understand the key concepts of user abandonment and its impact on workload characterization.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
User Delays
&lt;/h3&gt;The more accurately users are modeled, the more reliable performance test results will be. One frequently overlooked aspect of accurate user modeling is the modeling of user delays. This section explains how to determine user delay times to be incorporated into your workload model and subsequently into your performance scripts. &lt;br /&gt; &lt;br /&gt;During a session, the user can be in a number of different states — browsing, logging onto the system, and so on. Customers will have different modes of interacting with the Web site; some users are familiar with the site and quickly go from one page to another, while others take longer to decide which action they will take. Therefore, characterizing user behavior must involve modeling the customer sessions based on page flow, frequency of hits, the amount of time users’ pause between viewing pages, and any other factor specific to how users interact with your Web site.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Consequences of Improperly Modeling User Delays
&lt;/h3&gt;To ensure realistic load tests, any reasonable attempt at applying ranges and distributions is preferable to ignoring the concept of varying user delays. Creating a load test in which every user spends exactly the same amount of time on each page is simply not realistic and will generate misleading results. For example, you can very easily end up with results similar to the following.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17738" alt="Fig13.1.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.1&lt;/b&gt; Results for Using Static User Delays_&lt;br /&gt;In case you are not familiar with response graphs, each dot represents a user activity (in this case, a page request); the horizontal axis shows the time, in seconds, from the start of the test run; and individual virtual testers are listed on the vertical axis. This particular response graph is an example of “banding” or “striping.” Banding should be avoided when doing load or performance testing, although it may be valuable as a stress test. From the server’s perspective, this test is the same as 10 users executing the identical actions synchronously: Home page??? wait x seconds??? page1.&lt;br /&gt;To put a finer point on it, hold a ruler vertically against your screen and move it slowly across the graph from left to right. This is what the server sees: no dots, no dots, no dots, lots of dots, no dots. This is a very poor representation of actual user communities.&lt;br /&gt;The following figure is a much better representation of actual users, achieved by adding some small-range uniform and normally distributed delays to the same test. &lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17739" alt="Fig13.2.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.2&lt;/b&gt; Results for Using Normally Distributed User Delays_&lt;br /&gt;If you perform the same activity with the ruler, you will see that the dots are more evenly distributed this time, which dramatically increases both the realism of the simulated load and the accuracy of the performance test results.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Step 1 – Determine User Delays
&lt;/h4&gt;Delays that occur while users view content on Web pages — also commonly known as &lt;i&gt;think times&lt;/i&gt; — represent the answers to questions such as “How long does it take a user to enter their login credentials?” and “How much time will users spend reading this page?” You can use several different methods to estimate think times associated with user activities on your Web site. The best method, of course, is to use real data collected about your production site. This is rarely possible, however, because testing generally occurs before the site is released to production. This necessitates making educated guesses or approximations regarding activity on the site. &lt;br /&gt; &lt;br /&gt;The most commonly useful methods of determining this include the following: &lt;br /&gt;&lt;ul&gt;
&lt;li&gt;When testing a Web site that is already in production, you can determine the actual values and distribution by extracting the average and standard deviation for user viewing (or typing) time from the log file for each page. With this information, you can easily determine the think time for each page. Your production site may also have Web traffic–monitoring software that provides this type of information directly. &lt;/li&gt;&lt;li&gt;If you have no log files, you can run simple in-house experiments using employees, customers, clients, friends, or family members to determine, for example, the page-viewing time differences between new and returning users. This type of simplified usability study tends to be a highly effective method of data collection for Web sites that have never been live, as well as validation of data collected by using other methods. &lt;/li&gt;&lt;li&gt;Time yourself using the site, or by performing similar actions on a similar site. Obviously, this method is highly vulnerable to personal bias, but it is a reasonable place to start until you get a chance to time actual users during User Acceptance Testing (UAT) or conduct your own usability study.&lt;/li&gt;&lt;li&gt;In the absence of any better source of information, you can leverage some of the metrics and statistics that have already been collected by research companies such as Nielsen//NetRatings, Keynote, or MediaMetrix. These statistics provide data on average page-viewing times and user session duration based on an impersonal sample of users and Web sites. Although these numbers are not from your specific Web site, they can work quite well as first approximations. &lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;There is no need to spend a lot of time collecting statistically significant volumes of data, or to be excessively precise. All you really need to know is how long a typical user will spend performing an activity, give or take a second or two. However, depending on the nature of your site, you may want to determine user delay times separately for first-time and experienced users.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Step 2 – Apply Delay Ranges
&lt;/h4&gt;Simply determining how much time one person spends visiting your pages, or what the variance in time between users is, is not enough in itself — you must vary delay times by user. It is extremely unlikely that each user will spend exactly the same amount of time on a page. It is also extremely likely that conducting a performance test in which all users spend the same amount of time on a page will lead to unrealistic or at least unreliable results.&lt;br /&gt; &lt;br /&gt;To convert the delay times or delay ranges from step 1 into something that also represents the variability between users, the following three pieces of information are required:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The minimum delay time&lt;/li&gt;&lt;li&gt;The maximum delay time&lt;/li&gt;&lt;li&gt;The distribution or pattern of user delays between those points&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;If you do not have a minimum and maximum value from your analysis in step 1, you can apply heuristics as follows to determine acceptable estimates:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;The minimum value could be:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;An experienced user who intended to go to the page but will not remain there long (for example, a user who only needs the page to load in order to scan, find, and click the next link). &lt;/li&gt;&lt;li&gt;A user who realized that they clicked to the wrong page.&lt;/li&gt;&lt;li&gt;A user who clicked through a form that had all of its values pre-filled.&lt;/li&gt;&lt;li&gt;The minimum length of time you think a user needs to type the required information into the form.&lt;/li&gt;&lt;li&gt;Half of the value that you determined was “typical.”&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;The maximum value could be:&lt;/li&gt;&lt;ul&gt;
&lt;li&gt;Session time-out. &lt;/li&gt;&lt;li&gt;Sufficient time for a user to look up information for a form.&lt;/li&gt;&lt;li&gt;No longer than it takes a slow reader to read the entire page.&lt;/li&gt;&lt;li&gt;The time it takes to read, three times out loud, the text that users are expected to read. (This is the heuristic used by the film industry for any onscreen text.)&lt;/li&gt;&lt;li&gt;Double the value that you determined was “typical.”&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt; &lt;br /&gt;Although you want your estimate to be relatively close to reality, any range that covers ~75 percent of the expected users is sufficient to ensure that you are not unintentionally skewing your results.&lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Step 3 – Apply Distributions
&lt;/h4&gt;There are numerous mathematical models for these types of distributions. Four of these models cover the overwhelming majority of user delay scenarios:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Linear or uniform distribution&lt;/li&gt;&lt;li&gt;Normal distribution&lt;/li&gt;&lt;li&gt;Negative exponential distribution&lt;/li&gt;&lt;li&gt;Double hump normal distribution&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h5&gt;
Linear or Uniform Distribution
&lt;/h5&gt;A uniform distribution between a minimum and a maximum value is the easiest to model. This distribution model simply selects random numbers that are evenly distributed between the upper and lower bounds of the range. This means that it is no more likely that the number generated will be closer to the middle or either end of the range. The figure below shows a uniform distribution of 1000 values generated between 0 and 25. Use a uniform distribution in situations where there is a reasonably clear minimum and maximum value, but either have or expect to have a distinguishable pattern between those end points.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17740" alt="Fig13.3.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.3&lt;/b&gt; Uniform Distribution_ &lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Normal Distribution
&lt;/h5&gt;A normal distribution, also known as a &lt;i&gt;bell curve&lt;/i&gt;, is more difficult to model but is more accurate in almost all cases. This distribution model selects numbers randomly in such a way that the frequency of selection is weighted toward the center, or average value. The figure below shows a normal distribution of 1000 values generated between 0 and 25 (that is, a mean of 12.5 and a standard deviation of 3.2). Normal distribution is generally considered to be the most accurate mathematical model of quantifiable measures of large cross-sections of people when actual data is unavailable. Use a normal distribution in any situation where you expect the pattern to be shifted toward the center of the end points. The valid range of values for the standard deviation is from 0 (equivalent to a static delay of the midpoint between the maximum and minimum values) and the maximum value minus the minimum value (equivalent to a uniform distribution). If you have no way to determine the actual standard deviation, a reasonable approximation is 25 percent of (or .25 times the range) of the delay.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17741" alt="Fig13.4.GIF" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.4&lt;/b&gt; Normal Distribution_ &lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Negative Exponential Distribution
&lt;/h5&gt;Negative exponential distribution creates a distribution similar to that shown in the graph below. This model skews the frequency of delay times strongly toward one end of the range. This model is most useful for situations such as users clicking a “play again” link that only activates after multimedia content has completed playing. The following figure shows a negative exponential distribution of 1000 values generated between 0 and 25. &lt;br /&gt; &lt;br /&gt;&lt;span class="unresolved"&gt;Cannot resolve link: &lt;/span&gt;[image:Fig.13.5.GIF]&lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.5&lt;/b&gt; Negative Exponential Distribution_&lt;br /&gt; &lt;br /&gt;&lt;h5&gt;
Double Hump Normal Distribution
&lt;/h5&gt;The double hump normal distribution creates a distribution similar to that shown in the graph below. To understand when this distribution would be used, consider the first time you visit a Web page that has a large amount of text. On that first visit, you will probably want to read the text, but the next time you might simply click through that page on the way to a page located deeper in the site. This is precisely the type of user behavior this distribution represents. The figure below shows that 60 percent of the users who view this page spend about 8 seconds on the page scanning for the next link to click, and the other 40 percent of the users actually read the entire page, which takes about 45 seconds. You can see that both humps are normal distributions with different minimum, maximum, and standard deviation values.&lt;br /&gt; &lt;br /&gt;&lt;img src="http://www.codeplex.com/PerfTestingGuide/Project/FileDownload.aspx?DownloadId=17743" alt="Fig13.6.GIF" /&gt; &lt;br /&gt; &lt;br /&gt;&lt;b&gt;_Figure 13.6&lt;/b&gt; Double Hump Normal Distribution_&lt;br /&gt; &lt;br /&gt;To implement this pattern, simply write a snippet of code to generate a number between 1 and 100 to represent a percentage of users. If that number is below a certain threshold (in the graph above, below 61), call the normal distribution function with the parameters to generate delays with the first distribution pattern. If that number is at or above that threshold, call the normal distribution function with the correct parameters to generate the second distribution pattern.&lt;br /&gt; &lt;br /&gt;&lt;h3&gt;
Determining Individual User Data
&lt;/h3&gt;Once you have a list of key scenarios, you will need to determine how individual users actually accomplish the tasks or activities related to those scenarios, and the user-specific data associated with a user accomplishing that task or activity.&lt;br /&gt; &lt;br /&gt;Unfortunately, navigation paths alone do not provide all of the information required to implement a workload simulation. To fully implement the workload model, you need several more pieces of information. This information includes:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;How long users may spend on a page?&lt;/li&gt;&lt;li&gt;What data may need to be entered on each page?&lt;/li&gt;&lt;li&gt;What conditions may cause a user to change navigation paths?&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h4&gt;
Considerations
&lt;/h4&gt;Consider the following key points when identifying unique data for navigation paths and/or simulated users:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Performance tests frequently consume large amounts of test data. Ensure that you have enough data to conduct an effective test.&lt;/li&gt;&lt;li&gt;Using the same data repeatedly will frequently lead to invalid performance test results.&lt;/li&gt;&lt;li&gt;Especially when designing and debugging performance tests, test databases can become dramatically overloaded with data. Periodically check to see if the data base is storing unrealistic volumes of data for the situation you are trying to simulate.&lt;/li&gt;&lt;li&gt;Consider including invalid data in your performance tests. For example, include some users who mistype their password on the first attempt but do it correctly on a second try. &lt;/li&gt;&lt;li&gt;First-time users usually spend significantly longer on each page or activity than experienced users.&lt;/li&gt;&lt;li&gt;The best possible test data is test data collected from a production database or log file.&lt;/li&gt;&lt;li&gt;Consider client-side caching. First-time users will be downloading every object on the site, while frequent visitors are likely to have many static objects and/or cookies stored in their local cache. When capturing the uniqueness of the user’s behavior, consider whether that user represents a first-time user or a user with an established client-side cache.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
User Abandonment
&lt;/h3&gt;&lt;i&gt;User abandonment&lt;/i&gt; refers to situations where customers exit the Web site before completing a task, because of performance slowness. People have different rates of tolerance for performance, depending on their psychological profile and the type of page they request. Failing to account for user abandonment will cause loads that are highly unrealistic and improbable. Load tests should simulate user abandonment as realistically as possible or they may cause types of load that will never occur in real life — and create bottlenecks that might never happen with real users. Load tests should report the number of users that might abandon the Web site due to poor performance. &lt;br /&gt; &lt;br /&gt;In a typical Web site traffic pattern, when the load gets too heavy for the system/application to handle, the site slows down, causing people to abandon it, thus decreasing the load until the system speeds back up to an acceptable rate. Abandonment creates a self-policing mechanism that recovers performance at previous levels (when the overload occurred), even at the cost of losing some customers. Therefore, one reason to accurately account for user abandonment is to see just how many users “some” is. Another reason is to determine the actual volume your application can maintain before you start losing customers. Yet another reason to account for user abandonment is to avoid simulating, and subsequently resolving, bottlenecks that realistically might not even be possible.&lt;br /&gt; &lt;br /&gt;If you do not account for abandonment at all, the load test may wait indefinitely to receive the page or object it requested. When the test eventually receives that object, even if “eventually” takes hours longer than a real user would wait, the test will move on to the next object as if nothing were wrong. If the request for an object simply is not acknowledged, the test skips it and makes a note in the test execution log with no regard as to whether that object was critical to the user. Note that there &lt;i&gt;are&lt;/i&gt; some cases where not accounting for abandonment is an accurate representation of reality; for instance, a Web-based application that has been exclusively created for an audience that has no choice but to wait because there are no alternative methods of completing a required task. &lt;br /&gt; &lt;br /&gt;&lt;h4&gt;
Considerations
&lt;/h4&gt;The following are generally useful guidelines related to user abandonment:&lt;br /&gt;&lt;ul&gt;
&lt;li&gt;Check the abandonment rate before evaluating response times. If the abandonment rate for a particular page is less than about 2 percent, consider the possibility of those response times being outliers. &lt;/li&gt;&lt;li&gt;Check the abandonment rate before drawing conclusions about load. Remember, every user who abandons is one less user applying load. Although the response-time statistics may look good, if you have 75-percent abandonment, load is roughly 75 percent lighter than it was being tested for.&lt;/li&gt;&lt;li&gt;If the abandonment rate is more than about 20 percent, consider disabling the abandonment routine and re-executing the test to help gain information about what is causing the problem.&lt;/li&gt;
&lt;/ul&gt; &lt;br /&gt;&lt;h3&gt;
Summary
&lt;/h3&gt;The process of designing realistic user delays into tests and test scripts is critical for workload characterizations to generate accurate results. For performance testing to yield results that are directly applicable to understanding the performance characteristics of an application in production or a projected future business volume, the tested workloads must represent reality, replicating user delay patterns.  &lt;br /&gt; &lt;br /&gt;To create a reasonably accurate representation of reality, you must model user delays with variability and randomness by taking into account individual user data and user abandonment, similar to a representative cross-section of users.&lt;br /&gt;
&lt;/div&gt;</description><author>prashantbansode</author><pubDate>Thu, 23 Aug 2007 17:03:07 GMT</pubDate><guid isPermaLink="false">UPDATED WIKI: Chapter 13 – Determining Individual User Data and Variances 20070823050307P</guid></item></channel></rss>