<?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>Platformability</title>
	<atom:link href="http://blog.caplin.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.caplin.com</link>
	<description>Single Dealer Platforms, Industry Expertise</description>
	<lastBuildDate>Thu, 17 May 2012 15:14:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Automating your VMware farm with PowerCLI</title>
		<link>http://blog.caplin.com/2012/05/17/automating-your-vmware-farm-with-powercli/</link>
		<comments>http://blog.caplin.com/2012/05/17/automating-your-vmware-farm-with-powercli/#comments</comments>
		<pubDate>Thu, 17 May 2012 15:08:15 +0000</pubDate>
		<dc:creator>Edmund Dipple</dc:creator>
				<category><![CDATA[Build]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[powercli]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[vm]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=9117</guid>
		<description><![CDATA[At Caplin, we have 7 ESX 4.0 data stores, filled to the brim with Linux and Windows VMs. We use these VMs to test and deploy artifacts from many different projects, all under the management of a Thoughtworks GO server. It&#8217;s vital for our continuous integration strategy to work, that...]]></description>
			<content:encoded><![CDATA[<p><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvcG93ZXJjbGkucG5n"><img class=" wp-image-9135 alignright" title="PowerCLI logo" src="http://blog.caplin.com/wp-content/uploads/powercli.png" alt="powercli logo" width="190" height="189" /></a>At Caplin, we have 7 ESX 4.0 data stores, filled to the brim with Linux and Windows VMs. We use these VMs to test and deploy artifacts from many different projects, all under the management of a Thoughtworks GO server. It&#8217;s vital for our continuous integration strategy to work, that there be lots of build agents available to give quick feedback about failing builds.</p>
<p>Thus far, automating the tests and deployments that run on the VMs has been relatively simple, using GO agent services as proxies to carry out scripted commands on whatever machine that you want the build to run on. The problem with automating these tasks, is the constant battle with the state of the build environment.</p>
<h2>Saving the environment!</h2>
<p>At Caplin, we use VMware vSphere to manage the VM farm. This gives us the option to snapshot each machine to a known state. In theory, an automated build should pass, when it is running on a clean environment. However, browsers cache information, Maven builds cache artifacts, files can get deleted, people can add or remove programs – very quickly, a VM can become a complete mess.</p>
<p>Via the GUI, it&#8217;s very simple to click “Revert to snapshot”. However, this is hardly convenient to do on a regular basis, especially when you have 50 VMs you want to revert at a time.</p>
<h2>Rolling out changes</h2>
<p>Another headache is upgrading all of your VMs. Should you wish to update Java across a group of VMs, you have to;</p>
<p style="padding-left: 30px;">1. Revert every VM to snapshot</p>
<p style="padding-left: 30px;">2. Either manually install Java yourself, or run a loop over SSH</p>
<p style="padding-left: 30px;">3. Delete every snapshot</p>
<p style="padding-left: 30px;">4. Create new snapshots</p>
<p>Doing this manually is a colossal job that can take several hours, and is subject to human error.</p>
<p>Another option is to edit the template that the VM is based on, delete all the VMs and redeploy them. Again, a mammoth task to repeat through the GUI.</p>
<h2>Let the computer do the work</h2>
<p>Raising our concerns with Vmware about the challenges we were facing, they suggested that we script our tasks using <strong>PowerCLI</strong>. PowerCLI is a snap-in that lies on top of Windows Powershell. It&#8217;s a well documented set of cmdlets that can do anything that vSphere manager can do, and more besides. It&#8217;s 100% script based, which makes it perfect for automation.<br />
I had never used Powershell before, so I was sent on a 2 day course in London with a VMware specialist, who could teach me to effectively use PowerCLI.</p>
<h2>Back to school</h2>
<p>The course I went on was titled <em>“VMware vSphere: Automation with vSphere PowerCLI”</em>. When I entered the classroom, I was very surprised to find that I was the only person taking part that week. It was not advertised as a 1-on-1 tutoring arrangement, but due to my lack of Powershell experience (I&#8217;m a bash man usually), it was a very convenient arrangement.</p>
<p>I picked up the basics of Powershell very quickly by following a training handbook that gave you tasks to follow. I found it to be a very effective method of learning &#8211; the trainer briefly explained the concepts of each section, answering my varied questions about the tasks, and how PowerCLI could be used at Caplin.</p>
<p>The first day mainly covered the creation of virtual hardware (datastores and virtual network interfaces), I wasn&#8217;t quite as interested in this aspect of PowerCLI, but it was a great way to get to grips with the Powershell syntax.</p>
<p>The second day was when I made the most notes, it covered reverting a VM (or a group of VMs from a CSV file) to a specified snapshot, deploying VMs, checking to see if VM hardware was consistent, running remote scripts on VMs via VMware tools and producing reports about the VMs.</p>
<p>I recieved my certificate for completing the course material, and left the classroom with a confident grasp of Powershell and PowerCLI.</p>
<p>Sadly, the course that I went on no longer exists (I was the last one to take the course in London!), however they are planning on starting a new course that uses an updated version of ESX. I was highly impressed with the VMware course material and the professionalism of the instructor. I would happily recommend them to anyone that is interested in learning.</p>
<h2>The aftermath</h2>
<p>Currently we have a pipeline in GO dedicated to reverting a group of VMs to snapshot every Saturday morning, this has increased the stability of the build. A more ambitious task that I&#8217;ve undertaken is to automatically revert a specific VM when a build pipeline fails in Jenkins. I have published the solution online &#8211; simply google &#8220;vmware revert jenkins slave to a snapshot&#8221; and it should be one of the top results.</p>
<p>PowerCLI is an invaluable tool for anyone that is managing more than 1 VM at a time, I find it hard to remember how we managed without it.</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=9117" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2012/05/17/automating-your-vmware-farm-with-powercli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SCALING AGILE – THE WORLD IS ALL THAT IS THE CASE</title>
		<link>http://blog.caplin.com/2012/05/15/scaling-agile-the-world-is-all-that-is-the-case/</link>
		<comments>http://blog.caplin.com/2012/05/15/scaling-agile-the-world-is-all-that-is-the-case/#comments</comments>
		<pubDate>Tue, 15 May 2012 14:56:25 +0000</pubDate>
		<dc:creator>Eric Plue</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=9034</guid>
		<description><![CDATA[THE WORLD IS ALL THAT IS THE CASE There&#8217;s a flurry of activity when projects kick off, resources have to be marshalled and often teams need to be informed of a good deal of information around the thinking behind the work at hand.  As that ship leaves port upon its...]]></description>
			<content:encoded><![CDATA[<p><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9UcmFjdGF0dXNfTG9naWNvLVBoaWxvc29waGljdXM=" 0="target="_blank"">THE WORLD IS ALL THAT IS THE CASE</a></p>
<p>There&#8217;s a flurry of activity when projects kick off, resources have to be marshalled and often teams need to be informed of a good deal of information around the thinking behind the work at hand.  As <img class="alignright" title="Louie Wittgenstein" src="http://blog.caplin.com/wp-content/uploads/louie-wittgenstein1.jpg" alt="Louie Wittgenstein" width="260" height="196" hspace="10" vspace="10" />that ship leaves port upon its venture for treasure (<a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3lvdXJkYWlseS5ibG9nc3BvdC5jby51ay8yMDA3LzAyL2Jlbi1mb2xkcy1waXJhY3ktbGFiZWwtZnVuLmh0bWw=">aaargh</a>!), point to point conversations are difficult to manage across a sizable group.</p>
<p>For companies on the move, it raises the ever present question of <strong>how to scale agile practices</strong>.  For smaller teams in the same room or space, these conversations often go on in the open.  But as you delegate tasks and a set of leads begins to occupy their own time managing tasks and activities others don&#8217;t have regular exposure to, you can start to run into problems.</p>
<p>The start of a project is significant.  It&#8217;s where plans meet action, where the rubber meets the road.  You may notice one symptom of project failure when problems arise, decisions are made and after a few cycles the original aims and expectations get modified or lost.  Team members regardless of role are left wondering, &#8220;Why are we doing this?&#8221;</p>
<p>Fail to establish a clear set of facts about the state of affairs at the beginning of a project and you can kiss many things good bye.</p>
<h2>What things?</h2>
<p>Accountability, the ability to gauge plan vs reality, a distinction between assumptions and truth, feedback cycles that would support continual improvement across various roles and the ability for an organisation to improve its effectiveness in managing its own investments in a development effort.</p>
<p>As <strong>agile organizations scale</strong>, groups of people can often fall prey to the same pitfalls that the basic agile techniques work to avoid.  Techniques that were effective in small groups lose their impact as people bring old but trusted behaviours to new situations.  For example, I&#8217;ve not been a fan of scrum of scrums and have found them to be less effective as the mental maps—the views of the state of affairs—across participants are not aligned.  I’ve witnessed numerous cases where a group of people can earnestly agree around a table and then go off to work independently at cross purposes.</p>
<h2>What to do about it</h2>
<p><strong>Establish a core set of facts.</strong> Agree on the state of affairs at any one time.  Start by asking the basic questions and make sure you can construct a view of the basic answers.  For example, each PM has their own check list of essential questions they ask to gauge the viability of a project.</p>
<p><strong>In the early phases of project conception, these might entail questions like:</strong></p>
<li>Do we know why we are doing something?</li>
<li>Is there a singular aim or is our perceived benefit multi-faceted?</li>
<h4></h4>
<p></p>
<p><strong>At the lead up to kickoff these might include:</strong></p>
<li>Are skills of the team matched to the task at hand?</li>
<li>Have we been realistic about capacity (holidays, training, etc)?</li>
<li>Are teams ready to sign up to and deliver upon commitments?</li>
<li>What are the anticipated blockers?</li>
<h4></h4>
<p></p>
<p><strong>Questions Common Across Stakeholders</strong></p>
<p>And, regardless of role, there are questions common across stakeholders—for anyone who has an interest, stake or dependency on the outputs:</p>
<li>How big is the pile of work? (the backlog)</li>
<li>How fast can a team move through it? (velocity projections)</li>
<li>What chunks will be addressed first? (milestones or release plan)</li>
<li>When do we think it will deliver?</li>
<li>When will the outputs be used and begin to prove value?</li>
<h2>Our Approach</h2>
<p>At Caplin, we leverage the concept of incremental planning. Our approach is adaptive and solves the issue at hand without a heavy amount of process.  We&#8217;ve just gone through the kick-off of a large program composed of many different projects. To manage this, we&#8217;ve created a kickoff dashboard where an initial plan can be viewed against a revised plan as we learn and discover.</p>
<p><strong>How did we build <img class="alignright" title="Fred Neetcha" src="http://blog.caplin.com/wp-content/uploads/fred-nietzsche1.jpg" alt="Fred Neetcha" width="220" height="240" hspace="10" vspace="15" />it?</strong>  We started by asking the basic questions to check for ourselves whether we had the answers.  It was an essential first step where, the more we gathered this basic info, the more productive our discussions as a group became.</p>
<p><strong>After you have established this agreed upon set of facts, what do you do next?  Argue! </strong></p>
<p>Have a vibrant exchange of ideas that evaluates alternatives and works to select the best one.  Remember to do this as a group and to speak to an agreed upon established set of facts. When these facts and agreements are not present often it can seem like conversations go one with no resolution and you feel like you are trapped within the <a  0="title="Nietzsche"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GcmllZHJpY2hfTmlldHpzY2hl">eternal recurrence of the same</a>.  The next time you feel this happening sit back and take a moment to ask yourself how much of the discussion is conflict over the state of affairs and what portion is a discussion of what to do about it.</p>
<h2>Conclusion</h2>
<p>Many agile practices are about having the right conversation at the right time and at the appropriate level of detail.  Many techniques are simple.  When your organisation scales and people are relocated out of earshot to what used to be a group conversation, the next simple step you can take is to have that quick conversation to agree on the state of affairs. The key is to remember to ensure that there is this preliminary agreement across your group.</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=9034" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2012/05/15/scaling-agile-the-world-is-all-that-is-the-case/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualizing Option Prices</title>
		<link>http://blog.caplin.com/2012/05/10/visualizing-option-prices/</link>
		<comments>http://blog.caplin.com/2012/05/10/visualizing-option-prices/#comments</comments>
		<pubDate>Thu, 10 May 2012 08:39:27 +0000</pubDate>
		<dc:creator>Wolfram Hempel</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[BlackScholes]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Options]]></category>
		<category><![CDATA[WebGl]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=8953</guid>
		<description><![CDATA[The easiest way to make sense of a lot numbers is to turn them into a picture. This doesn’t come as much of a surprise: While it takes a lot of conscious effort to see trends, movements and tendencies within a large set of figures we find it rather easy...]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript">
if( !Function.prototype.bind )
{
Function.prototype.bind = function (bind) {
    var self = this;
    return function () {
        var args = Array.prototype.slice.call(arguments);
        return self.apply(bind || null, args);
    };
};
};
</script><br />
<script type="text/javascript" src="http://blog.caplin.com/wp-content/uploads/Packed1.js"></script></p>
<link type="text/css" media="screen" href="http://blog.caplin.com/wp-content/uploads/Packed.css" rel="stylesheet" />
<p>
The easiest way to make sense of a lot numbers is to turn them into a picture. This doesn’t come as much of a surprise: While it takes a lot of conscious effort to see trends, movements and tendencies within a large set of figures we find it rather easy to deduce the same from a visual relationship.
</p>
<p>
Consequently, financial professionals find themselves surrounded by all kinds of charts and diagrams every day. Line Charts to visualize performance, candlestick charts to show the relationship between intraday movement and open / close rates, heat maps to visualize volume and so on…
</p>
<div id="container_surface" style="height: 300px;"></div>
<p>
Fortunately, Web Browsers provide a wealth of functionality to render such charts. SVG and Internet Explorer‘s early equivalent VML have been providing vector based graphics for ages, HTML 5’s canvas element offers a very rich pixel drawing API and even CSS can be used to draw less complex visualisations like bar charts and maps.
</p>
<p>
That’s all good and well as long as we are dealing with a one to one relationship between two values. One stock, one price, at one time. But how can one handle more complex relationships, say, an option’s price.
</p>
<div id="sfc_controls"></div>
<p>
An European option‘s price depends on at least two factors: The price of its underlying asset and the time that’s left for the option to mature. In addition there are other static factors to be considered like the historic volatility or the risk free rate. Elaborate mathematical models like the Black-Scholes formula have been developed to price these options.
</p>
<div id="table_container"></div>
<p><div id="colormap_1_container" style="margin: 0 10px 10px 0; float: left;"></div>
<p>Visualising these prices however was up to now restricted to highly specialised software products. But with the advent of HTML 5 and more powerful web browsers we now have the tools at hand to calculate and visualize such models directly on the client side. WebGL allows the browser to directly access the computer’s hardware and to utilize its unrestricted processing power.</p>
<p><div id="colormap_2_container" style="margin: 0 0 10px 10px; float: right;"></div>
<p>But with these new possibilities also come new challenges for both developers and designers. Utilising the 3D space can easily become a very confusing experience for the end-user. And while frontend-engineers need to familiarize themselves with an as yet largely unknown field it is especially up to the UX departments to find beneficial and sensible solutions for this wealth of possibilities.</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=8953" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2012/05/10/visualizing-option-prices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why 100% Code Coverage is not enough</title>
		<link>http://blog.caplin.com/2012/05/08/why-100-code-coverage-is-not-enough/</link>
		<comments>http://blog.caplin.com/2012/05/08/why-100-code-coverage-is-not-enough/#comments</comments>
		<pubDate>Tue, 08 May 2012 10:39:32 +0000</pubDate>
		<dc:creator>Thomas Mantsch</dc:creator>
				<category><![CDATA[QA]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=8900</guid>
		<description><![CDATA[Introduction When it comes to software testing and code quality it is not always clear what the Test Coverage is &#8211; respectively what areas of the application need more attention regarding testing. Questions like: - Do we have enough tests? - Do the tests cover enough paths of the code?...]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>When it comes to software testing and code quality it is not always clear what the Test Coverage is &#8211; respectively what areas of the application need more attention regarding testing.</p>
<p>Questions like:<br />
- Do we have enough tests?<br />
- Do the tests cover enough paths of the code?<br />
are quite common but tricky to answer.</p>
<p>Measuring the Code Coverage seems to be the perfect solution. But to be honest &#8211; I am not absolutely convinced and do not trust these numbers alone.</p>
<p>If you write your Tests just to meet the coverage target, you might miss some critical tests around edge cases and unexpected exceptions which will lead to a wrong behaviour of the application under test.</p>
<p>Martin Fowler&#8217;s blog about  <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL21hcnRpbmZvd2xlci5jb20vYmxpa2kvVGVzdENvdmVyYWdlLmh0bWw=">Test Coverage</a> gives a good theoretical overview about this topic.</p>
<p>I would like to go into more detail by showing a code example pointing out that 100% Code Coverage of a class is not enough and should not stop you from using your mind and experience to continue writing some more tests. But at the same time if you do not have any ways to track the test coverage, it could be equally dangerous too.</p>
<h2>Code example</h2>
<p>The TestCalculator class below represents a simple add method:</p>
<p><code><br />
public class TestCalculator {<br />
public Double add(Double a, Double b) {<br />
return a + b;<br />
}<br />
}<br />
</code></p>
<p>Let&#8217;s have a look at a simple JUnit test for this method.</p>
<p><code><br />
@Test<br />
public void testAdd() {<br />
Double a = new Double(1);<br />
Double b = new Double(2);<br />
Double c = new Double(3);</code></p>
<p>assertEquals(c, testCalculator.add(a, b));<br />
}</p>
<p>When we run the test in Eclipse by using the EclEmme Code Coverage Plugin we will get 100% Line-Coverage for this class.</p>
<p><img src="http://blog.caplin.com/wp-content/uploads/CoverageCover.jpg" alt="Code Coverage Example" /></p>
<p>That sounds perfect &#8211; doesn&#8217;t it?!</p>
<p>Well, as a curious tester I might want to add another test. I am interested how the application behaves when one of the parameters is null.</p>
<p><code><br />
@Test<br />
public void testAddNullPointerException() {<br />
Double a = new Double(1);<br />
Double b = null;</code></p>
<p>Double c = new Double(3);<br />
assertEquals(c, testCalculator.add(a, b));<br />
}</p>
<p>There we go, the test fails with a NullPointerException although we have 100% Code Coverage.</p>
<h2>Conclusion</h2>
<p>As a conclusion I would like to encourage everyone involved in development and testing activities to think a bit more out of the box. I do not say that you should not use any of the Code Coverage tools. But I recommend not to rely on the numbers only.</p>
<p>It is also worth thinking about the interfaces and how components interact with each other (Integration Testing). Maybe the component calling the method on the TestCalculator validates the parameters before using them or there is a contract (Test by contract) that defines which component is responsible for the validation. Branch and Path Coverage of the code are also of interest to get more information about different scenarios and data values. However this will be discussed in a separate blog post.</p>
<p>So just relying on numbers without knowing what is going on behind the curtain is not an indication of good quality reporting. High code coverage is not an indication of good quality but low coverage is an indication that something is wrong, untested and worth investigating.</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=8900" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2012/05/08/why-100-code-coverage-is-not-enough/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Performance Testing (part 2) &#8211; Tools, Environments, Observer effects</title>
		<link>http://blog.caplin.com/2012/05/01/performance-testing-part-2-tools-environments-observer-effects/</link>
		<comments>http://blog.caplin.com/2012/05/01/performance-testing-part-2-tools-environments-observer-effects/#comments</comments>
		<pubDate>Tue, 01 May 2012 09:31:14 +0000</pubDate>
		<dc:creator>Mike Salsbury</dc:creator>
				<category><![CDATA[QA]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=8803</guid>
		<description><![CDATA[Continuing from part one,  this performance testing blog will concentrate on how to test the System Under Test having already decided what needs to be tested and at what level which was covered in part one. Will you be using third party tools or writing your own framework, or just...]]></description>
			<content:encoded><![CDATA[<p>Continuing from part one,  this performance testing blog will concentrate on how to test the System Under<a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvV2hpdGVGZXJyYXJpLmpwZw=="><img class="alignright size-medium wp-image-8862" title="WhiteFerrari" src="http://blog.caplin.com/wp-content/uploads/WhiteFerrari-300x199.jpg" alt="White Ferrari" width="300" height="199" /></a> Test having already decided what needs to be tested and at what level which was covered in part one.</p>
<p><em>Will you be using third party tools or writing your own framework, or just writing to log files and then analysing them?</em></p>
<p>What are you going to use to do your testing and in particular will the performance monitoring be separate to the application or embedded within it. Even if you use third party tools it may still be necessary to embed links or functions within your code. Alternatively it may be possible to produce all the data you need to analyse your application using external tools. Some tools/alternatives to consider are:</p>
<ul>
<li> JMeter</li>
<li> LoadRunner</li>
<li> Dynatrace</li>
<li> Write your own code/framework – how?</li>
<li> Writing a simple log method, e.g. in java that can be called from anywhere (so a public static method) can work very well.</li>
</ul>
<p><em>Environments</em></p>
<p>You also need to consider the production and testing environments.  Do they need to match exactly, or is closely enough, or does it not matter?  Do both the server and client(s) need to match?  And OS?  Browser version(s)? Network?  Other environmental variables?</p>
<p>What server will be used to host the application. Will this be a VM or a physical machine? Does this match that which will be used in deployment. Is testing on a developers local machine a reasonable test, or is a separate custom built performance testing machine required. Even if a separate performance testing machine is available and used does this replicate the same constraints as the deployment hosting environment.</p>
<p><em>Observer effects</em></p>
<p><em></em>An important issue to consider is: How much does adding performance testing monitoring degrade the performance of the application under test? Is this another example of the more you observe the less you (can) know? Also even checking server logs can be inconsistent or provide ambiguous results. Sometimes the server has to be shutdown in order to flush the logs to file so that you can read them. On Windows machines when looking at the log file could lock the file and mean it can’t be written to. And also if you already have the file open, and then open it again it may show you the already open version rather than the updated version.</p>
<p><em>Acceptance Criteria</em></p>
<p>One area that has particularly not been covered is the definition of Acceptance Criteria for performance tests.  Like any other tests we need to define what &#8216;done&#8217; is, and in broad terms for performance testing this will be when the System Under Test is appropriately responsive.  In practice this is likely to be converted into specific timings for specific functions.  Exactly how long and which functions will necessarily be a part of the particular System Under Test.  Naturally defining these criteria is left as an exercise for the reader.</p>
<p><em>More to do</em></p>
<p>I am sure there are many more factors that could influence performance in particular circumstances, and this list is by no means meant to be exhaustive.  Hopefully it will help to suggest areas that need to be considered when thinking about performance testing, and help to stimulate ideas for different ways of approaching performance testing.  There is also the question of how to incorporate this into regression testing for version 2.0 and onwards, once a System Under Test has been performance tested?</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=8803" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2012/05/01/performance-testing-part-2-tools-environments-observer-effects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Money Phone</title>
		<link>http://blog.caplin.com/2012/04/27/money-phone/</link>
		<comments>http://blog.caplin.com/2012/04/27/money-phone/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 14:57:58 +0000</pubDate>
		<dc:creator>Arthur Smit</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[payments]]></category>
		<category><![CDATA[retail]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=8870</guid>
		<description><![CDATA[Having gone to the &#8216;Internetworld 2012&#8242; event, there seems to be a clear emerging trend for mobiles, which should come as no surprise. We are all going to be using our phones to pay for things from now on. Phoney Barclaycard has a rather strange solution to this that they...]]></description>
			<content:encoded><![CDATA[<p>Having gone to the &#8216;Internetworld 2012&#8242; event, there seems to be a clear emerging trend for mobiles, which should come as no surprise. We are all going to be using our phones to pay for things from now on.</p>
<p><img class="aligncenter" style="border-style: initial; border-color: initial; display: block; margin-left: auto; margin-right: auto; border-width: 0px;" title="Barclaycard's Pay Tag" src="http://cdn.electricpig.com.s3-external-3.amazonaws.com/wp-content/uploads/2012/04/paytag2.jpg" alt="" width="464" height="290" /></p>
<h2>Phoney</h2>
<p>Barclaycard has a rather strange solution to this that they have just announced, a &#8216;Pay Tag&#8217;, basically a sticker that you can &#8220;decorate&#8221; your phone with and turn it in to a kind of oyster card to pay for items £15 or less, no PIN, No security checks. They have teamed up with Orange and use the phone for authentication, using all the data for your contract to prove your identity, making it far more fraud-proof apparently.  Why you would want to stick this on your phone still seems a bit unclear, why not stick it to your wallet or your hand&#8230; actually you can now get chips as wearable temporary tattoos &#8230;no really <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=c2VlJTIwZm9yJTIweW91cnNlbGY=" 0="target="_blank"">see for yourself.</a></p>
<p style="text-align: center;"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2lvOS5jb20vNTgzMDA3MS9icmVha3Rocm91Z2gtZWxlY3Ryb25pYy1jaXJjdWl0cy10aGF0LWFyZS1pbnRlZ3JhdGVkLWludG8teW91ci1za2lu"><img class="aligncenter" src="http://cache.io9.com/assets/images/8/2011/08/xlarge_skintronicstop.jpg" alt="" width="448" height="252" /></a></p>
<h2 style="text-align: left;">Some Stats</h2>
<p style="text-align: left;">These statistics come from a recent survey &#8216;Mobile Future Forward&#8217; <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5zbGlkZXNoYXJlLm5ldC9zbGlkZXNob3cvZW1iZWRfY29kZS8xMDc3MTE3Mg==" 0="target="_blank"">slideshare</a>.  One of the things discussed at the Internetworld 2012 event is how comfortable we have all become purchasing things from our phones. With the introduction of 1 click purchases as Apple does with AppStore and iTunes, and Amazon&#8217;s app for iPhone and Android. This has increased our trust in the ability to use &#8216;devices&#8217; to carry out various financial transactions.</p>
<p style="text-align: center;"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAxMlN1cnZleTE0LnBuZw=="><img class="aligncenter  wp-image-8893" title="2012Survey14" src="http://blog.caplin.com/wp-content/uploads/2012Survey14.png" alt="" width="480" height="324" /></a></p>
<p style="text-align: center;"><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvMjAxMlN1cnZleTUucG5n"><img class="aligncenter  wp-image-8892" title="2012Survey5" src="http://blog.caplin.com/wp-content/uploads/2012Survey5.png" alt="" width="480" height="347" /></a></p>
<h2>What about Risks?</h2>
<p>There is an obvious risk with the responsibility that retailers will carry. What will they do with all this information that is gathered? Most likely they will be using it to try to predict your spending patterns/habits to suggest you new products. This is an increasing trend we see across all eStores &#8220;recommended for you&#8221; and &#8220;Others who bought this also bought that&#8221;. Whilst initially appearing to be helpful we don&#8217;t want to end up having less choices available to us by creating a snowball effect because we always stick to the same old things due to the fact that we have been suggested to.</p>
<p><iframe width="500" height="281" src="http://www.youtube.com/embed/ITjsb22-EwQ?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=8870" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2012/04/27/money-phone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Performance Testing (part 1) &#8211; what are the options?</title>
		<link>http://blog.caplin.com/2012/04/20/performance-testing-part-1-what-are-the-options/</link>
		<comments>http://blog.caplin.com/2012/04/20/performance-testing-part-1-what-are-the-options/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 15:12:26 +0000</pubDate>
		<dc:creator>Mike Salsbury</dc:creator>
				<category><![CDATA[QA]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=8778</guid>
		<description><![CDATA[There are many paths which could be followed with performance testing, and this post will attempt to break these down to provide a number of points that should be considered when setting up performance testing for your application. In particular we will focus on web applications, but similar principles could...]]></description>
			<content:encoded><![CDATA[<p><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2Jsb2cuY2FwbGluLmNvbS93cC1jb250ZW50L3VwbG9hZHMvZmlhdDUwMDEuanBn"><img class="alignright size-medium wp-image-8858" title="fiat500" src="http://blog.caplin.com/wp-content/uploads/fiat5001-300x220.jpg" alt="" width="300" height="220" /></a>There are many paths which could be followed with performance testing, and this post will attempt to break these down to provide a number of points that should be considered when setting up performance testing for your application. In particular we will focus on web applications, but similar principles could be applied to other applications.<br />
<em></em></p>
<h2>What type of performance testing are you doing?</h2>
<p>In general performance testing is a measure of responsiveness. However, it can also be a measure of responsiveness over a certain period of time. In a sense then there are two types of responsiveness that performance testing is interested in:</p>
<p><strong>  1. How long:</strong>  That is how long it takes for a particular page to load, or a request to be sent, or a function to return. Or an overall Use Case to be completed as a workflow through a website. Or a client call to a backend to return.</p>
<p><strong>  2. Memory profiling:</strong>  In a sense this could be ‘how long’ after ‘how long’? I.e. We know doing an action once or twice is responsive from the type of testing we do with ‘how long’, but we also need to know if this stays the same over time. Profiling memory over time can help to indicate if there is a problem now, and/or one building for the future.</p>
<div></div>
<div></div>
<p>N.B. You may also be thinking that adding more users should also be considered when measuring performance. Yes it should. But strictly speaking this would be Load Testing rather than Performance testing. It is likely that a lot of the same techniques and tests could be used. The line between the two is not always going to be clear.</p>
<p>We may know that doing something once is responsive, but what if we do it 100 times, or 1000. However, this also requires some user profiling, or use case analysis. If the function will only be used once or twice a day there is little value in proving that it is still responsive after 1,000 repeats. However, if the function will run many times a minute or even second then it needs to be seen to respond within this time, and be seen to remain responsive over time.</p>
<h2>What level of Performance are you interested in?</h2>
<p><em></em>-     Application level</p>
<p>-     Component level</p>
<p>-     Unit level</p>
<p>In general performance testing often is not done until you get to the application level. At which point complex causes and fixes can be suggested if the application is found not to be responsive. Instead like development in general it is better to test units first, then the components made up of those units, and then the application that is built from those components.</p>
<p>Which presents another issue.  How  to know from the overall application level performance requirements what each unit&#8217;s performance requirement should be?</p>
<p>Nonetheless having unit level focused performance tests will make it easier to ‘zoom in’ on an unresponsive area of the application during later application level testing if necessary.  Assuming that this wasn’t done then you need to make the application level testing focus on particular components at least at one time. Thus providing another way of ‘zooming in’ on a specific area of the application. This could be done by writing separate tests, or by ensuring that it is clear in log files where one function ends and another begins. This leads us on to how you will do the testing.</p>
<p>In part 2 we will consider tools, environments and Observer effects for performance testing.</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=8778" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2012/04/20/performance-testing-part-1-what-are-the-options/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pairwise Testing</title>
		<link>http://blog.caplin.com/2012/03/30/pairwise-testing/</link>
		<comments>http://blog.caplin.com/2012/03/30/pairwise-testing/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 09:52:12 +0000</pubDate>
		<dc:creator>Thomas Mantsch</dc:creator>
				<category><![CDATA[QA]]></category>

		<guid isPermaLink="false">http://blog.caplin.com/?p=8756</guid>
		<description><![CDATA[Recently we had a discussion about testing all possible combinations within a FX Trade Ticket. To give a context, a trade ticket consists of several parameters like: - Trade Type (SPOT, FORWARD, SWAP, TIMEOPTION) - Currency Pair (BASE, TERM) - Direction (BUY, SELL) If we combine all possibilities we will...]]></description>
			<content:encoded><![CDATA[<p>Recently we had a discussion about testing all possible combinations within a FX Trade Ticket.</p>
<p>To give a context, a trade ticket consists of several parameters like:<br />
- Trade Type (SPOT, FORWARD, SWAP, TIMEOPTION)<br />
- Currency Pair (BASE, TERM)<br />
- Direction (BUY, SELL)</p>
<p>If we combine all possibilities we will have to execute 16 tests</p>
<p><strong> TYPE CURRENCY DIRECTION</strong><br />
1 SPOT BASE BUY<br />
2 SPOT BASE SELL<br />
3 SPOT TERM BUY<br />
4 SPOT TERM SELL<br />
5 FORWARD BASE BUY<br />
6 FORWARD BASE SELL<br />
7 FORWARD TERM BUY<br />
8 FORWARD TERM SELL<br />
9 SWAP BASE BUY<br />
10 SWAP BASE SELL<br />
11 SWAP TERM BUY<br />
12 SWAP TERM SELL<br />
13 TIMEOPTION BASE BUY<br />
14 TIMEOPTION BASE SELL<br />
15 TIMEOPTION TERM BUY<br />
16 TIMEOPTION TERM SELL</p>
<p>During this discussion I remembered a Tech Talk I went to last year about <strong>Pairwise and Combinatorial Testing</strong> and I started to do some more research on it.</p>
<h2>What is Pairwise Testing?</h2>
<p>Pairwise Testing is a software testing approach that can help to test a big number of input parameters which normally results in hundreds/thousands of different permutations.</p>
<p>A good example to show the immense number of test cases is a configuration dialog with 12 checkboxes (checked, unchecked) and a dropdown with 3 values.<br />
If we wanted to cover all possible combinations we would have to execute 12,288 different tests which is calculated by (2 power n) * 3.<br />
Amazingly these 12,288 tests can be reduced to 10 if we apply the 2-way pairwise testing strategy.<br />
See <a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy50ZXN0aW5nZWR1Y2F0aW9uLm9yZy93dHN0NS9QYWlyd2lzZVBOU1FDMjAwNC5wZGY=">http://www.testingeducation.org/wtst5/PairwisePNSQC2004.pdf</a></p>
<h2>How does it work?</h2>
<p><strong>Pairwise testing</strong> is a way of testing a big set of parameters by only testing pairs of the given parameters. If we look at the example above we can see that there are 2 tests for SPOT, BASE (SPOT-BASE-BUY, SPOT-BASE-SELL).<br />
One of the inspirations for Pairwise Testing is the fact that bugs occur more often on a pair or triple of parameters rather than on a single input parameter. Therefore it is quite popular and often used for configuration testing but it can also be applied to any other area of software quality assurance.</p>
<p>This sounds all quite magic. So I would not recommend to blindly apply this strategy without analysing the software under test and getting some more information about architecture and risk before using it.</p>
<p>More information can be found on the following pages:</p>
<p><a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5wYWlyd2lzZS5vcmc=">http://www.pairwise.org</a><br />
<a  0="title="Hexawise"" href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL2hleGF3aXNlLmNvbQ==">Hexawise</a><br />
<a  href="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?url=aHR0cDovL3d3dy5ncm92ZS5jby51ay9kb3dubG9hZHMvZ2VuZXJhbFBkZnMvcGFpcndpc2VUZXN0aW5nLnBkZg==">An easy guide to orthogonal arrays and All-pairs combinations</a></p>
<p>What I personally find quite interesting is the combination of a pairwise analysis with exploratory testing. By getting a good idea of the input parameters it can definitely support exploring the application.</p>
<p>Finally I would like to show the result of the 2-way Pairwise Testing strategy applied to the example above.</p>
<p><strong>2-WAY</strong><br />
<strong>TYPE CURRENCY DIRECTION</strong><br />
1 SPOT BASE BUY<br />
2 SPOT TERM SELL<br />
3 FORWARD BASE SELL<br />
4 FORWARD TERM BUY<br />
5 SWAP BASE BUY<br />
6 SWAP TERM SELL<br />
7 TIMEOPTION BASE BUY<br />
8 TIMEOPTION TERM SELL</p>
 <img src="http://blog.caplin.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=8756" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://blog.caplin.com/2012/03/30/pairwise-testing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

