<?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-8297576379403344016</id><updated>2012-02-01T01:01:44.406-08:00</updated><category term='VBScript'/><category term='OWASP'/><category term='Requirement'/><category term='QTP'/><category term='Compatibility Testing'/><category term='Delete Folders'/><category term='Front-End Performance Testing'/><category term='Checklist'/><category term='Internet Explorer'/><category term='Security Testing'/><category term='Management'/><category term='Windows Hotfix'/><category term='Performance Testing'/><category term='Automation'/><category term='Testing'/><title type='text'>LN’s Testing Blog</title><subtitle type='html'>TESTER by INSTINCT, not by CHANCE.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-6350552115799403207</id><published>2010-12-28T12:45:00.001-08:00</published><updated>2010-12-28T12:45:13.226-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>Feedbacks – A Lesson Learnt</title><content type='html'>&lt;p&gt;Recently, I had an opportunity to sit with the customer and take the customer satisfaction feedback. During this meeting, I had a good lesson learnt which is the reason for this post. &lt;/p&gt;  &lt;p&gt;Usually Customer Satisfaction Review (CSR) is conducted quarterly. In a collaborative project where customer is also part of the project CSR means feedback by customer about the Project Manager, Project Team and the Organization on different aspects.&lt;/p&gt;  &lt;p&gt;We both (I and my customer contact) sat together in a silent room and started the discussion. He explained about all the good achievements that we had made and all other concerns that he had. These are all usual stuff. The interesting part was, he said it is easier for me to say that you have not done this and need to improve on this and so on. But, for me as a manager to you, all these feedbacks raise question “How did you help to the team to achieve this?”. &lt;/p&gt;  &lt;p&gt;Instantly, my thoughts went back thinking about “How I have helped my team members for whom I have commented saying you have not done this, you need to improve on that and so on..”&amp;#160; &lt;/p&gt;  &lt;p&gt;This looks very basic but an impressive question that many of us as managers never think about. This kind of retrospective is very important for&amp;#160; both of us ‘managers’ and 'receiver of the feedback’.&lt;/p&gt;  &lt;p&gt;Further, I thought about reaction of a manager to a question by a reportie saying, I agree to you that I could not do this (some task or goal …) but “How did you help me to achieve this?”&amp;#160; Most of the managers would feel uncomfortable to these questions. &lt;/p&gt;  &lt;p&gt;This is good lesson learnt for me. After some thinking around this, I have decided to implement this every time I need to give a feedback. &lt;/p&gt;  &lt;p&gt;Let me know if you have different thoughts or comments.&lt;/p&gt;  &lt;p&gt;Regards,&lt;/p&gt;  &lt;p&gt;LN &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8297576379403344016-6350552115799403207?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/6350552115799403207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=6350552115799403207' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/6350552115799403207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/6350552115799403207'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2010/12/feedbacks-lesson-learnt.html' title='Feedbacks – A Lesson Learnt'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-8499340530647799071</id><published>2010-06-06T04:00:00.001-07:00</published><updated>2010-06-06T04:01:24.975-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Front-End Performance Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance Testing'/><title type='text'>Low Cost Performance Testing with free tools - Front-End Performance Testing</title><content type='html'>&lt;p align="justify"&gt;In this article I will share information on conducting Front-End Performance Testing (FPT) which is low cost yet very effective and does not need any commercial tools to be used. Before starting with the core topic I should thank &lt;a href="http://stevesouders.com/" target="_blank"&gt;Steve Souders&lt;/a&gt; for writing great books &lt;a href="http://oreilly.com/catalog/9780596529307" target="_blank"&gt;High Performance Web Sites&lt;/a&gt; and &lt;a href="http://www.amazon.com/dp/0596522304?tag=stevsoud-20&amp;amp;camp=213381&amp;amp;creative=390973&amp;amp;linkCode=as4&amp;amp;creativeASIN=0596522304&amp;amp;adid=06CYZRAY3SH41VAJXS7E&amp;amp;" target="_blank"&gt;Even Faster Websites&lt;/a&gt; and &lt;a href="http://www.perftestplus.com/scott_blog.php" target="_blank"&gt;Scott Barber&lt;/a&gt; for making it easier by bringing in the heuristic approach.&lt;/p&gt;  &lt;p align="justify"&gt;So, what is Front-End Performance Testing?&lt;/p&gt;  &lt;p align="justify"&gt;The Front-End Performance Testing is Monitoring and measuring the user experience from&amp;#160; the performance point of view and validating the front-end design with respect to the practices for high performance websites without any focus on the server side load. FPT is conducted to find any client side performance problems in the application. &lt;/p&gt;  &lt;p align="justify"&gt;You may ask why do we need to conduct FPT? &lt;/p&gt;  &lt;p align="justify"&gt;FPT is important for the reasons listed below (few of the points I have taken it from Scott Barber’s article on FPT)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;50-90% of a web page's response time results from front-end design and implementation&amp;#160; (Taken from Scott Barber’s &lt;a href="http://searchsoftwarequality.techtarget.com/tip/0,289483,sid92_gci1301766,00.html" target="_blank"&gt;article&lt;/a&gt;) &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;The front-end design and development of websites is conducted with little to no thought on performance (Other than, possibly reducing the size of the graphics) &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Usually neglected by development considering the client system not in control. Also, neglected by test team during testing &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Checking/Testing for potentially largest and cheapest performance improvements &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Relatively easy to conduct tests and investigate the Front-End performance issues (in comparison with backend performance tests) &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Minimal learning curve, can be tested by developers or testers [Capturing the data may not need any experience but effective analysis of the captured data needs reasonable performance testing skills and understanding] &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;The client side processing and activities done at the client side by Java Script and Silverlight or not captured by LoadRunner like performance test tools that work on the HTTP/HTTPs layer (E.G. You would have seen in Google that suggests the search criteria on typing every single letter in the search box. This is a JSON request that should be quick enough not to let the user know that the response is from the server. Measuring the response time and user experience of this type of scenarios could be real hard without FPT) &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;It needs less effort and can be done with Functional Testing, Can be automated as well. [For testing and reporting a website it would take about 4 hours based on my experience (here it also matters how big is the website) :-)]. I usually combine it with manual exploration during initial navigation through the application for learning it. In fact the information captured by HTTP sniffers is worth taking a look as you can understand about the application much better and device your tests.(not only performance but also other tests such as security and even functional or validation etc.,) &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;The objective of FPT is to &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Find client side performance problems without any focus on server loading or resource utilization by the server &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;To understand the end user experience &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Few considerations to be made while conducting FPT include the following&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;It is important to consider all the web pages in the application including any alternative flows &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Use Free HTTP Sniffer tools and Browser plug-ins to gather information about the end user experience &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Document any functional defects that you may find during FPT &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Now, let us see how to do the real test. The strategy that I follow for FPT is based on the heuristic created by Scott Barber.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Test Strategy&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Use the heuristic &lt;b&gt;SCORN&lt;/b&gt; for comprehensive Front-End Performance Testing. The heuristic can be defined as below (I have changed a few points based on my understanding but you can see the original heuristic as defined by Scott at &lt;a href="http://searchsoftwarequality.techtarget.com/tip/0,289483,sid92_gci1301766,00.html" target="_blank"&gt;Use &amp;quot;SCORN&amp;quot; to test the front end of a website for performance&lt;/a&gt;): &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;S&lt;/b&gt;ize – Focus on testing for &lt;/div&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;div align="justify"&gt;Uncompressed graphics and media &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Object or code duplication &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Script and styles living outside of the base HTML &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Code &amp;quot;minification.&amp;quot; &lt;/div&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;C&lt;/b&gt;aching – Focus on testing for &lt;/div&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;div align="justify"&gt;Expires settings, &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Etags &lt;/div&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;O&lt;/b&gt;rder – Focus on testing for the order sequence of components &lt;/div&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;div align="justify"&gt;Styles/style sheets &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Critical content (i.e. what the user came to see the page) &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Relevant media (i.e. graphics related to the critical content) &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Incidental content (i.e. non-critical graphics) &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Scripts &lt;/div&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;R&lt;/b&gt;esponse Codes – Test for &lt;/div&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;div align="justify"&gt;Requests for objects that don't actually exist (Any exception is costly - MSDN) &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Superfluous redirects &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Errors that are not obvious from the browser &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Redundant Requests &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Invalid URL references (E.g. http://:) &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Unused Request &lt;/div&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;N&lt;/b&gt;umber – Ask questions related to &lt;/div&gt;      &lt;ul&gt;       &lt;li&gt;         &lt;div align="justify"&gt;Number of Requests &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;1 Heavy Graphic Vs many small graphics &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Inline Scripts Vs 1 External Script &lt;/div&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;div align="justify"&gt;Inline Styles Vs 1 External Style Sheet &lt;/div&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;b&gt;Testing Procedure&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Use browser plug-ins or online tools to capture page load times. &lt;/div&gt;   &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;       &lt;div align="justify"&gt;YSLOW – FireFox FireBug Add-on &lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;Episodes – YSLOW Add-on &lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;HammerHead – YSLOW Add-on &lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;HTTPWatch Basic &lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;Page Speed – FireBug Add-on &lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;Microsoft Visual Round Trip Analyzer &lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;Fiddler with nXpert – Performance Analysis Plug-in &lt;/div&gt;     &lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Conduct FPT with functional tests and/or user acceptance tests &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Devise the tests based on the project context and criteria – Pick the tool based on the need, best for the context &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Additionally, for monitoring the resource utilization during the test you can leverage on Perfmon (for windows based systems ) and NMon (Unix based systems). PAL is a good tool for analysis of Perfmon Logs. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;My favorite tools for FPT are Net tab of FireBug, YSLOW, Episodes, HTTPWatch and VRTA.&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;b&gt;Reporting&lt;/b&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The performance errors and slow pages need to be analyzed and reported for both executive and technical audience.&lt;/p&gt;  &lt;p&gt;Although, I call it as Low cost performance test in the title of this article. FTP is not a substitute for comprehensive performance test. In fact the FPT is part of the complete performance testing strategy. When customer is not ready to invest for performance testing and in situations wherein you have customer complaints on the performance of the applications, FPT can be the first step of performance testing. &lt;/p&gt;  &lt;p&gt;Hope this information helps you to device your performance tests. In the next post I will plan to write about automation of FPT with different tools such as QTP, TestPartner, TestComplete&amp;#160; and also without using any tools but VBScript.&lt;/p&gt;  &lt;p&gt;--LN&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8297576379403344016-8499340530647799071?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/8499340530647799071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=8499340530647799071' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/8499340530647799071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/8499340530647799071'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2010/06/low-cost-performance-testing-with-free.html' title='Low Cost Performance Testing with free tools - Front-End Performance Testing'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-7724440037332481763</id><published>2010-05-12T13:56:00.000-07:00</published><updated>2010-05-12T13:57:00.582-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Hotfix'/><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Compatibility Testing'/><title type='text'>Impact of Microsoft Updates on Testing – Compatibility Testing</title><content type='html'>&lt;p&gt;I should thank &lt;a href="http://tuppad.com/blog/"&gt;Santhosh Tuppad&lt;/a&gt; who prompted me to write this post. This is quite related to his post &lt;a href="http://tuppad.com/blog/2010/05/12/virus-or-trojan-or-malware-or-adware-%e2%80%93-follow-up-testing/"&gt;Virus or Trojan or Malware or Adware – Follow up testing&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Many of us (TESTERS) know that Microsoft releases one or the other security patch, hot fixes and services packs on Tuesdays. In this post, I will share information about how Microsoft Updates can impact on testing and how we have been able to manage this problem. I do not have intention to use this post to describe about compatibility testing but as it is related will have a note in the end.&lt;/p&gt; What is the Impact of MS updates on Product/Application?   &lt;br /&gt;Application starts behaving weirdly. User complaints, affecting the credibility of the product. Testers and Developers cycling to simulate and debug.&amp;#160; In short the impact &lt;strong&gt;User Complaints –&amp;gt; Customer Escalations – &amp;gt; Pressure from Management (Follow-up) –&amp;gt; Frustrating Night outs/Weekends for Testers and Developers&lt;/strong&gt;   &lt;p&gt;How does MS Updates get into User Machine?    &lt;br /&gt;Most of the product users computers will have windows auto update option enabled and hence MS can get into the machine (it is good practice to avoid security implications). The other way is to manually install some of the hot-fixes to solve a specific problem. It is worth saying that most of these hot-fixes are not completely tested and Microsoft does warn that “Do not install the hot-fix if you are unsure of it and installation of incorrect hot-fix can cause problem to your machine, etc.,”.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;How does it impact on Testing?    &lt;br /&gt;A security patch on IE has all the potential to block the application from working. Here, any patch or hot-fix can restrict or change the behavior of normal application. Usually we do not anticipate problems from these Patches as we(at least most of us, if not all) trust MS.     &lt;br /&gt;We would have spent our energy and time when we prove that the bug is not from the application but something else? To find out that something else you would spend some more time. Once you get to know it could be because of the patches and finally find out which patch is causing the problem among so many(MS does not release one patch at a time) patches. This process of bug isolation becomes critical and challenging. Here, the challenge is not only the effort put on to simulating the bug but also other factors such as pressure from the management, pressure from the customer, time constraints etc.,&lt;/p&gt;  &lt;p&gt;How to handle this situation, or compatibility of the product?    &lt;br /&gt;It is easier to use the Virtual PCs for sorting out these problems.     &lt;br /&gt;Have 2 separate Virtual Machines (VM), one with patches updated(with the latest one) and other without the latest one but until the previous patch.     &lt;br /&gt;Conduct all your tests on the VM with patches updated while have your Smoke test on the VM without the latest patch. This way you can be ahead of the problem and giving information/bug to the customer rather than getting a complaint/escalation.&lt;/p&gt;  &lt;p&gt;We have implemented this for a leading Scandinavian content management and Web publishing product that had to support 46 different combination of Windows OS, IE, SQL Server, Office etc., we had set up Virtual Machines with automation and continuous integration using QTP, QualityCenter and Team Foundation Server. The Continuous Integration takes care of running the automated tests on most of the environments while the Manual exploration of product and bug hunting is done on the latest patch VM.&lt;/p&gt;  &lt;p&gt;You cannot practically test all the combination of OS, Web Server,Browser and other components with the common project constraints such as time, budget etc., It is good to consider &lt;a href="http://services.social.microsoft.com/feeds/FeedItem?feedId=dcd31a30-b73e-416d-8d67-2e91c204d8ca&amp;amp;itemId=e79f2498-e13f-4c82-abb3-c53bd823c635&amp;amp;title=Pairwise+Independent+Combinatorial+Testing+(PICT)+Tool&amp;amp;uri=http%3a%2f%2fdownload.microsoft.com%2fdownload%2ff%2f5%2f5%2ff55484df-8494-48fa-8dbd-8c6f76cc014b%2fpict33.msi&amp;amp;k=0LlJA4ZX5OuoHa%2f5mryrUfBfg3%2baC3WbB2A3lJRWrF8%3d"&gt;Pairwise Independent Combinatorial Testing (PICT) Tool&lt;/a&gt; or &lt;a href="http://www.satisfice.com/tools/pairs.zip"&gt;ALLPAIRS&lt;/a&gt; to get effective minimal number of combinations.&lt;/p&gt;  &lt;p&gt;--LN&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8297576379403344016-7724440037332481763?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/7724440037332481763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=7724440037332481763' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/7724440037332481763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/7724440037332481763'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2010/05/impact-of-microsoft-updates-on-testing.html' title='Impact of Microsoft Updates on Testing – Compatibility Testing'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-6300839941219640952</id><published>2010-04-20T10:54:00.001-07:00</published><updated>2010-04-20T10:54:06.347-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OWASP'/><category scheme='http://www.blogger.com/atom/ns#' term='Security Testing'/><title type='text'>OWASP Top Ten 2010 Released</title><content type='html'>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;On April 19, 2010, final version of the OWASP Top 10 for 2010 has been released. You can find more information about it at &lt;a href="http://www.owasp.org/index.php/OWASPTop10-2010-PressRelease" target="_blank"&gt;OWASP Top 10 2010 Press Release&lt;/a&gt; and &lt;a href="http://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project" target="_blank"&gt;OWASP Top Ten Project&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The OWASP Top 10 Web Application Security Risks for 2010 are: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A1: Injection &lt;/li&gt;    &lt;li&gt;A2: Cross-Site Scripting (XSS) &lt;/li&gt;    &lt;li&gt;A3: Broken Authentication and Session Management &lt;/li&gt;    &lt;li&gt;A4: Insecure Direct Object References &lt;/li&gt;    &lt;li&gt;A5: Cross-Site Request Forgery (CSRF) &lt;/li&gt;    &lt;li&gt;A6: Security Misconfiguration &lt;/li&gt;    &lt;li&gt;A7: Insecure Cryptographic Storage &lt;/li&gt;    &lt;li&gt;A8: Failure to Restrict URL Access &lt;/li&gt;    &lt;li&gt;A9: Insufficient Transport Layer Protection &lt;/li&gt;    &lt;li&gt;A10: Unvalidated Redirects and Forwards &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://projects.webappsec.org/"&gt;The Web Application Security Consortium&lt;/a&gt; provides &lt;a href="http://projects.webappsec.org/Threat-Classification-Taxonomy-Cross-Reference-View" target="_blank"&gt;Threat Classification Taxonomy Cross Reference View&lt;/a&gt; which gives a clear mapping between WASC Threat Classification, MITRE's &lt;a href="http://cwe.mitre.org"&gt;Common Weakness Enumeration&lt;/a&gt;, SANS Top 25 and OWASP Top Ten.&lt;/p&gt;  &lt;p&gt;Regards,&lt;/p&gt;  &lt;p&gt;LN&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8297576379403344016-6300839941219640952?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/6300839941219640952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=6300839941219640952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/6300839941219640952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/6300839941219640952'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2010/04/owasp-top-ten-2010-released.html' title='OWASP Top Ten 2010 Released'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-4167862917667745060</id><published>2010-01-15T10:44:00.001-08:00</published><updated>2010-01-15T10:44:10.309-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='QTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Checklist'/><title type='text'>Evaluating Test Tools for Automation – Criteria to be considered</title><content type='html'>&lt;p align="justify"&gt;Before starting with any automation it is very common to evaluate various tools commercial and free tools available in the market and choose the best suited one for the application under test. This article describes the criteria to be considered while evaluating tools for automation and a methodology for evaluating the tools. This article does not aim to provide a comparison for all these tools. However, it clearly indicates the criteria to be considered for evaluation of testing tools.&lt;/p&gt;  &lt;p align="justify"&gt;Following are the most common criteria to be considered while evaluating tools for automation and any application. In addition to these there may some specific criterions to be considered based on the application under test.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Evaluation Criteria:&lt;/strong&gt;&lt;/p&gt;  &lt;div class="mycode"&gt;&lt;/div&gt;  &lt;div class="mycode"&gt;&lt;/div&gt;  &lt;div class="mycode"&gt;&lt;/div&gt;  &lt;div class="mycode"&gt;&lt;/div&gt;  &lt;ol&gt;   &lt;ol&gt;     &lt;ol&gt;       &lt;li&gt;&lt;strong&gt;&lt;font color="#000040"&gt;Technology Support&lt;/font&gt; &lt;/strong&gt;- Support for various controls and technologies used in the application such as iFrames, AJAX controls, PDF forms, tree view, cold fusion controls etc., &lt;/li&gt;        &lt;li&gt;&lt;font color="#000040"&gt;&lt;strong&gt;Ease of Script development/enhancement&lt;/strong&gt;&lt;/font&gt; &lt;/li&gt;        &lt;li&gt;&lt;font color="#000040"&gt;&lt;strong&gt;Reporting Results&lt;/strong&gt;&lt;/font&gt; - The tool under evaluation should have a feature of producing result log which should be easy to analyze and pinpoint the defect. &lt;/li&gt;        &lt;li&gt;&lt;font color="#000040"&gt;&lt;strong&gt;Test Independence&lt;/strong&gt; - &lt;/font&gt;The failure of one test script should not have any impact on the entire test suite. &lt;/li&gt;        &lt;li&gt;&lt;font color="#000040"&gt;&lt;strong&gt;Maintenance of Script&lt;/strong&gt;&lt;/font&gt; - As there is very high maintenance overhead for the automated test scripts, the tool should provide ease of script maintenance. &lt;/li&gt;        &lt;li&gt;&lt;font color="#000040"&gt;&lt;strong&gt;Multi browser support&lt;/strong&gt;&lt;/font&gt; - The tool under evaluation should support different flavors of Windows OS and multiple browsers (at least IE6, IE7 and IE 8.0) &lt;/li&gt;        &lt;li&gt;&lt;font color="#000040"&gt;&lt;strong&gt;Data Driven Capability&lt;/strong&gt;&lt;/font&gt; - The tool should provide a means to have an external data store to store all the data and read/ write into the data store. &lt;/li&gt;        &lt;li&gt;&lt;font color="#000040"&gt;&lt;strong&gt;Ease of Object Store Maintenance&lt;/strong&gt;&lt;/font&gt; - There should be a means to have easy maintenance of Object Store. Object store is the repository of all the objects captured by the tool. &lt;/li&gt;        &lt;li&gt;&lt;strong&gt;Ease of Continuous Integration for nightly regression tests&lt;/strong&gt; – The tool under evaluation should provide a easy means to integrate the tests to the build environment to have nightly regression tests conducted in a continuous integration environment &lt;/li&gt;        &lt;li&gt;&lt;font color="#000040"&gt;&lt;strong&gt;Limitations&lt;/strong&gt;&lt;/font&gt; – Limitations of the tool with respect application under test &lt;/li&gt;        &lt;li&gt;&lt;strong&gt;Advantages&lt;/strong&gt; – Advantages of the tool with respect application under test &lt;/li&gt;        &lt;li&gt;&lt;font color="#000040"&gt;&lt;strong&gt;Cost of Licensing&lt;/strong&gt;&lt;/font&gt; - Tool should not be expensive and should have a flexible licensing option. &lt;/li&gt;     &lt;/ol&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Evaluation Procedure:&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Select the tools that you want to consider for evaluation.The common tools considered for evaluation for automation include QTP, TestPartner, TestComplete, Visual Studio Team Edition, Selenium, Microsoft Lightweight Test Automation Framework, ArtOfTest WebAii etc.., &lt;/li&gt;    &lt;li&gt;For each of the tool considered for evaluation identify the pros and cons with respect to each of the criterion listed above &lt;/li&gt;    &lt;li&gt;Give a score for each of the tools for each of the criterion. Scale of scoring is      &lt;ul&gt;       &lt;li&gt;1 - Below Average &lt;/li&gt;        &lt;li&gt;2 - Average &lt;/li&gt;        &lt;li&gt;3 - Good &lt;/li&gt;        &lt;li&gt;4 - Very Good &lt;/li&gt;        &lt;li&gt;5 - Out Standing &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Prepare a Score card of all the tools for each of the criterion considered. A sample score card is shown below. Please do not consider the data provided below as the actual comparison data. This is provided only to show an example.      &lt;table border="1" cellspacing="0" cellpadding="0" width="534"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td width="247"&gt;             &lt;p&gt;&lt;b&gt;Evaluation Criterion\Tool&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td width="81"&gt;             &lt;p&gt;&lt;b&gt;QuickTest Pro&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td width="64"&gt;             &lt;p&gt;&lt;b&gt;Test Partner&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td width="75"&gt;             &lt;p&gt;&lt;b&gt;Test Complete&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td width="65"&gt;             &lt;p&gt;&lt;b&gt;VSTS&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="247"&gt;             &lt;p&gt;Technology Support&lt;/p&gt;           &lt;/td&gt;            &lt;td width="81"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="64"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;            &lt;td width="75"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;            &lt;td width="65"&gt;             &lt;p&gt;2&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="247"&gt;             &lt;p&gt;Ease of Script development&lt;/p&gt;           &lt;/td&gt;            &lt;td width="81"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="64"&gt;             &lt;p&gt;3.5&lt;/p&gt;           &lt;/td&gt;            &lt;td width="75"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;            &lt;td width="65"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="247"&gt;             &lt;p&gt;Reporting&lt;/p&gt;           &lt;/td&gt;            &lt;td width="81"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="64"&gt;             &lt;p&gt;3.5&lt;/p&gt;           &lt;/td&gt;            &lt;td width="75"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;            &lt;td width="65"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="247"&gt;             &lt;p&gt;Test Independence&lt;/p&gt;           &lt;/td&gt;            &lt;td width="81"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="64"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;            &lt;td width="75"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="65"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="247"&gt;             &lt;p&gt;Script Maintenance&lt;/p&gt;           &lt;/td&gt;            &lt;td width="81"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="64"&gt;             &lt;p&gt;3.5&lt;/p&gt;           &lt;/td&gt;            &lt;td width="75"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;            &lt;td width="65"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="247"&gt;             &lt;p&gt;Cross-Browser Support&lt;/p&gt;           &lt;/td&gt;            &lt;td width="81"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="64"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;            &lt;td width="75"&gt;             &lt;p&gt;2&lt;/p&gt;           &lt;/td&gt;            &lt;td width="65"&gt;             &lt;p&gt;2&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="247"&gt;             &lt;p&gt;Data Driven Capability&lt;/p&gt;           &lt;/td&gt;            &lt;td width="81"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="64"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="75"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="65"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="247"&gt;             &lt;p&gt;Ease of Object Store Maintenance&lt;/p&gt;           &lt;/td&gt;            &lt;td width="81"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="64"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;            &lt;td width="75"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;            &lt;td width="65"&gt;             &lt;p&gt;NA&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="247"&gt;             &lt;p&gt;License Cost&lt;/p&gt;           &lt;/td&gt;            &lt;td width="81"&gt;             &lt;p&gt;2&lt;/p&gt;           &lt;/td&gt;            &lt;td width="64"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;            &lt;td width="75"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;            &lt;td width="65"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="247"&gt;             &lt;p&gt;&lt;strong&gt;Final Score&lt;/strong&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td width="81"&gt;             &lt;p&gt;&lt;strong&gt;3.78&lt;/strong&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td width="64"&gt;             &lt;p&gt;&lt;strong&gt;3.28&lt;/strong&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td width="75"&gt;             &lt;p&gt;&lt;strong&gt;3.22&lt;/strong&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td width="65"&gt;             &lt;p&gt;&lt;strong&gt;3.13&lt;/strong&gt;&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/li&gt;    &lt;li&gt;Provide a Rank for each of the tools considered based on the score provided earlier. Below is a sample example of tool ranking. This ranking does not represent the actual comparison of the tool rather it represents the suitability of the tools for a specific application it was evaluated.      &lt;table border="1" cellspacing="0" cellpadding="0" width="381"&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td width="207"&gt;             &lt;p&gt;&lt;b&gt;Tool&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td width="87"&gt;             &lt;p&gt;&lt;b&gt;Final Score&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;            &lt;td width="85"&gt;             &lt;p&gt;&lt;b&gt;Tool Rank&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="207"&gt;             &lt;p&gt;QuickTest Pro&lt;/p&gt;           &lt;/td&gt;            &lt;td width="87"&gt;             &lt;p&gt;3.78&lt;/p&gt;           &lt;/td&gt;            &lt;td width="85"&gt;             &lt;p&gt;1&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="207"&gt;             &lt;p&gt;TestPartner&lt;/p&gt;           &lt;/td&gt;            &lt;td width="87"&gt;             &lt;p&gt;3.33&lt;/p&gt;           &lt;/td&gt;            &lt;td width="85"&gt;             &lt;p&gt;2&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="207"&gt;             &lt;p&gt;TestComplete&lt;/p&gt;           &lt;/td&gt;            &lt;td width="87"&gt;             &lt;p&gt;3.22&lt;/p&gt;           &lt;/td&gt;            &lt;td width="85"&gt;             &lt;p&gt;3&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;          &lt;tr&gt;           &lt;td width="207"&gt;             &lt;p&gt;Visual Studio 2008 Team Edition for Software Testers&lt;/p&gt;           &lt;/td&gt;            &lt;td width="87"&gt;             &lt;p&gt;3.13&lt;/p&gt;           &lt;/td&gt;            &lt;td width="85"&gt;             &lt;p&gt;4&lt;/p&gt;           &lt;/td&gt;         &lt;/tr&gt;       &lt;/tbody&gt;&lt;/table&gt;   &lt;/li&gt;    &lt;li&gt;Recommend the best suited tool based on the Rank &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Although, you can make a recommendation for a specific tool based on technical analysis with specific criteria. It is always not true that your recommendation will win the race. Most of the time it is a business decision based on the cost and budget and hence be open to work any tool and try to find workarounds for the issues. &lt;/p&gt;  &lt;p&gt;--LN&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8297576379403344016-4167862917667745060?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/4167862917667745060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=4167862917667745060' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/4167862917667745060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/4167862917667745060'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2010/01/evaluating-test-tools-for-automation.html' title='Evaluating Test Tools for Automation – Criteria to be considered'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-683491853093644434</id><published>2010-01-10T07:49:00.000-08:00</published><updated>2010-01-11T09:56:33.495-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Checklist'/><category scheme='http://www.blogger.com/atom/ns#' term='Requirement'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance Testing'/><title type='text'>A Checklist for Performance Testing – Requirement Questionnaire</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Testing" target="_blank"&gt;&lt;/a&gt;  &lt;blockquote&gt;   &lt;p align="justify"&gt;&lt;strong&gt;A Checklist for elicitation of the Performance Testing Requirements.&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p align="justify"&gt;Performance Testing of an application involves the various phases outlined below. This article is an attempt to&amp;#160;&amp;#160; provide a list of questionnaire that can help the test leaders/managers and testers to elicitate the performance testing requirements. This information is most important to know before starting with the performance test. Note that the questionnaire provided here is generic list of questions that is common to most of the applications. However, it need to be tailored based on the nature of the application under test. Usually I use this questionnaire by sending it to the stake holders of the application for answering. I have been using this questionnaire successfully for conducting performance tests.&lt;/p&gt;  &lt;hr /&gt;  &lt;p align="left"&gt;&lt;a href="http://lmohan.blogspot.com/" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Performance Testing" border="0" alt="Performance Testing" src="http://lh6.ggpht.com/_2jC8Jmtu26k/S0tmT7TTIJI/AAAAAAAAACk/vEUtuxrCmiE/image37.png?imgmax=800" width="672" height="465" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;hr /&gt;  &lt;p align="center"&gt;&lt;strong&gt;Performance Testing Requirement Questionnaire&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Please provide the URI's and credentials of the application for testing &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Please provide the test environment (Hardware and Software) configuration. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Where is the test environment setup? – Inside the Firewall in a isolated LAN environment or outside the firewall. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;What technologies have been used to develop the application? &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;What are the interfaces of the application? e.g., Payment gateways, web services etc., &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Briefly describe the business/domain of the application. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Is the application already in production? - Is this performance testing being conducted pre-production or post-production? &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Are the web server logs for the application available? Applicable only if the application is already in production. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;What are the critical workflows of the application to be considered as candidates for performance testing? &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;What is the expected workload (number of simultaneous virtual users) to be tested? &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;What is the average session duration of a user? - Average time a user would be logged into the application. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;How many hours in a day the application would be available/accessed by the users? &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Do you have any specific performance objective(SLAs) for this test? E.g. 1000 Invoices to be processed in a Day &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Is test data required for performance testing available in adequate quantity in the required format. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Does the test team members have the&amp;#160; necessary privileges for the test server machines. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Do you aware of any performance problems in the application that is experienced by the users or observed by other stake holders? &lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;--LN &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8297576379403344016-683491853093644434?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/683491853093644434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=683491853093644434' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/683491853093644434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/683491853093644434'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2010/01/checklist-for-performance-testing.html' title='A Checklist for Performance Testing – Requirement Questionnaire'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_2jC8Jmtu26k/S0tmT7TTIJI/AAAAAAAAACk/vEUtuxrCmiE/s72-c/image37.png?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-1460290151696632994</id><published>2009-12-23T22:28:00.001-08:00</published><updated>2009-12-24T00:23:32.780-08:00</updated><title type='text'>Estimating Effort for Automation Test in Agile/Scrum</title><content type='html'>&lt;p align="justify"&gt;Effort Estimation has been an art since a long time and it will continue to be an art. Especially estimating time for testing effort is usually hard because of various uncertainties. That too when in an Agile/SCRUM environment where change is quite natural it is very hard to estimate. Here is an estimation methodology that I have used and successful to a good extent. &lt;/p&gt;  &lt;p align="justify"&gt;This methodology is specifically suited for distributed agile teams where development and manual testing of the application is done by one team while test automation is done by another team.(it can be used anywhere else as well) Here, in this scenario the Product Owner of the automation team is a member of the development sprint team who is a subject matter expert. &lt;/p&gt;  &lt;p align="justify"&gt;Although in SCRUM usually the estimations are done during the sprint planning, it is insisted to estimate before the sprint planning meeting during the Product Backlog Items (PBIs) Grooming sessions as the team would be developing automation scripts independent of the development sprints and have reasonably good understanding of the application and does not need the Product Owner’s(PO) presence in estimating or understanding the PBIs. However, in case if there is a need for POs involvement in understanding the PBI it is recommended to estimate in the grooming meeting or after it but necessarily after understanding the PBIs.&lt;/p&gt;  &lt;p align="justify"&gt;Note that the story point estimation does not provide the effort estimation as such rather it represents the complexity and size of the task in terms of relative complexity. Based on the knowledge of Sprint Velocity (Rate of productivity) one can identify the effort in terms of time and cost.&lt;/p&gt;  &lt;p align="justify"&gt;For example: If you estimate 100 story points and have the velocity as 4 story points per hour then your team would need about 25 hours to complete the 100 story points which can be further planned based on the capacity (Available time) of the team for the sprint.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Story Point Estimation&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;PBIs are estimated based on the Agile/SCRUM principles of estimation in terms of story points &lt;/li&gt;    &lt;li&gt;PBI’s are estimated during the Grooming sessions &lt;/li&gt;    &lt;li&gt;PBI’s are estimated by all the team members and arrived at an amicable number that is considered as the actual estimate &lt;/li&gt;    &lt;li&gt;For story points Fibonacci series of numbers 1, 2, 3, 5, 8, 13, 21 are considered &lt;/li&gt;    &lt;li&gt;PBI with 1 story point is considered the least complex while 21 is considered to be relatively most complex &lt;/li&gt;    &lt;li&gt;Story points are assigned to reflect the &lt;strong&gt;complexity and size of the PBI based on the relative complexities&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;For estimating the story point for a PBI, below &lt;strong&gt;criteria&lt;/strong&gt; needs to be considered       &lt;ol&gt;       &lt;li&gt;Available (Already developed) Business Utility Libraries that can be reused – More the BULs available for reuse less complex is the PBI &lt;/li&gt;        &lt;li&gt;BULs to be developed – Number of BULs to be developed and their complexities are considered &lt;/li&gt;        &lt;li&gt;General Utility Libraries to be developed/changed -- Number of GULs to be developed/changed and their complexities are considered &lt;/li&gt;        &lt;li&gt;Data Preparation – Amount of Test Data to be prepared and its complexity is considered &lt;/li&gt;        &lt;li&gt;Unit Testing -- Complexity of unit testing the script is considered &lt;/li&gt;        &lt;li&gt;Checkpoints – The number of checkpoints to be implemented based on the COAs and their complexity is considered &lt;/li&gt;        &lt;li&gt;Reviews – Consider the effort for review of the automation script &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt;    &lt;li&gt;Following &lt;strong&gt;Rules&lt;/strong&gt; are to be followed while estimating story points for automation.       &lt;ol&gt;       &lt;li&gt;All the team members estimate individually for a given PBI &lt;/li&gt;        &lt;li&gt;To avoid influences of one team member to other, Planning Poker is played. Planning Poker is an estimation game where all the team members estimate separately and disclose their estimates together at the same time as per the Scrum Master’s (SM) instruction &lt;/li&gt;        &lt;li&gt;Most of the time highest Estimate wins the race - only if all the team members and SM are in agreement &lt;/li&gt;        &lt;li&gt;SM is responsible for handling discrepancies in estimates between team members &lt;/li&gt;        &lt;li&gt;Discrepancies in estimates between the team is handled by Poker Votes, Reasoning and discussion as applicable and decided by the SM &lt;/li&gt;        &lt;li&gt;Sprint Backlog Items(SBI) are to be created for the PBI’s -- one SBI for each script, BUL and GUL to be developed or maintained. This is basically decomposing the PBI into multiple components called as SBIs for automation. &lt;/li&gt;        &lt;li&gt;Time estimates are provided for the SBIs – based on the velocity &lt;/li&gt;        &lt;li&gt;“Estimate” should be set once and not adjusted &lt;/li&gt;        &lt;li&gt;SBI’s not to exceed 8 hours – In case if a SBI cannot be broken any more and on breaking it loses the logic then the estimate can exceed 8hours for a SBI. &lt;/li&gt;        &lt;li&gt;Previous sprint Velocity (Rate of Productivity) and the capacity of the team is to considered for projecting the velocity of the current sprint &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/_2jC8Jmtu26k/SzMNC6s1erI/AAAAAAAAACc/dcVxUEILeh0/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_2jC8Jmtu26k/SzMNEWsYEjI/AAAAAAAAACg/S79p7MQX3Lo/image_thumb%5B4%5D.png?imgmax=800" width="614" height="446" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;-- LN&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;TESTER by INSTINCT, not by CHANCE.&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/8297576379403344016-1460290151696632994?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/1460290151696632994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=1460290151696632994' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/1460290151696632994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/1460290151696632994'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2009/12/estimating-effort-for-automation-test.html' title='Estimating Effort for Automation Test in Agile/Scrum'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_2jC8Jmtu26k/SzMNEWsYEjI/AAAAAAAAACg/S79p7MQX3Lo/s72-c/image_thumb%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-962048805885026995</id><published>2009-12-20T04:31:00.001-08:00</published><updated>2009-12-20T04:46:10.312-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Testing'/><title type='text'>Testing for Exceptions in Web Application – An Approach</title><content type='html'>&lt;p align="justify"&gt;Last week when I had been to Norway, one of my colleague test manager casually asked question on testing a requirement for a banking application. I think it is interesting challenge to conduct such a test and this article is an attempt to provide testing approach for such a situation.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Requirement:&lt;/strong&gt; Application to log every exception it encounters and fail gracefully (of course securely without any sensitive information disclosure)&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Question:&lt;/strong&gt; How to test and plan for testing the exceptions in a Banking and Finance application?&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;This is not that easy testing that can be done with ease as simulating exceptions is not always possible. &lt;/p&gt;  &lt;p align="justify"&gt;Before thinking about the solution it is pivotal to understand the requirement clearly. In an effort to understand the requirements we need answer the below questions.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;How are the exception stack traces logged by the application? Usually it logged to a secure database or logged with audit trail logs. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;What exceptions are caught as specific exceptions in code and what exceptions are caught as generic exceptions? This is important to understand what need to be done to simulate an exception. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Now, having understood the requirement reasonably well we can think about testing.&lt;/p&gt;  &lt;p align="justify"&gt;It is hard to anticipate different types of exceptions caught on a specific event. However, 2 approaches to test this situation are described below.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Black box approach:&lt;/strong&gt; This is best suited for the manual functional testers with limited competency in programming. As seen by the black box tester any exception is thrown only on an event such as page submission or request either GET or POST of a request. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;List all the scenarios in the application where there is GET or POST, predominantly form submissions. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;For each and every request list down the possible exceptions based on the functionality being processed and data input. For example on page where integer inputs are made it is necessary to consider IntergerOverflow, IndexOutOfBound and NullPointerException &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Design test cases to simulate each of the exceptions by relevant test input data and expected results. It is important to consider the Post Conditions or Follow-ups after the exception. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Execute the test cases and record the results with defects &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;The advantage of this approach it does not need programming skills for a tester to conduct the tests although it requires basic programming knowledge for designing the tests. The cons of this approach are it does not ensure coverage as many exceptions may not be practically possible to simulate.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Grey box approach: &lt;/strong&gt;This is the approach that ensures greater coverage and best suited for testers with programming knowledge. I recommend this approach. It is good to plan and estimate for this testing during test design and planning phase.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Review the code with focus on the catch clause&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Verify if all the specific exceptions are handled in the catch clause depending on the scenario under context&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Verify that there is a generic catch clause that takes care of all the exceptions not handled by specific exceptions&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Here, it is important to validate the exception reports for accuracy and consistency. Usually the exception are report to a secure database or to a log file stored securely.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;It is also important to look that exception report for sensitive information that can be juicy for a hacker. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;The stack trace of the exception should not be transferred as clear text in the HTTP requests and responses. It should be encrypted with a strong cipher.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;The testing approach is described based on my experience in testing such scenarios with an intention that it could be of some help to the testers community. Comments and feedback on this are appreciated. &lt;/p&gt;  &lt;p align="justify"&gt;-- LN&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;TESTER by INSTINCT, not by CHANCE.&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/8297576379403344016-962048805885026995?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/962048805885026995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=962048805885026995' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/962048805885026995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/962048805885026995'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2009/12/testing-for-exceptions-in-web.html' title='Testing for Exceptions in Web Application – An Approach'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-4289061241740993992</id><published>2009-12-15T18:57:00.001-08:00</published><updated>2009-12-15T18:57:32.627-08:00</updated><title type='text'>Blogging after long time</title><content type='html'>&lt;p&gt;It’s been long time I have written any article on the net. Now I think it is time again to be actively blog on the net. You will be able to see more frequent articles sharing my experience and knowledge from next year. I plan to dedicate some of my time to blogging about Testing especially Automation, Performance and Security Testing.&lt;/p&gt;  &lt;p&gt;Regards,&lt;/p&gt;  &lt;p&gt;LN&amp;#160;&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8297576379403344016-4289061241740993992?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/4289061241740993992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=4289061241740993992' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/4289061241740993992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/4289061241740993992'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2009/12/blogging-after-long-time.html' title='Blogging after long time'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-3572113697069481620</id><published>2008-02-28T06:32:00.001-08:00</published><updated>2008-02-28T06:33:15.168-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><title type='text'>How is CreateObject different from GetObject?</title><content type='html'>&lt;p&gt;One of my junior colleague had asked the question &amp;quot;What is the difference between CreateObject and GetObject and in what situation GetObject is to be used?&amp;quot;. This post is the answer that I have given him.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;CreateObject creates an instance of a class &lt;/li&gt;    &lt;li&gt;GetObject gets the reference of an running object to another object &lt;/li&gt;    &lt;li&gt;Always use CreateObject except for Windows Management Instrumentation (WMI) and Active Directory Service Interfaces (ADSI)&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The below script demonstrates the use of these two VBScript functions.&lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 56.18%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 128px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; objExcel = CreateObject(&lt;span style="color: #006080"&gt;&amp;quot;Excel.Application&amp;quot;&lt;/span&gt;) &lt;br /&gt;objExcel.Visible = &lt;span style="color: #0000ff"&gt;True&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; objWorkbook = objExcel.Workbooks.Add &lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; objExcel2 = GetObject(, &lt;span style="color: #006080"&gt;&amp;quot;Excel.Application&amp;quot;&lt;/span&gt;) &lt;br /&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; objWorkbook = objExcel2.Workbooks(1) &lt;br /&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; objWorksheet = objWorkbook.Worksheets(1) &lt;br /&gt;objExcel2.Cells(1, 1).Value = &lt;span style="color: #006080"&gt;&amp;quot;In god I TRUST everything else I TEST.&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;div&gt;-- Lakshminarasimha Manjunatha Mohan&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div&gt;In God I TRUST everything else I TEST.&lt;/div&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8297576379403344016-3572113697069481620?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/3572113697069481620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=3572113697069481620' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/3572113697069481620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/3572113697069481620'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2008/02/how-createobject-is-different-from.html' title='How is CreateObject different from GetObject?'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-6242991394007831449</id><published>2008-02-28T05:58:00.001-08:00</published><updated>2008-02-28T06:06:22.079-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Hotfix'/><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='Compatibility Testing'/><title type='text'>Windows Hotfixes and Patches Enumerator</title><content type='html'>&lt;p&gt;Below is a simple VBScript developed using Windows WMI that can be executed from Windows Script Host to enumerate the installed hotfixes, patches and security updates on any given machine. &lt;/p&gt;  &lt;p&gt;You might be wondering what for this script is useful. While product testing that supports different environments it happens so that suddenly one fine day you might notice some mis-behavior or unusual defects in the application. Actually these mis-behaviors or defects are not always related to the application. However, it may be a compatibility issue with one of the patches or security updates made by the windows automatic updates. &lt;/p&gt;  &lt;p&gt;As a solution to this problem I am this script to find out all the patches, hot fixes and security updates on a server where the product is working fine and compare the that with another server where the mis-behavior or defects are seen and thus classify a defect from compatibility issue. This is really a very handy script for compatibility testing. Let me know your comments on this. I intend to extend this script for comparing two different lists of hotfixes and patches so as to make it easier to find the differences.&lt;/p&gt;  &lt;p&gt;For executing this script it is necessary have an EXCEL file named test.xls at C:\&lt;/p&gt;  &lt;div&gt;   &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 84.58%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; height: 1033px; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #008000"&gt;'========================================================&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;'Description: This script enumerates the Windows hotfixes &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;' and other security updates&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;'Author: Lakshminarasimha M.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;'=========================================================&lt;/span&gt;&lt;br /&gt;strComputer = &lt;span style="color: #006080"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; objWMIService = GetObject(&lt;span style="color: #006080"&gt;&amp;quot;winmgmts:{impersonationLevel=impersonate}!\\&amp;quot;&lt;/span&gt; &amp;amp; strComputer &amp;amp; &lt;span style="color: #006080"&gt;&amp;quot;\root\cimv2&amp;quot;&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; colQuickFixes = objWMIService.ExecQuery (&lt;span style="color: #006080"&gt;&amp;quot;Select * from Win32_QuickFixEngineering&amp;quot;&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;sDataTable = &lt;span style="color: #006080"&gt;&amp;quot;C:\test.xls&amp;quot;&lt;/span&gt;&lt;br /&gt;sDataSheet = &lt;span style="color: #006080"&gt;&amp;quot;Sheet1&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;iReqRow = 2&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; oXLApp &lt;span style="color: #008000"&gt;'As Excel.Application&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; oWorkBook &lt;span style="color: #008000"&gt;'As Excel.Workbook&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; oWorkSheet &lt;span style="color: #008000"&gt;'As Excel.Worksheet&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; iRowsCount &lt;span style="color: #008000"&gt;'As Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; iColsCount &lt;span style="color: #008000"&gt;'As Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; sColHeader &lt;span style="color: #008000"&gt;'As String&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Dim&lt;/span&gt; sReqColumn &lt;span style="color: #008000"&gt;'As String&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; oXLApp = CreateObject(&lt;span style="color: #006080"&gt;&amp;quot;Excel.Application&amp;quot;&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008000"&gt;'oXLApp.Visible = True&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; oWorkBook = oXLApp.Workbooks.Open(sDataTable)&lt;br /&gt;&lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; oWorkSheet = oWorkBook.Sheets(sDataSheet)&lt;br /&gt;oWorkSheet.Activate&lt;br /&gt;iRowsCount = oWorkSheet.UsedRange.Rows.Count&lt;br /&gt;iColsCount = oWorkSheet.UsedRange.Columns.Count&lt;br /&gt;iReqRow=2&lt;br /&gt;&lt;span style="color: #008000"&gt;' Set Column Headers&lt;/span&gt;&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;A1&amp;quot;&lt;/span&gt;).Value = &lt;span style="color: #006080"&gt;&amp;quot;Caption&amp;quot;&lt;/span&gt;&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;B1&amp;quot;&lt;/span&gt;).Value = &lt;span style="color: #006080"&gt;&amp;quot;CSName&amp;quot;&lt;/span&gt;&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;C1&amp;quot;&lt;/span&gt;).Value = &lt;span style="color: #006080"&gt;&amp;quot;Description&amp;quot;&lt;/span&gt;&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;D1&amp;quot;&lt;/span&gt;).Value = &lt;span style="color: #006080"&gt;&amp;quot;FixComments&amp;quot;&lt;/span&gt;&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;E1&amp;quot;&lt;/span&gt;).Value = &lt;span style="color: #006080"&gt;&amp;quot;HotFixID&amp;quot;&lt;/span&gt;&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;F1&amp;quot;&lt;/span&gt;).Value = &lt;span style="color: #006080"&gt;&amp;quot;InstallDate&amp;quot;&lt;/span&gt;&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;G1&amp;quot;&lt;/span&gt;).Value = &lt;span style="color: #006080"&gt;&amp;quot;InstalledBy&amp;quot;&lt;/span&gt;&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;H1&amp;quot;&lt;/span&gt;).Value = &lt;span style="color: #006080"&gt;&amp;quot;InstalledOn&amp;quot;&lt;/span&gt;&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;I1&amp;quot;&lt;/span&gt;).Value = &lt;span style="color: #006080"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;J1&amp;quot;&lt;/span&gt;).Value = &lt;span style="color: #006080"&gt;&amp;quot;ServicePackInEffect&amp;quot;&lt;/span&gt;&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;K1&amp;quot;&lt;/span&gt;).Value = &lt;span style="color: #006080"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;For&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Each&lt;/span&gt; objQuickFix &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; colQuickFixes&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;A&amp;quot;&lt;/span&gt; &amp;amp; iReqRow).Value = objQuickFix.Caption&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;B&amp;quot;&lt;/span&gt; &amp;amp; iReqRow).Value = objQuickFix.CSName&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;C&amp;quot;&lt;/span&gt; &amp;amp; iReqRow).Value = objQuickFix.Description&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;D&amp;quot;&lt;/span&gt; &amp;amp; iReqRow).Value = objQuickFix.FixComments&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;E&amp;quot;&lt;/span&gt; &amp;amp; iReqRow).Value = objQuickFix.HotFixID&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;F&amp;quot;&lt;/span&gt; &amp;amp; iReqRow).Value = objQuickFix.InstallDate&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;G&amp;quot;&lt;/span&gt; &amp;amp; iReqRow).Value = objQuickFix.InstalledBy&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;H&amp;quot;&lt;/span&gt; &amp;amp; iReqRow).Value = objQuickFix.InstalledOn&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;I&amp;quot;&lt;/span&gt; &amp;amp; iReqRow).Value = objQuickFix.Name&lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;J&amp;quot;&lt;/span&gt; &amp;amp; iReqRow).Value = objQuickFix.ServicePackInEffect     &lt;br /&gt;     oWorkSheet.Range(&lt;span style="color: #006080"&gt;&amp;quot;K&amp;quot;&lt;/span&gt; &amp;amp; iReqRow).Value = objQuickFix.Status&lt;br /&gt;    iReqRow = iReqRow + 1    &lt;br /&gt;&lt;span style="color: #0000ff"&gt;Next&lt;/span&gt;&lt;br /&gt;    oWorkBook.Save    &lt;br /&gt;    oWorkBook.Close&lt;br /&gt;    oXLApp.Quit&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; oWorkSheet = &lt;span style="color: #0000ff"&gt;Nothing&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; oWorkBook = &lt;span style="color: #0000ff"&gt;Nothing&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;Set&lt;/span&gt; oXLApp = &lt;span style="color: #0000ff"&gt;Nothing&lt;/span&gt;&lt;br /&gt;    MsgBox(&lt;span style="color: #006080"&gt;&amp;quot;---Hotfixes Enumerated Sucessfully.---&amp;quot;&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;p&gt;-- Lakshminarasimha Manjunatha Mohan&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;In God I TRUST everything else I TEST.&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/8297576379403344016-6242991394007831449?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/6242991394007831449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=6242991394007831449' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/6242991394007831449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/6242991394007831449'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2008/02/windows-hotfixes-and-patches-enumerator.html' title='Windows Hotfixes and Patches Enumerator'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-7516451251813201365</id><published>2008-01-13T18:52:00.001-08:00</published><updated>2008-01-13T18:52:12.705-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='Delete Folders'/><title type='text'>How to automatically delete unused folders?</title><content type='html'>&lt;p&gt;Below is a Visual Basic Script that can delete all the sub folders older than 30days from the current date. The folder from which the sub folders need to be deleted can set by&amp;#160; changing the value for strMainFolder variable. This script can also be used to manage files and folder in remote computers just by setting the required computer name/IP to strComputer variable. &lt;/p&gt;  &lt;p&gt;The script can be used very effectively by scheduling a job from Windows Task Scheduler.&lt;/p&gt;  &lt;p align="left"&gt;&lt;font size="2"&gt;strComputer = &amp;quot;.&amp;quot;      &lt;br /&gt;strMainFolder = &amp;quot;C:\&amp;quot;       &lt;br /&gt;Set objWMIService = GetObject(&amp;quot;winmgmts:&amp;quot; _       &lt;br /&gt;&amp;amp; &amp;quot;{impersonationLevel=impersonate}!\\&amp;quot; &amp;amp; strComputer &amp;amp; &amp;quot;\root\cimv2&amp;quot;) &lt;/font&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;font size="2"&gt;Set colSubfolders = objWMIService.ExecQuery(&amp;quot;Associators of&amp;quot; _      &lt;br /&gt;&amp;amp; {Win32_Directory.Name='&amp;quot; &amp;amp; strMainFolder _       &lt;br /&gt;&amp;amp; &amp;quot;'} Where AssocClass = Win32_Subdirectory ResultRole = PartComponent&amp;quot;) &lt;/font&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;font size="2"&gt;For Each objFolder in colSubfolders      &lt;br /&gt;&amp;#160;&amp;#160; dtmFolderCreationDate= CDate(Mid(objFolder.CreationDate,5,2) _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;amp; &amp;quot;/&amp;quot; &amp;amp; Mid(objFolder.CreationDate, 7, 2) &amp;amp; &amp;quot;/&amp;quot; _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;amp; Left(objFolder.CreationDate, 4) &amp;amp; &amp;quot; &amp;quot; _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;amp; Mid (objFolder.CreationDate, 9, 2) &amp;amp; &amp;quot;:&amp;quot; _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;amp; Mid(objFolder.CreationDate, 11, 2) &amp;amp; &amp;quot;:&amp;quot; _       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;amp; Mid(objFolder.CreationDate,13, 2))       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; If (DateDiff(&amp;quot;d&amp;quot;,dtmFolderCreationDate,Now)&amp;gt;30) Then       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 'Wscript.Echo objFolder.Name       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 'Wscript.Echo objFolder.CreationDate&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; errResults = objFolder.Delete       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; End If       &lt;br /&gt;Next&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;/font&gt;&lt;/p&gt; &lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;/font&gt;&lt;/font&gt;  &lt;blockquote&gt;   &lt;p&gt;-- Lakshminarasimha Mohan&lt;/p&gt;    &lt;p&gt;In God I TRUST everything else I TEST.&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/8297576379403344016-7516451251813201365?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/7516451251813201365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=7516451251813201365' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/7516451251813201365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/7516451251813201365'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2008/01/how-to-automatically-delete-unused.html' title='How to automatically delete unused folders?'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-3598273001721119157</id><published>2008-01-11T19:24:00.001-08:00</published><updated>2008-01-11T19:34:11.552-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><category scheme='http://www.blogger.com/atom/ns#' term='QTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet Explorer'/><title type='text'>IE popup window disappears while QTP Script Execution!!</title><content type='html'>&lt;p align="justify"&gt;A strange problem of Mercury QuickTest Pro 9.2 with Internet Explorer 7.0 is discussed with solution. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Problem:&lt;/strong&gt; While executing scripts in IE 7.0 if another browser is opened by the script as a result of an operation or test step, the pop up window automatically disappears. The issues looks strange but the window disappears without any clue.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt;Due to this issue there are many other problems including problem in executing Navigate method of IE object etc., I have not tested it on IE6. However, the problem might also exist in IE6 as well.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Example scenario:&lt;/strong&gt; A QTP 9.2 automation script for the following scenario in the admin mode of EPiServerCMS web site fails to execute on IE 7.0.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Steps for Simulation:&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Login to EPiServerCMS Admin Mode (Ensure that the Role and membership providers are set to Multiplexing providers with SQL Server providers as default provider)&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Click on Administer Groups &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Create a new Group&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Click on the Delete button corresponding to the newly created Group the pop up window disappears only when a QTP script for this scenario is executed. However, the scenario works perfectly fine on manual execution of the same steps.&lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Solution: &lt;/strong&gt;The solution for this problem is just enable the &amp;quot;BHOManager Class&amp;quot; Add-on in the IE. (This can be done by going to IE-&amp;gt; Tools -&amp;gt; Manage Add-ons -&amp;gt; Enable/Disable Add-ons...) &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;What is &amp;quot;BHOManager Class&amp;quot; add-on or BHOManager.DLL?&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;A Browser Helper Object, or BHO, is just a small program that runs automatically every time the Internet explorer browser is started. &lt;/p&gt;  &lt;p align="justify"&gt;BHOManager.DLL is installed on the system when QTP is installed. This is a helper class that assists QTP for execution of QTP scripts on the browser. BHOManager.DLL is located in the folder C:\Windows\System32. The unique ID or CLSID of this BHO is {474264BC-9571-47C1-85B9-780F756DC9CE}. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Additional Information about BHOs:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;BHOs are not stopped by personal firewalls, because they are identified by the firewall as browser itself. They are also known to conflict with other running programs, causing a variety of page faults, run time errors, and the like, and generally impede browsing performance. &lt;/p&gt;  &lt;p align="justify"&gt;BHODemon is small tool that can be used to view, enable or disable all the BHO's on a computer. It is a free tool that can be downloaded from &lt;a href="http://www.spywareinfo.com/downloads/bhod/" target="_blank"&gt;BHODemon&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Other known BHOs:&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The other known BHOs include the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Microsoft.VisualStudio.QualityTools.RecorderBarBHO.dll - This BHO is used by Visual Studio Team Suite for web tests&lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p align="justify"&gt;For more information BHOManager.dll and other BHOs refer to &lt;/p&gt;  &lt;p align="justify"&gt;&lt;a title="http://www.file.net/process/bhomanager.dll.html" href="http://www.file.net/process/bhomanager.dll.html"&gt;http://www.file.net/process/bhomanager.dll.html&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a title="http://www.sysinfo.org/bhoinfo.html" href="http://www.sysinfo.org/bhoinfo.html"&gt;http://www.sysinfo.org/bhoinfo.html&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/8297576379403344016-3598273001721119157?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/3598273001721119157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=3598273001721119157' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/3598273001721119157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/3598273001721119157'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2008/01/ie-popup-window-disappears-while-qtp.html' title='IE popup window disappears while QTP Script Execution!!'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-1380608320784152212</id><published>2007-12-10T09:48:00.000-08:00</published><updated>2008-01-10T19:42:16.831-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Performance Testing'/><title type='text'>Performance Testing: Resource Monitoring</title><content type='html'>&lt;p&gt;&lt;strong&gt;What is Load Testing?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The behavior of the application and the utilization of the resources by the application under test is monitored under different load patterns and it is validated against the expected measurements to identify any potential performance errors or bottlenecks.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What is necessity for Monitoring Resources?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Any normal ASP.NET web application will be developed using three tier architecture of Presentation, Business and Data Layers. When a request is made by the client to the server the request is processed by the web server which in turn would be forwarded to the application server and then to the database server. During this processing the System, web server application server and the database server resources are utilized. It is necessary to monitor these resources utilization under load before the application is moved to production in order to identify the performance errors and bottlenecks before it breaks the application and impacts the business of the application.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What Resources need to be monitored?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;It is necessary to monitor every logical or physical layer of the web application. In a simple scenario where the application is hosted on a web server and application interacts with the database the sources to be considered for monitoring are System resources, the web server resources and the database resources.It is necessary to identify the specific resources and counters (with their threshold levels) to be monitored at each layer. This identification needs expertise and experience in performance testing. Below is the list of counters that can be used for first level of performance analysis. This table applies for the general ASP.NET applications. However, it needs to be tailored for the specific requirements.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note: &lt;/strong&gt;The counters column in the below table to be read as shown in the example: % Processor Time (Processor _Total). Here, the Processor is the Object, % Processor Time is the Counter and _Total is the instance.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:887EC618-8FBE-DEAD-BEEF-2339AF2EC721:f84c7119-fbb4-4790-b018-13584fb9f88b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a href="http://lh4.google.com/lnsimha.mohan/R4bbiu1nEaI/AAAAAAAAABE/ohiiz9YgnlM/counters18x6" title="ASP.NET Performance Counters" rel="thumbnail"&gt;&lt;img border="0" src="http://lh4.google.com/lnsimha.mohan/R4bbku1nEbI/AAAAAAAAABM/5Ck7ep4A98U/counters123" /&gt;&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="5"&gt;&lt;a title="ASP.NET Resourse Counters" href="http://lnsimha.blogsavy.com/2007/10/25/performance-testing-resource-monitoring/aspnet-resourse-counters/" rel="attachment wp-att-6"&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How to Monitor the Resources? What tools to use?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;On a Windows based machine it is possible to monitor the resources using a utility called &lt;strong&gt;perfmon&lt;/strong&gt;. The same way as perfmon Linux/Unix based machines facilitate the resource monitoring by means of utility known as &lt;strong&gt;rstdmon&lt;/strong&gt;.     &lt;br /&gt;Almost every Load Testing tools has integration with Windows Perfmon or has some other has means to provide the facility to monitor the resources. E.g. LoadRunner, Visual Studio 2005 Team Edition for Testers, WebLoad, etc.,&lt;strong&gt;&amp;#160;&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The table of counters provided here provides a possible list of counters that can be monitored for while Load Testing an ASP.NET application. However, it needs to be tailored for specific requirements. For example, while testing a application that uses ADAM process one would be interested to know the processor and memory utilization by the ADAM worker process (dsamain) in specific. It is advised to use the minimum number of high level counters for the first round analysis. Based on the first level analysis one can added more detailed and specific counters for the areas that warrant performance and remove few counters related to areas where the performance seems be good.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;-- Lakshminarasimha Mohan &lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;In god I TRUST, everything else I TEST.&amp;quot;&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/8297576379403344016-1380608320784152212?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/1380608320784152212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=1380608320784152212' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/1380608320784152212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/1380608320784152212'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2007/12/performance-testing-resource-monitoring.html' title='Performance Testing: Resource Monitoring'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8297576379403344016.post-7022921958652268952</id><published>2007-10-21T20:43:00.000-07:00</published><updated>2008-01-10T19:44:32.496-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Automation'/><title type='text'>Object Identification Mechanism</title><content type='html'>&lt;p&gt;&lt;font face="Verdana" size="2"&gt;QTP identifies the objects by mandatory properties set as default. &lt;/font&gt;&lt;font face="Verdana" size="2"&gt;If the mandatory property values are not sufficient to uniquely identify an object in the Application Under Test (AUT), QTP adds some assistive properties and/or an ordinal identifier in order to create a unique description.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Verdana" size="2"&gt;The default Mandatory, Assistive Properties and Ordinal Identifiers can be changed for a specific Class of objects in QTP at Tools -&amp;gt; Object Identification.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Verdana" size="2"&gt;The Smart Identification can also be enabled to ensure more comprehensive object identification. &lt;/font&gt;&lt;font face="Verdana" size="2"&gt;The User defined Class of Objects can be mapped to the standard class of Objects so that QTP identifies the user defined objects as standard objects.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What is Smart Identification?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Verdana" size="2"&gt;QTP makes use of the special feature Smart Identification when it&lt;/font&gt;&amp;#160; &lt;font face="Verdana" size="2"&gt;fails to identify objects using the defined properties &lt;/font&gt;&lt;font face="Verdana" size="2"&gt;finds an ambiguity in identifying objects.&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Verdana" size="2"&gt;The Smart Identification mechanism is more complex and more flexible. If configured logically, a Smart Identification definition can probably help QTP identify an object, if it is present, even when the learned description fails. &lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;font face="Verdana" size="2"&gt;The Smart Identification mechanism uses two types of properties, Base Filter Properties and Optional Filter Properties.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Verdana" size="2"&gt;Base Filter Properties: The most fundamental properties of a particular test object class; those whose values will not be changed. E.g. html tag = &amp;lt;A&amp;gt; for a object of Link Class&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;font face="Verdana"&gt;Optional Filter Properties: Other properties that can help identify objects of a particular class.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Smart Identification Process&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Verdana" size="2"&gt;The QTP follows the below process to identify the objects using Smart Identification Mechanism:&lt;/font&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;font face="Verdana" size="2"&gt;QTP creates a new object candidate list within the Objects Parent Object containing all the objects that match all of the properties defined in the Base Filter Properties list.&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font face="Verdana" size="2"&gt;New Object Candidate List (OCL) is created by filtering out the objects in the OCL that does not match the first property listed in the Optional Filter Properties list.&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;&lt;font face="Verdana" size="2"&gt;The OCL is evaluated in the following manner:&lt;/font&gt;       &lt;ol&gt;       &lt;li&gt;&lt;font face="Verdana" size="2"&gt;If the new object candidate list still has more than one object, QTP uses the new (smaller) OCL to repeat elimination process for the next optional filter property in the list.&lt;/font&gt; &lt;/li&gt;        &lt;li&gt;&lt;font face="Verdana" size="2"&gt;If the new object candidate list is empty, QTP ignores this optional filter property, returns to the previous object candidate list, and repeats the elimination process for the next optional filter property in the list.&lt;/font&gt; &lt;/li&gt;        &lt;li&gt;&lt;font face="Verdana" size="2"&gt;If the object candidate list contains exactly one object, then QTP concludes that it has identified the object and performs the statement containing the object.&lt;/font&gt; &lt;/li&gt;        &lt;li&gt;&lt;font face="Verdana" size="2"&gt;QTP continues the process described above until it either identifies one object, or runs out of optional filter properties to use. &lt;/font&gt;&lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font face="Verdana" size="2"&gt;QTP Identifies the Object using the learnt description. &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="Verdana" size="2"&gt;If unable to identify the objects using learnt description Smart Identification is invoked. &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="Verdana" size="2"&gt;If after completing the Smart Identification elimination process, QTP still cannot identify the object, then QTP uses the learned description plus the ordinal identifier to identify the object. &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font face="Verdana" size="2"&gt;If the combined learned description and ordinal identifier are not sufficient to identify the object, then QTP stops the run session and displays a Run Error message. &lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8297576379403344016-7022921958652268952?l=lmohan.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lmohan.blogspot.com/feeds/7022921958652268952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8297576379403344016&amp;postID=7022921958652268952' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/7022921958652268952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8297576379403344016/posts/default/7022921958652268952'/><link rel='alternate' type='text/html' href='http://lmohan.blogspot.com/2008/01/object-identification-mechanism.html' title='Object Identification Mechanism'/><author><name>Lakshminarasimha Manjunatha Mohan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_2jC8Jmtu26k/TA0gHzSLGdI/AAAAAAAAAEA/OdP7xVud_F8/S220/LN.png'/></author><thr:total>5</thr:total></entry></feed>
