<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Selvamohan&#039;s Blog</title>
	<atom:link href="http://selvamohan.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://selvamohan.wordpress.com</link>
	<description>It&#039;s all about Software Quality Assurance...</description>
	<lastBuildDate>Tue, 08 Dec 2009 11:04:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='selvamohan.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/6b32bfd9434f22fd06447f12e03eb0f3?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Selvamohan&#039;s Blog</title>
		<link>http://selvamohan.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://selvamohan.wordpress.com/osd.xml" title="Selvamohan&#039;s Blog" />
	<atom:link rel='hub' href='http://selvamohan.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Next Post&#8230;.</title>
		<link>http://selvamohan.wordpress.com/2009/12/08/next-post/</link>
		<comments>http://selvamohan.wordpress.com/2009/12/08/next-post/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 10:44:53 +0000</pubDate>
		<dc:creator>selvamohan</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://selvamohan.wordpress.com/2009/12/08/next-post/</guid>
		<description><![CDATA[Next post is on code coverage. Being into software testing, its also our equal responsibility to give out the best code coverage to ensure 100% is been covered across the project. Will give out more information very soon&#8230;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=193&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Next post is on code coverage. Being into software testing, its also our equal responsibility to give out the best code coverage to ensure 100% is been covered across the project. Will give out more information very soon&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selvamohan.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selvamohan.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selvamohan.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selvamohan.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selvamohan.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selvamohan.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selvamohan.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selvamohan.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selvamohan.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selvamohan.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selvamohan.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selvamohan.wordpress.com/193/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selvamohan.wordpress.com/193/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selvamohan.wordpress.com/193/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=193&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://selvamohan.wordpress.com/2009/12/08/next-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/61bd476f53b6b42dc9c5c035fd0966f6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">selvamohan</media:title>
		</media:content>
	</item>
		<item>
		<title>Performance Testing Methodology</title>
		<link>http://selvamohan.wordpress.com/2009/11/04/testing-methodology/</link>
		<comments>http://selvamohan.wordpress.com/2009/11/04/testing-methodology/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 04:01:31 +0000</pubDate>
		<dc:creator>selvamohan</dc:creator>
				<category><![CDATA[Performance Testing]]></category>

		<guid isPermaLink="false">http://selvamohan.wordpress.com/2009/11/04/testing-methodology/</guid>
		<description><![CDATA[Test Requirements Gathering Test Requirements Gathering stage involves gathering key information like:        Definition of workflow or usage scenario        Estimation of volume for each scenario        Response time requirements for the scenario as a whole and for critical intermediate points Performance Test Requirements Gathering Entry Criteria Input Requirements Activities Exit Criteria Deliverables 1. Authorization [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=179&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3>Test Requirements Gathering</h3>
<p>Test Requirements Gathering stage involves gathering key information like:</p>
<p>       Definition of workflow or usage scenario</p>
<p>       Estimation of volume for each scenario</p>
<p>       Response time requirements for the scenario as a whole and for critical intermediate points</p>
<table border="1" cellspacing="0" cellpadding="0" width="670">
<tbody>
<tr>
<td colspan="5" width="670"><strong>Performance Test Requirements Gathering </strong></td>
</tr>
<tr>
<td><strong>Entry Criteria </strong></td>
<td><strong>Input Requirements </strong></td>
<td><strong>Activities </strong></td>
<td width="118"><strong>Exit Criteria </strong></td>
<td><strong>Deliverables </strong></td>
</tr>
<tr>
<td rowspan="5">1. Authorization from the Business Manager of the project<br />2. All requirements documents are signed off from the customer</td>
<td rowspan="5">1. Logs from the Servers (for reengineering projects)<br />2. Templates and checklists to ensure that all the information is collected<br />3. Expected threshold for each of the performance parameter</td>
<td>1. List the business and performance critical application scenarios</td>
<td rowspan="5" width="118">Customer sign-off of Performance Test Requirements Document</td>
<td rowspan="5">1. Performance Test Requirements Document<br />2. Performance requirement specification review records</td>
</tr>
<tr>
<td>2. Study application infrastructure and production architecture</td>
</tr>
<tr>
<td>3. Understand the transaction</td>
</tr>
<tr>
<td>4. Get the external interface details</td>
</tr>
<tr>
<td>5. Gather the application data volume and growth pattern</td>
</tr>
</tbody>
</table>
<h3>Test Planning and Strategizing</h3>
<p>In the Test Planning and Strategizing stage, a comprehensive Performance Test Plan is prepared based on analysis<br />
Of the requirements collected. A decision is taken on the test environment and the tools to be used for monitoring the<br />
Parameters on each tier (Web Server, Application Layer, and Database Layer). The agenda are detailed out for Scalability analysis, Load, Stress and Endurance testing. A strategy is developed for the number of virtual users and the method of delivery.</p>
<table border="1" cellspacing="0" cellpadding="0" width="91%">
<tbody>
<tr>
<td colspan="5"><strong>Test Planning and Strategizing </strong></td>
</tr>
<tr>
<td width="12%"><strong>Entry Criteria </strong></td>
<td width="21%"><strong>Input Requirements </strong></td>
<td width="32%"><strong>Activities </strong></td>
<td width="11%"><strong>Exit Criteria </strong></td>
<td width="21%"><strong>Deliverables </strong></td>
</tr>
<tr>
<td rowspan="6">Reviewed Performance Test Requirements Document</td>
<td rowspan="6">1. Performance Test Requirements Document. Acceptance criteria on Performance.<br />2. Architectural document (Physical hardware and Logical software architecture), if project is in system/integration testing phase.<br />3. Client feedback on usage pattern of the application and user profiles (geographical spread)</td>
<td>1. Identifying inputs to plan documents and critical components</td>
<td rowspan="6">Reviewed and baselined Performance Test Plan/ strategy document</td>
<td rowspan="6">1. Baselined Performance Test Plan<br />2. Performance Test Plan review records<br />3. Workload modeling report4. Project Plan with schedule, timelines and resources incorporated</td>
</tr>
<tr>
<td>2. Defining test and meeting schedules</td>
</tr>
<tr>
<td>3. Establishing the test data needs and setting up test database</td>
</tr>
<tr>
<td>4. Defining roles and responsibilities</td>
</tr>
<tr>
<td>5. Preparing estimates based on the requirements</td>
</tr>
<tr>
<td>6. Creating Performance Test Plan</td>
</tr>
</tbody>
</table>
<h3>Test Script Development</h3>
<p>During this phase, the test environment is verified by executing the smoke test. Test scripts are recorded for the test, correlations are identified and the scripts are updated accordingly. For scripts which involve different data for different</p>
<p> Users, parameterization is done.</p>
<table border="1" cellspacing="0" cellpadding="0" width="93%">
<tbody>
<tr>
<td colspan="5"><strong>Test Script Development </strong></td>
</tr>
<tr>
<td width="25%"><strong>Entry Criteria </strong></td>
<td><strong>Input Requirements </strong></td>
<td width="30%"><strong>Activities </strong></td>
<td><strong>Exit Criteria </strong></td>
<td><strong>Deliverables </strong></td>
</tr>
<tr>
<td rowspan="5">1. Performance Test Plan<br />2. Test Scenarios<br />3. Test Environment<br />
4. Test Data (with the help of developers/ Client)</td>
<td rowspan="5">Performance Test Plan</td>
<td>1. Establishing test environment</td>
<td rowspan="5">1. Test Bed<br />2. Test Scripts</td>
<td rowspan="5">1. Test Bed<br />2. Test Scripts</td>
</tr>
<tr>
<td>2. Recording/coding scripts for all the identified test cases</td>
</tr>
<tr>
<td>3. Checking data integrity</td>
</tr>
<tr>
<td>4. Creating Test Bed</td>
</tr>
<tr>
<td>5. Deciding on placing of probes and monitors in the system</td>
</tr>
</tbody>
</table>
<h3>Test Execution</h3>
<p>The test is carried out over the Internet at Client location or in the Application development environment or is simulated in EPTS LAB based on the chosen delivery mechanism. The sequence of events are captured and observed by setting up Logs. The load is generated as per the strategy decided. Test Results are computed and the required Graphs are generated.</p>
<table border="1" cellspacing="0" cellpadding="0" width="696">
<tbody>
<tr>
<td colspan="5" width="696"><strong>Performance Test Execution &amp; Result Generation </strong></td>
</tr>
<tr>
<td width="84"><strong>Entry Criteria </strong></td>
<td width="158"><strong>Input Requirements </strong></td>
<td width="242"><strong>Activities </strong></td>
<td width="124"><strong>Exit Criteria </strong></td>
<td width="88"><strong>Deliverables </strong></td>
</tr>
<tr>
<td rowspan="6" width="84">1. Performance requirements analysis<br />2. Performance Test Plan<br />3. Test scripts</td>
<td rowspan="6" width="158">1. CASPER Performance Requirements document reviewed and authorized<br />2. Performance test plan document reviewed and authorized<br />3. Test Scripts</td>
<td width="242">1. Executing warm up test (i.e. conducting trial test for a fixed number of users for a specific period of time) using each test case</td>
<td rowspan="6" width="124">Computed Test Results and graphs &#8211; based on results and log files</td>
<td rowspan="6" width="88">1.Performance Testing Report<br />2. Graphs<br />3. Monitored Performance metrics</td>
</tr>
<tr>
<td width="242">2. Doing ramp-up testing (Increasing the number of users gradually at regular interval of time until the saturation point of the resources is reached)</td>
</tr>
<tr>
<td width="242">3. Conducting Isolated transaction testing to determine the behavior of critical transactions under steady load conditions</td>
</tr>
<tr>
<td width="242">4. Conducting Workload mix test for group of identified critical transactions to simulate the real behavior of the transactions under a steady load as per test strategy</td>
</tr>
<tr>
<td width="242">5. Conducting Endurance test for a longer duration with fixed number of users to stimulate real life scenario</td>
</tr>
<tr>
<td width="242">6. Computing Test Results and generating required graphs</td>
</tr>
</tbody>
</table>
<h3>Test Analysis and Recommendation</h3>
<p>The test results computed in the Test Execution stage are reviewed and analyzed by a team of test engineers having experience in Hardware platforms, Operating Systems, Databases and Software design. Performance requirements and the results obtained are analyzed by the team. Performance gaps are evaluated. Solution approaches are generated. Cost effective best solution is agreed upon. Tuning suggestions are implemented.</p>
<table border="1" cellspacing="0" cellpadding="0" width="90%">
<tbody>
<tr>
<td colspan="5" width="100%"><strong>Test Analysis and Recommendation </strong></td>
</tr>
<tr>
<td width="12%"><strong>Entry Criteria </strong></td>
<td width="14%"><strong>Input Requirements </strong></td>
<td width="43%"><strong>Activities </strong></td>
<td width="15%"><strong>Exit Criteria </strong></td>
<td width="13%"><strong>Deliverables </strong></td>
</tr>
<tr>
<td rowspan="8" width="12%">Computed Test Results and graphs &#8211; based on results and log</td>
<td rowspan="8" width="14%">1. Performance test report<br />2. Graphs based on results<br />3. Log files</td>
<td width="43%">1. Reviewing test results</td>
<td rowspan="8" width="15%">Application Performance Report reviewed and baselined</td>
<td rowspan="8" width="13%">Application Performance Report</td>
</tr>
<tr>
<td width="43%">2. Validating the obtained throughput and response time with respect to user load</td>
</tr>
<tr>
<td width="43%">3. Analyzing the performance testing graphs to determine the scalability of the system</td>
</tr>
<tr>
<td width="43%">4. Validating performance improvements</td>
</tr>
<tr>
<td width="43%">5. Analyzing requirements with Test Results</td>
</tr>
<tr>
<td width="43%">6. Evaluating performance gaps</td>
</tr>
<tr>
<td width="43%">7. Generating solution approaches</td>
</tr>
<tr>
<td width="43%">8. Reaching an agreement on the cost effective, best solution implementation</td>
</tr>
</tbody>
</table>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selvamohan.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selvamohan.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selvamohan.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selvamohan.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selvamohan.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selvamohan.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selvamohan.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selvamohan.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selvamohan.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selvamohan.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selvamohan.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selvamohan.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selvamohan.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selvamohan.wordpress.com/179/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=179&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://selvamohan.wordpress.com/2009/11/04/testing-methodology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/61bd476f53b6b42dc9c5c035fd0966f6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">selvamohan</media:title>
		</media:content>
	</item>
		<item>
		<title>Test Driven Design (TDD)</title>
		<link>http://selvamohan.wordpress.com/2009/10/23/test-driven-design-tdd/</link>
		<comments>http://selvamohan.wordpress.com/2009/10/23/test-driven-design-tdd/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 05:15:56 +0000</pubDate>
		<dc:creator>selvamohan</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://selvamohan.wordpress.com/?p=145</guid>
		<description><![CDATA[Test-driven design (TDD), is an evolutionary approach to development which combines test-first development where you write a test before you write just enough production code to fulfill that test and refactoring. What is the primary goal of TDD?  One view is the goal of TDD is specification and not validation. In other words, it’s one [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=145&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Test-driven design (TDD), is an evolutionary approach to development which combines test-first development where you write a test before you write just enough production code to fulfill that test and refactoring.</p>
<p><strong>What is the primary goal of TDD? </strong></p>
<p> One view is the goal of TDD is specification and not validation. In other words, it’s one way to think through our design before we write our functional code. Another view is that TDD is a programming technique. As Ron Jeffries likes to say, the goal of TDD is to write clean code that works. I think that there is merit in both arguments, although I lean towards the specification view, but I leave it for you to decide.</p>
<p><strong>1. What is TDD? </strong></p>
<p>The steps of test first design (TFD) are overviewed in the UML activity diagram of Figure 1. The first step is to quickly add a test, basically just enough code to fail. Next we run our tests, often the complete test suite although for sake of speed we may decide to run only a subset, to ensure that the new test does in fact fail. We then update our functional code to make it pass the new tests. The fourth step is to run our tests again. If they fail we need to update our functional code and retest. Once the tests pass the next step is to start over (we may first need to refactor any duplication out of our design as needed, turning TFD into TDD).</p>
<p>Figure1 &#8211; The Steps of test-first design (TFD).</p>
<p><img class="aligncenter size-full wp-image-149" title="Figure1" src="http://selvamohan.files.wordpress.com/2009/10/figure11.jpg?w=380&#038;h=732" alt="Figure1" width="380" height="732" /></p>
<p> I like to describe TDD with this simple formula:</p>
<p> <em>TDD = TFD + refactoring</em>.</p>
<p>TDD completely turns traditional development around.  Instead of writing functional code first and then our testing code as an afterthought, if we write it at all, we instead write our test code before our functional code.  Furthermore, we do so in very small steps – one test and a small bit of corresponding functional code at a time.  A programmer taking a TDD approach refuses to write a new function until there is first a test that fails because that function isn’t present.  In fact, they refuse to add even a single line of code until a test exists for it.  Once the test is in place they then do the work required to ensure that the test suite now passes (Our new code may break several existing tests as well as the new one).  Once our code works, we then refactor it to ensure that it&#8217;s remains of high quality.  This sounds simple in principle, but when we are first learning to take a TDD approach it proves require great discipline because it is easy to “slip” and write functional code without first writing a new test.  One of the advantages of pair programming is that our pair helps us to stay on track.</p>
<p>An underlying assumption of TDD is that we have a unit-testing framework available for us.  Agile software developers often use the xUnit family of open source tools, such as JUnit or VBUnit, although commercial tools are also viable options.  Without such tools TDD is virtually impossible.  Figure 2 presents a UML state chart diagram for how people typically work with the xUnit tools.</p>
<p>Figure2 &#8211; Testing via the xUnit Framework</p>
<p><img class="aligncenter size-full wp-image-152" title="Figure2" src="http://selvamohan.files.wordpress.com/2009/10/figure2.jpg?w=480&#038;h=187" alt="Figure2" width="480" height="187" /></p>
<p>Kent Beck, who popularized TDD in extreme Programming (XP), defines two simple rules for TDD.</p>
<p>First, we should write new business code only when an automated test has failed. </p>
<p>Second, we should eliminate any duplication that you find.  Beck explains how these two simple rules generate complex individual and group behavior:</p>
<p>We design organically, with the running code providing feedback between decisions.</p>
<p>We write our own tests because you can&#8217;t wait 20 times per day for someone else to write them for us. </p>
<p>Our development environment must provide rapid response to small changes (e.g. We need a fast compiler and regression test suite).</p>
<p>Our designs must consist of highly cohesive, loosely coupled components (e.g. our design is highly normalized) to make testing easier (this also makes evolution and maintenance of our system easier too).</p>
<p>For developers, the implication is that they need to learn how to write effective unit tests. </p>
<ul>
<li>Experience is that good unit tests:</li>
<li>Run fast (they have short setups, run times, and break downs).</li>
<li>Run in isolation (We should be able to reorder them).</li>
<li>Use data that makes them easy to read and to understand.</li>
<li>Use real data (e.g. copies of production data) when they need to.)</li>
<li>Represent one step towards your overall goal.</li>
</ul>
<p><strong>2. TDD and Traditional Testing</strong></p>
<p>TDD is primarily a design technique with a side effect of ensuring that our source code is thoroughly unit tested.  However, there is more to testing than this. We&#8217;ll still need to consider other testing techniques such as agile acceptance testing and investigative testing.  Much of this testing can also be done early in our project if we choose to do so (and we should).  In fact, in XP the acceptance tests for a user story are specified by the project stakeholder(s) either before or in parallel to the code being written, giving stakeholders the confidence that the system does in fact meet their requirements. </p>
<p>With traditional testing a successful test finds one or more defects.  It is the same with TDD; when a test fails we have made progress because we now know that we need to resolve the problem.  More importantly, we have a clear measure of success when the test no longer fails. TDD increases our confidence that our system actually meets the requirements defined for it, that our system actually works and therefore we can proceed with confidence.</p>
<p>As with traditional testing, the greater the risk profile of the system the more thorough our tests need to be. With both traditional testing and TDD we aren&#8217;t striving for perfection, instead we are testing to the importance of the system.  To paraphrase Agile Modeling (AM), we should &#8220;test with a purpose&#8221; and know why we are testing something and to what level it needs to be tested.  An interesting side effect of TDD is that we achieve 100% coverage test – every single line of code is tested – something that traditional testing doesn’t guarantee (although it does recommend it).  In general I think it’s fairly safe to say that although TDD is a specification technique, a valuable side effect is that it results in significantly better code testing than do traditional techniques.   </p>
<p> </p>
<table border="0" cellpadding="0" width="60%">
<tbody>
<tr>
<td width="141"> </td>
<td>
<table border="1" cellpadding="0" width="100%">
<tbody>
<tr>
<td>If it&#8217;s worth building, it&#8217;s worth testing.If it&#8217;s not worth testing, why are you wasting your time working on it?</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p><strong> </strong></p>
<p><strong>3. TDD and Documentation</strong></p>
<p>Like it or not most programmers don’t read the written documentation for a system, instead they prefer to work with the code.  And there’s nothing wrong with this.  When trying to understand a class or operation most programmers will first look for sample code that already invokes it.  Well-written unit tests do exactly this – they provide a working specification of our functional code – and as a result unit tests effectively become a significant portion of our technical documentation. The implication is that the expectations of the pro-documentation crowd need to reflect this reality. </p>
<p>Similarly, acceptance tests can form an important part of our requirements documentation.  This makes a lot of sense when you stop and think about it.  Our acceptance tests define exactly what our stakeholders expect of our system; therefore they specify your critical requirements. </p>
<p>Are tests sufficient documentation?  Very likely not, but they do form an important part of it.  For example, we are likely to find that we still need user, system overview, operations, and support documentation.  We may even find that our require summary documentation overviewing the business process that our system supports.  When we approach documentation with an open mind, I suspect that we will find that these two types of tests cover the majority of your documentation needs for developers and business stakeholders.  Furthermore, they are a wonderful example of AM&#8217;s Single Source Information practice and an important part of your overall efforts to remain as agile as possible regarding documentation.</p>
<p><strong>4. Test-Driven Database Development</strong></p>
<p>At the time of this writing an important question being asked within the agile community is “can TDD work for data-oriented development?”  When we look at the process depicted in Figure 1 it is important to note that none of the steps specify object programming languages, such as Java or C#, even though those are the environments TDD is typically used in.  Why couldn&#8217;t we write a test before making a change to our database schema?  Why couldn&#8217;t we make the change, run the tests, and refactor your schema as required?  It seems to me that we only need to choose to work this way.</p>
<p>My guess is that in the near term database TDD, or perhaps Test Driven Database Design (TDDD), won&#8217;t work as smoothly as application TDD.  The first challenge is tool support.  Although unit-testing tools, such as <a href="http://www.dbunit.org/">DBUnit</a>, are now available they are still an emerging technology at the time of this writing. Some DBAs are improving the quality of the testing they doing, but I haven’t yet seen anyone take a TDD approach to database development.  One challenge is that unit testing tools are still not well accepted within the data community, although that is changing, so my expectation is that over the next few years database TDD will grow.  Second, the concept of evolutionary development is new to many data professionals and as a result the motivation to take a TDD approach has yet to take hold.  This issue affects the nature of the tools available to data professionals – because a <a href="http://www.agiledata.org/essays/culturalImpedanceMismatch.html">serial mindset</a> still dominates within the traditional data community most tools do not support evolutionary development.  My hope is that tool vendors will catch on to this shift in paradigm, but my expectation is that we&#8217;ll need to develop open source tools instead.  Third, my experience is that most people who do data-oriented work seem to prefer a model-driven, and not a test-driven approach.  One cause of this is likely because a test-driven approach hasn&#8217;t been widely considered until now, another reason might be that many data professionals are likely visual thinkers and therefore prefer a modeling-driven approach.</p>
<p><strong>5. Scaling TDD via Agile Model-Driven Development (AMDD)</strong></p>
<p>TDD is very good at detailed specification and validation, but not so good at thinking through bigger issues such as the overall design, how people will use the system, or the UI design (for example).  Modeling, or more to the point <a href="http://www.agilemodeling.com/">agile model-driven development (AMDD)</a> (the lifecycle for which is captured in Figure 3) is better suited for this.  AMDD addresses the scaling issues which TDD does not.</p>
<p>Figure 3. The Agile Model Driven Development (AMDD) lifecycle.</p>
<p><img class="alignleft size-full wp-image-158" title="Figure3" src="http://selvamohan.files.wordpress.com/2009/10/figure3.jpg?w=905&#038;h=627" alt="Figure3" width="905" height="627" /><strong>Comparing TDD and AMDD: </strong></p>
<ul>
<li>TDD shortens the programming feedback loop whereas AMDD shortens the modeling feedback loop.</li>
<li>TDD provides detailed specification (tests) whereas AMDD is better for thinking through bigger issues.</li>
<li>TDD promotes the development of high-quality code whereas AMDD promotes high-quality communication with your stakeholders and other developers.</li>
<li>TDD provides concrete evidence that your software works whereas AMDD supports your team, including stakeholders, in working toward a common understanding.</li>
<li>TDD “speaks” to programmers whereas AMDD speaks to business analysts, stakeholders, and data professionals.</li>
<li>TDD is provides very finely grained concrete feedback on the order of minutes whereas AMDD enables verbal feedback on the order minutes (concrete feedback requires developers to follow the practice Prove It With Code and thus becomes dependent on non-AM techniques).</li>
<li>TDD helps to ensure that your design is clean by focusing on creation of operations that are callable and testable whereas AMDD provides an opportunity to think through larger design/architectural issues before you code.</li>
<li>TDD is non-visually oriented whereas AMDD is visually oriented.</li>
</ul>
<p>Both techniques are new to traditional developers and therefore may be threatening to them.</p>
<p>Both techniques support evolutionary development.</p>
<p>Which approach should you take?  The answer depends on you, and your teammates, cognitive preferences.  Some people are primarily &#8220;visual thinkers&#8221;, also called spatial thinkers, and they may prefer to think things through via drawing.  Other people are primarily text oriented, non-visual or non-spatial thinkers, who don&#8217;t work well with drawings and therefore they may prefer a TDD approach.  Of course most people land somewhere in the middle of these two extremes and as a result they prefer to use each technique when it makes the most sense.    In short, the answer is to use the two techniques together so as to gain the advantages of both.</p>
<p>How do you combine the two approaches?  AMDD should be used to create models with your project stakeholders to help explore their requirements and then to explore those requirements sufficiently in architectural and design models (often simple sketches).  TDD should be used as a critical part of your build efforts to ensure that you develop clean, working code.  The end result is that you will have a high-quality, working system that meets the actual needs of your project stakeholders.</p>
<p><strong>6. Why TDD?</strong></p>
<p>A significant advantage of TDD is that it enables you to take small steps when writing software.  This is a practice that we have promoted for years because it is far more productive than attempting to code in large steps.  For example, assume we add some new functional code, compile, and test it.  Chances are pretty good that your tests will be broken by defects that exist in the new code.  It is much easier to find, and then fix, those defects if you&#8217;ve written two new lines of code than two thousand. The implication is that the faster your compiler and regression test suite, the more attractive it is to proceed in smaller and smaller steps.  We generally prefer to add a few new lines of functional code, typically less than ten, before I recompile and rerun my tests.</p>
<p>It is rightly said “The act of writing a unit test is more an act of design than of verification.  It is also more an act of documentation than of verification.  The act of writing a unit test closes a remarkable number of feedback loops, the least of which is the one pertaining to verification of function”.</p>
<p>The first reaction that many people have to agile techniques is that they&#8217;re ok for small projects, perhaps involving a handful of people for several months, but that they wouldn&#8217;t work for &#8220;real&#8221; projects that are much larger.   That’s simply not true.  <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://www.amazon.com/exec/obidos/ASIN/0321146530/ambysoftinc">Beck (2003)</a> reports working on a Smalltalk system taking a completely test-driven approach which took 4 years and 40 person years of effort, resulting in 250,000 lines of functional code and 250,000 lines of test code.  There are 4000 tests running in under 20 minutes, with the full suite being run several times a day.  Although there are larger systems out there, we’ve personally worked on systems where several hundred person years of effort were involved, it is clear that TDD works for good-sized systems.</p>
<p><strong>7. Myths and Misconceptions</strong></p>
<p>There are several common myths and misconceptions which people have regarding TDD which we would like to clear up if possible. Table 1 lists these myths and describes the reality.</p>
<p>Table 1. Addressing the myths and misconceptions surrounding TDD</p>
<table border="1" cellpadding="0" width="100%">
<tbody>
<tr>
<td>Myth</td>
<td>Reality</td>
</tr>
<tr>
<td>You create a 100% regression test suite</td>
<td>Although this sounds like a good goal, and it is, it unfortunately isn&#8217;t realistic for several reasons:I may have some reusable components/frameworks/&#8230; which I&#8217;ve downloaded or purchased which do not come with a test suite, nor perhaps even with source code.  Although I can, and often do, create black-box tests which validate the interface of the component these tests won&#8217;t completely validate the component. The user interface is really hard to test.  Although user interface testing tools do in fact exist, not everyone owns them and sometimes they are difficult to use.  A common strategy is to not automate user interface testing but instead to hope that <a href="http://www.agilemodeling.com/essays/agileUsability.htm#UserTesting">user testing</a> efforts cover this important aspect of your system.  Not an ideal approach, but still a common one.  Some developers on the team may not have adequate testing skills. <a href="http://www.agiledata.org/essays/databaseTesting.html">Database regression testing</a> is a fairly new concept and not yet well supported by tools. I may be working on a <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://www.amazon.com/exec/obidos/ASIN/0131177052/ambysoftinc/">legacy system</a> and may not yet have gotten around to writing the tests for some of the legacy functionality.</td>
</tr>
<tr>
<td>The unit tests form 100% of your design specification</td>
<td>People new to agile software development, or <a href="http://www.ddj.com/184415255">people claiming to be agile</a> but who really aren&#8217;t, or perhaps people who have never been involved with an actual agile project, will sometimes say this.  The reality is that the unit test form a fair bit of the <a href="http://www.agilemodeling.com/essays/agileDesign.htm">design</a> specification, similarly <a href="http://www.agilemodeling.com/artifacts/acceptanceTests.htm">acceptance tests</a> form a fair bit of your <a href="http://www.agilemodeling.com/essays/agileRequirements.htm">requirements</a> specification, but there&#8217;s more to it than this.  As <a href="http://www.agiledata.org/essays/tdd.html#Figure3">Figure 3 </a>indicates, agilists do in fact <a href="http://www.agilemodeling.com/">model</a> (and <a href="http://www.agilemodeling.com/essays/agileDocumentation.htm">document</a> for that matter), it&#8217;s just that we&#8217;re very smart about how we do it.  Because you think about the production code before you write it, you effectively perform detailed design as  I highly suggest reading my <a href="http://www.agilemodeling.com/essays/singleSourceInformation.htm">Single Source Information: An Agile Practice for Effective Documentation</a> article.</td>
</tr>
<tr>
<td>You only need to unit test</td>
<td>For all but the simplest systems this is completely false.  The agile community is very clear about the need for a host of <a href="http://www.ambysoft.com/essays/floot.html">other testing techniques</a>. </td>
</tr>
<tr>
<td>TDD is sufficient for testing</td>
<td>TDD, at the unit/developer test as well as at the customer test level, is only part of your overall testing efforts.  At best it comprises your confirmatory testing efforts, but as <a href="http://www.agiledata.org/essays/tdd.html#Figure4">Figure 4</a> shows you must also be concerned about investigative testing efforts which go beyond this.  See <a href="http://www.ddj.com/dept/debug/196603549?cid=Ambysoft">Agile Testing Strategies</a> for details.</td>
</tr>
<tr>
<td>TDD doesn&#8217;t scale</td>
<td>This is partly true, although easy to overcome.  Scalability issues include:Your test suite takes too long to run.  This is a common problem with a equally common solutions.  First, separate your test suite into two components.  One test suite contains the tests for the new functionality that you&#8217;re currently working on, the other test suite contains all tests.  You run the first test suite regularly, migrating older tests for mature portions of your production code to the overall test suite as appropriate.  The overall test suite is run in the background, often on a separate machine(s), and/or at night.  Second, throw some hardware at the problem. Not all developers know how to test.  That&#8217;s often true, so get them some appropriate training and get them pairing with people with unit testing skills.  Anybody who complains about this issue more often than not seems to be looking for an excuse not to adopt TDD.Everyone might not be taking a TDD approach.  Taking a TDD approach to development is something that everyone on the team needs to agree to do.  If some people aren&#8217;t doing so, then in order of preference: they either need to start, they need to be motivated to leave the team, or your team should give up on TDD.</td>
</tr>
</tbody>
</table>
<p> Figure 4:  Agile testing.</p>
<p><img class="alignleft size-full wp-image-164" title="Figure4" src="http://selvamohan.files.wordpress.com/2009/10/figure4.jpg?w=479&#038;h=306" alt="Figure4" width="479" height="306" /></p>
<p> <strong>8. Summary</strong></p>
<p>Test-driven design (TDD) is a development technique where you must first write a test that fails before you write new functional code.  TDD is being quickly adopted by agile software developers for development of application source code and is even being adopted by Agile DBAs for <a href="http://www.agiledata.org/essays/databaseTesting.html">database development</a>.  TDD should be seen as complementary to <a href="http://www.agilemodeling.com/">Agile Model Driven Development (AMDD)</a> approaches and the two can and should be used together.  TDD does not replace traditional testing, instead it defines a proven way to ensure effective unit testing.  A side effect of TDD is that the resulting tests are working examples for invoking the code, thereby providing a working specification for the code. My experience is that TDD works incredibly well in practice and it is something that all software developers should consider adopting.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selvamohan.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selvamohan.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selvamohan.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selvamohan.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selvamohan.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selvamohan.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selvamohan.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selvamohan.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selvamohan.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selvamohan.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selvamohan.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selvamohan.wordpress.com/145/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selvamohan.wordpress.com/145/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selvamohan.wordpress.com/145/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=145&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://selvamohan.wordpress.com/2009/10/23/test-driven-design-tdd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/61bd476f53b6b42dc9c5c035fd0966f6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">selvamohan</media:title>
		</media:content>

		<media:content url="http://selvamohan.files.wordpress.com/2009/10/figure11.jpg" medium="image">
			<media:title type="html">Figure1</media:title>
		</media:content>

		<media:content url="http://selvamohan.files.wordpress.com/2009/10/figure2.jpg" medium="image">
			<media:title type="html">Figure2</media:title>
		</media:content>

		<media:content url="http://selvamohan.files.wordpress.com/2009/10/figure3.jpg" medium="image">
			<media:title type="html">Figure3</media:title>
		</media:content>

		<media:content url="http://selvamohan.files.wordpress.com/2009/10/figure4.jpg" medium="image">
			<media:title type="html">Figure4</media:title>
		</media:content>
	</item>
		<item>
		<title>Build Automation Approach Using Cruise Control &amp; NAnt</title>
		<link>http://selvamohan.wordpress.com/2009/10/21/build-automation-approach/</link>
		<comments>http://selvamohan.wordpress.com/2009/10/21/build-automation-approach/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 10:06:56 +0000</pubDate>
		<dc:creator>selvamohan</dc:creator>
				<category><![CDATA[Build Automation]]></category>

		<guid isPermaLink="false">http://selvamohan.wordpress.com/?p=137</guid>
		<description><![CDATA[There are two aspects regarding build automation are: Continuous Integration Automated Build Generation When we say continuous integration, it means: Monitor changes in the repository Publish the results via web and/or email When we say build automation, it means: Get source code from the repository. Build the complete application package. Executing tests cases. Coding standards [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=137&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There are two aspects regarding build automation are:</p>
<ul>
<li>Continuous Integration</li>
<li>Automated Build Generation</li>
</ul>
<p>When we say <strong><em>continuous integration,</em></strong> it means:</p>
<ul>
<li>Monitor changes in the repository</li>
<li>Publish the results via web and/or email</li>
</ul>
<p>When we say <strong><em>build automation</em></strong>, it means:</p>
<ul>
<li>Get source code from the repository.</li>
<li>Build the complete application package.</li>
<li>Executing tests cases.</li>
<li>Coding standards validation using FxCop or some other tool.</li>
</ul>
<p>Build Automation using CruiseControl.Net</p>
<p><img class="aligncenter size-full wp-image-138" title="Onr" src="http://selvamohan.files.wordpress.com/2009/10/onr.jpg?w=480&#038;h=236" alt="Onr" width="480" height="236" /></p>
<p><strong>CC-Tray</strong></p>
<p><img class="aligncenter size-full wp-image-139" title="Two" src="http://selvamohan.files.wordpress.com/2009/10/two.jpg?w=480&#038;h=212" alt="Two" width="480" height="212" /><strong> </strong></p>
<p><strong><span style="text-decoration:underline;">CruiseControl.Net (Continuous Integration)</span></strong></p>
<p>This tool as we mentioned is used for Continuous Integration. Once the repositories are in place, we can make use of this tool so that on every change in the repository OR in a timely manner, this process could be started off.  It is purely xml based; we just need to configure its configuration file named <strong>ccnet.config</strong>. In the following, we will find a sample script which will contain tags for the repository to monitor, calling NAnt &amp; publish results on web and email.</p>
<p>&lt;cruisecontrol&gt;<br />
&lt;project name=”ProjectName”&gt;</p>
<p>&lt;sourcecontrol type=”vss” autoGetSource=”true”&gt;<br />
&lt;ssdir&gt;\\YourServer\vss\&lt;/ssdir&gt;<br />
&lt;executable&gt;\\YourServer\vss\win32\SS.EXE&lt;/executable&gt;<br />
&lt;project&gt;$/ProjectName&lt;/project&gt;<br />
&lt;username&gt;YourUsername&lt;/username&gt;<br />
&lt;password&gt;&lt;/password&gt;<br />
&lt;/sourcecontrol&gt;</p>
<p>&lt;!– Changed to correct url –&gt;<br />
&lt;webURL&gt;http://localhost/ccnet&lt;/webURL&gt;<br />
&lt;schedule type=”schedule” sleepSeconds=”60″/&gt;<br />
&lt;build type=”nant”&gt;<br />
&lt;executable&gt;DrivePath\nant\bin\NAnt.exe&lt;/executable&gt;<br />
&lt;baseDirectory&gt;DrivePath:\projects\ProjectDir\&lt;/baseDirectory&gt;<br />
&lt;buildFile&gt;MyBuild.build&lt;/buildFile&gt;<br />
&lt;targetList&gt;<br />
&lt;target&gt;build&lt;/target&gt;<br />
&lt;/targetList&gt;<br />
&lt;buildTimeoutSeconds&gt;300&lt;/buildTimeoutSeconds&gt;<br />
&lt;/build&gt;<br />
&lt;modificationDelaySeconds&gt;10&lt;/modificationDelaySeconds&gt;<br />
&lt;/project&gt;<br />
&lt;/cruisecontrol&gt;</p>
<p>The above is a sample script file that contains source control tag for VSS. Repository mentioned in this tag will be monitored for any changes. Then in the build type tag, NAnt has been invoked using build tag. NAnt will automate build generation. When cruise control is being invoked, this script gets executed.</p>
<p><strong><span style="text-decoration:underline;">NAnt (Build Automation)</span></strong></p>
<p>The above script will invoke NAnt whenever there is a change in the repository. NAnt is also open source, which is an equivalent for .Net like Ant for Java. Using NAnt we will generate the complete build and related. NAnt’s configuration file is named like FileName.build. It’s an xml file as well, so no need to worry about any specific structure. Just need to get familiar with its tags. Sample script is as follows:</p>
<p>&lt;!– ********** –&gt;<br />
&lt;!– Properties –&gt;</p>
<p>&lt;!– Solution.Filename represents the filename of the solution to build –&gt;<br />
&lt;property name=”Solution.Filename” value=”DrivePath:\Project.sln”/&gt;<br />
&lt;property name=”Solution.Configuration” value=”RELEASE”/&gt;<br />
&lt;property name=”Build.OutputFolder” value=”Drive_Path\BuildLocation\”/&gt;<br />
&lt;!– End Properties –&gt;</p>
<p>&lt;!– build will trigger main build –&gt;<br />
&lt;target name=”build” description=”compiles the source code”&gt;<br />
&lt;call target=”runGetLatest”/&gt;<br />
&lt;solution solutionfile=”${Solution.Filename}” outputdir=”${Build.OutputFolder}${sys.version}\” configuration=”${Solution.Configuration}”/&gt;<br />
&lt;call target=”runUnitTests”/&gt;<br />
&lt;call target=”runFxCop”/&gt;<br />
&lt;call target=”runCreateDocumentation”/&gt;<br />
&lt;call target=”runCopyResults”/&gt;<br />
&lt;/target&gt;<br />
&lt;!– End Targets –&gt;</p>
<p>&lt;target name=”runGetLatest”&gt;</p>
<p>&lt;vssget</p>
<p>user=”username”<br />
password=”pwd”</p>
<p>localpath=”PathToGetCode”</p>
<p>recursive=”true”</p>
<p>replace=”true”</p>
<p>writable=”true”</p>
<p>removedeleted=”false”</p>
<p>dbpath=”\\Path\VSS\srcsafe.ini”</p>
<p>path=”$/DirNameInVSS”/&gt;</p>
<p>&lt;/target&gt;<span id="_marker"> </span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selvamohan.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selvamohan.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selvamohan.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selvamohan.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selvamohan.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selvamohan.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selvamohan.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selvamohan.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selvamohan.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selvamohan.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selvamohan.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selvamohan.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selvamohan.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selvamohan.wordpress.com/137/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=137&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://selvamohan.wordpress.com/2009/10/21/build-automation-approach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/61bd476f53b6b42dc9c5c035fd0966f6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">selvamohan</media:title>
		</media:content>

		<media:content url="http://selvamohan.files.wordpress.com/2009/10/onr.jpg" medium="image">
			<media:title type="html">Onr</media:title>
		</media:content>

		<media:content url="http://selvamohan.files.wordpress.com/2009/10/two.jpg" medium="image">
			<media:title type="html">Two</media:title>
		</media:content>
	</item>
		<item>
		<title>Feature Release Mail (Sample)</title>
		<link>http://selvamohan.wordpress.com/2009/10/20/feature-release-mail/</link>
		<comments>http://selvamohan.wordpress.com/2009/10/20/feature-release-mail/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 13:10:10 +0000</pubDate>
		<dc:creator>selvamohan</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://selvamohan.wordpress.com/2009/10/20/feature-release-mail/</guid>
		<description><![CDATA[Feature Name: &#60;&#60;Major Area-Minor Area [Example: Thin Client/Firewall…-Login/Gift Allowance]&#62;&#62; Owner: &#60;&#60;Feature Test Owner Example: Selvamohan&#62;&#62; Feature Team Members: &#60;&#60;Dev/PGMT/Test Owner&#62;&#62; Feature Rating: (This section to be filled by Test team) &#60;&#60;2.5/3/3.5/4/4.5/5&#62;&#62;  Please refer to the feature ratings defects:  For Qualitative rating, look at the following:  2.5 &#8211; feature is totally unstable 3.0 &#8211; still finding [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=131&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Feature Name: </strong>&lt;&lt;Major Area-Minor Area [Example: Thin Client/Firewall…-Login/Gift Allowance]&gt;&gt;</p>
<p><strong>Owner: </strong>&lt;&lt;Feature Test Owner Example: Selvamohan&gt;&gt;</p>
<p><strong>Feature Team Members: </strong>&lt;&lt;Dev/PGMT/Test Owner&gt;&gt;</p>
<p><strong>Feature Rating: (This section to be filled by Test team) </strong>&lt;&lt;2.5/3/3.5/4/4.5/5&gt;&gt;</p>
<p> Please refer to the feature ratings defects:</p>
<p> For Qualitative rating, look at the following: </p>
<ul>
<li>2.5 &#8211; feature is totally unstable</li>
<li>3.0 &#8211; still finding significant issues (S1+S2) and/or a lot of small problems</li>
<li>3.5 &#8211; finding occasional serious issues (S1+S2) and quite a few small problems (S3+S4)</li>
<li>4.0 &#8211; finding small problems or issues are very very deep and under vague scenarios</li>
<li>4.5 &#8211; finding very very minor problems &#8211; we can ship</li>
<li>5.0 &#8211; can&#8217;t find any problems at all <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p> <strong>Scenarios/Tests covered: </strong></p>
<p><strong> </strong>&lt;&lt;Example: -&gt;Search based on Genre/category-&gt;Simple Search&gt;&gt;</p>
<p> <strong>Known Issues /Open Issues:</strong><strong> </strong></p>
<ul>
<li>Known Issue: Search does not display the no. of records with &lt;Bug Id&gt;</li>
<li>Open Issue: Yet to decide on search based on wild characters</li>
</ul>
<p><strong> </strong><strong>Comments (if any): &lt;&lt;&gt;&gt;</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selvamohan.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selvamohan.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selvamohan.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selvamohan.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selvamohan.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selvamohan.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selvamohan.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selvamohan.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selvamohan.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selvamohan.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selvamohan.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selvamohan.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selvamohan.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selvamohan.wordpress.com/131/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=131&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://selvamohan.wordpress.com/2009/10/20/feature-release-mail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/61bd476f53b6b42dc9c5c035fd0966f6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">selvamohan</media:title>
		</media:content>
	</item>
		<item>
		<title>What is QuickTest Automation Object Model (AOM)?</title>
		<link>http://selvamohan.wordpress.com/2009/10/20/what-is-quicktest-automation-object-model-aom/</link>
		<comments>http://selvamohan.wordpress.com/2009/10/20/what-is-quicktest-automation-object-model-aom/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 13:01:28 +0000</pubDate>
		<dc:creator>selvamohan</dc:creator>
				<category><![CDATA[Automation Testing]]></category>

		<guid isPermaLink="false">http://selvamohan.wordpress.com/?p=128</guid>
		<description><![CDATA[It&#8217;s a way to write scripts so as to automate your QuickTest operations. Some places where we can use AOM This is a small list of places (but not limited to) where we can use AOM. Thumb Rule &#8211; Use it at any place where you find yourself doing repetitive tasks while using QTP. AOM [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=128&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s a way to write scripts so as to automate your QuickTest operations.</p>
<p><strong><span style="color:#a52a2a;">Some places where we can use AOM</span></strong></p>
<p>This is a small list of places (but not limited to) where we can use AOM. Thumb Rule &#8211; Use it at any place where you find yourself doing repetitive tasks while using QTP.</p>
<ul>
<li>AOM can come handy when you have a large no of scripts to be uploaded to QC. A simple script can save you hours of manual work!</li>
<li>Use AOM to initialize QTP options and settings like add-ins etc.</li>
<li>You can use AOM to call QTP from other application: For ex: You can write a macro for calling QTP from excel.</li>
</ul>
<p><strong>Caution: </strong>AOM should be used outside of QTP and not within the script (during playback). Though there is no harm using it inside but some of the AOM statements might fail.</p>
<p><strong><span style="color:#a52a2a;"> How to write AOM scripts?</span></strong></p>
<p>You need to understand that the very root of QT AOM is Application Object. Every automation script begins with the creation of the QuickTest &#8220;Application&#8221; object. <em>Creating this object does not start QuickTest. It simply provides an object from which you can access all other objects, methods and properties of the QuickTest automation object model. You can create only one instance of the Application object. You do not need to recreate the QuickTest Application object even if you start and exit QuickTest several times during your script. </em>Once you have defined this object you can then successfully work and perform operations on other objects given in Quick Test Pro &gt; Documentation &gt; QuickTest Automation Reference.</p>
<p>For example: Let us connect to TD QC using AOM and open a script &#8220;qtp_demo&#8221;</p>
<p>Dim qt_obj &#8216;Define a Quick Test object<br />
qt_obj = CreateObject(&#8220;Quick Test.Application&#8221;) <span style="color:#008000;">&#8216; Instantiate a QT Object. It <strong>does not</strong> start QTP.</span></p>
<p>qt_obj.launch &#8216; Launch QT<br />
qt_obj.visible &#8216; Make QT visible</p>
<p>qt_obj.TDConnection.Connect &#8220;<a href="http://tdserver/tdbin">http://tdserver/tdbin&#8221;</a>, _ <span style="color:#008000;">&#8216;Referencing TDConnection Object</span><br />
&#8220;TEST_DOMAIN&#8221;, &#8220;TEST_Project&#8221;, &#8220;Ankur&#8221;, &#8220;Testing&#8221;, False <span style="color:#008000;">&#8216; Connect to Quality Center</span></p>
<p><span style="color:blue;">If</span> qt_obj.TDConnection.IsConnected <span style="color:blue;">Then </span><span style="color:#008000;">&#8216; If connection is successful</span><br />
    qt_obj.Open &#8220;[QualityCenter] Subject\tests\qtp_demo&#8221;, False <span style="color:#008000;">&#8216; Open the test</span><br />
<span style="color:blue;">Else</span><br />
    MsgBox &#8220;Cannot connect to Quality Center&#8221; <span style="color:#008000;">&#8216; If connection is not successful, display an error message.</span><br />
<span style="color:blue;">End If</span></p>
<p>To quickly generate an AOM script with the current QTP settings. Use the Properties tab of the Test Settings dialog box (File &gt; Settings) OR the General tab of the Options dialog box (Tools &gt; Options) OR the Object Identification dialog box (Tools &gt; Object Identification). Each contains a &#8220;Generate Script&#8221; button. Clicking this button generates a automation script file (.vbs) containing the current settings from the corresponding dialog box.</p>
<p>You can run the generated script as is to open QuickTest with the exact configuration of the QuickTest application that generated the script, or you can copy and paste selected lines from the generated files into your own automation script.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selvamohan.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selvamohan.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selvamohan.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selvamohan.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selvamohan.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selvamohan.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selvamohan.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selvamohan.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selvamohan.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selvamohan.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selvamohan.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selvamohan.wordpress.com/128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selvamohan.wordpress.com/128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selvamohan.wordpress.com/128/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=128&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://selvamohan.wordpress.com/2009/10/20/what-is-quicktest-automation-object-model-aom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/61bd476f53b6b42dc9c5c035fd0966f6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">selvamohan</media:title>
		</media:content>
	</item>
		<item>
		<title>Smoke Vs Sanity Testing</title>
		<link>http://selvamohan.wordpress.com/2009/10/18/smoke-vs-sanity-testing/</link>
		<comments>http://selvamohan.wordpress.com/2009/10/18/smoke-vs-sanity-testing/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 18:25:21 +0000</pubDate>
		<dc:creator>selvamohan</dc:creator>
				<category><![CDATA[Manual Testing]]></category>

		<guid isPermaLink="false">http://selvamohan.wordpress.com/?p=114</guid>
		<description><![CDATA[Smoke Sanity Smoke testing originated in the hardware testing practice of turning on a new piece of hardware for the first time and considering it a success if it does not catch fire and smoke.  In software industry, smoke testing is a shallow and wide approach whereby all areas of the application without getting into [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=114&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<table border="1" cellspacing="0" cellpadding="0" width="696">
<tbody>
<tr>
<td width="349">
<p align="center"><strong><em>Smoke</em></strong></p>
</td>
<td width="347">
<p align="center"><strong><em>Sanity</em></strong></p>
</td>
</tr>
<tr>
<td width="349">Smoke testing originated in the hardware testing practice of turning on a new piece of hardware for the first time and considering it a success if it does not catch fire and smoke.  In software industry, smoke testing is a shallow and wide approach whereby all areas of the application without getting into too deep, is tested. </td>
<td width="347">A sanity test is a narrow regression test that focuses on one or a few areas of functionality. Sanity testing is usually narrow and deep.</td>
</tr>
<tr>
<td width="349">A smoke test is scripted–either using a written set of tests or an automated test</td>
<td width="347">A sanity test is usually unscripted.</td>
</tr>
<tr>
<td width="349">A Smoke test is designed to touch every part of the application in a cursory way. It’s is shallow and wide.</td>
<td width="347">A Sanity test is used to determine a small section of the application is still working after a minor change.</td>
</tr>
<tr>
<td width="349">Smoke testing will be conducted to ensure whether the most crucial functions of a program work, but not bothering with finer details. (Such as build verification).</td>
<td width="347">Sanity testing is a cursory testing; it is performed whenever a cursory testing is sufficient to prove the application is functioning according to specifications. This level of testing is a subset of regression testing.</td>
</tr>
<tr>
<td width="349">Smoke testing is normal health check up to a build of an application before taking it to testing in depth.</td>
<td width="347">Sanity testing is to verify whether requirements are met or not, checking all features breadth-first. </td>
</tr>
</tbody>
</table>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selvamohan.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selvamohan.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selvamohan.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selvamohan.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selvamohan.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selvamohan.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selvamohan.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selvamohan.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selvamohan.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selvamohan.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selvamohan.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selvamohan.wordpress.com/114/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selvamohan.wordpress.com/114/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selvamohan.wordpress.com/114/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=114&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://selvamohan.wordpress.com/2009/10/18/smoke-vs-sanity-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/61bd476f53b6b42dc9c5c035fd0966f6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">selvamohan</media:title>
		</media:content>
	</item>
		<item>
		<title>Test Measuring Stuffs</title>
		<link>http://selvamohan.wordpress.com/2009/10/18/testing-measuring-stuffs/</link>
		<comments>http://selvamohan.wordpress.com/2009/10/18/testing-measuring-stuffs/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 17:54:57 +0000</pubDate>
		<dc:creator>selvamohan</dc:creator>
				<category><![CDATA[Estimations]]></category>

		<guid isPermaLink="false">http://selvamohan.wordpress.com/2009/10/18/testing-measuring-stuffs/</guid>
		<description><![CDATA[Defect Density (DD):   Ratio of the number of defects to program length (KLOC)   The Measure Defect-Density (DD) is besides the Measure LOC one of the most widely used measures in industry. The Measure DD is defined as: DD = Defects (K)LOC Where Defects are the number defects some time after release (normally six [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=108&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong><span style="text-decoration:underline;">Defect Density (DD):</span></strong></p>
<p><strong><span style="text-decoration:underline;"> </span></strong></p>
<p>Ratio of the number of defects to program length (KLOC)</p>
<p><strong><span style="text-decoration:underline;"> </span></strong></p>
<p>The Measure Defect-Density (DD) is besides the Measure LOC one of the most widely used measures in industry. The Measure DD is defined as:</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>DD =</td>
<td><span style="text-decoration:underline;">Defects</span><br />
(K)LOC</td>
</tr>
</tbody>
</table>
<p>Where Defects are the number defects some time after release (normally six months). We will not discuss here the problem of the application of this measure in practice. The next figure illustrates the effects which can occur when using the Measure DD.</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td colspan="3">
<p align="center"><strong>Version 1</strong></p>
</td>
<td colspan="3">
<p align="center"><strong>Version 2</strong></p>
</td>
<td>
<p align="center"><strong> </strong></p>
</td>
</tr>
<tr>
<td>
<p align="center"><strong>#</strong></p>
</td>
<td>
<p align="center"><strong>Defects</strong></p>
</td>
<td>
<p align="center"><strong>LOC</strong></p>
</td>
<td>
<p align="center"><strong>Defects/LOC</strong></p>
</td>
<td>
<p align="center"><strong>Defects</strong></p>
</td>
<td>
<p align="center"><strong>LOC</strong></p>
</td>
<td>
<p align="center"><strong>Defects/LOC</strong></p>
</td>
<td>
<p align="center"><strong>Relation</strong></p>
</td>
</tr>
<tr>
<td>
<p align="center">1</p>
</td>
<td>
<p align="center">12</p>
</td>
<td>
<p align="center">777</p>
</td>
<td>
<p align="center">0.01544</p>
</td>
<td>
<p align="center">3</p>
</td>
<td>
<p align="center">55</p>
</td>
<td>
<p align="center">0.05455</p>
</td>
<td>
<p align="center">&lt; </p>
</td>
</tr>
<tr>
<td>
<p align="center">2</p>
</td>
<td>
<p align="center">5</p>
</td>
<td>
<p align="center">110</p>
</td>
<td>
<p align="center">0.04545</p>
</td>
<td>
<p align="center">6</p>
</td>
<td>
<p align="center">110</p>
</td>
<td>
<p align="center">0.05455</p>
</td>
<td>
<p align="center">&lt; </p>
</td>
</tr>
<tr>
<td>
<p align="center">3</p>
</td>
<td>
<p align="center">2</p>
</td>
<td>
<p align="center">110</p>
</td>
<td>
<p align="center">0.01818</p>
</td>
<td>
<p align="center">3</p>
</td>
<td>
<p align="center">110</p>
</td>
<td>
<p align="center">0.02727</p>
</td>
<td>
<p align="center">&lt; </p>
</td>
</tr>
<tr>
<td>
<p align="center">4</p>
</td>
<td>
<p align="center">3</p>
</td>
<td>
<p align="center">110</p>
</td>
<td>
<p align="center">0.02727</p>
</td>
<td>
<p align="center">4</p>
</td>
<td>
<p align="center">110</p>
</td>
<td>
<p align="center">0.03636</p>
</td>
<td>
<p align="center">&lt; </p>
</td>
</tr>
<tr>
<td>
<p align="center">5</p>
</td>
<td>
<p align="center">6</p>
</td>
<td>
<p align="center">1000</p>
</td>
<td>
<p align="center">0.00600</p>
</td>
<td>
<p align="center">70</p>
</td>
<td>
<p align="center">10000</p>
</td>
<td>
<p align="center">0.00700</p>
</td>
<td>
<p align="center">&lt; </p>
</td>
</tr>
<tr>
<td>
<p align="center"><strong>Sum</strong></p>
</td>
<td>
<p align="center"><strong>28</strong></p>
</td>
<td>
<p align="center"><strong>2107</strong></p>
</td>
<td>
<p align="center"><strong>0.01329</strong></p>
</td>
<td>
<p align="center"><strong>86</strong></p>
</td>
<td>
<p align="center"><strong>10385</strong></p>
</td>
<td>
<p align="center"><strong>0.00828</strong></p>
</td>
<td>
<p align="center"><strong>&gt;</strong> </p>
</td>
</tr>
<tr>
<td colspan="8">
<p align="center"><strong>Table 1:</strong> Behavior of the Measure Defect-Density. Relation shows the relation of the Defect-Density of Version 1 to Version 2.</p>
</td>
</tr>
</tbody>
</table>
<p>Assume, we have two program Versions 1 and 2, and each of them consisting of five modules. For each Version we consider the Measure DD. We see that every module of Version 1 has a lower Defect-Density than every module of Version 2. Summing up the Defects and LOC of each version then we get the result in the line Sum. The result is surprising. Although the value of DD for each of the modules of Version 1 is less than the Values of DD for Version 2 (Relation), the value of DD of all modules of Version 1 is greater than DD of Version 2.</p>
<p>The problem with the measure Defect-Density (DD) occurs if the following relationship between Defects and (K) LOC is violated:</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>Defects =</td>
<td>a LOC**b, with a&gt;0, b&gt;1.</td>
</tr>
</tbody>
</table>
<p>If you do not have this relationship in your collection of programs, then the use of the Measure DD is questionable. You cannot predict the value of DD for the whole system by the DD values of the single programs.</p>
<p>Model:  Defect density is a measure of the total known defects divided by the size of the software entity being measured. </p>
<p align="center"><span style="text-decoration:underline;">Number of Known Defects</span></p>
<p align="center">Size</p>
<p>The Number of Known Defects is the count of total defects identified against a particular software entity, during a particular time period.  Examples include:</p>
<p>    Defect to date since the creation of module</p>
<p>    Defects found in a program during an inspection</p>
<p>    Defects to date since the shipment of a release to the customer</p>
<p>Size is a normalizer that allows comparisons between difference software entities (i.e., modules, releases, products).  Size is typically counted either in Lines of Code or Function Points.</p>
<p>Uses:  Defect Density is used to compare the relative number of defects in various software components.   This helps identify candidates for additional inspection or testing or for possible re-engineering or replacement.  Identifying defect prone components allows the concentration of limited resources into areas with the highest potential return on the investment.  Figure 1 illustrates a typical reporting format for Defect Density when it is being utilized in this manner.</p>
<p> <img class="aligncenter size-full wp-image-109" title="ScreenHunter_01 Oct. 18 10.56" src="http://selvamohan.files.wordpress.com/2009/10/screenhunter_01-oct-18-10-56.jpg?w=412&#038;h=310" alt="ScreenHunter_01 Oct. 18 10.56" width="412" height="310" /></p>
<p>Another use for Defect Density is to compare subsequent releases of a product to track the impact of defect reduction and quality improvement activities.  Normalizing by size allows releases of varying size to be compared.  Differences between products or product lines can also be compared in this manner.  Figure 2 illustrates a typical reporting format for Defect Density when it is being utilized in this manner. </p>
<p><img class="aligncenter size-full wp-image-110" title="ScreenHunter_02 Oct. 18 10.57" src="http://selvamohan.files.wordpress.com/2009/10/screenhunter_02-oct-18-10-57.jpg?w=412&#038;h=311" alt="ScreenHunter_02 Oct. 18 10.57" width="412" height="311" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selvamohan.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selvamohan.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selvamohan.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selvamohan.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selvamohan.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selvamohan.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selvamohan.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selvamohan.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selvamohan.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selvamohan.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selvamohan.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selvamohan.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selvamohan.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selvamohan.wordpress.com/108/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=108&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://selvamohan.wordpress.com/2009/10/18/testing-measuring-stuffs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/61bd476f53b6b42dc9c5c035fd0966f6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">selvamohan</media:title>
		</media:content>

		<media:content url="http://selvamohan.files.wordpress.com/2009/10/screenhunter_01-oct-18-10-56.jpg" medium="image">
			<media:title type="html">ScreenHunter_01 Oct. 18 10.56</media:title>
		</media:content>

		<media:content url="http://selvamohan.files.wordpress.com/2009/10/screenhunter_02-oct-18-10-57.jpg" medium="image">
			<media:title type="html">ScreenHunter_02 Oct. 18 10.57</media:title>
		</media:content>
	</item>
		<item>
		<title>Difference between Image and Bitmap Checkpoints in QTP:</title>
		<link>http://selvamohan.wordpress.com/2009/10/15/difference-between-image-and-bitmap-checkpoints-in-qtp/</link>
		<comments>http://selvamohan.wordpress.com/2009/10/15/difference-between-image-and-bitmap-checkpoints-in-qtp/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 16:52:37 +0000</pubDate>
		<dc:creator>selvamohan</dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://selvamohan.wordpress.com/?p=85</guid>
		<description><![CDATA[Difference between Image and Bitmap Checkpoints in QTP<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=85&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Difference between Image and Bitmap Checkpoints in QTP</p>
<p><img class="alignleft size-full wp-image-86" title="Pic" src="http://selvamohan.files.wordpress.com/2009/10/pic.jpg?w=499&#038;h=373" alt="Pic" width="499" height="373" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selvamohan.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selvamohan.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selvamohan.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selvamohan.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selvamohan.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selvamohan.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selvamohan.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selvamohan.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selvamohan.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selvamohan.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selvamohan.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selvamohan.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selvamohan.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selvamohan.wordpress.com/85/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=85&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://selvamohan.wordpress.com/2009/10/15/difference-between-image-and-bitmap-checkpoints-in-qtp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/61bd476f53b6b42dc9c5c035fd0966f6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">selvamohan</media:title>
		</media:content>

		<media:content url="http://selvamohan.files.wordpress.com/2009/10/pic.jpg" medium="image">
			<media:title type="html">Pic</media:title>
		</media:content>
	</item>
		<item>
		<title>Function to send mail in QTP</title>
		<link>http://selvamohan.wordpress.com/2009/10/15/function-to-send-mail-in-qtp/</link>
		<comments>http://selvamohan.wordpress.com/2009/10/15/function-to-send-mail-in-qtp/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 16:45:35 +0000</pubDate>
		<dc:creator>selvamohan</dc:creator>
				<category><![CDATA[QTP Code]]></category>

		<guid isPermaLink="false">http://selvamohan.wordpress.com/?p=82</guid>
		<description><![CDATA[Function SendMail(SendTo, Subject, Body, Attachment)     Set ol=CreateObject(&#8220;Outlook.Application&#8221;)                 Set Mail=ol.CreateItem(0)                 Mail.to=SendTo                 Mail.Subject=Subject                 Mail.Body=Body  If (Attachment &#60;&#62; &#8220;&#8221;) Then       Mail.Attachments.Add(Attachment)  End If                 Mail.Send                 ol.Quit                 Set Mail = Nothing                 Set ol = Nothing                 SendMail=True End Function<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=82&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="color:blue;">Function</span> SendMail(SendTo, Subject, Body, Attachment)<br />
    <span style="color:blue;">Set</span> ol=CreateObject(&#8220;Outlook.Application&#8221;)<br />
                <span style="color:blue;">Set</span> Mail=ol.CreateItem(0)<br />
                Mail.to=SendTo<br />
                Mail.Subject=Subject<br />
                Mail.Body=Body<br />
 <span style="color:blue;">If</span> (Attachment &lt;&gt; &#8220;&#8221;) <span style="color:blue;">Then</span><br />
      Mail.Attachments.Add(Attachment)<br />
 <span style="color:blue;">End If</span><br />
                Mail.Send<br />
                ol.Quit<br />
                <span style="color:blue;">Set</span> Mail = Nothing<br />
                <span style="color:blue;">Set</span> ol = Nothing<br />
                SendMail=True<br />
<span style="color:blue;">End Function</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/selvamohan.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/selvamohan.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/selvamohan.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/selvamohan.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/selvamohan.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/selvamohan.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/selvamohan.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/selvamohan.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/selvamohan.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/selvamohan.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/selvamohan.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/selvamohan.wordpress.com/82/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/selvamohan.wordpress.com/82/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/selvamohan.wordpress.com/82/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=selvamohan.wordpress.com&amp;blog=6977175&amp;post=82&amp;subd=selvamohan&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://selvamohan.wordpress.com/2009/10/15/function-to-send-mail-in-qtp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/61bd476f53b6b42dc9c5c035fd0966f6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">selvamohan</media:title>
		</media:content>
	</item>
	</channel>
</rss>
