<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CAMO Technologies</title>
	<atom:link href="http://www.camotechnologies.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.camotechnologies.com</link>
	<description></description>
	<lastBuildDate>Wed, 17 Apr 2013 12:36:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Test Script Execution &amp; Continuous Integration &#8211; Test Automation SIP Series</title>
		<link>http://www.camotechnologies.com/test-script-with-continuous-integration/</link>
		<comments>http://www.camotechnologies.com/test-script-with-continuous-integration/#comments</comments>
		<pubDate>Tue, 24 Apr 2012 09:27:58 +0000</pubDate>
		<dc:creator>Piyush</dc:creator>
				<category><![CDATA[Agile Testing]]></category>
		<category><![CDATA[Return on Investments]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Test Automation]]></category>

		<guid isPermaLink="false">http://www.camotechnologies.com/?p=586</guid>
		<description><![CDATA[Continuous Integration Practice makes man perfect &#8211; so goes the old adage. This is even more true for tests. While there could be few scripts to be executed on-demand for certain situations, as a rule of thumb attempt should be made to include automation test scripts with [...]]]></description>
			<content:encoded><![CDATA[<h1>Continuous Integration</h1>
<p>Practice makes man perfect &#8211; so goes the old adage. This is even more true for tests. While there could be few scripts to be executed on-demand for certain situations, as a rule of thumb attempt should be made to include automation test scripts with a continuous integration system. If there is no continuous integration system in place, it is absolutely a great idea to invest time and energy in creating one!</p>
<p>A good frequency of test execution helps in quickly establishing bad-builds when an error occurs. Comparing the test reports of successive runs, one can quickly ascertain when a test case first failed. This can save tremendous amount of time otherwise wasted in tracking the source of bugs.</p>
<h1>Test results as Execution Log and Trace</h1>
<p>As software ages, new features are introduced and sometimes these could break existing functionality. A daily build integration of test scripts preempts such avoidable errors. A test execution report with all “greens” and no “reds” or “yellows” is a tremendous confidence booster as well as discipline inducer for the development team. Knowing that a failed test in automated build will result in rejection of the task at hand, instills the discipline of practicing good software development practices in the team. And &#8211; such a report is a direct and very accurate indicator of the health of the software being developed.</p>
<blockquote><p>A test script which is executed with the daily build matures early and proves to be a very important first gate for common errors. Without going through the rigor of being executed frequently a test script will remain weak and purposeless.</p></blockquote>
<p><span style="color: #808080">This concludes our multi-part article on Test Automation Systemic Investment Plan. Stay tuned for many such topics in future.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.camotechnologies.com/test-script-with-continuous-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6 Best Practices for Tracing &amp; Logging in Test Automation &#8211; SIP Series</title>
		<link>http://www.camotechnologies.com/6-best-practices-for-tracing-logging-in-test-automation-sip-series/</link>
		<comments>http://www.camotechnologies.com/6-best-practices-for-tracing-logging-in-test-automation-sip-series/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 07:04:00 +0000</pubDate>
		<dc:creator>Piyush</dc:creator>
				<category><![CDATA[Agile Testing]]></category>
		<category><![CDATA[Return on Investments]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[Test Organization Maturity]]></category>

		<guid isPermaLink="false">http://www.camotechnologies.com/?p=574</guid>
		<description><![CDATA[Preamble Since test automation scripts would run in most of the cases in scheduled mode unsupervised without any manual intervention, it becomes imperative to have solid tracing and logging mechanisms built into the automation framework so that if anything goes wrong, it is still possible to recreate [...]]]></description>
			<content:encoded><![CDATA[<h2>Preamble</h2>
<p>Since test automation scripts would run in most of the cases in scheduled mode unsupervised without any manual intervention, it becomes imperative to have solid tracing and logging mechanisms built into the automation framework so that if anything goes wrong, it is still possible to recreate the error and make meaningful logical inferences about the source of the error.</p>
<h2>The Long Story</h2>
<p>All remains well when nothing goes wrong. But that unfortunately is not the case in real world. In real world, disks get full, memory becomes corrupt, file-handles become invalid, power goes off &#8211; in short &#8211; so many things which “should” not happen, indeed happen. This reality of our world is best expressed by <a href="http://en.wikipedia.org/wiki/Murphy%27s_law">Murphy’s Law</a> &#8211; “If anything can go wrong, it will.”</p>
<p>And when things go wrong, we want to set them right. Further, being human, we would want to know the circumstances which led to the error and take precautionary measures for future.</p>
<p>Such “Holmes”-like investigation is never easy. More often than not exact sequence of events leading to the error or unknown. In other cases, same conditions do not give the same error!</p>
<p>So what could aid the poor test-developer in debugging such errors when they occur?</p>
<h2>Early investment in tracing and logging mechanisms</h2>
<p>While the choice of exact mechanism for logging and tracing will depend on multiple factors like platform of development, underlying operating system, language/compiler support, system constraints amongst many other, there are few guidelines which could help in making the right choices.</p>
<ol>
<li>First and foremost, if tracing and logging effort is included in architecture and design, this in itself is a big right step. This would ensure that implementation is natively available when required.</li>
<li>On platforms like .Net and Java, tools like <a href="http://logging.apache.org/log4net/">log4net </a>, <a href="http://logging.apache.org/log4j/1.2/">log4j</a>, <a href="http://www.slf4j.org/">slf4j</a>, <a href="http://msdn.microsoft.com/library/cc467894.aspx">Enterprise Library</a> could be of immense use. These are well crafted feature rich libraries which make the task of logging a breeze. Before trying to “re-invent the wheel” &#8211; it will be a good idea to explore these libraries and ascertain requirements against their feature sets.</li>
<li>As we have discussed before keeping the logging implementation simple is a good idea.</li>
<li>Keeping in mind the probability of Murphy’s Law, conditions which should never occur, should always be logged.</li>
<li>It will be worth-while to invest in a screenshot utility so that errors are captured at UI level. Experience says that these screenshots become immensely useful evidence in debugging process later.</li>
<li>All popular logging frameworks have notion of log-levels and while writing test-logic it is imperative to use the log levels judiciously. Too less of log will be lost in woods, too much of log will be noise. Log levels help by providing a throttling mechanism so that at runtime we can  tweak what messages we really want to be logged and what we want to be filtered depending on our current situation.</li>
</ol>
<blockquote><p>Not all good things in a developer’s life are free. Investing in tracing and logging mechanism is in reality an architectural decision which should get translated in non-intrusive design elements, further making its way into actual implementation. If tracing and logging is not given its due importance, and is meted with second-grade treatment by adding as an after-thought to the implementation, the results will fall short of desired and will not be adequate enough to be a strategic aid in debugging.</p></blockquote>
<p>Continued&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.camotechnologies.com/6-best-practices-for-tracing-logging-in-test-automation-sip-series/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do Not Re-Invent the Wheel &#8211; Test Automation SIP Series</title>
		<link>http://www.camotechnologies.com/test-automation-tools/</link>
		<comments>http://www.camotechnologies.com/test-automation-tools/#comments</comments>
		<pubDate>Sun, 15 Apr 2012 04:44:56 +0000</pubDate>
		<dc:creator>Piyush</dc:creator>
				<category><![CDATA[Agile Testing]]></category>
		<category><![CDATA[Return on Investments]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Test Automation]]></category>

		<guid isPermaLink="false">http://www.camotechnologies.com/?p=569</guid>
		<description><![CDATA[Abstract Continuing our conversation about tips for better software test automation, this time we would talk about reuse. Given the fact that many test automation initiatives suffer from time crunch, this aspect becomes even more important to understand. While it is very tempting to want to write [...]]]></description>
			<content:encoded><![CDATA[<h2>Abstract</h2>
<p>Continuing our conversation about tips for better software test automation, this time we would talk about reuse.</p>
<p>Given the fact that many test automation initiatives suffer from time crunch, this aspect becomes even more important to understand. While it is very tempting to want to write your own framework for everything you need, it is not practical. If we pause and think, we can emerge over the urge to write our own libraries suited uniquely to task at hand.</p>
<p>While there are legitimate scenarios where such an approach might be required, more often than not, it is counter-productive. The contrast between generic and specific implementation is too stark, yet too subtle at the same time. It is advisable to seek the middle ground in our work.</p>
<p>As a test automation developer it is important to first learn what is already available in terms of frameworks, libraries and refer to other people’s documented experience. Only when we are sure that an existing implementation will not suffice for more than 80% percent of what we need, we should look for custom/specific solutions. Because in most of the cases, 80% requirement match is a large enough ground to start with.</p>
<h2>Free/Open Source Tools Available</h2>
<p>There are multiple competing tools available in both commercial and open source categories and we can evaluate them before embarking on our own implementation journey. Following is a brief list of open-source/free to use tools/frameworks available for various types of automation needs -</p>
<h3>1. Selenium Framework</h3>
<p>Selenium is a suite of tools to automate web browsers across many platforms.</p>
<h3>2. Robot Framework</h3>
<p>Robot Framework is a generic test automation framework for acceptance testing and acceptance test-driven development (ATDD). It has easy-to-use tabular test data syntax and utilizes the keyword-driven testing approach. Its testing capabilities can be extended by test libraries implemented either with Python or Java, and users can create new keywords from existing ones using the same syntax that is used for creating test cases. Robot Framework is open source software released under Apache License 2.0.</p>
<h3>3. Fitnesse</h3>
<p>Fitness is an acceptance testing framework and also duals as a fully integrated standalone wiki.</p>
<h3>4. Watir</h3>
<p>Watir, pronounced water, is an open-source (BSD) family of Ruby libraries for automating web browsers. It allows you to write tests that are easy to read and maintain. It is simple and flexible.</p>
<h3>5. Watin</h3>
<p>Inspired by Watir development of WatiN started in December 2005 to make a similar kind of Web Application Testing possible for the .Net languages. Since then WatiN has grown into an easy to use, feature rich and stable framework.</p>
<h3>6. Frank</h3>
<p>Frank allows you to write structured text test/acceptance tests/requirements (using Cucumber) and have them execute against your iOS application.</p>
<h3>7. MonkeyTalk</h3>
<p>MonkeyTalk is an integrated environment for recording, customizing, running and managing test suites for native mobile applications. It supports iOS (iPhone + iPad) &amp; Andriod.</p>
<h3>8. Microsoft UI Automation Library</h3>
<p>Microsoft UI Automation is the new accessibility framework for Microsoft Windows, available on all operating systems that support Windows Presentation Foundation (WPF). UI Automation provides programmatic access to most user interface (UI) elements on the desktop, enabling assistive technology products such as screen readers to provide information about the UI to end users and to manipulate the UI by means other than standard input. UI Automation also allows automated test scripts to interact with the UI.</p>
<h3>9. White</h3>
<p>White is a framework for automating rich client applications based on Win32, WinForms, WPF, Silverlight and SWT (Java) platforms. It makes use of Microsoft UI Automation Library.</p>
<p>There are many commercially available tools too which can help in your own test-automation adventure!</p>
<blockquote><p>Again, remember, if you really wish to re-invent the wheel, you can, but the actual fun begins when you start putting wheels together and build a car!</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.camotechnologies.com/test-automation-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 Key Areas of Software-as-a-Service (SaaS) Testing</title>
		<link>http://www.camotechnologies.com/5-key-areas-of-software-as-a-service-saas-testing/</link>
		<comments>http://www.camotechnologies.com/5-key-areas-of-software-as-a-service-saas-testing/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 09:27:58 +0000</pubDate>
		<dc:creator>Venkat</dc:creator>
				<category><![CDATA[SaaS Applications Testing]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[API Testing]]></category>
		<category><![CDATA[Functional Testing]]></category>
		<category><![CDATA[Integration Testing]]></category>
		<category><![CDATA[Operational Testing]]></category>
		<category><![CDATA[Performance Testing]]></category>
		<category><![CDATA[SaaS Testing]]></category>
		<category><![CDATA[SaaS Testing Checlist]]></category>
		<category><![CDATA[Security Testing]]></category>

		<guid isPermaLink="false">http://www.camotechnologies.com/?p=554</guid>
		<description><![CDATA[5 Key Areas of Software-as-a-Service (SaaS) Testing Testing SaaS apps is challenging.  From our experience of testing several SaaS apps, we categorize the testing strategy in five key areas. This article describes those areas and provides a quick checklist of what are the different things that needs [...]]]></description>
			<content:encoded><![CDATA[<h1>5 Key Areas of Software-as-a-Service (SaaS) Testing</h1>
<p>Testing SaaS apps is challenging.  From our experience of testing several SaaS apps, we categorize the testing strategy in five key areas. This article describes those areas and provides a quick checklist of what are the different things that needs to be tested.</p>
<h3>1. Functional Testing Checklist</h3>
<p>This is the standard functional testing to validate if the app is doing what it is supposed to do.</p>
<ul>
<li>Conduct rigorous Manual tests as per defined test plans, keeping the end user in mind</li>
<li>Conduct Exploratory tests based on existing or new test cases</li>
<li>Conduct Browser compatibility testing to check performance of the application on different web browsers</li>
<li>Conduct Regression testing on every release, minor upgrade, an integration or data migration.</li>
<li>Automate Functional and Regression tests</li>
<li>Conduct tests in target environment &#8211; whether it is your data center or the Cloud.</li>
<li>Conduct reliability testing to find the total defects of the application and thus reduce the number of failures, during real time deployment.</li>
</ul>
<h3>2.Infrastructure and Security Testing</h3>
<p>The goal of this is to test the underlying infrastructure and security of the app.</p>
<ul>
<li>Test the security of the SaaS application for typical web application security issues such as HTTP header injection, Cross Site scripting (XSS), SQL Injection etc.</li>
<li>Test security of the network where SaaS application is being deployed</li>
<li>Test possible scenarios of security attacks/threats</li>
<li>Test the application with respect to access privileges with the corresponding job roles <em>(especially in a multi-tenant environment)</em></li>
<li>Test the security, integrity &amp; accessibility of test data <em>(especially in a multi-tenant environment )</em></li>
<li>Determine situations that could make the SaaS application vulnerable</li>
<li>Test compliance with Payment Card Industry Data Security Standard (PCI Compliance)</li>
<li>Maintain logs of security warnings, errors and requests from unreliable sources</li>
</ul>
<h3>3.Performance and Scalability Testing</h3>
<p>A critical area of SaaS apps testing, and is really the foundation of business growth.</p>
<ul>
<li>Conduct scalability tests to determine the capacity of the application to scale up or down as per requirements</li>
<li>Conduct volume testing for your data</li>
<li>Conduct availability testing for a planned period of time</li>
<li>Conduct load testing under normal as well as peak load conditions in multiple environments</li>
</ul>
<h3>4.Integration and API testing</h3>
<p>Success of SaaS apps lie in how well you have thought of scenarios where third party developers can build their own apps using your APIs, and add value to your product. So testing all the APIs for functionality, security, usability, performance and completeness of documentation is critical to make them successful.</p>
<h3>5.  Operational Testing</h3>
<p>This area is intended for the operations team whose objective is to make sure the apps are working fine, and take care of customer service &amp; billing. Usually, there are tools that are built as part of the product which help the operational team members to monitor, track and analyze for issues. The areas to look for:</p>
<ul>
<li>Application, Services, App Server, Platforms (OS), Databases and Data Center Level Logs/Alerts/Warnings/Errors for functionality and performance.</li>
<li>Billing and Customer Support Tools, especially for integration</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.camotechnologies.com/5-key-areas-of-software-as-a-service-saas-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>6 Challenges of testing Software-as-a-Service (SaaS) Apps</title>
		<link>http://www.camotechnologies.com/6-challenges-of-testing-software-as-a-service-saas-apps/</link>
		<comments>http://www.camotechnologies.com/6-challenges-of-testing-software-as-a-service-saas-apps/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 09:11:16 +0000</pubDate>
		<dc:creator>Venkat</dc:creator>
				<category><![CDATA[SaaS Applications Testing]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Change Management]]></category>
		<category><![CDATA[Data Migration]]></category>
		<category><![CDATA[Licensing]]></category>
		<category><![CDATA[Performance Testing]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[SaaS Secuity Testing]]></category>
		<category><![CDATA[SaaS Testing]]></category>

		<guid isPermaLink="false">http://www.camotechnologies.com/?p=550</guid>
		<description><![CDATA[SaaS (Software-as-a-Service) businesses are seeing hyper-growth, and with more and more organizations adopting SaaS instead of on-premise software, the R&#38;D organizations of SaaS companies have their task cut out. The QA/Testing team are especially challenged owing to the short release cycles and the fact that thousands of [...]]]></description>
			<content:encoded><![CDATA[<p>SaaS (Software-as-a-Service) businesses are seeing hyper-growth, and with more and more organizations adopting SaaS instead of on-premise software, the R&amp;D organizations of SaaS companies have their task cut out. The QA/Testing team are especially challenged owing to the short release cycles and the fact that thousands of customers will be served by the same infrastructure. Most organizations report impediments to SaaS testing like &#8211; short notice periods for QA notification, frequent testing of live upgrades, short validation cycle times, impact on multiple subscriber organizations, privacy violations, errors due to rapid addition of new features, time taken for data migration, concerns over data security &amp; integrity etc. cloud the obvious benefits of SaaS testing.</p>
<p>In this article, we will look at the specific challenges faced by QA organizations of SaaS companies.  In our next article, we will highlight the testing strategy to address these challenges.</p>
<p>&nbsp;</p>
<ol>
<li><strong>Handling Changes through Frequent Releases -</strong> Every time the Application is upgraded, the users have to understand the impact of the change, validate it against the existing system &amp; ensure that the impact on the existing features of the application is minimal. Managing and executing all these activities within a short time span (1-2 weeks) is challenging.  When SaaS upgrades involve interface upgrading, compatibility and integration issues across old and new interfaces crop up for the subscribers.  Live upgrades being simulated or tested on the SaaS application impedes the activity of the existing users.</li>
<li><strong>Security Testing -</strong> Maintaining data security, accessibility &amp; integrity on a single SaaS application across multiple tenants. To understand individual privacy requirements, privilege levels, behavioural patterns and provide adequate privacy to the data can be a daunting task.</li>
<li><strong>Integration Challenges </strong>- When subscribers integrate their internal enterprise applications with SaaS, inbound and outbound data integration validations from client networks to the SaaS providers is needed. In such cases it is very difficult to conduct thorough validation simultaneously ensuring 100% data security and privacy</li>
<li><strong>Data Migration Issues</strong>  &#8211; Data migration across different SaaS applications or from other applications to SaaS can be challenging in terms of time taken for understanding the requirements and the exhaustive integration validation processes</li>
<li><strong>Licensing</strong>:   The SaaS app licensing may vary by functionality, usage (such as volume of transactions or amount of specific data) or # of named/concurrent users.  All this needs to be tested across every release.</li>
<li><strong>Performance testing</strong>: Successfully modelling the most-used business transactions, application usage and user mix may require greater diligence than an on-premise application.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.camotechnologies.com/6-challenges-of-testing-software-as-a-service-saas-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Saga of Test Data &#8211; How test data impact quality of test automation &#8211; Test Automation SIP Series</title>
		<link>http://www.camotechnologies.com/test-data-in-test-automation/</link>
		<comments>http://www.camotechnologies.com/test-data-in-test-automation/#comments</comments>
		<pubDate>Sun, 04 Mar 2012 18:15:15 +0000</pubDate>
		<dc:creator>Piyush</dc:creator>
				<category><![CDATA[Agile Testing]]></category>
		<category><![CDATA[Return on Investments]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Test Automation]]></category>

		<guid isPermaLink="false">http://www.camotechnologies.com/?p=534</guid>
		<description><![CDATA[Impact of Test Data on Test Automation What can make a good test a weak one? What can make a simple test an effective one? Data. Or Test Data to be precise. A test and its test-data are like body and soul. But like in real life, [...]]]></description>
			<content:encoded><![CDATA[<h1>Impact of Test Data on Test Automation</h1>
<p>What can make a good test a weak one? What can make a simple test an effective one?</p>
<p>Data.</p>
<p>Or Test Data to be precise.</p>
<p>A test and its test-data are like body and soul. But like in real life, soul often gets neglected. While test developers focus a lot of their energies in automating most complex of test scenarios, same extent of attention often gets denied to test data. This neglect can manifest in different ways -</p>
<h3>Common pit-falls in test data implementation</h3>
<h4>a. Didn’t know, didn’t do</h4>
<p>This means the test developer was not aware of the significance of test data and missed to implement any special strategy for the same.</p>
<h4>b. Strong Coupling with Logic</h4>
<p>Another mistake which happens is tight coupling with test logic. The flow gets intermingled with setting/reading of data and gets strongly embedded in the DNA of the test. It becomes difficult to see test separately from its data. For ex, test to check if account gets locked after multiple repeated attempts can suffer from this issue when the number of attempts is hard-coded in the test. In future when this business condition changes, test becomes invalid. Sometimes changing such hard-coded data has severe impact on the over-all test and results may get misinterpreted.</p>
<h4>c. Randomize Test Data</h4>
<p>Quite often test data is left to random data generators. While this can be useful in certain stress testing scenarios, it can be counter-productive to rich test executions which require meaningful data.</p>
<h4>d. Repeated Data</h4>
<p>Each test run gets executed with same test data every time. This monotonous repeat execution may fail to detect any bugs which are associated with usage of data since some of the data-flows may never get tested.</p>
<h3>So what do we do? Few tips from our Experience&#8230;</h3>
<p>So what should be the approach for proper data handling in test automation scenarios? Well, the key lies in moderation and mix-match of approaches.</p>
<h4>a. Give importance to test data</h4>
<p>First and foremost, give that importance to test data it deserves. Invest in test-data planning when you plan for test automation scenarios.</p>
<h4>b. Separation of Concerns</h4>
<p>Keep test logic separate from the data. Rather than testing for 3 attempts, test for n attempts where n could be picked based on a test strategy.</p>
<h4>c. Randomize with caution.</h4>
<p>Instead of having a randomizer as sole test data provider, implement a test data strategy factory. This will provide multiple implementations of test data providers. A random test data generator can be one of the implementations and other could be implemented as required. This will ensure that test logic is not tightly bound with test data and can change independently of test data.</p>
<h4>d. Change test data.</h4>
<p>If you invest in a test data strategy factory, this will be an added advantage since there could be a test data strategy to modify data for each test run or for any run based on some rules relevant to the scenario at hand.</p>
<blockquote><p>There are multiple programming techniques which could aid in effective test data planning and execution. Important thing to remember is that, test data should be given equal importance if not more, as actual test logic. This approach will yield multiple benefits in future in terms of re-usable test data which makes tests more useful &amp; effective with each run.</p></blockquote>
<p>To be continued&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.camotechnologies.com/test-data-in-test-automation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Power of Abstractions</title>
		<link>http://www.camotechnologies.com/power-of-abstractions/</link>
		<comments>http://www.camotechnologies.com/power-of-abstractions/#comments</comments>
		<pubDate>Sun, 26 Feb 2012 18:22:20 +0000</pubDate>
		<dc:creator>Piyush</dc:creator>
				<category><![CDATA[Agile Testing]]></category>
		<category><![CDATA[Return on Investments]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Test Automation]]></category>

		<guid isPermaLink="false">http://www.camotechnologies.com/?p=527</guid>
		<description><![CDATA[Traditional Approach Writing Test Automation code traditionally has been a low-level activity. Find a window, find a control, set the value, click the button &#8211; and then &#8211; find the window, find the control, check the value, and so on. More often than not, a major portion [...]]]></description>
			<content:encoded><![CDATA[<h1>Traditional Approach</h1>
<p>Writing Test Automation code traditionally has been a low-level activity. Find a window, find a control, set the value, click the button &#8211; and then &#8211; find the window, find the control, check the value, and so on. More often than not, a major portion of effort goes in what we call “Infrastructure” code than “Heartbeat” code. Core logic of the test is cluttered with plumbing to deal with the interaction with the application user-interface.</p>
<p>As a rule of thumb we have observed that in order to test X lines of code, it takes at least 2.5 X lines of code to test basic flow and about 4-5 X lines for reasonable coverage. Now given the scale of modern rich UI applications, complexity of required tests can be anyone’s guess.</p>
<p>Many test automation attempts start with a straight translation of manual testing steps, interlaced with API calls to identify forms, fields and other controls. This approach often produces quick results with few test cases getting automated in very short period of time. However like any other quick n’ dirty solutions, if not corrected at early stage results in reams of test-automation logic which is monolithic in structure and extremely fragile to maintain.</p>
<p>So what can help us here?</p>
<p>Power of abstractions.</p>
<h1>Abstractions</h1>
<p>In our daily life we all use so many gadgets &#8211; laptops, cars, watches, refrigerators, etc, without ever worrying about the complexities of the underlying subsystems. Each of these devices provide specific features by combining many smaller sub-systems behind the scenes. This layering makes it easy to install a program on a laptop, adjust time in a watch, make ice-cubes in refrigerator and so on.</p>
<p>Similarly, while programming test automation if we write test logic in terms of high level widgets instead of the underlying representations, it will make our tests a lot more readable and extremely amenable to change. After all,</p>
<blockquote>
<p dir="ltr">LoginForm.UserName = “UserName”</p>
</blockquote>
<p>is lot easier on brain cells to understand than</p>
<blockquote><p>Windows.Application.Find(“My Application”).FindWindow(“LoginForm”).FindControl(“UserName”).SetValue(“UserName”)*<br />
*Not actual API, just representational</p></blockquote>
<h1>Concept of Zoom</h1>
<p>Another way to get this concept is look at the concept of Zoom. Zoom let us look at the same landscape at different levels of understanding. Each level of zoom will show entities relevant at that level.</p>
<p>In test automation parlance, this means that before even thinking of writing test flows, we should think of entities participating in these flows. Tests should be viewed as interactions between these entities rather than as sequential steps. This approach immediately adds up to ROI on the effort because it is easier to device and test complex interaction between various entities than writing complex sequential scripts. This approach instantly shifts attention to tests over data by separating the two, data being input to interaction than being primary test driving factor.</p>
<p>To be continued&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.camotechnologies.com/power-of-abstractions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>7 Key Best Practices of Software Test Automation</title>
		<link>http://www.camotechnologies.com/7-key-best-practices-of-software-test-automation/</link>
		<comments>http://www.camotechnologies.com/7-key-best-practices-of-software-test-automation/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 14:05:19 +0000</pubDate>
		<dc:creator>Venkat</dc:creator>
				<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[Application Functionality]]></category>
		<category><![CDATA[automated testing framework]]></category>
		<category><![CDATA[automated testing tools]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[high quality test data]]></category>
		<category><![CDATA[software testing automation]]></category>
		<category><![CDATA[Test Automation ROI]]></category>
		<category><![CDATA[test data]]></category>
		<category><![CDATA[test framework library]]></category>
		<category><![CDATA[testing automation]]></category>
		<category><![CDATA[testing automation project]]></category>

		<guid isPermaLink="false">http://www.camotechnologies.com/?p=509</guid>
		<description><![CDATA[Test Automation is an integral part  of any software development and  sustenance project.  However, research shows that 80% of test automation projects fail while the other 20% do not yield enough ROI.  In this article, we share our experience of automating testing in several projects and how [...]]]></description>
			<content:encoded><![CDATA[<p dir="ltr">Test Automation is an integral part  of any software development and  sustenance project.  However, research shows that 80% of test automation projects fail while the other 20% do not yield enough ROI.  In this article, we share our experience of automating testing in several projects and how some of these best practices will make your next test automation project successful.</p>
<h2>1.   Treat Test Automation like a Software Development project:</h2>
<p dir="ltr">We have seen that Test Automation projects have greater success if they are treated with the same discipline and rigour of software development. A successful testing automation project:</p>
<ol>
<li>Focuses on design (reusability, extensibility etc.)</li>
<li>Takes a framework driven approach</li>
<li>Has team members who are experts in writing code and not just testing or test automation tools.</li>
<li>Has a clear cut development and governance plan</li>
<li>Maintains detailed documentation</li>
<li>Prepares a plan to track bugs and rectify them</li>
<li>Identifies reusable functions in automation scripts</li>
</ol>
<h2>2.   Set measurable goals for your Test Automation project:</h2>
<p dir="ltr">It is essential to set clear, quantifiable objectives for the test automation project. These goals should clearly bring out:</p>
<ol>
<li>Percentage of test cases to be automated in various Test Suites</li>
<li>% Improvement in the test coverage</li>
<li>% reduction in the time to release the build</li>
<li>Reduction of test cycle time of new releases by improving their time-to-market (management-level goal)</li>
</ol>
<p dir="ltr">For testing metrics like those above,  tools such as Automated Execution Efficiency Ratio (AEER) could be used.</p>
<h2> 3.  Choose a testing tool that answers your Automation needs:</h2>
<p dir="ltr">Selecting the right tools is obviously a very important foundation for success in your Test Automation project. We suggest employing the following criteria in selecting the right test tool:</p>
<ol>
<li>The tool must posses a built- in facility to run multiple test cases</li>
<li>The tool should be able to classify tests being run, basing on set criteria  while simultaneously running multiple test cases</li>
<li>The tool should be able to run the desired test cases without human intervention</li>
<li>The tool should be able to generate execution reports or logs  at the end of each  test case</li>
<li>The tool should be able to compare two values, so that the difference between real and expected results can be estimated.</li>
</ol>
<h2 dir="ltr">4.  Get Your Design of Test Automation Framework Right</h2>
<p dir="ltr">Test Automation framework allows us to define the scripting methodology to automate tests, creates mechanism to hook into the application under test,  execute the tests and report the results.  Framework establishes a common standard for the team to achieve the goals.</p>
<p dir="ltr">While designing a test automation framework, the key goal is maintainability. The tests will change and good automation framework will support and facilitate change. If there is any change in any test, it should be very easy to change the automation suite, and in some cases not required to change at all. In addition, performance is also important. In a typical automated test suite, several tests will be executed. If each test can be executed faster by a second or so, it will matter! Ultimately we are talking about cutting down the time to test!</p>
<p dir="ltr">The following list will serve as a checklist (not exhaustive) to design your test automation framework:</p>
<ol>
<li>Define your scripting standards for business components, system communications, data check points, loggers, reporters etc.</li>
<li>Hide the complexities and critical aspects of the code from Test engineers and expose them to the implemented Libraries and tests.</li>
<li>Separate Scripts and Data – automated tests scripts must be separated from the input data store (could be in text, XML or Excel files). Ideally only input data gets manipulated for testing with multiple values and the script does not change.</li>
<li>Think through the applications future enhancements and modifications before building your test framework library, and build in the extensibility in it.</li>
<li>Use the standard process for script versioning.</li>
<li>Your framework will have components/libraries to handle</li>
</ol>
<ul>
<li>Application Functionality</li>
<li>Types and sources of Input data</li>
<li>Communication between utilities, components and systems such as communication between distributed components,  check points, communication with logger etc</li>
<li>Tool Extending capabilities – features which are not supported by the tool that you have selected.</li>
</ul>
<h2 dir="ltr">5.  Ensure high quality of Test Data:</h2>
<p dir="ltr">A good investment of time and effort should go into creating well-structured test data during the early stages of the automation testing project. This makes the process of writing automated tests easier, in the later stages of the project life-cycle. The quality of test data also determines its reusability and maintainability.</p>
<h2 dir="ltr">6.  Build the right team and invest in training them</h2>
<p dir="ltr">Apart from the right tools and a proven testing process, a testing automation project requires a dedicated, and skilled team who are trained to understand the complexity of the project and work accordingly . The challenge in such scenarios is to find skilled, dynamic  personnel who should be trained to:</p>
<ol>
<li>Handle ambiguous scenarios and test cases</li>
<li>Conduct manual testing along with developers</li>
<li>Write automated regression tests</li>
<li>Execute automated regression packages.</li>
<li>Handle integration and performance testing</li>
<li>Plan and gather requirements</li>
</ol>
<h2>7.  Conduct early and frequent tests</h2>
<p dir="ltr">The more frequent and earlier the testing automation process is applied in the project life-cycle, the earlier are the bugs detected in the process. The earlier the bugs are identified, the more economical it is to remove them from the system at a preliminary stage.  This process also helps refine the automated test suite for  further enhancements.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.camotechnologies.com/7-key-best-practices-of-software-test-automation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Test Code Deserves First Class Citizen Treatment &#8211; Test Automation SIP Series</title>
		<link>http://www.camotechnologies.com/test-code-treatment/</link>
		<comments>http://www.camotechnologies.com/test-code-treatment/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 18:05:04 +0000</pubDate>
		<dc:creator>Piyush</dc:creator>
				<category><![CDATA[Agile Testing]]></category>
		<category><![CDATA[Return on Investments]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Test Automation]]></category>

		<guid isPermaLink="false">http://www.camotechnologies.com/?p=504</guid>
		<description><![CDATA[First Things First Continuing the discussion about our distilled experience in test automation, we will continue our discussion, starting with the basics. Anyone who can type a semi-colon, can write code. Writing code is easy. Writing good is not. And writing good code which can test other [...]]]></description>
			<content:encoded><![CDATA[<h1>First Things First</h1>
<p>Continuing the discussion about our distilled experience in test automation, we will continue our discussion, starting with the basics. Anyone who can type a semi-colon, can write code. Writing code is easy. Writing good is not. And writing good code which can test other code is even more difficult. Common mistakes to avoid when embarking on the test automation journey are:</p>
<h2>A. BUFD (Big Up Front Design)</h2>
<p>In today’s ever evolving world, it has never helped developers to create huge design artifacts in the very beginning only to dis-mantle, re-do, re-work and waste lot of time (and money) in the process. This holds true even more for test code. Investing great amount of time in designing and creating testing frameworks which are not immediately put to use in a live test script is bound to put pressure on the test engineers as time-lines shrink and delivery deadlines converge. Result will be beautiful, unusable test code and, even with good deal of investment in test-automation, poorly tested application. Needless to say this will result in a spiral situation further worsening as budgets will be questioned by stake-holders and will shrink since it will be very difficult to demonstrate value-add from code which is still in the kitchen. No customer will pay for a dish as long as it is in kitchen!</p>
<h2>B. NUFD (No Up Front Design)</h2>
<p>This is contradictory to BUFD, but equally catasthropic. Directly jumping into creating test scripts without thinking through aspects of maintainability, &#8220;extensibility&#8221;, code-reuse, SOLID design principles &amp; simplicity, will result in poorly developed scripts which would be bug-ridden, fragile to change, and will be tough to evolve as application goes through churn and evolution cycles. This could be fairly tricky situation situation to handle if there are multiple test developers involved in the development of scripts.</p>
<blockquote><p>Side Note: It is a balancing act to invest right amount of time and energies into design of test-code. What is just enough is a tough question to ask, tougher to answer. Simple design choices are the best. As <a href="http://en.wikipedia.org/wiki/Kelly_Johnson_(engineer)">Kelly Johnson</a> wisely said &#8211; “Keep it Simple, Stupid”, <a href="http://en.wikipedia.org/wiki/KISS_principle">KISS </a>principle is the best yard-stick to tackle this tough decision. If it requires reams of comment lines to explain that pretty little hack, it is probably not worth to keep it in.</p></blockquote>
<h2>C. Poor Structure</h2>
<p>Good (test) code looks good too. If it is messy looking, it is highly likely it is messy implementation too! Clean well thought folder structure, name-spaces, packages, etc depending on the language used go a long way in making code readable &amp; maintainable by posterity.</p>
<p>Contd&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.camotechnologies.com/test-code-treatment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Test Automation SIP (Systematic Investment Plan)</title>
		<link>http://www.camotechnologies.com/test-automation-sip/</link>
		<comments>http://www.camotechnologies.com/test-automation-sip/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 09:02:42 +0000</pubDate>
		<dc:creator>Piyush</dc:creator>
				<category><![CDATA[Agile Testing]]></category>
		<category><![CDATA[Return on Investments]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Test Automation]]></category>

		<guid isPermaLink="false">http://www.camotechnologies.com/?p=399</guid>
		<description><![CDATA[Abstract The need for automating functional tests for software has been well established over recent couple of years with ever growing application complexity and ever shrinking customer release cycles. While putting time and effort in any kind of test automation helps in the application life-cycle, we have [...]]]></description>
			<content:encoded><![CDATA[<div>
<h1>Abstract</h1>
<p>The need for automating functional tests for software has been well established over recent couple of years with ever growing application complexity and ever shrinking customer release cycles. While putting time and effort in any kind of test automation helps in the application life-cycle, we have seen that a systematic investment plan in developing right test automation recipes and frameworks yields significant savings of time and money.</p>
<p>Writing code for automating test cases is  still writing code at the end of the day and faces similar challenges as traditional software development, plus a few more unique to the world of testing. Being considered mostly as a support activity in software development life-cycle, test automation efforts usually fall short of what is required and desired.</p>
<p>This white-paper discusses the need for a regular &amp; systematic investment in automating functional test cases for any application and provides an in-sight into how such a planned effort leads to significant savings of money &amp; time (which again is equivalent to money).</p>
<h1>Typical Software Test Automation</h1>
<p>Traditionally software test automation is seen as a project activity, with efforts focused on a particular application/system at hand. While this approach makes it easy to initiate the automation effort, it does not promote benefits of reuse of design ideas, implementation and architecture.</p>
<p>As the application goes through churn and evolution, so does the need for updating and keeping the test automation suite. Complexity in the application has a cascading affect on the complexity of the automation code, sometimes even more to account for the plumbing required to automate newer complex functionality.</p>
<p>Like any other piece of written code, test automation logic can also suffer from defects and this further leads to another dimension to the already complicated puzzle.</p>
<h2>Test Automation SIP</h2>
<p>Having faced similar situations in our multiple engagements, we realised that it is best to treat test automation as an umbrella activity in the application development and invest little, but invest consistently in the automation code.</p>
<p>We have captured the essence of our multi-man-month experience in developing test automation suites for multitude of applications of varying sizes and complexity in this white paper.</p>
<h3>1. Test code is first-class citizen like application code</h3>
<p>Test code is as important as the bits which make any application. So it is subject to same rules of engagement &#8211; coding standards, naming conventions, design patterns, architectural best practices &amp; well maintained documentation.</p>
<h3>2. Abstractions help</h3>
<p>While it is legitimate to write test automation logic using low level objects like buttons, text-boxes, it makes tremendous difference when such objects are encapsulated and abstracted to represent high level objects in the eco-system like forms, widgets, etc.</p>
<h3>3. Test is as strong as the test data</h3>
<p>While test automation engineers focus their time and energies into developing test scripts, the data which is fed to these scripts often remains ignored. Probability of a test catching a bug in the system increases manifolds if the test data is intelligently randomized.</p>
<h3>4. Do not reinvent the wheel</h3>
<p>Many software vendors have published libraries for UI automation of applications being developed on their platform. Microsoft has made automation API integral part of newer versions of .Net framework. Microsoft UI Automation is the new accessibility framework for Microsoft Windows, available on all operating systems that support Windows Presentation Foundation (WPF).</p>
<p>UI Automation provides programmatic access to most user interface (UI) elements on the desktop, enabling assistive technology products such as screen readers to provide information about the UI to end users and to manipulate the UI by means other than standard input. UI Automation also allows automated test scripts to interact with the UI.</p>
<h3>5. Invest in tracing and logging in test automation logic</h3>
<p>Since test automation scripts would run in most of the cases in scheduled mode unsupervised without any manual intervention, it becomes imperative to have solid tracing and logging mechanisms built into the automation framework so that if anything goes wrong, it is still possible to recreate the error and make meaningful logical inferences about the source of the error.<br />
Another important piece to be made available to test developer is a screenshot API so that script can take screenshots when things do not go as planned.</p>
<h3>6. Integrate with the daily build</h3>
<p>A test script which is executed with the daily build matures early and proves to be a very important first gate for common errors. Without going through the rigor of being executed frequently a test script will remain weak and purposeless.</p>
<p>Contd&#8230;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.camotechnologies.com/test-automation-sip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
