<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-111172825477675184</id><updated>2012-03-19T18:37:44.082+05:30</updated><category term='testing drama'/><category term='Database Tetsing'/><category term='Datawarehouse Testing'/><category term='Testing funny'/><category term='DQ Tetsing'/><category term='SQL Server 2011'/><category term='testing skit'/><category term='testing stage act'/><category term='Microblogging'/><category term='DW/BI Testing'/><category term='BI/DW Testing'/><category term='testing act'/><category term='software testing'/><category term='Agile Testing'/><category term='testing jokes'/><category term='BI Testing'/><category term='testing play'/><category term='Testing trends'/><category term='Web Services Testing'/><category term='Denali DQS'/><category term='Test Estimation'/><title type='text'>Tester Testifies</title><subtitle type='html'>For want of a nail, the shoe was lost; for want of a shoe, the horse was lost; 

For want of a horse, the rider was lost; for want of a rider, the message was lost; 

For want of a message the battle was lost; for want of a battle, the kingdom was lost . .</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>47</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-528729794061417119</id><published>2012-02-23T09:51:00.001+05:30</published><updated>2012-02-23T09:51:30.759+05:30</updated><title type='text'>Importance of Testing in Envision and Planning Phase</title><content type='html'>&lt;p&gt;When you are working as a Test Consultant and if you are involved in the early phases of the engagement, it is quite important to deliver the test artifacts on a regular basis to show measurable progress. That can help a long way to win the confidence of the customer and the stakeholders involved. Arguably, the other disciplines (&lt;em&gt;like developers, architects, business analysts&lt;/em&gt;) have relatively less to do to prove their worth as they own the key artifacts like Vision scope document &amp;amp; Functional specifications, which are perceived as the most critical ones for the success of the project. Though the test planning is an equally important activity as any other development activity of envisioning and planning phase it doesn’t get the same attention. Overall it gives a wrong impression that the testing team is not adding as much value as the development team in the initial phases of the project. I believe it is important to write a quality test plan that is not verbose but highly customized and designed, keeping in the mind the specific requirements and technology stack for the given project. It is critical for us to educate the customers by evangelizing the importance of testing in the initial phases.&lt;/p&gt; &lt;p&gt;I was in a discussion with the customers and they had this strong opinion that they are paying a lot of money for testing teams to just review requirements and write test cases. They recommended us to write automation scripts only without spending any time on designing test scenarios and test cases. I highlighted our role and contribution in requirement elicitation process to identify the gaps and save the effort upfront rather than discovering them in the build or stabilization phase. To accomplish that goal we need to spend effort in coming up with a detailed test plan and strategy that best fits the unique needs and requirements of the project in hand. We methodologically identify the areas that are best candidates for automation based on the ROI (Return on Investment) to save effort and time during the test execution phase. The quality of the automation scripts depends on the coverage of the underlying test cases / test scenarios and hence it is important to have them. At the end of the discussion I could sense that the customers were still skeptical and I didn’t expect them to get totally convinced either. I bought time and promised them to give a small demonstration of our capabilities by doing some quick POCs (Proof of Concepts).&lt;/p&gt; &lt;p&gt;From the requirements, I picked the most important ones and studied the pattern, the behavior and looked at the testability aspect of them and prepared a list of test techniques. I wanted to reduce my test cases to a number that is manageable and maintainable. I figured out that they had lot of complex process workflows where there are multiple jumps, branches and loops. I couldn’t cover them even if I wrote a whole bunch of test cases and even after doing that it will not guarantee that I didn’t miss an important path. We had the Visio's of those workflows so why not use a “&lt;em&gt;State Transition Table&lt;/em&gt;&lt;s&gt;”&lt;/s&gt;? I came up with a quick template to represent their most complex workflow and ensured I covered at least every state and every transition once. I had added a flag to be able to filter the main flows/alternate flows. &lt;/p&gt; &lt;p&gt;Then there were a few complex business rules that had lot of conditional clauses and the result depended on the outcome of all those clauses. Again I realized that there can be lot of permutation here and I didn’t want to take chances. “&lt;em&gt;Decision Table&lt;/em&gt;” just sounded right to me. I quickly prepared one covering positive and negative flows and here I had a table that was covering it all.&lt;/p&gt; &lt;p&gt;For lot of data entry forms, there were many fields and especially drop downs, radio buttons and checkboxes. I didn’t want my team to randomly pick values and tomorrow miss double-mode types of defects&lt;s&gt;.&lt;/s&gt; “&lt;em&gt;Orthogonal array of testing&lt;/em&gt;” can be helpful and I thought of using its Pairwise implementation to solve that problem. I used a free tool from Microsoft called &lt;a href="http://msdn.microsoft.com/en-us/testing/bb980925"&gt;PICT&lt;/a&gt; and voila from 72 permutations I had now arrived at just 9 permutations scientifically that ensures every pair is covered at least once.&lt;/p&gt; &lt;p&gt;After a couple of days I had put together a few running POCs of these techniques in addition to test cases that used standard techniques like EP &amp;amp; BVA (&lt;a href="http://en.wikipedia.org/wiki/Equivalence_partitioning"&gt;Equivalence Partitioning&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Boundary_value_analysis"&gt;Boundary Value Analysis&lt;/a&gt;). I quickly came up with the best way to structure and organize my test artifacts using Microsoft Test Manager. I created a sample Requirement Traceability Matrix using Test Manager. I decided on my test suites and also defined different test configurations as the application is being targeted for multiple platforms. &lt;/p&gt; &lt;p&gt;In 3 days, we were in a conference room with all the customers and stakeholders including our project team. I ran the demos of my test techniques on the real requirements. I showed them we would ensure test coverage and provide them the requirement traceability reports using Test Manager. PICT was like magic to them. State transition tables taught them that testing is much more than randomly clicking buttons and following plain steps. Automation can be done only after you perform these key activities and test cases are not just plain word documents. &lt;/p&gt; &lt;p&gt;The meeting went well and ended with encouraging remarks like “Can you send me the link of that tool? “, “Can you share these with us for Unit testing?”, “We want you to demo this to our test team", “This sounds great”. It was evident from their response that we had their confidence. &lt;/p&gt; &lt;p&gt;Stay tuned for more post. I can be reached at &lt;a href="mailto:rajkamal@microsoft.com"&gt;rajkamal@microsoft.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: This blog is my personal opinion and I apologize if it hurt your sentiments. In the words of my friend Arun (&lt;a href="mailto:aruncha@microsoft.com"&gt;aruncha@microsoft.com&lt;/a&gt;) , “When a&lt;em&gt; developer starts in a project he is already 100 miles high whereas a tester is 100 miles buried under the ground&lt;/em&gt; and it takes the tester lot of work to reach up there and prove his value before his work is acknowledged “&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-528729794061417119?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/528729794061417119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=528729794061417119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/528729794061417119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/528729794061417119'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2012/02/importance-of-testing-in-envision-and.html' title='Importance of Testing in Envision and Planning Phase'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-9141411050502179200</id><published>2012-02-23T04:35:00.001+05:30</published><updated>2012-02-23T04:35:13.652+05:30</updated><title type='text'>TechNet: SQL Server 2012 DQS (Data Quality Services) for Testing Teams</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;MSDN Technet Article on SQL Server 2012 (Code name: Denali) DQS (Data Quality Services) for Testing team:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://social.technet.microsoft.com/wiki/contents/articles/7701.sql-server-2012-dqs-data-quality-services-for-testing-teams.aspx"&gt;http://social.technet.microsoft.com/wiki/contents/articles/7701.sql-server-2012-dqs-data-quality-services-for-testing-teams.aspx&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-9141411050502179200?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/9141411050502179200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=9141411050502179200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/9141411050502179200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/9141411050502179200'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2012/02/technet-sql-server-2012-dqs-data.html' title='TechNet: SQL Server 2012 DQS (Data Quality Services) for Testing Teams'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-4196131444147128975</id><published>2011-12-18T12:13:00.001+05:30</published><updated>2011-12-18T12:13:05.229+05:30</updated><title type='text'>TechNet Webcast: Automated Data Quality Checks Using SQL Server and Visual Studio (Level 300) – Raj Kamal, Microsoft</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.ggpht.com/-s261bjMPb0Q/Tu2Lc6VxN-I/AAAAAAAAG_E/MqwYxLo75ak/s1600-h/image%25255B6%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-vsE3k4x5SAc/Tu2LdzcdPBI/AAAAAAAAG_I/8spcODJDQIE/image_thumb%25255B1%25255D.png?imgmax=800" width="244" height="59"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;TechNet Webcast: Automated Data Quality Checks Using SQL Server and Visual Studio (Level 300) – Raj Kamal, Microsoft&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Microsoft IT's business intelligence engineering team has reduced its development and testing phases by automating the data quality audits and finding data quality issues earlier in the development cycle than in the past, using a metadata-driven, user-configurable tool. Attend this webcast to learn about automating data quality checks using Microsoft SQL Server and Microsoft Visual Studio and to hear directly from the development team how this can apply to you.&lt;br&gt;&lt;b&gt;Presenter: &lt;/b&gt;Raj Kamal, Microsoft IT Test Lead, Microsoft Corporation&lt;br&gt;Raj Kamal is a senior test engineer who specializes in different types of testing techniques, test automation, and testability in different domains like manufacturing, healthcare, and higher education. Raj holds several certifications, including Certified Software Test Engineer (CSTE), Microsoft IT Professional for Microsoft SQL Server Business Intelligence (BI) 2008, International Software Testing Qualifications Board (ISTQB), and APICS certification in supply chain management. Raj also has expertise with Rational and Mercury testing tools, and he has helped teams develop test automation strategies and architectures for other major software companies.  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;Event: &lt;/strong&gt;&lt;a title="https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032452088&amp;amp;CountryCode=US" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032452088&amp;amp;CountryCode=US"&gt;&lt;strong&gt;https://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&amp;amp;EventID=1032452088&amp;amp;CountryCode=US&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;View Online: &lt;/strong&gt;&lt;a title="https://www106.livemeeting.com/cc/MSEventsBMO/view?cn=guest&amp;amp;id=1032452087&amp;amp;pw=3CE735D1" href="https://www106.livemeeting.com/cc/MSEventsBMO/view?cn=guest&amp;amp;id=1032452087&amp;amp;pw=3CE735D1"&gt;&lt;strong&gt;https://www106.livemeeting.com/cc/MSEventsBMO/view?cn=guest&amp;amp;id=1032452087&amp;amp;pw=3CE735D1&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Thanks,&lt;/p&gt; &lt;p&gt;Raj&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-4196131444147128975?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/4196131444147128975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=4196131444147128975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/4196131444147128975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/4196131444147128975'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2011/12/technet-webcast-automated-data-quality.html' title='TechNet Webcast: Automated Data Quality Checks Using SQL Server and Visual Studio (Level 300) – Raj Kamal, Microsoft'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/-vsE3k4x5SAc/Tu2LdzcdPBI/AAAAAAAAG_I/8spcODJDQIE/s72-c/image_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-7054233057105950470</id><published>2011-12-16T20:16:00.000+05:30</published><updated>2011-12-16T20:16:30.505+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='software testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Testing funny'/><title type='text'>Saga of Unsung Heroes (QAI STC 2011 - Published)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div align="LEFT"&gt;&lt;span style="font-size: small;"&gt;This paper is written by the Testers, for the Tester. The Testers, who save millions of dollars by finding bugs, still stay unheard &amp;amp; unsung. These are the ordinary men doing extraordinary deeds by living in a software world that poses several challenges making the „Quality‟ as a job tougher than ever. &lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div align="LEFT"&gt;&lt;br /&gt;&lt;/div&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;This paper is a tribute to all the testers in this world doing a thankless job, those who have spent long hours &amp;amp; many years of their life with a strong belief that every bug they find makes the product better. This paper tries to address #3 major challenges of their (our) life and proposes some fresh solutions to very old problems based on our learning that can reinstate the same belief in new generations of testers &lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #1f497d; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&lt;a href="http://www.qaiglobalservices.com/minisites/stc_2011/pdf/Saga_of_Unsung_Heroes.pdf" target="_blank"&gt;&lt;span style="color: blue;"&gt;http://www.qaiglobalservices.com/minisites/stc_2011/pdf/Saga_of_Unsung_Heroes.pdf&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-7054233057105950470?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/7054233057105950470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=7054233057105950470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/7054233057105950470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/7054233057105950470'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2011/12/saga-of-unsung-heroes-qai-stc-2011.html' title='Saga of Unsung Heroes (QAI STC 2011 - Published)'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-3602017329849196846</id><published>2011-12-16T20:12:00.001+05:30</published><updated>2011-12-16T20:12:17.295+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Test Estimation'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile Testing'/><title type='text'>Agile Test Estimations using Poker Planning (QAI STC 2011 - Published)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;This artifact offers a template and guidelines &lt;/span&gt;&lt;b&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;which can be used by agile teams to commit to stories for a sprint &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;using the proven top-down &lt;/span&gt;&lt;i&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;Poker Planning" technique (&lt;/span&gt;&lt;i&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;for both Developers and Testing&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;&lt;span style="font-family: Verdana,Verdana; font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;) and the capacity in hand. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div align="LEFT"&gt;&lt;br /&gt;&lt;/div&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;The poker player learns that sometimes both science and common sense are wrong; that the bumblebee can fly; that, perhaps, one should never trust an expert; that there are more things in heaven and earth than are dreamt of by those with an academic bent. (David Mamet) &lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="color: #1f497d; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&lt;a href="https://aps.mail.microsoft.com/owa/redir.aspx?C=RgmxciD290mDzjPswpgBUL3SH6iUj84IPwpIlA-yqRqVH4gC0G85mW7RemLzYTQ8IGxZnbZJQ8k.&amp;amp;URL=http%3a%2f%2fwww.qaiglobalservices.com%2fminisites%2fstc_2011%2fpdf%2fAgile_Test_Estimations_using_Poker_Planning.pdf" target="_blank"&gt;&lt;span style="color: blue;"&gt;http://www.qaiglobalservices.com/minisites/stc_2011/pdf/Agile_Test_Estimations_using_Poker_Planning.pdf&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-3602017329849196846?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/3602017329849196846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=3602017329849196846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/3602017329849196846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/3602017329849196846'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2011/12/agile-test-estimations-using-poker.html' title='Agile Test Estimations using Poker Planning (QAI STC 2011 - Published)'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-3101028444434368941</id><published>2011-12-16T20:08:00.000+05:30</published><updated>2011-12-16T20:08:18.168+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microblogging'/><category scheme='http://www.blogger.com/atom/ns#' term='Testing trends'/><title type='text'>Leveraging Microblogging for Effective Team Collaboration (QAI STC 2011)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div align="LEFT"&gt;&lt;br /&gt;&lt;/div&gt;&lt;i&gt;Proposing the usage of Microblogging as a project communication layer on top of defect and requirement management tools like QC, primarily for Agile projects, having teams spread across geographies. Also to better help teams to include customer, stakeholders &amp;amp; management in day-to-day project conversations and updates. &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Check out this link:&lt;/em&gt;&lt;br /&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;span style="color: #1f497d; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&lt;a href="http://www.qaiglobalservices.com/minisites/stc_2011/pdf/Leveraging_Microblogging_for_Effective_Team_Collaboration.pdf" target="_blank"&gt;&lt;span style="color: blue;"&gt;http://www.qaiglobalservices.com/minisites/stc_2011/pdf/Leveraging_Microblogging_for_Effective_Team_Collaboration.pdf&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-3101028444434368941?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/3101028444434368941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=3101028444434368941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/3101028444434368941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/3101028444434368941'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2011/12/leveraging-microblogging-for-effective.html' title='Leveraging Microblogging for Effective Team Collaboration (QAI STC 2011)'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-7815174333571738683</id><published>2011-12-16T20:03:00.000+05:30</published><updated>2012-02-23T04:33:11.176+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Denali DQS'/><category scheme='http://www.blogger.com/atom/ns#' term='Datawarehouse Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Database Tetsing'/><category scheme='http://www.blogger.com/atom/ns#' term='BI/DW Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='BI Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2011'/><category scheme='http://www.blogger.com/atom/ns#' term='DW/BI Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='DQ Tetsing'/><title type='text'>SQL Server 2012 (Denali) Data Quality Services (DQS) – Taking Test Practices Places! (QAI STC 2011 - Published)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-size: x-small;"&gt;If we wait until wrong decisions are made by customers relying on the bad or inaccurate data - we are in trouble. Data quality is often overlooked and yet there is no well-defined testing process or that provides guidance around ways to improve, maintain and monitor the data quality in any data-centric project. With the absence of any specialized testing tools that can aid in testing for data quality makes the entire situation even tougher. However the bad times are now over and with tools like upcoming SQL Server "Denali" Data Quality Services (DQS) we can turn the tables around. This artifact will show you how by using Denali DQS but it can be also applied on the other tools which have similar capabilities. &lt;/span&gt;&lt;/i&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #1f497d; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;Check out the link:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #1f497d; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&lt;a href="http://www.qaiglobalservices.com/minisites/stc_2011/pdf/Denali_DQS.pdf" target="_blank"&gt;&lt;span style="color: blue;"&gt;http://www.qaiglobalservices.com/minisites/stc_2011/pdf/Denali_DQS.pdf&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-7815174333571738683?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/7815174333571738683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=7815174333571738683' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/7815174333571738683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/7815174333571738683'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2011/12/sql-server-2011-denali-data-quality.html' title='SQL Server 2012 (Denali) Data Quality Services (DQS) – Taking Test Practices Places! (QAI STC 2011 - Published)'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-5938354953370790859</id><published>2011-12-11T04:58:00.001+05:30</published><updated>2011-12-11T04:58:17.728+05:30</updated><title type='text'>Web Services Test Automation Guidance using VS 2010 - Unit Test &amp; Web Test</title><content type='html'>&lt;p&gt;&lt;a name="_Toc227064252"&gt;&lt;/a&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;em&gt;For all deliverables &amp;amp; details: &lt;/em&gt;&lt;/strong&gt;&lt;a title="http://webservicestesting.codeplex.com" href="http://webservicestesting.codeplex.com"&gt;&lt;strong&gt;&lt;em&gt;http://webservicestesting.codeplex.com&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Authors&lt;/strong&gt;  &lt;p&gt;Raj Kamal (&lt;a href="mailto:rajkamal@microsoft.com"&gt;rajkamal@microsoft.com&lt;/a&gt;) ,  &lt;p&gt;Vipul Mehta (&lt;a href="mailto:vmehta@microsoft.com"&gt;vmehta@microsoft.com&lt;/a&gt; ) ,  &lt;p&gt;Ranjit Gupta (&lt;a href="mailto:rankumar@microsoft.com"&gt;rankumar@microsoft.com&lt;/a&gt; )  &lt;p&gt;Gunjan Jain (&lt;a href="mailto:gunjain@microsoft.com"&gt;gunjain@microsoft.com&lt;/a&gt; )  &lt;p&gt;Microsoft Services - Global Delivery, India  &lt;p&gt;&lt;a name="_Toc284684658"&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;h3&gt;&lt;/h3&gt; &lt;h3&gt;&lt;a name="_Toc311287822"&gt;Objective&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;This artifact will provide &lt;b&gt;&lt;i&gt;Web Services Automation guidance for Functional &amp;amp; Performance Testing leveraging VS 2010&lt;/i&gt;&lt;/b&gt;&lt;i&gt;. &lt;/i&gt;The document will provide recommendation on using either &lt;i&gt;Unit Test or Web Test&lt;/i&gt; for functional testing depending on your project and test objective as will be later covered in the document. &lt;i&gt;Load Test&lt;/i&gt; will be used for &lt;i&gt;Performance Testing&lt;/i&gt; in both cases.  &lt;p&gt;The primary objective is to propose a viable web services test automation approach &amp;amp; reusable libraries to customers, partners and consultant. It will also be a step in standardizing web services automation using &lt;b&gt;VS 2010&lt;/b&gt; platform across the Industry and filling the gaps by extending our tools as suggested in the talk. The document can also be used as a quick jump start guide for beginners to get started on Web Services Automation Testing.  &lt;p&gt;Other than the guidance included in this document, key deliverable will primarily consists of the following:  &lt;p&gt;a) &lt;i&gt;Unit Test &amp;amp; Web Test Template projects for Web services testing&lt;/i&gt;  &lt;p&gt;&lt;i&gt;b)&lt;/i&gt; &lt;i&gt;Reusable libraries for Unit Test &lt;/i&gt; &lt;p&gt;&lt;i&gt;c) Reusable Add-ins (Extraction &amp;amp; Validation Rules) for Web Test that can be reused to reduce automation development effort drastically.&lt;/i&gt;  &lt;p&gt;&lt;i&gt;d) Performance Testing using Load Test once the Web Tests/Unit Tests are in place.&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;e) Sample Web Services application for beginners to gets started&lt;/i&gt; &lt;/p&gt; &lt;p&gt; &lt;table cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;&lt;font size="4"&gt;&lt;b&gt;Pre-requisites:&lt;/b&gt; &lt;/font&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-qhjZ54WaghI/TuPmXWRMyxI/AAAAAAAAGiE/hioawEInNss/s1600-h/clip_image00137.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://lh4.ggpht.com/--HkjjmU3ghk/TuPmYNVATwI/AAAAAAAAGiM/v1eW8MkVLU8/clip_image001_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; Ensure you have downloaded and deployed&lt;i&gt; &lt;/i&gt;&lt;b&gt;WebServiceAutomation_SampleApp&lt;/b&gt;&lt;b&gt; &lt;/b&gt;that contains sample Web services projects (WCF/ASMX/WF etc.) that you can use to getting started with Web Services automation. &lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-SmORjxzkeU8/TuPmYm8EmRI/AAAAAAAAGiU/c2sjeIResis/s1600-h/clip_image00112.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[1]" border="0" alt="clip_image001[1]" src="http://lh6.ggpht.com/-Q27CAtmOYtE/TuPmZ69_crI/AAAAAAAAGic/TsPeVoHtAvo/clip_image0011_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; Verify you have downloaded our sample Template projects &lt;b&gt;WebServiceAutomation_SampleUnitTest and WebServiceAutomation_SampleWebTest &lt;/b&gt;that contain sample unit test/web test which you can reuse / customize for your needs  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-wmBr5jkw3_w/TuPma6W130I/AAAAAAAAGig/rOxG_YnJd94/s1600-h/clip_image00122.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[2]" border="0" alt="clip_image001[2]" src="http://lh6.ggpht.com/-MlIbZ_7Iy2c/TuPmbi58c6I/AAAAAAAAGis/VmrCFxnvXuk/clip_image0012_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; Ensure you have downloaded our Reusable Libraries for Unit Testing&lt;b&gt; (WebServicesTesting.Automation.UnitTest.Helper.dll) &lt;/b&gt;&amp;amp; Web Test&lt;b&gt; (WebServicesTesting.Automation.WebTest.Helper.dll)&lt;/b&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-PyWiQanjLCQ/TuPmcmw316I/AAAAAAAAGi0/YRU6J3yO-Lo/s1600-h/clip_image001321.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[3]" border="0" alt="clip_image001[3]" src="http://lh6.ggpht.com/-Vq4USODZy8o/TuPmdsOAjLI/AAAAAAAAGi8/I4x7_ht9XwA/clip_image0013_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; Visual Studio 2010, SQL Server Express or higher version, IIS (Internet Information Server 6.0 or above&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;a name="_Toc284684660"&gt;&lt;/a&gt;&lt;a name="_Case_Study"&gt;&lt;/a&gt; &lt;h3&gt;&lt;a name="_Toc311287823"&gt;&lt;/a&gt;&lt;/h3&gt; &lt;h3&gt;Importance of Web Service Automation&lt;/h3&gt; &lt;p&gt;It’s important to first understand the importance of Web Services Automation and the ideal scenarios where it must be recommended.  &lt;p&gt;Web Services (WCF/ASMX) due to their worldwide implementation and popularity but limited test tool support, often raises the question around testing them effectively. Testers are craving to find effective ways to Test Web Services. Even VS 2010 doesn’t have dedicated test types for verifying Web Services (&lt;i&gt;like for UI, there is Coded UI and for DB there is Database Unit Test&lt;/i&gt;) which results in low test coverage and non-standardization of proven ways to test web services especially WCF 4.0 Web Services. Web Services Testing in VS 2010 so far has been not been given a first-class citizen treatment and this guidance will bridge that gap by making it much easier and effective.  &lt;p&gt;· In this agile development era, we are moving to a model where UI is ever changing and consummation of web services is taking the center stage and hence this layer attention it truly deserves by shifting the onus from UI testing to Web Services based validation.  &lt;p&gt;Traditionally teams have also used Fiddler and other 3&lt;sup&gt;rd&lt;/sup&gt; Party tools for the same purpose (&lt;i&gt;many times for manual testing alone&lt;/i&gt;) but as Web services have different needs, the knowledge harvested doesn’t get reused to its potential in future engagements  &lt;h3&gt;&amp;nbsp;&lt;/h3&gt; &lt;h3&gt;&lt;a name="_Toc311287824"&gt;Ideal Candidates&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;· If your application is consuming APIs exposed by other upstream systems or 3rd Parties  &lt;p&gt;· If your application is exposing APIs to be consumed by the downstream applications  &lt;p&gt;· When your UI is dynamic and constantly changing and cost/maintenance of UI automation is much more.  &lt;p&gt;· When your business logic and rules are primarily implemented using services (ASMX, WCF &amp;amp; Workflow Services) and testing at this layer is much faster and efficient.  &lt;p&gt;· When you need to come up with a common automation framework for web services that can be used to validate both functional and performance aspect of the web services with minimum effort.  &lt;h3&gt;&lt;a name="_Toc311287825"&gt;&lt;/a&gt;&lt;a name="_Test_Approach_&amp;ndash;"&gt;&lt;/a&gt;&amp;nbsp;&lt;/h3&gt; &lt;h3&gt;Test Approach – Identify your goal (Functional Test or Performance Test or Both)&lt;/h3&gt; &lt;p&gt;When we understand and realize the importance of Web Services Automation, the next challenge is to select the right Test approach and Test Type before jumping into automation design and implementation.  &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;a name="_Toc311287826"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;Test Objective&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;It is important to answer the basic question “&lt;i&gt;Why do you want to do Web Services Testing?”&lt;/i&gt; and that will help you decide the right kind of Test you should choose to automate them. Let’s begin with few possible answers  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-kt3p76a3Qh8/TuPme3WkdNI/AAAAAAAAGjE/FvJLd2lBQ0g/s1600-h/clip_image00142.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[4]" border="0" alt="clip_image001[4]" src="http://lh3.ggpht.com/-jseQkkrYxOQ/TuPmfqU9y9I/AAAAAAAAGjM/ShEPdZBEnhw/clip_image0014_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; &lt;i&gt;To validate the functional behavior of your application / APIs&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-Fh3FBUOZVSY/TuPmghMTf1I/AAAAAAAAGjU/LwAS5ja21t0/s1600-h/clip_image00152.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[5]" border="0" alt="clip_image001[5]" src="http://lh3.ggpht.com/-CEPfRh5RnOc/TuPmh35o6hI/AAAAAAAAGjc/DoF6Cl0jQqI/clip_image0015_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; &lt;i&gt;To validate the performance aspect of your application/ APIs&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-hzzkXsf52_s/TuPmi9RkZFI/AAAAAAAAGjk/LaHqgWw1HMw/s1600-h/clip_image00162.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[6]" border="0" alt="clip_image001[6]" src="http://lh6.ggpht.com/-35CvxwlR5UM/TuPmjww_qXI/AAAAAAAAGjs/PMOKIwNIcSA/clip_image0016_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; &lt;i&gt;To first validate the functionality and then also test the performance aspect of it. (a) + (b)&lt;/i&gt;  &lt;p&gt;Now when you know about your test objective, you should also look at the technologies being used for your Web Services as that can make a difference as well. If you use Microsoft platform, chances are your services are built on:  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-M-MbUy77Le0/TuPmk3J4nxI/AAAAAAAAGj0/nqGlgMIGF94/s1600-h/clip_image00172.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[7]" border="0" alt="clip_image001[7]" src="http://lh4.ggpht.com/-5sK9cS6oLHk/TuPmmED4FUI/AAAAAAAAGj8/bOEfM3lxyV8/clip_image0017_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; &lt;i&gt;ASMX – Legacy aps &lt;/i&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-CwJsaBQWEzg/TuPmnAJpcAI/AAAAAAAAGkE/c1WN-cB7i98/s1600-h/clip_image00182.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[8]" border="0" alt="clip_image001[8]" src="http://lh3.ggpht.com/-lUM96pqRdE4/TuPmn7KopDI/AAAAAAAAGkM/ymuefs9bSl0/clip_image0018_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; &lt;i&gt;WCF – New apps &lt;/i&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/--D4qT5bZtYw/TuPmokuYfDI/AAAAAAAAGkU/5Av_UfFA9CU/s1600-h/clip_image00192.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[9]" border="0" alt="clip_image001[9]" src="http://lh4.ggpht.com/-G0QwzXPsWlo/TuPmpsFyx_I/AAAAAAAAGkc/nSvQt49rxMU/clip_image0019_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; &lt;i&gt;WF – Window Workflow Foundation&lt;/i&gt;  &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;a name="_Toc311287827"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;Choosing the appropriate Test Type (Unit Test or Web Test)&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;Please find below the recommendation on the type of test you should decide depending on your test objective defined in the section above  &lt;p&gt;&lt;b&gt;Unit Test&lt;/b&gt; – provides you with flexibility to directly access your Web services APIs programmatically using familiar c# and test their behaviour based on your requirements, business rules etc. &lt;i&gt;We will be &lt;/i&gt;&lt;a href="file:///C:/Users/rajkamal/Documents/#_Web_Services_Automation"&gt;&lt;i&gt;covering&lt;/i&gt;&lt;/a&gt;&lt;i&gt; this in depth in the section below&lt;/i&gt;  &lt;p&gt;&lt;b&gt;Web Test –&lt;/b&gt; also lets you invoke your web services methods, though not through better known record and playback feature of Web Test but by directly adding services method call and parameters, properties. &lt;i&gt;We will be &lt;/i&gt;&lt;a href="file:///C:/Users/rajkamal/Documents/#_Web_Services_Automation_1"&gt;&lt;i&gt;covering&lt;/i&gt;&lt;/a&gt;&lt;i&gt; this in depth in the section below&lt;/i&gt;  &lt;p&gt;At a high level, you can say that unit test is more of glass box testing whereas Web Test gives you ‘black box’ view.  &lt;p&gt;As shown in the image below, &lt;b&gt;Unit Test&lt;/b&gt; is an &lt;b&gt;excellent&lt;/b&gt; choice when:  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-VKa9wiI0dwk/TuPmqIJZCKI/AAAAAAAAGkk/Dihz8mI3Guw/s1600-h/clip_image001102.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[10]" border="0" alt="clip_image001[10]" src="http://lh5.ggpht.com/-pYN1SNaKpf0/TuPmrQlUiGI/AAAAAAAAGks/-7DjIVLftr0/clip_image00110_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; You have complex web services involving lot of business rules and logic which you need to validate and primary focus is on detailed functional validation  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-Z8jVg9C4G7k/TuPmsFfOJUI/AAAAAAAAGk0/pL7GX9YhDlk/s1600-h/clip_image001112.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[11]" border="0" alt="clip_image001[11]" src="http://lh6.ggpht.com/-7JquCGPAB_0/TuPms6gfrMI/AAAAAAAAGk8/7TZyX3LVWd0/clip_image00111_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; You are using WCF based services that includes RESTFul API, services returning non-xml kind of data  &lt;p&gt;&lt;b&gt;Web Test&lt;/b&gt; is a &lt;b&gt;better&lt;/b&gt; choice when:  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-PNY2lzQivZE/TuPmt9kApcI/AAAAAAAAGlE/u3JQfM1uoko/s1600-h/clip_image001122.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[12]" border="0" alt="clip_image001[12]" src="http://lh3.ggpht.com/-ad8e2YrAldQ/TuPmvJgL6XI/AAAAAAAAGlM/4I26yW-SpCE/clip_image00112_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; You have relatively simpler web services where you objective is to test simpler / straightforward functionality and behaviour and primary focus is to test their performance down the line  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-IXM0d7sbsyY/TuPmv01mqAI/AAAAAAAAGlU/CfK2cV4ewc8/s1600-h/clip_image001132.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[13]" border="0" alt="clip_image001[13]" src="http://lh4.ggpht.com/-dh-moDlSW3M/TuPmwvgOZNI/AAAAAAAAGlc/7pSg5hvM3Lg/clip_image00113_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; You are working on legacy app that are based on ASMX kind of services which have a better support in Web Test  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;u&gt;&lt;/u&gt;&lt;/i&gt;&amp;nbsp; &lt;p&gt;&lt;i&gt;&lt;u&gt;&lt;/u&gt;&lt;/i&gt;&amp;nbsp; &lt;a href="http://lh5.ggpht.com/-QVsmMIJnIM0/TuPmxYfgEmI/AAAAAAAAGlk/Nxi6KLPQHd8/s1600-h/image4%25255B1%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-KwBqYa2UXqk/TuPmyebbqYI/AAAAAAAAGls/QiPtM5K5QAE/image_thumb21.png?imgmax=800" width="626" height="326"&gt;&lt;/a&gt;  &lt;blockquote&gt; &lt;p align="center"&gt;&lt;i&gt;&lt;u&gt;Test Types vs. Test Objective Recommendation&lt;/u&gt;&lt;/i&gt;&lt;u&gt;&lt;/u&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;h3&gt;&amp;nbsp;&lt;/h3&gt; &lt;h3&gt;&amp;nbsp; &lt;/h3&gt; &lt;h3&gt;&lt;a name="_Toc311287828"&gt;Sample Lab Application: Web Service Automation&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;&lt;a name="_Walkthrough:_Identifying_Automation"&gt;&lt;/a&gt;As many of you might be new to Web Services automation, we have created and shared sample Web Services applications that will help you better understand our helper functions/ Add-ins and sample unit test/web test shown later in the document.  &lt;p&gt;If you already have sample Web Services deployed in your machine, you can skip this section. &lt;/p&gt; &lt;p&gt; &lt;table cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;&lt;b&gt;Sample Application: Student Administration&lt;/b&gt;  &lt;p&gt;This is a sample &lt;b&gt;Student Administration&lt;/b&gt; application that comprises of simple functionalities around enrolling students and displaying their details back to the user. The UI app is built using Win forms and services are implemented using both ASMX and WCF for demonstration purpose. There are other sample projects to demonstrate features like Authentication, Caching, Workflow, Asynchronous calling etc.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-J6YTUZKOinA/TuPmzWgiuEI/AAAAAAAAGl0/xUo1Gv7Wxtw/s1600-h/image10.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-cmxppzqUzCc/TuPm1LO2rZI/AAAAAAAAGl8/DfkD7qoU7m8/image_thumb6.png?imgmax=800" width="693" height="464"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Sample Student Administration Application UI&lt;/i&gt;  &lt;p&gt;&amp;nbsp; &lt;a href="http://lh6.ggpht.com/-eZ5-v7LEo6I/TuPm2LFe9OI/AAAAAAAAGmE/BBRrmljYFyk/s1600-h/image14.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-yfxZsL7VzLc/TuPm3qTncOI/AAAAAAAAGmM/T4vZqO-htTk/image_thumb8.png?imgmax=800" width="361" height="310"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Sample Application project structure in TFS&lt;/i&gt;  &lt;p&gt;Please refer to &lt;a href="file:///C:/Users/rajkamal/Documents/#_Deploying_Sample_Web"&gt;Appendix: Deploying Sample Web Services Application&lt;/a&gt; to know more about our sample application and instructions around deployment.  &lt;p&gt;At this point we assume you have deployed our sample web services application. In subsequent sections, we will present the various approaches and steps involved in &lt;b&gt;Web Services &lt;/b&gt;&lt;b&gt;Automation Design, Development &amp;amp; Execution &lt;/b&gt;that you should take to achieve your objective while following the automation standards and guidelines that are recommended.  &lt;p&gt;&amp;nbsp; &lt;h3&gt;&lt;a name="_Toc311287829"&gt;&lt;/a&gt;&lt;a name="_Web_Services_Automation"&gt;&lt;/a&gt;Web Services Automation – Unit Test Walkthrough&lt;/h3&gt; &lt;p&gt;If “&lt;b&gt;Unit Test&lt;/b&gt;” was selected as the Test approach for Web service automation based on the analysis and your test objective as covered in above &lt;a href="file:///C:/Users/rajkamal/Documents/#_Test_Approach_&amp;ndash;"&gt;section: Test Approach &lt;/a&gt;then proceed with the walk through.  &lt;h4&gt;&lt;a name="_Toc311287830"&gt;&lt;/a&gt;&lt;a name="_Walkthrough:_Creating_a"&gt;&lt;/a&gt;&lt;a name="_Step_3:_Automation"&gt;&lt;/a&gt;&lt;font color="#000000" size="4" face="Arial"&gt;&lt;/font&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;font color="#000000" size="4" face="Arial"&gt;Creating a new Unit Test Project / Reusing Sample Template Unit Test Project&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;&lt;a name="_Walkthrough:_Designing_automation"&gt;&lt;/a&gt;You can create a new project from scratch or using our existing sample template project but it’s important to add your project to source control for version management and change tracking. &lt;/p&gt; &lt;p&gt; &lt;table border="1" cellspacing="0" cellpadding="0" width="838"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="130"&gt; &lt;p&gt;Topics&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="670"&gt; &lt;p&gt;Description&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;1. &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="130"&gt; &lt;p&gt;Have you identified &amp;amp; marked the automatable tests as PLANNED in Microsoft Test Manager (MTM)&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="670"&gt; &lt;p&gt;Open your test cases in Test Manager that you want to automate and mark Automation Status = “Planned” for those  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://lh6.ggpht.com/-pC4EGY9ONWY/TuPm4aClU3I/AAAAAAAAGmU/6IwLG9XNErU/s1600-h/image11.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-zWOBh1US2_I/TuPm5oAKzDI/AAAAAAAAGmc/fEMFYudBYl4/image_thumb.png?imgmax=800" width="413" height="280"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Whereas the test which are not good candidates for automation are marked as “Not Automated” to show that they are out-of-scope for automation.&lt;/i&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://lh5.ggpht.com/-TUIxmUoaZC8/TuPm6xo2noI/AAAAAAAAGmk/cl680p5x3QA/s1600-h/image5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-pcDvaQprofI/TuPm8Ik7foI/AAAAAAAAGms/-F6y4q0EkWY/image_thumb2.png?imgmax=800" width="418" height="242"&gt;&lt;/a&gt;  &lt;p&gt;This is an &lt;i&gt;optional&lt;/i&gt; step if you don’t want to run your test from Microsoft Test Manager and map your automation to manual test cases. We however recommend this.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;2. a&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="130"&gt; &lt;p&gt;Have you created new Test project &amp;amp; Added it to Source Control (TFS)?  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="670"&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Every automation project must be source controlled.  &lt;p&gt;&amp;nbsp;&lt;a href="http://lh5.ggpht.com/-r6h3AdVlB2Y/TuPm9f48U6I/AAAAAAAAGm0/Il22azxMYdg/s1600-h/image9.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-7ninDSHEmx0/TuPm-vV45JI/AAAAAAAAGm8/Jos3ll2Fp0I/image_thumb4.png?imgmax=800" width="414" height="373"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Add project to Source Control by clicking the check box as shown and give appropriate name.&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;2.b&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="130"&gt; &lt;p&gt;Alternatively,  &lt;p&gt;Open existing Test project and using it as Template&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="670"&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Launch Visual Studio, Browse and open existing &lt;b&gt;‘WebServiceAutomation_SampleUnitTest’ &lt;/b&gt;template project and add it to Source control. You can change the properties as per your needs.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-uRtw8ZXKzwQ/TuPm_82nF3I/AAAAAAAAGnE/r3NPpLV2hv8/s1600-h/image141%25255B1%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-BLdoEPehKso/TuPnBc91b2I/AAAAAAAAGnM/CHnTi2C0g14/image_thumb7.png?imgmax=800" width="259" height="402"&gt;&lt;/a&gt;  &lt;p&gt;For this sample template project we have &lt;b&gt;SampleUnitTestCases.cs&lt;/b&gt; that contains all our sample reusable unit test cases.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-2n5tluYDadQ/TuPnDAEi1BI/AAAAAAAAGnU/Gec1Tw4XCe0/s1600-h/image61.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-2mWjKofv0rc/TuPnGp2WzyI/AAAAAAAAGnc/xUf4SxPBx1M/image_thumb41%25255B1%25255D.png?imgmax=800" width="532" height="456"&gt;&lt;/a&gt;  &lt;p&gt;Please find below a short description on the folder structure of the template project which will be used for case study:  &lt;p&gt;1. &lt;b&gt;Config&lt;/b&gt;: All your application configuration details that you need to run your test will go to app.config  &lt;p&gt;Example:  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-3uoW2R1uAmE/TuPnHn-5-TI/AAAAAAAAGnk/e1ULoGGkyPA/s1600-h/image23.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-6v0NINxL69c/TuPnIhGIw9I/AAAAAAAAGns/xy6W3Vigia8/image_thumb17.png?imgmax=800" width="341" height="73"&gt;&lt;/a&gt;  &lt;p&gt;Also refer to: &lt;a href="http://msdn.microsoft.com/en-us/library/a65txexh(v=VS.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/a65txexh(v=VS.100).aspx&lt;/a&gt;  &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;Common Libraries References: &lt;/b&gt;Add references to our reusable helper library &lt;b&gt;“WebServicesTesting.Automation.UnitTest.Helper.dll”&lt;/b&gt; for Unit Test Web Services Testing &lt;i&gt;(provided as part of the release and &lt;/i&gt;&lt;a href="file:///C:/Users/rajkamal/Documents/#_Web_Service_Performance"&gt;&lt;i&gt;documented&lt;/i&gt;&lt;/a&gt;&lt;i&gt; below&lt;/i&gt;)&lt;b&gt; &lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;.&lt;b&gt;&lt;/b&gt; &lt;a href="http://lh4.ggpht.com/-8bBubnd16q4/TuPnJ7Q9L-I/AAAAAAAAGn0/VTZs2KRAFLQ/s1600-h/image28.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-5Nd0Y5PtnJ0/TuPnLKA-s_I/AAAAAAAAGn8/taG0dGJJzHk/image_thumb20.png?imgmax=800" width="472" height="402"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;Service References: &lt;/b&gt;Add / update services reference to point to your web services and provide a logical name&lt;b&gt;&lt;/b&gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-Vz_uTzpl94g/TuPnMYD_26I/AAAAAAAAGoE/suKIA6pkjyA/s1600-h/image33.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-OlkUdMfszp8/TuPnOH-vNBI/AAAAAAAAGoM/CXIy8pA5AB8/image_thumb23.png?imgmax=800" width="490" height="423"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;4. &lt;/b&gt;&lt;b&gt;Scripts: &lt;/b&gt;Your actual test are stored in these .cs files along with components like Test Initialize, Test Cleanup etc&lt;b&gt;&lt;/b&gt;  &lt;p&gt;You can create a folder structure to organize your test methods by grouping them in multiple class files depending on the size of the project. It is advisable to group test belonging to same feature/functional module to be grouped together in a .CS file and given an appropriate name.  &lt;p&gt;&lt;b&gt;5. &lt;/b&gt;&lt;b&gt;Solution Configurations &amp;amp; Compilation Symbols&lt;/b&gt;  &lt;p&gt;With our template solution you get additional solution configuration which will help you run your same test for both functional and load test seamlessly by controlling the sections of the code that you may want to execute for functional and load testing  &lt;p&gt;For example. When you do load test, you might not want to do certain validation which makes sense for functional testing alone and these configurations will control that by just selecting the appropriate solution configuration as shown below.  &lt;p&gt;a) Custom Solution configurations  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-2PSAVG04I0U/TuPnO8x0yWI/AAAAAAAAGoU/5sN7y3O7dVw/s1600-h/clip_image0024.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://lh3.ggpht.com/-E6qophuxK_8/TuPnQC2jXiI/AAAAAAAAGoc/KdlCpbC0RGw/clip_image002_thumb1.jpg?imgmax=800" width="391" height="217"&gt;&lt;/a&gt;  &lt;p&gt;b) Configuration – Functional Testing  &lt;p&gt;As shown below it uses a compilation symbol #&lt;b&gt;WEBSERVICES_FUNCTIONAL_TESTING &lt;/b&gt;that is used in our test methods to control the behavior.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-ze4f7owBkOs/TuPnTYpN01I/AAAAAAAAGok/eT_PfHG_32s/s1600-h/image7.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-aWs_gnifSPk/TuPnUYeDc_I/AAAAAAAAGos/yJd_evSqoTI/image_thumb3.png?imgmax=800" width="406" height="146"&gt;&lt;/a&gt;  &lt;p&gt;c) Inside your test method, you will have code like this to control the behavior based on the solution configuration file that is selected  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-8awi-o-hkw8/TuPnVWX3MfI/AAAAAAAAGo0/7MXo_4R5Hks/s1600-h/image11%25255B1%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-8HxQzQUAp0I/TuPnWGu6VNI/AAAAAAAAGo8/SAIQ9e61MSw/image_thumb5.png?imgmax=800" width="403" height="107"&gt;&lt;/a&gt;  &lt;p&gt;For more reference:  &lt;p&gt;&lt;a href="http://www.codeproject.com/Articles/49448/Use-Visual-Studio-Conditional-Compilation-to-manag.aspx"&gt;http://www.codeproject.com/Articles/49448/Use-Visual-Studio-Conditional-Compilation-to-manag.aspx&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;h4&gt;&lt;/h4&gt; &lt;h4&gt;&lt;/h4&gt; &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;a name="_Toc311287831"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;Unit Test Automation Design &amp;amp; Development (WCF &amp;amp; ASMX based services)&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;Now that you have your test project in place and our sample reusable unit test cases for automating common web services test scenario, in this section we will be walking you through few sample reusable tests that you can customize it for your own needs or create new unit test for your project scope. The approach shown below would remain same for WCF as well as ASMX based services and we have shown examples of both.  &lt;p&gt;Follow the below steps for Automation design guidance:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;table border="1" cellspacing="0" cellpadding="0" width="849"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="39"&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="129"&gt; &lt;p&gt;Steps&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="679"&gt; &lt;p&gt;Description&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="39"&gt; &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="129"&gt; &lt;p&gt;Global Settings&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="679"&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;a) Set the test context which provides information about and functionality for the current test run.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-CzabpmxgY7s/TuPnW9g51kI/AAAAAAAAGpA/lwJ6bfk_6wY/s1600-h/image15.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-IVtAZaqJq9g/TuPnX05J_SI/AAAAAAAAGpM/jG4Z9te6vu0/image_thumb7%25255B1%25255D.png?imgmax=800" width="325" height="211"&gt;&lt;/a&gt;  &lt;p&gt;b) &lt;b&gt;Test Initialize:&lt;/b&gt; To perform steps before running each test like instantiating objects, defining global variables including connection strings etc.  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-zKbtqpKnEiY/TuPnY8neiXI/AAAAAAAAGpU/EkVQ68oZumo/s1600-h/image19.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-1x2JNgbl26k/TuPnaKnVRZI/AAAAAAAAGpc/fwz1ZsUIk78/image_thumb9.png?imgmax=800" width="387" height="157"&gt;&lt;/a&gt;  &lt;p&gt;c) &lt;b&gt;Test Cleanup:&lt;/b&gt; To run code after running each steps&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="39"&gt; &lt;p&gt;2a. &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="129"&gt; &lt;p&gt;Add New Test Methods / Reuse Existing Template Test Methods  &lt;p&gt;&lt;b&gt;(Simple Lookup Verification)&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="679"&gt; &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;&lt;i&gt;Sample T&lt;/i&gt;&lt;/b&gt;&lt;b&gt;est&lt;i&gt; scenario&lt;/i&gt;: Verifying Web service call response value against expected results &lt;/b&gt; &lt;p&gt;Below is sample data driven test method for web services testing that comes with our template project for Unit Test. You can add your new test methods by modeling the below example.  &lt;p&gt;Step 1.  &lt;p&gt;Create a new Test method / Modify our existing sample test method  &lt;p&gt;Step 2.  &lt;p&gt;Instantiate and invoke your web service method (&lt;i&gt;in this example: ASMX based service&lt;/i&gt;) as shown in the code snippet below and get the results in a variable of appropriate data type  &lt;p&gt;In our sample example, the web service returns an integer datatype which we cast to String for comparison. Your services method can return any data type like int, double, decimal, bool, string etc and we can use the same helper method below to validate the response.  &lt;p&gt;Step 3.  &lt;p&gt;Get your expected results from data source of your choice as shown below.  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-A5PCcLYAwjw/TuPna-A2bQI/AAAAAAAAGpk/0LU6E8SFHNI/s1600-h/image24.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-zqJGAUYA-rQ/TuPncvL0alI/AAAAAAAAGps/WvwlpBlNAxc/image_thumb12.png?imgmax=800" width="518" height="341"&gt;&lt;/a&gt;  &lt;p&gt;Step 4.  &lt;p&gt;&lt;i&gt;Reuse our appropriate library / helper method for validating the web service response against expected results. &lt;/i&gt; &lt;p&gt;In this example &lt;a href="file:///C:/Users/rajkamal/Documents/#_Web_Services_Test"&gt;&lt;b&gt;CompareString&lt;/b&gt;&lt;/a&gt; is a reusable method in our helper / library that can be called from your test methods to save effort related to validating the results and marking the test as &lt;i&gt;pass/fail&lt;/i&gt;.  &lt;p&gt;&lt;i&gt;Note: Depending on your test scenario, you need to choose different helper/library methods. The &lt;/i&gt;&lt;a href="file:///C:/Users/rajkamal/Documents/#_Web_Services_Test"&gt;&lt;i&gt;complete documentation about our reusable library method is given in sections below&lt;/i&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="39"&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;2b&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="129"&gt; &lt;p&gt;Add New Test Methods / Reuse Existing Template Test Methods  &lt;p&gt;&lt;b&gt;(Simple Transactions Verification)&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="679"&gt; &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;&lt;i&gt;Sample T&lt;/i&gt;&lt;/b&gt;&lt;b&gt;est&lt;i&gt; scenario&lt;/i&gt;: Verifying Web service call results in database operation like Insert&lt;/b&gt;  &lt;p&gt;Below is sample test method when tester needs to validate if the web service call results into a Database Insert by validating the database for ensuring the transaction was committed. Instead of Insert, you might have different operations like update, delete etc. for which we have &lt;a href="file:///C:/Users/rajkamal/Documents/#_Web_Services_Test"&gt;reusable helper methods in our library&lt;/a&gt;.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-687yHX5ceL0/TuPnddHlzPI/AAAAAAAAGp0/efo40Rgm7h0/s1600-h/image28%25255B1%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-rWWi1v0XWd8/TuPnfmYfgYI/AAAAAAAAGp8/O-3k6kd1FBM/image_thumb14.png?imgmax=800" width="564" height="382"&gt;&lt;/a&gt;  &lt;p&gt;Here the web service method &lt;i&gt;Enroll_Student (in this case WCF based Service)&lt;/i&gt; is inserting a record into the database and the expected result is the query against the database to validate the operation to ensure transaction was committed.  &lt;p&gt;&lt;i&gt;Reuse our appropriate library / helper method for validating the web service response against expected results. &lt;/i&gt; &lt;p&gt;In this example &lt;a href="file:///C:/Users/rajkamal/Documents/#_Web_Services_Test"&gt;&lt;b&gt;Verify_DBInsert&lt;/b&gt;&lt;/a&gt; is a reusable method in our helper / library that can be called from your test methods to save effort related to validating the database insert and marking the test as &lt;i&gt;pass/fail&lt;/i&gt;.  &lt;p&gt;&lt;i&gt;Note: Depending on your test scenario, you need to choose different helper/library methods. The &lt;/i&gt;&lt;a href="file:///C:/Users/rajkamal/Documents/#_Web_Services_Test"&gt;&lt;i&gt;complete documentation about our reusable library method is given in sections below&lt;/i&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="39"&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;2c&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="129"&gt; &lt;p&gt;Add New Test Methods / Reuse Existing Template Test Methods  &lt;p&gt;&lt;b&gt;(Handling Complex Object Types)&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="679"&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&amp;nbsp; &lt;p&gt;&lt;i&gt;Use this approach as a generic way of comparing / validating web services response of various data types including user defined/abstract data types like Struct, Classes as well as primitive data types like Int, String, Dictionary, List etc.&lt;/i&gt;&lt;i&gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff649585.aspx"&gt;&lt;b&gt;DTO (Data Transfer Objects)&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;Having the results of a remote method available in an object instance makes it easy to pass this data to a test module or to compare it with the desired outcome&lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;It works by converting the service response (whether abstract or primitive data types) and expected results into standard generic objects which then are finally converted into XML for comparison with the help of our reusable library methods as described below in the example&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;b&gt;&lt;i&gt;Sample T&lt;/i&gt;&lt;/b&gt;&lt;b&gt;est&lt;i&gt; scenario&lt;/i&gt;: Verifying Web service response which returns a Struct object against test data from database.&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;Step 1: Create &lt;i&gt;Data structure&lt;/i&gt; for your object which your service returns as  &lt;p&gt;shown below  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-_KQ_uEiKJoo/TuPnglA7gEI/AAAAAAAAGqE/qpNkiZuuXSE/s1600-h/image32.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-VEvcWG_u5M8/TuPnirPQGJI/AAAAAAAAGqM/nFVZ0H67EKo/image_thumb16.png?imgmax=800" width="533" height="416"&gt;&lt;/a&gt;  &lt;p&gt;(&lt;i&gt;In this case it returns a Struct which contain elements like&lt;/i&gt;  &lt;p&gt;&lt;i&gt;First_Name, Last_Name etc.&lt;/i&gt;  &lt;p&gt;Step 2. This is an optional step for better organizing your code which invoked your web services and returns the response to the main test method for verification.  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-whLNfUn-dMo/TuPnjzVSFgI/AAAAAAAAGqU/z1zzGTCQHJs/s1600-h/image41.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-k54G_UIXeg8/TuPnl2YZ_2I/AAAAAAAAGqc/Km0ouNrJbBQ/image_thumb20%25255B1%25255D.png?imgmax=800" width="563" height="339"&gt;&lt;/a&gt;  &lt;p&gt;Step 3: Add your test method  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-0mRhqkuO89s/TuPnm9luRLI/AAAAAAAAGqk/zG6Ktk1k23c/s1600-h/image45.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-BQXPJKKrsMQ/TuPno4sFA6I/AAAAAAAAGqs/WTLX90zE3L4/image_thumb22.png?imgmax=800" width="562" height="332"&gt;&lt;/a&gt;  &lt;p&gt;Step 4. You can read your data source (in this case database) and convert it into generic DTO object using reusable method in our library called &lt;b&gt;DTO_PopulateDBResults&lt;/b&gt; which takes Dataset as input parameter. DTO Type should be same as the type of your complex object &lt;i&gt;(in this case Student which is struct)&lt;/i&gt;  &lt;p&gt;&lt;i&gt;List&lt;/i&gt;&lt;i&gt;&amp;lt;Student&amp;gt; ExpectedStudentDTOList = null;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;ExpectedStudentDTOList = helper.DTO_PopulateDBResults&amp;lt;Student&amp;gt;(dt);&lt;/i&gt;  &lt;p&gt;Step 5. In this step you call you Action code to get your web service response  &lt;p&gt;Actions.DTO_Action complexObj = new Actions.DTO_Action();  &lt;p&gt;Object myObj = complexObj.ComplexObjectSample();  &lt;p&gt;Step 6. Convert web services response into generic DTO using our generic library method called &lt;b&gt;DTO_PopulateObject&lt;/b&gt; which accepts Object and structure of the object defined above as parameters.  &lt;p&gt;object ActualStudentDTOList = helper.DTO_PopulateObject&amp;lt;Student&amp;gt;(myObj, s1);  &lt;p&gt;Step 7. Finally the generic DTO objects returned from expected results i.e. Test data source and Web services response are converted into XML and compared using our reusable library method called DTO_XMLComparison and accordingly marks the test method as pass/fail  &lt;p&gt;bool result = helper.DTO_XmlComparison(ExpectedStudentDTOList, ActualStudentDTOList, typeof(List&amp;lt;Student&amp;gt;));  &lt;p&gt;Assert.AreEqual(true, result, "Expected does not match actual");  &lt;p&gt;Step 8. Expected and Actual XML files with the test method name are created under your folder &lt;b&gt;c:\TestResults &lt;/b&gt;for your future reference. Please create this folder if it doesn’t exist&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-1U4veiKJ60g/TuPnpiIYmgI/AAAAAAAAGq0/ojUD05DHeLI/s1600-h/image49.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-qSMOPHwdqNQ/TuPnq4C6feI/AAAAAAAAGq8/-bB3c31OpeI/image_thumb24.png?imgmax=800" width="548" height="181"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="39"&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;3&lt;b&gt;. &lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="129"&gt; &lt;p&gt;Make your scripts data-driven  &lt;p&gt;Irrespective of kind of test methods you have created above&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="679"&gt; &lt;p&gt;&lt;b&gt;Data-Driven Test&lt;/b&gt;  &lt;p&gt;Ensure every variable is parameterized by passing the test data to each test using data-driven capabilities in VS 2010.  &lt;p&gt;&lt;i&gt;Right-click on the test method and select Properties, to view the properties of the test&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/--OEgYro87bU/TuPnr14US1I/AAAAAAAAGrE/DARkqDSaGVs/s1600-h/image54.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-MIzaYeEeyKw/TuPntjDCBiI/AAAAAAAAGrM/zsTl4qvAg8A/image_thumb27.png?imgmax=800" width="382" height="306"&gt;&lt;/a&gt;  &lt;p&gt;To start making this a data-driven test, we have to first create a data source for the test to draw from. On the Data Connection String property, click the ellipse button to start the New Test Data Source Wizard  &lt;p&gt;There are three options for creating a data source:  &lt;p&gt;&lt;b&gt;Database&lt;/b&gt; -- which allows you to connect to a database or Microsoft Excel spreadsheet  &lt;p&gt;&lt;b&gt;CSV&lt;/b&gt; File -- which allows you to use a comma-delimited file  &lt;p&gt;&lt;b&gt;XML&lt;/b&gt; File -- which allows you to use an XML file  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-qpdE0dgn_so/TuPnuUU9RkI/AAAAAAAAGrU/sT_KMaXvlm4/s1600-h/image59.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/--zRp92F4LQc/TuPnv_lxBFI/AAAAAAAAGrc/3Ulx74ek0AA/image_thumb30.png?imgmax=800" width="324" height="310"&gt;&lt;/a&gt;  &lt;p&gt;When you add a data source A Data Source attribute is added to the Test method.  &lt;p&gt;[DataSource("System.Data.SqlClient", "Data Source=(local);Initial Catalog=Sample_DB;Integrated Security=True", "Sample_App", DataAccessMethod.Sequential), TestMethod]&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="39"&gt; &lt;p&gt;4.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="129"&gt; &lt;p&gt;Map your automation test to your test cases in MTM&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="679"&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This is an &lt;i&gt;optional&lt;/i&gt; step if you don’t want to run your test from Microsoft Test Manager and &lt;a href="http://msdn.microsoft.com/en-us/library/dd380741.aspx"&gt;map your automation unit test to manual test cases&lt;/a&gt;. We however recommend this.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-Pno7ZfstUU0/TuPnxT2cshI/AAAAAAAAGrk/SnwxldmlCvQ/s1600-h/image64.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-t8ys0BGMiBE/TuPny3l48JI/AAAAAAAAGrs/r1CC5_Val5o/image_thumb33.png?imgmax=800" width="515" height="438"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;Repeat the above steps for all your test scenarios against your web services to be tested. After you write and debug your scripts its important to run them in a batch or as part of a suite. There are various way to do that and factors to keep in mind as we will see in next section.  &lt;p&gt;&amp;nbsp; &lt;h3&gt;&lt;a name="_Toc311287832"&gt;&lt;/a&gt;&lt;a name="_Web_Services_Automation_1"&gt;&lt;/a&gt;Web Services Automation – Web Test Walkthrough&lt;/h3&gt; &lt;p&gt;If “&lt;b&gt;&lt;i&gt;Web Test&lt;/i&gt;”&lt;/b&gt; was selected as the Test approach for Web service automation based on the analysis and your test objective as covered in above &lt;a href="file:///C:/Users/rajkamal/Documents/#_Test_Approach_&amp;ndash;"&gt;section: Test Approach &lt;/a&gt;then proceed with the walk through.  &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;a name="_Toc311287833"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;Creating a new Web Test Project / Reusing Template Web Test Project&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;You can create a new project from scratch or using our existing sample template project but it’s important to add your project to source control for version management and change tracking. &lt;/p&gt; &lt;p&gt; &lt;table border="1" cellspacing="0" cellpadding="0" width="816"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="169"&gt; &lt;p&gt;Topics&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="609"&gt; &lt;p&gt;Description&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="169"&gt; &lt;p&gt;Have you created new Test project &amp;amp; Added it to Source Control (TFS)?  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="609"&gt; &lt;p&gt;Every automation project must be source controlled.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-JkMTzuewT3g/TuPn0NeApkI/AAAAAAAAGr0/q2fjpCJtXns/s1600-h/image70.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-S79-nbKCF1w/TuPn1-6bBmI/AAAAAAAAGr8/NuzzDsLqNFk/image_thumb37.png?imgmax=800" width="491" height="462"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Add project to Source Control by clicking the check box as shown&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;2.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="169"&gt; &lt;p&gt;Alternatively,  &lt;p&gt;Open existing Test project and using it as Template&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="609"&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Launch Visual Studio, Browse and open existing &lt;b&gt;“&lt;/b&gt; &lt;b&gt;WebServiceAutomation_SampleWebTest” &lt;/b&gt;template project and add it to Source control. You can change the properties as per your needs.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-lncK-EoecWE/TuPn2iTsxSI/AAAAAAAAGsE/cOC-YQKWR4M/s1600-h/image74.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-zmLOdAuqNAs/TuPn4Bw5ToI/AAAAAAAAGsM/Zxd5JHMwj8g/image_thumb39.png?imgmax=800" width="231" height="451"&gt;&lt;/a&gt;  &lt;p&gt;Please find below a short description on the folder structure of the template project which will be used for case study:  &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;Common Libraries References: &lt;/b&gt; &lt;p&gt;a) Add references to our reusable helper library &lt;b&gt;“WebServicesTesting.Automation.WebTest.Helper.dll”&lt;/b&gt; for WebTest based Web Services Testing &lt;i&gt;(provided as part of the release and &lt;/i&gt;&lt;a href="file:///C:/Users/rajkamal/Documents/#_Web_Service_Performance"&gt;&lt;i&gt;documented&lt;/i&gt;&lt;/a&gt;&lt;i&gt; below&lt;/i&gt;)  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;.&lt;b&gt;&lt;/b&gt; &lt;a href="http://lh3.ggpht.com/-LjPOqQFhe8g/TuPn5fA6-DI/AAAAAAAAGsU/FNwsdqpHovo/s1600-h/image78.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-Wqgp7QWHcUk/TuPn675vrOI/AAAAAAAAGsc/KfVylXxDptU/image_thumb41.png?imgmax=800" width="464" height="382"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;b) &lt;/b&gt;&lt;b&gt;Reusable Validation Rules&lt;/b&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-4AgLCIUUQuI/TuPn8BrqM6I/AAAAAAAAGsk/PsZGn3IcqOY/s1600-h/image82.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-kKzpKpKGq4E/TuPn97DlpGI/AAAAAAAAGss/eJEqhX8dBUg/image_thumb43.png?imgmax=800" width="481" height="350"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;c) &lt;/b&gt;&lt;b&gt;Reusable Extraction Rules&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-_sDvh-nLlTs/TuPn-09UFHI/AAAAAAAAGs0/RrnKpeU1Rbo/s1600-h/image86.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-jgaX-rtRGXg/TuPoAhIVj3I/AAAAAAAAGs8/5M4--oFWLLs/image_thumb45.png?imgmax=800" width="479" height="354"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;Service References: &lt;/b&gt;Add / update services reference to point to your web services and provide a logical name&lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-Znhq0yTelCg/TuPoB2F9EiI/AAAAAAAAGtE/TSSF5ygwSZ8/s1600-h/image90.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-9ZXxgFJrCN0/TuPoDM0p64I/AAAAAAAAGtM/God57ev-RWg/image_thumb47.png?imgmax=800" width="432" height="362"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;Scripts: &lt;/b&gt;Your actual test are stored in these .webtest files.&lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;You can create a folder structure to organize your test methods by grouping them in multiple class files depending on the size of the project. It is advisable to group test belonging to same feature/functional module to be grouped together in a .CS file and given an appropriate name.  &lt;p&gt;&lt;i&gt;For this sample template project we have many reusable webtest that can be reused / customized for your needs.&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-Fq1h1KI8Jk8/TuPoEmD_tNI/AAAAAAAAGtU/87dmo5847yM/s1600-h/image94.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-Z1CXKnk5j4I/TuPoG-Sn1dI/AAAAAAAAGtc/lJdgst_7Y2M/image_thumb49.png?imgmax=800" width="460" height="340"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;4. &lt;/b&gt;&lt;b&gt;Test Data: &lt;/b&gt;You can choose to have you test data as CSV or XML or Database as support by Visual Studio Testing framework for making your test data driven. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;h4&gt;&lt;/h4&gt; &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;a name="_Toc311287834"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;WebTest Automation Design &amp;amp; Development (WCF &amp;amp; ASMX based services)&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;Now that you have your test project in place, in this section we will be walking you through our sample reusable &lt;b&gt;Web test&lt;/b&gt; for automating common web services test scenario that you can customize it for your own needs or create new additional Web tests for your project scope.  &lt;p&gt;Follow the below steps for Automation design guidance: &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;table border="1" cellspacing="0" cellpadding="0" width="818"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="39"&gt; &lt;p&gt;S No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt; &lt;p&gt;Steps&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="613"&gt; &lt;p&gt;Description&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="39"&gt; &lt;p&gt;1a.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt; &lt;p&gt;Add New Web Test / Reuse Existing Template Web Test  &lt;p&gt;&lt;b&gt;(Dataset Verification for WCF/ ASMX Service)&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="613"&gt; &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;&lt;i&gt;Sample T&lt;/i&gt;&lt;/b&gt;&lt;b&gt;est&lt;i&gt; scenario&lt;/i&gt;: Verifying Web service method that returns a dataset against the expected test data from Database&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;If you are adding a new web test from scratch then follow the steps:  &lt;p&gt;Step 1. Open your web service method request XML by launching &lt;b&gt;WCFTestClient&lt;/b&gt; utility or any other way you are comfortable with.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-gMR-lIafOBQ/TuPoH4UpW7I/AAAAAAAAGtk/ArMENuD8UPc/s1600-h/image98.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-qnEJ_etfaus/TuPoJGaC4qI/AAAAAAAAGts/KZ9V2DFvD1U/image_thumb51.png?imgmax=800" width="560" height="159"&gt;&lt;/a&gt;  &lt;p&gt;Step 2. Add a new Web Test or Reuse our existing template Web Test and customize them  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-6DIGTQnV4HE/TuPoJ-Bq3cI/AAAAAAAAGt0/GQsA5MAtDoE/s1600-h/image102.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-6xLLQhNmMFs/TuPoLm_sYvI/AAAAAAAAGt8/bkGSbmiHDyI/image_thumb53.png?imgmax=800" width="507" height="262"&gt;&lt;/a&gt;  &lt;p&gt;Step 3. Right click the node and press “&lt;i&gt;Add Web Service Request&lt;/i&gt;” and provide your web service URL  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-fADBcJKu5Gk/TuPoMqn3m_I/AAAAAAAAGuE/ZONF_UMkWKY/s1600-h/image106.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-ylsIi4ts_Bk/TuPoN4mIC-I/AAAAAAAAGuM/87vDqWZP_oo/image_thumb55.png?imgmax=800" width="490" height="269"&gt;&lt;/a&gt;&amp;nbsp; &lt;p&gt;Step 4. Right click the node and press “&lt;i&gt;Add Header&lt;/i&gt;” and provide SOAPAction value as shown below by retrieving it from request XML of Step 1.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/--dcn_AHixUQ/TuPoO7Qz3lI/AAAAAAAAGuU/vfGhH407LvY/s1600-h/image110.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-X_IKEJWwsUM/TuPoP2hCyrI/AAAAAAAAGuc/jxPRdZFARtI/image_thumb57.png?imgmax=800" width="470" height="167"&gt;&lt;/a&gt;  &lt;p&gt;Step 5. Add &amp;lt;string body&amp;gt;  &lt;p&gt;a) From your request XML as shown below, extract Envelope and Body (you shouldn’t copy Header part)  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-A7oK4ujpje4/TuPoRfeaepI/AAAAAAAAGuk/iLwRQVvYGcU/s1600-h/image114.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-PPrq9HQRZDg/TuPoSsZ3X-I/AAAAAAAAGus/2DRt10bLzes/image_thumb59.png?imgmax=800" width="497" height="205"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"&amp;gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;s:Body&amp;gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;Display xmlns="http://tempuri.org/" /&amp;gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;/s:Body&amp;gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;/s:Envelope&amp;gt;&lt;/i&gt;  &lt;p&gt;b) Add this to to you string body now  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-PY2wwgnRNfA/TuPoTbbAT3I/AAAAAAAAGu0/lOtqyoZjvp8/s1600-h/image118.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/--thYXRDA_sw/TuPoUxnbfNI/AAAAAAAAGu8/2GsyNBa-QX8/image_thumb61.png?imgmax=800" width="525" height="241"&gt;&lt;/a&gt;  &lt;p&gt;Step 6. Add our reusable &lt;b&gt;Validation and Extraction Rule&lt;/b&gt; called &lt;b&gt;DatasetValidation&lt;/b&gt; that reads the expected data from database using SQL query and validate it against the response from web services by using XPathExpression  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-aJivTZz0ykk/TuPoV0DRyMI/AAAAAAAAGvE/onMAGKG-Tfg/s1600-h/image122.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-bksWHqg2BV0/TuPoXLMPXSI/AAAAAAAAGvM/7W9JrWm7x-s/image_thumb63.png?imgmax=800" width="528" height="312"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Note: Depending on your test scenario, you may need to choose different Extraction and Validation Rule &lt;/i&gt;&lt;a href="file:///C:/Users/rajkamal/Documents/#_Web_Services_Test"&gt;&lt;i&gt;complete documentation about our reusable library method is given in sections below&lt;/i&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="39"&gt; &lt;p&gt;1b.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt; &lt;p&gt;Add New Web Test / Reuse Existing Template Web Test  &lt;p&gt;&lt;b&gt;(Method Prototype Verification for WCF/ ASMX Service)&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="613"&gt; &lt;p&gt;&lt;b&gt;&lt;i&gt;Sample T&lt;/i&gt;&lt;/b&gt;&lt;b&gt;est&lt;i&gt; scenario&lt;/i&gt;: Verifying Web service method parameters and response values against expected test data.&lt;/b&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-J8-TlB1P2sM/TuPoYXfUQPI/AAAAAAAAGvU/35Xq1zOQPR0/s1600-h/image126.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-Qs_FxVINjo4/TuPoacJOS6I/AAAAAAAAGvc/CxajK5CzM2I/image_thumb65.png?imgmax=800" width="525" height="336"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;Repeat Step 1 to 5 from 1 a) above as explained  &lt;p&gt;Step 6. Add our reusable Extraction Rule called &lt;b&gt;ParameterExtraction &lt;/b&gt;and provide XPathExpression for example Enroll_Student and it will retrieve all the parameters name and their respective values and store it inside ContextParam  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-JyPD6YBg2mc/TuPobVL04DI/AAAAAAAAGvk/iqKUM6fW0F0/s1600-h/image130.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-IcCA8rJJuEY/TuPoc0il4-I/AAAAAAAAGvs/OVXgHpUVGhA/image_thumb67.png?imgmax=800" width="538" height="278"&gt;&lt;/a&gt;  &lt;p&gt;Step 7. Step 6. Add our reusable Validation Rule called &lt;b&gt;ParamValidation &lt;/b&gt;and provide &lt;i&gt;ParamValues&lt;/i&gt; that contain expected test data as shown below along with contextParam name as defined in Step 6.  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-jfHRXFgXRus/TuPoeJJnJ3I/AAAAAAAAGv0/uidPIri43h0/s1600-h/image135.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-C1X7K2dE3hw/TuPofifursI/AAAAAAAAGv8/HVSZCvM_2yI/image_thumb70.png?imgmax=800" width="539" height="310"&gt;&lt;/a&gt;  &lt;p&gt;Step 8 &amp;amp; 9. As shown in this web test you can also add our reusable &lt;b&gt;ServiceResponseExtraction&lt;/b&gt; and &lt;b&gt;ServiceResponseValidation&lt;/b&gt; rules from our helper class for validating the response values against expected test data.  &lt;p&gt;Step 10. After you run this web test, the result will show Pass / Fail with context tab showing the discrepancies if any.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-5Oo0sZ5z26Y/TuPogWUPffI/AAAAAAAAGwA/ZfqXAc8WoEo/s1600-h/image143.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-VN_F8KE6ndE/TuPoh9ZrIVI/AAAAAAAAGwM/5Abz3m20v8I/image_thumb73.png?imgmax=800" width="483" height="182"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Note: Depending on your test scenario, you may need to choose different helper/library methods. The &lt;/i&gt;&lt;a href="file:///C:/Users/rajkamal/Documents/#_Web_Services_Test"&gt;&lt;i&gt;complete documentation about our reusable library method is given in sections below&lt;/i&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="39"&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;2&lt;b&gt;. &lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt; &lt;p&gt;Make your scripts data-driven&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="613"&gt; &lt;p&gt;&lt;b&gt;Data-Driven Test&lt;/b&gt;  &lt;p&gt;Ensure every variable is parameterized by passing the test data to each test using data-driven capabilities in VS 2010.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-VfeeJNfRewk/TuPoi3tr0tI/AAAAAAAAGwU/IJgo36n8VKo/s1600-h/clip_image00254.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002[5]" border="0" alt="clip_image002[5]" src="http://lh3.ggpht.com/-TlAJIfoL09s/TuPojz_I6zI/AAAAAAAAGwc/ChiBBQ24WxA/clip_image0025_thumb2.jpg?imgmax=800" width="406" height="350"&gt;&lt;/a&gt;  &lt;p&gt;To start making this a data-driven test, we have to first create a data source for the test to draw from. On the Data Connection String property, click the ellipse button to start the New Test Data Source Wizard  &lt;p&gt;There are three options for creating a data source:  &lt;p&gt;&lt;b&gt;Database&lt;/b&gt; -- which allows you to connect to a database or Microsoft Excel spreadsheet  &lt;p&gt;&lt;b&gt;CSV&lt;/b&gt; File -- which allows you to use a comma-delimited file  &lt;p&gt;&lt;b&gt;XML&lt;/b&gt; File -- which allows you to use an XML file &lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-8OJvPyuDY_Y/TuPolCC-HCI/AAAAAAAAGwk/xHSBohVyHkk/s1600-h/image147.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-UDRri1ObLxU/TuPom5TUruI/AAAAAAAAGws/xqizVkZMlsE/image_thumb75.png?imgmax=800" width="331" height="308"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;Repeat the above steps for all your test scenarios against your web services to be tested. After you write and debug your scripts its important to run them in a batch or as part of a suite. There are various way to do that and factors to keep in mind as we will see in next section.  &lt;h3&gt;&lt;/h3&gt; &lt;h3&gt;&lt;a name="_Toc311287835"&gt;Automation Execution &amp;amp; Deployment (Unit Test/Web Test)&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;&lt;a name="_Walkthrough:_Error_handling,"&gt;&lt;/a&gt;Ensure you have configured test settings to capture logs, code coverage, test impact etc. and you also need to keep in mind that your script should be able to successfully run in multiple environment (for ex. Test to UAT)  &lt;p&gt;After automation design and debugging is completed, you can now run and deploy your automation scripts using the below steps:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;table border="1" cellspacing="0" cellpadding="0" width="798"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="130"&gt; &lt;p&gt;Areas&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="628"&gt; &lt;p&gt;Description&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="130"&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Configuring Test Settings&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="628"&gt; &lt;p&gt;&lt;b&gt;Test Settings&lt;/b&gt;  &lt;p&gt;a) &lt;b&gt;Data and Diagnostic&lt;/b&gt;: Enable appropriate diagnostic are selected as shown below (&lt;b&gt;Code Coverage&lt;/b&gt;, Event Log, Test Impact etc.)  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-hj0mfgK8tkY/TuPooPRC76I/AAAAAAAAGw0/ec53QleWXuU/s1600-h/image151.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-e5h3HzRQ2wA/TuPopmKkQpI/AAAAAAAAGw8/i2uBA1MrXOs/image_thumb77.png?imgmax=800" width="549" height="317"&gt;&lt;/a&gt;  &lt;p&gt;b) Define other settings like Roles, Test Timeouts, Setup and Clean scripts&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-eFeljzgZib0/TuPoqmLf7HI/AAAAAAAAGxE/JOCVSbo4r3s/s1600-h/image155.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-ZC6hJpLWLy4/TuPosCNZ_MI/AAAAAAAAGxM/-rOqSGyykow/image_thumb79.png?imgmax=800" width="539" height="307"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;2.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="130"&gt; &lt;p&gt;Command Line Execution (MSTest.Exe)&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="628"&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;&lt;i&gt;Grouping &amp;amp; Classifying Test Methods using various parameters&lt;/i&gt;&lt;/b&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;It lets you run groups of tests based on their assigned categories without the requirement to maintain test lists.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-12tZeoBpu3A/TuPos8f9oMI/AAAAAAAAGxU/SsWQWkdosu4/s1600-h/image159.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-UZmXa_tbNdk/TuPouTpi0YI/AAAAAAAAGxc/wpRd0bqIfE0/image_thumb81.png?imgmax=800" width="514" height="117"&gt;&lt;/a&gt;  &lt;p&gt;Go to Test View and you can filter and view your tests by setting these parameters  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-_TT98akH8nw/TuPoveZzpnI/AAAAAAAAGxk/zy9LSF6m1DQ/s1600-h/image163.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-1RNVpgB-vCA/TuPowx3AX2I/AAAAAAAAGxs/_eJApdWdkLM/image_thumb83.png?imgmax=800" width="376" height="187"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;MSTest.EXE Options&lt;/b&gt;&lt;b&gt;&lt;i&gt;: &lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;MSTest.exe is the command-line command that is used to run tests. This command has several options that you can use to customize your test run. You can specify these options in any order on the MSTest.exe command line.  &lt;p&gt;Example:  &lt;p&gt;&lt;i&gt;mstest /testcontainer:"C:\&lt;/i&gt; &lt;i&gt;WebServiceAutomation_SampleUnitTest" /test:testproject32\generic &lt;/i&gt; &lt;p&gt;Refer to &lt;a href="http://msdn.microsoft.com/en-us/library/ms182489.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms182489.aspx&lt;/a&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;3.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="130"&gt; &lt;p&gt;TCM.exe or Test Execution from Microsoft Test Manager  &lt;p&gt;&lt;i&gt;(Optional though recommended)&lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="628"&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;a) If you have mapped you automation unit test with test cases in Microsoft Test Manager then you can use TCM.exe as shown below to run your web service test and it will also update your test cases results in MTM without any custom code. You don’t need to use MSTest.exe in that case  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;Example:  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;tcm run /create /title:title /planid: id /collection:CollectionURL /teamproject:project (suiteid:id /configid:configid | /querytext: query) [/settingsname:name] [/owner:owner] [/builddir:directory] [/testenvironment:name] [/login:username,[password]] [/include]&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Refer to : &lt;/i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd465192.aspx"&gt;&lt;i&gt;http://msdn.microsoft.com/en-us/library/dd465192.aspx&lt;/i&gt;&lt;/a&gt;&lt;i&gt; &amp;amp; &lt;/i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff942469.aspx"&gt;&lt;i&gt;http://msdn.microsoft.com/en-us/library/ff942469.aspx&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;b)You can also Run Automated Tests from a Test Plan Using Microsoft Test Manager. To run the latest version of your automated test, you must make sure that the correct build is selected for your test plan. You must also use a physical or virtual environment to run your automated tests. This is out of scope of this guidance however we recommend this the most.  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Refer to: &lt;/i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd553270.aspx"&gt;&lt;i&gt;http://msdn.microsoft.com/en-us/library/dd553270.aspx&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;h3&gt;&lt;a name="_Toc311287836"&gt;&lt;/a&gt;&lt;a name="_Web_Service_Performance"&gt;&lt;/a&gt;Web Service Performance Testing using Unit Test/Web Test + Load Test&lt;/h3&gt; &lt;p&gt;Now when you have your Web Services Test automated either using Unit Test or Web Test as suggested in this guidance above, you can go ahead and create you Load Test to performance test your web services.  &lt;table border="1" cellspacing="0" cellpadding="0" width="795"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="128"&gt; &lt;p&gt;Areas&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="627"&gt; &lt;p&gt;Description&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="128"&gt; &lt;p&gt;Configuration – Load Testing  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="627"&gt; &lt;p&gt;a) Ensure you have selected our custom solution configuration for Load Test i.e. Debug – Load Test  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-h0kKKRsH2Ao/TuPoxuI7SKI/AAAAAAAAGx0/OBWXW9TGF2Y/s1600-h/clip_image0014.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://lh6.ggpht.com/-reXLCysiK88/TuPozV4FIFI/AAAAAAAAGx8/k906e8mAYzE/clip_image001_thumb1.png?imgmax=800" width="397" height="261"&gt;&lt;/a&gt;  &lt;p&gt;b) As shown below it uses a compilation symbol &lt;b&gt;#WEBSERVICES_LOAD_TESTING&lt;/b&gt; that is used in our test methods to control the behavior.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-WaSIrHfU5OU/TuPo0OmyFaI/AAAAAAAAGyA/e-9_UkIVLiU/s1600-h/image172.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-zwHEmSkT8OY/TuPo1ARhipI/AAAAAAAAGyM/Xy7pOqqDq3Y/image_thumb88.png?imgmax=800" width="436" height="168"&gt;&lt;/a&gt;  &lt;p&gt;c) Inside your test methods, you will have code like this to control the behavior based on the solution configuration file that is selected&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-a6sVt-QtefA/TuPo1zFzMII/AAAAAAAAGyU/POn5Jl_3StM/s1600-h/image171.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-yzWJ8mQRK1g/TuPo3UXJMII/AAAAAAAAGyc/lQ5D1hodBNw/image_thumb87.png?imgmax=800" width="455" height="121"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;2.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="128"&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Creating &lt;b&gt;Load Test&lt;/b&gt; using Web Services &lt;b&gt;Unit Test or Web Test&lt;/b&gt; &lt;/i&gt; &lt;p&gt;&lt;i&gt;(Designed in above sections)&lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="627"&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Step 1. Add a new Load Test  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-ZetLPTI2rOc/TuPo4vjFMxI/AAAAAAAAGyk/EAdSz6vcsoA/s1600-h/image176.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-CuEmDdOBhak/TuPo6MIwl_I/AAAAAAAAGys/_Ii8pDKaBig/image_thumb90.png?imgmax=800" width="396" height="345"&gt;&lt;/a&gt;  &lt;p&gt;Step 2. Give a scenario name for your Load test  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-gi9gfnomgo4/TuPo7NqGCkI/AAAAAAAAGy0/LQp3jSx3DWk/s1600-h/image180.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-6-DrIk-z6vQ/TuPo8HnXktI/AAAAAAAAGy8/A58DJtkhQCE/image_thumb92.png?imgmax=800" width="405" height="261"&gt;&lt;/a&gt;  &lt;p&gt;Step 3. Specify your load pattern (Constant Load/ Step Load)  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-lbuQoveQge0/TuPo9Ier8iI/AAAAAAAAGzE/k_PbXqeOxC4/s1600-h/image185.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-3FdAxu8I7Hc/TuPo-F9JhbI/AAAAAAAAGzM/BsjVWQHri3g/image_thumb95.png?imgmax=800" width="418" height="274"&gt;&lt;/a&gt;  &lt;p&gt;Step 4. Choose an appropriate test mix  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-HmTcpSz2fHc/TuPo_CGtXCI/AAAAAAAAGzU/Ula_QFRg5as/s1600-h/image189.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-Zi5Q6sDTXKc/TuPpAYO5izI/AAAAAAAAGzc/l2f7ujhgG8I/image_thumb97.png?imgmax=800" width="457" height="295"&gt;&lt;/a&gt;  &lt;p&gt;Step 5.&lt;b&gt; &lt;/b&gt;&lt;i&gt;This is the most important step where you have an option to select Unit Test or Web Test to be added to your Load test depending on the kind of approach you had selected for your Web services automation above&lt;/i&gt;  &lt;p&gt;Press Add and select your &lt;b&gt;“Web Services Unit Test” OR “Web Services Web Tests” &lt;/b&gt;created in the sections above&lt;b&gt; &lt;/b&gt;that you want to performance test  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-R7ZjgMtiviQ/TuPpBTMuIII/AAAAAAAAGzk/1jv_g0ZCozE/s1600-h/image193.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-g9LHztzOtKM/TuPpC5kL3zI/AAAAAAAAGzs/XlRMQy_wkDs/image_thumb99.png?imgmax=800" width="460" height="327"&gt;&lt;/a&gt;  &lt;p&gt;Press OK and adjust Distribution of tests.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-6efIZmL3RsM/TuPpD7ObJBI/AAAAAAAAGz0/Bm-r23dHRrU/s1600-h/image200.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-jzTqzKB6jIA/TuPpE9-YPsI/AAAAAAAAGz8/qmg63DCKbtY/image_thumb102.png?imgmax=800" width="473" height="307"&gt;&lt;/a&gt;  &lt;p&gt;Step 6. Refer to below section for adding custom web services counters other than standard counters that you may want to monitor  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/--VIPmVvR5xo/TuPpFyoPkqI/AAAAAAAAG0E/Opnq0lBn7L8/s1600-h/image204.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-e9SaiQCC3QM/TuPpHEPx4VI/AAAAAAAAG0M/U_NLIf4SAjo/image_thumb104.png?imgmax=800" width="485" height="315"&gt;&lt;/a&gt;  &lt;p&gt;Step 7. Specify Load run settings  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-8F-FfYfwHF0/TuPpIAJ-XKI/AAAAAAAAG0U/JoEfaAcvVJk/s1600-h/image209.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-Tbxh9JTVqr4/TuPpJuPF9qI/AAAAAAAAG0c/b9Cujz9pj58/image_thumb107.png?imgmax=800" width="503" height="334"&gt;&lt;/a&gt;  &lt;p&gt;Step 8. You load test is created  &lt;p&gt;Our sample Unit Test and WebTest template project has this reusable &lt;b&gt;SampleLoadTest.loadtest &lt;/b&gt;sample load test for you to model your load tests around.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-EyxRGFe0uGs/TuPpKeFeM2I/AAAAAAAAG0k/M5Y3rqvFbgk/s1600-h/image213.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-sjnpKCg5QLo/TuPpMKpxxOI/AAAAAAAAG0s/JhUJXmirrQY/image_thumb109.png?imgmax=800" width="342" height="421"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;3.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="128"&gt; &lt;p&gt;Running Load Test and analyzing results&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="627"&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&amp;nbsp; &lt;p&gt;&lt;i&gt;For Web services Load testing, we recommend you adding following custom counters against the web services server (where the web services are hosted):&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-GNy2iDYPAsE/TuPpM2jlhWI/AAAAAAAAG00/NIVhrD5uIyg/s1600-h/clip_image001142.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[14]" border="0" alt="clip_image001[14]" src="http://lh6.ggpht.com/-NjOAlVfDJKg/TuPpN6h7vPI/AAAAAAAAG08/PVE6d_VBGxw/clip_image00114_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; ServiceModelEndPoint 3  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-AqZNskUbVjU/TuPpOuijwUI/AAAAAAAAG1E/9z23enp-IzM/s1600-h/clip_image001152.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[15]" border="0" alt="clip_image001[15]" src="http://lh3.ggpht.com/-JeNZVuFyfoI/TuPpUCqX3ZI/AAAAAAAAG1M/xXen5zF_dXI/clip_image00115_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; ServiceModelEndPoint 4  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-x-dE3t2zKQc/TuPpUjvhY-I/AAAAAAAAG1U/DuR0lIhuDHk/s1600-h/clip_image001162.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[16]" border="0" alt="clip_image001[16]" src="http://lh6.ggpht.com/-r8YU8YMuMJ4/TuPpV3djXkI/AAAAAAAAG1c/FrNKcTihlmM/clip_image00116_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; ServiceModelOperation  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-CaVDvW0VJGg/TuPpWi4YEBI/AAAAAAAAG1k/n2MW3_pFB-Q/s1600-h/clip_image001172.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[17]" border="0" alt="clip_image001[17]" src="http://lh6.ggpht.com/-tnq8GcLXFlM/TuPpXvNIXEI/AAAAAAAAG1s/_Ui4WT8_WT0/clip_image00117_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; ServiceModelServices  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Please follow &lt;/i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms404668(v=VS.100).aspx"&gt;&lt;i&gt;Adding custom counters set using Load Test Editor&lt;/i&gt;&lt;/a&gt;&lt;i&gt; for detailed steps.&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Step 1. Open you load test. Right click you counter set and add “&lt;/i&gt;Custom Counter Sets”  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Step 2. Right click and now click “Add Counters”&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Select Performance Category to include counters related to Web Services as shown below &lt;/i&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-eMqcsYFvOgY/TuPpYiPggkI/AAAAAAAAG10/u47Ju6r1Ams/s1600-h/image218.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-EtTZuzd-RKU/TuPpafcDeTI/AAAAAAAAG18/TFJe9HCzero/image_thumb112.png?imgmax=800" width="488" height="345"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Step 3. Repeat it for all the categories as shown below.&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-PI5ZM1pdCNE/TuPpb-oM2DI/AAAAAAAAG2E/3T_Z3XEdbxM/s1600-h/image222.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-4_1Pk0qL3kg/TuPpeMIcnpI/AAAAAAAAG2M/QAS9pNVGbHM/image_thumb114.png?imgmax=800" width="456" height="471"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;b&gt;Tip&lt;/b&gt;: You can enable performance counters for a WCF service through the app.config configuration file of the WCF service as follows:&lt;i&gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&amp;lt;configuration&amp;gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;system.serviceModel&amp;gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;diagnostics performanceCounters="All" /&amp;gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;/system.serviceModel&amp;gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&amp;lt;/configuration&amp;gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;b&gt;&lt;i&gt;Sample Load Test Summary Report&lt;/i&gt;&lt;/b&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-HAQPvrE4BV0/TuPpffupYXI/AAAAAAAAG2U/4No-uun8R5A/s1600-h/image226.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-o3zayTZ5ZKQ/TuPpgrsQHtI/AAAAAAAAG2c/jtD4NwLuksg/image_thumb116.png?imgmax=800" width="505" height="330"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;h3&gt;&lt;a name="_Toc284684681"&gt;&lt;/a&gt;&lt;a name="_Toc284684673"&gt;&lt;/a&gt;&lt;a name="_Web_Services_Test"&gt;&lt;/a&gt;&lt;/h3&gt; &lt;h3&gt;&amp;nbsp;&lt;/h3&gt; &lt;h3&gt;&amp;nbsp;&lt;/h3&gt; &lt;h3&gt;&lt;a name="_Toc311287837"&gt;Web Services Helper Documentation for Unit Test &amp;amp; Web Test Add-ins&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;This section provides documentation of the complete list of reusable helper functions (&lt;b&gt;WebServicesTesting.Automation.WebTest.Helper.dll&lt;/b&gt;) and web add-ins (&lt;b&gt;WebServicesTesting&lt;/b&gt;.&lt;b&gt;Automation.UnitTest.Helper.dll&lt;/b&gt;) for your reference and usage. We have shown few of these in sample walkthrough above to give you a glimpse of the same.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;table border="1" cellspacing="0" cellpadding="0" width="806"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;&lt;b&gt;Category&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;&lt;b&gt;Title&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;&lt;b&gt;Unit Method Signature &amp;amp; Example invoke call &lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;Web Custom Extension (Extraction &amp;amp; Validation Rules)&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Lookup Verification&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies the Scalar value or multiple scalar values of even different data types returned by services against expected results &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method will let you compare the scalar values of different types like &amp;lt;INT&amp;gt;, &amp;lt;STRING&amp;gt; etc. returned by the service method call converting them to &amp;lt;string&amp;gt;against the expected values &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;public void CompareStringArray(int condition, string query, string[] ArrgetAgeActual)  &lt;p&gt;Example:  &lt;p&gt;obj.CompareStringArray(2, query, ArrgetAgeActual);&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;For scalar value  &lt;p&gt;&lt;b&gt;&lt;u&gt;Extraction Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;ServiceResponseExtraction  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.XpathExpression  &lt;p&gt;2.ContextParam  &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;ServiceResponseValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.Expected  &lt;p&gt;2.ContextParam  &lt;p&gt;For multiple values  &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;DataSetValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.ConnString  &lt;p&gt;2.Query  &lt;p&gt;3.XPathExpression  &lt;p&gt;4.ContextParam  &lt;p&gt;The validation rule extracts the dictionary returned by web service from xml and compares with the expected dataset based on the query&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Lookup Verification&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies the values of &lt;i&gt;&amp;lt;DICTIONARY&amp;gt;&lt;/i&gt; data type returned by services against the expected results&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method will let you compare the &amp;lt;Dictionary&amp;gt; &amp;lt;key, value&amp;gt; values returned by service method call against the expected values &amp;lt;key, value&amp;gt;.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;public void CompareDictionaryWithExpectedArray(Dictionary&amp;lt;int, string&amp;gt; ActualDic, string[,] ArrgetAgeExpected)  &lt;p&gt;Example :  &lt;p&gt;obj.CompareDictionaryWithExpectedArray(col_Symbols, ArrgetAgeExpected);&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;DataSetValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.ConnString  &lt;p&gt;2.Query  &lt;p&gt;3.XPathExpression  &lt;p&gt;4.ContextParam  &lt;p&gt;The validation rule extracts the dictionary returned by webservice from xml and compares with the expected dataset based on the query&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Lookup Verification&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies the values of &lt;i&gt;&amp;lt;LIST&amp;gt;&lt;/i&gt; data type returned by services against the expected results&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method will let you compare the values of data type &amp;lt;LIST&amp;gt; returned by service method call against the expected values&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;public string[] CompareList(string query)  &lt;p&gt;Example:  &lt;p&gt;string[] ArrgetAgeExpected = obj.CompareList(query);&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;DataSetValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.ConnString  &lt;p&gt;2.Query  &lt;p&gt;3.XPathExpression  &lt;p&gt;4.ContextParam  &lt;p&gt;The validation rule extracts the List returned by webservice from xml and compares with the expected dataset based on the query&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Lookup Verification&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies the result set returned by services against expected results &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method will let you compare the result set returned by service method call against the expected result set&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Prototype&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;public void Verify_Dataset(string ConnString, string Query, DataSet dst)  &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Invocation&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;UnitTest help = new UnitTest();  &lt;p&gt;help.Verify_Dataset(conn, query, set);  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;DataSetValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.ConnString  &lt;p&gt;2.Query  &lt;p&gt;3.XPathExpression  &lt;p&gt;4.ContextParam  &lt;p&gt;The validation rule extracts the dataset returned by webservice from xml and compares with the expected dataset based on the query&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Lookup Verification&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies the row count of the values returned by Web Services against expected result&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method will let you validate the row count of the values/list/dataset returned by service method call against the expected row count&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Prototype&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;public void Verify_RowCountDataSet(int expected, int actual)  &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Invocation&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;UnitTest help = new UnitTest();  &lt;p&gt;help.Verify_RowCountDataSet(expected, actual);&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Extraction Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;RowCountExtraction  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.XpathExpression  &lt;p&gt;2.ContextParam  &lt;p&gt;This method extracts the row count and stores the value to Context Param specified by the user.  &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;RowValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.ConnString  &lt;p&gt;2.Query  &lt;p&gt;3.ContextParam  &lt;p&gt;4.ContextParam  &lt;p&gt;This method validates the value set to the context param and the one returned by the specified query&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Metadata Verification&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies the called web service method has schema as expected&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method validates the XML file to make sure it fits to your application's needs to prevent any exception in your code. To check whether the XML document conforms to an XSD Schema, the document must be validated against that XSD Schema&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Prototype&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;public bool Verify_Schema(string targetNameSpace, string xsdPath,string requestXml)  &lt;p&gt;&lt;b&gt;&lt;u&gt;Event Handler to raise error&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;private static void ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs arg)  &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Invocation&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;UnitTest help = new UnitTest();  &lt;p&gt;bool validation = help.Verify_Schema(targetNameSpace ,XsdPath,requestXml);&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;SchemaValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.targetNameSpace  &lt;p&gt;2. xsdPath&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Metadata Verification&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies that web service methods exist and their parameters definition (like input parameters, return type) against expected result&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method will let you smoke test / BVT if the expected list of Web Service methods exists and their definition like input parameters and return type matches.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Prototype&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;public void Verify_methodPrototype(object myObject, string Methodname, string paramlist, string returnTypelist)  &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Invocation&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;UnitTest help = new UnitTest();  &lt;p&gt;help.Verify_methodPrototype(obj, methodlist, paramlist, returnTypelist);&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Extraction Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;ParameterExtraction  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.XpathExpression  &lt;p&gt;2.ContextParam  &lt;p&gt;This method extracts the parameter passed to the request and set to the contextparam  &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;ParamValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.ParamValues  &lt;p&gt;2.ContextParam  &lt;p&gt;This method validates the value set to the context param and the Values passed to the ParamValues  &lt;p&gt;The above extraction &amp;amp; validation rule is used to validate the parameter passed  &lt;p&gt;The below extraction &amp;amp; validation rule is used to validate value returned by the webservice  &lt;p&gt;&lt;b&gt;&lt;u&gt;Extraction Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;ServiceResponseExtraction  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.XpathExpression  &lt;p&gt;2.ContextParam  &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;ServiceResponseValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.Expected  &lt;p&gt;2.ContextParam&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Transactional Verification&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies that called web service method creates the output file as expected&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method verifies the output file (e.g. CSV, XML, TXT) has got created by the web service method call&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Prototype&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;public void Verify_FileCreation(string FilePath)  &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Invocation&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;UnitTest help = new UnitTest();  &lt;p&gt;help.Verify_FileCreation("D:\\employees.xml");&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;FileCreationValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.FilePath&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Transactional Verification&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies that web service &lt;i&gt;INSERTS/CREATES&lt;/i&gt; a new record into the database&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method verifies the web service call results into new record insertion in a given database&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Prototype&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;public void Verify_DbInsert(string ConnString, string Query, string expected)  &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Invocation&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;UnitTest help = new UnitTest();  &lt;p&gt;help.Verify_DbInsert(conn, query, expected);&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Extraction Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;ParameterExtraction  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.XpathExpression  &lt;p&gt;2.ContextParam  &lt;p&gt;This method extracts the parameter passed to the request and set to the contextparam  &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;DbInsertValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.ConnString  &lt;p&gt;2.ContextParam  &lt;p&gt;3.Query  &lt;p&gt;4.ContextParam  &lt;p&gt;This method validates the contextparam and the values returned by the query&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Transactional Verification&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies that web service &lt;i&gt;UPDATES existing&lt;/i&gt; records into the database&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method verifies the web service call results into update of existing record(s) in the given database&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Prototype&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;public void Verify_DBUpdate(string ConnString, string Query, string expected)  &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Invocation&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;UnitTest help = new UnitTest();  &lt;p&gt;help.Verify_DBUpdate(conn, query, expected);&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Extraction Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;ParameterExtraction  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.XpathExpression  &lt;p&gt;2.ContextParam  &lt;p&gt;This method extracts the parameter passed to the request and set to the contextparam  &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;UpdateDbValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.ConnString  &lt;p&gt;2.ContextParam  &lt;p&gt;3.Query  &lt;p&gt;4.ContextParam  &lt;p&gt;This method validates the contextparam and the values returned by the query&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Transactional Verification&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies that web service DELETES records into a database&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method verifies the web service call results into deletion of existing record(s) from a given database&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Prototype&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;public void Verify_DBDelete(string ConnString, string Query)  &lt;p&gt;&lt;b&gt;&lt;u&gt;Method Invocation&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;UnitTest help = new UnitTest();  &lt;p&gt;help.Verify_DBDelete(conn, query);&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;DeleteDbValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.ConnString  &lt;p&gt;2.Query  &lt;p&gt;This method verifies the rows returned by query is 0&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Workflow service&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verify that web service executed the workflow and end result is as expection&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;_________For this one we just need a test method in our test file instead of a separate helper method____&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;Sample code to verify the result returned by the workflow  &lt;p&gt;IDictionary&amp;lt;string, object&amp;gt; _d = new Dictionary&amp;lt;string, object&amp;gt;() { { "userArgument", arg } };  &lt;p&gt;_d = WorkflowInvoker.Invoke(new Workflow1(), _d);  &lt;p&gt;Int32 outPut = (Int32)_d["OutputValue"];  &lt;p&gt;Assert.AreEqual(expected, outPut);  &lt;p&gt;output can be validated with expected for its correctness&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;WorkFlow cannot be invoked.  &lt;p&gt;We can invoke the web service to verify the result returned by service method against the expected result.  &lt;p&gt;&lt;b&gt;&lt;u&gt;Extraction Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;ServiceResponseExtraction  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.XpathExpression  &lt;p&gt;2.ContextParam  &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;ServiceResponseValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;1.Expected  &lt;p&gt;2.ContextParam&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Authentication&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies that user credentials &amp;amp; certificate are validated against the server to authenticate the user trying to access the web service&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method verifies the user credentials and certificate to ensure that he is authenticated to get the results from the web service&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;var ServiceendPoint = new EndpointAddress(new Uri("http://localhost:91/Service1.svc"), EndpointIdentity.CreateDnsIdentity("MyWebSite"));  &lt;p&gt;var binding = new WSHttpBinding();  &lt;p&gt;binding.Security.Mode = SecurityMode.Message;  &lt;p&gt;binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;  &lt;p&gt;var result = new Auth_Service.Service1Client(binding, ServiceendPoint);  &lt;p&gt;try  &lt;p&gt;{  &lt;p&gt;result.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;  &lt;p&gt;result.ClientCredentials.UserName.UserName = auth_username;  &lt;p&gt;result.ClientCredentials.UserName.Password = auth_passwd;  &lt;p&gt;time = result.GetServertime();  &lt;p&gt;}&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Encryption&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies that web service is encrypting the message/transport layer when returning data&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method will verify that web service is encrypting and decrypting the data as required by business.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;Configuration appConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);  &lt;p&gt;ServiceModelSectionGroup serviceModel = ServiceModelSectionGroup.GetSectionGroup(appConfig);  &lt;p&gt;Console.WriteLine("Configuration Name : Address : Binding : Contract");  &lt;p&gt;foreach (ChannelEndpointElement endpoint in serviceModel.Client.Endpoints)  &lt;p&gt;{  &lt;p&gt;if (endpoint.Contract == "Auth_Service.IService1")  &lt;p&gt;{  &lt;p&gt;binding_used = endpoint.Binding;  &lt;p&gt;break;  &lt;p&gt;}  &lt;p&gt;else  &lt;p&gt;{  &lt;p&gt;}  &lt;p&gt;}  &lt;p&gt;Auth_Service.Service1Client result = new Auth_Service.Service1Client();  &lt;p&gt;result.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;  &lt;p&gt;result.ClientCredentials.UserName.UserName = auth_username;  &lt;p&gt;result.ClientCredentials.UserName.Password = auth_passwd;  &lt;p&gt;string time = result.GetServertime();  &lt;p&gt;TestContext.WriteLine("Bindings used by this contract is " + binding_used);&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Caching&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies that data returned by called web service is returned from cache&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;_________For this one we just need a test method in our test file instead of a separate helper method____&lt;br&gt;Caching is frequently used as an optimization in distributed systems. It can be used to avoid re-doing computations or complex database access when the results remain valid for an extended period of time. In this case, subsequent requests for the same information can be served with the cached version rather than repeat the processing with the associated overheads. &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;string url = "http://localhost/Cache/Service1.svc/xml/12";  &lt;p&gt;Uri uri = new Uri(url);  &lt;p&gt;WebRequest request = (HttpWebRequest)WebRequest.Create(uri);  &lt;p&gt;request.Method = "GET";  &lt;p&gt;HttpWebResponse response = (HttpWebResponse)request.GetResponse();  &lt;p&gt;Stream receiveStream = response.GetResponseStream();  &lt;p&gt;StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);  &lt;p&gt;string firstResponse = readStream.ReadLine();  &lt;p&gt;Above code snippet shows to retrieve server response.  &lt;p&gt;To test caching two request should be made befor cache expires and should be validated.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Extraction Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;CacheExtraction  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.XpathExpression  &lt;p&gt;2.ContextParam  &lt;p&gt;3.Delay  &lt;p&gt;To test caching two request should be made before caching expire and one after caching expire.  &lt;p&gt;Parameter Delay has to be passed for the second request  &lt;p&gt;And plugin &lt;b&gt;DelayPlugin &lt;/b&gt;should be associated with the second service  &lt;p&gt;CacheOutcomePlugin  &lt;p&gt;&lt;b&gt;&lt;u&gt;ContextParameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.ContextParam1  &lt;p&gt;2.ContextParam2  &lt;p&gt;3.ContextParam3&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Caching&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies that data returned by called web service is returned from database when cache is expired&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;_________For this one we just need a test method in our test file instead of a separate helper method____&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;string url = "http://localhost/Cache/Service1.svc/xml/12";  &lt;p&gt;Uri uri = new Uri(url);  &lt;p&gt;WebRequest request = (HttpWebRequest)WebRequest.Create(uri);  &lt;p&gt;request.Method = "GET";  &lt;p&gt;HttpWebResponse response = (HttpWebResponse)request.GetResponse();  &lt;p&gt;Stream receiveStream = response.GetResponseStream();  &lt;p&gt;StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);  &lt;p&gt;string firstResponse = readStream.ReadLine();  &lt;p&gt;Above code snippet shows to retrieve server response.  &lt;p&gt;To test caching two request should be made before caching expire and one after caching expire and should be validated.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Non-XML Data&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies that called web service method sends/returns non-xml data (like blob, image) as expected&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method will verify that web service method is storing or retrieving the non XML data like blob from file system or database&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;Refer our reusable  &lt;p&gt;[TestMethod]  &lt;p&gt;public void VerifyNonXMLData()&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Asynchronous messaging&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies that called web service method if implemented as asynchronous then returns the data as expected at a later point in time&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method verifies the asynchronous behavior of web service method as expected and implemented.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;Refer our reusable  &lt;p&gt;[TestMethod]  &lt;p&gt;public void VerifyAsync_Response()&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Exception and Error handling&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verify that service returns appropriate error message when there is a fault exception like underlying database connectivity issue to ensure exception and error handling&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method will verify that web service method that is called handles the exceptions like timeout, connectivity/networking issue as expected&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;&amp;lt;serviceDebug includeExceptionDetailInFaults="True" /&amp;gt;  &lt;p&gt;Set the IncludeExceptionDetailInFaults property to true to instruct to return managed exception information to the client in SOAP faults to ease debugging  &lt;p&gt;try  &lt;p&gt;{  &lt;p&gt;WCFServiceRef.Service1Client obj = new WCFServiceRef.Service1Client();  &lt;p&gt;obj.Display();  &lt;p&gt;}  &lt;p&gt;catch (FaultException e)  &lt;p&gt;{  &lt;p&gt;string str = e.Message.ToString();  &lt;p&gt;TestContext.WriteLine(str);  &lt;p&gt;}&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Extraction Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;ExceptionExtraction  &lt;p&gt;&lt;b&gt;&lt;u&gt;ContextParameter&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.contextParam  &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;ExceptionValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;ContextParameter&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.contextParam  &lt;p&gt;2.ErrorMsg  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;ExceptionPlugin&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;ContextParameter&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.contextParam  &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt; &lt;p&gt;Plugin is used to pass/fail the test case  &lt;p&gt;contextParam name provided in extraction/validation/plugin should be same&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;Merge&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;Verifies the result obtained from multiple web services calls by merging them matches against consolidated expected output&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;This method verifies when similar result is obtained from multiple web services and then need to be validated against single expected result set&lt;br&gt;Think of a scenario where you are getting similar result from various source - each a different web service call. The tester wants to validate the consolidated output from these services by comparing it against expected values&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;WCFServiceRef.Service1Client obj = new WCFServiceRef.Service1Client();  &lt;p&gt;string expected = "5 Test";  &lt;p&gt;string exmaple1 = obj.mergeExample().ToString();  &lt;p&gt;string example2 = obj.mergeExample1();  &lt;p&gt;string actual = exmaple1 + " "+ example2;  &lt;p&gt;Assert.AreEqual(expected, actual);&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;Extraction Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;ServiceResponseExtraction  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1.XpathExpression  &lt;p&gt;2.ContextParam  &lt;p&gt;The extraction rule is used with both the request to extract the response from the server  &lt;p&gt;Associate the validation rule with the 2&lt;sup&gt;nd&lt;/sup&gt; request  &lt;p&gt;&lt;b&gt;&lt;u&gt;Validation Rule&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;MergeTwoServcResponseValidation  &lt;p&gt;&lt;b&gt;&lt;u&gt;ContextParameter&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;u&gt;Context Parameters&lt;/u&gt;&lt;/b&gt;  &lt;p&gt;1. ContextParam1  &lt;p&gt;2.ContextParam2  &lt;p&gt;3.expected&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="109"&gt; &lt;p&gt;DTO based Validations&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="116"&gt; &lt;p&gt;DTO (Data Transfer Objects) based validation is a generic way to validate web services response of any data type against expected result by converting them into generics objects&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="140"&gt; &lt;p&gt;It works by converting the service response (whether abstract or primitive data types) and expected results into standard generic objects which then are finally converted into XML for comparison with the help of our reusable library methods as described below in the example&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="199"&gt; &lt;p&gt;public List&amp;lt;T&amp;gt; DTO_PopulateObject&amp;lt;T&amp;gt;(object DTOObject, object myObj)  &lt;p&gt;public List&amp;lt;T&amp;gt; DTO_PopulateDBResults&amp;lt;T&amp;gt;(DataTable dt) where T : class  &lt;p&gt;public bool DTO_XmlComparison(Object ExpectedDTOList, Object ActualDTOList, Type ObjectType)  &lt;p&gt;Examples:  &lt;p&gt;ExpectedStudentDTOList = helper.DTO_PopulateDBResults&amp;lt;Student&amp;gt;(dt);  &lt;p&gt;object ActualStudentDTOList = helper.DTO_PopulateObject&amp;lt;Student&amp;gt;(myObj, s1);  &lt;p&gt;bool result = helper.DTO_XmlComparison(ExpectedStudentDTOList, ActualStudentDTOList, typeof(List&amp;lt;Student&amp;gt;));&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="240"&gt; &lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;h3&gt;&lt;a name="_Toc311287838"&gt;Tools to speed up Web Services Testing&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;a name="_Toc311287839"&gt;&lt;font size="4" face="Arial"&gt;WCF Load Test&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;This tool helps us in accelerating the generation of Skeleton unit test which can be used for load test of Application.  &lt;p&gt;This tool takes the WCF or Fiddler2 message log file and a WCF client proxy, or a WCF interface contract, and generates a unit test that replays the same sequence of calls found in the message log file for WCF and ASMX services. The code generated is easily modifiable so that data variation can be introduced for the purpose of doing performance testing.  &lt;p&gt;The tool will also integrate with Visual Studio 2005/2008 Team Edition for Software Testers and Visual Studio 2010 Ultimate and installs a wizard for creating the message log and processing it from within Visual Studio.  &lt;p&gt;Tool can be downloaded from  &lt;p&gt;&lt;a href="http://wcfloadtest.codeplex.com/releases/view/51762"&gt;http://wcfloadtest.codeplex.com/releases/view/51762&lt;/a&gt;  &lt;p&gt;This tool is an add-in to VS and after running the .msi, open Visual studio and from the test menu, create a new test .It contains a template for the WCF Test.  &lt;p&gt;1. Create a new Test Project and select the WCF test from the templates available for the test.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-Mp__dKiO9tk/TuPpiTftPhI/AAAAAAAAG2k/cFz6zWv_B2Q/s1600-h/image244.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-g-Vp4UFK8Ns/TuPpktrYDOI/AAAAAAAAG2s/7a-SQIQVaHw/image_thumb125.png?imgmax=800" width="456" height="477"&gt;&lt;/a&gt;  &lt;p&gt;2. Click on Next  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-VcuVJNK7POA/TuPplu-4u_I/AAAAAAAAG20/MUCLbMUTheQ/s1600-h/image248.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-h05xMqpgpgA/TuPpneyvTaI/AAAAAAAAG28/Y70wlE0QJ_s/image_thumb126.png?imgmax=800" width="544" height="376"&gt;&lt;/a&gt;  &lt;p&gt;3. Give the path of the executable, it’s your application exe files, in this case it’s the sample App application which we are using for the generation of unit test.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-NIGEJpEmqtc/TuPppBN4yCI/AAAAAAAAG3E/uJRsedEQsKA/s1600-h/image252.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-N8_zePQIJqs/TuPpsDC7r4I/AAAAAAAAG3M/4tkaEki9-Dc/image_thumb127.png?imgmax=800" width="560" height="365"&gt;&lt;/a&gt;  &lt;p&gt;4. Click on Run, will run the application and load the data as expected.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-e4wyLyH0PfY/TuPptpIiABI/AAAAAAAAG3U/64Eqc4deRYo/s1600-h/image256.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-Juf22xbq_lQ/TuPpvI5TzTI/AAAAAAAAG3c/o_mIIlMFZz0/image_thumb129.png?imgmax=800" width="571" height="309"&gt;&lt;/a&gt;  &lt;p&gt;5. Test the application; change the values in the List of Students to fire the service with different set of Data. Once this is done, close the application.  &lt;p&gt;And click on Next on the ‘New WCF Service Test Generator wizard’  &lt;p&gt;6. There will be screen which depicts what all methods were invoked when we navigated the application with different set of inputs.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-sDdESIP8GMg/TuPpwnBCuHI/AAAAAAAAG3k/kMhDEyxIX8I/s1600-h/image260.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-epDiOFxZ9JI/TuPpyb7uJMI/AAAAAAAAG3s/lW9L85jvJEE/image_thumb131.png?imgmax=800" width="584" height="393"&gt;&lt;/a&gt;  &lt;p&gt;7. Click Next, Now we need to add the Dll/exe which define the contracts which are implemented for the WCF service which we have consumed.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-x8wjDPQXHZY/TuPpzqYSUBI/AAAAAAAAG30/3m3o__mcxr8/s1600-h/image264.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-IxWfX_wkCLg/TuPp1XgQm-I/AAAAAAAAG38/BHtRsEICgBk/image_thumb133.png?imgmax=800" width="597" height="380"&gt;&lt;/a&gt;  &lt;p&gt;8. Click on finish and the Unit tests are created for actions which we have performed on the Application.  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-dBPPde0lGeg/TuPp2WqQNTI/AAAAAAAAG4E/L7_-TjLsxTk/s1600-h/image269.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-qgNa3zCuuXU/TuPp3R6ErVI/AAAAAAAAG4M/BtzE_5kXtuA/image_thumb136.png?imgmax=800" width="594" height="311"&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp; &lt;h4&gt;&lt;a name="_Toc311287840"&gt;&lt;font size="4" face="Arial"&gt;Web Test Plug In for Silverlight + RIA based services&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;When testing Silver Light applications, we frequently run into dealing with non-Html content types. This is because most of the Silver Light applications use WCF RIA web services. Typically, this will be a binary format called MSBin1. Also, Silver Light applications may use other content types such as JSON, SOAP and REST to communicate with server. In general there is significantly greater use of Web Services and JSON in today's web applications.  &lt;p&gt;The &lt;a href="http://teamtestplugins.codeplex.com/releases/view/43166"&gt;Web Test Plugins for Web Service Messages&lt;/a&gt; leverage these extensibility points to provide the following functionality for all these content types:  &lt;p&gt;1. Select the Web Service plugin to enable Web Service message plugins before recorder shows up when we create a new web test project.  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-RQZJUMtwC50/TuPp4nCz2uI/AAAAAAAAG4U/N8lwFyGLdAI/s1600-h/image274.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-I7m1BygYcTw/TuPp6FyiL7I/AAAAAAAAG4c/VvAGcHK2qW8/image_thumb139.png?imgmax=800" width="592" height="212"&gt;&lt;/a&gt;  &lt;p&gt;2. After Recording is completed it adds a reference to the runtime assembly to project, and adds the web service plugin to the Web Test  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-ZLXU05PQL2g/TuPp67XDQuI/AAAAAAAAG4k/e9lD8wgfoq4/s1600-h/image278.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-4Yea8BmhWCQ/TuPp7_9kHKI/AAAAAAAAG4s/1GFHBUIw0pA/image_thumb141.png?imgmax=800" width="364" height="228"&gt;&lt;/a&gt;  &lt;p&gt;3. In recording result we can see a new tab named as “Web Service”  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-la1M4SrGqGo/TuPp8h8bWII/AAAAAAAAG40/rOmazrH60B4/s1600-h/image282.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-6MRd2Ot4kyY/TuPp9tID87I/AAAAAAAAG48/0lCXO4rOkTY/image_thumb143.png?imgmax=800" width="522" height="110"&gt;&lt;/a&gt;  &lt;p&gt;4. Right click on the selected node, and select “Add Extraction Rule” or “Add Validation Rule” from the context menu.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-21ezBokDJOY/TuPqGxbr-CI/AAAAAAAAG5E/ATVfe1m8Xvg/s1600-h/image286.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-2bl3CSW82ws/TuPqHnjySOI/AAAAAAAAG5M/uCIGLSsraX8/image_thumb145.png?imgmax=800" width="532" height="202"&gt;&lt;/a&gt;  &lt;p&gt;Reference- &amp;lt;&lt;a href="http://blogs.msdn.com/b/mahipalkante/archive/2010/04/07/web-test-plugins-for-web-service-messages.aspx"&gt;http://blogs.msdn.com/b/mahipalkante/archive/2010/04/07/web-test-plugins-for-web-service-messages.aspx&lt;/a&gt;&amp;gt;  &lt;p&gt;&amp;nbsp; &lt;h3&gt;&lt;a name="_Toc311287841"&gt;Web Services Automation Benefits&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;· Increase the quality of the application and find issues/bugs quicker and easily by validating web services for functionality without relying or testing the UI layer too much which is many times slower.  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;· Many times when UI is under development or for V1.0 projects where UI is changing a lot often, UI automation doesn’t give you’re the ROI in short term and Web Services automation can help you quickly validate the functionality and business layer.  &lt;p&gt;· The effort and investment on automating Web Services for functionality will also pay off later to quickly build you performance test suite with lesser effort and reuse.  &lt;p&gt;· This will also help to scale up when doing performance testing to ensure that web services behave as per SLA and as-expected when put under lot of stress and load.  &lt;p&gt;· As a performance engineer, you will be able to do effective performance (load/stress) testing of web services along with validating their behaviour.  &lt;p&gt;· As developer/consultant, you will be able to use web services automation as part of continuous Integration to improve the build and code quality.  &lt;p&gt;· As a support engineer, you can also run automation tests quickly to find the culprit such an unintentional regression impact and that will help in debugging and troubleshooting critical failures.  &lt;p&gt;&lt;a name="_Toc284684684"&gt;&lt;/a&gt; &lt;h3&gt;&lt;a name="_Toc284684659"&gt;&lt;/a&gt;&lt;a name="_Toc311287842"&gt;Appendix&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;&lt;font color="#000000" size="4" face="Arial"&gt;i. Getting Started with VS 2010 Unit Test &amp;amp; Web Test&lt;/font&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;h4&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms182532.aspx"&gt;&lt;font size="3" face="Arial"&gt;Walkthrough: Creating and Running Unit Tests&lt;/font&gt;&lt;/a&gt;&lt;a name="_Toc311287844"&gt;&lt;/a&gt;&lt;/h4&gt; &lt;h4&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa337591.aspx"&gt;&lt;font size="3" face="Arial"&gt;Web Performance Test Walkthroughs&lt;/font&gt;&lt;/a&gt;&lt;a name="_Toc311287845"&gt;&lt;/a&gt;&lt;/h4&gt; &lt;h4&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc700338.aspx"&gt;&lt;font size="3" face="Arial"&gt;Introduction to WCF Testing&lt;/font&gt;&lt;/a&gt;&lt;a name="_Toc311287846"&gt;&lt;/a&gt;&lt;/h4&gt;&lt;/blockquote&gt; &lt;h4&gt;&lt;a name="_Toc311287847"&gt;&lt;/a&gt;&lt;a name="_Deploying_Sample_Web"&gt;&lt;/a&gt;&lt;font color="#000000" size="4" face="Arial"&gt;ii. Deploying Sample Web Services Application&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;Please find below the steps to get started with our sample web services  &lt;h5&gt;&lt;a name="_Toc311287848"&gt;Step 1: Deploy sample DB&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;From our sample solution, run &lt;b&gt;Create_Sample_DB.sql&lt;/b&gt; which will create the Database and Tables required for our sample app.  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-BHuJVVubESU/TuPqJoKxlwI/AAAAAAAAG5U/pbXgQ-ckWmA/s1600-h/image290.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-ymBiAAvAk_4/TuPqLCJlnsI/AAAAAAAAG5c/-OgEnamvPy8/image_thumb147.png?imgmax=800" width="491" height="329"&gt;&lt;/a&gt;  &lt;h5&gt;&lt;a name="_Toc311287849"&gt;Step 2. Deploy our services&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;&lt;b&gt;a) &lt;/b&gt;&lt;b&gt;Sample WCF Service – &lt;/b&gt; &lt;p&gt;This project contains the WCF services will be consumed by &lt;b&gt;Sample_APP_UI&lt;/b&gt;. It contains the contract as well as the implementation of the contracts. This project also uses the LinQ feature for integration with the database.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-sXLumGMJOiQ/TuPqLuPuo2I/AAAAAAAAG5k/QyDul6SWEe4/s1600-h/image294.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-tyDP49AQUqE/TuPqNVRHbII/AAAAAAAAG5s/iygqiOtuCkM/image_thumb149.png?imgmax=800" width="327" height="447"&gt;&lt;/a&gt;  &lt;p&gt;Below is sample step to deploy services on your machine  &lt;p&gt;i) Launch solution and publish “&lt;b&gt;WcfService&lt;/b&gt;” project to FileSystem  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-7agW_eWfJpU/TuPqOdwazQI/AAAAAAAAG50/rm-5b_x9ytE/s1600-h/image298.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-sVk-HD-PEEQ/TuPqQreXQcI/AAAAAAAAG58/GaQyy4WXzgY/image_thumb151.png?imgmax=800" width="396" height="388"&gt;&lt;/a&gt;&amp;nbsp; &lt;p&gt;ii) Add an application to your IIS and provide the File system directory and App pool details  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-BVh3GVM5DFc/TuPqRp2PAZI/AAAAAAAAG6E/yButFtPhQG8/s1600-h/image302.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-Q2A_Q496Zr0/TuPqSuuB65I/AAAAAAAAG6M/qSvPlfQnfFY/image_thumb153.png?imgmax=800" width="409" height="296"&gt;&lt;/a&gt;&amp;nbsp; &lt;p&gt;iii) Browse and test your services in browser or using WCFTestClient  &lt;p&gt;&lt;b&gt;&lt;i&gt;Browser&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: From IIS, select your application and press Browse&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-NxIa1yNdu4U/TuPqUEP3mYI/AAAAAAAAG6U/yP8K8XgNcQ8/s1600-h/image306.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-Z0GxVVc24YU/TuPqVz7vjxI/AAAAAAAAG6c/6hFRDy-Kb8s/image_thumb155.png?imgmax=800" width="430" height="461"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;i&gt;WCFTestClient&lt;/i&gt;&lt;/b&gt;&lt;i&gt;:&lt;/i&gt;  &lt;p&gt;- &lt;i&gt;Launch VS Command Prompt and type WCFTESTCLIENT&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-J7qh4l8_zOg/TuPqW-gAZDI/AAAAAAAAG6k/lIUlK4GsYDI/s1600-h/image310.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-hxwuyno6-CE/TuPqX0XBKTI/AAAAAAAAG6s/IeXnNDIp8qA/image_thumb157.png?imgmax=800" width="485" height="108"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;- &lt;i&gt;Add URL of your web service &lt;/i&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-0XrxHC5n9UQ/TuPqZKqECaI/AAAAAAAAG60/FK6QGP5TBTw/s1600-h/image314.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-px_P17lulc8/TuPqaYaGooI/AAAAAAAAG68/vFKjzXNk9m4/image_thumb159.png?imgmax=800" width="539" height="283"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;- &lt;i&gt;Click on any test method, provide request parameter and invoke&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-7owuLg4U5LI/TuPqbg2uWHI/AAAAAAAAG7E/foyS3PvL-PE/s1600-h/image318.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-izBoc3IsJto/TuPqc9BqACI/AAAAAAAAG7M/ne6WgmStiNY/image_thumb161.png?imgmax=800" width="545" height="263"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;b&gt;b) &lt;/b&gt;&lt;b&gt;Sample ASMX Web Services&lt;/b&gt;  &lt;p&gt;This project contains the services which are built on ASMX types. These services are also consumed by the &lt;i&gt;Sample_App_UI.&lt;/i&gt;&lt;b&gt;&lt;/b&gt;  &lt;p&gt;For deployment follow the steps given in above step (a).  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-CYyyphTL7Ck/TuPqdiJb0WI/AAAAAAAAG7U/s7ukmaPLIa0/s1600-h/image322.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-uWpvFdp1CpM/TuPqfGPSiNI/AAAAAAAAG7c/bxOEgP1UaBw/image_thumb163.png?imgmax=800" width="385" height="346"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Note: You can skip this as well if your scope doesn’t include testing ASMX based services&lt;/i&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;c) &lt;/b&gt;&lt;b&gt;Sample Windows Workflow Foundation Services&lt;/b&gt;  &lt;p&gt;This project contains the sample WCF service which is consumed by the workflow application.  &lt;p&gt;For deployment follow the steps given in above step (a).  &lt;p&gt;&lt;i&gt;Note: You can skip this as well if your scope doesn’t include testing Workflow based services&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-wVFcrcCVkSI/TuPqfynwXQI/AAAAAAAAG7k/jRHWCm1_RbM/s1600-h/image326.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-AIYLfR1aTEY/TuPqhGWjZkI/AAAAAAAAG7s/uF0NfU2HLGQ/image_thumb165.png?imgmax=800" width="261" height="267"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;d) &lt;/b&gt;&lt;b&gt;Sample Authentication Project&lt;/b&gt;  &lt;p&gt;This project contains the WCF service which entails the authenticate service. We have used the “&lt;i&gt;UserNamePasswordValidator&lt;/i&gt;” validate method for the verification of the client credentials to authenticate the client.  &lt;p&gt;The main intent is to check the authentication of the client, so this service has 1 contract implemented “GetServertime” which returns the current time at the server.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-EfS7fVLZ0yo/TuPqh9_n_GI/AAAAAAAAG70/Sbb9BuAeC7Y/s1600-h/image333.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-_7eeGgLY-HY/TuPqjSF0o5I/AAAAAAAAG78/QqjJygiFEzM/image_thumb168.png?imgmax=800" width="250" height="265"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Note: You can skip this as well if your scope doesn’t include testing Authentication of your services&lt;/i&gt;  &lt;p&gt;&lt;b&gt;e) &lt;/b&gt;&lt;b&gt;Sample Non-XML Data Project&lt;/b&gt;  &lt;p&gt;This project contains the WCF service which is required for returning the non xml data from the service. For this case we are using the service to return the image file using the stream.  &lt;p&gt;There are two response from the service implemented under this project.  &lt;p&gt;- Buffered response  &lt;p&gt;- Streamed response  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-s5wAYRQmW3o/TuPqkNeX_6I/AAAAAAAAG8E/2A1YTOmMy4Q/s1600-h/image337.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-nFBzgEKdFNw/TuPqljHEsLI/AAAAAAAAG8M/26-HM6hdJHc/image_thumb170.png?imgmax=800" width="394" height="296"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Note: You can skip this as well if your scope doesn’t include testing of Non-XML based response from web services&lt;/i&gt;  &lt;p&gt;&lt;b&gt;f) &lt;/b&gt;&lt;b&gt;Sample Web Services Caching Project&lt;/b&gt;  &lt;p&gt;This project contains a WCF service which contains the service representing the cache behaviour of the WCF service. For this project we have leveraged the Asp.Net cache in the WCF. The response is cached for 60 seconds if the request URL doesn’t changes. On changing the parameter to the request URL or elapse of 60 seconds the call again to this service returns the fresh response from the service.  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-q8-PGAXoRb8/TuPqmZ4QU7I/AAAAAAAAG8U/Vknl_Y5WAao/s1600-h/image341.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-4VQKXQT29ko/TuPqn6xn-5I/AAAAAAAAG8c/DDHu2JVIR7o/image_thumb172.png?imgmax=800" width="326" height="308"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Note: You &lt;/i&gt;&lt;i&gt;can skip this as well if your web services don’t use caching&lt;/i&gt;  &lt;p&gt;&lt;b&gt;g) &lt;/b&gt;&lt;b&gt;Sample Asynchronous Web Services Project &lt;/b&gt; &lt;p&gt;This project shows another feature of the WCF asynchronous call where in client sends a request to the server and continues with the regular task and on completion of the service i.e. response comes from server the required action is performed using the response received.  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-mlnkwtS1l6c/TuPqopOVhNI/AAAAAAAAG8k/sllzFwNEBt0/s1600-h/image345.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-4vM7SR-5AkM/TuPqqGAwmlI/AAAAAAAAG8s/H91ocePj7nA/image_thumb174.png?imgmax=800" width="325" height="323"&gt;&lt;/a&gt;  &lt;p&gt;For this example we have used client making the &lt;i&gt;Asynchronous &lt;/i&gt;call using the call-back mechanism. This project contains the contract as well as the Windows client which uses the service return.  &lt;p&gt;&lt;i&gt;Note: You can skip this as well if your web services don’t use Asynchronous calls&lt;/i&gt;  &lt;h5&gt;&lt;a name="_Toc311287850"&gt;Step 3. Run Sample Client apps&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;a) &lt;/b&gt;&lt;b&gt;Sample UI application&lt;/b&gt;  &lt;p&gt;This is the main project in the solution which consumes different services WCF and ASMX. This project is a sample app to demonstrate the services when consumed from UI and their return  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-Cqz_5jAGjOE/TuPqq0wQIhI/AAAAAAAAG80/JljjQSjBlEI/s1600-h/image349.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-fH-46VgYyO8/TuPqsqSRkYI/AAAAAAAAG88/n3rtEuqAXG0/image_thumb176.png?imgmax=800" width="383" height="345"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Note: Please update the service reference to point to the URL of the our sample web services (WCF and ASMX) as shown below by using “Configure service reference”&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-fkY7vF3vU50/TuPqt5hF2_I/AAAAAAAAG9E/DLShOVr1zak/s1600-h/image353.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-_cMMAAon09o/TuPqvDCipDI/AAAAAAAAG9M/Pf0Vp8fv7yg/image_thumb178.png?imgmax=800" width="443" height="304"&gt;&lt;/a&gt;  &lt;p&gt;You can now run sample UI app that consumes WCF and ASMX based services.  &lt;p&gt;&lt;b&gt;b) &lt;/b&gt;&lt;b&gt;Sample Authentication Console Application&lt;/b&gt;  &lt;p&gt;This project in the solution contains the client which will test service, and provide the valid credentials so that the service returns the valid return.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-5qAMhpAdrv4/TuPqv1Pl9KI/AAAAAAAAG9U/fOHVnYPHcVs/s1600-h/image357.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-kQ8ReFWnr_8/TuPqxK2SfQI/AAAAAAAAG9c/9X16IW5YEmg/image_thumb180.png?imgmax=800" width="255" height="182"&gt;&lt;/a&gt;  &lt;p&gt;This is a console based application which hosts the Auth_Service and send the valid credentials to test it.  &lt;p&gt;&lt;b&gt;c) &lt;/b&gt;&lt;b&gt;Sample Workflow Console Application&lt;/b&gt;  &lt;p&gt;This is a Workflow project which uses the WCF services with in the workflow, and executes the rest of action in the workflow.  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-seoS790L3-g/TuPqx7Io2cI/AAAAAAAAG9k/ifNROpMzTZ8/s1600-h/image361.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-mMq2CngGZG8/TuPqzHMdXhI/AAAAAAAAG9s/bX5rTe77bg8/image_thumb182.png?imgmax=800" width="300" height="217"&gt;&lt;/a&gt;  &lt;p&gt;This project is just a sample to be demonstrated on how the services are integrated with the WF app.  &lt;p&gt;&amp;nbsp; &lt;h4&gt;&lt;a name="_Toc276381721"&gt;&lt;/a&gt;&lt;a name="_Toc311287851"&gt;&lt;/a&gt;&lt;a name="_Automation_Estimation"&gt;&lt;/a&gt;&lt;a name="_TFS_Check-in_Policies"&gt;&lt;/a&gt;&lt;a name="_Getting_Started"&gt;&lt;/a&gt;&lt;a name="_Managing__common"&gt;&lt;/a&gt;&lt;font color="#000000" size="4" face="Arial"&gt;iii. Sample Restful Services&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-LsGW3ip3zbY/TuPqz5gwzKI/AAAAAAAAG90/9ib7hdMFpmM/s1600-h/image365.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-i3qXjWgtCEg/TuPq1niwcAI/AAAAAAAAG98/U2kKDgXq8n0/image_thumb184.png?imgmax=800" width="605" height="422"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-ctvIDt6h028/TuPq2qmnPmI/AAAAAAAAG-E/Y4bM0jS_8Sw/s1600-h/image369.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-B5FN_1OLLwA/TuPq4Ed2LCI/AAAAAAAAG-M/dD1I7WCi6jk/image_thumb186.png?imgmax=800" width="618" height="204"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;h4&gt;&lt;a name="_Toc311287852"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;iv. Request/Request XML for services not supported by Fiddler/ WCFTestClient&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;Working on a project where we create WCF Services there may be a need to capture the raw xml passed in to the service operation and also capture the reply xml sent back by the service. Our reusable code captures raw xml even for the scenarios (e.g. Non Xml data being returned by service) where WCF Test Client or fiddler are not able to trace the request\response xml.  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-iLQYg1mB4r8/TuPq6JsBUtI/AAAAAAAAG-U/7E5XXccdckA/s1600-h/image374.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-qHFmpmi3338/TuPq8dajkYI/AAAAAAAAG-c/wpYjIrCfvy0/image_thumb189.png?imgmax=800" width="631" height="442"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;Reusable Code snippet:&lt;/b&gt;  &lt;p&gt;ImageServc.StreamingServiceClient ClientHandle = new ImageServc.StreamingServiceClient();  &lt;p&gt;ResponseXmlInterceptingBehavior responseXmlInterceptingBehaviour = new ResponseXmlInterceptingBehavior();  &lt;p&gt;ClientHandle.Endpoint.Behaviors.Add(responseXmlInterceptingBehaviour);  &lt;p&gt;OutputFile = ClientHandle.GetData("Dryden");  &lt;p&gt;string requestXml = responseXmlInterceptingBehaviour.ResponseXmlInterceptor.RequestXml;  &lt;p&gt;&amp;nbsp; &lt;h4&gt;&lt;a name="_Toc311287853"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;v. Binding &amp;amp; Hosting configuration &amp;amp; consideration&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;This project one of the features of WCF to host the WCF service on the console. In this project we have used the basic test for the call of contract/method of WCF which is hosted on the console app.  &lt;p&gt;Please refer the snapshot which will give you an idea on hosting the service on the console.  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-phrLXTF7fvU/TuPq-KuLI5I/AAAAAAAAG-k/xPEvFgJDdQQ/s1600-h/image378.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-qZwVkNJwuFU/TuPrAM-Ju9I/AAAAAAAAG-s/ljhvwuri8x0/image_thumb191.png?imgmax=800" width="627" height="373"&gt;&lt;/a&gt;  &lt;p&gt;Another sample unit test  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-uvXaL0hKWLM/TuPrBM2B73I/AAAAAAAAG-0/JixG4JMaM34/s1600-h/image382.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-3ujp153vigg/TuPrCuSlhsI/AAAAAAAAG-8/eAHnvPHKEP8/image_thumb193.png?imgmax=800" width="641" height="362"&gt;&lt;/a&gt;  &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;a name="_Toc311287854"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;vi. Data driven testing&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;Use below link if you need more information about Data driven testing using Coded UI and access/store data in MS EXCEL from Coded UI  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/mathew_aniyan/archive/2009/03/17/data-driving-coded-ui-tests.aspx"&gt;Data Driven Testing by Mathew&lt;/a&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee624082(VS.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/ee624082(VS.100).aspx&lt;/a&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163536.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/cc163536.aspx&lt;/a&gt;&lt;a name="_Managing_object_repository"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-5938354953370790859?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/5938354953370790859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=5938354953370790859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/5938354953370790859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/5938354953370790859'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2011/12/web-services-test-automation-guidance_11.html' title='Web Services Test Automation Guidance using VS 2010 - Unit Test &amp;amp; Web Test'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/--HkjjmU3ghk/TuPmYNVATwI/AAAAAAAAGiM/v1eW8MkVLU8/s72-c/clip_image001_thumb.gif?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-3783220994706732802</id><published>2011-12-11T04:33:00.001+05:30</published><updated>2011-12-12T13:24:35.793+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services Testing'/><title type='text'>Test Automation Guidance using VS 2010 Coded UI</title><content type='html'>&lt;p&gt;&lt;a name="_Toc227064252"&gt;&lt;/a&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt;  &lt;p&gt;Raj Kamal (&lt;a href="mailto:rajkamal@microsoft.com"&gt;rajkamal@microsoft.com&lt;/a&gt;)  &lt;h3&gt;&lt;/h3&gt; &lt;h3&gt;&amp;nbsp;&lt;/h3&gt; &lt;p&gt;&lt;font style="background-color: #ffff00"&gt;New !!! On special demand, sharing the below content in PDF format as well as sample reusable Coded UI Framework for your user&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-73-CodedUI/2086.Automation-Guidance-_2800_VS-2010-Coded-UI_2900_-ExternalCommunity.pdf" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-73-CodedUI/2086.Automation-Guidance-_2800_VS-2010-Coded-UI_2900_-ExternalCommunity.pdf"&gt;&lt;strong&gt;http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-73-CodedUI/2086.Automation-Guidance-_2800_VS-2010-Coded-UI_2900_-ExternalCommunity.pdf&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-73-CodedUI/0167.CodedUISampleFramework.rar" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-73-CodedUI/0167.CodedUISampleFramework.rar"&gt;&lt;strong&gt;http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-42-73-CodedUI/0167.CodedUISampleFramework.rar&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;h3&gt;&amp;nbsp;&lt;/h3&gt; &lt;h3&gt;&lt;a name="_Toc293578661"&gt;Objective&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;The objective of this artifact is to provide a &lt;i&gt;L200 test automation guidance leveraging VS 2010 Coded UI&lt;/i&gt; &lt;i&gt;features &lt;/i&gt;to foster a continuous, consistent and standard automation approach. The document can also be used as a quick jump start guide for beginners.  &lt;p&gt;However the bigger objective is &lt;b&gt;Build, Deploy and Test&lt;/b&gt; leveraging Visual Studio Lab Management features, which will allow Automation Testers to reap the benefits of the following  &lt;p&gt;· Integrating with the build process for automatic build deployment  &lt;p&gt;· Execution on VMs  &lt;p&gt;· Capabilities of getting the test automation results reported as part of Test Manager (MTM) for better reporting.&lt;/p&gt; &lt;p&gt; &lt;table cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;&lt;b&gt;Pre-requisites:&lt;/b&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-JbpOwWf2oWM/TuPi_-7v4ZI/AAAAAAAAGV0/a416PDKzcAM/s1600-h/clip_image001%25255B9%25255D.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://lh4.ggpht.com/-58Hgo-7mWLA/TuPjBKuUSkI/AAAAAAAAGV8/ZgK9_-YglQA/clip_image001_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; &lt;i&gt;Ensure you have ‘&lt;/i&gt;&lt;b&gt;CodedUISampleFramework’&lt;/b&gt;&lt;i&gt; sample Coded UI project&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-6XjtMfYLAEA/TuPjBk1Z8LI/AAAAAAAAGWE/JkC_qI1INXw/s1600-h/clip_image001%25255B1%25255D%25255B2%25255D.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[1]" border="0" alt="clip_image001[1]" src="http://lh5.ggpht.com/-lKqRnTvVdTg/TuPjCZIIi8I/AAAAAAAAGWM/irrdoMh47uo/clip_image001%25255B1%25255D_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; &lt;i&gt;For VS 2010 installation &amp;amp; Configuration, go to &lt;/i&gt;&lt;a href="file:///D:/raj/raj backup/VS 2010/Automation Guidance MGSI/Review/Automation Guidance/#_Pre-Requisites:_Installation_and"&gt;&lt;i&gt;Appendix: VS 2010 Installation Reference section&lt;/i&gt;&lt;/a&gt;&lt;i&gt; &lt;/i&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-KqsGZykc-gE/TuPjDonjlbI/AAAAAAAAGWU/B5wzjDnLNNA/s1600-h/clip_image001%25255B2%25255D%25255B2%25255D.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[2]" border="0" alt="clip_image001[2]" src="http://lh3.ggpht.com/-idwef0LL_9Q/TuPjE1DgGWI/AAAAAAAAGWc/c1p-nqp3em8/clip_image001%25255B2%25255D_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; &lt;i&gt;If you are new to Visual Studio Coded UI, go to &lt;/i&gt;&lt;a href="file:///D:/raj/raj backup/VS 2010/Automation Guidance MGSI/Review/Automation Guidance/#_Getting_Started"&gt;&lt;i&gt;Appendix: Getting started with VS2010&lt;/i&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-NvD9bfxzwyE/TuPjF_vU-nI/AAAAAAAAGWk/BTpfBt6Hv68/s1600-h/clip_image001%25255B3%25255D%25255B2%25255D.gif"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[3]" border="0" alt="clip_image001[3]" src="http://lh3.ggpht.com/-MpkBpq4wjUQ/TuPjGzK4i7I/AAAAAAAAGWs/OfQDtaahugs/clip_image001%25255B3%25255D_thumb.gif?imgmax=800" width="15" height="15"&gt;&lt;/a&gt; &lt;i&gt;Ensure your application is supported by Coded UI, go to &lt;/i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd380742.aspx"&gt;&lt;i&gt;MSDN link&lt;/i&gt;&lt;/a&gt;&lt;i&gt; &lt;/i&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;a name="_Toc284684660"&gt;&lt;/a&gt;&lt;a name="_Case_Study"&gt;&lt;/a&gt;Jump to Case Study, if your objective is to get started with Coded UI using our recommended framework and practices.  &lt;p&gt;&amp;nbsp; &lt;h3&gt;&lt;a name="_Toc293578662"&gt;Test Automation Process using Visual Studio 2010&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;It is not enough just to automate your tests but there is also an important need to automate the build process as well as automatic installation and deployment. This will eliminate manual intervention required to trigger the automation due to build and deployment dependencies.  &lt;p&gt;Automated Build, Deploy and Test framework will also enable us to find out the build quality at the earliest by publishing the test results for every run against a new build.  &lt;p&gt;You can run the test suites that are most important for your continuous builds because too many tests can delay the completion of build. Make sure that you run these tests for the current iteration.  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-7EN0nSLilhk/TuPjK05-1TI/AAAAAAAAGW0/qdSedcA6xhk/s1600-h/image%25255B199%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-26aqYqoVgws/TuPjQctpSoI/AAAAAAAAGW8/k_b-KxJ075w/image_thumb%25255B105%25255D.png?imgmax=800" width="677" height="565"&gt;&lt;/a&gt;  &lt;p&gt;Figure 1: The topology required for setting up Build, Deploy and Test environment using various VS components like Build Controller and Agents for Build, Test Controller and Agent for distributing test and collecting results, Virtual environment for Deployment and Execution (Reference taken from &lt;a href="http://msdn.microsoft.com/en-us/library/fda2bad5.aspx"&gt;MSDN&lt;/a&gt;)  &lt;p&gt;To run unit or functional automation tests, we can create a set of environments that are managed Hyper-V images in Microsoft Test Manager. Tests that are created at the start can be used as part of continuous integration.  &lt;p&gt;1. For Daily build, we want to run very minimal set of test which are like Build Verification test or Smoke test  &lt;p&gt;2. For Weekly builds, we want to run “Regression test” which will be more in number.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-7Nx3ZSGV_tw/TuPjROw-AmI/AAAAAAAAGXE/4QEFSXeyaR0/s1600-h/image%25255B200%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-JuSZLS_OJro/TuPjSkG_DoI/AAAAAAAAGXM/a-YKvBcol4Y/image_thumb%25255B106%25255D.png?imgmax=800" width="759" height="427"&gt;&lt;/a&gt;  &lt;p&gt;Figure 2: Steps for Build, Deploy and Test workflow  &lt;p&gt;If you plan to run your automated tests by using Microsoft Test Manager, you must use a physical or virtual environment that contains a set of roles to run your tests from your test plan.  &lt;p&gt;&lt;i&gt;**Build, Deploy and Test using Visual Studio Lab Management will be demonstrated using the below case study in future editions of this document&lt;/i&gt;&lt;i&gt;.&lt;/i&gt;  &lt;p&gt;We will now learn Coded UI automation features as well as our recommended automation framework and best practices in rest of the document.  &lt;p&gt;&amp;nbsp; &lt;h3&gt;&lt;a name="_Toc293578663"&gt;Case Study: Coded UI Automation&lt;/a&gt;&lt;/h3&gt; &lt;table cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;Case Study &lt;/b&gt; &lt;p&gt;You have been given the task to test the basic functionality of Microsoft Bing &lt;a href="http://www.bing.com"&gt;www.bing.com&lt;/a&gt; and automation is in scope. You know that Microsoft Visual Studio Coded UI can be used to automate your functional tests. We assume that you have already written your functional test using MTM&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;We are going provide guidance on Coded UI automation using a real world case study. We assume you are familiar with Microsoft Test Manager for writing test cases (&lt;i&gt;otherwise please jump to Get started section in Appendix&lt;/i&gt;) &lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;Here is a sample snapshot of your test cases in MTM:  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-37UmSFUD0rw/TuPjTzLOXJI/AAAAAAAAGXU/O06YNClHYxo/s1600-h/image%25255B203%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-6T0RPrdNINE/TuPjWY3G_pI/AAAAAAAAGXc/Al-bLvFzbZ8/image_thumb%25255B109%25255D.png?imgmax=800" width="821" height="343"&gt;&lt;/a&gt;  &lt;p&gt;In subsequent sections, we will present the various approaches and steps involved in &lt;b&gt;Automation Development Lifecycle&lt;/b&gt; that you should take to achieve your objective while following the automation standards and guidelines that are recommended.  &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;a name="_Toc293578664"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;Step 1: Automation Planning&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;Like Project Planning or Test Planning, Automation planning is equally important to ensure that the teams are not directly jumping into automation scripting without taking all the important factors into consideration which are extremely critical for providing accurate estimates, deciding the right framework, choosing the right approach, the long term maintenance of automation and getting early ROI (Return on Investment).  &lt;p&gt;This activity will be primarily focused on identifying the feasibility and the scope of automation.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-XpRx6JJ01QM/TuPjXPG-clI/AAAAAAAAGXk/Z5Z665q-0Xk/s1600-h/image%25255B204%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-R0jXGjhwndA/TuPjY8cdYyI/AAAAAAAAGXs/vPbXDOXvoGY/image_thumb%25255B110%25255D.png?imgmax=800" width="705" height="353"&gt;&lt;/a&gt;  &lt;p&gt;Figure 3: Steps involved in Automation Scope and Planning  &lt;p&gt;Taking our case study, we will walk you through each of these steps below:  &lt;h5&gt;&lt;/h5&gt; &lt;h5&gt;&lt;a name="_Toc293578665"&gt;a) Identify Automatable Test Cases, Scenarios &amp;amp; plan Order of Execution&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;We must clearly know beforehand the test cases that are good automation candidates, the scenarios that can be converted into library methods for reuse and the sequence of execution if the tests are dependent on each other.  &lt;table border="1" cellspacing="0" cellpadding="0" width="846"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="188"&gt; &lt;p&gt;Checklist&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="568"&gt; &lt;p&gt;Description&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="52"&gt; &lt;p&gt;Y/N &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="188"&gt; &lt;p&gt;Have you identified and marked the automatable tests as PLANNED in Test Manager?&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="568"&gt; &lt;p&gt;Open your test cases in Test Manager that you want to automate and mark Automation Status = “Planned” for those  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-KUbKMfMmBp0/TuPjZ6mGB9I/AAAAAAAAGX0/OR8D1GtzxDI/s1600-h/image%25255B21%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-YjlXeYeMqNM/TuPja_vsslI/AAAAAAAAGX8/dfZae2K7UkI/image_thumb%25255B11%25255D.png?imgmax=800" width="489" height="314"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;For the case study, we have marked the automation candidate as “Planned” as shown below. &lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Whereas the test which are not good candidates for automation are marked as “Not Automated” to show that they are out-of-scope for automation.&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-qONrPeFM_b4/TuPjcZrgESI/AAAAAAAAGYE/DnfP97D-Zi0/s1600-h/image%25255B205%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-g2pZRuPM6c8/TuPjeD8eO-I/AAAAAAAAGYM/CcB0_gOg148/image_thumb%25255B111%25255D.png?imgmax=800" width="544" height="323"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="52"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;2.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="188"&gt; &lt;p&gt;Have you identified your data-driven test cases?&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="568"&gt; &lt;p&gt;Identify your test cases that are data-driven (&lt;i&gt;this will be required during automation design)&lt;/i&gt;  &lt;p&gt;&lt;i&gt;For our case study, look at the example of one data-driven test related to Bing where you want to perform search multiple times for the list of values provided as Test data&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-p_L9zhYypP0/TuPjfJok-9I/AAAAAAAAGYU/mH7zaDshvNo/s1600-h/image%25255B206%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-Ozg9oTM_Vmg/TuPjg2t0ekI/AAAAAAAAGYc/2-9s-avmO8o/image_thumb%25255B112%25255D.png?imgmax=800" width="399" height="503"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="52"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;3.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="188"&gt; &lt;p&gt;Have you identified the common functionalities/scenarios OR SHARED STEPS which can be automated for Reusability?&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="568"&gt; &lt;p&gt;Ensure that you identify the Shared Steps or Common functionalities that can be later be converted into methods inside your application specific libraries to reduce automation effort and redundancy  &lt;p&gt;&lt;i&gt;For the case study, here is one of the examples of Shared step or common functionality which can be added to the automation library.&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Note: This will be used during automation design &lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-vmw-qtd3riw/TuPjh62t3vI/AAAAAAAAGYk/413qo1eFM3I/s1600-h/image%25255B207%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-TK0-Z4cSau0/TuPjjZXsjpI/AAAAAAAAGYs/-nkpVpA0k7M/image_thumb%25255B113%25255D.png?imgmax=800" width="381" height="509"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="52"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;4. &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="188"&gt; &lt;p&gt;Have you identified the precedence / sequence of execution for your automated tests?&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="568"&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Ensure that you mark the sequence / precedence for the automated tests that have to be run  &lt;p&gt;As shown below, define the order of execution for your automaton scripts using OrderID field&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-ddK9v6lUGMQ/TuPjkuZLVUI/AAAAAAAAGY0/BjQiQLJbKrA/s1600-h/image%25255B208%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-NMtoltzfYUU/TuPjmxyHM7I/AAAAAAAAGY8/INUGcGaNOq0/image_thumb%25255B114%25255D.png?imgmax=800" width="531" height="384"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="52"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;h5&gt;&lt;a name="_Toc293578666"&gt;b) POC (Proof of Concept)&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;Now that we know the scope, we must also ensure that the application or technology in hand is actually supported by VS Coded UI Test by doing a POC on key scenarios. Many a times there might be custom controls and other components that are not automatable / supported by Coded UI out-of-the-box or need customization or are not worth automating due to low ROI. The outcome of this activity should help you decide your approach and next steps. You may mark the non-automatable test cases as out-of-scope for automation.  &lt;table border="1" cellspacing="0" cellpadding="0" width="831"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="66"&gt; &lt;p&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="741"&gt; &lt;p&gt;Checklist&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="26"&gt; &lt;p&gt;Yes/No &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="66"&gt; &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="741"&gt; &lt;p&gt;Have you done a feasibility study to ensure VS 2010 Coded UI supports your application?  &lt;p&gt;Identify key scenarios of your application and ensure that they are supported by VS 2010 Coded UI by coding few scripts and checking the results.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="26"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="66"&gt; &lt;p&gt;2.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="741"&gt; &lt;p&gt;Does your application have 3rd party controls or custom controls?  &lt;p&gt;Ensure that you call out the tests which are not supported by VS 2010 as “out-of-scope” for automation. &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="26"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="66"&gt; &lt;p&gt;3.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="741"&gt; &lt;p&gt;Testability: Have you worked with the development team to ensure that the properties of the objects are exposed and set appropriately for smooth automation?  &lt;p&gt;It is extremely important to work with the development team to work on the testability right from the design phase to make automation easier later in the cycle. &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="26"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;h5&gt;&lt;a name="_Toc284684662"&gt;&lt;/a&gt;&lt;/h5&gt; &lt;h5&gt;&lt;a name="_Toc293578667"&gt;c) Automation Estimation&lt;/a&gt;&lt;/h5&gt; &lt;p&gt;The estimation will decide the success or failure of your automation project as it has been observed that automation can take much more time than anticipated if all the key tasks involved in automation lifecycle development are not clearly thought of while estimating.  &lt;p&gt;The following major activities in each phase of automation must be estimated.  &lt;p&gt;Automation Initiation  &lt;p&gt;· Tool/Framework Feasibility Study  &lt;p&gt;· POC  &lt;p&gt;Framework Design/Implement  &lt;p&gt;· Design and Implement Various Framework Components  &lt;p&gt;· Testing the Framework Components and End to End Testing  &lt;p&gt;· Training Resources on the Framework/Tool  &lt;p&gt;· Environment Setup  &lt;p&gt;Script Development Phase  &lt;p&gt;· Script Creation  &lt;p&gt;· Script Debugging  &lt;p&gt;· Script Review  &lt;p&gt;· Review Comments Incorporation  &lt;p&gt;Script Execution Phase  &lt;p&gt;· Environment Setup  &lt;p&gt;· Result Analysis  &lt;p&gt;Follow the below checklist while coming up with you initial estimation apart from effort for automation design and execution.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;table border="1" cellspacing="0" cellpadding="0" width="819"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="57"&gt; &lt;p&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="716"&gt; &lt;p&gt;Checklist&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="44"&gt; &lt;p&gt;Y/N&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="57"&gt; &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="716"&gt; &lt;p&gt;Check if you have included automation planning effort in your estimation including POC (Proof of Concept)- if any&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="44"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="57"&gt; &lt;p&gt;2.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="716"&gt; &lt;p&gt;Check that you include environment preparation (installation, configuration) effort into estimations.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="44"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="57"&gt; &lt;p&gt;3.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="716"&gt; &lt;p&gt;Have you identified the Shared Steps or Common functionalities that can be later on converted into methods inside your application specific libraries to reduce automation effort and redundancy&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="44"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="57"&gt; &lt;p&gt;4. &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="716"&gt; &lt;p&gt;Ensure that you include effort for building framework reusable components (Libraries)&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="44"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="57"&gt; &lt;p&gt;5.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="716"&gt; &lt;p&gt;Ensure that you include extra effort required if third party or custom controls are there in the application.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="44"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="57"&gt; &lt;p&gt;6.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="716"&gt; &lt;p&gt;Ensure that you include effort for code review, walkthroughs and compliance with the standards defined.  &lt;p&gt;&lt;i&gt;Ensure that you call out the tests which are not supported by VS 2010 as “out-of-scope” for automation. &lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="44"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="57"&gt; &lt;p&gt;7.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="716"&gt; &lt;p&gt;Ensure that you include effort for code review, walkthroughs and compliance with the standards defined&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="44"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="57"&gt; &lt;p&gt;8.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="716"&gt; &lt;p&gt;Ensure that you include effort for debugging and lead time to resolve bugs discovered in the product (troubleshooting and  &lt;p&gt;workarounds)&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="44"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="57"&gt; &lt;p&gt;9.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="716"&gt; &lt;p&gt;Ensure that you include effort for reporting and result analysis.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="44"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;Now that we have the clarity on the scope, feasibility and estimates, we can move the next logical step which is creating your automation solution  &lt;p&gt;&amp;nbsp; &lt;h4&gt;&lt;a name="_Toc293578668"&gt;&lt;/a&gt;&lt;a name="_Walkthrough:_Creating_a"&gt;&lt;/a&gt;&lt;font color="#000000" size="4" face="Arial"&gt;Step 2: Creating a new Coded UI Project &amp;amp; Adding project to Source control&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;&lt;a name="_Walkthrough:_Designing_automation"&gt;&lt;/a&gt;You can create a project from scratch or by using an existing template but it’s important to add your project to source control for version management and change tracking.  &lt;table border="1" cellspacing="0" cellpadding="0" width="834"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="154"&gt; &lt;p&gt;Topics&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="588"&gt; &lt;p&gt;Description&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="54"&gt; &lt;p&gt;Y/N &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="154"&gt; &lt;p&gt;Have you created new Coded UI project &amp;amp; Added it to Source Control (TFS)?  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="588"&gt; &lt;p&gt;Every automation project must be source controlled.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-8hkGtcSEJu8/TuPjoMzW4gI/AAAAAAAAGZE/f80zGsD2n1Q/s1600-h/image%25255B209%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-OC_8Tan5Ujw/TuPjp_TTvWI/AAAAAAAAGZM/hl_LIPZsEzU/image_thumb%25255B115%25255D.png?imgmax=800" width="504" height="475"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Add project to Source Control by clicking the check box as shown&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Project Check-in Path: &lt;/i&gt; &lt;p&gt;All application / project specific automation code tobe maintained under respective &lt;i&gt;‘project node’&lt;/i&gt; of the TFS being used for the projects. &lt;i&gt;&lt;/i&gt; &lt;p&gt;Recommended Source Control Path:&lt;i&gt; &lt;/i&gt; &lt;p&gt;&lt;i&gt;&amp;lt;Project-Node&amp;gt;/Main/Test/Test Automation&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;Refer to &lt;a href="file:///D:/raj/raj backup/VS 2010/Automation Guidance MGSI/Review/Automation Guidance/#_TFS_Check-in_Policies"&gt;Appendix: TFS Check-In Policies and Best Practices&lt;/a&gt; for details.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="54"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="36"&gt; &lt;p&gt;2.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="154"&gt; &lt;p&gt;Open existing test project and using it as Template&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="588"&gt; &lt;p&gt;Launch Visual Studio, Browse and open existing ‘CodedUISampleFramework’ template and add it to Source control. You can change the properties as per your needs.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-uSpf3G2-KAQ/TuPjrJ-KHRI/AAAAAAAAGZU/uEXCJZTTWoU/s1600-h/image%25255B210%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-C9cMOWPOaqo/TuPjtTAImxI/AAAAAAAAGZc/iu_bKwmZ8ro/image_thumb%25255B116%25255D.png?imgmax=800" width="355" height="557"&gt;&lt;/a&gt;  &lt;p&gt;Please find below a short description on the folder structure of the template project which will be used for case study:  &lt;p&gt;1. &lt;b&gt;Config&lt;/b&gt;: All your application configuration details and playback settings.  &lt;p&gt;etc will go here  &lt;p&gt;Example:  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-SEdnyvBhP34/TuPjt_Sz7oI/AAAAAAAAGZk/EE7tPnteplY/s1600-h/image%25255B211%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-9w_7d3shQUY/TuPjvBHE4xI/AAAAAAAAGZs/OW_l57euIN8/image_thumb%25255B117%25255D.png?imgmax=800" width="504" height="251"&gt;&lt;/a&gt;  &lt;p&gt;Also refer to: &lt;a href="http://msdn.microsoft.com/en-us/library/a65txexh(v=VS.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/a65txexh(v=VS.100).aspx&lt;/a&gt;  &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;Library: &lt;/b&gt;All your libraries- application level, data access, exceptions, utilities will go here.&lt;b&gt;&lt;/b&gt;  &lt;p&gt;Please refer to &lt;a href="file:///D:/raj/raj backup/VS 2010/Automation Guidance MGSI/Review/Automation Guidance/#_Step_3:_Automation"&gt;Step 3&lt;/a&gt;  &lt;p&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;Resources: &lt;/b&gt;All your keys / strings that’s need to globally defined can be added here rather than hardcoding their values in code.&lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-mXh-YnioMN8/TuPjwDIUecI/AAAAAAAAGZ0/KVkjtQHIY2I/s1600-h/image%25255B212%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-1-aZ0RVD4s0/TuPjxIFE4rI/AAAAAAAAGZ8/nlQ1XLjCQFw/image_thumb%25255B118%25255D.png?imgmax=800" width="511" height="124"&gt;&lt;/a&gt;  &lt;p&gt;&lt;i&gt;Example: The resource file key “SearchTimeOut” can be used to set playback settings as per your project needs without hardcoding it in your code.&lt;/i&gt;  &lt;p&gt;&amp;nbsp;&lt;a href="http://lh3.ggpht.com/-lJ9v3AG5Y50/TuPjyDHzEBI/AAAAAAAAGaE/u6mnE6WnRpE/s1600-h/image%25255B217%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-hQ8COdtYM48/TuPjzMs8bBI/AAAAAAAAGaM/ReZZWvG7bOQ/image_thumb%25255B120%25255D.png?imgmax=800" width="505" height="163"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;4. &lt;/b&gt;&lt;b&gt;Scripts: &lt;/b&gt;Your actual test are stored in these .cs files along with components like Test Initialize, Test Cleanup etc&lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;5. &lt;/b&gt;&lt;b&gt;Test Data: &lt;/b&gt;These will contain your .CSV or .XML test data files for your data-driven automation test&lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;6. &lt;/b&gt;&lt;b&gt;UIMaps: &lt;/b&gt;These will contain your test object repository along with any test methods or assertions (if any)&lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-TKZfiW0KUuI/TuPjzrbb30I/AAAAAAAAGaU/34aW8zj73ew/s1600-h/image%25255B218%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-9cTrUQW0ut4/TuPj1Cag9kI/AAAAAAAAGac/CCc2ktbBudI/image_thumb%25255B121%25255D.png?imgmax=800" width="331" height="330"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;7. &lt;/b&gt;&lt;b&gt;Main Class file: &lt;/b&gt;One class that acts as a single point interface to all the test methods and contains instantiations of the UI maps&lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="54"&gt; &lt;p&gt;&lt;b&gt;☐&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;With next step, we are now entering into the most important phase of Automation Lifecycle Development which involves designing your automation framework. It is worth spending time on coming up with a good design rather than doing lot of rework later due to shortsightedness and eagerness to start scripting. I would strongly recommend you spend a good effort in coming with design/framework that suits your project requirement before writing your automation test.  &lt;p&gt;&amp;nbsp; &lt;h4&gt;&lt;a name="_Toc293578669"&gt;&lt;/a&gt;&lt;a name="_Step_3:_Automation"&gt;&lt;/a&gt;&lt;font color="#000000" size="4" face="Arial"&gt;Step 3: Automation Design &amp;amp; Development&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;Automation design and framework is one of the very important pillars of your automation success and it serves as a guiding light for your team members to follow a standard and consistent automation approach across the team.  &lt;p&gt;In this section we will be walking through the automation framework design for Coded UI projects using our Case Study’s template project.  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-gno9mHLSfp8/TuPj2EriDKI/AAAAAAAAGak/54sa8UKzA3E/s1600-h/image%25255B219%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-lRyQbLejXWo/TuPj4LbwR-I/AAAAAAAAGas/UYCvujl-nsM/image_thumb%25255B122%25255D.png?imgmax=800" width="678" height="597"&gt;&lt;/a&gt;  &lt;p&gt;Figure 5: Proposed 3-Tier Architecture for maintaining automated test that promotes high modularity and maximum reuse with minimum maintenance effort in longer run  &lt;p&gt;Follow the below steps for Automation design guidance:  &lt;table border="1" cellspacing="0" cellpadding="0" width="839"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="183"&gt; &lt;p&gt;Steps&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="616"&gt; &lt;p&gt;Description&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="183"&gt; &lt;p&gt;If you have created project from scratch, add Multiple UI Map files  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;(In the template project, we already have 2 UIMap files for Case Study)&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="616"&gt; &lt;p&gt;&lt;b&gt;Managing Object Repositories:&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;Single UI Map File: &lt;/b&gt; &lt;p&gt;By default only one UIMap File is created per project and it is appropriate for a project of small size  &lt;p&gt;&lt;b&gt;Multiple UI Map File: &lt;/b&gt;&lt;i&gt;(We recommend using Multi UIMap files for modularization)&lt;/i&gt;&lt;b&gt;&lt;i&gt;&lt;/i&gt;&lt;/b&gt;  &lt;p&gt;For large application, we should use multiple UI Map. Using multiple UI Map files can provide the following benefits:  &lt;p&gt;- Each map can be associated with a logical subset of the application. This makes changes easier to manage.  &lt;p&gt;- Each tester can work on a section of the application and check in their code without interfering with other testers working on other sections of the application.  &lt;p&gt;- Additions to the application UI can be scaled incrementally with minimal effect on tests for other parts of the UI  &lt;p&gt;You can add new UIMap files by selecting Add new Items option and then selecting CodedUI Test Map type and renaming it as per your needs.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-e0ot8yf0G2Y/TuPj4yv913I/AAAAAAAAGa0/vB2XdLCEiac/s1600-h/image%25255B75%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-1OZ5rS2Pb-M/TuPj6KxJVwI/AAAAAAAAGa8/v8GTsNvDcyU/image_thumb%25255B39%25255D.png?imgmax=800" width="513" height="186"&gt;&lt;/a&gt;  &lt;p&gt;The system will launch Coded UI Test Builder which can be used to add object properties to your UIMap file. Press &lt;i&gt;Generate Code button (Alt+G)&lt;/i&gt;.  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-a2I0R7lw_pM/TuPj7-_AhII/AAAAAAAAGbE/_MeP7QaBwZU/s1600-h/image%25255B80%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-UX8DUmDVCls/TuPj_Zu5-kI/AAAAAAAAGbM/0AaPdQX1mVM/image_thumb%25255B42%25255D.png?imgmax=800" width="520" height="317"&gt;&lt;/a&gt;  &lt;p&gt;For Case Study, you will find the UIMap files as shown below:  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-EyQBUm0T0uc/TuPkAc47OAI/AAAAAAAAGbU/-eZDiYQ8z0s/s1600-h/image%25255B220%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-JbcLONj9S2M/TuPkCUF8AcI/AAAAAAAAGbc/FbJyLxl-VvY/image_thumb%25255B123%25255D.png?imgmax=800" width="594" height="489"&gt;&lt;/a&gt;  &lt;p&gt;Open UIMap .CS files and add User friendly names to constructor:  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-VoV4XwGH0IY/TuPkDadtM_I/AAAAAAAAGbk/WOlck7S4yh8/s1600-h/image%25255B221%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-4v022CZr1bI/TuPkEmuw6jI/AAAAAAAAGbs/Iq1GkfY3ino/image_thumb%25255B124%25255D.png?imgmax=800" width="576" height="186"&gt;&lt;/a&gt;  &lt;p&gt;Go to your Main Class file (Bing.cs) in our Case Study and instantiate each Multi UIMap file  &lt;p&gt;&amp;nbsp;&lt;a href="http://lh5.ggpht.com/-KyzVQsNswck/TuPkFj-DTRI/AAAAAAAAGb0/0026SohWJIQ/s1600-h/image%25255B223%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-R73qtGKfJvU/TuPkHgehnvI/AAAAAAAAGb8/Fo8XItMORa8/image_thumb%25255B126%25255D.png?imgmax=800" width="547" height="476"&gt;&lt;/a&gt;  &lt;p&gt;Please refer to &lt;a href="file:///D:/raj/raj backup/VS 2010/Automation Guidance MGSI/Review/Automation Guidance/#_Managing_object_repository"&gt;Appendix: Managing objects using UITestEditor for&lt;/a&gt; more details&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;2.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="183"&gt; &lt;p&gt;Add/Create Libraries to your project  &lt;p&gt;&lt;i&gt;(For Case Study, We have already created libraries for Bing)&lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="616"&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;Managing Libraries:&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;Application Functional Libraries using Multiple UI Map files&lt;/b&gt;  &lt;p&gt;Ensure common functionalities identified above in planning phase are automated as reusable methods which are then invokes from your Coded UI Test methods  &lt;p&gt;Create functional libraries as per functional modules for your application.  &lt;p&gt;&lt;a name="_Toc254270227"&gt;&lt;/a&gt;&lt;a name="_Toc254270272"&gt;&lt;/a&gt;&lt;b&gt;Common Library / Helper Classes: &lt;/b&gt; &lt;p&gt;a) Ensure common utilities like SQL connection, Excel/ XML, String/Date handling etc. are referenced from common library repository in your automated solution (&lt;i&gt;instead of creating them from scratch&lt;/i&gt;)  &lt;p&gt;All common libraries need to be browsed and added to automation solution as “References”  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-Uz78mK71DO4/TuPkIbp0OzI/AAAAAAAAGcE/U9rRDRLBfcM/s1600-h/image%25255B224%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-RYJWJGQm-kM/TuPkKt_Rg9I/AAAAAAAAGcM/n29L1ziFXzg/image_thumb%25255B127%25255D.png?imgmax=800" width="518" height="410"&gt;&lt;/a&gt;  &lt;p&gt;b) Ensure that common helper classes which are technology specific like WPF, WCR, SharePoint, Silverlight, .Net etc. are referenced in your solution (if any).  &lt;p&gt;Refer to &lt;a href="file:///D:/raj/raj backup/VS 2010/Automation Guidance MGSI/Review/Automation Guidance/#_Managing__common"&gt;Appendix: Managing Common Libraries in TFS&lt;/a&gt;  &lt;p&gt;For our case study, we have created/referenced following libaries based on the Shared Steps and scenarios identified from ‘automatable test cases’ selected in Step 1 (Automation Planning)  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-1-v03bER1x0/TuPkLb-BIlI/AAAAAAAAGcU/3PS25OSryMQ/s1600-h/image%25255B225%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-CsQFSkbfjVo/TuPkNAmFWAI/AAAAAAAAGcc/F8TPoSgohKE/image_thumb%25255B128%25255D.png?imgmax=800" width="433" height="393"&gt;&lt;/a&gt;  &lt;p&gt;Example of Application specific library methods  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-CkAUIymVzbg/TuPkOP7C09I/AAAAAAAAGck/5PLxGyNCp0Y/s1600-h/image%25255B226%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-UQIv4Au1L3k/TuPkPhipQrI/AAAAAAAAGcs/j34zObQAbTQ/image_thumb%25255B129%25255D.png?imgmax=800" width="476" height="277"&gt;&lt;/a&gt;  &lt;p&gt;Example of Common/Utilies based methods:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-VMP-Na4d4XM/TuPkQX4bYQI/AAAAAAAAGc0/rNok_2ZSZCw/s1600-h/image%25255B227%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/---WsK6oCZEo/TuPkTFSvzrI/AAAAAAAAGc8/sB_ORbIs0Ck/image_thumb%25255B130%25255D.png?imgmax=800" width="480" height="356"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;3&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="183"&gt; &lt;p&gt;Add your CodedUI scripts  &lt;p&gt;/  &lt;p&gt;Test Methods&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="616"&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Automate your ‘&lt;i&gt;automatable test cases’&lt;/i&gt; as CodedUI Test Methods using application libraries, utilities and UI Maps defined above  &lt;p&gt;a) Set the test context which provides information about and functionality for the current test run.  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-EVUkD2KtcNI/TuPkT4gOx1I/AAAAAAAAGdE/4QospNY_e1s/s1600-h/image%25255B229%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-NQYysjVEKnk/TuPkVAWWqpI/AAAAAAAAGdM/euxnc50LoM4/image_thumb%25255B132%25255D.png?imgmax=800" width="528" height="187"&gt;&lt;/a&gt;  &lt;p&gt;b) &lt;b&gt;Test Initialize:&lt;/b&gt; To perform steps before running each test like instantiating UIMap files, setting TestContext for logging etc.  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-gCWRQJbcrH0/TuPkWNE73tI/AAAAAAAAGdU/4ejHquYq-Mo/s1600-h/image%25255B228%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-TGPrsCaHk40/TuPkXlMW24I/AAAAAAAAGdc/rVs28_XEx54/image_thumb%25255B131%25255D.png?imgmax=800" width="521" height="280"&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-RtJzUz3yLa0/TuPkYC5mOfI/AAAAAAAAGdk/CYfXQtN4aKk/s1600-h/image%25255B230%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-44JKSHO-dvU/TuPkZiy326I/AAAAAAAAGds/g7AZVengQBw/image_thumb%25255B133%25255D.png?imgmax=800" width="516" height="261"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;c) &lt;/b&gt;&lt;b&gt;Add your Test Methods&lt;/b&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-Oxr5RwToF0A/TuPka4F8uaI/AAAAAAAAGd0/N-31RBJmJCg/s1600-h/image%25255B126%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-NS9IwLNiAp0/TuPkcLZdojI/AAAAAAAAGd8/Lss6iyXOGU0/image_thumb%25255B66%25255D.png?imgmax=800" width="435" height="246"&gt;&lt;/a&gt;  &lt;p&gt;As you can notice above that we have highlighted certain things which are not recommended like using static playback interval or hardcoding test data. We will see in next section how to handle these.  &lt;p&gt;d) &lt;b&gt;Test Cleanup:&lt;/b&gt; To run code after running each steps&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-QBB5BhOl_qk/TuPkdCFyq5I/AAAAAAAAGeE/GyX7VzoOgYA/s1600-h/image%25255B231%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-DsFaGOk1gCU/TuPkefTUsuI/AAAAAAAAGeM/XcI2c5Vfp1Q/image_thumb%25255B134%25255D.png?imgmax=800" width="543" height="250"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;4.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="183"&gt; &lt;p&gt;Adding Checkpoints  &lt;p&gt;/  &lt;p&gt;Assertions&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="616"&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;For validation in Coded UI Testing, you need to use “Assertions”  &lt;p&gt;- &lt;b&gt;Creating assertions using CUIT (Coded UI Test Recorder):&lt;/b&gt; You can create assertions without coding by using out-of-the-box feature provided with Coded UI  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-fiTSRpbU_mk/TuPkf90v9dI/AAAAAAAAGeU/zaO6TkztN5Y/s1600-h/image%25255B232%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-AqbWU5vrTa8/TuPkkS7QS4I/AAAAAAAAGec/jk3gxz-iIKw/image_thumb%25255B135%25255D.png?imgmax=800" width="559" height="319"&gt;&lt;/a&gt;  &lt;p&gt;Choose the property you want to validate and Click “Add Assertion”.  &lt;p&gt;- &lt;b&gt;Creating assertions by hand coding: You&lt;/b&gt; can create assertions by writing you own code and capturing properties against expected values to validate at the run time.  &lt;p&gt;Verify.WaitForControlPropertyEqual(BING.SearchResultsUI.searchText, "Text", "Bill Gates", 15000);  &lt;p&gt;e.g. We have a method in our Utility “Verify” that waits for control property to be equal to some text value for certain period and returns PASS if found otherwise FAIL&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-WfmOaE49I0o/TuPklLR5GOI/AAAAAAAAGeg/_7Pj1Wv1Gyo/s1600-h/image%25255B233%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-BswnCf3e_1o/TuPkmDnV8mI/AAAAAAAAGes/QxxOj_XY9r0/image_thumb%25255B136%25255D.png?imgmax=800" width="452" height="90"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;b&gt;5. &lt;/b&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="183"&gt; &lt;p&gt;Make your scripts data-driven&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="616"&gt; &lt;p&gt;&lt;b&gt;Data-Driven Test&lt;/b&gt;  &lt;p&gt;Ensure every variable is parameterized by passing the test data to each test using data-driven capabilities in VS 2010.  &lt;p&gt;&lt;i&gt;Right-click on the Coded UI test and select Properties, to view the properties of the test&lt;/i&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-WIFCCzn59rc/TuPkm1NMJDI/AAAAAAAAGe0/X6KwPRd-FiE/s1600-h/image%25255B234%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-9j9iyXkhlvs/TuPkpFdMVpI/AAAAAAAAGe8/Swjj-Ruty-s/image_thumb%25255B137%25255D.png?imgmax=800" width="482" height="384"&gt;&lt;/a&gt;  &lt;p&gt;To start making this a data-driven test, we have to first create a data source for the test to draw from. On the Data Connection String property, click the ellipse button to start the New Test Data Source Wizard  &lt;p&gt;There are three options for creating a data source:  &lt;p&gt;&lt;b&gt;Database&lt;/b&gt; -- which allows you to connect to a database or Microsoft Excel spreadsheet  &lt;p&gt;&lt;b&gt;CSV&lt;/b&gt; File -- which allows you to use a comma-delimited file  &lt;p&gt;&lt;b&gt;XML&lt;/b&gt; File -- which allows you to use an XML file  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-Yu39fvJ3qKk/TuPkqLOeJ9I/AAAAAAAAGfE/7pI23xXbon0/s1600-h/image%25255B235%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-ytXQ_XIvUjc/TuPkslFw31I/AAAAAAAAGfM/t9N72pwj5M0/image_thumb%25255B138%25255D.png?imgmax=800" width="442" height="431"&gt;&lt;/a&gt;  &lt;p&gt;When you add a data source A Data Source attribute is added to the Coded UI Test.  &lt;p&gt;[&lt;i&gt;DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\data.csv", "data#csv", DataAccessMethod.Sequential), DeploymentItem("data.csv"), TestMethod]&lt;/i&gt;  &lt;p&gt;For our Case study, let’s look at one of our data-driven test:  &lt;p&gt;a) We have a method in our data access library (Utilies) to read the data from data sources using the test context  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-lhAKjDQEntA/TuPktHZzBVI/AAAAAAAAGfU/F8Hyv7MrecY/s1600-h/image%25255B236%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-nysptiC_lQI/TuPkunfwKjI/AAAAAAAAGfc/aMMhx7-rbR0/image_thumb%25255B139%25255D.png?imgmax=800" width="568" height="209"&gt;&lt;/a&gt;  &lt;p&gt;b) Another method as part of Application library returns the data from data source and inputs the same to application using the above data access library method  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-_N1OjvR6c0E/TuPkv4NpKMI/AAAAAAAAGfk/-fJcThNOnM0/s1600-h/image%25255B238%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-baww9EymLTM/TuPkxWV7BKI/AAAAAAAAGfs/PBS4NYqKbXk/image_thumb%25255B141%25255D.png?imgmax=800" width="562" height="185"&gt;&lt;/a&gt;  &lt;p&gt;c) Test data source which is stored in .CSV format  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-BNtdI9XmZ3U/TuPkya6H3tI/AAAAAAAAGf0/PxcTh41qy7E/s1600-h/image%25255B239%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-5QMHZka4UDc/TuPkzqMjKlI/AAAAAAAAGf8/PshgpG8bVbw/image_thumb%25255B142%25255D.png?imgmax=800" width="561" height="124"&gt;&lt;/a&gt;  &lt;p&gt;d) Our Data-driven test method calls the above method as part of our functional&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-u915OHn2sak/TuPk0q5ExuI/AAAAAAAAGgE/dlQz8YVwBYI/s1600-h/image%25255B240%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-v8fWCaVKzl0/TuPk12ZDRbI/AAAAAAAAGgM/Lf9dSiHSL9Q/image_thumb%25255B143%25255D.png?imgmax=800" width="559" height="224"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;Now I suppose you have your automation tests candidates designed and developed. After you write and debug your scripts its important to run them in a batch or as part of a suite. There are various way to do that and factors to keep in mind as we will see in next section.  &lt;p&gt;&amp;nbsp; &lt;h4&gt;&lt;a name="_Toc293578670"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;Step 4: Automation Execution &amp;amp; Deployment&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;&lt;a name="_Walkthrough:_Error_handling,"&gt;&lt;/a&gt;Ensure you have configured test settings to capture logs, code coverage, test impact etc. and you also need to keep in mind that your script should be able to successfully run in multiple environment (for ex. Test to UAT)  &lt;p&gt;After automation design and debugging is completed, you can now run and deploy your automation scripts using the below steps:  &lt;table border="1" cellspacing="0" cellpadding="0" width="839"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="176"&gt; &lt;p&gt;Areas&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="623"&gt; &lt;p&gt;Description&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="176"&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Configuring Test Settings&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="623"&gt; &lt;p&gt;&lt;b&gt;Test Settings&lt;/b&gt;  &lt;p&gt;a) &lt;b&gt;Data and Diagnostic&lt;/b&gt;: Enable appropriate diagnostic are selected as shown below (&lt;b&gt;Code Coverage&lt;/b&gt;, Event Log, Test Impact etc.)  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-_Y-yC2ToniU/TuPk2_gnxtI/AAAAAAAAGgU/PrWG2HY8wN4/s1600-h/image%25255B241%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-odAB9CqO04w/TuPk4u30X6I/AAAAAAAAGgc/1I6gTsPLsko/image_thumb%25255B144%25255D.png?imgmax=800" width="608" height="360"&gt;&lt;/a&gt;  &lt;p&gt;b) Define other settings like Roles, Test Timeouts, Setup and Clean scripts&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-qEHZWStqkrA/TuPk5ZhziGI/AAAAAAAAGgk/IiiyrZNgRSs/s1600-h/image%25255B242%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-CsWOW0NzJdA/TuPk7iPT0nI/AAAAAAAAGgs/N1JH0CtTo7g/image_thumb%25255B145%25255D.png?imgmax=800" width="599" height="358"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;2.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="176"&gt; &lt;p&gt;Deploy your test to multiple environments&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="623"&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&amp;nbsp; &lt;p&gt;&lt;i&gt;Deployment to different environments: &lt;/i&gt;&lt;i&gt;We want to run the same test across multiple environments to ensure everything is still working correctly.&lt;/i&gt;  &lt;p&gt;&lt;i&gt;Development-&amp;gt; Test -&amp;gt; UAT -&amp;gt; STAGE&lt;/i&gt;  &lt;p&gt;Example: We want to run these tests after each deploy to each environment. Each environment has as a different URL, username and password.  &lt;p&gt;public UIMap()  &lt;p&gt;{  &lt;p&gt;// Bind the parameters using Environment Variables.  &lt;p&gt;string testServer =  &lt;p&gt;Environment.GetEnvironmentVariable("TestServer");  &lt;p&gt;string testUserName =  &lt;p&gt;Environment.GetEnvironmentVariable("TestUserName");  &lt;p&gt;string testUserPassword =  &lt;p&gt;Environment.GetEnvironmentVariable("TestUserPassword");  &lt;p&gt;}  &lt;p&gt;Also refer: &lt;a href="http://blogs.msdn.com/b/gautamg/archive/2010/02/23/how-to-get-same-test-running-under-different-environments.aspx"&gt;http://blogs.msdn.com/b/gautamg/archive/2010/02/23/how-to-get-same-test-running-under-different-environments.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="38"&gt; &lt;p&gt;3.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="176"&gt; &lt;p&gt;Command Line Execution (MSTest.Exe)&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="623"&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;b&gt;&lt;i&gt;Grouping &amp;amp; Classifying Test Methods using various parameters&lt;/i&gt;&lt;/b&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;It lets you run groups of tests based on their assigned categories without the requirement to maintain test lists.  &lt;p&gt;Go to Test View and you can filter and view your tests by setting these parameters  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-27vWMglhRXc/TuPk9HXuhXI/AAAAAAAAGg0/QDmwdnxcqEk/s1600-h/image%25255B243%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-VG78v1GY6Zw/TuPlAll8v4I/AAAAAAAAGg8/GvUAGlQV2vw/image_thumb%25255B146%25255D.png?imgmax=800" width="600" height="307"&gt;&lt;/a&gt;  &lt;p&gt;&lt;b&gt;MSTest.EXE Options&lt;/b&gt;&lt;b&gt;&lt;i&gt;: &lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;MSTest.exe is the command-line command that is used to run tests. This command has several options that you can use to customize your test run. You can specify these options in any order on the MSTest.exe command line.  &lt;p&gt;Example:  &lt;p&gt;&lt;i&gt;mstest /testcontainer:"C:\TestProject2\generictest1.generic" /test:testproject32\generic &lt;/i&gt; &lt;p&gt;Refer to &lt;a href="http://msdn.microsoft.com/en-us/library/ms182489.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms182489.aspx&lt;/a&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;With this, we come to the end of our case study where we walked you through the complete automation development life cycle that involved Automation Planning, Automation Design and Development, and finally Automation execution and Deployment.  &lt;p&gt;Automation scripts are just ‘Code’ at the end of the day and we can’t deny the importance of having high quality of code and best practices adopted for making our automation tests not only readable and easy to troubleshoot but also for long term maintainability.  &lt;p&gt;&amp;nbsp; &lt;h3&gt;&lt;a name="_Toc284684681"&gt;&lt;/a&gt;&lt;a name="_Toc284684673"&gt;&lt;/a&gt;&lt;a name="_Toc293578671"&gt;Coding standards and best practices&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;We recommend following the below checklist and recommendations for your automation code. It is the responsibility of the entire team to follow these and imbibing a culture of peer and lead review of the automation code on a regular basis.  &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;a name="_Toc293578672"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;Checklist&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;table border="1" cellspacing="0" cellpadding="0" width="845"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="51"&gt; &lt;p&gt;SL No.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt; &lt;p&gt;Topic&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="628"&gt; &lt;p&gt;Description&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="51"&gt; &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;Object Synchronization  &lt;p&gt;over static wait/delay  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="628"&gt; &lt;p&gt;These synchronization points will make the scripts more resilient and robust.  &lt;p&gt;&lt;b&gt;Wait for Control options: &lt;/b&gt; &lt;p&gt;Ensure that you insert synchronization points by waiting for the object to be ready/exist/enabled etc. before trying to perform any critical action&lt;i&gt;. &lt;/i&gt; &lt;p&gt;Example: &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.uitesting.uitestcontrol.waitforcontrolready(VS.100).aspx"&gt;WaitForControlReady&lt;/a&gt;(),&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.uitesting.uitestcontrol.waitforcontrolexist(VS.100).aspx"&gt;WaitForControlExist&lt;/a&gt;() etc  &lt;p&gt;&lt;b&gt;&lt;i&gt;Static &lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;i&gt;Delay&lt;/i&gt;&lt;/b&gt;&lt;i&gt;: &lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Ensure that you use WaitForControl options as much as possible but in some unavoidable cases where you must have to hard wait/sleep use &lt;/i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd984394(VS.100).aspx"&gt;Playback.Wait&lt;/a&gt;() API instead of &lt;a href="http://msdn.microsoft.com/en-us/library/system.threading.thread.sleep.aspx"&gt;Thread.Sleep&lt;/a&gt;() API.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="51"&gt; &lt;p&gt;2.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt; &lt;p&gt;Exceptions and Error Handling&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="628"&gt; &lt;p&gt;&lt;i&gt;Ensure that you use the exception handling feature in all your scripts that &lt;/i&gt;C# provides i.e. try, catch and finally to do exception handling. The try encloses the statements that might throw an exception whereas catch handles an exception if one exists. The finally can be used for doing any cleanup process.  &lt;p&gt;The general form try-catch-finally in C# is shown below&amp;nbsp; &lt;p&gt;try&lt;br&gt;{&lt;br&gt;// Statement which can cause an exception.&lt;br&gt;}&lt;br&gt;catch(Type x)&lt;br&gt;{&lt;br&gt;// Statements for handling the exception&lt;br&gt;}&lt;br&gt;finally&lt;br&gt;{&lt;br&gt;//Any cleanup code&lt;br&gt;}&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="51"&gt; &lt;p&gt;3.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt; &lt;p&gt;Logging&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="628"&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;Sample Logging Code:  &lt;p&gt;1: [TestMethod]  &lt;p&gt;2: public void CodedUITestMethod1()  &lt;p&gt;3: {  &lt;p&gt;4: Console.WriteLine("Console.WriteLine()");  &lt;p&gt;5: Console.Error.WriteLine("Console.Error.WriteLine()");  &lt;p&gt;6: TestContext.WriteLine("TestContext.WriteLine()");  &lt;p&gt;7: Trace.WriteLine("Trace.WriteLine()");  &lt;p&gt;8: Debug.WriteLine("Debug.WriteLine()");  &lt;p&gt;9: }  &lt;p&gt;If you check the test result window, you should see output like –  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-zFIlB-K5oPM/TuPlDGyN_-I/AAAAAAAAGhE/Ebbe9DULVLU/s1600-h/image%25255B244%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-zgmJGL5cLt4/TuPlGR38hWI/AAAAAAAAGhM/qxBohCKAqSk/image_thumb%25255B147%25255D.png?imgmax=800" width="592" height="318"&gt;&lt;/a&gt;  &lt;p&gt; &lt;p&gt;Each of these ways have their own advantages and disadvantages -  &lt;p&gt;TestContext.WriteLine:  &lt;p&gt;Advantage - Shows up property in the separate section in test result. It is meant for this purpose only.  &lt;p&gt;Disadvantage - You will have to pass TestContext around from you main test class to other classes (like UIMap class in Coded UI Test) to use it.  &lt;p&gt;Recommendation – Prefer this over other methods for tracing in test code.  &lt;p&gt;Trace.WriteLine:  &lt;p&gt;Advantage – Shows up in VS Output window too during debugging.  &lt;p&gt;Disadvantage - The message here could be lost among other trace messages from other components (or product code).  &lt;p&gt;Recommendation – Use it in your product code but avoid in test code. That is good way to separate out messages from product code vs test code. You can use this though in certain scenarios where either TestContext is not there or you want to determine the sequence of operation between test &amp;amp; product code  &lt;p&gt;Debug.WriteLine: Same as Trace.WriteLine except that this shows up only for Debug build and is no-op in Retail build.  &lt;p&gt;Console.WriteLine and Console.Error.WriteLine: These, though work, are tricky. The test harness redirects the Standard Output and Standard Error to capture the output\error from your product code and not for tracing. So, the recommendation is to avoid using these.  &lt;p&gt;In short, use TestContext.WriteLine wherever possible.  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="51"&gt; &lt;p&gt;4.  &lt;p&gt;1.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt; &lt;p&gt;Naming Conventions&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="628"&gt; &lt;p&gt;When you create a method, use a meaningful method name instead of the default name. A meaningful name helps identify the purpose of the method.  &lt;p&gt;In the application under test, use meaningful names when you create the UI controls. This gives more meaning and usability to the automatically generated control names.  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="51"&gt; &lt;p&gt;5.&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt; &lt;p&gt;Comments&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="628"&gt; &lt;p&gt;Have extensive and meaningful comments. Remember that code written by you will be around for a long time and has to be understood, extended and debugged by others who do not have the entire context you had when the code was originally developed. Unless there are good comments, it is hard for even the owner to understand the code few weeks or months later.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="51"&gt; &lt;p&gt;6. &lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="164"&gt; &lt;p&gt;Startup &amp;amp; Cleanup Scripts&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="628"&gt; &lt;p&gt;Using Code: Create a test in your test project. In the test class, create methods with the [&lt;b&gt;TestInitialize&lt;/b&gt;] and [&lt;b&gt;TestCleanup&lt;/b&gt;] attributes. They will be run before/after each test method.  &lt;p&gt;Or, if you want to run before/after all test in that class, create static methods with [&lt;b&gt;ClassInitialize&lt;/b&gt;] and [&lt;b&gt;ClassCleanup&lt;/b&gt;] attributes.  &lt;p&gt;Lastly, to run before/after all tests in the assembly, create static methods with [&lt;b&gt;AssemblyInitialize&lt;/b&gt;] and [&lt;b&gt;AssemblyCleanup&lt;/b&gt;] attributes.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;h4&gt;&lt;/h4&gt; &lt;p&gt;We are also providing a compilation of best practices collected from various forums which can be used as a reminder when writing coded UI test.  &lt;p&gt;&amp;nbsp; &lt;h4&gt;&lt;a name="_Toc293578673"&gt;&lt;/a&gt;&lt;a name="_Toc284684684"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;Do’s and Don’ts of UI Automation&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;&lt;b&gt;Do(s)&lt;/b&gt;  &lt;p&gt;o Each recorded method should act on a single page, form, or dialog box. Create a new test method for each new page, form or dialog box.  &lt;p&gt;o Use the Coded UI Test Builder whenever possible.  &lt;p&gt;o Explicitly set focus to the window on which the test Case is expected to input data.  &lt;p&gt;o When possible, limit each recorded method to fewer than 10 actions. This modular approach makes it easier to replace a method if the UI changes.  &lt;p&gt;o Create a separate &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.uitest.common.uimap.uimap.aspx"&gt;UIMap&lt;/a&gt; file for each module in your application under test. For more information, see &lt;a href="http://msdn.microsoft.com/en-us/library/ff398056.aspx"&gt;Testing a Large Application with Multiple UI Maps&lt;/a&gt;.  &lt;p&gt;o If you are creating assertions by coding with the API, create a method for each assertion in the part of the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.uitest.common.uimap.uimap.aspx"&gt;UIMap&lt;/a&gt; class that is in the UIMap.cs file. Call this method from your test method to execute the assertion.  &lt;p&gt;o Capture screen shots for failures. Helps in debugging.  &lt;p&gt;o Leave the UI in a known state after a test Case is done executing. E.g.: Close the wizard even if the test Case is to test the first screen of a wizard by cancelling out of the wizard after the first screen.  &lt;p&gt;o Validate that the object being created using the UI with the one being stored in the backend system  &lt;p&gt;o Log before you do something, not after.  &lt;p&gt;o In code reviews for test cases, or new framework automation support review the log messages, is it clear what the test did from just the log?  &lt;table cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;p&gt;o Log the origin of messages. If the framework logs, say that it logged, if the test case logged, say that.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;o Have two assertion modes that are configurable: 1. Fail instantly. 2. Delay assertion of failure until the test has completed. Steps might be mutually exclusive, you’re losing coverage.  &lt;p&gt;o Log non-fatal exceptions so as not to abort a test, bubble fatal exceptions up to the test and let the exception assert failure.  &lt;p&gt;o Log every valid UI operation being performed in the test Case.  &lt;p&gt;o Use resource files for all data required to be entered in the UI.  &lt;p&gt;o Use Refactoring: Refactoring implies removing a block of code that is being used repeatedly throughout the program into a single function. This helps in reuse of code and makes the code cleaner, and improves readability.&amp;nbsp; &lt;p&gt;o Use Constructor of classes for meaningful things: In any class avoid unnecessary overloading of constructors. Minimize the amount of work done in a constructor. Constructors should mainly be used for initialization of members. It is always good practice to have accessory methods (get/set) to expose member variables and also initialize them.  &lt;p&gt;o Using string. Compare () instead of "==" or "Equals ()": It is advisable use string.compare() as in that case we don't have to worry about NullPointerException, unlike using Equals() -- you have to make sure that the object that calls Equals() is not null.&amp;nbsp; &lt;p&gt;o Using List&amp;lt;class name&amp;gt; instead of Arrays: Arrays are not type safe, so it is advisable to use the inherent .Net 2.0 collection objects like IList&amp;lt;T&amp;gt;, ICollections&amp;lt;T&amp;gt;. They provide additional type-checking during compile time.  &lt;p&gt;o Use “this.”: Whenever you use a member variable of class, it is a good practice to put "this" in front of the variable. This improves readability and avoids conflicts when the parameter name and the member variable names are same.  &lt;p&gt;o Using .NET attributes for test cases: Attributes provide a mechanism to enable additional data to the Test Code during runtime and it also helps in keeping information associated with the Test Case in the code itself.  &lt;p&gt;&lt;b&gt;Don’t(s):&lt;/b&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;o Do not modify the UIMap.designer.cs file directly. If you do this, the changes to the file will be overwritten.  &lt;p&gt;o Do not log multiple times.  &lt;p&gt;o Do not sleep after every UI operation.  &lt;p&gt;o Do not give unusually long timeouts for every major operation.  &lt;p&gt;o Fail immediately after an unexpected screen.  &lt;p&gt;o Do not re-launch the UI application for every test Case as it is a time consuming process.  &lt;p&gt;o Test cases should never have hard-coded strings. This includes control ids, menu paths, etc. Even control &lt;a href="http://wiki/wikiedit.aspx?topic=Microsoft.Teams.EEG.IDs&amp;amp;return=Microsoft.Teams.EEG.UITestAutomation"&gt;IDs&lt;/a&gt; and menu paths change over time.  &lt;p&gt;o Do not use sleep  &lt;p&gt;o Avoid too many parameters in a Method/Function. It is best practice to avoid passing too many parameters to a function or method. This indicates lack of abstraction. In this case encapsulating the parameters in a separate class or struct may help.  &lt;p&gt;o Avoid Lengthy Functions: If a function is longer than a page, it is a good practice to break it up into smaller functions. However, if the code has a switch statement or straight line code with no loop back, then it is still OK, but in almost all other cases, the code can be simplified by splitting it up into multiple functions.  &lt;p&gt;o Avoid Hard-Coded strings: Avoid the usage of hard coded strings in the code. Instead use the constants utility to store them.  &lt;p&gt;&amp;nbsp; &lt;h3&gt;&lt;a name="_Toc284684659"&gt;&lt;/a&gt;&lt;a name="_Toc293578674"&gt;Appendix&lt;/a&gt;&lt;/h3&gt; &lt;h4&gt;&lt;a name="_Toc293578675"&gt;&lt;/a&gt;&lt;a name="_Pre-Requisites:_Installation_and"&gt;&lt;/a&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;font color="#000000" size="4" face="Arial"&gt;i. Getting Started with VS 2010 Coded UI&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;table border="1" cellspacing="0" cellpadding="0" width="705"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="144"&gt; &lt;p&gt;Getting Started&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="559"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="144"&gt; &lt;p&gt;Online Help&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="559"&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd286726(VS.100).aspx"&gt;Testing the User Interface with Automated UI Tests&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="144"&gt; &lt;p&gt;Forum&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="559"&gt; &lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/vsautotest/threads"&gt;Visual Studio UI Automation Testing (includes CodedUI)&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="144"&gt; &lt;p&gt;Product Overview&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="559"&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/amit_chatterjee/archive/2009/03/14/coded-ui-test.aspx"&gt;Coded UI Test &lt;br&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="144"&gt; &lt;p&gt;Webcasts &amp;amp; Videos&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="559"&gt; &lt;p&gt;&lt;a href="http://channel9.msdn.com/shows/10-4/10-4-Episode-18-Functional-UI-Testing/"&gt;Functional UI Testing&lt;/a&gt;&lt;br&gt;&lt;a href="http://channel9.msdn.com/posts/TheOliver/Visual-Studio-Team-System-2010-Manual-Test-To-Coded-UI-Test/"&gt;Visual Studio Team System 2010: Manual Test To Coded UI Test &lt;br&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="144"&gt; &lt;p&gt;Guidance and References&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="559"&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd380782(VS.100).aspx"&gt;Best Practices for Coded UI Tests&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="144"&gt; &lt;p&gt;Coded UI Test Bloggers&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="559"&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/anutthara/"&gt;Anutthara Bharadwaj&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/gautamg/"&gt;Gautam Goenka &lt;br&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/balagans/"&gt;Balachander G. Subramaniam&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/rubel"&gt;Rubel Singhal &lt;br&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/rituparna/"&gt;Rituparna Paul&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/vstsqualitytools/"&gt;Team Blog&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="144"&gt; &lt;p&gt;What’s new in Beta2&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="559"&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/anutthara/archive/2009/10/25/what-s-new-for-testers-doing-ui-automation-in-vs-2010-beta2.aspx"&gt;What’s new for testers doing UI Automation&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;h4&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;a name="_Toc293578676"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;ii. Visual Studio 2010 Installation&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;This step is required to ensure that environment is setup and configured to get started with automation,  &lt;p&gt;- &lt;i&gt;Installation: Have you installed VS 2010 Ultimate? &lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Go to &lt;/i&gt;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=06a32b1c-80e9-41df-ba0c-79d56cb823f7"&gt;&lt;i&gt;Microsoft.com Download page&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;- &lt;i&gt;Installation: Have you installed VS 2010 Feature Pack 2&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Refer to &lt;/i&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/ff655021.aspx"&gt;&lt;i&gt;http://msdn.microsoft.com/en-us/vstudio/ff655021.aspx&lt;/i&gt;&lt;/a&gt;&lt;i&gt; to find out new features in FP2&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;- &lt;i&gt;Installation: Have you connected to you Source control (TFS node)?&lt;/i&gt;  &lt;p&gt;&lt;i&gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;Go to VS 2010 Ultimate -&amp;gt; Team -&amp;gt; Connect to Team Foundation Server&lt;/i&gt;  &lt;p&gt;&lt;i&gt;Add your TFS server name, Choose Project Collection, Select your team project and say Connect&lt;/i&gt;  &lt;p&gt;&amp;nbsp; &lt;h4&gt;&lt;a name="_Toc293578677"&gt;&lt;/a&gt;&lt;a name="_Automation_Estimation"&gt;&lt;/a&gt;&lt;a name="_TFS_Check-in_Policies"&gt;&lt;/a&gt;&lt;font color="#000000" size="4" face="Arial"&gt;iii. TFS Check-in Policies &amp;amp; Best Practices&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;- Ensure that policies enforced by project administrator are met  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;Tip: For example “comment” must be entered every time checking the code  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-gb/library/ms181460.aspx"&gt;http://msdn.microsoft.com/en-gb/library/ms181460.aspx&lt;/a&gt;  &lt;p&gt;Apart from that, following are available by default  &lt;p&gt;o Builds:&amp;nbsp;&amp;nbsp; Requires that the last build was successful before a check-in.  &lt;p&gt;o Code Analysis:&amp;nbsp; Requires that code analysis is run before check-in.  &lt;p&gt;o Testing Policy:&amp;nbsp; Requires that certain tests are completed before check-in.  &lt;p&gt;o Work Items:&amp;nbsp;&amp;nbsp; Requires that one or more work items be associated with the check-in.  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-gb/library/ms181411.aspx"&gt;http://msdn.microsoft.com/en-gb/library/ms181411.aspx&lt;/a&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-gb/library/ms245460(v=VS.100).aspx"&gt;http://msdn.microsoft.com/en-gb/library/ms245460(v=VS.100).aspx&lt;/a&gt;  &lt;p&gt;- &lt;b&gt;&lt;/b&gt;Ensure that any custom policies enforced by administrator are met.  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;- As a best practice, check-in the files at the end of the day  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;- Code Branching and Merging  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-yHSBr2joRz4/TuPlHU2T3hI/AAAAAAAAGhU/W_lr_tR15Yo/s1600-h/image%25255B245%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-1UjRhKJZ-cg/TuPlItcShhI/AAAAAAAAGhc/SVi0FzpX3jI/image_thumb%25255B148%25255D.png?imgmax=800" width="616" height="206"&gt;&lt;/a&gt;  &lt;p&gt;One of the most common branching strategies is to align branches with product releases. A branch holds all the software development assets for a single release. Occasionally, you must merge updates from one release to another, but they usually never merge. You discontinue a branch when you discontinue its release.  &lt;p&gt;The mechanics of branching in TFS are simplified to a single right-click à Branching and Merging | Branch command.  &lt;p&gt;Figure 6: &lt;a href="http://tfsbranchingguideiii.codeplex.com/"&gt;Courtesy: ALM Rangers Codeplex Branching guidance&lt;/a&gt;  &lt;p&gt;If you have more than one work (DEVELOPMENT) branch, forward integration to all work branches should occur as soon as any branch integrates into the MAIN branch. Because the MAIN branch is kept stable, forward integration is safe..  &lt;p&gt;Refer to &lt;a href="http://msdn.microsoft.com/en-us/library/ee782536.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee782536.aspx&lt;/a&gt; and &lt;a href="http://tfsbranchingguideiii.codeplex.com/"&gt;http://tfsbranchingguideiii.codeplex.com/&lt;/a&gt; for detailed guidance from ALM Rangers team  &lt;p&gt;&lt;b&gt;&lt;/b&gt; &lt;p&gt;- &lt;b&gt;Ensure Reverse Integration and Forward Integration process when multiple teams (Onsite Offshore are working together on same engagement)&lt;/b&gt;  &lt;p&gt;FORWARD INTEGRATE (FI) – merges from parent to child branches.  &lt;p&gt;REVERSE INTEGRATE (RI) – merges from child to parent branches  &lt;p&gt;Refer to &lt;a href="http://branchingguidance.codeplex.com/wikipage?title=Code%20Promotion%20Best%20Practices"&gt;http://branchingguidance.codeplex.com/wikipage?title=Code%20Promotion%20Best%20Practices&lt;/a&gt;  &lt;p&gt;- &lt;b&gt;Gated Check-ins: Ensure the solution is built before the automation code check-in&lt;/b&gt;&lt;b&gt;&lt;/b&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-inbSXcvy2uA/TuPlK_NlXbI/AAAAAAAAGhk/EFPO7YtVANo/s1600-h/image%25255B246%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-fjgoAMmk9jg/TuPlNyGFPZI/AAAAAAAAGhs/W41SGIOZQ_U/image_thumb%25255B149%25255D.png?imgmax=800" width="647" height="378"&gt;&lt;/a&gt;  &lt;p&gt;By using a gated check-in for the MAIN branch, you help make the reverse integration much easier because quality gates help avoid conflicts or errors in the MAIN branch. For more information, see &lt;a href="http://msdn.microsoft.com/en-us/library/dd794776.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd794776.aspx&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/b/patcarna/archive/2009/06/29/an-introduction-to-gated-check-in.aspx"&gt;http://blogs.msdn.com/b/patcarna/archive/2009/06/29/an-introduction-to-gated-check-in.aspx&lt;/a&gt;  &lt;p&gt;&lt;a href="http://intovsts.net/2010/04/18/the-gated-check-in-build-in-tfs2010/"&gt;http://intovsts.net/2010/04/18/the-gated-check-in-build-in-tfs2010/&lt;/a&gt;  &lt;p&gt; &lt;p&gt;When this trigger is selected for a build definition, any check-in that is made to a file that is mapped in the associated workspace will trigger a verification build. If the build succeeds, the changes will be submitted to the repository. If the build fails, the changes are not allowed to be submitted and must be fixed and resubmitted.  &lt;h4&gt;&lt;a name="_Toc276381721"&gt;&lt;/a&gt;&lt;a name="_Toc293578678"&gt;&lt;/a&gt;&lt;a name="_Getting_Started"&gt;&lt;/a&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;font color="#000000" size="4" face="Arial"&gt;iv. Coded UI Frameworks&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;table border="1" cellspacing="0" cellpadding="0" width="751"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="202"&gt; &lt;p&gt;Details of each UI Framework Supported - Differences, Known Issues and Workarounds&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="547"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="202"&gt; &lt;p&gt;Web&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="547"&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vstsqualitytools/archive/2010/04/13/uitest-framework-ie-plugin-part-1.aspx"&gt;IE Plugin Part 1&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/vstsqualitytools/archive/2010/04/13/uitest-framework-ie-plugin-part-2.aspx"&gt;IE Plugin Part 2&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/vstsqualitytools/archive/2010/04/15/uitest-framework-mozilla-firefox-support-in-vs-2010.aspx"&gt;UI Test Framework Firefox support&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="202"&gt; &lt;p&gt;WinForms&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="547"&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vstsqualitytools/archive/2010/04/13/uitest-framework-winforms-plugin-part-1.aspx"&gt;WinForms Plugin Part 1&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/vstsqualitytools/archive/2010/04/13/uitest-framework-winforms-plugin-part-2.aspx"&gt;WinForms Plugin Part 2&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="202"&gt; &lt;p&gt;WPF&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="547"&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vstsqualitytools/archive/2010/04/13/uitest-framework-wpf-plugin-part-1.aspx"&gt;WPF Plugin Part 1&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/vstsqualitytools/archive/2010/04/13/uitest-framework-wpf-plugin-part-2.aspx"&gt;WPF Plugin Part 2&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="202"&gt; &lt;p&gt;SharePoint&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="547"&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vstsqualitytools/archive/2010/04/15/uitest-framework-sharepoint-support-for-vs-2010.aspx"&gt;UI Test Framework Sharepoint support&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="202"&gt; &lt;p&gt;MFC/Win32&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="547"&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/vstsqualitytools/archive/2010/04/15/uitest-framework-mfc-support-in-vs-2010.aspx"&gt;UI Test Framework MFC support&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;h4&gt;&lt;a name="_Toc293578679"&gt;&lt;/a&gt;&lt;a name="_Managing__common"&gt;&lt;/a&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;font color="#000000" size="4" face="Arial"&gt;v. Managing common libraries in TFS&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;All common code and libraries to be maintained at a centralized node which wil be accessible (read-only) to all the projects/apps to be included for reusability.  &lt;p&gt;Note: Only the automation group member will have the add/edit permission on this node to control the change.  &lt;p&gt;Common TFS Project &amp;amp; Node: &amp;lt; placeholder &amp;gt;  &lt;p&gt;Library Path: Automation/Libraries  &lt;p&gt;&amp;nbsp; &lt;h4&gt;&lt;a name="_Toc293578680"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;vi. Data driven testing&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;Use below link if you need more information about Data driven testing using Coded UI and access/store data in MS EXCEL from Coded UI  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/mathew_aniyan/archive/2009/03/17/data-driving-coded-ui-tests.aspx"&gt;Data Driven Testing by Mathew&lt;/a&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee624082(VS.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/ee624082(VS.100).aspx&lt;/a&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163536.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/cc163536.aspx&lt;/a&gt;  &lt;p&gt;&amp;nbsp; &lt;h4&gt;&lt;a name="_Toc293578681"&gt;&lt;/a&gt;&lt;a name="_Managing_object_repository"&gt;&lt;/a&gt;&lt;font color="#000000" size="4" face="Arial"&gt;vii. Managing object repository using UI Test Editor&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;This is a new feature launched in FP2 which lets you better manage your object repository.  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-1dLzhrJGR3E/TuPlO2blcSI/AAAAAAAAGh0/YoY_u6-DKm4/s1600-h/image%25255B247%25255D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-LDZ9kNJ9tok/TuPlRFeVlrI/AAAAAAAAGh8/T4a7U4hEyNM/image_thumb%25255B150%25255D.png?imgmax=800" width="733" height="360"&gt;&lt;/a&gt;  &lt;p&gt;The Coded UI Test Editor toolbar offers the following commands:  &lt;p&gt;1. Find helps to locate UI actions and controls.  &lt;p&gt;2. &lt;a href="http://msdn.microsoft.com/en-us/library/gg269461.aspx"&gt;Delete&lt;/a&gt; removes unwanted UI actions.  &lt;p&gt;3. Rename changes the names for test methods and controls.  &lt;p&gt;4. Properties Opens the Properties Window for selected item.  &lt;p&gt;5. &lt;a href="http://msdn.microsoft.com/en-us/library/gg269465.aspx"&gt;Split into a new method&lt;/a&gt; lets you modularize the UI actions.  &lt;p&gt;6. &lt;a href="http://msdn.microsoft.com/en-us/library/gg269473.aspx"&gt;Move Code&lt;/a&gt; adds custom code to your test methods.  &lt;p&gt;7. &lt;a href="http://msdn.microsoft.com/en-us/library/gg316453.aspx"&gt;Insert Delay Before&lt;/a&gt; adds a pause prior to a UI action specified in milliseconds.  &lt;p&gt;8. &lt;a href="http://msdn.microsoft.com/en-us/library/gg269460.aspx"&gt;Locate the UI Control&lt;/a&gt; identifies the location of the control in the UI of application under test.  &lt;p&gt;9. &lt;a href="http://msdn.microsoft.com/en-us/library/gg269467.aspx"&gt;Locate All&lt;/a&gt; helps to verify control property and significant changes to the application’s controls.  &lt;p&gt;Refer to: &lt;a href="http://msdn.microsoft.com/en-us/library/gg269469.aspx"&gt;http://msdn.microsoft.com/en-us/library/gg269469.aspx&lt;/a&gt;  &lt;p&gt;&amp;nbsp; &lt;h4&gt;&lt;a name="_Toc293578682"&gt;&lt;/a&gt;&lt;a name="_Toc284684672"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;viii. Extending Coded UI&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;VS 2010 Coded UI support extensibility for technologies which are not supported out-of-the-box like Excel or custom controls.  &lt;p&gt;Refer this example for WPF calendar support  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/tapas_sahoos_blog/archive/2010/12/10/adding-new-control-support-in-a-coded-ui-test-plugin.aspx"&gt;http://blogs.msdn.com/b/tapas_sahoos_blog/archive/2010/12/10/adding-new-control-support-in-a-coded-ui-test-plugin.aspx&lt;/a&gt;  &lt;h4&gt;&lt;a name="_Toc293578683"&gt;&lt;/a&gt;&amp;nbsp;&lt;/h4&gt; &lt;h4&gt;&lt;a name="_Toc284684689"&gt;&lt;font color="#000000" size="4" face="Arial"&gt;ix. Support &amp;amp; Help&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;- Discussion forum (External)  &lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en/vsautotest/threads"&gt;http://social.msdn.microsoft.com/Forums/en/vsautotest/threads&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-3783220994706732802?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/3783220994706732802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=3783220994706732802' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/3783220994706732802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/3783220994706732802'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2011/12/test-automation-guidance-using-vs-2010.html' title='Test Automation Guidance using VS 2010 Coded UI'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-58Hgo-7mWLA/TuPjBKuUSkI/AAAAAAAAGV8/ZgK9_-YglQA/s72-c/clip_image001_thumb.gif?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-2313746290515153120</id><published>2011-12-10T23:34:00.001+05:30</published><updated>2011-12-10T23:37:42.795+05:30</updated><title type='text'>Intelligent selection of test data by applying learning from Marketing Research</title><content type='html'>&lt;h3&gt;&amp;nbsp;&lt;/h3&gt; &lt;p&gt;1. &lt;a href="http://msdn.microsoft.com/en-us/library/gg276342#Abstract"&gt;Abstract&lt;/a&gt; &lt;p&gt;2. &lt;a href="http://msdn.microsoft.com/en-us/library/gg276342#ProspectsHotCandidates"&gt;Prospects Hot Candidates&lt;/a&gt; &lt;p&gt;3. &lt;a href="http://msdn.microsoft.com/en-us/library/gg276342#ProposedSolution"&gt;Proposed Solution&lt;/a&gt; &lt;p&gt;4. &lt;a href="http://msdn.microsoft.com/en-us/library/gg276342#Process"&gt;Process: Intelligent Sampling Process Flow &amp;amp; Engine&lt;/a&gt; &lt;p&gt;5. &lt;a href="http://msdn.microsoft.com/en-us/library/gg276342#SamplingAlgorithmsselectedforDatabaseSampling"&gt;Sampling Algorithms selected for Database Sampling&lt;/a&gt; &lt;p&gt;6. &lt;a href="http://msdn.microsoft.com/en-us/library/gg276342#BenefitAnalysisfortheselectedalgorithms"&gt;Cost/Benefit Analysis for the selected algorithms&lt;/a&gt; &lt;p&gt;7. &lt;a href="http://msdn.microsoft.com/en-us/library/gg276342#ExtendedFeatures"&gt;Extended Features&lt;/a&gt; &lt;p&gt;8. &lt;a href="http://msdn.microsoft.com/en-us/library/gg276342#Benefits"&gt;Benefits&lt;/a&gt; &lt;p&gt;9. &lt;a href="http://msdn.microsoft.com/en-us/library/gg276342#References"&gt;References&lt;/a&gt; &lt;ol&gt; &lt;li&gt; &lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt; &lt;p&gt;When the data volume is not too huge, the entire data of the population can be validated as a part of the test phase (Unit testing/ Integration Testing/ System testing). Such a total study gives an excellent confidence on the quality and coverage &lt;strong&gt;which can be very expensive method, because validating all the data involves huge hardware cost, resource dependency and the time required for the completion of the activity&lt;/strong&gt;. &lt;em&gt;Remember, too, that the objectives of a project do not always require an absolutely exact account of the entire population.&lt;/em&gt; &lt;p&gt;Sampling is one approach which can be adopted when the data is voluminous. Note that sampling does not mean that you were not equally interested in all the items in the population. On the contrary, you would like to study all of them, but you pick the sample for practical reasons. Perhaps you have a population of millions of objects and it is impossible to reach even a major part of them. Also in those cases (with populations of, say, up to 10,000) where you might choose to study every object, the sampling study may be a prudent choice, because it saves your time and you can then use the time you save to study the sampled items more carefully. &lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/dynimg/IC435096.jpg" width="642" height="163"&gt; &lt;p&gt;Few months back, we were in the middle of testing our application, which processes more than 1.50 TB of data and takes approx 36 hours of time when we received this great news that Microsoft was voted as the &lt;em&gt;Best Employer&lt;/em&gt; by &lt;em&gt;BT TNS Mercer’s&lt;/em&gt; &lt;a href="http://businesstoday.intoday.in/index.php?option=com_content&amp;amp;task=view&amp;amp;id=9488&amp;amp;sectionid=3&amp;amp;secid=&amp;amp;Itemid=1&amp;amp;issueid=40"&gt;Best Companies to work for in India&lt;/a&gt; &amp;amp; it was no doubt a moment of pride but i wasn’t interviewed and none of my friends were either but it struck us how they were still able to echo our feelings so well (for most of us i spoke to were not surveyed) &lt;p&gt;After thinking it over for a couple of days we realized that this very same concept is very much &lt;strong&gt;applicable to our IT solution as well.&lt;/strong&gt; Why do we have to process 1.5 GB of data and wait for 36 hours to run or why should i make up the data by generating it randomly and taking the risk of compromising on the coverage when i have access to customer/ production equivalent data (non PII)?&lt;br&gt;&lt;strong&gt;&lt;br&gt;The Big Question: &lt;/strong&gt;&lt;br&gt;&lt;strong&gt;“Why didn’t we do intelligent sampling yet?”&lt;/strong&gt; &lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/dynimg/IC435086.jpg" width="644" height="62"&gt; &lt;p&gt;&lt;strong&gt;The Big Question: &lt;br&gt;“Choosing Sample Test Data from Population/ Customer data is not a challenge but how do you ensure that sample is a GOOD sample”&lt;/strong&gt;&lt;br&gt;I agree, “GOOD” is a quite subjective term. Let me rephrase&lt;br&gt;&lt;strong&gt;“How do you ensure that the sample chosen is a GOOD representative of your entire data population?”&lt;/strong&gt;&lt;br&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/dynimg/IC435239.jpg" width="656" height="74"&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;strong&gt;Prospects Hot Candidates:&lt;/strong&gt; &lt;p&gt;Bigger the Size of font in the image below, more is the importance &amp;amp; applicability.&lt;br&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/dynimg/IC435240.jpg" width="691" height="281"&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;strong&gt;Proposed Solution&lt;/strong&gt; &lt;p&gt;Best Sample selection based on your requirement is the true objective. There are multiple solutions in silo to cater to specific scenarios.  &lt;p&gt;What better place to have this solution than in Visual &lt;strong&gt;Studio DbPro&lt;/strong&gt;&lt;br&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/dynimg/IC435241.jpg" width="417" height="378"&gt; &lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/dynimg/IC435247.jpg" width="751" height="402"&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;strong&gt;Process: Intelligent Sampling Process Flow &amp;amp; Engine&lt;/strong&gt; &lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/dynimg/IC435248.jpg" width="750" height="468"&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Selection Criteria&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;i) Population Selection&lt;/strong&gt; &lt;p&gt;The data set which needs to be sampled should be chosen first. This can be chosen based on the parameters of &lt;ol&gt; &lt;li&gt;&lt;strong&gt;&lt;em&gt;Size&lt;/em&gt;&lt;/strong&gt; – the dataset for sampling should be of reasonable size (&amp;gt;500 MB). This is to make the process of data sampling worth the effort  &lt;li&gt;&lt;strong&gt;&lt;em&gt;Complexity&lt;/em&gt;&lt;/strong&gt; – If the dataset to be sampled is of lesser complexity, data generation approaches may be more suitable. It is for complex data set which involves some business rules plus data integrity to be maintained where subset data selection would help.  &lt;li&gt;&lt;strong&gt;&lt;em&gt;Test cases to be run&lt;/em&gt;&lt;/strong&gt; – Subset data selection is for a scenario where number of test cases to be run is high and considerable amount for data regression is required  &lt;li&gt;&lt;strong&gt;&lt;em&gt;Variety in data&lt;/em&gt;&lt;/strong&gt; – The dataset to be sampled contains a variety in data. For Eg. Databases of an enterprise system would be ideal. On the other hand one which contains only Taxonomy related data or domain values may not be suitable for sampling&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;ii) Business Rules / Requirements or user input / Sampling Frame&lt;/strong&gt; &lt;p&gt;Whenever a sample data is selected from an existing database, one needs to ensure that the underlying business rules are intact. In order to cater to negative test case scenarios, some sample breaking the rules is also fine. However on the whole, business rules have to be maintained. &lt;p&gt;Most datasets where sampling is required also have some ‘business rules’ attached to them. For Eg. Expense related calculations may need checks of exchange rates; billing related calculations may need checks of status and so on. If there are business rules which are critical to the transformation of the system to be tested, these can be input by the user, to ensure that the sampling happens accordingly. &lt;p&gt;&lt;strong&gt;iii) Get Expected Cost Associated From Sample from the User.&lt;/strong&gt; &lt;p&gt;The user should also be able to select an expected associated cost to the sample which would be created. This cost would be based on the size/time taken for the sample generation and coverage based on data variety included in the sample. The expected associated cost entered by the user would be used to prioritize on the sample algorithms to be run, which are known to provide the expected cost. Running these algorithms with the expected cost as an input would help reach the required end result and propose different data sampling options to the user.&lt;/p&gt; &lt;li&gt;&lt;strong&gt;Sampling Method&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;i) Data Profiling Required - Domain/Transactional Data&lt;/strong&gt; &lt;p&gt;In order to go for effective sampling, we also recommend categorizing the existing dataset into tables containing ‘Master’&lt;sup&gt;*&lt;/sup&gt; data and those containing transactionaldata.This could be an outcome of the Data Integrity relationship detected, or a step within the sampling engine while applying the algorithm. This categorization helps in selecting required amount of samples from each of these tables as well as selecting an appropriate sampling method. For instance, if a table contains date/calendar information, thus making it fall under a master category, would not need to be sampled or reduced; where as one containing daily transactions of an account can be a candidate for sampling. Detection of data set impacting the coverage is critical before coming up with the sampling plan.This would be done based on &lt;p&gt;1. Profiling the data and checking for columns which contain distinctively unique values which are sure to impact the test case/data coverage. &lt;p&gt;2. Get input from the user based on his prior knowledge. &lt;p&gt;Once this input is provided, save it to use during generating the sampling plans. &lt;p&gt;&lt;strong&gt;ii) Generate Plans with associated cost&lt;/strong&gt; &lt;p&gt;Generate the different plans possible for data selection and provide the‘cost’ associated with it based on the rules applied prior to sampling This cost would be calculated based on following factors: &lt;ul&gt; &lt;li&gt;Expected size of the sample  &lt;li&gt;Expected data coverage of the sample.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The plans along with the indicator of cost associated with each of the plan would be provided to the user. Thereafter, the user could either choose the best recommended plan, or go for another based on his discretion. &lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/dynimg/IC435256.jpg" width="292" height="300"&gt; &lt;p&gt;&lt;strong&gt;iii) User to choose plan or go for regeneration&lt;/strong&gt; &lt;p&gt;If the user is not satisfied with the plans and their cost, he can ask for a regeneration of plan which would involve trying out a different set of inputs or providing different columns for driving data coverage.&lt;/p&gt; &lt;li&gt;&lt;strong&gt;Sampling Engine&lt;/strong&gt; &lt;p&gt;The sampling engine is expected to perform all of the above steps after scanning through the target population, as well as consuming specific inputs provided by the user. Next Steps are: &lt;p&gt;&lt;strong&gt;i. Implementing the sampling plan&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;ii. Reviewing the sampling process&lt;/strong&gt; &lt;p&gt;The sampling engine is the core of the data selection process. Stages involved within the sampling engine: &lt;p&gt;&lt;strong&gt;i) Building the Sampling Rules&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;The sampling rules would be built based on the Data Integrity Checks run on the database as well as after profiling the data for any exceptions to business rules and categorizing data sets into master or transactional.  &lt;li&gt;This could also include setting any delta rule condition (or in other words reducing the scope of data to be sampled&lt;br&gt;&lt;em&gt;When a Data Volume is sampled already, the next time the Sampling Engine Runs on the same dataset, the sample is generated for the new added data rows only. This would save time, effort and money and would give more ROI to the proposed feature inclusion in VSTF DB Pro.&lt;/em&gt; &lt;li&gt;These sampling rules would form the underlying conditions which need to be satisfied by the selected database.  &lt;li&gt;This ensures that after selecting a sample from the source system, when we run our ETL process on it, the ETL should not break due to incorrect sample set.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;ii) Apply algorithm&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;The algorithms chosen for application within the sampling engine are covered in next section (Section 7). Each of the above algorithms would be applied to the source system data and cost for the same would be calculated&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;iii) Calculate Sampling Cost :&lt;/strong&gt; &lt;p&gt;We define sampling cost based on two parameters &lt;ul&gt; &lt;li&gt;Sample Size  &lt;li&gt;Data coverage&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The Sampling Cost would be calculated based on the Size (This could be Row Count of each table available in the sample or the actual Size in MB/GB). This percentage reduction in Size would act as one parameter in Cost. Data Coverage in the sample would be detected differently by differently algorithms. If the algorithm is probabilistic, frequency of data would be a key in determining coverage, if statistical algorithm is used, distinct values in columns would form key criteria and in T-Way, the requirements would be primary. This would be covered in detail in the subsequent section. &lt;p&gt;&lt;strong&gt;iv) Check for correctness and update the Sampling Rules&lt;/strong&gt; &lt;p&gt;Identify if the sample satisfies the basic rules and if the user wishes he/she could opt for re-sampling, and this time fine-tune the rules as well as inputs provided. &lt;p&gt;&lt;strong&gt;v) Log Errors&lt;/strong&gt; &lt;p&gt;Any errors encountered during the process of profiling/sampling method generation would have to be logged and reported.&lt;br&gt;The diagram below shows an end-to-end mock of the screens that could show up during this process of sampling method generation and selection and the various inputs that need to be provided by the user and the actions that take place.&lt;br&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/dynimg/IC435258.jpg" width="771" height="541"&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt; &lt;li&gt; &lt;p&gt;&lt;strong&gt;Sampling Algorithms selected for Database Sampling&lt;/strong&gt; &lt;p&gt;Within any of the types of frame identified above, a variety of sampling methods can be employed, individually or in combination. Factors commonly influencing the choice between these designs include: &lt;ul&gt; &lt;li&gt;&lt;em&gt;Nature and quality of the frame&lt;/em&gt; &lt;li&gt;&lt;em&gt;Availability of auxiliary information about units on the frame&lt;/em&gt; &lt;li&gt;&lt;em&gt;Accuracy requirements, and the need to measure accuracy&lt;/em&gt; &lt;li&gt;&lt;em&gt;Whether detailed analysis of the sample is expected&lt;/em&gt; &lt;li&gt;&lt;em&gt;Cost/operational concerns&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;a) Probabilistic Sampling Methods - Multi-Stage Sampling&lt;/strong&gt; &lt;p&gt;In most real applied application, we would use sampling methods that are considerably more complex than simple methods like (random sampling, cluster, stratified, systematic etc). The most important principle here is that we can combine the simple methods in a variety of useful ways that help us address our sampling needs in the most efficient and effective manner possible. When we combine different probabilistic sampling methods, we call this &lt;strong&gt;Multi-Stage sampling&lt;/strong&gt;. By combining different sampling methods we are able to achieve a rich variety of probabilistic sampling methods that can be used in a wide range of social research contexts. This leads to less Sampling Error by relying on multiple randomizations by choosing random samples of preceding random samples. &lt;p&gt;&lt;strong&gt;3-Stage Multi-Stage Sample Process&lt;/strong&gt; &lt;ol&gt; &lt;li&gt;Select the clusters from the population  &lt;li&gt;Select all strata from each clusters  &lt;li&gt;In next stages, select additional random sample from selected strata units and so on  &lt;li&gt;Finally all ultimate samples selected are chosen&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;b) Statistical Sampling – Purposive Sampling&lt;/strong&gt; &lt;p&gt;The difference between non-probability and &lt;a href="http://www.socialresearchmethods.net/kb/sampprob.php"&gt;probability sampling&lt;/a&gt; is that non-probability sampling does not involve &lt;em&gt;random&lt;/em&gt; selection and probability sampling does. Most sampling methods are purposive in nature because we usually approach the sampling problem with a specific plan in mind. In purposive sampling, we sample with a &lt;em&gt;purpose&lt;/em&gt; in mind. We usually would have one or more specific predefined groups we are seeking. Useful when you need to reach a targeted &lt;strong&gt;sample quickly&lt;/strong&gt; and where &lt;strong&gt;sampling for proportionality is not the primary concern.&lt;/strong&gt; &lt;p&gt;&lt;em&gt;For ex. have you ever run into guys in a mall asking people if they could interview them? Most likely they are conducting a purposive sample. They might be looking for Caucasian females between 30-40 years old as that’s their need and they do that by estimating&lt;/em&gt; &lt;p&gt;One caveat is that you are also likely to overweight subgroups in your population that are more readily accessible. &lt;p&gt;&lt;strong&gt;c) T -Way Sampling Method&lt;/strong&gt; &lt;p&gt;T-way Testing is a type of interaction testing which requires that for each t-way combination of input parameters of a system, &lt;strong&gt;every combination of valid values of these t parameters must be covered by at least one test case&lt;/strong&gt;. It involves selecting test samples in such a manner that it covers all the t-wise interactions between the parameters and the possible values of a given system. &lt;p&gt;&lt;em&gt;For example, Let us consider Employee Entity which contains attributes like Employee Discipline and Employee Role. Also, consider the Country Entity has attributes like CountryName and IsActive. Correspondingly, the possible values Employee Entity and Country Entity are as shown below.&lt;/em&gt; &lt;p&gt;&lt;img title="" alt="" src="http://i.msdn.microsoft.com/dynimg/IC435266.jpg"&gt; &lt;p&gt;The total Number of Combinations possible for values between Employee and Country = 3*2*3*2 = &lt;strong&gt;36&lt;/strong&gt; combinations. We can also say, that our code will work if I have &lt;strong&gt;1&lt;/strong&gt; combination, but neither of them strikes an optimal balance between Quality Assurance and Delivery! &lt;p&gt;&lt;u&gt;Applying the t-way testing methodology and setting t=2, we get the Dataset which has only &lt;strong&gt;9&lt;/strong&gt; combinations&lt;/u&gt; &lt;p&gt;&lt;img title="" alt="" align="left" src="http://i.msdn.microsoft.com/dynimg/IC467231.jpg"&gt;&lt;br&gt;Similarly, when t=3, the number of combinations increase but the data coverage also increases and hence the sample size increases, and it strikes an optimal balance between the size of the dataset and the code coverage. A sample run would generate &lt;strong&gt;14&lt;/strong&gt; records for the current example.&lt;br&gt;We propose, set t=3 to find out the optimal data combination both in terms of coverage and time.&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;strong&gt;Cost/Benefit Analysis for the selected algorithms&lt;/strong&gt; &lt;p&gt;This section will be used internally by the system to determine best algorithm for a selected population by doing a cost/benefit of each algorithm statistically &lt;p&gt;&lt;strong&gt;a) Cost Benefit for Statistical Algorithms&lt;/strong&gt; &lt;p&gt;&lt;img title="" alt="" src="http://i.msdn.microsoft.com/dynimg/IC435284.jpg"&gt;&lt;br&gt;&lt;img title="" alt="" src="http://i.msdn.microsoft.com/dynimg/IC435285.jpg"&gt; &lt;p&gt;&lt;strong&gt;b) Cost Benefit for Statistical Algorithms&lt;/strong&gt; &lt;p&gt;&lt;img title="" alt="" src="http://i.msdn.microsoft.com/dynimg/IC435286.jpg"&gt;&lt;br&gt;&lt;img title="" alt="" src="http://i.msdn.microsoft.com/dynimg/IC435291.jpg"&gt; &lt;p&gt;&lt;strong&gt;c) Cost Benefit for T-Way Algorithm&lt;/strong&gt; &lt;p&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/dynimg/IC435292.jpg" width="960" height="239"&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;strong&gt;Extended Features:&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;7.1 Avoid Re-sampling of the Sampled Data to increase data coverage&lt;/strong&gt; &lt;p&gt;Sampling schemes should be generally defaulted to Without Replacement (‘&lt;strong&gt;WOR’&lt;/strong&gt;). No element should be re-selected more than once in the subsequent sampling attempts if it’s already sampled in one of the past attempts &lt;em&gt;(unless RESAMPLI NG = 1 is explicitly configured by the user).&lt;/em&gt; By Default, Re-Sampling Flag is set to 0 to ensure that already sampled data doesn’t always get picked in every sample run and rest of the data should get a fair chance of getting selected. &lt;p&gt;&lt;em&gt;For example, if we catch fish, measure them, and immediately return them to the water before continuing with the sample, this is a WR design, because we might end up catching and measuring the same fish more than once. However, if we do not return the fish to the water (e.g. if we eat the fish), this becomes a WOR design.&lt;/em&gt; &lt;p&gt;Marking already sampled data helps ensuring that the already sampled data is not picked in the future runs unless we run out of data. This basically follows the assumption that the sampling method chosen by the user / system picks the best available sample for the first run but say for the second run we don’t want to pick the already sampled data (selected based on run #) and so on. &lt;p&gt;&lt;img title="" alt="" src="http://i.msdn.microsoft.com/dynimg/IC436263.jpg"&gt; &lt;p&gt;&lt;strong&gt;7.2 Weighted Sampling&lt;/strong&gt; &lt;p&gt;Weights can be provided by the user in the proposed user configuration settings to give more value / importance to a specific column which is more important based on the business need. &lt;p&gt;&lt;img title="" alt="" src="http://i.msdn.microsoft.com/dynimg/IC436230.jpg"&gt; &lt;p&gt;More generally, data should usually be weighted if the sample design does not give each individual an equal chance of being selected. In many situations the sample fraction may be varied by stratum and data will have to be weighted to correctly represent the population. &lt;p&gt;&lt;em&gt;Real World Example, a simple random sample of individuals in the United Kingdom might include some in remote Scottish islands who would be inordinately expensive to sample. A cheaper method would be to use a stratified sample with urban and rural strata. The rural sample could be under-represented in the sample, but weighted up appropriately in the analysis to compensate.&lt;/em&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;b&gt;Benefits&lt;/b&gt; &lt;p&gt;The following are direct /indirect benefits to the various stakeholders like Dev, Test, PM’s &amp;amp; Business Community. &lt;ul&gt; &lt;li&gt;Overall Test Execution Time Reduction  &lt;li&gt;Higher Requirement &amp;amp; Test Coverage  &lt;li&gt;Higher Code Coverage  &lt;li&gt;Effective Unit Testing &amp;amp; Functional Testing -Boundary Values, Equivalence Partitioning  &lt;li&gt;Reduces Hardware Cost for IT  &lt;li&gt;High confidence while delivering to Test, UAT &amp;amp; Production  &lt;li&gt;Increased Domain knowledge &amp;amp; business understanding of the resource while choosing &amp;amp; profiling the sample data  &lt;li&gt;Earlier detection of potential Data Quality issues by analyzing the data (while profiling) for sampling&lt;/li&gt;&lt;/ul&gt; &lt;li&gt; &lt;p&gt;&lt;strong&gt;References&lt;/strong&gt; &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Sampling_(statistics)"&gt;http://en.wikipedia.org/wiki/Sampling_%28statistics%29&lt;/a&gt; &lt;p&gt;&lt;a href="http://doi.acm.org/10.1145/1102351.1102456"&gt;http://doi.acm.org/10.1145/1102351.1102456&lt;/a&gt; &lt;p&gt;&lt;a href="http://www.ai.mit.edu/projects/jmlr/papers/volume3/scheffer02a/scheffer02a.pdf"&gt;http://www.ai.mit.edu/projects/jmlr/papers/volume3/scheffer02a/scheffer02a.pdf&lt;/a&gt; &lt;p&gt;&lt;a href="http://www.uiah.fi/projects/metodi/152.htm"&gt;http://www.uiah.fi/projects/metodi/152.htm&lt;/a&gt; &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Quantitative_marketing_research"&gt;http://en.wikipedia.org/wiki/Quantitative_marketing_research&lt;/a&gt; &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Expectation-maximization_algorithm"&gt;http://en.wikipedia.org/wiki/Expectation-maximization_algorithm&lt;/a&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/EM_Algorithm"&gt;http://www.gabormelli.com/RKB/EM_Algorithm&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;Authors&lt;/strong&gt; &lt;p&gt;Raj Kamal (&lt;strong&gt;&lt;a href="mailto:rajkamal@microsoft.com"&gt;rajkamal&lt;/a&gt;&lt;/strong&gt;)      &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-2313746290515153120?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/2313746290515153120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=2313746290515153120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/2313746290515153120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/2313746290515153120'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2011/12/intelligent-selection-of-test-data-by.html' title='Intelligent selection of test data by applying learning from Marketing Research'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-4303499333337098248</id><published>2011-12-10T21:19:00.001+05:30</published><updated>2011-12-11T00:10:35.873+05:30</updated><title type='text'>Web Services Test Automation Guidance using VS 2010 - Unit Test &amp; Web Test</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;All your wait is over. Finally its out &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh5.ggpht.com/-2aVkEUqOms0/TuN_XGOxOVI/AAAAAAAAGVI/Q3weIEGFw3k/wlEmoticon-smile%25255B2%25255D.png?imgmax=800"&gt;&amp;nbsp; &lt;a title="http://www.webservicestesting.codeplex.com/" href="http://webservicestesting.codeplex.com/"&gt;http://webservicestesting.codeplex.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;lt;&amp;lt;Please refer to Web Services Automation Guidance (VS 2010 Unit Test &amp;amp; Web Test).PDF &lt;a href="http://webservicestesting.codeplex.com/releases/view/78473#DownloadId=312126"&gt;http://webservicestesting.codeplex.com/releases/view/78473#DownloadId=312126&lt;/a&gt; for detailed documentation&amp;gt;&amp;gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-0yMRjNr6h0M/TuN_ZClWF-I/AAAAAAAAGVg/xjLi2yggr7M/s1600-h/clip_image001%25255B11%25255D.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://lh4.ggpht.com/-HTJ3RoopObE/TuN_bB2cbLI/AAAAAAAAGVk/x83iSo5F1yw/clip_image001_thumb%25255B6%25255D.jpg?imgmax=800" width="515" height="338"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The artifact will provide Web Services Automation guidance for Functional &amp;amp; Performance Testing leveraging VS 2010. The document will provide recommendation on using either Unit Test or Web Test for functional testing depending on your project and test objective as will be later covered in the document. Load Test will be used for Performance Testing in both cases. &lt;br&gt;&lt;/p&gt; &lt;p&gt;The primary objective is to propose a viable web services test automation approach &amp;amp; reusable libraries to customers, partners and consultant. It will also be a step in standardizing web services automation using VS 2010 platform across the Industry and filling the gaps by extending our tools as suggested in the talk. The document can also be used as a quick jump start guide for beginners to get started on Web Services Automation Testing. &lt;br&gt;&lt;/p&gt; &lt;p&gt;Have fun guys. We want to hear from you.  &lt;p&gt;Thanks,  &lt;p&gt;Raj, Vipul, Ranjit &amp;amp;&amp;nbsp; Gunjan&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-4303499333337098248?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/4303499333337098248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=4303499333337098248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/4303499333337098248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/4303499333337098248'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2011/12/web-services-test-automation-guidance.html' title='Web Services Test Automation Guidance using VS 2010 - Unit Test &amp;amp; Web Test'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-2aVkEUqOms0/TuN_XGOxOVI/AAAAAAAAGVI/Q3weIEGFw3k/s72-c/wlEmoticon-smile%25255B2%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-1146583137559928213</id><published>2011-03-03T10:39:00.001+05:30</published><updated>2011-03-03T10:39:58.657+05:30</updated><title type='text'>Microsoft Case Study: Visual Studio 2010 Automation Testing (Raj Kamal)</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;“We wanted a test process that would be faster and more productive. We achieved that by using the automated tools in Visual Studio 2010.” &lt;p&gt;Raj Kamal&lt;br&gt;BI Engineering Automation Team Lead, Microsoft IT &lt;p&gt;&lt;a title="http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?CaseStudyID=4000009261" href="http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?CaseStudyID=4000009261"&gt;http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?CaseStudyID=4000009261&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-1146583137559928213?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/1146583137559928213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=1146583137559928213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/1146583137559928213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/1146583137559928213'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2011/03/microsoft-case-study-visual-studio-2010.html' title='Microsoft Case Study: Visual Studio 2010 Automation Testing (Raj Kamal)'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-2905548951729377755</id><published>2010-12-30T13:30:00.001+05:30</published><updated>2010-12-30T13:30:52.413+05:30</updated><title type='text'>Testability: ‘Black Box’ required for ‘Black Box’ testing</title><content type='html'>&lt;blockquote&gt; &lt;p align="left"&gt;&lt;i&gt;Can’t see the forest for the trees&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;h3&gt;&amp;nbsp;&lt;/h3&gt; &lt;h3&gt;&lt;a name="_Toc273693665"&gt;&lt;font size="3" face="Segoe"&gt;&lt;font style="font-weight: bold"&gt;Thought&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;“&lt;i&gt;We don’t have runway left&lt;/i&gt;,” said his co-pilot HS Ahluwalia – the last thing recorded in the cockpit. The&lt;a href="http://www.thenational.ae/apps/pbcs.dll/article?AID=/20100910/NATIONAL/709099858/1139"&gt; plane&lt;/a&gt; then plunged into a forested gorge and was engulfed in flames. Black box only helped unravel the truth that captain ignored co-pilot's plea to abort landing which led to this unfortunate event. &lt;/p&gt; &lt;p&gt;This was nudging me for quite some time and I was thinking when we testers test all the time (&lt;i&gt;and lot of which is of type ‘black box’&lt;/i&gt;) and ironically, we don’t have a ‘&lt;i&gt;black box’&lt;/i&gt; present in most of our IT applications. While testing complex systems, teams end up spending a good amount of time figuring out what’s happening under the hood in order to determine the application’s actual behaviour &amp;amp; this is especially true when a production issue pops up and it takes a lot of time for support &amp;amp; test to not only repro the issue but also to find out what would have happened behind the scenes to quickly find out the root cause so that the fix can be provided (&lt;i&gt;if required&lt;/i&gt;) while customers can’t stop biting their nails waiting to hear from IT.&lt;/p&gt; &lt;p&gt;And then while researching on the topic I stumbled upon this:&lt;/p&gt; &lt;p&gt;&lt;i&gt;“Think of it as a flight data recorder, so that any time there's a problem, that 'black box' is there helping us work together and diagnose what's going on,"&lt;/i&gt; &lt;i&gt;Bill Gates&lt;/i&gt; said during a speech at the &lt;a href="http://news.cnet.com/Show-and-tell-for-Microsoft/2009-1016_3-5683422.html"&gt;Windows Hardware Engineering Conference&lt;/a&gt;. I understand Bill was saying this from Windows point of view but isn’t this if not more but at least equally applicable to IT apps where we want to reduce the development and support cost? Shouldn’t we have a “black box” too to enable our testers do “black box” testing in lesser time?&lt;/p&gt; &lt;p&gt;This paper will be targeting testability for machines &lt;i&gt;(by ensuring automation tools can validate the implementation of feature with reliability &amp;amp; ease&lt;/i&gt;) and humans (&lt;i&gt;customers&lt;/i&gt;, &lt;i&gt;users, testers and developers)&lt;/i&gt; at system level in the given test context.  &lt;table cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td width="36"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&amp;nbsp;&lt;/td&gt; &lt;td&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ffc000"&gt;&lt;em&gt;“Testability helps as “Every Test hour saved is a Microsoft hour saved&lt;/em&gt;”&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a name="_Toc273693666"&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ffc000"&gt;“Situation is very similar to that of a man who doesn’t even know that he is suffering from some serious disease while instead of going for check-up he blames other factors for his weakness and such symptoms “&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;For “&lt;i&gt;poor testability”&lt;/i&gt; in many scenarios acts as a slow poison (&lt;i&gt;&amp;amp; not always comes as a sudden death&lt;/i&gt;), it is often hard to detect the same &amp;amp; testers, who might be ignorant of the fact, can attribute it to the wrong problems and will keep trying to address their pain points by working out solutions &lt;i&gt;such as stretching extra hours, hiring more resources, expensive automation, risk based testing, need for better estimation and planning etc.&lt;/i&gt; without any real long term success. This vicious cycle keep haunting them release over release. &lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;The point is that lot of teams don’t even realize testability is their pain point and hence it doesn’t get the attention it truly deserves.&lt;/i&gt;&lt;/p&gt; &lt;p&gt;And for the testers who do realize testability is their culprit, they know better that it is difficult to fix testability, once the damage is already done (for legacy apps) &amp;amp; its keeps getting procrastinated forever as cleansing code is NOT fancy, fashionable &amp;amp; most importantly it’s not cheap. Even when our development team acts like Good Samaritans &amp;amp; come to tester’s rescue to offer refactoring/redesigning to improve the testability (&lt;i&gt;lot of good stuff has been written by testability gurus like &lt;/i&gt;&lt;a href="http://googletesting.blogspot.com/2008/10/testability-explorer-measuring.html"&gt;&lt;i&gt;Misko&lt;/i&gt;&lt;/a&gt;&lt;i&gt;)&lt;/i&gt;, but interestingly &amp;amp; surprisingly, the test teams &amp;amp; customers might not necessarily always agree for the obvious reasons as it will can be risky to make changes in a functional product &amp;amp; running the risk of introducing any regression issues which can’t be adequately tested due to lack of time &amp;amp; they might settle to live with bad testability. &lt;/p&gt; &lt;p&gt;Testability if not tackled right from design phase of the application then it can be a major problem to handle them in future releases and this paper focuses on improving testability for not only V1 project but also for legacy applications where testability can still be improved by proposing solutions other than design changes.&lt;/p&gt; &lt;h3&gt;&lt;a name="_Toc273693667"&gt;&lt;font size="3" face="Segoe"&gt;&lt;font style="font-weight: bold"&gt;Scope: Testability @ System Layer (Black Box)&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;In real world, testing is nothing but attempting to USE the product and sincerely hoping it to work and not being able to determine the behaviour reliably and getting stuck (I call it ‘&lt;i&gt;unintentional discoverability of poor testability’&lt;/i&gt;). Now testers are customer’s best friends (or so we want them to be), who get paid to put themselves in end-user’s shoes to test the product from their point of view &amp;amp; hence testability is quite important at this layer because this is how the product is going to be used in real world. The challenge &lt;a href="http://en.wikipedia.org/wiki/Design_For_Test"&gt;DFT&lt;/a&gt; (Design for Test) is facing today is the need to look beyond component level &amp;amp; focus on system requirements, &amp;amp; the life cycle maintenance support. This brings in the need to ensure testability at system level despite of the fact that testability is easier to perform at granular level for controllability and observability. &lt;/p&gt; &lt;p&gt;A products user interface is one of the most challenging areas to increase testability. It’s also the place where our customers will be using the most. It’s important to make your user interface code as testable as possible.&lt;/p&gt; &lt;p&gt;Testability is more important than ever at functional layer because of the correlation that exists between Testability and other crucial factors like usability, accessibility, security and discoverability.&lt;/p&gt; &lt;p&gt;As usual, there's no silver bullet; some approaches may be better, but there's always some limitation that blocks from adopting in all possible contexts. There is lot of great stuff written on the use of DFT, TDD, Mock Objects, Emulation Layers and Test Plug-ins for improving testability but for the scope of this discussion we are not covering those.&lt;/p&gt; &lt;h3&gt;&lt;a name="_Toc273693668"&gt;&lt;font size="3" face="Segoe"&gt;&lt;font style="font-weight: bold"&gt;Solutions&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;To improve automated testability, we will talk about few solutions including building a ‘black box’, merging test and development code and intelligent selection of test data&lt;/p&gt; &lt;h4&gt;&lt;/h4&gt; &lt;h4&gt;&lt;a name="_Toc273693669"&gt;&lt;font size="3" face="Segoe"&gt;Developing ‘Black box’&lt;/font&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;‘Black Box’ can be developed using Test Hooks. Test hooks are quite different from Mock Objects, however.&amp;nbsp; Hooks are significant anytime you need to find the details of any process&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;font color="#ffc000"&gt;“Good test hooks are one of those "I'll know it when I see it" things.&amp;nbsp; Basically, if it gives you the data you need when you need it, it’s good”&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;There can be two kinds of applications where ‘black box’ can be very useful especially for (a):&lt;/p&gt; &lt;p&gt;&lt;i&gt;a) &lt;/i&gt;&lt;i&gt;Applications with Thick UI&lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;If you system’s business logic is separated from UI you can directly hit the web services / API to test the logic with the help of custom harness BUT if not then you need a way to tunnel through the UI and other layers to reach the business logic. &lt;/i&gt;That’s when testability at system layer (UI) sometime become extremely important for applications having business logic present inside the UI layer as well (&lt;i&gt;though which is not a good practice but for legacy apps it might be true. &lt;/i&gt;&lt;/p&gt; &lt;p&gt;b) Applications with Thin UI&lt;/p&gt; &lt;p&gt;A test hook can be useful here even if you are calling the APIs directly; for ex., you can find out the specific intermediate results.&lt;/p&gt; &lt;h6&gt;&lt;font size="2" face="Segoe"&gt;Approaches:&lt;/font&gt;&lt;/h6&gt; &lt;p&gt;While developing black box to increase the visibility, you need to focus on “&lt;i&gt;Observability&lt;/i&gt;” and “&lt;i&gt;Controllability&lt;/i&gt;” components of the classic SOCK model from ‘black box’ point of view. Observability here is watching system behaviour and reaction for each input given to the application &amp;amp; Controllability is primarily your ability to control the state and execution path of your application.&lt;/p&gt; &lt;p&gt;&lt;a name="_Toc273693670"&gt;&lt;font color="#0066dd"&gt;Adding (optional) detailed logging using Test Hooks&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Turning on/off option for detailed logging will help in &lt;i&gt;observability&lt;/i&gt;:&lt;/p&gt; &lt;p&gt;i) Validating business logic when there are lot of intermediate steps involved and the testers want to validate the logic at each step then this can be instrumental in going and tracking it exactly as it happens.&lt;/p&gt; &lt;p&gt;ii) Visualization of application execution flow (&lt;i&gt;behind-the-scene-action&lt;/i&gt;) and understanding what’s exactly happening under the hood and when (e.g. timestamps). This will avoid the need to make guesses and investigating various layer one by one to find out the real culprit&lt;/p&gt; &lt;p&gt;iii) This can also be used as a kind of &lt;i&gt;self-documentation&lt;/i&gt; of the features where someone new in the team can understand the application data and control flow by just looking at these elaborate logs.&lt;/p&gt; &lt;p&gt;&lt;a name="_Toc273693671"&gt;Optional parameters to override default settings&lt;/a&gt;&lt;/p&gt; &lt;p&gt;This can improve &lt;i&gt;controllability&lt;/i&gt; when let’s say tester want to change the default timeout by overriding it so that the test can be run faster. These additional parameters will empower our tester to control the state of the application which can be used to easily test the application.&lt;/p&gt; &lt;p&gt;&lt;a name="_Toc273693672"&gt;Adding “Self-Testable” features&lt;/a&gt;&lt;/p&gt; &lt;p&gt;These can be the methods explicitly written and added to the code and they will be publically exposed and documented as features so that testers/support or even users can run these to diagnose the behaviour of basic yet critical functionalities.  &lt;table cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td width="74"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&amp;nbsp;&lt;/td&gt; &lt;td&gt;&lt;font color="#ffc000"&gt;“Think of these as like &lt;i&gt;Hard Disk Failure Test&lt;/i&gt; which can be run by the user to troubleshoot the problem without the need to engage the support professionals to do preliminary investigation.”&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;The hardest part of designing a black box might be whether to leave it in the production build or not. Likewise, allowing your customers to turn on debug logging and send you the results will save time for everyone.&amp;nbsp; Many support teams and advanced business users are perfectly willing to do this, as long as it's under their control and they can see what they're sending you.&amp;nbsp; They can act as &lt;i&gt;self-testable&lt;/i&gt; features that will be shipped with the software for easier &lt;a href="http://en.wikipedia.org/wiki/Fault_detection_and_isolation"&gt;FD/FI&lt;/a&gt; (Fault Detection/Fault Isolation). If you do leave your black box in, treat them as the feature they are.&lt;/p&gt; &lt;p&gt;&lt;a name="_Toc273693673"&gt;Providing “Alternate” execution paths&lt;/a&gt;&lt;/p&gt; &lt;p&gt;a) It is the ability to perform same operation by using multiple options so that when say main option is not working, it doesn’t become a showstopper and the same can be tested using alternative option. For example: &lt;i&gt;a keyboard shortcut might come in handy when the UI control is not working.&lt;/i&gt;&lt;/p&gt; &lt;p&gt;b) Lot of times testing an operation might be tough say from UI whereas same could be easily done from Command line and hence consciously making sure that there are multiple means to achieve the same results go a long way to help testers test easily.&lt;/p&gt; &lt;h4&gt;&lt;a name="_Toc273693674"&gt;&lt;/a&gt;&lt;a name="Increase_the_Level_of_Control_in_Your_Co"&gt;&lt;/a&gt;&lt;font size="3" face="Segoe"&gt;&lt;font style="font-weight: bold"&gt;One Code: Merge test automation and development code&lt;/font&gt;&lt;/font&gt;&lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ffc000"&gt;“After all code is just a piece of code and it knows no boundary. “&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Too many times the silos of development and testing are not intersecting until it's 'too late'. Consider having test automation code and development code as part of the same Visual Studio solution. &lt;/p&gt; &lt;p&gt;I'm a huge advocate of merging test and development code for a variety of reasons.&lt;/p&gt; &lt;p&gt;1. &lt;i&gt;Automation ‘Rat Race’ Challenge&lt;/i&gt;: Situation arises when automation test code constantly tries to catch up with the new changes made to the code due to requirement changes / bug fixes, which mostly breaks the automation and causes rework and maintenance effort.&lt;/p&gt; &lt;p&gt;Now with refactoring the changes in the UI can be easily propagated to test solution even before the test script runs, fails and discover it.&lt;/p&gt; &lt;p&gt;2. Whenever the code is changed, the impacted test code can be seen and identified for any potential issues with dependencies created between them. With this the regression can be easily identified whenever the code change is made and testing team can run the impacted tests alone.&lt;/p&gt; &lt;p&gt;3. We get maximal code reuse, our test utilities can use the exact same code to create and modify data, and it promotes ownership between test and development in both directions. This way quality can be pushed upstream when we have a solid automation infrastructure which can be shared by both developer and tester to improve the overall product quality. &lt;/p&gt; &lt;p&gt;4. ‘One Click Automation’ can be achieved where every development build (Daily or Weekly) can seamlessly trigger automation (unit/functional) using VS 2010 features.&lt;/p&gt; &lt;p&gt;Like many things, this is about people working together and if you have a good level of DEV/QA cohesion, it goes A LONG way.&lt;/p&gt; &lt;h4&gt;&lt;a name="_Toc273693675"&gt;Intelligent Test Data can improve testability as well&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;One of the important aspects of testability is to achieve complete code path coverage and simulate situations in a cost efficient manner. The monster that would need to be addressed when there are infinite permutations and combinations &lt;i&gt;and one can’t be certain about t&lt;/i&gt;he testability as exhaustive testing is impractical and random testing is only risky. We wrote a Think Week paper last year to cover this topic in depth “&lt;a href="http://thinkweek/PaperDetails.aspx?subid=14153"&gt;Intelligent Selection of test data by applying learning from Marketing Research&lt;/a&gt; There we have proposed strategies to choose the test inputs /data in such a way that it can help you achieve high coverage with minimum testing effort.&lt;/p&gt; &lt;h3&gt;&lt;a name="_Toc273693676"&gt;Benefits&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_IWEJ_QTVH1c/TRw8E9G665I/AAAAAAAAGSU/XVXQYUBFUqI/s1600-h/clip_image001%5B9%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://lh6.ggpht.com/_IWEJ_QTVH1c/TRw8GbqEFqI/AAAAAAAAGSY/mJpzA8wHq3s/clip_image001_thumb.png?imgmax=800" width="19" height="19"&gt;&lt;/a&gt; Overall testing efforts can be reduced when features become easier to test.&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_IWEJ_QTVH1c/TRw8Hb_kZKI/AAAAAAAAGSc/nFBCpeDMaeM/s1600-h/clip_image001%5B1%5D%5B2%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[1]" border="0" alt="clip_image001[1]" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/TRw8IEZY6uI/AAAAAAAAGSg/Mjy1lH_-p-M/clip_image001%5B1%5D_thumb.png?imgmax=800" width="19" height="19"&gt;&lt;/a&gt; The &lt;i&gt;‘black box’ and ‘merging test and development code’ &lt;/i&gt;approach can make our tests simpler and automation much more robust. &lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/TRw8IvY5GSI/AAAAAAAAGSk/ysP43nACx3U/s1600-h/clip_image001%5B2%5D%5B2%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[2]" border="0" alt="clip_image001[2]" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/TRw8KDe0OOI/AAAAAAAAGSo/HdXcqszG1Ao/clip_image001%5B2%5D_thumb.png?imgmax=800" width="19" height="19"&gt;&lt;/a&gt; ‘Black box’ can become supportability features for support professional and advanced users (&lt;i&gt;easier Fault Detection &amp;amp; Fault Isolation&lt;/i&gt;)&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_IWEJ_QTVH1c/TRw8KpHvqlI/AAAAAAAAGSs/KqyPgNOv9RA/s1600-h/clip_image001%5B3%5D%5B2%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image001[3]" border="0" alt="clip_image001[3]" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/TRw8LZkHUfI/AAAAAAAAGSw/NBIrm1NrErs/clip_image001%5B3%5D_thumb.png?imgmax=800" width="19" height="19"&gt;&lt;/a&gt; IT support cost and effort can be reduced by empowering support professionals by providing them ‘black box’ which can be used to diagnose issues with lesser dependency on IT Engineering team (Ticket Reduction)&lt;/p&gt; &lt;h3&gt;&lt;a name="_Toc273693677"&gt;Conclusion&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;In this paper I have made an attempt to highlight testability as a major challenge which needs to be given its due importance to help reduce overall &lt;b&gt;testing cost/effort&lt;/b&gt; and also to improve &lt;b&gt;customer UX (user experience)&lt;/b&gt; by &lt;i&gt;making testing/using the product simpler.&lt;/i&gt;&lt;/p&gt; &lt;p&gt;Implementing changes suggested in the paper would no doubt take some substantial effort &lt;i&gt;(varying from project to project depending upon the complexity of the apps)&lt;/i&gt; but for legacy apps, it can be done in an incremental manner whereas for new apps it can be built into the code from day 1 as a best practice.&lt;/p&gt; &lt;h3&gt;&lt;a name="_Toc273693678"&gt;References&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;&lt;a href="http://news.cnet.com/8301-13860_3-10052412-56.html#ixzz10S1RPf00"&gt;http://news.cnet.com/8301-13860_3-10052412-56.html#ixzz10S1RPf00&lt;/a&gt; &lt;br&gt;&lt;a href="http://news.cnet.com/Microsoft%20to%20add%20black%20box%20to%20Windows/2100-1016_3-5684051.html#ixzz10nq2SAIl"&gt;http://news.cnet.com/Microsoft%20to%20add%20black%20box%20to%20Windows/2100-1016_3-5684051.html#ixzz10nq2SAIl&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/micahel/archive/2004/08/04/207997.aspx"&gt;http://blogs.msdn.com/b/micahel/archive/2004/08/04/207997.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/dustin_andrews/archive/2008/01/11/driving-testability-from-the-ui-down.aspx"&gt;http://blogs.msdn.com/b/dustin_andrews/archive/2008/01/11/driving-testability-from-the-ui-down.aspx&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Biography&lt;/h3&gt; &lt;table border="1" cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="163"&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_IWEJ_QTVH1c/TRw8LxiCTNI/AAAAAAAAGS0/iP43XoDPD-k/s1600-h/clip_image008%5B3%5D.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://lh6.ggpht.com/_IWEJ_QTVH1c/TRw8M9RiIbI/AAAAAAAAGS4/4T86c7h5RHQ/clip_image008_thumb.png?imgmax=800" width="116" height="128"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt; &lt;td valign="top" width="474"&gt; &lt;p&gt;Raj is a Test Consultant specializing in different types of testing techniques, test automation and testability in different domains like Manufacturing, Healthcare and Higher Education. He holds an APICS certification in Supply Chain Management. Expertise with Rational and Mercury testing tools, he has helped teams develop test automation strategies and architectures for such companies as Cognizant Technology Solutions and Oracle Corporation. He also provides training in automated testing architectures and design. He is QAI (CSTE) &amp;amp; ISTQB Certified. He has a master's degree in Computer Applications. He is currently working at Microsoft, India, Business Intelligence COE. He has earlier represented Microsoft and Oracle at International test conferences as a Speaker.&lt;/p&gt; &lt;p&gt;His passion @ &lt;a href="http://www.itest.co.nr"&gt;http://www.itest.co.nr&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-2905548951729377755?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/2905548951729377755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=2905548951729377755' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/2905548951729377755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/2905548951729377755'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2010/12/testability-black-box-required-for.html' title='Testability: ‘Black Box’ required for ‘Black Box’ testing'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_IWEJ_QTVH1c/TRw8GbqEFqI/AAAAAAAAGSY/mJpzA8wHq3s/s72-c/clip_image001_thumb.png?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-6367354560397448334</id><published>2010-08-01T13:41:00.001+05:30</published><updated>2010-08-01T13:41:46.031+05:30</updated><title type='text'>Testing a product….Just like movies</title><content type='html'>&lt;blockquote&gt; &lt;p&gt;I am not a movie buff but i have no shame in admitting that movies do inspire me. I learn a lot from movies. Most of the movies (&lt;em&gt;good or bad&lt;/em&gt;) carry some lessons which are so very applicable to our personal as well as professional life. Lately I was thinking that there is a lot common between movies and software testing assignments. I am a tester by profession and hence this post is dedicated to the analogies I have tried to draw between movies and software testing.&amp;nbsp; The thought process was that “can we learning something from other professions?”.&amp;nbsp; I invite every reader (&lt;em&gt;tester and non-tester&lt;/em&gt;) to add points to the list below and share their thoughts. &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt; Here are the 10 things which I feel are common between movies and our profession (software testing): &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt; #1.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0080ff"&gt;Movies typically have good and evil characters (Heroes and Villains; Friends &amp;amp; Enemies) &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;Our dear tester are heroes most of the time but they can also&amp;nbsp; be even villains at times. They are the ones who make sure that the user’s expectations are met. &lt;/font&gt;&lt;font color="#ff8080"&gt;Testers many times have an opinion that all the forces in the world are conspiring against them to stop them from delivering a quality product. The so called “Quality” is their sole mission and they will destroy whatever comes in the way. &lt;/font&gt;&lt;font color="#ff8080"&gt;For the rest of the team &lt;em&gt;(esp. developers and project managers)&lt;/em&gt; they act like villains by playing the role of quality police where they wont let the release the product on time. &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;#2.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0080ff"&gt;Movies always have a&amp;nbsp; plot, to start with there will always be some problems, with lot of twists and in the end somehow everything falls in place &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;Software testing project too kicks off with a scope (or a plot), here as well things obviously don’t go as planned, unexpected things take place, mistakes are made, then there is panic, and then from nowhere a hero comes to rescue by suggesting solutions/work around and in the end somehow we still deliver the product and celebrate big time&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;#3.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0080ff"&gt;Movies are by-design entertaining. They typically have all the necessary ingredients to keep the audience engaged&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;So is software testing. Each project put you into situations which makes you laugh (&lt;em&gt;sometime at your own stupid mistakes&lt;/em&gt;), it makes you angry when you feel somebody is not helping&amp;nbsp; (&lt;em&gt;or making things worse for you&lt;/em&gt;), sometimes it even makes you cry (&lt;em&gt;when despite of putting all the hard work things don't work for you&lt;/em&gt;) and for some geeks like me…it makes you fall in love with your work or the technology you are working on :)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;#4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0080ff"&gt;Movies are more convincing when they are based on real life stories&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;Ever noticed that movies makes long lasting impression when you know that they are inspired by some REAL stories. Probably because you then trust them more or may be because you can correlate to characters better.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;When someone is testing a product&amp;nbsp; just like a REAL user (&lt;em&gt;by truly simulating their behavior &amp;amp; thinking how they might interact with the product when at work),&lt;/em&gt; it is for sure going to be much more trustable, convincing and believable in eyes of all the stakeholders and even to the test team itself. It’s not a bad idea to come up with different &lt;em&gt;user personas&lt;/em&gt; of your application users and then to they play them sincerely while testing the product.&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt; #5.&lt;font color="#0080ff"&gt;&amp;nbsp; Now days movies are released world-wide needs to appeal to global audience to be a real block buster (Remember Avatar ? or Titanic?)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;Does Globalization / Localization testing rings any bells?&amp;nbsp; Yes, that is our version of doing a world premiere. I will leave this point here for you to think about it.&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;#6.&amp;nbsp; &lt;font color="#0080ff"&gt;Entire movie can’t (or at least shouldn’t be) be shot ONLY at one location&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;Producers spend unimaginable amount of money in creating sets, shooting outdoors&lt;em&gt; (think of taking all the crew to New Zealand&amp;nbsp; or other exotic destinations),&lt;/em&gt; just to produce the effect which is the need of the script and the story. Don't your agree that the effort and the money we spend in test environment is well justified and shouldn’t be compromised?&amp;nbsp; We can test the application in some local test environment (&lt;em&gt;nothing like real environment&lt;/em&gt;) which is no doubt cheaper but it would never produce the same results as when&amp;nbsp; it will be actually used in production.&amp;nbsp; &lt;font color="#ff8080"&gt;We don’t want that to happen. Do we? &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;Wait !! I know what you must be thinking ? “Sets” in movies are not REAL either. Yes, but they LOOK real. Right? something&amp;nbsp; that is really close to REAL and that’s what Performance testing tools like Load Runner enable us to simulate that REAL behavior. &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;#7.&amp;nbsp;&amp;nbsp; &lt;font color="#0080ff"&gt;If movies are stretched too much, audience loses interest &amp;amp; the message the producers wanted to convey is lost (or at least doesn’t remain as impactful as it could have been)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;Reminds you of waterfall model days ? A release going on for months and years. In today's agile world even 3 months has started to look like ages. This is an era of faster delivery."&lt;em&gt;Shorter the better&lt;/em&gt;” is the mantra.&amp;nbsp; If software testing goes on for too long, testers start to lose focus (&lt;em&gt;excitement starts diminishing, work&amp;nbsp; life begins to look monotonous&lt;/em&gt;), your customers go on hibernation mode while you are busy developing and testing and then they wake up all of a sudden when you deliver and then one finds that there is a&amp;nbsp; disconnect and end users have even forgotten that something was coming up and i wont be surprised if users have switched to competitors or worse, comes up with their solution to the very problem you were trying to solve (You software/application is now obsolete)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;#8.&amp;nbsp; &lt;font color="#0080ff"&gt;Script, Story, Lyrics, Screen Play , Direction, Acting and tons of other things&amp;nbsp; makes a movie successful&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;Movies are great examples of excellent teamwork. A movie won’t work if say story is bad, doesn’t matter how good was say direction or acting. These are all important ingredients of the the recipe. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;Now think, can we test the product successfully if requirements itself are invalid or say code is crappy or design isn’t what it should be or lets say if we are testing with bad test data. All these are absolutely mandatory for the product to be successful. After all “Quality is EVERYONE’s business, and not just Tester’s”&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;#9.&amp;nbsp;&amp;nbsp; &lt;font color="#0080ff"&gt;No movie is ever perfect (There are critics always waiting to pass the verdict) &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;Lesson is that whatever you do there will be suggestions/feedback and criticism and you cant make everyone happy. Having said that, critics are really important to look back and identifying the area where we could have still done better. So don’t lose your heart if despite of putting all the hard work you are still asked to improve &lt;em&gt;(‘Era of continuous improvement&lt;/em&gt; :P)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;#10.&amp;nbsp;&amp;nbsp; &lt;font color="#0080ff"&gt;All successful movies have sequels :) &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;So true in our profession too.&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-6367354560397448334?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/6367354560397448334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=6367354560397448334' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/6367354560397448334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/6367354560397448334'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2010/08/testing-productjust-like-movies.html' title='Testing a product….Just like movies'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-5977811787675410147</id><published>2010-07-26T23:59:00.001+05:30</published><updated>2010-07-26T23:59:09.744+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='testing play'/><category scheme='http://www.blogger.com/atom/ns#' term='testing stage act'/><category scheme='http://www.blogger.com/atom/ns#' term='software testing'/><category scheme='http://www.blogger.com/atom/ns#' term='testing act'/><category scheme='http://www.blogger.com/atom/ns#' term='Testing funny'/><category scheme='http://www.blogger.com/atom/ns#' term='testing jokes'/><category scheme='http://www.blogger.com/atom/ns#' term='testing drama'/><category scheme='http://www.blogger.com/atom/ns#' term='testing skit'/><title type='text'>A software testing stage act (funny) - written and directed by yours truly :)</title><content type='html'>&lt;blockquote&gt; &lt;p&gt;I would be lying if I say I always wanted to do this and as far as i can remember, i was never known for participating in any extra-curricular activities, leave alone&amp;nbsp; plays or stage acts. Lately it somewhere started to grow on me as I started watching (and appreciating) movies and more importantly when my sister (&lt;a href="http://en.wikipedia.org/wiki/Phoonk"&gt;Savita&lt;/a&gt; , the cinematographer) instilled confidence in me. Thankfully i got my first break , when i was,asked ( let’s rather say forced ) to write and direct a play for Microsoft’s Tester’s Day. Like many others, i thought of Googling (oops …Binging) for it but i didn’t find one good play on software testing (good for me ) and&amp;nbsp; i finally gathered the courage to write one. I am sharing the script with you all if you want to play it again :) &lt;p&gt;&lt;b&gt;&lt;font color="#ff8080" size="3"&gt;Plot:&lt;/font&gt;&lt;/b&gt;&lt;b&gt; &lt;/b&gt; &lt;p&gt;A bunch of unusual testers unintentionally making the life of developers really terrible. &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font size="3"&gt;&lt;font color="#ff8080"&gt;&lt;b&gt;Actors&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;b&gt;&lt;font color="#0080ff"&gt;&amp;lt;Testing Team&amp;gt;&lt;/font&gt;&lt;/b&gt; &lt;p&gt;&lt;font color="#008000"&gt;&lt;strong&gt;Quality Advocate&lt;/strong&gt; :: &lt;b&gt;Ranchoddas&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;He is awesome force in testing that will stand for nothing else but quality. Ranchoddas is often called the quality police and are at times known to be too quality focused. He will enforce quality all over, from the build and release to the documentation. Even if no-one asked for his input. He will rip any spec to pieces; enforce quality in every meeting they attend and settle for nothing but the most ardent quality in every aspect of the software development life cycle.  &lt;p&gt;One liner: &lt;em&gt;He lives, breathes and sleeps quality.&lt;/em&gt;  &lt;p&gt;Ranchoddas is respected and required on every project but he often over-looks commercial aspects meaning he can be known as troublesome, unbending and inflexible. He often has a reputation of sticking this his nose in or bullying. He also believes they are running the project.  &lt;p&gt;&lt;font color="#008000"&gt;&lt;strong&gt;Drama queen :: Sambhavna&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;Drama Queen over-reacts with each bug found. Whether it is a spelling mistake or a catastrophic failure The Drama Queen always reacts the same. &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;The Drama Queen can be seen hurtling towards the programming team, returning with at least 5 of them whilst wildly pointing at the screen and shouting 'Look, Look, it's broken'. In reality it's often 'just a bug' that is fixed immediately with little or no fuss. The Drama Queen really gets programmers backs up as they are never sure whether their code is really that bad or whether they've just overlooked something. Cry Wolf? &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#008000"&gt;&lt;strong&gt;Socialiser :: Ritesh&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;One Liner: &lt;em&gt;Let's get a drink and chat about it.&lt;/em&gt; &lt;p&gt;Laughing, chatting, enjoying their work and having fun. The Socialiser is often referred to as The Moral Officer due to his key role as team outing organizer and coffee break manager.  &lt;p&gt;The socialiser basically knows everyone, everywhere  &lt;p&gt;&lt;i&gt;Last but not the least is our old Chaturlingam who has a knack of finding unusual bugs. He is most feared by developers. All he has to say in his defence is: “I don't go looking for defects. Defects find me. “&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#008000"&gt;EXPLORER :: Chaturlingam&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;Chaturlingam who has a knack of finding unusual bugs. He is most feared by developers. All he has to say in his defense is:&lt;em&gt; “I don't go looking for defects. Defects find me. “&lt;/em&gt; &lt;p&gt;He is what's known as a responsive thinker. He set himself a charter, often defined from a test case and they explore the app looking for interesting scenarios and paths reacting to information being given back by the app and in turn altering their test ideas. The defects he find are often show stoppers, are truly inventive and are often so difficult to fix that programmers have exploded in rage. The Explorer can test anything, in any state and at any time. They aren't bound by the constraints of a checklister.They are free. They explore.  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;&lt;font color="#0080ff"&gt;&amp;lt;Development team&amp;gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#008000"&gt;ANGRY DEVELOPER:: Rakhi -&lt;/font&gt;&lt;/strong&gt;  &lt;p&gt;She is an aggressive and impatient person by nature. She of course doesn’t like being bugged too much by the test team. Though she doesn’t say it openly she disdains the test team for their lack of technical knowledge and for doing a job which she feels is not worth appreciating.  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;&lt;font color="#008000"&gt;SEASONED DEVELOPER:: Anil &lt;/font&gt;&lt;/b&gt; &lt;p&gt;All my sympathies to Anil who is a senior campaigner who has got tired of arguing with test in his long career and decided to take an easier way out of not getting into confrontation mode. He tries to convince, fails miserably and in the end other party wins and he accepts it whether he was wrong or right. &lt;p&gt;Anil doesn’t like to go into confrontation modes with testers or for that matter with anyone. He is a composed person who is definitely not witty and he often finds himself giving up in the end by accepting the other’s terms. In short, people feel sympathy for him coz he really can’t fight back even when innocent  &lt;p&gt;&lt;b&gt;&lt;font color="#ff8080" size="3"&gt;&lt;/font&gt;&lt;/b&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;&lt;font color="#ff8080" size="3"&gt;Opening Scene:&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;i&gt;Developers are looking drowsy, sleepy and tired in the morning (as they were working till 6 in the morning). Testers are fresh and come late to start a new day.&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8080" size="3"&gt;&amp;lt; SCENE #1&amp;gt;: Installation&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Chaturlingam to Sambhavna:&lt;/strong&gt; (Chaturlingam looking excited to start the testing; Sambhavna looking tensed as she is installing and she’s looking anxious)  &lt;p&gt;Hey Sambhavna, What’s taking the installation so long? Is it done yet?  &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;: (interrupts suddenly as if was just waiting for it)  &lt;p&gt;Are you kidding? I am not going to anyone touch the build till my design inspection bugs are closed and I see the signed off Tech Design Spec doc. In the name of our Test Process Improvement, I can’t compromise on these key deliverables  &lt;p&gt;&lt;i&gt;&amp;lt;in high pitch to developer&amp;gt;&lt;/i&gt; &lt;p&gt;&lt;strong&gt;Ranchoddas:&lt;/strong&gt; &amp;lt;Stands up and looking at Rakhi who is looking very lazy at the moment&amp;gt;  &lt;p&gt;Why Bug tracker stills shows my design bugs are still active and Tech Spec is not updated? You have already wasted our 15 mins this morning  &lt;p&gt;&lt;strong&gt;Rakhi:&lt;/strong&gt; (trying her best to look reasonable)  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Ranchoddas,&lt;/strong&gt; Tech Design Specification is checked-in and complete. Check again.&lt;/i&gt; &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;: (with sarcasm)  &lt;p&gt;Yes, I can see the Tech Design Spec but that was for the last release and only thing you seem to have updated is the RELEASE VERSION NO. Don’t provoke me to reject the build.  &lt;p&gt;Anil (waking up suddenly &amp;amp; trying to solve the matter; trying to get sympathy):&lt;i&gt; &lt;/i&gt; &lt;p&gt;Guys…We just finished coding only this morning at 6 a.m. so we would have missed it. You start with the installation and give us time till EOD and we will update the tech spec  &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;: &lt;i&gt;(looking surprised; no pity that devs were working till morning)&lt;/i&gt; &lt;p&gt;Are you suggesting me that you have not done Unit Testing in that case? I want to see Unit Test report now? Mister quality is not only our responsibility.  &lt;p&gt;&lt;strong&gt;Rakhi&lt;/strong&gt; &lt;i&gt;(feeling trapped):&lt;/i&gt; &lt;p&gt;There was a requirement change yesterday night and because of that we didn’t get enough time to code and unit test.  &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;: &lt;i&gt;(Giving an expression as if he is back stabbed): &lt;/i&gt; &lt;p&gt;OMG!!! So there was a CR nobody bothered to inform the test team why the test team was not in the loop? What is wrong with our PM? What about the impact analysis.? And when will we update our test cases? I need to escalate this right away to senior management. Nobody breaks law in my territory.  &lt;p&gt;&lt;strong&gt;Ritesh&lt;/strong&gt;: cool man. That’s ok. The CR is in my work item &amp;amp; I have updated it in my test case. I think we should start off with our testing  &lt;p&gt;Anil &lt;i&gt;(looking relaxed again. Passes a broad smile to Ritesh)&lt;/i&gt; &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;, I am resolving your tech spec comments. It won’t happen again.  &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt; (shrugs his shoulders)  &lt;p&gt;Fine.  &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;lt; PAUSE OF few second. Team is doing their usual stuff&amp;gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;Drama Queen&lt;/strong&gt;: &lt;i&gt;&amp;lt;doing the installation; she squeals and runs toward developers&amp;gt;&lt;/i&gt; &lt;p&gt;The build failed. Oh God why today? Deadline is so close. It always happens to me. I don’t know what we are going to do next.  &lt;p&gt;&lt;strong&gt;Anil&lt;/strong&gt; &lt;i&gt;(Looking relaxed after seeing the error and speaks in a soft tone of contempt for testers): &lt;/i&gt; &lt;p&gt;Yes Sambhavna, It will fail coz you don’t have D drive on your machine  &lt;p&gt;&lt;strong&gt;Drama Queen:&lt;/strong&gt;  &lt;p&gt;Mister don’t get technical with me. How on the earth was i supposed to know that?  &lt;p&gt;&lt;i&gt;&amp;lt;Rakhi gives a disgusting look to Sambhavna. Test team looks embarrassed;. Sambhavna doesn’t know what was wrong with that. Anil has no words and everyone gets back to work&amp;gt;&lt;/i&gt; &lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp; &lt;p&gt;&amp;lt; PAUSE OF 10 second. Team is doing their usual stuff. Devs have gone back to their seats&amp;gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt;: Not again !!!! There is another problem. After I install the build, dialog box says &lt;em&gt;“Installation recommends reboot. Do you want to reboot now?” &lt;/em&gt; &lt;p&gt;&lt;i&gt;&lt;strong&gt;Rakhi&lt;/strong&gt; (casually) &lt;/i&gt;What is the problem. Say NO !!!! &lt;p&gt;&lt;i&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt;: (Looking irritated)&lt;/i&gt; &lt;p&gt;There is only one button available and that says. “YES”  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Rakhi&lt;/strong&gt; : oops…looks like a minor miss&lt;/i&gt;&amp;nbsp; &lt;p&gt;&lt;i&gt;Rakhi gives a smirk, and Sambhavna is puzzled.&lt;/i&gt; &lt;p&gt;&lt;b&gt;&lt;/b&gt;&amp;nbsp; &lt;p&gt;&lt;b&gt;&amp;lt;ANNOUNCEMENT: so finally the installation succeeded. There were few bugs here and there but the team is still managing quite okay&amp;gt;&lt;/b&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;lt; PAUSE OF 10 second. Team is doing their usual stuff. &amp;gt;  &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;&lt;font color="#ff8080" size="3"&gt;&amp;lt; SCENE #2&amp;gt;: (BVT &amp;amp; Functional Testing)&lt;/font&gt;&lt;/strong&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;:  &lt;p&gt;I can see two bugs where “how found” and “found in environment” is not entered. Can you fix it right away? I am not going to tolerate such process compliance, I tell you!  &lt;p&gt;&lt;strong&gt;Ritesh&lt;/strong&gt;:  &lt;p&gt;Sorry!!!. That has to be me. Leave it to me dude, I will take care of it. &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;lt; PAUSE OF 10 second. Team is doing their usual stuff. &amp;gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;Ritesh&lt;/strong&gt;:  &lt;p&gt;Guys, as you know our last release had just 5 Severity 1 bugs production, our management is really happy with our performance and has given us budget for an outing. How about a lunch today.?  &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;:  &lt;p&gt;Did we scope for this time out in our schedule? Are you sure we will not be missing out on our time to test by such outings? I suggest we take an informed decision on this. Send an email with voting option, so that we have this documented somewhere for future reference.  &lt;p&gt;&lt;strong&gt;Ritesh&lt;/strong&gt;:  &lt;p&gt;Ok boss. Whatever u say. Let’s do it fast. I have to check the reservation then.  &lt;p&gt;&lt;strong&gt;Rakhi&lt;/strong&gt;:  &lt;p&gt;Lets go to KFC. Finger licking good.  &lt;p&gt;&lt;strong&gt;Anil&lt;/strong&gt;:  &lt;p&gt;Today is Tuesday. Can we go to a Veg restaurant  &lt;p&gt;&lt;strong&gt;Ritesh&lt;/strong&gt;:  &lt;p&gt;Hmm.. How about Little Italy, Mozarella, Ohris or Malgudi ?  &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;:  &lt;p&gt;Ohris? All the way to Banjara Hills? *sarcastically*  &lt;p&gt;Do you want this to be a full day activity????  &lt;p&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt;:  &lt;p&gt;How can you even think about it? I am not confident about the code quality and there is so much to test. Too little time and too much to test such a crappy code!  &lt;p&gt;&lt;strong&gt;Anil&lt;/strong&gt;:  &lt;p&gt;Hello madam? How can you call my code a crappy code? Do you even have an idea about the amount of design and planning that has gone into it? For starters, Each module is designed in way that it can be reused!!!  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt;:&lt;/i&gt; &lt;p&gt;Hello Mister! Let your code be usable first. We can think about reusing it later!  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Ritesh&lt;/strong&gt;:&lt;/i&gt; &lt;p&gt;&amp;lt;&amp;lt;Consoling Anil …&amp;gt;&amp;gt; Chill out dude .. it is not as crappy …&amp;lt;&amp;lt;little pause&amp;gt;&amp;gt; as it was last time .. !!! (Glancing the test team members)  &lt;p&gt;&lt;strong&gt;Chaturlingam&lt;/strong&gt;:  &lt;p&gt;I agree with our drama queen for once....lunch can wait...there are too many bugs.. I need to call for an immediate triage? We can wind that up and then go for lunch.  &lt;p&gt;TEST TEAM IN CHORUS: Then it will DINNER !!!!  &lt;p&gt;&lt;b&gt;&amp;lt;ANNOUNCEMENT : Triage meeting is called out&amp;gt;&lt;/b&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;font color="#ff8080" size="3"&gt;&lt;strong&gt;&amp;lt; SCENE #3&amp;gt;-- (THE TRIAGE)&lt;/strong&gt;&lt;/font&gt; &lt;p&gt;&lt;strong&gt;Chaturlingam&lt;/strong&gt;:  &lt;p&gt;To start with let’s looks at Defect ID #3601, I get a system error when I give an invalid file (negative testing)  &lt;p&gt;&lt;strong&gt;Anil&lt;/strong&gt;:  &lt;p&gt;Man..…go and see the error report first to see the root cause  &lt;p&gt;&lt;strong&gt;Chaturlingam&lt;/strong&gt;:&lt;i&gt; &lt;/i&gt; &lt;p&gt;Really? This is what the error is!  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_IWEJ_QTVH1c/TE3TwlcGRRI/AAAAAAAAGQs/kF0sEB5uZjs/s1600-h/clip_image002%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://lh6.ggpht.com/_IWEJ_QTVH1c/TE3TxfcbDfI/AAAAAAAAGQw/zfgnXelrDTo/clip_image001%5B4%5D.jpg?imgmax=800" width="367" height="229"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;Anil&lt;/strong&gt;: &lt;i&gt;(Looks embarrassed)&lt;/i&gt; &lt;p&gt;Err… I will take care of it.  &lt;p&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt;:  &lt;p&gt;Look, look, it’s not working. I swear, I saw it coming. I knew it would break. Thanks god i found it in test otherwise i don’t know what would have happened in production. How could you guys miss it?  &lt;p&gt;&lt;strong&gt;Rakhi&lt;/strong&gt;:  &lt;p&gt;What’s the issue?  &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;:  &lt;p&gt;Don’t show them. First log it in the tool. That’s the process.  &lt;p&gt;&lt;strong&gt;Rakhi&lt;/strong&gt; # (Gives up and walks to drama queen’s cabin):  &lt;p&gt;Can I have a look at it?  &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;:  &lt;p&gt;Don’t you dare fixing the code on her machine?  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Rakhi&lt;/strong&gt;:&lt;/i&gt; &lt;p&gt;Dude. I cannot change the code through an exe. Remember?  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;:&lt;/i&gt; &lt;p&gt;Of course I know that! But I cannot trust you guys at all!  &lt;p&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt; (finally explains);  &lt;p&gt;See the spelling of “ORGANISE” . it has to be “ORGANIZE”.  &lt;p&gt;&lt;strong&gt;Rakhi&lt;/strong&gt; (Almost cursing herself):  &lt;p&gt;What’s the big deal? I thought we have customer in UK as well.  &lt;p&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt;:  &lt;p&gt;For your information, 51 % of the customers are in US and hence it has to be US English  &lt;p&gt;&lt;strong&gt;Rakhi&lt;/strong&gt;:  &lt;p&gt;Plz go log a bug  &lt;p&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt;:  &lt;p&gt;S1 / P1 ?  &lt;p&gt;&lt;strong&gt;Rakhi&lt;/strong&gt; (seeing her patience tested):  &lt;p&gt;S3/P3  &lt;p&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt;:  &lt;p&gt;How is it S3? Can you not see this is such a severe bug?  &lt;p&gt;&lt;strong&gt;Shijavi&lt;/strong&gt; &lt;i&gt;(takes out a doc which he keeps ready all the time)&lt;/i&gt; &lt;p&gt;Wait a minute. I have a reference, exactly for such situations. &lt;b&gt;&lt;i&gt;Microsoft’s Severity /Priority guidelines&lt;/i&gt;&lt;/b&gt; &lt;p&gt;&lt;i&gt;&amp;lt;Anil &amp;amp; Rakhi are surprised that he carries such a thing all the time&amp;gt;&lt;/i&gt; &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;:  &lt;p&gt;&lt;i&gt;As per Slide 4, line 2, this bug is S2/P2 to say the least&lt;/i&gt; &lt;p&gt;&lt;strong&gt;Anil&lt;/strong&gt; (seeing they are losing the ground)  &lt;p&gt;Agreed.  &lt;p&gt;&lt;strong&gt;Ritesh&lt;/strong&gt;: (to developer):  &lt;p&gt;Boss …, looks like there is indeed some problem, but not big enough  &lt;p&gt;&lt;strong&gt;Anil&lt;/strong&gt; (looking tensed):  &lt;p&gt;What happened?  &lt;p&gt;&lt;strong&gt;Ritesh&lt;/strong&gt;:  &lt;p&gt;Look at this dialog box. Is it not silly ?  &lt;p&gt;….. &amp;lt;&amp;lt;getting a call in between …&amp;gt;&amp;gt; … &amp;lt;&amp;lt;resume after little pause&amp;gt;&amp;gt;  &lt;p&gt;I will log a S2-P3 bug, I’m sure you can fix it!  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_IWEJ_QTVH1c/TE3TybRsxEI/AAAAAAAAGQ0/tdVaBnTvb14/s1600-h/clip_image004%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002[4]" border="0" alt="clip_image002[4]" src="http://lh3.ggpht.com/_IWEJ_QTVH1c/TE3TzKXN3VI/AAAAAAAAGQ4/5XVRgFZ3tD0/clip_image002%5B4%5D%5B3%5D.jpg?imgmax=800" width="390" height="181"&gt;&lt;/a&gt; &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;:  &lt;p&gt;Can’t you take personal call later ?  &lt;p&gt;&lt;strong&gt;Ritesh&lt;/strong&gt;:  &lt;p&gt;Oh..dude, we can manage this triage meeting. Managing home triage is more difficult...!!  &lt;p&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;:  &lt;p&gt;Okay … I wanted to ask, how is it a S2-P3 man? Can you not see that it’s a Fatal error? Has to be a S1!  &lt;p&gt;&lt;strong&gt;Ritesh&lt;/strong&gt;:  &lt;p&gt;Oh common, its sure is not a show-stopper! No panic dude !..&amp;lt;&amp;lt;little pause&amp;gt;&amp;gt; Btw …., I have one more.  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_IWEJ_QTVH1c/TE3Tz890iwI/AAAAAAAAGQ8/DBgG9zmV-nc/s1600-h/clip_image006%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image003" border="0" alt="clip_image003" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/TE3T0kmxxLI/AAAAAAAAGRA/2LkqwAm1F2A/clip_image003%5B4%5D.jpg?imgmax=800" width="400" height="303"&gt;&lt;/a&gt; &lt;p&gt;Look at this screen, it’s throwing error that “Keyboard failure” but asking me to press F1 to continue …. No big deal. Your code is not crappy dude, I think, I should change the keyboard &amp;amp; try this scenario  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;:&lt;/i&gt; &lt;p&gt;Dude, what is a Sev 1 bug in your dictionary!!  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Chaturlingam&lt;/strong&gt;:&amp;lt;Mighty pleased with himself&amp;gt;&lt;/i&gt; &lt;p&gt;Okay. I now have an awesome bug. Something which stands up to my reputation and will give you guys sleepless nights  &lt;p&gt;&lt;i&gt;&amp;lt;Rakhi &amp;amp; Anil make a face and wait for Chaturlingam to continue&amp;gt;&lt;/i&gt; &lt;p&gt;I put up a 30GB file for copy from the Source to Destination folder, and then I put some load on the system as it is copying. I then tried to remove the network cable and see what happens, and viola, I have the bug! See this! Do you expect my grandkids to come and test this?  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_IWEJ_QTVH1c/TE3T1Hy_mbI/AAAAAAAAGRE/m2vhTU1P1xU/s1600-h/clip_image008%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004[4]" border="0" alt="clip_image004[4]" src="http://lh4.ggpht.com/_IWEJ_QTVH1c/TE3T2X4FbKI/AAAAAAAAGRI/vwWx0ZGcdpQ/clip_image004%5B4%5D%5B3%5D.jpg?imgmax=800" width="421" height="183"&gt;&lt;/a&gt; &lt;p&gt;And this ? What were you doing when you created this dialog box in your code?  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_IWEJ_QTVH1c/TE3T3ApTYZI/AAAAAAAAGRM/stiYg1uOlTY/s1600-h/clip_image010%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image005" border="0" alt="clip_image005" src="http://lh4.ggpht.com/_IWEJ_QTVH1c/TE3T35hbr-I/AAAAAAAAGRQ/FtjG-321mEg/clip_image005%5B4%5D.jpg?imgmax=800" width="431" height="178"&gt;&lt;/a&gt; &lt;p&gt;&lt;i&gt;Rakhi &amp;amp; Anil: &amp;lt;Look at each other and say at the same time&amp;gt; &lt;/i&gt; &lt;p&gt;Oh come on, man! Who on earth would even think of doing something as foolish as this!!!  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Rakhi&lt;/strong&gt;&lt;/i&gt;:  &lt;p&gt;Did you log this bug? I am going to close this as Not-Repro!  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Anil&lt;/strong&gt;: &lt;/i&gt; &lt;p&gt;Its okay Rakhi. Lets fix it! Lets ensure that a graceful error is thrown when someone this foolish does something this weird on the application!  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt;: &lt;/i&gt; &lt;p&gt;Okay, now my bug! This one took off my confidence on the code totally! What on earth am I supposed to do?  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_IWEJ_QTVH1c/TE3T4eGyPqI/AAAAAAAAGRU/oUct4HAQLlQ/s1600-h/clip_image012%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006[4]" border="0" alt="clip_image006[4]" src="http://lh3.ggpht.com/_IWEJ_QTVH1c/TE3T59qm4SI/AAAAAAAAGRY/-hnRIchC-DU/clip_image006%5B4%5D%5B3%5D.jpg?imgmax=800" width="440" height="235"&gt;&lt;/a&gt; &lt;p&gt;&lt;i&gt;&lt;strong&gt;Rakhi&lt;/strong&gt;:&amp;lt;smirks&amp;gt;&lt;/i&gt; &lt;p&gt;Press ‘Proceed’ and see na. I ensure it would format your system!  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt;: &lt;/i&gt; &lt;p&gt;I have logged this bug. Fix it! What if a customer gets this bug? Imagine what would happen to our reputation if we ship this?  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Rakhi&lt;/strong&gt;: &lt;/i&gt; &lt;p&gt;Oh well, no customer will get this bug! I ensure that this happens only on your machine! This block of code would get executed only for yours and Ranchoddas’s login! But now that you proved to be smart enough to find it, I will fix it!  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Sambhavna&lt;/strong&gt;:&lt;/i&gt; &lt;p&gt;See this one! I told it I don’t want those drivers on my machine! God knows what you guys have coded into the drivers!  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/TE3T6jckcKI/AAAAAAAAGRc/sXacK31mOcc/s1600-h/clip_image013%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image007" border="0" alt="clip_image007" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/TE3T7Y8yMWI/AAAAAAAAGRg/tI4fZ1qZj-s/clip_image007%5B6%5D.png?imgmax=800" width="292" height="92"&gt;&lt;/a&gt; &lt;p&gt;&lt;i&gt;&lt;strong&gt;Anil&lt;/strong&gt;:&lt;/i&gt; &lt;p&gt;Uncalled for but I accept this one!  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;: &lt;/i&gt; &lt;p&gt;If all these weren’t enough, I have one now. And because of this one, I reject the build. Please give a new build!  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_IWEJ_QTVH1c/TE3T8DIHjPI/AAAAAAAAGRk/LhkOw9MSidc/s1600-h/clip_image015%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image008[4]" border="0" alt="clip_image008[4]" src="http://lh4.ggpht.com/_IWEJ_QTVH1c/TE3T855fQtI/AAAAAAAAGRo/C-hgHEBkSGc/clip_image008%5B4%5D%5B3%5D.jpg?imgmax=800" width="357" height="204"&gt;&lt;/a&gt; &lt;p&gt;&lt;i&gt;Rakhi &amp;amp; Anil: &amp;lt;Too stumped to say anything&amp;gt;&lt;/i&gt; &lt;p&gt;&lt;i&gt;&lt;strong&gt;Rakhi&lt;/strong&gt;: &lt;/i&gt; &lt;p&gt;That’s it! Enough is enough. I am going to set up a 1:1 with my manager. Cannot work with these loonies anymore!  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Ranchoddas&lt;/strong&gt;:&lt;/i&gt; &lt;p&gt;Can someone send minutes of this meeting ?  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Chaturlingam&lt;/strong&gt;:&lt;/i&gt; &lt;p&gt;Boss … you are the quality “Guru” .. you can take care of sending minutes.  &lt;p&gt;&lt;i&gt;&lt;strong&gt;Ritesh&lt;/strong&gt;:&lt;/i&gt; &lt;p&gt;Hey guys … itz been long battle today, let’s chill out. It seems some tester’s day is going on and looks like they are providing free lunch J lets go.  &lt;p&gt;&lt;i&gt;&lt;/i&gt;&amp;nbsp; &lt;p&gt;&lt;i&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;Narrator&lt;/strong&gt;&lt;/font&gt;&lt;/i&gt;:  &lt;p&gt;Thus ended yet another eventful day in the lives of these team members.  &lt;p&gt;In spite of all the weird bugs, the stringent processes, the long coffee breaks and the amazing histrionics, this software was shipped and was reported to have touched a user base of 1M customers!  &lt;p&gt;Anil is now a Dev lead, and it is heard that he has extra long sessions with his shrink, all for his sanity  &lt;p&gt;Rakhi has moved away from the team, into a totally different discipline!  &lt;p&gt;All the test team members are still flourishing in the same team, and continuing to give sleepless nights to their Devs!  &lt;p&gt;&lt;font color="#0080ff"&gt;&lt;/font&gt;&amp;nbsp; &lt;p&gt;&lt;font color="#0080ff"&gt;PS: By the way, did i tell you that this play was quite a success at the event?&amp;nbsp; Feel free to use it -- &lt;/font&gt;&lt;font color="#0080ff"&gt;Raj, Microsoft, India , &lt;a href="mailto:raj.kamal13@gmail.com"&gt;raj.kamal13@gmail.com&lt;/a&gt; &lt;/font&gt; &lt;p&gt;&lt;font color="#0080ff"&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-5977811787675410147?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/5977811787675410147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=5977811787675410147' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/5977811787675410147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/5977811787675410147'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2010/07/software-testing-stage-act-funny.html' title='A software testing stage act (funny) - written and directed by yours truly :)'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_IWEJ_QTVH1c/TE3TxfcbDfI/AAAAAAAAGQw/zfgnXelrDTo/s72-c/clip_image001%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-1155211457835972456</id><published>2010-07-20T20:26:00.001+05:30</published><updated>2010-07-20T20:26:17.958+05:30</updated><title type='text'>Using Code coverage in Black Box testing ain’t no rocket science :) Overcome your CODEPHOBIA</title><content type='html'>&lt;blockquote&gt; &lt;p&gt;&lt;em&gt;I deserve few more comments here as I travelled 6 km and 30 mins extra to write this blog as in the excitement of writing this i forgot to get down at my stop and ended up at a place where the driver had to tell me that it was the last stop :P&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;“Yeah our developers are not doing code coverage and hence our code looks ugly” OR “we are not doing white box testing so we really cant measure code coverage"&lt;/em&gt;&amp;nbsp; Heard it before ? Now Rocky (our tester) was in one such meeting recently and he was the only odd man out who believed otherwise. It took us some time to realize that it was the &lt;em&gt;&lt;font color="#800040"&gt;“CODEPHOBIA of the testers which is the major resistance when it comes to measuring code coverage and not as much as the actual process”.&lt;/font&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This reminds me of one of my favorite commercial which has this one liner &lt;font color="#0000a0"&gt;&lt;strong&gt;“Jhooth bolte hai woh log joh kehte hai unhe darr nahi lagta, darr sabko lagta hai. darr se aage bado, kyunki darr ke aage jeet hai”&lt;/strong&gt;&amp;nbsp; (For people who don’t understand Hindi: &lt;strong&gt;“People who say they aren’t afraid of anything are plain lying. Everybody gets scared (and its very human) but the key is to face it and then only you emerge as a winner”&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;When i interviewed the teams, I came to this understanding that the testers feel when they are no experts in .Net, Java, Ajax etc then how can they measure and improve the code coverage.&amp;nbsp; I don’t completely agree by this notion as measuring code coverage doesn’t necessarily need very strong programming knowledge. Provided that you have a basic understanding of any programming language like C, Perl etc and a strong willingness to learn, you can still ramp up pretty fast to the extent which is required for you to be able to measure/improve code coverage. Understanding code is much easier than writing it :) and all it needs is aptitude and basic understanding of the syntax and semantic of the language in question. I am saying this based on my own experiences where I went an learned the technology when it was required to be able to accomplish targets like measuring and improving code coverage.&lt;/p&gt; &lt;p&gt;Now if you are saying “Why we are even talking about code coverage”?&amp;nbsp; &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;Requirement coverage &lt;/em&gt;is ensured by tracing the requirements to your test cases and ensuring user needs are met but what about the traceability between the code and the test. In other words, what happens if there is code which is not exercised&amp;nbsp; by your test and results into unexpected behavior at customer’s end.&lt;/p&gt; &lt;p&gt;In short because &lt;strong&gt;&lt;font color="#800080"&gt;Test Coverage = Requirement Coverage + Code Coverage &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Lets accept it that “requirements” and “code” are two different entities and validating just one of these would be unfair to the other one.&lt;/p&gt; &lt;p&gt;Now if agree that code coverage can be done by black box testers and there are no major obstacles then lets move on to “How” part. Well, so if there is a will then there is a way and fortunately in this case there are many ways. We need to choose what fits best for us.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#0000a0"&gt;Step 1:&lt;/font&gt;&lt;/strong&gt; &lt;strong&gt;Measure you baseline and set target&lt;/strong&gt;: is to see where you stand now by measuring the BASELINE code coverage for your project (as you cant improve what you cant measure) and then decide your &lt;font color="#ff0000"&gt;realistic&lt;/font&gt; TARGET code coverage number. Now don’t get me wrong for highlighting keyword&amp;nbsp; “realistic”. Yes, I am no conservative and everybody want 100 out of 100 (no less) but the practitioners would tell you its same as “exhaustive testing” which we know doesn’t come for free. So you got to decide on a number by seeing the criticality of your application and a trade off between the money spent in increasing code coverage vs. risk of missing a defect due to insufficient code coverage.&lt;/p&gt; &lt;p&gt;for e.g. if your test (manual + automated) provides you 40 % coverage today then it becomes your baseline and you can set a target say 70-80 % for the future releases by doing all calculation on (investment vs. ROI)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#0000a0"&gt;Step 2:&lt;/font&gt;&lt;/strong&gt; &lt;strong&gt;Improve and measure (continuous)&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Then you can go and measure release-over-release IMPROVED code coverage and then compare it against the baseline to detect the trend (if there are any improvement), till you reach your target. Once you achieve your target code coverage number, you can raise the bars to take it to next level and continuously improve it.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;There are tools that can be used to start these trace using command line options which will instrument and track the code execution (statement coverage, path coverage, branch coverage etc) based on the tests being run (both automated &amp;amp; manual) and then help you generate reports to see the impact/coverage of your tests.&amp;nbsp; I have given few links below which will point to some of these tools and the tool selection/adoption is at the reader’s discretion.&lt;/p&gt; &lt;p&gt;Is there any process which can be used to achieve this. Answer is YES. Read on.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;u&gt;&lt;strong&gt;Code Coverage process:&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;I have come up with a generic iterative code coverage process which we can be used for measuring &amp;amp; improving code coverage while test execution (black box or white box).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1. Start the Trace using Code Coverage tool&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Here you install, configure and start the CC tool before starting your test execution.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;2. Test Execution – Phase 1&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; You are running you test cases or scenarios or conditions&amp;nbsp; (manual or automated whatever)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;3. Measure Coverage &amp;amp; Identify areas where coverage is low&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&amp;nbsp; &lt;/strong&gt;At this point lets say when you have done one pass of testing or have run your test cases once, you can Generate code coverage reports using the CC tool in question and IDENTIFY rooms for improvement where code coverage is not good.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;4. Add Test cases / conditions to improve code coverage&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp; Now you know which segment of the code was not covered by our test so you can go and either&lt;/p&gt; &lt;p&gt;&amp;nbsp; a) write new test cases or scenario to cover those parts&lt;/p&gt; &lt;p&gt;&amp;nbsp; b) Include the test data which can exercise those missing conditions&lt;/p&gt; &lt;p&gt;&lt;strong&gt;5. Test Execution – Phase 2&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&amp;nbsp; You start again and this time you run these new test cases / conditions with new test data. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;6. Measure Coverage again&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;You generate code coverage reports AGAIN and you see if there are improvements&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;Loop&lt;/strong&gt;: Keep repeating steps 2 to 6, till you reach your target. End the trace&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/TEW5C-ZHMbI/AAAAAAAAGQk/Qd3Sd55ddqo/s1600-h/code%20coverage%5B8%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="code coverage" border="0" alt="code coverage" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/TEW5EMJz4iI/AAAAAAAAGQo/fkZeCGAyDZw/code%20coverage_thumb%5B6%5D.png?imgmax=800" width="542" height="323"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Pointers to few CC tools:&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a title="http://www.codecoveragetools.com/index.php/coverage-process/code-coverage-tools-c.html" href="http://www.codecoveragetools.com/index.php/coverage-process/code-coverage-tools-c.html"&gt;http://www.codecoveragetools.com/index.php/coverage-process/code-coverage-tools-c.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a title="http://www.codecoveragetools.com/index.php/coverage-process/code-coverage-tools-java.html" href="http://www.codecoveragetools.com/index.php/coverage-process/code-coverage-tools-java.html"&gt;http://www.codecoveragetools.com/index.php/coverage-process/code-coverage-tools-java.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;If you still with me then you are among those who are willing to learn new things in life and i wish you a ''Happy Code Coverage”. Go celebrate it. If it helps then why not use it. Technical knowledge shouldn’t be an excuse for not doing it. \&lt;/p&gt; &lt;p&gt;After all it is no rocket science. &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;PS: CODEPHOBIA in my dictionary is &lt;em&gt;“fear of code; not only writing even reading or trying to understand it”&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-1155211457835972456?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/1155211457835972456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=1155211457835972456' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/1155211457835972456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/1155211457835972456'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2010/07/using-code-coverage-in-black-box.html' title='Using Code coverage in Black Box testing ain’t no rocket science :) Overcome your CODEPHOBIA'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_IWEJ_QTVH1c/TEW5EMJz4iI/AAAAAAAAGQo/fkZeCGAyDZw/s72-c/code%20coverage_thumb%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-4900515810425616950</id><published>2010-07-19T21:05:00.001+05:30</published><updated>2010-07-19T21:05:49.271+05:30</updated><title type='text'>Bhopal’s man-made disaster (Testing Tragedies #2: Learning from past)</title><content type='html'>&lt;blockquote&gt; &lt;p&gt;Bhopal’s gad tragedy is one of the most sad example of &lt;em&gt;‘things-went-wrong’&lt;/em&gt; due to human negligence. We primarily blame the company, the management (&amp;amp; rightly so) but one thing we often overlook is that other than human error &lt;em&gt;it is the system (machines) that failed us too.&lt;/em&gt; If the quality was given its due importance, we could have possibly averted this. This blog is part of the series where we are trying to learn from our past error in various fields and apply those learning in software testing world. In Churchill’s words &lt;font color="#0080ff"&gt;“Those that fail to &lt;strong&gt;learn&lt;/strong&gt; from &lt;strong&gt;history&lt;/strong&gt;, are doomed to repeat it.”&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The &lt;b&gt;Bhopal disaster&lt;/b&gt; or &lt;b&gt;Bhopal Gas Tragedy&lt;/b&gt; is the world's worst &lt;a href="http://en.wikipedia.org/wiki/List_of_industrial_disasters"&gt;industrial catastrophe&lt;/a&gt;. It occurred on the night of December 2-3, 1984 at the &lt;a href="http://en.wikipedia.org/wiki/Union_Carbide_India_Limited"&gt;Union Carbide India Limited&lt;/a&gt; (UCIL) &lt;a href="http://en.wikipedia.org/wiki/Pesticide"&gt;pesticide&lt;/a&gt; plant in &lt;a href="http://en.wikipedia.org/wiki/Bhopal"&gt;Bhopal&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Madhya_Pradesh"&gt;Madhya Pradesh&lt;/a&gt;, India&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Loss:&lt;/u&gt; &lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;Government agencies estimate 15,000 deaths&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Bad Quality&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p align="left"&gt;Attempts to &lt;strong&gt;reduce expenses&lt;/strong&gt; affected the factory's employees and their conditions. Kurzman argues that "&lt;font color="#0080ff"&gt;&lt;strong&gt;cuts&lt;/strong&gt; ... &lt;strong&gt;meant less stringent quality control&lt;/strong&gt; and thus looser safety rules. &lt;em&gt;A pipe leaked? Don't replace it, employees said they were told ... MIC workers needed more training? They could do with less. Workers were forced to use English manuals, even though only a few had a grasp of the language”&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;u&gt;&lt;strong&gt;Timeline, Summary&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;ul&gt; &lt;li&gt;21:00 Water cleaning of pipes starts.  &lt;li&gt;22:00 Water enters tank 610, reaction starts.  &lt;li&gt;22:30 Gases are emitted from the vent gas scrubber tower.  &lt;li&gt;22:30 First sensations due to the gases are felt—suffocation, cough, burning eyes and vomiting.  &lt;li&gt;1:00 Police are alerted. Residents of the area evacuate. Union Carbide director denies any leak.  &lt;li&gt;2:00 The first people reached hospital Symptoms include visual impairment and blindness, respiratory difficulties, frothing at the mouth, and vomiting.  &lt;li&gt;2:10 The alarm is heard outside the plant.  &lt;li&gt;4:00 The gases are brought under control.  &lt;li&gt;7:00 Immediate death toll raises to &lt;strong&gt;2,259&lt;/strong&gt;  &lt;li&gt;7:00 A police loudspeaker broadcasts: &lt;em&gt;&lt;font color="#0080ff"&gt;"Everything is normal".&lt;/font&gt;&lt;/em&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/TERwznfdq7I/AAAAAAAAGQc/CH3XUJqilCA/s1600-h/BHOPALGASTRAGEDY3.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="BHOPAL-GAS-TRAGEDY" border="0" alt="BHOPAL-GAS-TRAGEDY" src="http://lh3.ggpht.com/_IWEJ_QTVH1c/TERw09Rz2jI/AAAAAAAAGQg/4fTO55BK4io/BHOPALGASTRAGEDY_thumb1.jpg?imgmax=800" width="454" height="248"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Flaw:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;During the night of December 2–3, 1984, large amounts of water entered tank 610, containing 42 tons of methyl isocyanate(MIC). The resulting &lt;a href="http://en.wikipedia.org/wiki/Exothermic_reaction"&gt;exothermic reaction&lt;/a&gt; increased the temperature inside the tank to over 200 °C (392 °F), raising the pressure to a level the tank was not designed to withstand. This forced the emergency venting of pressure from the MIC holding tank, releasing a large volume of toxic gases into the atmosphere. The gases flooded the city of Bhopal, causing great panic as people woke up with a burning sensation in their lungs. Thousands died immediately from the effects of the gas and many were trampled in the panic&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Incident Logs &amp;amp; My Observations:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;Factors leading to the gas leak include:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The use of hazardous chemicals (MIC) instead of less dangerous ones  &lt;li&gt;Plant's location near a densely populated area &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#0080ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [raj]: Its a perfect example of poor risk management. We keep saying that test plan should have an important component which should talk about risk identification, risk assessment, risk mitigation and risk contingency but do we really do our part with sincerity.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#0080ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When you have alternatives one should always evaluate the worst case impact of each risk and then decide the alternative which is least impactful to the end users as user’s impact in many cases can be much more important than the cost effective&amp;nbsp;&amp;nbsp; solution which might look better deal to us. In software world we can say that if there is a trade-off then choose the option which is say slightly more time consuming or costly over cheapest solution if it can pose some risk to the end users which can ultimately become too expensive.&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Storing these chemicals in large tanks instead of over 200 steel drums. Large-scale storage of MIC before processing &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#0080ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [raj]: Poor capacity planning. Over utilization of resources can lead to fatigues and&amp;nbsp; fatal outcomes as it happened in this case. It is crucial to understand the threshold of each resource (software, hardware or humans) and understanding how much you can stretch them before they will collapse or explode. Resources are like a rubber band in your hand which can be stretched to meet your needs as long as you are not going beyond its threshold but if you keep stretching it will break and will hurt your finger real bad because of its rebound speed)&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Safety systems being switched off to save money—including the MIC tank refrigeration system which alone would have prevented the disaster  &lt;li&gt;lack of skilled operators due to the staffing policy  &lt;li&gt;there had been a reduction of safety management due to reducing the staff, there was insufficient maintenance of the plant and there were only very loose plans for the course of action in the event of an emergency &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#0080ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [raj]:&amp;nbsp; Cost controlling by resource reduction (software, hardware or humans) should NOT be done blindly. This is more applicable now when the economies are struggling, as many times it is seen as the simplistic and the most obvious solution but it can have such adverse impacts as we have witnessed in this tragedy. We all should have moral responsibility toward our users and we should think twice before taking such measures. There can be other ways to save cost but leaving critical systems running in modes where they are not maintained or giving in the hands of people who are not trained to do is nothing less than playing with the life of our users.&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The MIC tank alarms had not worked for four years  &lt;li&gt;There was only one manual back-up system, compared to a four-stage system used in the US &lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#0080ff"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [raj]: This only emphasizes the need of practicing security measures constantly to ensure that there are enough preventive techniques in place to avoid such accidents. Example in software could be anti-viruses or the scans/tests to be performed on periodic basis to know the possible threats in time. &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Learning&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;#1 &lt;em&gt;Risk management should not just be done as a formality. Its not something that should only concern management or a project manager. &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; It should be one of the most important item which should be &lt;em&gt;raised, managed, controlled and monitored by every team throughout project lifecycle. &lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #2 Choices made by humans CHANGE the course of future&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; When you do risk management and decide on a choice, always remember that each choice you make can decide the fate of millions of users and hence ALWAYS think of your users while taking a call. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Risk management is not just about you and&amp;nbsp; your team, its also about the impact of that risk on your end users.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #3 Over utilization beyond a limit can backfire. Know your boundaries and use them diligently. Cost reduction is important but constant overloading can instantly fail your system if not used judiciously.&amp;nbsp; &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for example, In software world, load testing is important but stress testing is even more to understand when your software is going to break so that we can be better prepared for the failures. “Hope for the best; Prepare for the worst :P”&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #4&amp;nbsp; Cost reduction when done without understanding the impact on the end users can be counter productive. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #5. For any application which involves direct or indirect physical interaction with users, SAFETY testing is must and needs to be done constantly to avoid accidents. e.g. Healthcare industry, Aviation etc.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #6&amp;nbsp; Security testing is extremely critical when there are chances of sabotage in the system. In software it can be a malicious user who is trying to harm the system for his interest or to hurt the users.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #7&amp;nbsp; Testability should be built into every system to find out the exact root cause of the behavior when something goes wrong.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Even today the interested parties haven’t been able to reproduce the exact conditions that resulted into this gas tragedy.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff8080"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Only if the software has logging mechanism which can be used to find out the exact sequence of events that occurred before the failure, the root cause can be determined unanimously without leaving any room for speculation.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Thoughts for you&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#0080ff"&gt;[raj]: If you think we have really learnt from past then read the comments below. Forget about applying the learning into other industries or fields, the very same company’s toxic waste is still lying there waiting to explode anytime again.&amp;nbsp; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#0080ff"&gt;In software testing, I learn that if a product crashes or causes a major loss to the customer, then there will no guarantee that preventive or even corrective actions will taken for sure. History has proved that we humans are so good at repeating our mistakes and suffering from it again and again without really fixing it. If you want to be good tester, make sure making mistake once is acceptable, repeating it again and again is sheer stupidity. &lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;Clean-up operations: Lack of political willpower has led to a stalemate on the issue of cleaning up the plant and its environs of hundreds of tonnes of toxic waste, which has been left untouched. &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Environmentalist"&gt;&lt;em&gt;Environmentalists&lt;/em&gt;&lt;/a&gt;&lt;em&gt; have warned that the waste is a potential minefield in the heart of the city, and the resulting &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Contamination"&gt;&lt;em&gt;contamination&lt;/em&gt;&lt;/a&gt;&lt;em&gt; may lead to decades of slow poisoning, and diseases affecting the nervous system, liver and kidneys in humans. According to activists, there are studies showing that the rates of &lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Cancer"&gt;&lt;em&gt;cancer&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and other ailments are high in the region.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-4900515810425616950?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/4900515810425616950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=4900515810425616950' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/4900515810425616950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/4900515810425616950'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2010/07/bhopals-man-made-disaster-testing.html' title='Bhopal’s man-made disaster (Testing Tragedies #2: Learning from past)'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_IWEJ_QTVH1c/TERw09Rz2jI/AAAAAAAAGQg/4fTO55BK4io/s72-c/BHOPALGASTRAGEDY_thumb1.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-8204336324134848344</id><published>2010-07-13T00:48:00.001+05:30</published><updated>2010-07-13T00:48:04.689+05:30</updated><title type='text'>Life Saver or  Life Taker ? (Therac-25) – Impact of poor testing (Testing Tragedies #1: Learning from past)</title><content type='html'>&lt;p&gt;This blog is for everyone who wants to know how software testing job touches human lives and why defects in applications such as healthcare cant be ignored.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;History&lt;/u&gt;:&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The &lt;b&gt;Therac-25&lt;/b&gt; was a &lt;a href="http://en.wikipedia.org/wiki/Radiation_therapy"&gt;radiation therapy machine&lt;/a&gt; produced by &lt;a href="http://en.wikipedia.org/wiki/Atomic_Energy_of_Canada_Limited"&gt;Atomic Energy of Canada Limited&lt;/a&gt; (AECL) It was involved with at least six accidents between 1985 and 1987, in which patients were given massive &lt;a href="http://en.wikipedia.org/wiki/Radiation_poisoning"&gt;overdoses of radiation&lt;/a&gt;, approximately 100 times the intended dose.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Loss:&lt;/u&gt;&amp;#160; &lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Four&lt;/strong&gt;&lt;strong&gt; of the six patients died&lt;/strong&gt; as a direct result of poor design, coding and testing&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_IWEJ_QTVH1c/TDtqaMhKDcI/AAAAAAAAGQU/DZpwSiphQQI/s1600-h/therac%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="therac" border="0" alt="therac" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/TDtqaiIrwEI/AAAAAAAAGQY/injg5CrJhlg/therac_thumb%5B1%5D.jpg?imgmax=800" width="286" height="213" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Company’s Response&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;After careful consideration, &lt;em&gt;we are of the opinion that this damage could not have been produced by any malfunction of the Therac-25 or by any operator error&lt;/em&gt; &lt;/p&gt;    &lt;p&gt;&lt;font color="#0080ff"&gt;&lt;font size="2"&gt;[raj]: &lt;/font&gt;Only if the company had taken very first of these incidents seriously they could have saved 3 precious lives. Every critical issue which customer finds should be given utmost priority before it becomes much worse.&amp;#160;&amp;#160; &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Facts&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Only One person did the programming for this system and he largely did all the testing. &lt;/p&gt;    &lt;p&gt;Therac-25 was tested as a whole machine rather then in separate modules. &lt;/p&gt;    &lt;p&gt;&lt;font color="#0080ff"&gt;&lt;font size="2"&gt;[raj]: Yes, that was my reaction too. We left the lives of so many hundreds in the hands of ‘One/ person only . We are humans and to err is humans. Plus we humans are not so good in finding errors in our own work.&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#0080ff"&gt;If System and Integration testing is important, so is Unit testing, we can undermine the importance of any of these. They are meant to complement each other. becomes much worse.&amp;#160;&amp;#160; &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Incident Log &amp;amp; My Observations&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;h6&gt;&lt;font size="2"&gt;&lt;strong&gt;Severity 1 Production Defect #1:&lt;/strong&gt;&amp;#160; &lt;/font&gt;&lt;/h6&gt;    &lt;h6&gt;&lt;font size="2"&gt;A 40 year old women was receiving her 24&lt;sup&gt;th&lt;/sup&gt; Therac-25 treatment. &lt;em&gt;The machine stopped 5 seconds into the treatment with an error. The technician seeing that &amp;quot;No Dose&amp;quot; had been administered (according to the computer) hit the 'P' key thus proceeding with the dose&lt;/em&gt;. This was done a total of 5 times giving the patient 13 000 - 17 000 rads. To give an idea of how much of an overdose this is; a regular treatment is around 200 rads and 1000 rads of radiation to the entire body can be fatal. The patient died 3 months after the overdose.&lt;/font&gt;&lt;/h6&gt;    &lt;h6&gt;&lt;font size="2"&gt;&lt;strong&gt;Severity 1 Production Defect #4:&lt;/strong&gt;&amp;#160; &lt;/font&gt;&lt;/h6&gt;    &lt;h6&gt;&lt;font size="2"&gt;The patient required only a small dose and according to the machine that is all he received. Yet again when the treatment was underway and error paused the machine and the technician hit the 'P' key to proceed. A overdose was administered and the man died just 3 months later. &lt;/font&gt;&lt;/h6&gt;    &lt;h6&gt;&lt;font color="#0080ff" size="2"&gt;[raj]: Better testability could have warned the technician that the dose had already been delivered. Misleading information and lack of transparency through the system confused him and he went on repeating the procedure again and again which made it fatal.&lt;/font&gt;&lt;/h6&gt;    &lt;h6&gt;&lt;font size="2"&gt;&amp;#160;&lt;strong&gt;Severity 1 Production Defect #2:&lt;/strong&gt;&amp;#160; &lt;/font&gt;&lt;/h6&gt;    &lt;h6&gt;&lt;font size="2"&gt;A male required radiation treatment on his back. The machine was set to X-ray mode instead of Electron mode so the technician just used the &amp;quot;cursor up&amp;quot; key up and quickly changed this mistake. However, this only made things worse as a software bug had been mistakenly stumbled upon. While administering the first treatment an error &amp;quot;Malfunction 54&amp;quot; flashed up telling the technician an underdose had been administered. The technician hit the 'P' key and a 2nd dose was delivered. The patient had been given an overdose after the first treatment, and he knew something was wrong, due to the burning sensation he felt in his back. As he attempted to get up the 2&lt;sup&gt;nd&lt;/sup&gt; dose was administered. The technician would have known the man was in pain if the audio and visual equipment was working. his man within weeks, lost the use of both legs and his left arm. Five months later he became the first fatality directly related to the Therac-25 system.&lt;/font&gt;&lt;/h6&gt;    &lt;h6&gt;&lt;font size="2"&gt;&lt;strong&gt;Severity 1 Production Defect #3:&lt;/strong&gt;&amp;#160; &lt;/font&gt;&lt;/h6&gt;    &lt;h6&gt;&lt;font size="2"&gt;A month later at the same hospital, with the same technician another fatal dosage was given. The technician made the same error of quickly changing the mode from X-ray mode to Electron mode using the 'cursor up' key. This again caused &amp;quot;Malfunction 54&amp;quot;. The patient this time was receiving treatment on his face. When the overdose was administered he yelled and then began to moan. The audio equipment was working this time but the initial dose was too much for the man. He received severe neurological damage, fell into a coma and died only 3 weeks later. &lt;/font&gt;&lt;/h6&gt;    &lt;h6&gt;&lt;font color="#0080ff" size="2"&gt;[raj]: If system was designed considering that a simple wrong choice can have such adverse effects then a choice made by technician could have warned him and possibly stopped him from making that mistake. &lt;/font&gt;&lt;/h6&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;h6&gt;&amp;#160;&lt;/h6&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Learning&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;Learning #1:&lt;/font&gt; Never dismiss any failure without reaching the bottom of it. Over confidence about your quality can take you and your customer down&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;Learning #2:&lt;/font&gt; Never depend on just one resource for the entire functionality. It’s dangerous. and it takes two to tango&amp;#160; (certain activities can’t be achieved singly like arguing, fighting, dancing, making love :))&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;Learning #3&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;: Unit, Integration and System testing, they all are equally important and one shouldn’t undermine importance of any of these.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;Learning #4&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;: Poor testability is extremely fatal. Lacks of user’s ability to validate the completion of the software operation/task can take lives as we have seen above&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;Learning #5&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;: Don’t repeat any important function/operation/task without confirming the behaviour of the previous operation. Many times we&amp;#160; think that running the software function again is case of failure is perfectly fine but that can be risky if the last operation resulted into corruption or left the machine in inconsistent state&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;Learning #6:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; For critical functions in your software, ensure there are provisions to handle silly human errors where we perform an action what we don't intend.&amp;#160; Design should consider that humans can make mistakes and for important tasks, there should be a warning/message confirming the change (that can possibly warn him and correct the action as he intended).&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;Example of such human mistakes. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;we want to click on Checkbox Yes but because page scroll happens and we click on NO and we don't even notice it &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;or &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;we are not 100 % concentrating and our brain is lost in it thoughts and we humans are sometime unaware of the&amp;#160; the action performed.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;e.g. I bet you would have felt the same more than once&amp;#160; “Have i left the tap open after the bath?” when you would have closed it.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;font color="#0080ff"&gt;&amp;#160; &lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Thoughts for you&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;If you are thinking,this was a rare scenarios and example of worst engineering and the machine would have got retired for ever then i want to leave you with this fact that this machine is still in use today and there might be someone you know who might be sitting in front of the machine as we speak and that’s why it is important to find defects before a life-saver turns life-taker&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-8204336324134848344?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/8204336324134848344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=8204336324134848344' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/8204336324134848344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/8204336324134848344'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2010/07/life-saver-or-life-taker-therac-25.html' title='Life Saver or  Life Taker ? (Therac-25) – Impact of poor testing (Testing Tragedies #1: Learning from past)'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_IWEJ_QTVH1c/TDtqaiIrwEI/AAAAAAAAGQY/injg5CrJhlg/s72-c/therac_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-3908715613709598518</id><published>2010-07-05T20:36:00.003+05:30</published><updated>2010-07-05T20:52:49.094+05:30</updated><title type='text'>Adventures with Testing BI/DW Applications (Business Intelligence / Data Warehoue Testing)</title><content type='html'>&lt;a title="View Adventures With Testing BI/DW Application on Scribd" href="http://www.scribd.com/doc/33919501/Adventures-With-Testing-BI-DW-Application" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;Adventures With Testing BI/DW Application&lt;/a&gt; &lt;object id="doc_743415862006101" name="doc_743415862006101" height="500" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;" rel="media:document" resource="http://d1.scribdassets.com/ScribdViewer.swf?document_id=33919501&amp;access_key=key-18ywl1srhm7nklzc8gu9&amp;page=1&amp;viewMode=list" xmlns:media="http://search.yahoo.com/searchmonkey/media/" xmlns:dc="http://purl.org/dc/terms/" &gt; &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt; &lt;param name="wmode" value="opaque"&gt; &lt;param name="bgcolor" value="#ffffff"&gt; &lt;param name="allowFullScreen" value="true"&gt; &lt;param name="allowScriptAccess" value="always"&gt; &lt;param name="FlashVars" value="document_id=33919501&amp;access_key=key-18ywl1srhm7nklzc8gu9&amp;page=1&amp;viewMode=list"&gt; &lt;embed id="doc_743415862006101" name="doc_743415862006101" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=33919501&amp;access_key=key-18ywl1srhm7nklzc8gu9&amp;page=1&amp;viewMode=list" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="500" width="100%" wmode="opaque" bgcolor="#ffffff"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-3908715613709598518?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/3908715613709598518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=3908715613709598518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/3908715613709598518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/3908715613709598518'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2010/07/adventures-with-testing-bidw.html' title='Adventures with Testing BI/DW Applications (Business Intelligence / Data Warehoue Testing)'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-1550073463536650350</id><published>2010-07-02T18:06:00.000+05:30</published><updated>2010-07-02T18:07:24.728+05:30</updated><title type='text'>Saga of Unsung Heroes (A tribute to all testers in this world)</title><content type='html'>&lt;a title="View Saga of Unsung Heroes (A tribute to all testers in this world) on Scribd" href="http://www.scribd.com/doc/33819436/Saga-of-Unsung-Heroes-A-tribute-to-all-testers-in-this-world" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;Saga of Unsung Heroes (A tribute to all testers in this world)&lt;/a&gt; &lt;object id="doc_223391419930365" name="doc_223391419930365" height="500" width="100%" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline:none;" rel="media:presentation" resource="http://d1.scribdassets.com/ScribdViewer.swf?document_id=33819436&amp;access_key=key-1alncmpp2zd2dqhgvs1h&amp;page=1&amp;viewMode=slideshow" xmlns:media="http://search.yahoo.com/searchmonkey/media/" xmlns:dc="http://purl.org/dc/terms/" &gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="FlashVars" value="document_id=33819436&amp;access_key=key-1alncmpp2zd2dqhgvs1h&amp;page=1&amp;viewMode=slideshow"&gt;   &lt;embed id="doc_223391419930365" name="doc_223391419930365" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=33819436&amp;access_key=key-1alncmpp2zd2dqhgvs1h&amp;page=1&amp;viewMode=slideshow" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="500" width="100%" wmode="opaque" bgcolor="#ffffff"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-1550073463536650350?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/1550073463536650350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=1550073463536650350' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/1550073463536650350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/1550073463536650350'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2010/07/saga-of-unsung-heroes-tribute-to-all.html' title='Saga of Unsung Heroes (A tribute to all testers in this world)'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-1633035148159291719</id><published>2009-12-17T16:51:00.001+05:30</published><updated>2009-12-17T16:51:50.349+05:30</updated><title type='text'>Correlation between Cyclometric Complexity &amp; Code Coverage while doing White box testing</title><content type='html'>&lt;p&gt;If you are among those testers (or developers) who have often wondered how cyclometric complexity can practically help me achieve higher code coverage and uncovering max number of bugs by executing minimum no. of unit test then please read on. I have tried to take a very simple example and have focussed on explaining the very basics with data and images only to make sure you can visualize and understand the differences between statement coverage, decision coverage and path coverage and their relationship with cyclometric complexity for once and all.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Pseudocode &lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Read a;&lt;/p&gt;  &lt;p&gt;Read b;&lt;/p&gt;  &lt;p&gt;if(a&amp;gt;=b)&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; print&amp;#160; a&lt;/p&gt;  &lt;p align="left"&gt;else&lt;/p&gt;  &lt;p align="left"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; print b&lt;/p&gt;  &lt;p align="left"&gt;Do x;&lt;/p&gt;  &lt;p align="left"&gt;if (a ==0)&lt;/p&gt;  &lt;p align="left"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; print “Zero”&lt;/p&gt;  &lt;p align="left"&gt;do nothing;&lt;/p&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;Flow chart of the above pseudocode:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="left"&gt;&lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/SyoT_-6W1sI/AAAAAAAAF54/Oztlf_m6pls/s1600-h/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_IWEJ_QTVH1c/SyoUBxmaHyI/AAAAAAAAF58/760f3i4Obu0/image_thumb%5B1%5D.png?imgmax=800" width="319" height="529" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Cyclometric Complexity:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;= E-N + 2P&amp;#160; (where E is no. of edges, N is the no. of node and P is the no. of connected components in the above graph)&lt;/p&gt;  &lt;p&gt;= 10 – 9 + 2 x 1&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;= 3&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Minimum Test Required for&amp;#160; 100 % Statement coverage:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Unit Test #1:&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Test data: a = 0, b = –1&amp;#160; (True &amp;amp; True)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_IWEJ_QTVH1c/SyoUCvBC9iI/AAAAAAAAF6A/_IUUGeMvKuQ/s1600-h/cyclometric%20complexity_SC_Test1%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="cyclometric complexity_SC_Test1" border="0" alt="cyclometric complexity_SC_Test1" src="http://lh6.ggpht.com/_IWEJ_QTVH1c/SyoUEtdxmiI/AAAAAAAAF6E/K4h5tIAPdHk/cyclometric%20complexity_SC_Test1_thumb%5B1%5D.png?imgmax=800" width="290" height="480" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Unit Test #2:&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Test data = a =0, b = 2 (False &amp;amp; True)&lt;/p&gt;  &lt;p&gt;Total&amp;#160; test required for 100 % statement coverage = 2&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/SyoUFMm17hI/AAAAAAAAF6I/MHYGE-s9o_k/s1600-h/cyclometric%20complexity_SC_Test2%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="cyclometric complexity_SC_Test2" border="0" alt="cyclometric complexity_SC_Test2" src="http://lh6.ggpht.com/_IWEJ_QTVH1c/SyoUF6qImxI/AAAAAAAAF6M/RD4OKcvEkZE/cyclometric%20complexity_SC_Test2_thumb%5B2%5D.png?imgmax=800" width="298" height="485" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;With the above two test cases we are able to execute each line of code at least once.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Minimum Test Required for 100 % Branch Coverage or Decision Coverage&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Unit Test #1:&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;Test data: a = 0, b = –1&amp;#160;&amp;#160;&amp;#160; (True &amp;amp; True)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/SyoUGtF3tPI/AAAAAAAAF6Q/7ScNP2iNyHw/s1600-h/cyclometric%20complexity_SC_Test1%5B15%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="cyclometric complexity_SC_Test1" border="0" alt="cyclometric complexity_SC_Test1" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/SyoUHdLp-JI/AAAAAAAAF6U/ldN5sUX9cbE/cyclometric%20complexity_SC_Test1_thumb%5B7%5D.png?imgmax=800" width="273" height="452" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Unit Test #2:&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Test data: a =1, b = 2&amp;#160; (False &amp;amp; False)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_IWEJ_QTVH1c/SyoUIHKIzeI/AAAAAAAAF6Y/duxSZvddDZ0/s1600-h/cyclometric%20complexity_bc_test1%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="cyclometric complexity_bc_test1" border="0" alt="cyclometric complexity_bc_test1" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/SyoUI5_XNYI/AAAAAAAAF6c/093A7XzG0CE/cyclometric%20complexity_bc_test1_thumb%5B1%5D.png?imgmax=800" width="289" height="479" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Total&amp;#160; test required for 100 % branch coverage = 2&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Minimum Test Required for 100 % Path Coverage (Basis Path Coverage)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Unit Test #1:&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Test data: a = 0, b = –1&amp;#160; (True &amp;amp; True Input)&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;lt; same as scenario #1 of statement coverage&amp;gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/SyoUJsaP1PI/AAAAAAAAF6g/BWU36oLH6w0/s1600-h/cyclometric%20complexity_SC_Test1%5B11%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="cyclometric complexity_SC_Test1" border="0" alt="cyclometric complexity_SC_Test1" src="http://lh4.ggpht.com/_IWEJ_QTVH1c/SyoUKfTYu5I/AAAAAAAAF6k/CNYp2IB5PCs/cyclometric%20complexity_SC_Test1_thumb%5B5%5D.png?imgmax=800" width="311" height="515" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Unit Test #2:&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Test Data : a = 1, b =0&amp;#160; (True &amp;amp; False Input)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh6.ggpht.com/_IWEJ_QTVH1c/SyoULdn-spI/AAAAAAAAF6o/PzPxHiUzzIs/s1600-h/cyclometric%20complexity_pc_t2%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="cyclometric complexity_pc_t2" border="0" alt="cyclometric complexity_pc_t2" src="http://lh6.ggpht.com/_IWEJ_QTVH1c/SyoUONP3jhI/AAAAAAAAF6s/i1-DYcjwZYA/cyclometric%20complexity_pc_t2_thumb%5B1%5D.png?imgmax=800" width="298" height="493" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Unit Test #3&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Test data:&amp;#160; a =0, b = 2 (False &amp;amp; True Input)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_IWEJ_QTVH1c/SyoUO65jDgI/AAAAAAAAF6w/AQtmFwyVttU/s1600-h/cyclometric%20complexity_pc_t3%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="cyclometric complexity_pc_t3" border="0" alt="cyclometric complexity_pc_t3" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/SyoUQpIkhuI/AAAAAAAAF60/N97wb_blAXg/cyclometric%20complexity_pc_t3_thumb%5B1%5D.png?imgmax=800" width="314" height="520" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Unit Test #4:&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Test data:&amp;#160; a =1, b = 2&amp;#160; (False and False Input)&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;lt;same as Scenario #2 of branch coverage&amp;gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_IWEJ_QTVH1c/SyoURfoToWI/AAAAAAAAF64/fDDVeHCTC68/s1600-h/cyclometric%20complexity_bc_test1%5B7%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="cyclometric complexity_bc_test1" border="0" alt="cyclometric complexity_bc_test1" src="http://lh4.ggpht.com/_IWEJ_QTVH1c/SyoUSdlsUHI/AAAAAAAAF68/xN-BDkwim48/cyclometric%20complexity_bc_test1_thumb%5B3%5D.png?imgmax=800" width="324" height="536" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Total&amp;#160; test required for 100 % path coverage = 4&amp;#160; (Which is also 2^2 choices where 2 is n decided by first IF-ELSE)&lt;/p&gt;  &lt;p&gt;basically what we have done above can also be shown in the form the grid:&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="408"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="135"&gt;&lt;strong&gt;Input\Output&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="91"&gt;&lt;strong&gt;First IF &lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="65"&gt;&lt;strong&gt;O/p of First IF&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="51"&gt;&lt;strong&gt;&amp;#160;&amp;#160; Second IF &lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="64"&gt;&lt;strong&gt;O/P of Second IF&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="135"&gt;a = 0, b = –1&amp;#160;&amp;#160; &lt;/td&gt;        &lt;td valign="top" width="91"&gt;&amp;#160;&lt;font color="#ff0000"&gt;True&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="65"&gt;Print a&lt;/td&gt;        &lt;td valign="top" width="51"&gt;&amp;#160;&lt;font color="#ff0000"&gt;True&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="64"&gt;Print 0&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="135"&gt;a = 1, b =0&lt;/td&gt;        &lt;td valign="top" width="91"&gt;&amp;#160;&lt;font color="#ff0000"&gt;True&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="65"&gt;Print a&lt;/td&gt;        &lt;td valign="top" width="51"&gt;&amp;#160;&lt;font color="#ff0000"&gt;False&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="64"&gt;&amp;#160;&amp;#160;&amp;#160; -&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="135"&gt;a =0, b = 2&lt;/td&gt;        &lt;td valign="top" width="91"&gt;&amp;#160;&lt;font color="#ff0000"&gt;False&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="65"&gt;Print b&lt;/td&gt;        &lt;td valign="top" width="51"&gt;&amp;#160;&lt;font color="#ff0000"&gt;True&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="64"&gt;print a&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="135"&gt;a =1, b = 2&lt;/td&gt;        &lt;td valign="top" width="91"&gt;&amp;#160;&lt;font color="#ff0000"&gt;False&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="65"&gt;Print b&lt;/td&gt;        &lt;td valign="top" width="51"&gt;&amp;#160;&lt;font color="#ff0000"&gt;False&lt;/font&gt;&lt;/td&gt;        &lt;td valign="top" width="64"&gt; - &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;Universal Formula: &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;Branch Coverage &amp;lt;=&amp;#160; Cyclometric Complexity &amp;lt;= Path Coverage&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Replacing our values:&lt;/p&gt;  &lt;p&gt;2 &amp;lt;= 3 &amp;lt;= 4 (holds good :))&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Now what do we conclude by doing all this:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0080ff"&gt;Does 100 % statement coverage ensures no bugs?&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;Answer is NO. 100% statement coverage just ensure every statement is executed at least once BUT it doesn’t guarantee that all the conditions are tested for different combination of data and hence it is not the most efficient method&lt;/p&gt;  &lt;p&gt;&lt;font color="#0080ff"&gt;Does 100 % branch coverage ensures no bugs?&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;Answer is again NO. 100 % branch coverage is certainly better than statement coverage and more efficient but it only ensures that each branch is executed at least once but again it doesn’t cover all the possible combinations&amp;#160; (like two Ifs can be tested with 2 branch test case for TT, FF where as total possible combination will be 4 (TT,TF,FT,FF) which are not getting covered here)&lt;/p&gt;  &lt;p&gt;&lt;font color="#0080ff"&gt;Which is the best way of ensuring 100 % code coverage.&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;Answer is Path Coverage (a.k.a. basis path testing). This is better than both statement and branch coverage. Though this is practically very impossible to cover all permutations and combinations (For ex when there are 2 IF statements, total paths are 2^2= 4 combination and as no. of Ifs in the program&amp;#160; goes to n, no of possible combination goes to 2^n)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#0080ff"&gt;Thats where cyclomertic complexity is used to find out the min test to be executed to achieve path coverage and the max test to be executed for branch coverage.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In above example, if the bug was in a condition when one first IF resulted into True (YES) and Second IF resulted into False (NO) then none statement coverage or branch coverage could find that bug and hence cyclometric complexity = 3 shows that adding one more scenario to branch coverage&amp;#160; as TF or FT (other than TT,FF) will help to uncover that bug so minimum 3 test are required to have high probability of uncovering bugs but max 4 test are required (max possible combinations) to ensure no bugs, which generally become impractical with the growing code containing multiple nested if-else and loops. &lt;/p&gt;  &lt;p&gt;Here cyclometric complexity helps unit tester decides at least what are the min no. of test that should be executed to cover the scenarios which have high probability of finding bugs out of total possible scenarios of path coverage (Which is 2^n)&lt;/p&gt;  &lt;p&gt;&lt;em&gt;PS: I want to thank Renu (an enthusiastic tester) to bring this topic in our discussions which triggered this interest in me to link all these pieces and try giving an overall perspective to testers by taking this simple example.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Feel free to write your comments to have a discussion or to clarify a point if you disagree.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-1633035148159291719?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/1633035148159291719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=1633035148159291719' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/1633035148159291719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/1633035148159291719'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2009/12/correlation-between-cyclometric.html' title='Correlation between Cyclometric Complexity &amp;amp; Code Coverage while doing White box testing'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_IWEJ_QTVH1c/SyoUBxmaHyI/AAAAAAAAF58/760f3i4Obu0/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-2450265517758280325</id><published>2009-10-07T15:41:00.001+05:30</published><updated>2009-10-07T15:48:37.344+05:30</updated><title type='text'>Do you have it in you? Technical skills are no more OPTIONAL skills for Software Testing</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Words of Caution&lt;/em&gt;: &lt;em&gt;When i say “Technical skills”&amp;#160; please don't confuse it with “Test Automation” knowledge only. It more and the less has become a standard in the industry to presume that knowing QTP or RFT is same as having technical skills.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;To start with, &lt;strong&gt;for a tester to be successful following are the 3 most important components &lt;/strong&gt;which you should never forget:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_IWEJ_QTVH1c/SsxpR4qyoaI/AAAAAAAAE48/6qCkzF1bN88/s1600-h/image3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_IWEJ_QTVH1c/SsxpSlvBS_I/AAAAAAAAE5A/FX7-qBhkapY/image_thumb1.png?imgmax=800" width="453" height="274" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In this blog post, we will talk about the second most important component “&lt;strong&gt;Technical Skills&lt;/strong&gt;” which is only next to “Testing Skills &amp;amp; Aptitude” for a tester to be successful in the next decade.&amp;#160; &lt;/p&gt;  &lt;p&gt;In last decade or so, testing has been tagged and given the title of an easy profession where non-technical candidates (&lt;em&gt;who aren’t capable of writing or understanding the code)&lt;/em&gt; can write some test cases and execute them to find issues. It was considered having domain knowledge to understand the business is sufficient to be a successful tester.&lt;/p&gt;  &lt;p&gt;In last 5 yrs, automation has become the talk of the town as it has become a successful marketing tool to win more projects by showing huge ROIs benefits of million of dollars to the customers. We have also witnessed the same trend by the emergence of specialized commercial testing tools by big players like IBM, HP &amp;amp; Microsoft in this arena. &lt;/p&gt;  &lt;p&gt;Lot of candidates in testing do have technical skills but they don't hone it or have stopped using them because of the popular perception that &lt;em&gt;“its not test‘s job to write/read code”.&lt;/em&gt; The max they do is automation &lt;em&gt;(where record/playback is most popular and only a few percentage (&amp;lt;20%) can truly write automation code to validate the application)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Because testing is considered a second fiddle to Development and the best minds get/shift into development, testing community is lagging seriously on&amp;#160; candidates with strong technical skills.&lt;/p&gt;  &lt;p&gt;Test automation is a subset of a broader category “Technical Skills”&amp;#160; and now (more than ever), importance is being given to other technical skills&amp;#160; other than test automation which are becoming mandatory to become a successful&amp;#160; test professionals at organizations.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Following&amp;#160; 10 are the skills / activities / tasks where technical skills of a tester is tested&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;em&gt;(you might have read many of these in your testing training / process tutorials but now time has come to start exercising these&lt;/em&gt;)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. Requirement Feasibility:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Don’t get surprised, there is not typo error here. You read it all right that requirement analysis ALSO requires you to have technical skills to understand if the requirements expected by the customer are POSSIBLE or not. Lot of times there are “&lt;em&gt;technology constraints&lt;/em&gt;” and unless you understand the underlying technology you run a risk of committing on a requirement which can’t be implemented and you must know that telling customer on the last day wont be such a great idea.&lt;/p&gt;  &lt;p&gt;Its not only dev job to call out technical constraints. In fact test can call out if a particular requirement is too unrealistic or ambitious to be implemented if they understand the technology well. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;For ex. I can tell the business upfront that a specific multi select tree control is not present in c# and we need to think of an alternative. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2. Scalability Study (Hardware/Software): &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Your app used to work fine and then a new functionality was added and then in the next release all of a sudden the app started hanging or the batch job is taking infinite time.&lt;/em&gt; If you have had experience something similar to this, you are a victim of “&lt;em&gt;hardware/software constraints&lt;/em&gt;” which was not thought in advance.&lt;/p&gt;  &lt;p&gt;Lets say the users have increased to million from thousand and you hardware RAM and Processor is not enough to handle so much traffic &lt;/p&gt;  &lt;p&gt;OR &lt;/p&gt;  &lt;p&gt;Your RDBMS cant handle more than 10000 concurrent connections. &lt;/p&gt;  &lt;p&gt;So it is must for you to understand your platform (hardware + software) and their boundary limits so that you can avoid surprised and downtimes in production leading to SLA misses and customer dissatisfaction.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3. Design consideration&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;When is the last time you were in a design meeting where you contributed to the translation of the requirements into design or more importantly, when you helped avoiding developers to commit a design blunder where let’s say they misunderstood the requirement and the flow was incorrect.&lt;/p&gt;  &lt;p&gt;Unless you understand the development models and don't participate in high level and low level designs meetings you wont understand what’s happening &lt;strong&gt;“behind-the-scenes”. &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It can also help you to write better test cases by understanding the flow of the system and how modules are integrated. Black box testing is not sufficient always when the architecture &amp;amp; the flow becomes complex as not all implementation details are captured in the functional specifications.&lt;/p&gt;  &lt;p&gt;Technical design documents should also be evaluated by the testing team where say why Approach A is preferred over other options considered like Approach B or C. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4. Code walkthrough &amp;amp; Inspection&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This might give nightmares to many test professions. They just hate looking at the code but believe me you can find lot of bugs by inspecting the code even before the code is dropped to testing. This static testing can save lot of time by avoiding a buggy code to be dropped to test. &lt;/p&gt;  &lt;p&gt;You must understand the syntax and semantics of the language being used (C#, java etc) and ask the right questions to find out any memory leak or incorrect loop/condition clause being used in the code &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5. Unit Testing &amp;amp; Integration Testing &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Okay I wont start a debate by saying test should do unit testing but you will surely come across a situation in your long testing career when you will agree that knowing unit testing help a big deal.&lt;/p&gt;  &lt;p&gt;For example, how do you do &lt;strong&gt;code coverage&lt;/strong&gt; now? Unless you know all the inputs/outputs, all the main flows and branches, all the conditions and exception handling code, we cant write good scenarios to exercise critical code paths.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;6. Performance tuning&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;With more and more focus now given on customer satisfaction, performance testing is something now which goes without saying and every customer expects it by default. It is extremely critical now for test team to ensure that the performance is well within customer’s expectations and with high traffic OR volume of data the application would respond within the SLA agreed at the time of signing-off requirements (as part of acceptance criteria).&lt;/p&gt;  &lt;p&gt;Unless test teams are familiar with performance counters of the operating system and the the software / technology being used, bottlenecks and potential issues cant be determined. &lt;/p&gt;  &lt;p&gt;Also when you want to simulate real-world scenario say to simulate 100000 concurrent users, the knowledge of session management and other technical concepts are must.&lt;/p&gt;  &lt;p&gt;Many a times the queries / code are not optimized and it is also important to understand if the code written is efficient or not&amp;#160; and also if there is a better way of writing the code which can improve the product’s performance.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;8. Security testing &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;With the increasing number of virus attacks and the risk involved with losing highly confidential customer data&amp;#160; or any possible frauds, tester’s contribution has become very crucial.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;For example: &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;How can you test your application for SQL injection if you aren’t good at SQL?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;or &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;How would you test your application for exposing any confidential data if you aren’t good at encryption/decryption algorithms or understanding&amp;#160; different masking techniques?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;or &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;How do you ensure which port shouldn’t be open/closed unless you understand the networking concepts well.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;These are just some high level examples trust me security testing is much more than that and now constitutes of many modern&amp;#160; &amp;amp; advanced techniques like fuzzing etc&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;9. Deployment &amp;amp; Prod Support&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We are the gatekeepers of the application. It goes from our hand to Support folks for UAT &amp;amp; Production deployment. If we don't understand the configurations setting or environment pre-requisites to run our applications, chances are there that business would lose lot of their precious time waiting for your dev team to come and rescue you.&lt;/p&gt;  &lt;p&gt;I am sure you don't want to end up there and its critical to understand the installation and configuration setting, troubleshooting tips and common FAQs&lt;/p&gt;  &lt;p&gt;&lt;em&gt;For example, there was a permission issue which was holding your user from using the application and you just don't know how to give the appropriate permission. Believe me it can be very embarrassing and frustrating at times&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;That’s your lucky chance to build credibility with business and Support folks and help them get-going without wasting any amount of time.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;10. Automation&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;And just because I haven’t kept at top of the list doesn't mean its less important than any of the above activities. Its the most important activity only next to manual testing but lot has been written about it and there is much more understanding and awareness about test automation in the industry now and hence I am keeping this short.&lt;/p&gt;  &lt;p&gt;With this I am closing this post and i hope this will provide a quick checklist to the testers to become ideal testers-of-future.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-2450265517758280325?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/2450265517758280325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=2450265517758280325' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/2450265517758280325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/2450265517758280325'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2009/10/do-you-have-it-in-you-technical-skills.html' title='Do you have it in you? Technical skills are no more OPTIONAL skills for Software Testing'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_IWEJ_QTVH1c/SsxpSlvBS_I/AAAAAAAAE5A/FX7-qBhkapY/s72-c/image_thumb1.png?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-3711092745071793764</id><published>2009-10-01T21:22:00.001+05:30</published><updated>2009-10-01T21:22:54.041+05:30</updated><title type='text'>Testing:: Chosen-By-Profession turned Chose-the-Profession.</title><content type='html'>&lt;p&gt;It was morning of 12th Nov, 2004 when I found myself standing in a classroom and for the first time it was my back facing the black board and a new batch of&amp;#160; future software professionals sitting in front of me and most of them were as anxious as me &lt;em&gt;(obviously for different reasons).&lt;/em&gt; These young professionals fresh out of top colleges in India were campus hired ELTs (Entry Level Trainees) of Cognizant Technology Solutions.&lt;/p&gt;  &lt;p&gt;Since that day and the day when I am typing this I have come across many Software Testers (&lt;em&gt;99.9% of them where chosen by the profession and not otherwise&lt;/em&gt;) and the questions I have been asked or I could read it on their face is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="left"&gt;“What am I doing in Software Testing Batch? OR Why am I not present in .Net/Java Batch running in next classroom? Am I not good enough?”&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;“Don’t I have required technical skills to be in Development? OR Based on my aptitude have I been put into Testing?”&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;“Do people get lesser raise / bonus in Testing over Development?”&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;“If I perform well and prove my skills, will they shift me into development?”&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;“My elder brother/ cousin/parents/uncle etc told me that testing is not a good profession and its just about validating someone’s one. Is that true?”&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Anyone who was present in one of those classrooms is reading this blog would know that raising above questions is definitely no sin and in fact I had the same questions myself as i was “&lt;em&gt;chosen-by-the-profession&lt;/em&gt;” too. &lt;em&gt;Please make a note here (I said “I was” and not “I am”). &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I would have moved into development way back in 2004 but i CHOSE to stay in Software Testing and that was BY-CHOICE. Just to give you a brief background (no boasting here), I used to and still think that i am amazingly good in development &lt;em&gt;(and yes i did all graduation lab &amp;amp; major projects on my own –be it C, C++,Computer Graphics Linux, Oracle, Java and got 3 scholarships for topping the college)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Times have changed since 2003-04 and now testing has turned out to be a lucrative and easy career option for candidates who find it difficult to crack into development but in next few paragraphs you will read &lt;em&gt;“How I fell in love with Software Testing” and “Why Software testing is as good as Building software”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Software Testing is fun&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;If as a kid you enjoyed playing with a new electronic gadget more than building sand castles you will know what am i talking about?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;or &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;If you had the curiosity and strong urge to see how watch or a transistor works, you will be able to correlate the itching that you get when you want to understand the new unexplored&amp;#160; &amp;amp; unseen thing&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;so guys, testing is like seeing a product and then letting yourself go with the flow and try to understand how it works and where it doesn’t?&lt;/p&gt;  &lt;p&gt;Human mind always wants to find out what you CANT do with any object in hand. and let’s say getting paid for it. Isn’t it a bonus?&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Software Testing is an ART&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Software Testing is art and so is software development as well but think of it that specifications and requirements say “&lt;em&gt;what needs to be done&lt;/em&gt;” and design done by the architects &amp;amp; modellers says “&lt;em&gt;how is it to be done&lt;/em&gt;” so development is left with very LITTLE room for innovation. I have known developers whose jobs are so monotonous and life is limited to just convert the plain English into a programming language code.&lt;/p&gt;  &lt;p&gt;Now in Software Testing nobody says “HOW IT NEEDS TO BE TESTED?” :)&lt;/p&gt;  &lt;p&gt;To an extent test plan and test strategy covers the scope and approaches to be followed but as a tester you can think innovative and challenge the very requirement or a workflow or a specific behaviour. You have absolute power to think of a undocumented alternative path and ultimately discover a MISSING/EXTRA requirement. &lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Software Testing is Advocacy&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;You like fighting for a cause ? You like making sure that justice is done? &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;You are customer’s advocate and most of the time he might not be even knowing it. Its YOU who has to ensure that justice is served and your customer is getting service / experience for the amount paid. Usability / Accessibility / Security / Performance are few non-explicit expectations which often get ignored by Developers, Managers, Business Analyst and that’s something can make a huge difference in a great customer experience.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Software Testing is Progressive&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;You want to be an entrepreneur? You want to understand your business?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;There are lot of customer-facing professionals / business analyst who have been testers in their early career. The obvious reason why they are so successful is that they GET TO SEE A BIGGER PICTURE. They understand business better than developers because:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;1. They clarify requirements / bugs directly or indirectly with customers&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;2. They understand the whole system (multiple modules and their integration)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;3. They don’t get distracted by getting too deep in technology&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Software Testing is Respectable&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;You have the key responsibility. You got to to take the call here. GO / NO-GO? &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Customer &amp;amp; Management relies on your work to decide if we are ready to go into the wild and compete with the world.&lt;/p&gt;  &lt;p&gt;You are the one who drives the Quality. You are the one who ensure processes are adhered to. You are the gate keeper.&amp;#160; You are the important one here.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Software Testing is Challenge&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you are the one who don't like life to be boring or predictable, then join Testing.&amp;#160; One life is not enough to learn everything in testing. Sometimes reproducing a simple-yet-important bug becomes a nightmare and at times understanding the customer requirement becomes so tough when you are working in an offshore model or when the dev slips and you are the one who has to still deliver quality without compromising on the timelines. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Software Testing is Technical&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;My favourite. This is exactly opposite to the popular belief that testing don’t need good testing skills. In fact, if you are not technical:&lt;/p&gt;  &lt;p&gt;1. You won’t be able to repro many bugs because unless you understand &lt;em&gt;what's-happening-behind-the-scenes &lt;/em&gt;you wont understand the problem&lt;/p&gt;  &lt;p&gt;2. You wont be able to find the root cause many times. You will just be able to say “there is a problem” but “don’t-know-why”&lt;/p&gt;  &lt;p&gt;3. You wont be able to suggest a better solutions / alternative&lt;/p&gt;  &lt;p&gt;In the end, software testing is one profession that requires great communication skills, strong technical skills and most importantly a testing mind (passion to learn and understand new things)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Remember, Testing will Test you&amp;#160; FOREVER.&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-3711092745071793764?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/3711092745071793764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=3711092745071793764' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/3711092745071793764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/3711092745071793764'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2009/10/testing-chosen-by-profession-turned.html' title='Testing:: Chosen-By-Profession turned Chose-the-Profession.'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-6749824312313286906</id><published>2009-04-06T23:07:00.004+05:30</published><updated>2009-04-06T23:38:28.754+05:30</updated><title type='text'>Reduced / Selective Test Data Execution to SAVE Time &amp; Effort - Introduction</title><content type='html'>Context: &lt;strong&gt;Data Warehouse / Business Intelligence (ETL Execution)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Background: &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;If you have ever involved in DW/BI Testing, waiting for ETL execution to complete won't be an alien subject to you. Its not ONLY frustating to discover ETL fails at Step X after running for say 8 long hours but its ALSO a show stopper for you to continue with your functional testing and directly impacts your efficiency and effectiveness.&lt;br /&gt;&lt;br /&gt;If there are performance lags (like low configuration h/w, network bandwidth etc), the ETL job is only going to take longer than expected and often times this adds to higher WAIT Time (a.k.a NON Productive time).  &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Root Cause: &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;If dev / test team wants to run the ETL with Production data, which can be really huge (in GBs or sometimes even TBs), due to the volume its obviously takes a long time.&lt;br /&gt;Trade Off is REAL vs SIMULATED data. Testing with REAL data comes with a cost.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Is testing team the only victim? &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Answer is NO.&lt;/em&gt; Even Dev team has to wait for entire ETL to run to see the changes made in the code while doing integration testing.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Why don't we create Smaller test data ALWAYS?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;-&gt; Due to the data integration and transformational complexities, the team has to have very deep domain knowledge of the business rules to create test data which satisfy the ETL conditions (often times lack of this results in ETL failure or ZERO o/p after the run)&lt;br /&gt;&lt;br /&gt;-&gt; If the complexity is high (consider data coming from multiple disparate sources) then creating data while maintainig logical relationship can turn out to be quite tedious and time consuming.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Why dont we SELECT REDUCED / SUBSET of Test data from Production?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is the heart of this blog and we are going to emphasize on this in detail. Though the above sounds simple and the obvious solution but it has been observed that teams dont find it very popular time because of following important reasons:&lt;br /&gt;&lt;br /&gt;1. Random sampling of data doesnt work. Many times it will result in ORPHAN RECORDS (where you might end up pulling child records without parents records from the source)&lt;br /&gt;&lt;br /&gt;2. ETL might break if the keys are not found.&lt;br /&gt;&lt;br /&gt;3. ETL might succeed but can result in ZERO output records as none of the business conditions got satisfied for the the sample data.&lt;br /&gt;&lt;br /&gt;4. Business / Domain knowledge is required&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What do we recommend to select SUBSET test data with success?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;1. Select a pattern: &lt;br /&gt;&lt;br /&gt;a) Master Data Driven&lt;br /&gt;&lt;br /&gt;b) Transaction Data Driven:&lt;br /&gt;&lt;br /&gt;2. Identify Business Conditions&lt;br /&gt;&lt;br /&gt;3. Select Sampling Method&lt;br /&gt;&lt;br /&gt;4. Copy the SELECTED test data to a test db&lt;br /&gt;&lt;br /&gt;5. Modify Test Data to cover Boundary Value conditions&lt;br /&gt;&lt;br /&gt;6. Run the ETL &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What are the advantages?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. Save Time&lt;br /&gt;&lt;br /&gt;2. Save Effort&lt;br /&gt;&lt;br /&gt;3. Save Hardware Cost (Less Data, Less Space and computational resources required)&lt;br /&gt;&lt;br /&gt;4. Better Test Coverage (High Requirement Coverage)&lt;br /&gt;&lt;br /&gt;5. Better Code Coverage&lt;br /&gt;&lt;br /&gt;&lt;em&gt;The subsequent post will focus on the above methods in detail....Please share your feedback and suggestions.&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-6749824312313286906?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/6749824312313286906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=6749824312313286906' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/6749824312313286906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/6749824312313286906'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2009/04/reduced-selective-test-data-execution.html' title='Reduced / Selective Test Data Execution to SAVE Time &amp; Effort - Introduction'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-7307881043321557400</id><published>2008-12-13T00:50:00.002+05:30</published><updated>2008-12-13T00:51:41.344+05:30</updated><title type='text'>SSAS Cube Testing</title><content type='html'>&lt;h4&gt;&lt;a name="_Toc216852184"&gt;1.1 BVT / Smoke Testing Scenarios:&lt;/a&gt;&lt;/h4&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1. Ensure only the user with the desired permission is able to connect to the cube&lt;/p&gt;    &lt;p&gt;2. Validate Data Source Connection string for cube&lt;/p&gt;    &lt;p&gt;&lt;i&gt;E.g. Provider=SQLOLEDB.1;Data Source=&amp;lt;Test ETL Server&amp;gt;.redmond.corp.microsoft.com;Integrated Security=SSPI;Initial Catalog=dbCPRMart&lt;/i&gt;&lt;/p&gt;    &lt;p&gt;3. Validate your are able to successfully process the cube&lt;/p&gt;    &lt;p&gt;4. Validate your are able to browse the cube&lt;/p&gt;    &lt;p&gt;5. Configure and validating Analysis Services Query Logging&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;&lt;a name="_Toc216852185"&gt;1.2 Data Validation Scenarios:&lt;/a&gt;&lt;/h4&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;b&gt;Approach 1: Browse the cube using BIDS or SQL Server Management Studio and compare the output against Mart using SQL query&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;If it&amp;#8217;s a new development of a Cube, Browse the Cube, drag and drop measures on the Page and Dimension on the Y-axis. You need to write T-SQL that does similar aggregation that brings similar output.&lt;/p&gt;    &lt;p&gt;Eg: &lt;/p&gt;    &lt;p&gt;OWC Output:&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SALES&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; PROFIT&lt;/p&gt;    &lt;p&gt;AP &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHINA&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 200&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 60&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; INDIA&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 250&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 50&lt;/p&gt;    &lt;p&gt;US&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHICAGO&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 500&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 65&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WASHINGTON&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 550&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 65&lt;/p&gt;    &lt;p&gt;Equivalent T-SQL:&lt;/p&gt;    &lt;p&gt;SELECT REGION, CITY, SUM(SALES ), SUM(PROFIT)&amp;#160; FROM GEOG G JOIN SALES&amp;#160; S FACT ON G.ID=S.ID&lt;/p&gt;    &lt;p&gt;GROUP BY REGION, CITY ORDER BY 2&lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;b&gt;Approach 2: MDX query to compare data with SQL Query executed against Mart&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;2.1 For simpler Cube &amp;amp; Dimensional Models&lt;/p&gt;    &lt;p&gt;Write your MDX query and compose SQL query for the same conditions and results should match&lt;/p&gt;    &lt;p&gt;2.2 Automatically generate MDX using SQL Profiler &amp;amp; Reporting tools and compare it against SQL&lt;/p&gt;    &lt;p&gt;SQL Profiler &amp;amp; Reporting Tools like PPS, ProClarity provide the capability of generating MDX on Cube conditions. Use these MDX against the SQL queries formed by you based on the relational / dimensional model on Mart.&lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;Approach 3: Black box testing using sample test data&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;Insert / Update / Delete test data in your backend and calculate the outcome value based on the desired functionality / requirement without going to cube and ensuring that your expected output value matches the cube output in the final reports.&lt;/p&gt;    &lt;p&gt;&lt;b&gt;Approach 4: &lt;/b&gt;&lt;b&gt;AMOMD object Compare&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;Create Automatic Verification Mechanism between OLAP and SQL objects&lt;/p&gt;    &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc281460.aspx"&gt;&lt;b&gt;http://msdn.microsoft.com/en-us/library/cc281460.aspx&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc280975.aspx"&gt;&lt;b&gt;http://msdn.microsoft.com/en-us/library/cc280975.aspx&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/SUK5J6FWf9I/AAAAAAAAEEQ/7U-4Kvj_hDM/clip_image002%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="clip_image002" src="http://lh6.ggpht.com/_IWEJ_QTVH1c/SUK5K5YYn_I/AAAAAAAAEEU/cmotcm9wryk/clip_image002_thumb%5B1%5D.jpg" width="350" height="382" /&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;Figure: shows a high-level view of the AMO object model for OLAP objects&lt;/p&gt;    &lt;p&gt;&lt;b&gt;Reference: &lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://microsoft.apress.com/feature/74/introduction-to-analysis-management-object-amo-programming"&gt;&lt;b&gt;http://microsoft.apress.com/feature/74/introduction-to-analysis-management-object-amo-programming&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;&lt;a name="_Toc216852186"&gt;1.3 Cube Design Scenarios:&lt;/a&gt;&lt;/h4&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;Validate all measures&lt;/b&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Open Visual Studio analysis services DB&lt;/li&gt;      &lt;li&gt;Browse and Open Cube DB&lt;/li&gt;      &lt;li&gt;Double Cube and browse to &amp;quot;Measure&amp;quot; pane&lt;/li&gt;      &lt;li&gt;Select measure &amp;lt;measure name&amp;gt; &lt;/li&gt;      &lt;li&gt;Go to Properties, and check &amp;quot;source&amp;quot; field&lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;i&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Expected Result:&lt;/i&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Measure source should be set to correct table as source table and correct column as source column in Mart&lt;/li&gt;      &lt;li&gt;Ensure measure has all the required fields / columns as present in the mart&lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;Validate all dimensions &amp;amp; dimension hierarchies&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Open Visual Studio analysis services DB&lt;/li&gt;      &lt;li&gt;Browse and Open Cube DB&lt;/li&gt;      &lt;li&gt;Double click Cube and open data source views and Open &amp;lt;Dimension name&amp;gt; Dimension under &amp;quot;Dimensions&amp;quot;&lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;i&gt;&amp;#160;&amp;#160; Expected Result:&lt;/i&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Make sure Table columns in Mart are mapped to Dimension correctly&lt;/li&gt;      &lt;li&gt;Make sure Dimension key is correctly mapped to Dimension key column of the dimension Table in Mart&lt;/li&gt;      &lt;li&gt;Make sure all the required columns / fields are present in dimension as present in mart&lt;/li&gt;      &lt;li&gt;Ensure Hierarchy is correctly defined&lt;/li&gt;      &lt;li&gt;&lt;i&gt;Fiscal Year -&amp;gt; Fiscal Month -&amp;gt; Fiscal Week -&amp;gt; Calendar date&lt;/i&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;Validate all calculated measures&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;Open Visual Studio analysis services DB&lt;/li&gt;      &lt;li&gt;Browse and Open Cube and go to &amp;quot;Calculated&amp;quot; tab&lt;/li&gt;      &lt;li&gt;Check expression for &amp;quot;&lt;i&gt;Calculated measure name&lt;/i&gt;&amp;quot;&lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;i&gt;&amp;#160;&amp;#160;&amp;#160; Expected Result&lt;/i&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; The MDX expression defined should be accurate as per your requirements.&lt;/p&gt;    &lt;p&gt;&lt;i&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Eg. [Measures].[ChangePoint Total Backlog] + [Measures].[Siebel High Pipe] + [Measures].[Siebel Low Pipe]&lt;/i&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;4. &lt;/b&gt;&lt;b&gt;Validate &amp;#8220;Data Source Views&amp;#8221; of your cube against your design&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_IWEJ_QTVH1c/SUK5Mj2uTZI/AAAAAAAAEEY/7uk7P3mLUI8/image%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://lh4.ggpht.com/_IWEJ_QTVH1c/SUK5OCotfHI/AAAAAAAAEEc/20ae6R1EblA/image_thumb%5B1%5D.png" width="446" height="297" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;&lt;a name="_Toc216852187"&gt;1.4 Security Testing Scenarios:&lt;/a&gt;&lt;/h4&gt;  &lt;blockquote&gt;   &lt;p&gt;1. Ensure each user belonging to a cube role has appropriate access&lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/SUK5PfUQkWI/AAAAAAAAEEg/B3V0hriqV_E/clip_image002%5B5%5D%5B2%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="clip_image002[5]" src="http://lh4.ggpht.com/_IWEJ_QTVH1c/SUK5Qv2TliI/AAAAAAAAEEk/XHK7SLBqfSw/clip_image002%5B5%5D_thumb.jpg" width="221" height="93" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;2. User with read permission should only have access to browse the cube&lt;/p&gt;    &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;    &lt;p&gt;&lt;i&gt;Read Definition checkbox should be selected&lt;/i&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;a href="http://lh6.ggpht.com/_IWEJ_QTVH1c/SUK5Rzos3cI/AAAAAAAAEEo/Ju6PXxhZ1-U/clip_image004%5B6%5D%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="clip_image004[6]" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/SUK5S7cz2nI/AAAAAAAAEEs/hjgGYakxx54/clip_image004%5B6%5D_thumb%5B1%5D.jpg" width="451" height="209" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;3. User with Process permission should be able to process the cube as well.&lt;/p&gt;    &lt;p&gt;&lt;i&gt;Process Database checkbox should be selected&lt;/i&gt;&lt;/p&gt;    &lt;p&gt;4. User with Admin permission should be able to browse, process, make changes to the cube as well.&lt;/p&gt;    &lt;p&gt;&lt;i&gt;Full control (Administrator) checkbox should be selected&lt;/i&gt;&lt;/p&gt;    &lt;p&gt;&lt;i&gt;&lt;/i&gt;&lt;/p&gt;    &lt;p&gt;5. Cube roles should be mapped to correct users and group &lt;/p&gt;    &lt;p&gt;&lt;i&gt;&lt;a href="http://lh6.ggpht.com/_IWEJ_QTVH1c/SUK5T4RU-YI/AAAAAAAAEEw/_-CefQvbi1M/clip_image006%5B4%5D%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="clip_image006[4]" src="http://lh3.ggpht.com/_IWEJ_QTVH1c/SUK5VPVs-iI/AAAAAAAAEE0/0xltsdzDgrk/clip_image006%5B4%5D_thumb%5B1%5D.jpg" width="434" height="310" /&gt;&lt;/a&gt;&lt;/i&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;6. &lt;/b&gt;Cube roles should be having restricted access or unlimited access to dimension data based on the design and project needs&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/SUK5WYNApSI/AAAAAAAAEE4/ngQI0hmeByk/clip_image008%5B4%5D%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="clip_image008[4]" src="http://lh5.ggpht.com/_IWEJ_QTVH1c/SUK5YJ3-JDI/AAAAAAAAEE8/mr56x7B4Lq8/clip_image008%5B4%5D_thumb%5B1%5D.jpg" width="485" height="234" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;    &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;&lt;a name="_Toc216852188"&gt;1.5 Miscellaneous Scenarios:&lt;/a&gt;&lt;/h4&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1. Backup and Restore:&lt;/p&gt;    &lt;p&gt;Take the backup of the cube and try restoring. The functionality should remain working as earlier.&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;&lt;a name="_Toc216852189"&gt;1.6 Performance Scenarios:&lt;/a&gt;&lt;/h4&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1. Optimize Cube Aggregations&lt;/p&gt;    &lt;p&gt;Before running your stress tests, you&amp;#8217;ll want to ensure that you OLAP design has optimized aggregations. To optimize your aggregations, you&amp;#8217;ll need to first turn on SQL Server Analysis Services query logging, then run the cube optimization wizard.&lt;/p&gt;    &lt;p&gt;2. Using load simulator&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-7307881043321557400?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/7307881043321557400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=7307881043321557400' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/7307881043321557400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/7307881043321557400'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2008/12/ssas-cube-testing.html' title='SSAS Cube Testing'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_IWEJ_QTVH1c/SUK5K5YYn_I/AAAAAAAAEEU/cmotcm9wryk/s72-c/clip_image002_thumb%5B1%5D.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-8437421846582459904</id><published>2008-11-12T14:05:00.003+05:30</published><updated>2008-11-12T14:08:13.034+05:30</updated><title type='text'>Reduce number of invalid defects -&gt; Improve Test Productivity and Efficiency &amp;  Let your Developers be happy</title><content type='html'>&lt;p&gt;Just the other day we were discussing that how can we (testing team) reduce number of invalid defects. I was in deep thinking that why is it really important to reduce&amp;#160; the number of invalid defects. &lt;/p&gt;  &lt;ul&gt;   &lt;ul&gt;     &lt;li&gt;Isn't it a tester's fundamental job to log every potential defect and let it go through normal defect life cycle and let business and management take call if it is a valid defect or not?&lt;/li&gt;      &lt;li&gt;Isn't it right that tester shouldn't assume that it is not a bug and then regret later because of&amp;#160; a false assumption made?&lt;/li&gt;      &lt;li&gt;Isn't a tester taught to think negative and always be suspicious and uncover what is not seen by someone like dev?&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The point here is what is a big fuss if testing team raises 'invalid' defects unknowingly. At least they don't leave anything to assumptions which is far more dangerous. There primary job is to find defects, whether that is a 'valid' defect or not is a secondary question.&lt;/p&gt;  &lt;p&gt;One of the tester I am mentoring complained that his testing team had found 108 defects out of which 104&amp;#160; were valid and only 4 were invalid but his management didn't seem to appreciate them for the the number of valid defects found as they were expecting number of invalid defects to be zero.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My take on this:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Yes, it is important to reduce number of invalid defects. &lt;/p&gt;  &lt;p&gt;Why?&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;-&amp;gt; &lt;strong&gt;Test Metrics gets screwed (Test Effectiveness or lets say Test Productivity goes down with no. of invalid defects)&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Test Effectiveness = No .of Valid defect&amp;#160; / (No. of Valid Defects + No of invalid Defects) X 100 %&lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Example for above:&amp;#160; 104&amp;#160; / (104 + 4) X 100 % = ~96.6 %&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;-&amp;gt; Time lost in tracking and logging invalid bug&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;When you raise a bug in your reporting tool like Test Director, it has to go through complete bug lifecycle. Say you raised a bug spending effort in recording it and then it turned out to be invalid, you developer rejects it.&amp;#160; Finally you have to close it.&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt; -&amp;gt; Management don't like invalid bugs&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;You bet me that &amp;quot;invalid&amp;quot; bugs doesn't please any manager. It is a human behavior to criticize something that is not right.&amp;#160; It sets them off. &lt;/p&gt;    &lt;p&gt;&lt;strong&gt;-&amp;gt; Developers stop taking you seriously&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;When they observe that you raise many invalid bugs, they start expecting that every time. They stop paying due attention to valid bugs considering them to be invalid. Quality over Quantity concept.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;-&amp;gt; Time lost in triage meeting to discuss invalid bugs&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;When you log invalid bug, it not only your time getting lost, developers waste their time reading them, then testers and developers waste time arguing on that as it has been officially logged, and most importantly business waste their time in triage meeting to take call.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;-&amp;gt; Spoiling terms with development team&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Developers are under pressure to reduce number of defect found in their code by the test team. Now if you log it, they go defensive and try their best to prove your bug an invalid bug so that it doesn't spoil their commitments.&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;/p&gt;    &lt;p&gt;Now that we have a problem. Let me propose something which we successfully implemented &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_IWEJ_QTVH1c/SRqVaiCrGUI/AAAAAAAAEEI/Bl5bzimg1Y8/defect%20_review_cycle%5B12%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="361" alt="defect _review_cycle" src="http://lh6.ggpht.com/_IWEJ_QTVH1c/SRqVbHN39bI/AAAAAAAAEEM/xfyfpdYQnxM/defect%20_review_cycle_thumb%5B10%5D.jpg" width="519" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now with this process, every bugs gets verified online by the Development team even before we officially log it. They update the sheet saying that they are okay with so and so bugs and we log only those bugs in the Bug Management tool&amp;#160; and hence all &amp;quot;VALID&amp;quot; bugs.&lt;/p&gt;  &lt;p&gt;Bugs which they update as &amp;quot;INVALID&amp;quot; or &amp;quot;REJECTED&amp;quot;, we update the SHARED SHEET with more information like repro steps etc and they change the status in the sheet accordingly. Now if it was our fault and it was actually INVALID defect, we update the SHEET and close it there itself rather than logging it in bug management tool and going through the entire process.&lt;/p&gt;  &lt;p&gt;Now our metrics always say&amp;#160; 100 % valid bugs. We don't miss any bugs because we record it anyway in the Shared Sheet and triage it with development team online. Development team feels good as they get a chance to to repro bug and confirm before it is actually logged against them.&amp;#160; We don't have to waste time in the triage meetings discussing whether its a bug or not. Now business only take call on functional bugs which are more important to end user. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-8437421846582459904?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/8437421846582459904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=8437421846582459904' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/8437421846582459904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/8437421846582459904'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2008/11/reduce-number-of-invalid-defects.html' title='Reduce number of invalid defects -&amp;gt; Improve Test Productivity and Efficiency &amp;amp;  Let your Developers be happy'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_IWEJ_QTVH1c/SRqVbHN39bI/AAAAAAAAEEM/xfyfpdYQnxM/s72-c/defect%20_review_cycle_thumb%5B10%5D.jpg' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-6466407926172297218</id><published>2008-11-05T22:47:00.002+05:30</published><updated>2008-11-10T10:59:44.777+05:30</updated><title type='text'>Butterfly Effect in Software Testing (its happening all the time, did you ever notice)</title><content type='html'>&lt;p&gt;&amp;quot;Small variation in the initial condition of a dynamic system may produce large variation in the long term behavior of the system&amp;quot;&lt;/p&gt;  &lt;p&gt;Example: The phrase refers to the idea that a &lt;a href="http://en.wikipedia.org/wiki/Butterfly"&gt;butterfly&lt;/a&gt;'s wings might create tiny changes in the &lt;a href="http://en.wikipedia.org/wiki/Earth%27s_atmosphere"&gt;atmosphere&lt;/a&gt; that may ultimately alter the path of a &lt;a href="http://en.wikipedia.org/wiki/Tornado"&gt;tornado&lt;/a&gt; or delay, accelerate or even prevent the occurrence of a tornado in a certain location.&lt;/p&gt;  &lt;p&gt;and for we guys &lt;strong&gt;&amp;quot;Small variation in the initial&amp;#160; requirement of a dynamic application / product / system may produce large defects in the long term usage of the system&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Example: A tiny misinterpretation or misrepresentation of a customer expectation in the form of requirement can ultimately impact the analysis, design and code, testing in such a way that it might result in a product failure or in worst case business failure sometime&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;here tiny change in requirement can be compared with butterfly's flapping of wings and because this change was not detected in the requirement stage and it keeps on passing through analysis, design and coding phase and finally gets so much amplified that the impact becomes a huge loss to the business.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;One of my friend had been asked in an interview &amp;quot;&lt;strong&gt;what is Domino effect in software testing?&amp;quot;&amp;#160; &lt;/strong&gt;He didn't know and hence couldn't answer.&lt;/p&gt;  &lt;p&gt;It is again related to Butterfly effect and Chaos theory that a small change anywhere in the system (requirement, analysis, design, code, testing) can cause a similar change nearby and that will another similar change and so on in a linear sequence.&lt;/p&gt;  &lt;p&gt;Example: A wrong change in requirement -&amp;gt; similar change in analysis to accommodate that -&amp;gt; similar change in design for that analysis-&amp;gt; similar change in code for that analysis -&amp;gt; similar change in test cases for that requirement and so on.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_IWEJ_QTVH1c/SRHVHH1vsxI/AAAAAAAAEEA/1RwGzkydJVI/800px-Toppledominos%5B4%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="338" alt="800px-Toppledominos" src="http://lh6.ggpht.com/_IWEJ_QTVH1c/SRHVIJD8EfI/AAAAAAAAEEE/i2siL7msNU8/800px-Toppledominos_thumb%5B2%5D.jpg" width="505" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Interesting fact: The term is best known as a mechanical effect, and is used as an &lt;a href="http://en.wikipedia.org/wiki/Analogy"&gt;analogy&lt;/a&gt; to a falling row of &lt;a href="http://en.wikipedia.org/wiki/Dominoes"&gt;dominoes&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/111172825477675184-6466407926172297218?l=geektester.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://geektester.blogspot.com/feeds/6466407926172297218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=111172825477675184&amp;postID=6466407926172297218' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/6466407926172297218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/111172825477675184/posts/default/6466407926172297218'/><link rel='alternate' type='text/html' href='http://geektester.blogspot.com/2008/11/butterfly-effect-in-software-testing.html' title='Butterfly Effect in Software Testing (its happening all the time, did you ever notice)'/><author><name>Raj</name><uri>http://www.blogger.com/profile/08032643617387238222</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_IWEJ_QTVH1c/TDH0F3LeH2I/AAAAAAAAGPw/hZvz0vNe19E/S220/passport.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_IWEJ_QTVH1c/SRHVIJD8EfI/AAAAAAAAEEE/i2siL7msNU8/s72-c/800px-Toppledominos_thumb%5B2%5D.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-111172825477675184.post-706937396660578034</id><published>2008-11-01T16:46:00.007+05:30</published><updated>2010-07-02T18:05:26.272+05:30</updated><title type='text'>Resurrecting the Prodigal Son – Data Quality (Presented at Test2008)</title><content type='html'>&lt;a title="View Saga of Unsung Heroes (A tribute to all testers in this world) on Scribd" href="http://www.scribd.com/doc/33819436/Saga-of-Unsung-Heroes-A-tribute-to-all-testers-in-this-world" style="margin: 12px auto 6px auto; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none; display: block; text-decoration: underline;"&gt;Saga of Unsung Heroes (A tribute to all teste
