<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Atlassian Blogs » Developer</title><link>http://blogs.atlassian.com</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AtlassianDeveloperBlog" /><description>Software development and collaboration tools</description><language>en</language><lastBuildDate>Thu, 09 Feb 2012 22:20:57 PST</lastBuildDate><generator>http://wordpress.org/?v=3.3.1</generator><sy:updatePeriod xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">hourly</sy:updatePeriod><sy:updateFrequency xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">1</sy:updateFrequency><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AtlassianDeveloperBlog" /><feedburner:info uri="atlassiandeveloperblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>AtlassianDeveloperBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item><title>What is Version Control: Diffs and Patches</title><link>http://feedproxy.google.com/~r/AtlassianDeveloperBlog/~3/I2n6LpyV2bE/</link><category>Developer</category><category>DVCS</category><category>diff</category><category>dvcs</category><category>git</category><category>mercurial</category><category>patch</category><category>version control</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Giancarlo Lionetti</dc:creator><pubDate>Thu, 09 Feb 2012 09:11:40 PST</pubDate><guid isPermaLink="false">http://blogs.atlassian.com/?p=20413</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em>Much of the blog content was written in conjunction with Steve Losh. Steve is a programmer, photographer, blues dancer and musician. Check out Steve&#8217;s <a href="http://stevelosh.com/projects/" rel="nofollow">projects</a> to see some of the cool things he has worked on, or jump over to <a href="http://bitbucket.org/sjl/" rel="nofollow">his Bitbucket account</a> and get straight to the source.<br />
</em><em></em></p>
<h2>Making the Switch to Distributed Version Control</h2>
<p>Many individuals, teams, and organizations are thinking about <strong>making the switch to distributed version control systems</strong> a la Git and Mercurial (Hg). This is the first post in a series of blog entries over the next several weeks that focus on using and understanding DVCS.</p>
<p>Let&#8217;s start off with the basics and explore what version control is in general. In this entry, we will discuss problems that any version control aims to solve, where version control came from and some of the basic concepts you&#8217;ll need to know in order to use it.</p>
<h2 id="WhatisVersionControl-ASimpleExample">A Simple Example</h2>
<p>It&#8217;s often helpful to have a concrete example when talking about editing code, so let&#8217;s use a simple personal web page:</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ddbb00;">&amp;nbsp;</span><br />
<br />
<span style="color: #009900;">&lt;header&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>John Doe<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span><br />
A Java programmer from Chicago, IL.<br />
<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>header&gt;&lt;section&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h2</span>&gt;</span>About John<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h2</span>&gt;</span><br />
John is experienced in many areas of Java programming.<br />
<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;&lt;section&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h2</span>&gt;</span>Contact Information<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h2</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Email: john@example.com<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Phone Number: (555) 555-1024<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;&lt;footer&gt;</span>Copyright John Smith, 2010<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>footer&gt;</span></div></td></tr></tbody></table></div>
<p>We&#8217;ll use this simple HTML page as an example throughout this entry.</p>
<h2 id="WhatisVersionControl-CodeChangesOften">Code Changes Often</h2>
<p>The code we write as programmers changes often. Bugs need to be fixed, features need to be added, and content needs to be changed.</p>
<p>Most code is stored as plain old text files, and we change the code by editing these files. Every time we save our changes, we overwrite the old version of the file with a new one.</p>
<p>Unfortunately, no programmer is perfect, and sometimes, we make mistakes. If you make a change to a file, save it, compile it, and find out that something went wrong, it&#8217;s often helpful to be able to go back to the old version or to get a report of what we actually changed, in order to focus on what we may have done wrong.</p>
<p>Suppose in our example, our fictional character John wants to update his &#8220;Contact Information&#8221; header to read &#8220;John&#8217;s Contact Information&#8221;. He might edit the file so that that section reads:</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;section&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>John's Contact Information<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Email: john@example.com<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Phone Number: (555) 555-1024<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;</span></div></td></tr></tbody></table></div>
<p>John saves the file, reloads the page, and notices something doesn&#8217;t look quite right. How can John figure out the problem?</p>
<p>In this simple example, it&#8217;s fairly easy to simply read the entire file and find the problem, but it can obviously get much more difficult when you&#8217;re editing many parts of a large file that all interact with each other.</p>
<p>One of the earliest methods that is still around for comparing versions of files is a pair of utilities called &#8220;diff&#8221; and &#8220;patch&#8221;. Modern version control systems still use the concepts (and even file formats) of these tools, so let&#8217;s take a look at how they work.</p>
<h2 id="WhatisVersionControl-Diff">Diff</h2>
<p><a href="http://en.wikipedia.org/wiki/Diff" rel="nofollow">Diff</a> was originally created in the early 1970s. Its purpose is to take two versions of a file as input, and output a hunk of text that tells you how to change the first file into the second file.</p>
<p>There are many formats of diff in existence, but we&#8217;ll just work with the most common format which is know as a &#8220;unified diff&#8221;. If you&#8217;re following along at home on a Linux or OS X machine, you&#8217;ll need to pass the</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">-U3</div></td></tr></tbody></table></div>
<p>option when you run diff to get the format.</p>
<p>If our example user John wants to use diffs to help him visualize his changes, he&#8217;ll need to do some extra work beforehand because he needs to keep the original version of his web page. When John wants to edit his web page, he would do the following steps:</p>
<ul>
<li>Make a backup copy of his page by copying his index.html file to index-old.html.</li>
<li>Make his changes, save them, and preview them.</li>
<li>Use diff to compare index-old.html to index.html.</li>
</ul>
<p>When he runs the files through diff, he&#8217;ll get output that looks like this:</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">--- index-old.html 2010-10-06 19:33:31.000000000 -0400<br />
+++ index.html 2010-10-06 19:33:50.000000000 -0400<br />
@@ -13,7 +13,7 @@<br />
<br />
John is experienced in many areas of Java programming.<br />
<br />
<span style="color: #009900;">&lt;section&gt;</span>-<br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h2</span>&gt;</span>Contact Information<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h2</span>&gt;</span><br />
+<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>John's Contact Information<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Email: john@example.com<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Phone Number: (555) 555-1024<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span></div></td></tr></tbody></table></div>
<p>Notice that there are <em>two</em> lines displayed to represent the line he modified. The first has a &#8216;-&#8217; before it, which means: &#8220;this line was deleted&#8221;. The second has a &#8216;+&#8217; before it, which means: &#8220;this line was added.&#8221;</p>
<p>This example demonstrates an important point about diffs: even though John only changed a few parts of the line, diff treats the <em>entire line</em> as added and removed. Standard diffs only deal with entire lines.</p>
<p>Now that John can see exactly what he changed, it&#8217;s quite easy to see the problem – he&#8217;s changed the second level header to a first level header. He can fix the problem, save his changes, and delete the index-old.html file when he&#8217;s satisfied.</p>
<p>The ability to easily see what changed in a file is one of the biggest advantages of using diffs, but they can also be used to transform files with the patch utility.</p>
<h2 id="WhatisVersionControl-Patch">Patch</h2>
<p><a href="http://en.wikipedia.org/wiki/Patch_%28Unix%29" rel="nofollow">Patch</a> is a utility used to read hunks of text produced by diff and apply them to files, in order to transform the old files into the new versions.</p>
<p>Patch is often used to share changes with other people. For example, let&#8217;s say John asks his friend Mary for some advice on his web page. Mary looks over the code and changes it a bit to make the important sections stand out. She then runs diff to produce a hunk of text describing her changes, which looks like this:</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">--- index-old.html 2010-10-06 19:33:50.000000000 -0400<br />
+++ index.html 2010-10-06 19:50:08.000000000 -0400<br />
@@ -1,7 +1,7 @@<br />
<br />
<br />
<br />
-<br />
+<br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;&lt;header&gt;</span>@@ -15,10 +15,10 @@<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>header&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
<span style="color: #009900;">&lt;section&gt;</span><span style="color: #ddbb00;">&amp;nbsp;</span><br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>John's Contact Information<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span><br />
-<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Email: john@example.com<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>section&gt;</span>-<br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Phone Number: (555) 555-1024<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
<span style="color: #ddbb00;">&amp;nbsp;</span><br />
<br />
+<br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">strong</span>&gt;</span>Email:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">strong</span>&gt;</span> john@example.com<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
<span style="color: #ddbb00;">&amp;nbsp;</span><br />
<br />
+<br />
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">strong</span>&gt;</span>Phone Number:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">strong</span>&gt;</span> (555) 555-1024<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span><br />
<span style="color: #ddbb00;">&amp;nbsp;</span><br />
<br />
<span style="color: #009900;">&lt;section&gt;&lt;section&gt;&lt;<span style="color: #66cc66;">/</span>section&gt;</span>-<br />
<span style="color: #009900;">&lt;footer&gt;</span>Copyright John Smith, 2010<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>footer&gt;&lt;<span style="color: #66cc66;">/</span>section&gt;</span>+<br />
<br />
<span style="color: #009900;">&lt;footer&gt;</span>Copyright John Smith, 2010, All Rights Reserved<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span>footer&gt;</span><span style="color: #ddbb00;">&amp;nbsp;</span></div></td></tr></tbody></table></div>
<p>She saves that text to a file and emails it to John.</p>
<p>When John receives the file, he <em>could</em> simply retype all of Mary&#8217;s changes and save the file, but that&#8217;s a lot of work and he might make a typo. Instead, he could use the patch utility to &#8220;apply&#8221; the output of Mary&#8217;s diff to his own copy of the file.</p>
<p>When he feeds his version of the file and Mary&#8217;s diff to the patch utility with patch index.html index-from-mary.patch, it modifies his copy by replaying the changes Mary made. The result is that his copy of the file now looks like Mary&#8217;s, and he can simply upload it to his web server without any more work.</p>
<h2 id="WhatisVersionControl-CoreConceptsofDiffandPatch">Core Concepts of Diff and Patch</h2>
<p>Diff&#8217;s purpose can be summed up as: &#8220;representing changes to files as hunks of text&#8221;. These hunks of text can be read by a human to determine what changed, and can also be saved as files and emailed to other people.</p>
<p>Patch&#8217;s purpose can be summed up as: &#8220;taking hunks of text produced by diff and applying them to the old versions of files in order to transform them into the new versions.&#8221;</p>
<p>These utilities give us an efficient way to share changes. If one line in a 10,000-line file changes, the diff for that file is only a few bytes. If we transferred the entire file instead, the file would be 10kb. When you work with multiple files, this difference can add up quickly.</p>
<h2 id="WhatisVersionControl-ManagingVersionsofaFileWithoutVersionControl">Managing Versions of a File Without Version Control</h2>
<p>A large disadvantage of the diff and patch utilities is that they work with two, and <em>only</em> two, versions of a file: &#8220;old&#8221; and &#8220;new&#8221;. Rare indeed is the programming project that only ever needs a single update in its lifetime.</p>
<p>It is often useful to see how a code file has evolved over time. To do that, we need to store &#8220;versions&#8221; of the file, so we can compare them later. One way to do this is to save many copies of a file with some numbering scheme, like this:</p>
<div class="codecolorer-container html4strict mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">index.html<br />
index-2009-04-08.html<br />
index-2009-06-06.html<br />
index-2009-08-10.html<br />
index-2009-11-04.html<br />
index-2010-01-23.html<br />
index-2010-09-21.html</div></td></tr></tbody></table></div>
<p>The disadvantages to this method are many:</p>
<ul>
<ul>
<ul>
<li>We need to save a full copy of the file even if only a single line changed.</li>
<li>The numbering scheme becomes more complicated if we need to store two separate versions for the same date.</li>
<li>Two people may edit the file on the same date.</li>
<li>Many versions of the file are stored, which clutters our project folder.</li>
<li>If our hard drive fails, the entire history of the file disappears.</li>
<li>If we want to tell a coworker to &#8220;look at the changes between X and Y,&#8221; we need to send them those versions.</li>
</ul>
</ul>
</ul>
<h2 id="WhatisVersionControl-ManagingVersionsofaGroupofFilesWithoutVersionControl">Managing Versions of a Group of Files Without Version Control</h2>
<p>Another disadvantage of diff and patch is that they only work on a single file at a time.</p>
<p>In the real world, most programming projects consist of <em>many</em> files, which means we need to save copies of <em>each file</em> we change.</p>
<p>Worse still, changes to one file might affect other files. If we change a C header file, we almost certainly need to change the corresponding .c file, which means we need to make sure that those versions are kept together as a group.</p>
<p>Managing versions yourself by making copies of files quickly becomes a nightmare. Version control systems are programs designed to handle this for us, so we can stop worrying about copying files and get back to coding.</p>
<h2 id="WhatisVersionControl-CentralizedVersionControlvsDistributedVersionControl">Centralized Version Control vs. Distributed Version Control</h2>
<p>In our next entry we will discuss the advantages and disadvantages of centralized version control. Thinking about moving from Subversion to Git? Want to learn about the key concepts of DVCS? Stay tuned for the rest of our Switch To DVCS blog series.</p>
<p><center><img class="aligncenter size-full wp-image-20422" title="RSSDT" src="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/RSSDT.png" alt="" width="347" height="37" /></center>&nbsp;</p>
<p><center><a href="http://blogs.atlassian.com/email-subscription/?blog-category=dev-tools"><img class="aligncenter size-full wp-image-20423" title="RSSDevTools" src="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/RSSDevTools.png" alt="" width="345" height="37" /></a></center></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=I2n6LpyV2bE:Qdbi2_B4P-s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=I2n6LpyV2bE:Qdbi2_B4P-s:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?i=I2n6LpyV2bE:Qdbi2_B4P-s:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AtlassianDeveloperBlog/~4/I2n6LpyV2bE" height="1" width="1"/>]]></content:encoded><description>Much of the blog content was written in conjunction with Steve Losh. Steve is a programmer, photographer, blues dancer and musician. Check out Steve&amp;#8217;s projects to see some of the cool things he has worked on, or jump over to his Bitbucket account and get straight to the source. Making the Switch to Distributed Version Control Many individuals, teams, and organizations are thinking about making the switch to distributed version control systems a la Git and Mercurial (Hg). This is the first post in a series of blog entries over the next several weeks that focus on using and understanding DVCS. Let&amp;#8217;s start off with the basics and explore what version control is in general. In this entry, we will discuss problems that any version control aims to solve, where version control came from and some of the basic concepts you&amp;#8217;ll need to know in order to use it. A Simple Example It&amp;#8217;s often helpful to have a concrete example when talking about editing code, so let&amp;#8217;s use a simple personal web page: 1234567891011121314151617&amp;#38;nbsp; &amp;#60;header&amp;#62; &amp;#60;h1&amp;#62;John Doe&amp;#60;/h1&amp;#62; A Java programmer from Chicago, IL. &amp;#60;/header&amp;#62;&amp;#60;section&amp;#62; &amp;#60;h2&amp;#62;About John&amp;#60;/h2&amp;#62; John is experienced in many areas of Java programming. &amp;#60;/section&amp;#62;&amp;#60;section&amp;#62; &amp;#60;h2&amp;#62;Contact Information&amp;#60;/h2&amp;#62; &amp;#60;ul&amp;#62; &amp;#160; &amp;#160; &amp;#60;li&amp;#62;Email: john@example.com&amp;#60;/li&amp;#62; &amp;#160; &amp;#160; &amp;#60;li&amp;#62;Phone Number: (555) 555-1024&amp;#60;/li&amp;#62; &amp;#60;/ul&amp;#62; &amp;#60;/section&amp;#62;&amp;#60;footer&amp;#62;Copyright John Smith, 2010&amp;#60;/footer&amp;#62; We&amp;#8217;ll use this simple HTML page as an example throughout this entry. Code Changes Often The code we write as programmers changes often. Bugs need to be fixed, features need to be added, and content needs to be changed. Most code is stored as plain old text files, and we change the code by editing these files. Every time we save our changes, we overwrite the old version of the file with a new one. Unfortunately, no programmer is perfect, and sometimes, we make mistakes. If you make a change to a file, save it, compile it, and find out that something went wrong, it&amp;#8217;s often helpful to be able to go back to the old version or to get a report of what we actually changed, in order to focus on what we may have done wrong. Suppose in our example, our fictional character John wants to update his &amp;#8220;Contact Information&amp;#8221; header to read &amp;#8220;John&amp;#8217;s Contact Information&amp;#8221;. He might edit the file so that that section reads: 1234567&amp;#60;section&amp;#62; &amp;#60;h1&amp;#62;John's Contact Information&amp;#60;/h1&amp;#62; &amp;#60;ul&amp;#62; &amp;#160; &amp;#160; &amp;#60;li&amp;#62;Email: john@example.com&amp;#60;/li&amp;#62; &amp;#160; &amp;#160; &amp;#60;li&amp;#62;Phone Number: (555) 555-1024&amp;#60;/li&amp;#62; &amp;#60;/ul&amp;#62; &amp;#60;/section&amp;#62; John saves the file, reloads the page, and notices something doesn&amp;#8217;t look quite right. How can John figure out the problem? In this simple example, it&amp;#8217;s fairly easy to simply read the entire file and find the problem, but it can obviously get much more difficult when you&amp;#8217;re editing many parts of a large file that all interact with each other. One of the earliest methods that is still around for comparing versions of files is a pair of utilities called &amp;#8220;diff&amp;#8221; and &amp;#8220;patch&amp;#8221;. Modern version control systems still use the concepts (and even file formats) of these tools, so let&amp;#8217;s take a look [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.atlassian.com/2012/02/version-control-diffs-patches/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://blogs.atlassian.com/2012/02/version-control-diffs-patches/</feedburner:origLink></item><item><title>(Guest blog) On the Redistribution of Testing – Part 2</title><link>http://feedproxy.google.com/~r/AtlassianDeveloperBlog/~3/c1VQ8nXUnZE/</link><category>Developer</category><category>qa</category><category>qa_innovation</category><category>testing</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ly Nguyen</dc:creator><pubDate>Tue, 07 Feb 2012 10:18:08 PST</pubDate><guid isPermaLink="false">http://blogs.atlassian.com/?p=20363</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em><a href="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/paulg2.jpg"><img class="alignright  wp-image-20364" title="Paul_gerrard" src="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/paulg2-228x300.jpg" alt="" width="148" height="194" /></a>This guest blog post is part of an <a href="http://blogs.atlassian.com/tag/qa_innovation/" rel="nofollow">Atlassian blog series</a> raising awareness about testing innovation within the QA community. You can find the other posts in this series under the <a href="http://blogs.atlassian.com/tag/qa_innovation/" rel="nofollow">QA Innovation tag</a>. </em></p>
<p><em>This is a guest blog post by Paul Gerrard, a Principal of Gerrard Consulting Limited and is the host of the UK Test Management Forum. It is Part 2 of a two-part blog series on the future of QA testing.</em></p>
<p>In <a href="http://blogs.atlassian.com/2012/01/redistribution-of-testing-1/" rel="nofollow" target="_blank">Part I of this article on the Redistribution of Testing</a>, I suggested there were four forces that were pushing testers out of the door of software projects (and into the real world, perhaps). In this post, I want to highlight the industry changes that seem to be on the way, that impact on development and delivery and hence on testing and testers. After the negative push, here’s the pull. These changes offer new opportunities and improve testers’ prospects.</p>
<p>Recent reports (IBM’s ‘The Essential CIO’ 2011 study and Forrester’s ‘Top 10 Technology Trends to Watch’) put Business Intelligence, adoption of cloud platforms and mobile computing as the top three areas for change and increased business value (whatever that means).</p>
<p>Once more, the industry is in upheaval and is set for a period of dramatic change. I will focus on adoption of the cloud for platforms in general and for Software as a Service (SaaS) in particular and the stampede towards mobile computing. I’m going to talk about internet- (not just web-) based systems rather than high integrity or embedded systems, of course.</p>
<h2 id="QAGuestBlogOntheRedistributionofTesting–Part2PaulGerrard-TheIndustryChangesitsMind–Again">The Industry Changes its Mind – Again</h2>
<p>The obvious reason for moving to the cloud for Infrastructure as a Service (IaaS) and regardless of the subtleties of capex v opex costs, the cost advantage of moving to cloud-based platforms is clear. <a href="http://www.cio.com/article/484429/Capex_vs._Opex_Most_People_Miss_the_Point_About_Cloud_Economics" rel="nofollow">“Some of this advantage is due to purchasing power through volume, some through more efficient management practices, and, dare one say it, because these businesses are managed as profitable enterprises with a strong attention to cost.”</a> So, it looks like it’s going to happen.</p>
<p>Moving towards IaaS will save some money. The IT Director can glory in the permanent cost savings for a year – and then what? Business will want to take advantage of the flexibility that the move to the cloud offers.</p>
<p>The drift from desktop to laptop to mobile devices gathers pace. Mobile devices coupled with cloud-based services have been called the ‘App Internet’. It seems that many websites will cease to be and might be replaced by dedicated low-cost or free Apps that provide simple user interfaces. New businesses with new business models focusing on mobile are springing up all the time. These businesses are agile by nature and Agile by method. The pull of the App internet and Agile approaches is irresistible.</p>
<h2 id="QAGuestBlogOntheRedistributionofTesting–Part2PaulGerrard-TheMovetoSaaSandMobileAppInternet">The Move to SaaS and Mobile (App) Internet</h2>
<p>I’m not the biggest fan of blue sky forecasters, and I’m never entirely sure how they build their forecasts with an accuracy of more than one significant digit, but according to Forrester’s report <a href="http://forrester.com/rb/Research/sizing_cloud/q/id/58161/t/2" rel="nofollow">Sizing the Cloud</a>, the market for SaaS will grow from $21bn in 2011 to $93bn in 2016 and represent 26% of all packaged software.</p>
<p>Now 26% of all packaged software doesn’t sound so dramatic, but wait a minute. To re-architect an installed base of software and create new applications from scratch to make that percentage will be a monumental effort. A lot of this software will be used by corporates who have systems spanning the (probably private) cloud and legacy systems and the challenges of integration, security, performance and reliability will be daunting.</p>
<h2 id="QAGuestBlogOntheRedistributionofTesting–Part2PaulGerrard-TheImpactonDevelopmentDeliveryandTesting">The Impact on Development, Delivery and Testing</h2>
<p>Much of the software development activity in the next five years or so will be driven by the need for system users and service vendors to move to new business models based on new architectures. One reason SaaS is attractive to software vendors is that the marketing channel and the service channel are virtually same and the route to market is so simple that tiny boutique software shops can compete on the same playing field as the huge ISVs. The ISVs need to move pretty darned quick not to be left with expensive, inflexible, unmarketable on-premise products so are scrambling to make their products cloud-ready. Expect there to be some consolidation in some market sectors.</p>
<p>SaaS works as an enabler for very rapid deployment of new functionality and deployment onto a range of devices. A bright idea in marketing being deployed as new functionality in the afternoon seems to be feasible and some companies seem to be succeeding with ‘continuous delivery’. This is the promise of SaaS.</p>
<p>Many small companies (and switched-on business units in large companies) have worked with continuous delivery for years however. The emergence of the cloud and SaaS and of maturing Agile, specification by example, continuous integration, automated testing and continuous delivery methods means that many more companies can take this approach.</p>
<h2 id="QAGuestBlogOntheRedistributionofTesting–Part2PaulGerrard-WhatDoesthisMeanforSoftwarePractitioners">What Does this Mean for Software Practitioners?</h2>
<p>Businesses like Amazon and Google and the like have operated a continuous delivery model for years. The ‘Testing is Dead’ meme can be traced to an <a href="http://www.youtube.com/watch?v=X1jWe5rOu3g" rel="nofollow">Alberto Savoia talk at Google’s GTAC conference</a>. Developers who test (with tools) ship code to thousands of internal users who ‘test’ and then the software goes live (as a Beta, often). Some products take off; some, like Wave, don’t. The focus of Alberto’s talk is that software development and testing is often about testing ideas in the market.</p>
<p>Google may have a unique approach, I don’t know. But most organisations will have to come to terms with the new architectures and a more streamlined approach to development. The push and pull of these forces are forcing a rethink of how software available through the internet is created, delivered and managed. The impacts on testing are significant. Perhaps testing and the role of testers can at last can mature to what they should be?</p>
<h2 id="QAGuestBlogOntheRedistributionofTesting–Part2PaulGerrard-SomePredictions">Some Predictions</h2>
<p>Well, after the whirlwind tour of what hot and what’s not in the testing game, what exactly is going to happen? People like predictions so I’ve consulted my magic bones and here are my ten predictions for the next five years. As predictions go, some are quite dramatic. But in some companies in some contexts, these predictions will come true. I’m just offering some food for through.</p>
<p>Our vision, captured in our <a href="http://businessstorymethod.com/" rel="nofollow">Pocketbook</a> is that requirements will be captured as epic stories, and implementable stories will example and test those requirements to become ‘trusted’, with a behaviour-driven development approach and an emphasis on fully and always automated checking. It seems to us that this approach could span (and satisfy) the purist Agilists but allow many more companies used to structured approaches to adopt Agile methods whilst satisfying their need to have up-front requirements.</p>
<p>Here are my predictions:</p>
<ol>
<li><strong>50% of in-house testers will be reassigned, possibly let go.</strong> The industry is over staffed by unqualified testers using unsystematic, manual methods. Lay them off and/or replace them with cheaper resource is an easy call for a CIO to make.</li>
<li><strong>Business test planning will become part of up-front analysis.</strong> It seems obvious, but why for all these years has one team captured requirements and another team planned the test to demonstrate they are met. Make one (possibly hybrid) group responsible.</li>
<li><strong>Specification by example will become the new buzzword on people’s CV.</strong> For no other reason that SBE incorporates so many buzzwordy Agile practices – Test-First, Test-Driven, Behaviour-Driven, Acceptance-Test Driven, Story-Testing, Agile Acceptance testing) – it will be attractive to employers and practitioners. With care, it might actually work too.</li>
<li><strong>Developers will adopt behaviour-driven-development and new tools.</strong> The promise of test code being automatically generated and executed compared to writing one’s own tests is so attractive to developers they’ll try it – and like it. Who writes the tests though?</li>
<li><strong>Some system tests and most acceptance tests will be business-model driven.</strong> If Business Stories, with scenarios to example the functionality, supported by models of user workflows are created by business analysts, those stories can drive both developer tests and end to end system and acceptance tests. So why not?</li>
<li><strong>Business models plus stories will increasingly become ‘contractual’.</strong> For too long, suppliers have used the wriggle-room of sloppy requirements to excuse their poor performance and high charges for late, inevitable changes to specification. Customers will write more focused compact requirements, validated and illustrated with concrete examples to improve the target and reduce the room for error. Contract plus requirements plus stories and examples will provide the ‘trusted specification’.</li>
<li><strong>System tests will be generated from stories or be outsourced.</strong> Business story scenarios provide the basic blocks for system test cases. Test detailing to create automated or manual test procedures is a mechanical activity that can be outsourced.</li>
<li><strong>Manual scripted system test execution will be outsourced (in the cloud).</strong> The cloud is here. Testers are everywhere. At some point, customers will lose their inhibition and take advantage of the cloud+crowd. So, plain old scripted functional testers are under threat. What about those folk who focus more on exploratory testing? Well, I think they are under threat too. If most exploration is done in the cloud, then why not give some testing to the crowd too?</li>
<li><strong>50% of acceptance tests will be automated in a CI environment for all time.</strong> Acceptance moves from a cumbersome, large manual test at the end to a front-end requirements validation exercise with stories plus automated execution of those stories. Some manual tests, overseen by business analysts will always remain.</li>
<li><strong>Tools that manage requirements, stories, workflows, prototyping, behaviour-driven development, system and acceptance testing emerge.</strong></li>
</ol>
<p>Where do testers fit? You will have to pick your way through the changes above to find your niche. Needless to say you will need more than basic ‘certification level’ skills. Expect to move towards a specialism or be reassigned and/or outsourced. Business analysis, test automation, test assurance, non-functional testing or test leadership beckon.</p>
<h2 id="QAGuestBlogOntheRedistributionofTesting–Part2PaulGerrard-WhithertheTestManager">Whither the Test Manager?</h2>
<p>You are test manager or a test lead now. Where will you be in five years? In six months? It seems to me there are five broad choices for you to take (other than getting out of testing and IT altogether).</p>
<ol>
<li><strong>Providing testing and assurance skills to business:</strong> moving up the food chain towards your stakeholders, your role could be to provide advice to business leaders wishing to take control of their IT projects. As an independent agent, you understand business concerns and communicate them to projects. You advise and cajole project leadership, review their performance and achievement and interpret outputs and advise your stakeholders.</li>
<li><strong>Managing Requirements knowledge:</strong> In this role, you take control of the knowledge required to define and build systems. Your critical skills demand clarity and precision in requirements and the examples that illustrate features in use. You help business and developers to decide when requirements can be trusted to the degree that software can reasonably be built and tested. You manage the requirements and glossary and dictionary of usage of business concepts and data items. You provide a business impact analysis service.</li>
<li><strong>Testmaster – Providing an assurance function to teams, projects and stakeholders:</strong> A similar role to 1 above – but for more Agile-oriented environments. You are a specialist test and assurance practitioner that keeps Agile projects honest. You work closely with on-site customers and product owners. You help projects to recognise and react to risk, coach and mentor the team and manage their testing activities and maybe do some testing yourself.</li>
<li><strong>Managing the information flow to/from the CI process:</strong> in a Specification by Example environment, if requirements are validated with business stories and these stories are used directly to generate automated tests which are run on a CI environment, the information flows between analysts, developers, testers and the CI system is critical. You define and oversee the processes used to manage the information flow between these key groups and the CI system that provides the control mechanism for change, testing and delivery.</li>
<li><strong>Managing outsourced/offshore teams:</strong> In this case, you relinquish your onsite test team and manage the transfer of work to an outsourced or offshore supplier. You are expert in the management of information flow to/from your software and testing suppliers. You manage the relationship with the outsourced test team, monitor their performance and assure the outputs and analyses from them.</li>
</ol>
<h2 id="QAGuestBlogOntheRedistributionofTesting–Part2PaulGerrard-MovingForward">Moving Forward</h2>
<p>The recent history and the current state of the testing business, the pressures that drive the testers out of testing and the pull of testing into development and analysis will force a dramatic re-distribution of test activity in some or perhaps most organisations.</p>
<p>But don’t forget, these pressures on testing and predictions are generalisations based on personal experiences and views. Consider these ideas and think about them – your job might depend on it. Use them at your own risk.</p>
<p><em>Paul Gerrard is a consultant, teacher, author, webmaster, programmer, tester, conference speaker, rowing coach and most recently a publisher. He has conducted consulting assignments in all aspects of software testing and quality assurance, specialising in test assurance. He has presented keynote talks and tutorials at testing conferences across Europe, the USA, Australia, South Africa and occasionally won awards for them. <em>Find him on Twitter at <a href="https://twitter.com/#!/paul_gerrard" rel="nofollow">@paul_gerrard</a> or his site, <a href="http://gerrardconsulting.com/" rel="nofollow">Gerrard Consulting</a>.</em></em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=c1VQ8nXUnZE:Uf4jYuVFIkE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=c1VQ8nXUnZE:Uf4jYuVFIkE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?i=c1VQ8nXUnZE:Uf4jYuVFIkE:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AtlassianDeveloperBlog/~4/c1VQ8nXUnZE" height="1" width="1"/>]]></content:encoded><description>This guest blog post is part of an Atlassian blog series raising awareness about testing innovation within the QA community. You can find the other posts in this series under the QA Innovation tag.  This is a guest blog post by Paul Gerrard, a Principal of Gerrard Consulting Limited and is the host of the UK Test Management Forum. It is Part 2 of a two-part blog series on the future of QA testing. In Part I of this article on the Redistribution of Testing, I suggested there were four forces that were pushing testers out of the door of software projects (and into the real world, perhaps). In this post, I want to highlight the industry changes that seem to be on the way, that impact on development and delivery and hence on testing and testers. After the negative push, here’s the pull. These changes offer new opportunities and improve testers’ prospects. Recent reports (IBM’s ‘The Essential CIO’ 2011 study and Forrester’s ‘Top 10 Technology Trends to Watch’) put Business Intelligence, adoption of cloud platforms and mobile computing as the top three areas for change and increased business value (whatever that means). Once more, the industry is in upheaval and is set for a period of dramatic change. I will focus on adoption of the cloud for platforms in general and for Software as a Service (SaaS) in particular and the stampede towards mobile computing. I’m going to talk about internet- (not just web-) based systems rather than high integrity or embedded systems, of course. The Industry Changes its Mind – Again The obvious reason for moving to the cloud for Infrastructure as a Service (IaaS) and regardless of the subtleties of capex v opex costs, the cost advantage of moving to cloud-based platforms is clear. “Some of this advantage is due to purchasing power through volume, some through more efficient management practices, and, dare one say it, because these businesses are managed as profitable enterprises with a strong attention to cost.” So, it looks like it’s going to happen. Moving towards IaaS will save some money. The IT Director can glory in the permanent cost savings for a year – and then what? Business will want to take advantage of the flexibility that the move to the cloud offers. The drift from desktop to laptop to mobile devices gathers pace. Mobile devices coupled with cloud-based services have been called the ‘App Internet’. It seems that many websites will cease to be and might be replaced by dedicated low-cost or free Apps that provide simple user interfaces. New businesses with new business models focusing on mobile are springing up all the time. These businesses are agile by nature and Agile by method. The pull of the App internet and Agile approaches is irresistible. The Move to SaaS and Mobile (App) Internet I’m not the biggest fan of blue sky forecasters, and I’m never entirely sure how they build their forecasts with an accuracy of more than one significant digit, but according to Forrester’s report Sizing the Cloud, the [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.atlassian.com/2012/02/redistribution-of-testing-part-2/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://blogs.atlassian.com/2012/02/redistribution-of-testing-part-2/</feedburner:origLink></item><item><title>(Guest blog) When 4/5 Dentists Agree, Why Do 4/5 Testers Disagree?</title><link>http://feedproxy.google.com/~r/AtlassianDeveloperBlog/~3/8iKEgs4d9As/</link><category>Developer</category><category>agile testing</category><category>qa</category><category>qa_innovation</category><category>testing</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ly Nguyen</dc:creator><pubDate>Mon, 06 Feb 2012 10:12:17 PST</pubDate><guid isPermaLink="false">http://blogs.atlassian.com/?p=20351</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em><a href="http://blogs.atlassian.com/2012/02/when-testers-disagree/smile/" rel="attachment wp-att-20352"><img class="alignright  wp-image-20352" title="Lanette_Creamer" src="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/Smile-300x300.jpg" alt="" width="270" height="270" /></a>This guest blog post is part of an <a href="http://blogs.atlassian.com/tag/qa_innovation/" rel="nofollow">Atlassian blog series</a> raising awareness about testing innovation within the QA community. You can find the other posts in this series under the <a href="http://blogs.atlassian.com/tag/qa_innovation/" rel="nofollow" target="_blank">QA Innovation tag</a>.</em></p>
<p><em>The post is written by Lanette Creamer, an Agile testing consultant involved in software testing since 1999.</em></p>
<p>Testers are prone to argue about anything. Just last night, at the <a href="http://www.meetup.com/Selenium-Seattle" target="_blank">Selenium Meetup</a>, a fellow tester, <a href="http://www.linkedin.com/pub/gary-masnica/4/22b/122" target="_blank">Gary Masnica</a> said, &#8220;There is nothing worse than listening to two testers argue. Before long, it will even get down to semantics, and I&#8217;m reminded of the Bill Clinton trial as each tester ponders the meaning of the word &#8216;the&#8217; or something equally as silly.&#8221; Considering the small size of the testing community in relation to the number of developers, what gives? Are these testers just a cranky and cantankerous lot of malcontents? If so, surely not 4 out of 5 of them? Well, let&#8217;s first say that the title is a joke, because I&#8217;ve done no research, so those Dataphiles among you, please don&#8217;t go looking for the pie chart and research attached. Secondly, there IS something to it.</p>
<h2 id="QAGuestBlogWhen45DentistsAgreeWhyDo45TestersDisagreeLanetteCreamer- ReasonsforDisparity">Reasons for Disparity</h2>
<h3 id="QAGuestBlogWhen45DentistsAgreeWhyDo45TestersDisagreeLanetteCreamer-CriticalThinking ">Critical Thinking</h3>
<p>First, to be effective as a software testers, you develop a different kind of critical thinking in order to find the exceptions to a given rule. It can be said that if you hear hoofbeats, think horses, not zebras. Testers know you&#8217;ve considered horses, but can you handle a herd of zebras? This is one reason why our arguments may sound strange to you, but when your code is on Safari, will you be less sorry?</p>
<h3 id="QAGuestBlogWhen45DentistsAgreeWhyDo45TestersDisagreeLanetteCreamer-VaryingCulturalNorms">Varying Cultural Norms</h3>
<p>Secondly, testing is a HUGE profession than spans the entire globe. The education for testers is far from consistent, and there are these much debated &#8220;<a href="http://wp.bitpipe.com/resource/org_1000733242_857/TT_SSQ_HP_ITBrief_CB.pdf" target="_blank">schools of thought</a>&#8221; that some subscribe to. On top of that, we have testers who work in different stages of Agile transitions across the industry now. Call someone a &#8220;resource&#8221; in some company and you&#8217;d be better off to have cursed at them. Let&#8217;s just say that cultural norms vary. Even this combined with cultural differences across the globe don&#8217;t explain all that is going on.</p>
<h3 id="QAGuestBlogWhen45DentistsAgreeWhyDo45TestersDisagreeLanetteCreamer-MakingtheArgument">Making the Argument</h3>
<p>The third reason why testers often do not agree, even on things that seem simple to other people, is that testers need to convince other people in order to see changes happen. <strong>For many of us, the number of bugs we FIND isn&#8217;t important. It is only the number of bugs important enough to be fixed or that we prevented that adds value to the end user.</strong> We don&#8217;t intend to argue for bugs being fixed or prevented unless they ARE important, but when that bug is important, a good tester will be as convincing as a pitbull lawyer. There will be research, evidence, and convincing testimony from bystanders. By the time you&#8217;ve reached many years experience as a professional software tester, you are as adept at explaining risk and sharing information with others as a good insurance agent, and that is a good thing, unless you happen to be debating against one.</p>
<h3 id="QAGuestBlogWhen45DentistsAgreeWhyDo45TestersDisagreeLanetteCreamer-DontTakeItPersonally">Don&#8217;t Take It Personally</h3>
<p>The fourth reason I have for you to consider is that often debates between testers aren&#8217;t personal. As we work in different areas of software testing, what sounds like disagreement and discord may just be two people who like to verbally spar and consider alternatives. We&#8217;re nerds, generally, just like other computer people. Star Wars vs Star Trek and <a href="http://www.slideshare.net/agoucher/everything-i-learned-about-agile-i-learned-from-pirates">Pirates</a> vs <a href="http://www.slideshare.net/lanettecream/agile-testingninjasst-pcon" target="_blank">Ninjas</a> still can become religious issues. I&#8217;ve recently learned if I ever want to be the <a href="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/LanettewStardust.jpg">Crazy Cat Lady of Software</a> I&#8217;ve got a loooong way to go. Did you know that <a href="http://en.wikipedia.org/wiki/Sandra_Lerner">Sandra Lerner</a> of Cisco Fame has 9 cats and just bought the <a href="http://www.care2.com/causes/cat-undergoes-revolutionary-new-full-knee-replacement.html">first feline knee replacement </a>for one of them? That is awesome! She&#8217;s also into hosting full costume ball dances at her mansion.</p>
<h3> QA Drama</h3>
<p>Now, for reason 5 out of 5, consider that maybe 4/5 testers do agree, but we never see them. The ones who don&#8217;t agree are just very loud and active. Also, drama draws focus, especially on the internet. Sometimes testers do feel the need to speak up, and indeed it is a key responsibility to point out flaws and possible big risks. To let important issues quietly go by wouldn&#8217;t be a helpful trait as a tester, but consider that all of the times we quietly agree, you are less likely to hear it. The memehappy testers at Mozilla appreciated my many cat photos, but the same photos with a different audience led to accusations that I&#8217;m making testers look unprofessional. Just like the word &#8220;resource&#8221;, even personal style can be considered a risk to testers.  The level of risk that is normal at a web based company would be considered irresponsible in some regulated environments. Testing will be far different when working on medical equipment than when working on a free video game, and rightly so. While 4/5 testers may simply say, &#8220;I work in a different part of testing than you do,&#8221; you are likely to hear and remember the few who disagree loudly in public.</p>
<h2 id="QAGuestBlogWhen45DentistsAgreeWhyDo45TestersDisagreeLanetteCreamer-Whichareyouseeing">Where do we go from here?</h2>
<p>While disagreement between testers has been the status quo for so long that it is still noted today, cooperation and teamwork are broadening testing in new ways.</p>
<p>As automation becomes more common, developers and testers find that their skills are merging. They may have different areas of focus, but <strong>pairing between testers and developers is one of the faster growing areas in the industry</strong>, especially on teams adopting agile practices. As developers learn to do more testing, such as unit testing, and even TDD, the testers are delving further into tool assisted exploratory testing, using innovations in visual display of data to guide them to changes and areas of possible bug regression based on changes.</p>
<p>Testers are participating in creation of automation, early code reviews, and also in testing requirements before the software is even created, basically preventing bugs before they can be written. In addition, due to advances in Developer technology, testers can test branches in Jenkins or Hudson continous integration servers from anywhere! This makes a new type of build, where checking in to the main branch may be gated by a person AND automated acceptance tests and multiple levels, giving teams control over how many tests a build needs to pass before going out to a client, or the public vs. how good is good enough for internal testing.</p>
<p>This can also be done faster than ever before. Free tools such as TestFlight allow developers from all over the world to specify and release to just the beta testers they trust, giving them control over in the wild testing, where paid services, such as uTest can literally provide an army of testers in a certain location at the time named by the team! We are only starting to see which combinations are the most useful in which situations, but one thing is certain, the need for talented testers isn&#8217;t going away. It is diversifying, growing, and many of the skills needed may have aspects in common with that of good developers, but the mindset is slightly different.</p>
<p><strong>Most testers now feel that they are part of the development team, where in the past testers were more siloed</strong>. As this change has happened, testers still seek out advice and help from other testers. Strongly identifying with a team is positive, as is shared responsibility for quality. There may not be a testing &#8220;team&#8221; in your company, but the testing community is growing, and now, more than ever, it includes more enlightened developers who need to test their own code, as well as the team members who take the testing of the entire product, beyond the code, further than they have been able to do before as tools enable earlier testing.</p>
<p style="padding-left: 30px;"> <em>Lanette Creamer a.k.a. Testy Redhead is a consulting software tester who is passionate about collaborative testing and is a practicing student of the <a href="http://context-driven-testing.com/" rel="nofollow">context driven school</a>. Lanette is a frequent industry speaker in the software testing community, and also enjoys agile and lean peer conferences. She has presented at StarEast, CAST, STPCon, PNSQC, and as a guest speaker at Mozilla in the past year. She also writes articles occasionally in addition to her blog, <a href="http://blog.testyredhead.com/" rel="nofollow">Testy Redhead</a>. Find her on Twitter at <a href="https://twitter.com/#!/lanettecream" rel="nofollow">@lanettecream</a>.</em></p>
<div id="labels-section"></div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=8iKEgs4d9As:-d6jOgrbqcQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=8iKEgs4d9As:-d6jOgrbqcQ:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?i=8iKEgs4d9As:-d6jOgrbqcQ:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AtlassianDeveloperBlog/~4/8iKEgs4d9As" height="1" width="1"/>]]></content:encoded><description>This guest blog post is part of an Atlassian blog series raising awareness about testing innovation within the QA community. You can find the other posts in this series under the QA Innovation tag. The post is written by Lanette Creamer, an Agile testing consultant involved in software testing since 1999. Testers are prone to argue about anything. Just last night, at the Selenium Meetup, a fellow tester, Gary Masnica said, &amp;#8220;There is nothing worse than listening to two testers argue. Before long, it will even get down to semantics, and I&amp;#8217;m reminded of the Bill Clinton trial as each tester ponders the meaning of the word &amp;#8216;the&amp;#8217; or something equally as silly.&amp;#8221; Considering the small size of the testing community in relation to the number of developers, what gives? Are these testers just a cranky and cantankerous lot of malcontents? If so, surely not 4 out of 5 of them? Well, let&amp;#8217;s first say that the title is a joke, because I&amp;#8217;ve done no research, so those Dataphiles among you, please don&amp;#8217;t go looking for the pie chart and research attached. Secondly, there IS something to it. Reasons for Disparity Critical Thinking First, to be effective as a software testers, you develop a different kind of critical thinking in order to find the exceptions to a given rule. It can be said that if you hear hoofbeats, think horses, not zebras. Testers know you&amp;#8217;ve considered horses, but can you handle a herd of zebras? This is one reason why our arguments may sound strange to you, but when your code is on Safari, will you be less sorry? Varying Cultural Norms Secondly, testing is a HUGE profession than spans the entire globe. The education for testers is far from consistent, and there are these much debated &amp;#8220;schools of thought&amp;#8221; that some subscribe to. On top of that, we have testers who work in different stages of Agile transitions across the industry now. Call someone a &amp;#8220;resource&amp;#8221; in some company and you&amp;#8217;d be better off to have cursed at them. Let&amp;#8217;s just say that cultural norms vary. Even this combined with cultural differences across the globe don&amp;#8217;t explain all that is going on. Making the Argument The third reason why testers often do not agree, even on things that seem simple to other people, is that testers need to convince other people in order to see changes happen. For many of us, the number of bugs we FIND isn&amp;#8217;t important. It is only the number of bugs important enough to be fixed or that we prevented that adds value to the end user. We don&amp;#8217;t intend to argue for bugs being fixed or prevented unless they ARE important, but when that bug is important, a good tester will be as convincing as a pitbull lawyer. There will be research, evidence, and convincing testimony from bystanders. By the time you&amp;#8217;ve reached many years experience as a professional software tester, you are as adept at explaining risk and sharing information with others as a good insurance agent, [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.atlassian.com/2012/02/when-testers-disagree/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://blogs.atlassian.com/2012/02/when-testers-disagree/</feedburner:origLink></item><item><title>JIRA 5 RubyGem</title><link>http://feedproxy.google.com/~r/AtlassianDeveloperBlog/~3/YE5RTaz2k1Y/</link><category>Developer</category><category>JIRA</category><category>rest</category><category>ruby</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rich Manalang</dc:creator><pubDate>Mon, 06 Feb 2012 08:00:49 PST</pubDate><guid isPermaLink="false">http://blogs.atlassian.com/?p=20356</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>One of the key features of the upcoming JIRA 5 release is the <a href="https://developer.atlassian.com/static/rest/jira/5.0-rc2.html">revamped REST API</a>. This API gives you full access to creating, reading, updating, and deleting issues as well as other metadata related to issues.</p>
<p>REST APIs provide for an easy and lightweight way to integrate with other apps using basic HTTP and JSON libraries. However, some developers might find it more useful to work on a client library that has a tighter interface to these REST APIs. Our friends at <a href="http://trineo.co.nz/">Trineo</a> decided to build a RubyGem that does just that.</p>
<p>Trineo’s <a href="https://github.com/trineo/jira-ruby">jira-ruby</a> gem was built just for JIRA 5’s REST API. It abstracts much of the boilerplate code that every developer has to deal with including OAuth. Here’s a sample of how to use the gem:</p>
<div class="codecolorer-container ruby mac-classic" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">client = <span style="color:#6666ff; font-weight:bold;">JIRA::Client</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>CONSUMER_KEY, CONSUMER_SECRET<span style="color:#006600; font-weight:bold;">&#41;</span><br />
<br />
project = client.<span style="color:#9900CC;">Project</span>.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'SAMPLEPROJECT'</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
project.<span style="color:#9900CC;">issues</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>issue<span style="color:#006600; font-weight:bold;">|</span><br />
<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;#{issue.id} - #{issue.summary}&quot;</span><br />
<span style="color:#9966CC; font-weight:bold;">end</span><br />
<br />
issue.<span style="color:#9900CC;">comments</span>.<span style="color:#9900CC;">each</span> <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>comment<span style="color:#006600; font-weight:bold;">|</span> ... <span style="color:#006600; font-weight:bold;">&#125;</span><br />
<br />
comment = issue.<span style="color:#9900CC;">comments</span>.<span style="color:#9900CC;">build</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#996600;">'body'</span>:<span style="color:#996600;">'My new comment'</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
comment.<span style="color:#9900CC;">save</span><br />
comment.<span style="color:#9900CC;">delete</span></div></div>
<p>It’s a great gem for working with JIRA 5. The best part is it’s open source, so feel free to <a href="https://github.com/trineo/jira-ruby">fork it</a> and send Trineo some new features.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=YE5RTaz2k1Y:nQxP2qto_FE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=YE5RTaz2k1Y:nQxP2qto_FE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?i=YE5RTaz2k1Y:nQxP2qto_FE:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AtlassianDeveloperBlog/~4/YE5RTaz2k1Y" height="1" width="1"/>]]></content:encoded><description>One of the key features of the upcoming JIRA 5 release is the revamped REST API. This API gives you full access to creating, reading, updating, and deleting issues as well as other metadata related to issues. REST APIs provide for an easy and lightweight way to integrate with other apps using basic HTTP and JSON libraries. However, some developers might find it more useful to work on a client library that has a tighter interface to these REST APIs. Our friends at Trineo decided to build a RubyGem that does just that. Trineo’s jira-ruby gem was built just for JIRA 5’s REST API. It abstracts much of the boilerplate code that every developer has to deal with including OAuth. Here’s a sample of how to use the gem: client = JIRA::Client.new&amp;#40;CONSUMER_KEY, CONSUMER_SECRET&amp;#41; project = client.Project.find&amp;#40;'SAMPLEPROJECT'&amp;#41; project.issues.each do &amp;#124;issue&amp;#124; puts &amp;#34;#{issue.id} - #{issue.summary}&amp;#34; end issue.comments.each &amp;#123;&amp;#124;comment&amp;#124; ... &amp;#125; comment = issue.comments.build&amp;#40;&amp;#123;'body':'My new comment'&amp;#125;&amp;#41; comment.save comment.delete It’s a great gem for working with JIRA 5. The best part is it’s open source, so feel free to fork it and send Trineo some new features.</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.atlassian.com/2012/02/jira-5-rubygem/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">2</slash:comments><feedburner:origLink>http://blogs.atlassian.com/2012/02/jira-5-rubygem/</feedburner:origLink></item><item><title>(Guest blog) Enter the Defect: When In Doubt, Report the Bug</title><link>http://feedproxy.google.com/~r/AtlassianDeveloperBlog/~3/OlGvGQob7wg/</link><category>Developer</category><category>qa</category><category>qa_innovation</category><category>testing</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ly Nguyen</dc:creator><pubDate>Tue, 31 Jan 2012 13:07:56 PST</pubDate><guid isPermaLink="false">http://blogs.atlassian.com/?p=20314</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em>This guest blog post is part of an <a href="http://blogs.atlassian.com/tag/qa_innovation/">Atlassian blog series</a> raising awareness about testing innovation within the QA community. You can find the other posts in this series under the <a href="http://blogs.atlassian.com/tag/qa_innovation/">QA Innovation tag</a>.</em></p>
<p><img class="alignright  wp-image-20317" title="Go2Group_Logo_JPG" src="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/Go2Group_Logo_JPG1-600x136.jpg" alt="" width="302" height="68" /></p>
<p><em>It&#8217;s written by Richard Hale, a Senior Consultant &amp; Director of Quality Assurance with <a href="http://http://www.go2group.com/">Go2Group</a>. <em>As an Atlassian Platinum Expert, Go2Group provides its clients with world-class ALM and Testing services, with expertise in integration solutions for Atlassian, HP, Perforce, MuleSoft, IBM, and SalesForce.com. </em></em></p>
<p>As a Director of Quality Assurance, I’ve been involved in many different software development environments and cultures. Many have been good and productive and some have been dysfunctional, for lack of a better word. Penny Wyatt touches briefly on the importance of <a href="http://blogs.atlassian.com/2012/01/testing-and-bad-smells-when-to-investigate-potential-bugs/">fostering a team culture that encourages testers to investigate and report bugs</a> in her post as well. In my experience, I’ve seen a team or certain sub-groups within the team reticent to report too many defects, or certain types of defects because they are sensitive topically, or hot points in the project, or “managing down” the defect count because of management sensitivity to the total defect count.</p>
<p>This is done for various reasons – usually for a perception management approach so that upper managers, who may not understand the value of a found defect, do not get a bad impression of the progress of their project. The practice, as I’ve observed it, is never a formality but always a covert attempt at re-working the total defect count (and sometimes other numbers) along the project’s procession.  At times, this can also often be at the behest of a middle manager who has a desire to manage the perception of his/her uppers. Sometimes this is at the request of a developer.</p>
<p>What I’d like to accomplish in this blog entry, is explore some of the examples I’ve seen, how they came about, and their real value for the project. These are just some case studies that we can hopefully learn a little from.</p>
<p>Typical scenarios I’ve observed are:</p>
<ul>
<li>The Lame Bug</li>
<li>“It’s Not a Requirement”</li>
<li>Developer is already fixing that &#8211; e.g. The Dev “knows about it”</li>
</ul>
<h2> “The Lame Bug”</h2>
<p>Sometimes QA is faced with complex environment, data or configuration issues that cause what seem to be defects. In this case, the ‘defect’ may not be in the code or functionality itself, but due to these issues, the result of test cases can be failures.</p>
<p>For example, say the tester was expecting to see certain data samples as part of their test environment, which includes pricing for a certain region, but their test cases fail because the proper pricing data is not present. It may be the responsibility of the Data or Development Team to ensure environments are setup properly. The failure of the test cases impact the timeline of testing, and waste QA time until the situation is resolved.</p>
<p>When they encounter this situation and enter defects, development teams may say, “Don’t enter that as a defect because it’s not a bug” – or that it’s a ‘lame bug’. However, this is a missed opportunity, if not entered and tracked, to correct a problem in the configuration management (CM) process or environment &amp; data setup process, application deployment methodology, etc.  The defect also captures the project effort and resources used to resolve the issues and can provide a valuable benchmark to ensure the issues do not arise again.</p>
<p>QA teams should be diligent about entering these types of defects, properly categorizing them, and working with the teams involved to pinpoint the root cause. <strong>Once the cause is identified, it could also change the way the defect is described &amp; characterized with attributes so that is an appropriate reference artifact</strong>. This will help the project’s key processes – those which actually support the life cycle– continually improve throughout the software development life cycle (SDLC).  Again, we capture the work involved for all teams in resolving these issues.</p>
<h2>“It’s Not a Requirement”</h2>
<p>This is a case where the requirement artifact(s) should have a defect entered against them.</p>
<p>The tester finds what seems to be a defect, although it’s not necessarily a test case failure. Sometimes this is found through ad-hoc style testing. When this happens, the tester must check with requirements team to confirm whether the issue they encountered is a gap in the requirement. What may normally happen here is that the requirement is quickly updated to include the intended functionality, and development and test teams continue with addressing this new requirement.</p>
<p>However, at this point, a better way of handling this situation would be entering the defect against the requirement artifact with the missing requirement, and assigning the Requirement Team resource. With proper issue types, this practice can help to <strong>track scenarios where testing uncovers necessary functionalities not originally included in the requirements documentation</strong> and capture this effort on the part of QA teams when it occurs. Otherwise, these incidents can be a hidden cost of the project’s development.</p>
<h2>“The Developer is Already Fixing That”</h2>
<p>Say QA is testing per requirements docs or test cases and the tester finds an issue in functionality: either it doesn’t exactly line up with requirements or there are unclear requirements surrounding a particular functionality, showing a gap in the documentation or expectations of the actual functionality of the product. The tester is fairly certain about the issue, but tries to confirm with developer. Then, the developer states, “Oh yes, I found this, it’s already fixed and will be in your next build.”</p>
<p>The result is that the tester never enters the bug, and the requirement documentation doesn’t get corrected. From there, a test case may not be specifically written for this feature and that’s the end of the conversation.</p>
<p>The problem here is that if QA does not document the defect properly and this type of scenario begins to happen with greater frequency, the <strong>project metrics and measure of progress will be skewed</strong>. As QA often spends effort interacting with the requirements team, business teams, and developers, the true value of effort is lost in this process is not accounted for. It’s always best to just enter the defect, and make sure to account for the new requirement. In this case, it may be necessary to enter a defect against the requirements artifact as well, so that any effort required in that activity can be tracked. This can help management isolate the issue of incomplete requirements if that problem becomes more frequent.</p>
<h2>Enter the Defect . . . with conviction!</h2>
<p>In summary, <strong>entering the defect is not a ‘bad’ thing</strong>.  Defects or issues – with proper typing across the various sorts of incidents – are a necessity to the entire project in:</p>
<ol>
<li>Helping improve processes and fostering continual improvement in team and individual disciplines</li>
<li>Capturing and quantifying the real cost of the project (e.g. identifying potential hidden costs)</li>
<li>Helping to isolate the root cause of certain project support issues, and resolving them (e.g. CM, environment, data)</li>
<li>Supporting more helpful project metrics</li>
</ol>
<p>The extremely important tasks of quantifying our work, tracking our progress, and continuous improvement are dependent upon the proper and good practice of entering issues.</p>
<p style="padding-left: 30px;"><em>Rich Hale has been involved in the software development industry for over 15 years.  He&#8217;s worked as a Developer, QA Analyst, Test Automation Architect and SDLC Tools &amp; Process Specialist. </em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=OlGvGQob7wg:hkat4ana1iA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=OlGvGQob7wg:hkat4ana1iA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?i=OlGvGQob7wg:hkat4ana1iA:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AtlassianDeveloperBlog/~4/OlGvGQob7wg" height="1" width="1"/>]]></content:encoded><description>This guest blog post is part of an Atlassian blog series raising awareness about testing innovation within the QA community. You can find the other posts in this series under the QA Innovation tag. It&amp;#8217;s written by Richard Hale, a Senior Consultant &amp;#38; Director of Quality Assurance with Go2Group. As an Atlassian Platinum Expert, Go2Group provides its clients with world-class ALM and Testing services, with expertise in integration solutions for Atlassian, HP, Perforce, MuleSoft, IBM, and SalesForce.com.  As a Director of Quality Assurance, I’ve been involved in many different software development environments and cultures. Many have been good and productive and some have been dysfunctional, for lack of a better word. Penny Wyatt touches briefly on the importance of fostering a team culture that encourages testers to investigate and report bugs in her post as well. In my experience, I’ve seen a team or certain sub-groups within the team reticent to report too many defects, or certain types of defects because they are sensitive topically, or hot points in the project, or “managing down” the defect count because of management sensitivity to the total defect count. This is done for various reasons – usually for a perception management approach so that upper managers, who may not understand the value of a found defect, do not get a bad impression of the progress of their project. The practice, as I’ve observed it, is never a formality but always a covert attempt at re-working the total defect count (and sometimes other numbers) along the project’s procession.  At times, this can also often be at the behest of a middle manager who has a desire to manage the perception of his/her uppers. Sometimes this is at the request of a developer. What I’d like to accomplish in this blog entry, is explore some of the examples I’ve seen, how they came about, and their real value for the project. These are just some case studies that we can hopefully learn a little from. Typical scenarios I’ve observed are: The Lame Bug “It’s Not a Requirement” Developer is already fixing that &amp;#8211; e.g. The Dev “knows about it”  “The Lame Bug” Sometimes QA is faced with complex environment, data or configuration issues that cause what seem to be defects. In this case, the ‘defect’ may not be in the code or functionality itself, but due to these issues, the result of test cases can be failures. For example, say the tester was expecting to see certain data samples as part of their test environment, which includes pricing for a certain region, but their test cases fail because the proper pricing data is not present. It may be the responsibility of the Data or Development Team to ensure environments are setup properly. The failure of the test cases impact the timeline of testing, and waste QA time until the situation is resolved. When they encounter this situation and enter defects, development teams may say, “Don’t enter that as a defect because it’s not a bug” – or that it’s a [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.atlassian.com/2012/01/enter-the-defect/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://blogs.atlassian.com/2012/01/enter-the-defect/</feedburner:origLink></item><item><title>AtlasCamp Europe 2012 agenda is now live!</title><link>http://feedproxy.google.com/~r/AtlassianDeveloperBlog/~3/PhxPRYmk7Vs/</link><category>Developer</category><category>atlascamp</category><category>developer tools</category><category>development tools</category><category>plugins</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rich Manalang</dc:creator><pubDate>Tue, 31 Jan 2012 04:00:41 PST</pubDate><guid isPermaLink="false">http://blogs.atlassian.com/?p=20305</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><a href="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/Atlassian-AtlasCamp-2012.png"><img class="alignright" title="AtlasCamp Europe 2012" src="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/Atlassian-AtlasCamp-2012.png" alt="" width="193" height="153" /></a>If you haven&#8217;t heard, <a href="http://www.atlassian.com/company/about/events/atlascampeu/2012">AtlasCamp is coming to Europe</a> on March 22nd and 23rd &#8212; fun times ahead! AtlasCamp is our annual developer event. Usually, we only hold this event in Half Moon Bay, California. This year we&#8217;ve decided to bring the party to our European developers. And today, we&#8217;ve posted the <a href="http://www.atlassian.com/company/about/events/atlascampeu/2012">agenda</a> filled with great content. This will be a great opportunity to mingle with Atlassian product managers, developers, and ecosystem members. If you&#8217;re interested in what AtlasCamp is all about, checkout the <a href="http://www.atlassian.com/atlascamp">videos</a> and <a href="http://www.flickr.com/photos/tags/atlascamp">photos</a> from last year&#8217;s AtlasCamp.</p>
<p>What are you waiting for? <a href="http://atlascampeu.eventbrite.com/">Register today</a>&#8230; and if you&#8217;re coming, make sure to add yourself to <a href="http://lanyrd.com/2012/atlascamp-europe/">our Lanyrd page</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=PhxPRYmk7Vs:oyIDY0WiaQc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=PhxPRYmk7Vs:oyIDY0WiaQc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?i=PhxPRYmk7Vs:oyIDY0WiaQc:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AtlassianDeveloperBlog/~4/PhxPRYmk7Vs" height="1" width="1"/>]]></content:encoded><description>If you haven&amp;#8217;t heard, AtlasCamp is coming to Europe on March 22nd and 23rd &amp;#8212; fun times ahead! AtlasCamp is our annual developer event. Usually, we only hold this event in Half Moon Bay, California. This year we&amp;#8217;ve decided to bring the party to our European developers. And today, we&amp;#8217;ve posted the agenda filled with great content. This will be a great opportunity to mingle with Atlassian product managers, developers, and ecosystem members. If you&amp;#8217;re interested in what AtlasCamp is all about, checkout the videos and photos from last year&amp;#8217;s AtlasCamp. What are you waiting for? Register today&amp;#8230; and if you&amp;#8217;re coming, make sure to add yourself to our Lanyrd page.</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.atlassian.com/2012/01/atlascamp-europe-2012-agenda-is-now-live/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://blogs.atlassian.com/2012/01/atlascamp-europe-2012-agenda-is-now-live/</feedburner:origLink></item><item><title>Practical JIRA Plugins – A book by Matt Doar</title><link>http://feedproxy.google.com/~r/AtlassianDeveloperBlog/~3/iHazkWGvnRs/</link><category>Developer</category><category>JIRA</category><category>Plugins</category><category>books</category><category>development tools</category><category>plugins</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rich Manalang</dc:creator><pubDate>Mon, 30 Jan 2012 08:29:58 PST</pubDate><guid isPermaLink="false">http://blogs.atlassian.com/?p=20250</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>I’ve always thought of software development as a creative process. It’s much more than just using tools and pushing bits and bytes around. However, without the right tools and knowledge to use them, crafting software becomes very difficult.</p>
<p>Atlassian’s plugin framework is a powerful tool for developers looking to build on top of our products. It allows you to apply one of our <a href="http://www.atlassian.com/company/about/values">core values</a>, “be the change you seek,” directly to our software. However, the power this framework provides is often challenging to harness without proper guidance.</p>
<p>Matt Doar is a great candidate for providing that guidance. He has worked on Atlassian products and have developed JIRA plugins for well over five years. Now he is the “Chief Toolsmith” at <a href="http://www.customware.net/">CustomWare</a>.</p>
<p><a href="http://www.amazon.com/Practical-JIRA-Plugins-Matthew-Doar/dp/1449308279/ref=sr_1_1?ie=UTF8&amp;qid=1327532126&amp;sr=8-1"><img class="alignright size-full wp-image-20251" style="border-style: initial; border-color: initial;" title="Practical JIRA Plugins" src="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/cat.gif" alt="" width="180" height="236" /></a></p>
<h2><strong>First Impressions</strong></h2>
<p>Matt Doar’s “Practical JIRA Plugins” provides new plugin developers guidance without the downside of feeling overwhelmed. He introduces the framework in a way that allows developers to get immersed in the most common type of plugins: the introduction of custom field types.</p>
<p>Practical JIRA Plugins starts by guiding the user through an overview of Atlassian’s <a href="https://developer.atlassian.com/display/DOCS/Atlassian+Plugin+SDK+Documentation">Plugin SDK</a> (the command line tool, generated files, what plugins can do, etc.). It’s a clear and concise introduction for those who haven’t used the framework before.</p>
<p>After the overview, Matt guides the reader in building a plugin that introduces a custom field type to JIRA. Through this plugin, the reader is introduced to Velocity templates, logging, the configuration system, WebWork actions, searchers, workflow, and data storage.</p>
<p>After this exercise, Matt introduces the reader to the process of publishing a plugin on the <a href="https://plugins.atlassian.com/">Atlassian Plugin Exchange</a> (<a href="https://plugins.atlassian.com/">plugins.atlassian.com</a>). He also touches on how to handle upgrading a plugin for newer versions of JIRA.</p>
<h2><strong>Summary</strong></h2>
<p>Practical JIRA Plugins is a great introduction to JIRA’s plugin framework. I’d recommend it to anyone who’s just starting out with the Atlassian plugin framework on JIRA. The current version of the book targets JIRA 4.2.4.</p>
<h2><strong>Book Details</strong></h2>
<p>Practical JIRA Plugins, by Matthew B. Doar, published by O’Reilly Media in July 2011. ISBN 978-1-449-30827-8. You can get it at <a href="http://www.amazon.com/Practical-JIRA-Plugins-Matthew-Doar/dp/1449308279/ref=sr_1_1?ie=UTF8&amp;qid=1327532126&amp;sr=8-1">Amazon.com</a>.</p>
<p>Congratulations and great job, Matt!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=iHazkWGvnRs:pjLgDupr0gA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=iHazkWGvnRs:pjLgDupr0gA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?i=iHazkWGvnRs:pjLgDupr0gA:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AtlassianDeveloperBlog/~4/iHazkWGvnRs" height="1" width="1"/>]]></content:encoded><description>I’ve always thought of software development as a creative process. It’s much more than just using tools and pushing bits and bytes around. However, without the right tools and knowledge to use them, crafting software becomes very difficult. Atlassian’s plugin framework is a powerful tool for developers looking to build on top of our products. It allows you to apply one of our core values, “be the change you seek,” directly to our software. However, the power this framework provides is often challenging to harness without proper guidance. Matt Doar is a great candidate for providing that guidance. He has worked on Atlassian products and have developed JIRA plugins for well over five years. Now he is the “Chief Toolsmith” at CustomWare. First Impressions Matt Doar’s “Practical JIRA Plugins” provides new plugin developers guidance without the downside of feeling overwhelmed. He introduces the framework in a way that allows developers to get immersed in the most common type of plugins: the introduction of custom field types. Practical JIRA Plugins starts by guiding the user through an overview of Atlassian’s Plugin SDK (the command line tool, generated files, what plugins can do, etc.). It’s a clear and concise introduction for those who haven’t used the framework before. After the overview, Matt guides the reader in building a plugin that introduces a custom field type to JIRA. Through this plugin, the reader is introduced to Velocity templates, logging, the configuration system, WebWork actions, searchers, workflow, and data storage. After this exercise, Matt introduces the reader to the process of publishing a plugin on the Atlassian Plugin Exchange (plugins.atlassian.com). He also touches on how to handle upgrading a plugin for newer versions of JIRA. Summary Practical JIRA Plugins is a great introduction to JIRA’s plugin framework. I’d recommend it to anyone who’s just starting out with the Atlassian plugin framework on JIRA. The current version of the book targets JIRA 4.2.4. Book Details Practical JIRA Plugins, by Matthew B. Doar, published by O’Reilly Media in July 2011. ISBN 978-1-449-30827-8. You can get it at Amazon.com. Congratulations and great job, Matt!</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.atlassian.com/2012/01/practical-jira-plugins-a-book-by-matt-doar/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">1</slash:comments><feedburner:origLink>http://blogs.atlassian.com/2012/01/practical-jira-plugins-a-book-by-matt-doar/</feedburner:origLink></item><item><title>(Guest blog) On the Redistribution of Testing – Part I</title><link>http://feedproxy.google.com/~r/AtlassianDeveloperBlog/~3/cxxXBnlHJcg/</link><category>Developer</category><category>qa</category><category>qa_innovation</category><category>testing</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ly Nguyen</dc:creator><pubDate>Wed, 25 Jan 2012 16:30:16 PST</pubDate><guid isPermaLink="false">http://blogs.atlassian.com/?p=20244</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em><a href="http://blogs.atlassian.com/2012/01/redistribution-of-testing-1/olympus-digital-camera-2/" rel="attachment wp-att-20246"><img class="alignright  wp-image-20246" title="paul-gerrard-redistributiion-of-testing" src="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/paulg1-228x300.jpg" alt="" width="148" height="194" /></a></em></p>
<p><em>This guest blog post is part of an <a href="http://blogs.atlassian.com/tag/qa_innovation/">Atlassian blog series</a> raising awareness about testing innovation within the QA community. You can find the other posts in this series under the <a href="http://blogs.atlassian.com/tag/qa_innovation/">QA Innovation tag</a>.</em></p>
<p><em>The post is written </em><em>by Paul Gerrard, a Principal of Gerrard Consulting Limited and is the host of the UK Test Management Forum. It is Part 1 of a two-part blog series on the future of QA testing.</em></p>
<p>Recently, there has been a spate of predictions of doom and gloom in our business.  Conference talks have had titles such as ‘Test is Dead’ and ‘Death to the Testing Phase’. ‘Testing has contributed little to quality improvement in the last ten years’, and even being a tester is a ‘bad thing’ – are all keynote themes that circulated at conferences, blogs and YouTube in late 2011.</p>
<p>My own company has been predicting the demise of the ‘plain old functional tester’ for years and we’ve predicted both good and bad outcomes of the technology and economic change that is going on right now. In July, I posted a blog, ‘<a href="http://gerrardconsulting.com/index.php?q=node/591" rel="nofollow">Testing is in a Mess</a>’, where I suggested that there&#8217;s complacency, self-delusion and over capacity in the testing business; there is too little agreement about what testing is, what it’s for or how it should be done.</p>
<p>There are some significant forces at play in the IT industry and I think the testing community, at least the testers in what might be called the more developed ‘testing nations’ will be coming under extreme pressure.</p>
<h2 id="QAGuestBlogOntheRedistributionofTesting–PartIPaulGerrard-TheForcesandFactorsthatwillSqueezeTesters">The Forces and Factors that will Squeeze Testers</h2>
<h3 id="QAGuestBlogOntheRedistributionofTesting–PartIPaulGerrard-Thegrowthoftestingasacareer">The growth of testing as a career</h3>
<p>Over the last twenty years or so there has been a dramatic growth in the number of people who test and call themselves testers and test managers. When I started in the testing business in 1992 in the UK, few people called themselves a tester, let alone thought of themselves as having a career in testing. Now, there are tens of thousands in the UK alone. Twenty years ago, there were perhaps five companies offering testing services. There must be ten times that number now and there are hundreds, perhaps thousands of freelancers who specialise and make a living in testing. Beyond this of course, the large system integration and outsourcing firms have significant testing practices with hundreds or even thousands of staff, many offshored of course.</p>
<p>It’s not that more testing happens. I think it’s because the people who do it are now recruited into teams, having managers who plan, resource and control sizable budgets in software projects to perform project test stages. Many ‘career testers’ have never done anything else.</p>
<h3 id="QAGuestBlogOntheRedistributionofTesting–PartIPaulGerrard-Lackofadvanceinthediscipline">Lack of advance in the discipline</h3>
<p>The sources and sheer volume of testing knowledge have exploded. There are countless papers, articles, blogs and books available now, and there are many conferences, forums, meet-ups and training courses available too. But, even though the volume of information is huge, most of it is not new. As a frequent conference goer over 20 years, it depresses me that the innovation one sees in conferences, for example,  tends to be focused on the testers’ struggle to keep pace with and test new technologies rather than insights and inventions that move the tester’s discipline forward.</p>
<p>Nowadays, much more attention is paid to the management of testing, testers and stakeholders expectations and decision-making. But if you consider the argument that perhaps test management is a non-discipline, that is  there is no such thing as test management, there’s just management, and you take the management away – what’s left? Mostly challenges in test logistics – or just logistics – another management discipline?</p>
<h3 id="QAGuestBlogOntheRedistributionofTesting–PartIPaulGerrard-AdvancesinAutomation">Advances(?) in Automation</h3>
<p>What about the fantastic advances in automation? Let’s look at the two biggest types ot test automation.</p>
<p>Test execution robots are still, well, just robots. The advances in these have traced the increased complexity of the products used to build and deliver functionality. From green-screen to client/server to GUI to Web, to SOA, the test automation engineer of 1970 (once they got over the shock of reincarnation) would quickly recognise the patterns of test automation used today. Of course, the automation frameworks are helping to make test automation somewhat more productive, but one could argue that people have been building their own custom frameworks for years and years and they should have been mainstream many years ago.</p>
<p>The test management tools that are out there are fantastic. Integrated test case management, scheduling, logging and incident management and reporting. Except that the fundamental purpose of these tools is basic record-keeping and collaboration. Big deal. The number of companies who continue to use Excel as their prime test management tools shows just how limited the test management tools are in what they do. Most organisations get away without test management products altogether because these products support the clerical test activities and logistics, but do little or nothing to support the intellectual effort of testers.</p>
<h3 id="QAGuestBlogOntheRedistributionofTesting–PartIPaulGerrard-TheEmergenceDominanceofCertification">The Emergence/Dominance of Certification</h3>
<p>The test certification schemes have gone global it seems. Dorothy Graham and I had an idea for a ‘Foundation’ certification in 1997 and we presented a one page syllabus proposal to an ad-hoc meeting at the Star WEST conference in San Jose to gauge interest. There wasn’t much. So we came back to the UK, engaged with ISEB (not part of BCS in those days) and I became the founding Chair of the initial ISEB Testing Board. About ten or so UK folk kicked off the development of the Foundation scheme which had its first outing in late 1998.</p>
<p>As Dorothy says on her blog, <a href="http://dorothygraham.blogspot.com/2011/02/part-2-bit-of-history-about-istqb.html" rel="nofollow">the Foundation met its main objective</a> of “removing the bottom layer of ignorance” about software testing. Fourteen years and 150,000 certificate awards later, it does the same. Except that for many people it’s all they need (and may ever need) to get a job in the industry.</p>
<h3 id="QAGuestBlogOntheRedistributionofTesting–PartIPaulGerrard-TheAgileJuggernaut">The Agile Juggernaut</h3>
<p>Agile is here to stay. Increasingly, developers seem to take test, Test-Driven and Behaviour-Driven Development and Specification by Example more seriously. Continuous Integration and Delivery is the heartbeat, test, life-support and early warning system. The demands for better testing in development are being met. A growing number of developers have known no other way.</p>
<p>It seems likely that if this trend continues, we’ll get better, stable software sooner and much of the checking done late by system testers will not be required. Will this reduce the need for system testers? You bet.</p>
<p>Some Agile projects don’t use testers – the testers perform a ‘test assurance’ role instead. The demand for unskilled testers reduces and the need for a smaller number of smarter testers with an involvement spread over multiple projects increases.</p>
<h2 id="QAGuestBlogOntheRedistributionofTesting–PartIPaulGerrard-WhatistheSqueeze">What is the Squeeze?</h2>
<p>The forces above are squeezing testers from the ‘low-value’ unskilled, downstream role to upstream, business-savvy, workflow-oriented, UX (user experience)-aware testing specialists with new tools. Developers are absorbing a lot of checking that is automated. Some business analysts are taking their chance and absorbing test disciplines into analysis and are taking over the acceptance process.</p>
<p>If a 3 day certification is all you need to be a professional tester, no wonder employers think testing is a commodity, so will outsource it when they can.</p>
<p>Stakeholders know that avoiding defects is better than finding them. Old-style testing is effective but happens at the end. Stakeholders will say, “Let’s take requirements more seriously; force developers to test and outsource the paperwork”.</p>
<p>Smart testers need to understand they are in the information business, that testing is being re-distributed in projects and if they are not alert, agile even, they will be squeezed out. Needless to say, the under-skilled testers, relying on clerical skills to get by will be squeezed out.</p>
<h2 id="QAGuestBlogOntheRedistributionofTesting–PartIPaulGerrard-AMethodologicalShift">A Methodological Shift</h2>
<p>There seems to be a methodological shift from staged, structured projects to iterative and Agile and now, towards ‘continuous delivery’. Just as companies seem to be coming to terms with Agile – it’s all going to change again. They are now being invited to consider continuous ‘Specification by Example’ approaches. Specification by example promotes a continual process of specification, exampling, test-first, and continuous integration.</p>
<p>But where does the tester fit in this environment?</p>
<p>I’ll make some suggestions on what might happen and what you might do about it in the second part of this article.</p>
<p style="padding-left: 30px;"><em>Paul Gerrard is a consultant, teacher, author, webmaster, programmer, tester, conference speaker, rowing coach and most recently a publisher. He has conducted consulting assignments in all aspects of software testing and quality assurance, specialising in test assurance. He has presented keynote talks and tutorials at testing conferences across Europe, the USA, Australia, South Africa and occasionally won awards for them. <em>Find him on Twitter at <a href="https://twitter.com/#!/paul_gerrard" rel="nofollow">@paul_gerrard</a> or his site, <a href="http://gerrardconsulting.com/" rel="nofollow">Gerrard Consulting</a>.</em></em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=cxxXBnlHJcg:C48xqrKNFbI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=cxxXBnlHJcg:C48xqrKNFbI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?i=cxxXBnlHJcg:C48xqrKNFbI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AtlassianDeveloperBlog/~4/cxxXBnlHJcg" height="1" width="1"/>]]></content:encoded><description>This guest blog post is part of an Atlassian blog series raising awareness about testing innovation within the QA community. You can find the other posts in this series under the QA Innovation tag. The post is written by Paul Gerrard, a Principal of Gerrard Consulting Limited and is the host of the UK Test Management Forum. It is Part 1 of a two-part blog series on the future of QA testing. Recently, there has been a spate of predictions of doom and gloom in our business.  Conference talks have had titles such as ‘Test is Dead’ and ‘Death to the Testing Phase’. ‘Testing has contributed little to quality improvement in the last ten years’, and even being a tester is a ‘bad thing’ – are all keynote themes that circulated at conferences, blogs and YouTube in late 2011. My own company has been predicting the demise of the ‘plain old functional tester’ for years and we’ve predicted both good and bad outcomes of the technology and economic change that is going on right now. In July, I posted a blog, ‘Testing is in a Mess’, where I suggested that there&amp;#8217;s complacency, self-delusion and over capacity in the testing business; there is too little agreement about what testing is, what it’s for or how it should be done. There are some significant forces at play in the IT industry and I think the testing community, at least the testers in what might be called the more developed ‘testing nations’ will be coming under extreme pressure. The Forces and Factors that will Squeeze Testers The growth of testing as a career Over the last twenty years or so there has been a dramatic growth in the number of people who test and call themselves testers and test managers. When I started in the testing business in 1992 in the UK, few people called themselves a tester, let alone thought of themselves as having a career in testing. Now, there are tens of thousands in the UK alone. Twenty years ago, there were perhaps five companies offering testing services. There must be ten times that number now and there are hundreds, perhaps thousands of freelancers who specialise and make a living in testing. Beyond this of course, the large system integration and outsourcing firms have significant testing practices with hundreds or even thousands of staff, many offshored of course. It’s not that more testing happens. I think it’s because the people who do it are now recruited into teams, having managers who plan, resource and control sizable budgets in software projects to perform project test stages. Many ‘career testers’ have never done anything else. Lack of advance in the discipline The sources and sheer volume of testing knowledge have exploded. There are countless papers, articles, blogs and books available now, and there are many conferences, forums, meet-ups and training courses available too. But, even though the volume of information is huge, most of it is not new. As a frequent conference goer over 20 years, it depresses [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.atlassian.com/2012/01/redistribution-of-testing-1/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">10</slash:comments><feedburner:origLink>http://blogs.atlassian.com/2012/01/redistribution-of-testing-1/</feedburner:origLink></item><item><title>(Guest blog) Finding the Right Foot: Testing Efficiency Through Engineering Efficiency</title><link>http://feedproxy.google.com/~r/AtlassianDeveloperBlog/~3/itvJvAasfn4/</link><category>Developer</category><category>qa</category><category>qa_innovation</category><category>testing</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Ly Nguyen</dc:creator><pubDate>Tue, 24 Jan 2012 09:06:48 PST</pubDate><guid isPermaLink="false">http://blogs.atlassian.com/?p=20233</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p><em><a href="http://blogs.atlassian.com/2012/01/guest-blog-finding-the-right-foot-testing-engineering-efficiency/catherine_powell_lowres2/" rel="attachment wp-att-20234"><img class="alignright" title="catherine_powell_testing_efficiency" src="http://atlassian.wpengine.netdna-cdn.com/wp-content/uploads/catherine_powell_lowres2-150x150.jpg" alt="" width="150" height="150" /></a></em></p>
<p><em>This guest blog post is part of an <a href="http://blogs.atlassian.com/tag/qa_innovation/">Atlassian blog series</a> raising awareness about testing innovation within the QA community. You can find the other posts in this series under the <a href="http://blogs.atlassian.com/tag/qa_innovation/">QA Innovation tag</a>.</em></p>
<p><em>The post is written by</em><em> Catherine Powell, a principal at Abakas, a software consulting company. At Abakas, she provides engineering management, development, testing, and process consulting services. </em></p>
<p>Ahh, the glories of software creation. We have an idea, and an idea turns into a list, and a list turns into code plus more lists, which turns into more code and new machines in production ready to share our great new software with the world. And there are a few caffeine-fueled late nights, and there are a few company-sponsored lunches and demos. And then we&#8217;re ready&#8230; just as soon as we run one last regression test cycle. And it&#8217;s going to take way too long. We&#8217;re all excited and ready to go, and we have to stop to wait for test. It&#8217;s the last thing to finish, and there are never enough testers during those end crunch times, and we keep having to cut corners to make releases happen on time. Plus, it frequently points out that we made the same mistakes we always make. So then we have to patch things and fix configurations and tweak it. That darn testing!</p>
<h2>So how do we fix it?</h2>
<p>How do we keep testing from being a bottleneck?</p>
<p>Simple. We do less of it. We minimize that end-of-cycle testing holdup. And we do THAT by building trust in our development and in our software creation, deployment, and maintenance process. Test cycles, particularly regression test cycles, are ultimately driven by fear. We do a &#8220;test pass at the end&#8221; because we do not trust that the activities that lead up to this point have resulted in robust, deployable software that does what we meant for it to do. Fix that lack of trust, and we can skip the extended test cycle.</p>
<p>There&#8217;s an old saying about starting off on the right foot. We don&#8217;t always have the luxury of starting (or restarting), but we can find the right foot, even on an ongoing project. <strong>To improve our testing, to make it more efficient, we have to address the whole software development life cycle.</strong> We must find our underlying fear and fix it instead of hiding behind an ever-larger test cycle.</p>
<p>The tricky thing about the fear driving the &#8220;test pass at the end&#8221; is that it&#8217;s frequently justified. We keep finding bugs, or configuration errors, or data problems, or deployment failures. We can&#8217;t stop testing when it keeps finding things that we really do need to know! Step one to reducing this test phase is finding the true underlying problems causing our fear, and fixing those. In other words, to make testing more efficient, we have to fix everything else.</p>
<h2>The Underlying Problems</h2>
<p>Let&#8217;s look at some of the more common problems that cause fear, and what we can do about it:</p>
<ul>
<li>We fear that our deployment didn&#8217;t work or wasn&#8217;t complete, so we test. Instead, we can <strong>automate deployment</strong> so code gets into QA the same way it gets into production. That way we only have to test in one environment (QA), not two.</li>
<li>We fear that a developer forgot to check something in or didn&#8217;t make the build properly, so we test. Instead, we can <strong>set up a build system and only test &#8211; or deploy &#8211; from there</strong>. Again, it means we only test a build once, not once per environment.</li>
<li>We fear that a new feature accidentally broke the old way things worked, and that customers want the old way and the new way to both work, so we test. Instead, we can <strong>create a regression test suite and automate it</strong>, so the build system can run it every time we check in code. There&#8217;s no need to wait until the end to find out that something regressed.</li>
<li>We fear that some underlying change &#8211; a browser version or OS patch &#8211; broke our software, so we test. Instead, we can schedule that testing at a different point in the cycle. <strong>Tie it to the release of the software we&#8217;re worried about</strong>, not to our own release schedule. Let our regression suite (see above) help us find major problems, watch the release patterns of the software with which we interact, and don&#8217;t test just because something might have changed. Reserve this for when something actually did change.</li>
<li>We fear that several features coming together at the very end will break each other, so we test. This one we still need to test! We can &#8211; and should &#8211; try to bring in features serially over time, but if the development team is larger than about two people, there&#8217;s going to be a bit of a rush trying to get things in before some deadline, whether that deadline is a sprint, a release, or just Friday. <strong>Minimize it where possible</strong>, and then move everything else out of the way so only this much smaller task is left.</li>
</ul>
<h2>Test smarter, not harder</h2>
<p>Fear causes us to take on large test cycles near the end of a release (or sprint or story or whatever the &#8220;chunks&#8221; are in a given project). We perform slow, repetitive tasks with a relatively low value, just because of that fear. Eliminate the source of the fear, automate the repetitive and low value tasks, and make that end testing cycle less of a bottleneck.  Get the software on the right foot, and you&#8217;ll free testers to do the activities that not only assuage fear, but that truly provide value.</p>
<p style="padding-left: 30px;"><em><em>Catherine Powell</em> has worked with a broad range of software, including an enterprise storage system, a web-based healthcare system, data synchronization applications on mobile devices, and webapps of various flavors. She is an author, speaker and a mentor to engineers and technical managers. Catherine focuses primarily on the realities of shipping software in small and mid-size companies. Catherine&#8217;s published works, blog, and contact information can be found at <a href="http://www.abakas.com/">www.abakas.com</a>.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=itvJvAasfn4:047BufLgt5g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=itvJvAasfn4:047BufLgt5g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?i=itvJvAasfn4:047BufLgt5g:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AtlassianDeveloperBlog/~4/itvJvAasfn4" height="1" width="1"/>]]></content:encoded><description>This guest blog post is part of an Atlassian blog series raising awareness about testing innovation within the QA community. You can find the other posts in this series under the QA Innovation tag. The post is written by Catherine Powell, a principal at Abakas, a software consulting company. At Abakas, she provides engineering management, development, testing, and process consulting services.  Ahh, the glories of software creation. We have an idea, and an idea turns into a list, and a list turns into code plus more lists, which turns into more code and new machines in production ready to share our great new software with the world. And there are a few caffeine-fueled late nights, and there are a few company-sponsored lunches and demos. And then we&amp;#8217;re ready&amp;#8230; just as soon as we run one last regression test cycle. And it&amp;#8217;s going to take way too long. We&amp;#8217;re all excited and ready to go, and we have to stop to wait for test. It&amp;#8217;s the last thing to finish, and there are never enough testers during those end crunch times, and we keep having to cut corners to make releases happen on time. Plus, it frequently points out that we made the same mistakes we always make. So then we have to patch things and fix configurations and tweak it. That darn testing! So how do we fix it? How do we keep testing from being a bottleneck? Simple. We do less of it. We minimize that end-of-cycle testing holdup. And we do THAT by building trust in our development and in our software creation, deployment, and maintenance process. Test cycles, particularly regression test cycles, are ultimately driven by fear. We do a &amp;#8220;test pass at the end&amp;#8221; because we do not trust that the activities that lead up to this point have resulted in robust, deployable software that does what we meant for it to do. Fix that lack of trust, and we can skip the extended test cycle. There&amp;#8217;s an old saying about starting off on the right foot. We don&amp;#8217;t always have the luxury of starting (or restarting), but we can find the right foot, even on an ongoing project. To improve our testing, to make it more efficient, we have to address the whole software development life cycle. We must find our underlying fear and fix it instead of hiding behind an ever-larger test cycle. The tricky thing about the fear driving the &amp;#8220;test pass at the end&amp;#8221; is that it&amp;#8217;s frequently justified. We keep finding bugs, or configuration errors, or data problems, or deployment failures. We can&amp;#8217;t stop testing when it keeps finding things that we really do need to know! Step one to reducing this test phase is finding the true underlying problems causing our fear, and fixing those. In other words, to make testing more efficient, we have to fix everything else. The Underlying Problems Let&amp;#8217;s look at some of the more common problems that cause fear, and what we can do about it: We fear that our deployment didn&amp;#8217;t [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.atlassian.com/2012/01/guest-blog-finding-the-right-foot-testing-engineering-efficiency/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://blogs.atlassian.com/2012/01/guest-blog-finding-the-right-foot-testing-engineering-efficiency/</feedburner:origLink></item><item><title>Anatomy Of An Atlassian FedEx Day Win</title><link>http://feedproxy.google.com/~r/AtlassianDeveloperBlog/~3/tAXc-NLAYUk/</link><category>Confluence</category><category>Developer</category><category>Life at Atlassian</category><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Wesley Walser</dc:creator><pubDate>Thu, 19 Jan 2012 06:00:32 PST</pubDate><guid isPermaLink="false">http://blogs.atlassian.com/?p=20192</guid><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h2>Atlassian Fed What?</h2>
<p>At Atlassian, we work hard to ship great products to our amazing customers. Another thing we like to do is set aside some time to let our brains run wild. Every last employee has some idea in the back of their mind about a product improvement and we think it&#8217;s critical to give them time to make those ideas a reality. FedEx day is a day, once a quarter, where we all set aside our day to day and run a 24 hour gauntlet to see what we can deliver in that time frame.</p>
<p>It&#8217;s also a great kick in the pants to finally build that thing you&#8217;ve been saying would make customers lives easier if it could just land on the backlog. We encourage people to form teams at the end get together, demo the final output and vote on a winner. The chance at glory gives you the push you&#8217;ve needed to finally prototype that idea that&#8217;s been rolling around.</p>
<p>For a bit more information on Atlassian FedEx days take a look on the <a href="http://www.atlassian.com/company/about/fedex">About Us</a> section of <a href="http://www.atlassian.com/company/about/fedex">Atlassian.com</a>.</p>
<h2>Winning FedEx</h2>
<h3>Clear Customer Value</h3>
<p>The most important part of a FedEx day project that has aspirations of winning is to create something that shows clear customer value. Atlassian is full of engineers, so we value engineering quality and beautiful code but at the end of the day we&#8217;re all about customers. So while we enjoy a presentation on this cool new thing a computer can do, if we can&#8217;t figure out how it&#8217;s going to make a customers life easier it&#8217;s probably not going to win FedEx.</p>
<p>Our most recent FedEx day was October 27/28 and several great things came out of it. The winner this time around was a Confluence Plugin called Autoconvert and we think it&#8217;s going to make quickly creating great content in Confluence even easier.</p>
<p>Autoconvert solves the problem of sharing links to other content within a Confluence page. Right now you might be thinking to yourself that there is no problem with linking to content. Creating a link is simple in Confluence. If you just want to share a plain old link, you can copy and paste it into the editor and autoformat will take care of making it into a clickable link and if you want to share a link to content within another Atlassian product you can even use macros so that the content is intelligently linked too, providing hover information about what&#8217;s behind the link.</p>
<p>The Autoconvert team decided that this way of creating links was broken. You shouldn&#8217;t have to know which button to press, or which macro to use when you want to create these `intelligent links` Confluence should know what content it can link to intelligently and just do the work for you.</p>
<p>That&#8217;s exactly what Autoconvert does. It enables Confluence to make decisions about the links you paste in. If it understands what you&#8217;re linking to, it will transform the link into the best possible experience for a user reading the page. If you paste a link to a YouTube video, the link will get transformed into an embedded player to show the video at that location. If the link goes to another Confluence page, the link text changes to the title of that page and will update should the page title ever change in the future.</p>
<p>Watch the Autoconvert demo video below to get a better idea.</p>
<p><iframe width="600" height="338" src="http://www.youtube.com/embed/2XQlQGf0lnk?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<h3>Leverage Existing Tech</h3>
<p>24 hours is not much time to churn out something interesting from scratch. In fact it&#8217;s nearly impossible. Instead a FedEx project should leverage existing technology that at least one person on the team has a solid understanding of. This doesn&#8217;t have to be Atlassian specific code or product, we&#8217;re huge fans of open source and we love it when we discover a new project that&#8217;s going to help us ship something amazing.</p>
<p>With the recent launch of <a href="http://www.atlassian.com/en/confluence-content-collaboration">Confluence 4.0</a>, Atlassian has been investing in our new <a href="http://www.atlassian.com/software/confluence/features#editor">Rich Text Editor</a> for around a year with nearly every member of the Confluence team contributing to the editor in some way by the wrap up of 4.0 development. This makes the RTE a great launch pad for a FedEx day project. This is how the Autoconvert team was able to get so many intelligent link transformations in by the end of the 24 hour window. The core of Autoconvert is a simple editor plugin that extends the already solid autoformatting of links on paste.</p>
<h3>Make It Extensible</h3>
<p>This is a bit of social engineering that helps one to win an Atlassian FedEx Day. As mentioned, we&#8217;ve got a very strong engineering culture and as such we love anything we can extend and customize to serve our own purposes. So making sure that you FedEx project has extension or plugin points and talking about those when the final presentations roll around can help get you those few extra votes that count.</p>
<p>From a developers perspective Autoconvert is less about how intelligent it makes Confluence, but about how easy it makes adding more of this intelligence. The core plugin is actually just an extension point through which plugin developers can tell Confluence how it should treat links of certain types.</p>
<div class="codecolorer-container javascript dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">//From any editor plugin</span><br />
editor.<span style="color: #660066;">exeCommand</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'addAutoconverter'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>uri<span style="color: #339933;">,</span> anchor<span style="color: #339933;">,</span> done<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
<span style="color: #006600; font-style: italic;">//provide a callback that calls done passing it a new DOM node.</span><br />
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>uri.<span style="color: #660066;">host</span>.<span style="color: #660066;">match</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.*youtu<span style="color: #000099; font-weight: bold;">\.</span>be.*'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #003366; font-weight: bold;">var</span> vidId <span style="color: #339933;">=</span> uri.<span style="color: #660066;">path</span>.<span style="color: #660066;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #003366; font-weight: bold;">var</span> newurl <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;http://youtube.com/watch?v=&quot;</span> <span style="color: #339933;">+</span> vidId<span style="color: #339933;">;</span><br />
done<span style="color: #009900;">&#40;</span> $<span style="color: #009900;">&#40;</span>node<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;href&quot;</span><span style="color: #339933;">,</span> newurl<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>newurl<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #006600; font-style: italic;">//not a URI that our plugin handles, just call done passing nothing.</span><br />
done<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>In 9 lines of code we&#8217;ve added handling for YouTube&#8217;s URL shortener youtu.be.</p>
<p>The excellent plugin tutorial <a href="https://developer.atlassian.com/display/CONFDEV/Plugin+Tutorial+-+Extending+Autoconvert">Extending Autoconvert</a> gives an explanation of each step in creating a Confluence extension that makes use of Autoconvert.</p>
<h3>Learn Something</h3>
<p>You&#8217;re going to need fans among the voters. People who when voting will mention casually to their friends that your team is the obvious winner, and keep in mind that these fans probably pitched their own FedEx project just a few minutes ago. These fans come along pretty naturally when you do all points mentioned above.</p>
<ul>
<li>Create Customer Value</li>
<li>Leverage Existing Tech</li>
<li>Demo The New Shiny</li>
<li>Make it Extensible</li>
</ul>
<p>But it&#8217;s really not about winning at all. Autoconvert won FedEx and when presented with the opportunity to give a speech every member of the team said thanks into the mic and passed it along. We&#8217;re all pretty happy about the fact that we work with people who want to create new shiny stuff that will actually have an impact on users.</p>
<p>With that in mind it&#8217;s critically important to do something on FedEx day that you can actually learn from. With Autoconvert some of us learned a bit about how easy it is to write an extension for the Confluence RTE. It&#8217;s also the first that that some of us have used a style of programming called continuation passing. We actually thought that these two points were interesting enough that we open sourced the code for Autoconvert it&#8217;s up on GitHub <a href="https://github.com/atlassian/autoconvert">here</a>.</p>
<h2>Join Us For FedEx Day</h2>
<p>Could you win FedEx day without breaking a sweat? You should come work for Atlassian. We&#8217;re on the lookout for <a href="http://www.atlassian.com/company/careers/jobs">several different types of awesome</a>.</p>
<p>&nbsp;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=tAXc-NLAYUk:JMeCAYyylAg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?a=tAXc-NLAYUk:JMeCAYyylAg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/AtlassianDeveloperBlog?i=tAXc-NLAYUk:JMeCAYyylAg:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/AtlassianDeveloperBlog/~4/tAXc-NLAYUk" height="1" width="1"/>]]></content:encoded><description>Atlassian Fed What? At Atlassian, we work hard to ship great products to our amazing customers. Another thing we like to do is set aside some time to let our brains run wild. Every last employee has some idea in the back of their mind about a product improvement and we think it&amp;#8217;s critical to give them time to make those ideas a reality. FedEx day is a day, once a quarter, where we all set aside our day to day and run a 24 hour gauntlet to see what we can deliver in that time frame. It&amp;#8217;s also a great kick in the pants to finally build that thing you&amp;#8217;ve been saying would make customers lives easier if it could just land on the backlog. We encourage people to form teams at the end get together, demo the final output and vote on a winner. The chance at glory gives you the push you&amp;#8217;ve needed to finally prototype that idea that&amp;#8217;s been rolling around. For a bit more information on Atlassian FedEx days take a look on the About Us section of Atlassian.com. Winning FedEx Clear Customer Value The most important part of a FedEx day project that has aspirations of winning is to create something that shows clear customer value. Atlassian is full of engineers, so we value engineering quality and beautiful code but at the end of the day we&amp;#8217;re all about customers. So while we enjoy a presentation on this cool new thing a computer can do, if we can&amp;#8217;t figure out how it&amp;#8217;s going to make a customers life easier it&amp;#8217;s probably not going to win FedEx. Our most recent FedEx day was October 27/28 and several great things came out of it. The winner this time around was a Confluence Plugin called Autoconvert and we think it&amp;#8217;s going to make quickly creating great content in Confluence even easier. Autoconvert solves the problem of sharing links to other content within a Confluence page. Right now you might be thinking to yourself that there is no problem with linking to content. Creating a link is simple in Confluence. If you just want to share a plain old link, you can copy and paste it into the editor and autoformat will take care of making it into a clickable link and if you want to share a link to content within another Atlassian product you can even use macros so that the content is intelligently linked too, providing hover information about what&amp;#8217;s behind the link. The Autoconvert team decided that this way of creating links was broken. You shouldn&amp;#8217;t have to know which button to press, or which macro to use when you want to create these `intelligent links` Confluence should know what content it can link to intelligently and just do the work for you. That&amp;#8217;s exactly what Autoconvert does. It enables Confluence to make decisions about the links you paste in. If it understands what you&amp;#8217;re linking to, it will transform the link into the [...]</description><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.atlassian.com/2012/01/anatomy-of-an-atlassian-fedex-day-win/feed/</wfw:commentRss><slash:comments xmlns:slash="http://purl.org/rss/1.0/modules/slash/">0</slash:comments><feedburner:origLink>http://blogs.atlassian.com/2012/01/anatomy-of-an-atlassian-fedex-day-win/</feedburner:origLink></item></channel></rss>

