<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Third Shelf</title>
	<atom:link href="http://thirdshelf.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://thirdshelf.com</link>
	<description></description>
	<lastBuildDate>Sun, 13 May 2012 17:08:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='thirdshelf.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Third Shelf</title>
		<link>http://thirdshelf.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://thirdshelf.com/osd.xml" title="Third Shelf" />
	<atom:link rel='hub' href='http://thirdshelf.com/?pushpress=hub'/>
		<item>
		<title>Inventing on Principle</title>
		<link>http://thirdshelf.com/2012/02/19/inventing-on-principle/</link>
		<comments>http://thirdshelf.com/2012/02/19/inventing-on-principle/#comments</comments>
		<pubDate>Sun, 19 Feb 2012 16:06:15 +0000</pubDate>
		<dc:creator>Sydney du Plooy</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[Bret Victor]]></category>
		<category><![CDATA[Bret Victor - Inventing]]></category>
		<category><![CDATA[inventing]]></category>
		<category><![CDATA[Larry Tesler]]></category>
		<category><![CDATA[Principle]]></category>
		<category><![CDATA[Richard Stallman]]></category>

		<guid isPermaLink="false">http://thirdshelf.com/?p=800</guid>
		<description><![CDATA[I just finished watching an excellent talk by Bret Victor on Inventing on Principle. The talk inspires you to find your guiding principle through a process of defining your identity using experience and having insight into a particular problem.  His personal guiding principle is that creators need an immediate connection, viz., any changes that the creator makes [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=800&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just finished watching an excellent talk by <a href="http://www.worrydream.com" target="_blank">Bret Victor</a> on Inventing on Principle. The talk inspires you to find your <a class="zem_slink" title="Principle" href="http://en.wikipedia.org/wiki/Principle" rel="wikipedia">guiding principle</a> through a process of defining your identity using experience and having insight into a particular problem.  His personal guiding principle is that creators need an immediate connection, viz., any changes that the creator makes should have instantaneous feedback.</p>
<p>Interestingly, he says that one&#8217;s identity is not defined by craft but by the guiding principle that you uphold. He uses <a href="http://www.nomodes.com" target="_blank">Larry Tesler</a> as an example whose guiding principle is &#8220;No person should be trapped in a mode&#8221; and <a class="zem_slink" title="Richard Stallman" href="http://en.wikipedia.org/wiki/Richard_Stallman" rel="wikipedia">Richard Stallman</a> whose guiding principle is &#8220;Software must be free&#8221;, among others. I urge you to take the time, watch this video and find your guiding principle.</p>
<p style="text-align:left;"><div class='embed-vimeo' style='text-align:center;'><iframe src='http://player.vimeo.com/video/36579366' width='400' height='225' frameborder='0'></iframe></div></p>
<p style="text-align:left;"><a href="http://vimeo.com/36579366">Bret Victor &#8211; Inventing on Principle</a> from <a href="http://vimeo.com/cusec">CUSEC</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thirdshelf.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thirdshelf.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thirdshelf.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thirdshelf.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thirdshelf.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thirdshelf.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thirdshelf.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thirdshelf.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thirdshelf.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thirdshelf.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thirdshelf.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thirdshelf.wordpress.com/800/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thirdshelf.wordpress.com/800/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thirdshelf.wordpress.com/800/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=800&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thirdshelf.com/2012/02/19/inventing-on-principle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Sydney</media:title>
		</media:content>
	</item>
		<item>
		<title>Stress and motivation</title>
		<link>http://thirdshelf.com/2012/01/02/stress-and-motivation/</link>
		<comments>http://thirdshelf.com/2012/01/02/stress-and-motivation/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 12:49:40 +0000</pubDate>
		<dc:creator>Sydney du Plooy</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[Expectancy theory]]></category>
		<category><![CDATA[Health]]></category>
		<category><![CDATA[Herzberg]]></category>
		<category><![CDATA[Human Resources]]></category>
		<category><![CDATA[Hygiene factors]]></category>
		<category><![CDATA[Maslow's hierarchy of needs]]></category>
		<category><![CDATA[Motivation]]></category>
		<category><![CDATA[Project management]]></category>
		<category><![CDATA[Theory X and theory Y]]></category>
		<category><![CDATA[Victor Vroom]]></category>

		<guid isPermaLink="false">http://thirdshelf.com/?p=777</guid>
		<description><![CDATA[Motivating and managing people is a tricky business. How then do we manage stress and keep people motivated? Theory X and Theory Y Donald McGregor identified two attitudes known as Theory X and Theory Y. In short, Theory X is someone that has an innate dislike of work and tends to avoid responsibility. They need [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=777&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Motivating and managing people is a tricky business. How then do we manage stress and keep people motivated?</p>
<p><strong>Theory X and Theory Y</strong></p>
<p>Donald McGregor identified two attitudes known as Theory X and Theory Y. In short, Theory X is someone that has an innate dislike of work and tends to avoid responsibility. They need coercion, direction and control. Theory Y, on the other hand, is someone that experience work as natural as rest or play and their commitment is typically in relation to the rewards associated with their achievements.</p>
<p>Each theory has a corresponding managerial approach. Theory X managers are autocratic and demand total control, managing through fear and punishment. Theory Y managers set the goal and let the person or team get on with it.  With that being said, McGregor found that staff behaviour and motivation is influenced by expectations set by the manager, i.e., if the manager assumes that you are going to produce work of excellence, you are likely to try and meet it.</p>
<p><strong>Models of motivation</strong></p>
<p><em>Taylorist model</em></p>
<p>Frederick Taylor believed that people are only motivated by money. This is not always the case, even in situations where the output can be directly related to reward. Output is often constrained through norms accepted by a work group. It&#8217;s typically unspoken rules which determine the quantity of output to produce. In a software development environment it is difficult to determine and quantify the amount of work completed by an individual &#8211; it&#8217;s a team effort. Setting an excessive financial reward between employees must be considered very carefully as it can break down morale and productivity. Bonuses are usually awarded at the end of project as a work-around to this problem.</p>
<p><em>Maslow&#8217;s hierarchy of needs</em></p>
<p>Motivation is a little more complicated than Frederick Taylor puts forward. Maslow suggests that as one motivator is satisfied, another will emerge. If you are broke, money is a fairly good motivator. When the financial need is satisfied, a higher level need will emerge. The needs hierarchy starts from the basic need of food, shelter and personal safety, to the highest level which is the feeling of fulfilling your potential or self-actualization. At different stages of life people are motivated by different things. For example, an older employee consider the quality of the job more important than a younger employee.  The younger employee considers a raise in pay more important than quality of job.</p>
<p><em>Herzberg&#8217;s two factor theory</em></p>
<p>Herzberg found that there are two factors in a job that will affect your satisfaction. The first is hygiene or maintenance factors. If working conditions are not right, it will definitely affect your level of satisfaction with the job. The other is motivators. These are typically a sense of achievement, or that the job is worthwhile.</p>
<p><em>Expectancy theory of motivation</em></p>
<p>Victor Vroom created the expectancy theory, which identifies three influences on motivation. They are expectancy, which is the belief that the harder you work the higher your performance will be; instrumentality, which is the belief that better performance will be rewarded, and finally the perceived value of that reward. If all three motivating factors are high, then motivation will be high. A zero score for any one of the three can remove motivation.</p>
<p><em>Oldham-Hackman job characteristic model</em></p>
<p>According the Oldham-Hackman model, there are five factors that influence job satisfaction. The first is the number of skills that can be exercised while doing the job; second is task identity, which refers to the degree to which your work identifies you as the author  and lastly, the degree of influence that your work has on other people i.e., the significance of your task. These three factors determines how meaningful your job is to you.  The other factors include the amount of say in the way you do your job and the feedback you receive about the work you&#8217;ve done.</p>
<p>There are a few simple things one can do to improve motivation, viz.,</p>
<ul>
<li>Set specific goals;</li>
<li>Feedback on work completed;</li>
<li>Tailoring tasks;</li>
<li>Increase the task scope;</li>
<li>Increase responsibility.</li>
</ul>
<p><strong>Stress</strong></p>
<p>With deadlines, objectives and obstacles, life is pretty stressful as a programmer. On the other hand, some pressure is good as boredom is soul-destroying. That being said, too much pressure affects not only work quality but health too. Some major factors that cause stress is not knowing what is expected from you and what you&#8217;re responsible for. Also, being torn between responsibilities such as attending an important meeting or looking after a sick child. Research shows that productivity and quality  suffers when more than 40-hours per week is exceeded. One of the axioms of extreme programming is to work no more than 40-hours per week. In a US study it was shown that people under 45 years of age who work more than 48-hours per week had double the risk of death from coronary heart disease.</p>
<p>To prevent overtime, project managers can be more realistic about the effort and time needed to complete a task or project. Exercising good planning and control will help to reduce unexpected obstacles. Some managers use bullying tactics and claim to be successful at pushing projects through. They typically need to create crisis to be able to justify such tactics. On the other hand, you find professional project managers that use rational, orderly and careful methods to deliver successful projects.</p>
<p><strong>References</strong></p>
<ol>
<li>Hughes, B. &amp; Cotterell, M. 2009. <em>Software Project Management, 5e</em>. Berkshire: McGraw-Hill Education.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thirdshelf.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thirdshelf.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thirdshelf.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thirdshelf.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thirdshelf.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thirdshelf.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thirdshelf.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thirdshelf.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thirdshelf.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thirdshelf.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thirdshelf.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thirdshelf.wordpress.com/777/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thirdshelf.wordpress.com/777/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thirdshelf.wordpress.com/777/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=777&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thirdshelf.com/2012/01/02/stress-and-motivation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Sydney</media:title>
		</media:content>
	</item>
		<item>
		<title>Software quality</title>
		<link>http://thirdshelf.com/2011/12/10/software-quality/</link>
		<comments>http://thirdshelf.com/2011/12/10/software-quality/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 13:54:18 +0000</pubDate>
		<dc:creator>Sydney du Plooy</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[Quality assurance]]></category>
		<category><![CDATA[Quality Control and Tracking]]></category>
		<category><![CDATA[Software development]]></category>
		<category><![CDATA[Software quality]]></category>
		<category><![CDATA[Source code]]></category>

		<guid isPermaLink="false">http://thirdshelf.com/?p=761</guid>
		<description><![CDATA[When it comes to writing software there is always the issue of software quality. How do we decide whether a system is of high quality or not? What do we mean by quality anyway? Quality in software systems Businesses are relying more and more on software for running critical business operations. Naturally, every business owner [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=761&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When it comes to writing software there is always the issue of software quality. How do we decide whether a system is of high quality or not? What do we mean by quality anyway?</p>
<p><strong>Quality in software systems</strong></p>
<p>Businesses are relying more and more on software for running critical business operations. Naturally, every business owner wants his software stable and reliable. Consider other critical systems such as aircraft control systems. I&#8217;m pretty sure that you&#8217;d want a quality flight control system on board your next flight. <em>Would you board the aircraft if your software was running on the aeroplane?</em></p>
<p>Another reason we want to ensure quality from an early stage is that bugs and defects accumulate over time. If we fail to correct quality issues from the beginning of the project, there is simply no easy way that we are going to make up for it in the end. Quality must be considered right from the start.</p>
<p><strong>What is software quality?</strong></p>
<p>The quality of a system is partly determined by the user-experience of a system. If it&#8217;s user-friendly, stable and reliable it&#8217;s quality is perceived as high. If it fails often and produce incorrect information then the system will be perceived as of poor quality. This is known as external quality.</p>
<p>As important as external quality is, internal quality is just as important. Internal quality is about the maintainability and extensibility of the source code. A system that is very difficult to extend and maintain will not be perceived as high quality.</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/12/internalexternalquality.png"><img class="size-full wp-image-766 alignnone" style="border-color:initial;border-style:initial;" title="InternalExternalQuality" src="http://thirdshelf.files.wordpress.com/2011/12/internalexternalquality.png?w=720" alt=""   /></a></p>
<p>Measuring software quality is tricky and there are two ways in which it is measured, viz.,</p>
<ul>
<li><em>Direct</em> where the quality is measured directly or observed directly;</li>
<li><em>Indirect</em> where the quality is measured by some indicator of the underlying quality.</li>
</ul>
<p><strong>Quality factors</strong></p>
<p>Before writing a software system it is necessary to decide on some quality factors. It is the only way to know if we succeeded in delivering a system that is of a specified and agreed quality. We specify the quality factors in terms of the following:</p>
<ul>
<li><em>Definition</em> of the quality characteristic;</li>
<li><em>Scale</em> of units in which the quality is measured;</li>
<li><em>Test</em> that will be conducted to measure the quality;</li>
<li><em>Minimum acceptable</em> which is the absolute minimum for this quality characteristic to pass;</li>
<li><em>Target range</em> which is the quality number we expect to reach;</li>
<li><em>Now</em> which is the current quality number.</li>
</ul>
<p>For example, reliability can be made up the following quality factors, viz., availability, <a class="zem_slink" title="Mean time between failures" href="http://en.wikipedia.org/wiki/Mean_time_between_failures" rel="wikipedia">mean time between failures</a>, failure on demand and support activity. Related to this is maintainability of which &#8220;changeability&#8221; and &#8220;analysability&#8221; are key components.</p>
<p><strong>ISO 9126</strong></p>
<p>According to this <a href="http://en.wikipedia.org/wiki/ISO/IEC_9126">standard</a> there are three parties who are interested in the quality of the software, viz.,</p>
<ul>
<li><em>Acquirers</em> who are the people obtaining the software;</li>
<li><em>Developers</em> who are the people making the software;</li>
<li><em>Independent evaluators</em> who assess the quality of the software.</li>
</ul>
<p>ISO 9126 defines six external software quality measures, viz.,</p>
<ul>
<li><em>Functionality</em> is the functions that the software need to offer to satisfy user needs;</li>
<li><em>Reliability</em> is the ability of the software to keep up its level of performance;</li>
<li><em>Usability</em> is the effort needed to use the software;</li>
<li><em>Efficiency</em> is the physical resources used when executing the software;</li>
<li><em>Maintainability</em> is the effort required to make changes to the software;</li>
<li><em>Portability</em> is the ability to transfer the software between environments.</li>
</ul>
<p>In order to measure the quality between different software systems we have to judge the importance of each quality measure for the application in question. We then select the external quality measures that are relevant to  the selected quality measures and create a mapping for the measurements indicating the quality rating, such as:</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/12/qualitymeasurementmapping.png"><img class="size-full wp-image-770 alignnone" title="QualityMeasurementMapping" src="http://thirdshelf.files.wordpress.com/2011/12/qualitymeasurementmapping.png?w=720" alt=""   /></a></p>
<p>After that we identify the relevant internal measurements and the intermediate products in which they appear. In other words, the source code must be evaluated and rated according to the set out quality measurements. To derive the final quality number for the systems, we combine the ratings for each system and compare them.</p>
<p><strong>References</strong></p>
<ol>
<li>Hughes, B. &amp; Cotterell, M. 2009. <em>Software Project Management, 5e</em>. Berkshire: McGraw-Hill Education.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thirdshelf.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thirdshelf.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thirdshelf.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thirdshelf.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thirdshelf.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thirdshelf.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thirdshelf.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thirdshelf.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thirdshelf.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thirdshelf.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thirdshelf.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thirdshelf.wordpress.com/761/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thirdshelf.wordpress.com/761/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thirdshelf.wordpress.com/761/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=761&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thirdshelf.com/2011/12/10/software-quality/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Sydney</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/12/internalexternalquality.png" medium="image">
			<media:title type="html">InternalExternalQuality</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/12/qualitymeasurementmapping.png" medium="image">
			<media:title type="html">QualityMeasurementMapping</media:title>
		</media:content>
	</item>
		<item>
		<title>Project scheduling techniques</title>
		<link>http://thirdshelf.com/2011/09/11/project-scheduling-techniques/</link>
		<comments>http://thirdshelf.com/2011/09/11/project-scheduling-techniques/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 17:24:16 +0000</pubDate>
		<dc:creator>Sydney du Plooy</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[Critical path method]]></category>
		<category><![CDATA[Methodologies]]></category>
		<category><![CDATA[Program Evaluation and Review Technique]]></category>
		<category><![CDATA[Project management]]></category>
		<category><![CDATA[Project planning]]></category>
		<category><![CDATA[Start date]]></category>
		<category><![CDATA[Task (project management)]]></category>
		<category><![CDATA[Tasks]]></category>

		<guid isPermaLink="false">http://thirdshelf.com/?p=699</guid>
		<description><![CDATA[As part of planning a software project, it is always important to pay attention to the activities and the order in which they execute. This is known as a project schedule. To create a project schedule, we have to model the project&#8217;s activities and their dependencies. Or, if you prefer, their relationships. A project schedule [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=699&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As part of planning a software project, it is always important to pay attention to the activities and the order in which they execute. This is known as a <a href="http://en.wikipedia.org/wiki/Schedule_(project_management)" target="_blank">project schedule</a>.</p>
<p>To create a project schedule, we have to model the project&#8217;s activities and their dependencies. Or, if you prefer, their relationships. A project schedule is typically drawn as a <a href="http://en.wikipedia.org/wiki/Graph_(mathematics)" target="_blank">graph</a> &#8212; arrows joining circles. The fancy way saying this is, <em>edges</em> for the arrows (a.k.a links) and <em>vertices</em> for the circles (a.k.a nodes). This type of graph is typically drawn from left to right, with the project&#8217;s starting date on the left.</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/09/projectschedulegraph.png"><img class="alignnone size-full wp-image-702" title="Project Schedule Graph" src="http://thirdshelf.files.wordpress.com/2011/09/projectschedulegraph.png?w=720" alt="Project Schedule Graph"   /></a></p>
<p>So, what do the circles and arrows mean? Well, it depends.</p>
<h2>Activity-on-node</h2>
<p>This is a simple graph where the circles represent the activities and the arrows the dependencies. It is also known as a <em>precedence network</em>. We call it a precedence network because a node, or activity, cannot be executed until all of its preceding activities executed.</p>
<p>To draw an activity-on-node graph, we have to follow some rules:</p>
<ul>
<li>only one starting node;</li>
<li>only one ending node;</li>
<li>each activity has a duration;</li>
<li>links have no durations;</li>
<li>time moves from left to right;</li>
<li>the graph may not contain any loops;</li>
<li>the graph may not contain any dangles &#8211; a node that just stops in the middle of nowhere.</li>
</ul>
<div><a href="http://thirdshelf.files.wordpress.com/2011/09/activityonnode.png"><img class="alignnone size-full wp-image-705" title="ActivityOnNode" src="http://thirdshelf.files.wordpress.com/2011/09/activityonnode.png?w=720" alt=""   /></a></div>
<div>Activity information is captured on each node that looks like this:</div>
<p><a href="http://thirdshelf.files.wordpress.com/2011/09/bs4335activitylabel.png"><img class="alignnone size-full wp-image-707" title="BS4335ActivityLabel" src="http://thirdshelf.files.wordpress.com/2011/09/bs4335activitylabel.png?w=720" alt=""   /></a></p>
<p>By the way, this activity label is based on British Standard BS 4335.</p>
<h3>Critical Path applied to Activity-on-node</h3>
<p>A critical path is the order in which we should execute activities, so that we can get the project done as fast as possible. Not only that, it also shows us which activities will cause us to miss the end date, if they are delayed. How do we determine the critical path?</p>
<p>Well, for each activity we need to have some idea of, how long it will take to do, what is the earliest we can start and complete the activity as well as the latest we can start and complete it. That is the <em>Duration, Early Start, Early Finish,</em><em> Late Start </em>and<em> Late Finish </em>parts of the activity label.</p>
<p>To calculate the earliest dates, we need to do something called a <strong>forward pass</strong><em>. </em>That is, we look at every activity and calculate its early start and early finish dates. The first activity&#8217;s early start values always starts at zero.</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/09/forwardpass.png"><img class="alignnone size-full wp-image-711" title="ForwardPass" src="http://thirdshelf.files.wordpress.com/2011/09/forwardpass.png?w=720" alt=""   /></a></p>
<p>In the network graph above, we see that Task A and Task C can start immediately. However, Task B must wait until Task A and Task C completes (it&#8217;s predecessors). Since Task C has the longest duration (10 days) between Task A and Task C, Task B can only start in 10 days and will complete on day 13. The earliest that Task D can start is in 2 days time, after Task A completed. With this in mind, the earliest that the project can complete is in 13 days time.</p>
<p>Next, we need to do a <strong>backward pass</strong> on the same network to calculate the <em>Late Start</em> and <em>Late Finish</em> values. This gives us the latest date at which an activity must start and complete without delaying the end date of the project. The late finish date for the project is the same as the early finish date.</p>
<h2><a href="http://thirdshelf.files.wordpress.com/2011/09/backwardpass.png"><img class="alignnone size-full wp-image-719" title="BackwardPass" src="http://thirdshelf.files.wordpress.com/2011/09/backwardpass.png?w=720" alt=""   /></a></h2>
<p>In this example, we see that the project will complete in 13 days. So, we work from the end date backwards. Starting at 13 days, we can see that Task B will take 3 days to complete and so the latest start date is 10 days (13-3). Task D also needs to finish on day 13.  This task takes 4 days to complete and so the latest date to start this task is in 9 days time (13-4). Task C on the other hand must finish within 10 days and has to start immediately (10-10). Since Task A will take 2 days to complete and we know that the latest finish date is only in 9 days time, we only have to start this task on day 7 (9-2).</p>
<p>To find the critical path in the graph, we find the sequence of tasks that will move the end date, if there is a delay in <em>any </em>of its activities.</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/09/criticalpath.png"><img class="alignnone size-full wp-image-722" title="CriticalPath" src="http://thirdshelf.files.wordpress.com/2011/09/criticalpath.png?w=720" alt=""   /></a></p>
<p>If there is a delay in Task C so that it only completes on day 11, it will delay Task B and ultimately the end date. We have to pay special attention to the critical path throughout the project so that we can handle any delays as soon as possible. The critical path sets the <em>activity span. </em>That is, the shortest time in which we can complete the project. If we want to shorten the time of the project, we have to cut the time of the activities in the critical path.</p>
<h2>Activity-on-arrow</h2>
<p>In activity-on-arrow networks, the arrows, or links, represent the activities. The nodes represent <em>events of activities</em> starting or finishing. Just like the activity-on-node graph, so too activity-on-arrow graphs have rules when it comes to drawing the network graph. They are:</p>
<ul>
<li><em>only</em> one starting node;</li>
<li><em>only</em> one ending node;</li>
<li>duration is on the link;</li>
<li>nodes have no duration;</li>
<li>time moves from left to right;</li>
<li>nodes are numbered sequentially;</li>
<li>graph may not contain any loops;</li>
<li>graph may not contain any dangles.</li>
</ul>
<div><a href="http://thirdshelf.files.wordpress.com/2011/09/activityonarrow.png"><img class="alignnone size-full wp-image-725" title="ActivityOnArrow" src="http://thirdshelf.files.wordpress.com/2011/09/activityonarrow.png?w=720" alt=""   /></a></div>
<div>We label the events (nodes) with a different convention than that of activity-on-node. It looks like this:</div>
<div><a href="http://thirdshelf.files.wordpress.com/2011/09/activityonarrowlabel.png"><img class="alignnone size-full wp-image-726" title="ActivityOnArrowLabel" src="http://thirdshelf.files.wordpress.com/2011/09/activityonarrowlabel.png?w=720" alt=""   /></a></div>
<h3>Critical Path applied to Activity-on-arrow</h3>
<p>Before we can find the critical path in an Activity-on-arrow graph, we need to do a <strong>forward pass</strong>. It follows the same principles as activity-on-node. The only exception is that in activity-on-arrow we use the events and not the activity start and end dates.</p>
<p>Let&#8217;s look at an example (Hughes and Cotterell, 2009):</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/09/forwardpassaoa1.png"><img class="alignnone size-full wp-image-730" title="ForwardPassAoA" src="http://thirdshelf.files.wordpress.com/2011/09/forwardpassaoa1.png?w=720" alt=""   /></a></p>
<p>The earliest date when an event can start is the date when all the events that it depends on is complete. In the example above, activities A, B and F can start immediately. So, the earliest date for event 1 is zero. Since activity A takes 6 weeks to complete, we can only start activity 2 in 6 weeks time at the earliest. Activity B takes 4 weeks to complete and so event 3 can only be achieved in week 4. Activity F is dependent on the ending date of activity E and so we only know that activity F will complete in 10 weeks. Activity E can start in 4 weeks time and will take 3 weeks to complete. From that we know that activity E will only end in 7 weeks time. We then take the longer of the two ending dates (between E and F) and find that event 5 will only be achieved in 10 weeks time. Event 4 can only start in week 9 (6 + 3) &gt; (4 + 4).  We now see that the project will only finish at the end of week 13, at the earliest.</p>
<p>Next, we do a <strong>backward pass</strong> on the same graph to calculate the latest date at which each event should be achieved. It follows the same principles as the backward pass for activity-on-node.</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/01/backwardpassaoa.png"><img class="alignnone size-full wp-image-734" title="BackwardPassAoA" src="http://thirdshelf.files.wordpress.com/2011/01/backwardpassaoa.png?w=720" alt=""   /></a></p>
<p>To find the critical path, we make use of <em>slack</em>. Slack is the difference between the earliest date and latest date. It tells us how late an event can be without affecting the end date of the project. The critical path is that path with all the nodes having a zero slack.</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/01/criticalpathaoa.png"><img class="alignnone size-full wp-image-735" title="CriticalPathAoA" src="http://thirdshelf.files.wordpress.com/2011/01/criticalpathaoa.png?w=720" alt=""   /></a></p>
<p><strong>References</strong></p>
<ol>
<li>Hughes, B. &amp; Cotterell, M. 2009. <em>Software Project Management, 5e</em>. Berkshire: McGraw-Hill Education.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thirdshelf.wordpress.com/699/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thirdshelf.wordpress.com/699/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thirdshelf.wordpress.com/699/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thirdshelf.wordpress.com/699/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thirdshelf.wordpress.com/699/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thirdshelf.wordpress.com/699/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thirdshelf.wordpress.com/699/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thirdshelf.wordpress.com/699/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thirdshelf.wordpress.com/699/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thirdshelf.wordpress.com/699/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thirdshelf.wordpress.com/699/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thirdshelf.wordpress.com/699/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thirdshelf.wordpress.com/699/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thirdshelf.wordpress.com/699/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=699&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thirdshelf.com/2011/09/11/project-scheduling-techniques/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Sydney</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/09/projectschedulegraph.png" medium="image">
			<media:title type="html">Project Schedule Graph</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/09/activityonnode.png" medium="image">
			<media:title type="html">ActivityOnNode</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/09/bs4335activitylabel.png" medium="image">
			<media:title type="html">BS4335ActivityLabel</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/09/forwardpass.png" medium="image">
			<media:title type="html">ForwardPass</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/09/backwardpass.png" medium="image">
			<media:title type="html">BackwardPass</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/09/criticalpath.png" medium="image">
			<media:title type="html">CriticalPath</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/09/activityonarrow.png" medium="image">
			<media:title type="html">ActivityOnArrow</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/09/activityonarrowlabel.png" medium="image">
			<media:title type="html">ActivityOnArrowLabel</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/09/forwardpassaoa1.png" medium="image">
			<media:title type="html">ForwardPassAoA</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/01/backwardpassaoa.png" medium="image">
			<media:title type="html">BackwardPassAoA</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/01/criticalpathaoa.png" medium="image">
			<media:title type="html">CriticalPathAoA</media:title>
		</media:content>
	</item>
		<item>
		<title>Estimating Software Effort</title>
		<link>http://thirdshelf.com/2011/08/28/estimating-software-effort/</link>
		<comments>http://thirdshelf.com/2011/08/28/estimating-software-effort/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 22:54:37 +0000</pubDate>
		<dc:creator>Sydney du Plooy</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[Barry Boehm]]></category>
		<category><![CDATA[Cost estimation in software engineering]]></category>
		<category><![CDATA[Estimating]]></category>
		<category><![CDATA[Estimation]]></category>
		<category><![CDATA[Fred Brooks]]></category>
		<category><![CDATA[Mythical Man-Month]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Project management]]></category>
		<category><![CDATA[Source lines of code]]></category>

		<guid isPermaLink="false">http://thirdshelf.com/?p=653</guid>
		<description><![CDATA[Estimating the effort it takes to produce a software product is a fairly difficult process. There are a couple of reasons why. They range from management politics to subjective guesses of how long  programming tasks will take. How then do you estimate the effort of a project with such uncertainties? At the start of the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=653&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Estimating the effort it takes to produce a software product is a fairly difficult process. There are a couple of reasons why. They range from management politics to subjective guesses of how long  programming tasks will take.</p>
<p>How then do you estimate the effort of a project with such uncertainties?</p>
<p>At the start of the project we should be able to get some idea of what the end-product will look like. From that, we can start estimating how long the bits and pieces will take to develop. Now that seems easy, but <a href="http://en.wikipedia.org/wiki/Hofstadter%27s_law">estimating how long the bits and pieces will take</a> is not as simple as it seems.</p>
<h2><strong>Over- and under-estimating effort</strong></h2>
<p>Let&#8217;s look at <a href="http://en.wikipedia.org/wiki/Parkinson%27s_Law" target="_blank">Parkinson&#8217;s Law</a>. It says that &#8220;<em>Work expands so as to fill the time available for its completion.</em>&#8221; If the task ends up being easy, then we will waste time and work less hard.</p>
<p>On the other hand, under-estimating effort will result in an unreliable and poor quality system. This is a manifestation of <a href="http://dustyvolumes.com/archives/536" target="_blank">Weinberg’s Zeroth Law of Unreliability</a> which says that &#8220;If a system doesn&#8217;t have to be reliable, it can meet any other objective.&#8221; Many people will make this sacrifice simply to complete the product before the deadline.</p>
<p>When a project starts falling behind, project managers will typically add more people to the project. <a href="http://en.wikipedia.org/wiki/Brooke%27s_Law" target="_blank">Brook&#8217;s Law</a> explains that &#8220;<em>Putting more people on a late job makes it later.</em>&#8221; Why is that?</p>
<p>Let&#8217;s look at an example. In a team of three members we have 3 &#8220;communication channels&#8221;. Add two more people and we have a team of five. This means that we now have 10 &#8220;communication channels&#8221; between people. We calculate it using [n * (n - 1)] / 2 where n is the number of people. Frederick P. Brooks covers this in his book <a href="http://www.amazon.com/gp/product/0201835959/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0201835959">The Mythical Man-Month</a><img src="http://www.assoc-amazon.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=0201835959&amp;camp=217145&amp;creative=399369" alt="" width="1" height="1" border="0" />.</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/08/communicationchannels.png"><img class="size-full wp-image-657 alignnone" style="border-color:initial;border-style:initial;" title="Communication Channels in a Team" src="http://thirdshelf.files.wordpress.com/2011/08/communicationchannels.png?w=720" alt=""   /></a></p>
<p><span class="Apple-style-span" style="font-size:20px;font-weight:bold;"><strong>Estimation techniques</strong></span></p>
<p>In his book <a href="http://www.amazon.com/s?ie=UTF8&amp;x=0&amp;ref_=nb_sb_noss&amp;y=0&amp;field-keywords=0138221227&amp;url=search-alias%3Daps#?_encoding=UTF8&amp;tag=thethishe-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=390957">Software Engineering Economics</a><img style="border:none!important;margin:0!important;" src="https://www.assoc-amazon.com/e/ir?t=thethishe-20&amp;l=ur2&amp;o=1" alt="" width="1" height="1" border="0" /> by <a href="http://en.wikipedia.org/wiki/Barry_Boehm" target="_blank">Barry Boehm</a> he suggests a <a href="http://en.wikipedia.org/wiki/Estimation_in_software_engineering" target="_blank">few ways in which effort estimates can be derived</a>.</p>
<p><strong>Bottom-up</strong> breaks the project into it&#8217;s components and those components into it&#8217;s components and so on. Take each of the components and estimate the lines of code and multiply this with some factor that adds fat for complexity. Based on that number, calculate the number of days it will take using a ratio between lines of code and effort. <em>[It is called bottom-up because the effort accumulates upward.]</em></p>
<p><strong>Top-down</strong> is based on two parameters, size and productivity. Effort is then calculated as e<em>ffort = size * productivity</em>. Where size is an estimate of the number of lines of code and productivity is the time spent by the developer doing the work. The productivity parameter is scaled according the developers experience. There is a more advanced calculation. It uses the <a href="http://en.wikipedia.org/wiki/Least_squares_regression" target="_blank">least squares regression</a> model which is calculated as e<em>ffort = constant1 + (size * constant2)</em>.</p>
<p><strong>Expert judgement</strong> relies on the knowledge and experience of someone who is already involved in the project. This estimation doesn&#8217;t only rely on the person but also takes into account similar projects and supplemented by the bottom-up approach.</p>
<p><strong>Case-based reasoning</strong> finds the differences and similarities between completed projects, or source cases, with the new project, the target case. Take the similarities and differences and adjust the source cases so that you get an estimate for the target case. There&#8217;s a fancy way of doing this by using the <a href="http://en.wikipedia.org/wiki/Euclidean_distance" target="_blank">Euclidean distance</a> between the cases. This technique is also called estimation by analogy.</p>
<p><strong>Function point analysis</strong> assigns a complexity value to each instance for each of the following components, which is then summed to get the function point processing size:</p>
<ul>
<li>External input types &#8211; inputs that change the internal data;</li>
<li>External output types &#8211; outputs from the system, such as reports;</li>
<li>External inquiry types &#8211; inputs that point the system to information without modifying it;</li>
<li>Logical internal file types &#8211; the information system&#8217;s data store;</li>
<li>External interface file types &#8211; input and output exchanged by the information system.</li>
</ul>
<p><strong>Function points MarkII</strong> is an improvement on the original Allan Albrecht function point analysis technique<em>.</em> Create three weightings, one for input (Wi=0.58), one for entity types (We=1.66) and one for output (Wo=0.26). Then, multiply the weightings with the number of elements corresponding to each of the weightings and calculate the proportions of effort. <em>[The values for the variables Wi, We and Wo have been set based on industry averages.]</em></p>
<p><strong>COSMIC full function points</strong> is used for sizing real-time and embedded systems. Typically, these systems are made up of component layers which may communicate with each other. Assign a value to each data group and sum the counts to calculate the functional size units.</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/08/datagroups.png"><img class="alignnone size-full wp-image-668" title="DataGroups" src="http://thirdshelf.files.wordpress.com/2011/08/datagroups.png?w=720" alt=""   /></a></p>
<p>There are four data groups which are the  inputs and outputs of these components:</p>
<ul>
<li>Entries &#8211; moves the data group into the component;</li>
<li>Exits &#8211; moved the data group from the component;</li>
<li>Reads &#8211; moves data from storage into the component;</li>
<li>Writes &#8211; moves data to storage from the component.</li>
</ul>
<p><strong>COCOMO II</strong> is a constructive cost model where effort is calculated as person-months based on 152 hours and it&#8217;s size is measured in lines of code. Effort is calculated using the formula effort = c(size) ^ k where the constants c and k are dependent on the nature of the product and the development environment:</p>
<ul>
<li>Organic mode (small system developed in-house) [c=2.4, k=1 .05];</li>
<li>Embedded mode (tight constraints, expensive to change) [c=3.0, k=1.12];</li>
<li>Semi-detached mode (hybrid of organic and embedded) [c=3.6, k=1.20].</li>
</ul>
<p>The way in which we calculate the effort is dependent on where we are in the development process. During<em> application composition (user interface design)</em> we use the number of physical features of the product such as screens, reports and so on. This is known as object points.</p>
<p>At the <em>early design stage (architecture)</em> we use function points to estimate the size of the system. There is a neat little trick here to convert the function points to the equivalent number of lines of code. To do that, we multiply the function points by a factor for the programming language used.</p>
<p>After we have gathered all the data we can now calculate the effort in person-months using the formula pm = 2.94(size) ^ (sf) * (e1) *&#8230;* (en)† where size is the number of lines of code in thousands (<em>kdsi)</em> and sf is the scale factor which is calculated by sf = 0.91 + 0.01 * Σ(exponent driver ratings)†. Exponent driver ratings are there so that we can compensate for the loss of productivity on large projects.</p>
<p>Determine the scale factor (sf) by assigning points from the table below to each of the following exponent drivers:</p>
<ul>
<li>Precedentedness - how novel is the system? The more novel, the more uncertainty, the higher the exponent;</li>
<li>Development flexibility &#8211; how easy is it to meet the requirements? If it&#8217;s tough assign a higher exponent value;</li>
<li>Architecture/risk resolution &#8211; how likely are the requirements to change? Very likely, up the exponent;</li>
<li>Team cohesion &#8211; are your team members friends? If not, up the exponent;</li>
<li>Process maturity &#8211; do you know what you are doing? If you do, go low on the exponent.</li>
</ul>
<p>Here&#8217;s a table to help you out on the exponent driver values:</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/08/driverexponents.png"><img class="alignnone size-full wp-image-685" title="DriverExponents" src="http://thirdshelf.files.wordpress.com/2011/08/driverexponents.png?w=720" alt=""   /></a></p>
<p>†Pssst&#8230; I changed the formula&#8217;s a little. There are variables which have been set for many years and so the formulas should really be pm = A(size) ^ (sf) * (e1)*&#8230;*(en) and sf = B + 0.01 * Σ(exponent driver ratings).<br />
<strong> References</strong></p>
<ol>
<li>Hughes, B. &amp; Cotterell, M. 2009. <em>Software Project Management, 5e</em>. Berkshire: McGraw-Hill Education.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thirdshelf.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thirdshelf.wordpress.com/653/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thirdshelf.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thirdshelf.wordpress.com/653/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thirdshelf.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thirdshelf.wordpress.com/653/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thirdshelf.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thirdshelf.wordpress.com/653/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thirdshelf.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thirdshelf.wordpress.com/653/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thirdshelf.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thirdshelf.wordpress.com/653/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thirdshelf.wordpress.com/653/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thirdshelf.wordpress.com/653/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=653&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thirdshelf.com/2011/08/28/estimating-software-effort/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Sydney</media:title>
		</media:content>

		<media:content url="http://www.assoc-amazon.com/e/ir?t=&#38;l=as2&#38;o=1&#38;a=0201835959&#38;camp=217145&#38;creative=399369" medium="image" />

		<media:content url="http://thirdshelf.files.wordpress.com/2011/08/communicationchannels.png" medium="image">
			<media:title type="html">Communication Channels in a Team</media:title>
		</media:content>

		<media:content url="https://www.assoc-amazon.com/e/ir?t=thethishe-20&#38;l=ur2&#38;o=1" medium="image" />

		<media:content url="http://thirdshelf.files.wordpress.com/2011/08/datagroups.png" medium="image">
			<media:title type="html">DataGroups</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/08/driverexponents.png" medium="image">
			<media:title type="html">DriverExponents</media:title>
		</media:content>
	</item>
		<item>
		<title>MassFlash v1.0</title>
		<link>http://thirdshelf.com/2011/06/26/massflash-v1-0/</link>
		<comments>http://thirdshelf.com/2011/06/26/massflash-v1-0/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 18:03:03 +0000</pubDate>
		<dc:creator>Sydney du Plooy</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[Disk formatting]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Microsoft Windows]]></category>
		<category><![CDATA[Source code]]></category>
		<category><![CDATA[USB flash drive]]></category>
		<category><![CDATA[Windows PowerShell]]></category>

		<guid isPermaLink="false">http://thirdshelf.com/?p=639</guid>
		<description><![CDATA[Preparing many flash disks with the same data is tedious and might I add very boring. On my quest to learn Powershell, I might just as well put it to good use. With just a few lines of code I managed to cook up a script to do the mind-numbing work of preparing flash disks. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=639&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Preparing many flash disks with the same data is tedious and might I add very boring. On my quest to learn Powershell, I might just as well put it to good use. With just a few lines of code I managed to cook up a script to do the mind-numbing work of preparing flash disks. It does the work and I watch. Perfect!</p>
<p>It is a very simple script that:</p>
<ol>
<li>Formats each flash drive to FAT32;</li>
<li>Copies the contents of the specified directory recursively onto the flash drive;</li>
<li>Dismounts the volume.</li>
</ol>
<p>The script finds all removable drives between 1gb and 64gb in size. We don&#8217;t want to slip up here, now do we?</p>
<p>At the top of the script, a default directory is specified from where all files will be copied if an alternative directory was not specified on the command line.</p>
<p><pre class="brush: plain;">
Write-Host &quot;MassFlash - Version 1.0&quot;
Write-Host &quot;Author: SS du Plooy&quot;
Write-Host &quot;-----------------------&quot;

If($args.Length -eq 0)
{
    $DirectoryToCopy = &quot;c:\DefaultFromCopyLocation&quot;
}
Else
{
    $DirectoryToCopy = $args[0]
}

Write-Host &quot;Preparing flash disks with files from&quot; $DirectoryToCopy
$drives = Get-WmiObject Win32_LogicalDisk -filter &quot;DriveType=2&quot;

Foreach($drive in $drives)
{
    [int] $driveSize = $drive.Size/1073741824 #convert to gigabytes

    If($driveSize -ge 1 -and $driveSize -le 64)
    {
        $driveLetter = $drive.DeviceID
        $volume = Get-WmiObject -Class Win32_Volume -Filter &quot;DriveLetter = '$driveLetter'&quot;
        $label = &quot;TKP&quot;+$(get-date -f ssfff)

        Write-Host Formatting drive $driveLetter [$label] [$driveSize GB]
        $volume.Format(&quot;FAT32&quot;, $true, 4096, $label, $false)
        Write-Host &quot;Copying $DirectoryToCopy to $driveLetter&quot;
        Copy-Item $DirectoryToCopy $driveLetter -recurse
        Write-Host Dismounting drive $driveLetter
        $volume.Dismount($true, $false)
    }
}
Write-Host &quot;Done.&quot;
</pre></p>
<p>Now you can put your time and mind to better use instead of preparing flash drives all day long.</p>
<p><strong>Note: </strong>The script must be run with Administrator privileges.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thirdshelf.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thirdshelf.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thirdshelf.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thirdshelf.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thirdshelf.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thirdshelf.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thirdshelf.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thirdshelf.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thirdshelf.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thirdshelf.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thirdshelf.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thirdshelf.wordpress.com/639/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thirdshelf.wordpress.com/639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thirdshelf.wordpress.com/639/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=639&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thirdshelf.com/2011/06/26/massflash-v1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Sydney</media:title>
		</media:content>
	</item>
		<item>
		<title>Monitoring disk space with Powershell</title>
		<link>http://thirdshelf.com/2011/06/26/monitoring-disk-space-with-powershell/</link>
		<comments>http://thirdshelf.com/2011/06/26/monitoring-disk-space-with-powershell/#comments</comments>
		<pubDate>Sun, 26 Jun 2011 17:53:52 +0000</pubDate>
		<dc:creator>Sydney du Plooy</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[Disk Management]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Microsoft Windows]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Windows PowerShell]]></category>

		<guid isPermaLink="false">http://thirdshelf.com/?p=629</guid>
		<description><![CDATA[Running out of disk space all of  a sudden is just not cool. It tends to wake up men in black suits, bring on the gnashing of teeth and frothing at the mouth. I don&#8217;t like that type of drama. So, I knocked up a little Powershell script that can be scheduled to email a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=629&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Running out of disk space all of  a sudden is just not cool. It tends to wake up men in black suits, bring on the gnashing of teeth and frothing at the mouth. I don&#8217;t like that type of drama.</p>
<p>So, I knocked up a little <a href="http://en.wikipedia.org/wiki/Powershell">Powershell </a>script that can be scheduled to email a disk space report everyday. Currently the script is written to send a report on a single drive only. There are many other variations of this type of script that reports on all the drives on a server.</p>
<p><pre class="brush: plain;">
$disk = Get-WmiObject -ComputerName $env:COMPUTERNAME Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3} | Where-Object {$_.DeviceID -eq &quot;:&quot;}

[float]$totalSize = [Math]::Round($disk.Size / 1073740824, 2)
[float]$freeSpace = [Math]::Round($disk.FreeSpace / 1073740824, 2)
$deviceID = $disk.DeviceID
$percentFree = [Math]::Round(($freeSpace / $totalSize) * 100, 2);

$smtpServer = &quot;&quot;
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$emailFrom = &quot;$env:COMPUTERNAME&quot;
$emailTo = &quot;&quot;
$subject = &quot;$env:COMPUTERNAME - Disk space report&quot;
$body = &quot;$deviceID | Total: $totalSize GB | Available: $freeSpace GB | $percentFree % disk space available&quot;
$smtp.Send($EmailFrom,$emailTo,$subject,$body)
</pre></p>
<p>When it comes to management, you might just as well only print the precentage of free disk space and perhaps add that to the subject of the email. That will give all the relevant information in one look. The script can be extended to report on multiple servers and multiple drives.</p>
<p>Have fun!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thirdshelf.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thirdshelf.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thirdshelf.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thirdshelf.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thirdshelf.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thirdshelf.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thirdshelf.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thirdshelf.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thirdshelf.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thirdshelf.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thirdshelf.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thirdshelf.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thirdshelf.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thirdshelf.wordpress.com/629/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=629&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thirdshelf.com/2011/06/26/monitoring-disk-space-with-powershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Sydney</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting Fit, Uncle Bob style!</title>
		<link>http://thirdshelf.com/2011/04/23/getting-fit-uncle-bob-style/</link>
		<comments>http://thirdshelf.com/2011/04/23/getting-fit-uncle-bob-style/#comments</comments>
		<pubDate>Sat, 23 Apr 2011 09:22:39 +0000</pubDate>
		<dc:creator>Sydney du Plooy</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Fit]]></category>
		<category><![CDATA[FitNesse]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software testing]]></category>
		<category><![CDATA[Source code]]></category>
		<category><![CDATA[Test case]]></category>
		<category><![CDATA[Wiki]]></category>

		<guid isPermaLink="false">http://thirdshelf.com/?p=547</guid>
		<description><![CDATA[Fit: Framework for Integrated Test Great software requires collaboration and communication. Fit is a tool for enhancing collaboration in software development. It&#8217;s an invaluable way to collaborate on complicated problems&#8211;and get them right&#8211; early in development. Fit allows customers, testers, and programmers to learn what their software should do and what it does do. It automatically compares customers&#8217; expectations to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=547&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Fit: Framework for Integrated Test</strong></p>
<p>Great software requires collaboration and communication. Fit is a tool for enhancing collaboration in software development. It&#8217;s an invaluable way to collaborate on complicated problems&#8211;and get them right&#8211; early in development.</p>
<p>Fit allows customers, testers, and programmers to learn what their software <em>should</em> do and what it <em>does</em> do. It automatically compares customers&#8217; expectations to actual results. [Cunn 07]</p></blockquote>
<p>Read an <a href="http://www.testinggeek.com/index.php/testing-tools/test-execution/95-fitnesse-introduction">introduction to FitNesse</a>.</p>
<p><strong>Installing FitNesse</strong></p>
<p>To start using FitNesse with .net, you&#8217;ll need to download <a href="http://www.fitnesse.org">FitNesse</a> and <a href="http://fitsharp.github.com/">fitSharp</a>. Once downloaded, place the fitnesse.jar file in a directory, for example c:\FitNesse. Extract the files from the fitSharp archive into a subdirectory in the same folder as fitnesse.jar called fitSharp.</p>
<p>Start FitNesse using <em>java -jar fitnesse.jar -p 8080</em> where -p is the port number. FitNesse installs in a directory called FitNesseRoot. Browse to http://localhost:8080 and you should see the FitNesse front-end.</p>
<p><strong>Creating a test fixture</strong></p>
<p>To use FitNesse you&#8217;ll need to give a test fixture that FitNesse can execute. A test fixture is derived from one of the classes provided by the Fit framework. For this example, derive a test fixture from <em>ColumnFixture</em>. This will allow us to run the test case using a decision table with input and output values. Add a reference to both fit.dll and fitSharp.dll in your project.</p>
<p><pre class="brush: csharp;">
namespace Humanresources.Domain
{
  public class EmployeeTests : fit.ColumnFixture
  {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { get { return string.Concat(FirstName, &quot; &quot;, LastName); }
  }
}
</pre></p>
<p><span class="Apple-style-span" style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;line-height:19px;white-space:normal;font-size:13px;"><br />
<strong>Setting up the test case</strong></span></p>
<p>To setup the test case, you will need to create a wiki-page. On the front page of FitNesse, click on <strong>Edit</strong> and enter a wiki-word with the name of the test case. A wiki-word is a word written in Pascal-case surrounded by square brackets, i.e. [EmployeeTests]. Click <strong>Save</strong> and then click on the <strong>question mark</strong> to go to the page and click on <strong>Edit</strong>.</p>
<p>To setup the test, you &#8216;ll need to define a couple of variables, they are</p>
<ol>
<li>location of the assembly under test;</li>
<li>how to invoke the test runner;</li>
<li>location of the test runner.</li>
</ol>
<div>On edit page, enter the following:</div>
<p><pre class="brush: plain; light: true;">
!path C:\Projects\Experiments\HumanResources\HumanResources.Domain\bin\Debug\HumanResources.Domain.dll
!define COMMAND_PATTERN {%m -r fitnesse.fitserver.FitServer,c:\FitNesse\FitSharp\fit.dll %p}
!define TEST_RUNNER {c:\FitNesse\FitSharp\Runner.exe}
</pre></p>
<div>Click on <strong>Save.</strong> Next, you&#8217;ll need create the test inputs and expected output values:</div>
<div><pre class="brush: plain; light: true;">
|humanresources.domain.employeetests|
|firstname|lastname|fullname?  |
|John     |Lidin   |John Lidin |
|Joshua   |Cohen   |J Cohen    |
|Allan    |Butler  |A Butler   |
</pre></p>
<p>The first line specifies the class that is under test, the second line specifies the input values that are assigned to the properties with the same name and the following lines give the input and expected output values. The last column with the question mark is the evaluation column. This is a simple decision table. The last column name may also be the name of a method.</p>
<p>In the table, we are assigning the value John to FirstName property and Lidin to the LastName property. The expectation is that FullName is a concatenation of FirstName, a space and then followed by the LastName.</p>
<p>Before the test is run, you&#8217;ll need to tell FitNesse that this page is a page that contains tests and is not just a simple wiki-page. To change the page type to test page, click on <strong>Properties, </strong>select <strong>Test</strong> and then click <strong>Save.</strong></p>
<p>An important thing to note here is that all the property names and class names are in lower case. This is intentional as Pascal-cased words are interpreted as wiki-words. For your own sanity keep them in lowercase.</p>
<p>Your page should now look like this:</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/04/fitnessetestsetup.png"><img class="size-medium wp-image-610 alignnone" title="FitNesseTestSetup" src="http://thirdshelf.files.wordpress.com/2011/04/fitnessetestsetup.png?w=300&h=167" alt="" width="300" height="167" /></a></p>
<p><strong>Run the test case</strong></p>
<p>Click on <strong>Test</strong> and you should see the following output:</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/04/fitnessetestrun.png"><img class="alignnone size-medium wp-image-612" title="FitNesseTestRun" src="http://thirdshelf.files.wordpress.com/2011/04/fitnessetestrun.png?w=300&h=173" alt="" width="300" height="173" /></a></p>
</div>
<p>The tests can also be executed from the command line, are you thinking what I&#8217;m thinking?</p>
<p><strong>Troubleshooting</strong></p>
<ul>
<li>Fit.dll file load exception</li>
</ul>
<p><pre class="brush: plain; light: true;">
System.IO.FileLoadException: Could not load file or assembly 'file:///c:\FitNesse\FitSharp\fit.dll'
or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)
File name: 'file:///c:\FitNesse\FitSharp\fit.dll' ---&gt; System.NotSupportedException: An attempt was
made to load an assembly from a network location which would have caused the assembly to be sandboxed
in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy
by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please
enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/?LinkId=155569 for more information.
</pre></p>
<p>To solve this issue, simply add a configuration file to the runner that you&#8217;re using. If you are using <em>runner.exe</em> then create a file called runner.exe.config and add the following text into runner.exe.config:</p>
<p><pre class="brush: xml;">
&lt;configuration&gt;
   &lt;runtime&gt;
      &lt;loadFromRemoteSources enabled=&quot;true&quot;/&gt;
   &lt;/runtime&gt;
&lt;/configuration&gt;
</pre></p>
<ul>
<li>If you encounter any other issues you can do the <a href="http://www.asoftwarecraft.com/2010/01/troubleshooting-with-fitsharp-and.html">test run using a debugger</a>.</li>
</ul>
<p><strong>References</strong></p>
<pre><span class="Apple-style-span" style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;line-height:19px;white-space:normal;font-size:13px;">[Cunn 07] Cunningham, Ward. Making Fixtures. <em>Framework for Integrated Test</em>. October 12, 2007. <a href="http://fit.c2.com/?MakingFixtures">http://fit.c2.com/search.cgi?search=WelcomeVisitors</a></span></pre>
<p><a href="http://fit.c2.com/?MakingFixtures"><br />
</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thirdshelf.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thirdshelf.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thirdshelf.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thirdshelf.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thirdshelf.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thirdshelf.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thirdshelf.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thirdshelf.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thirdshelf.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thirdshelf.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thirdshelf.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thirdshelf.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thirdshelf.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thirdshelf.wordpress.com/547/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=547&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thirdshelf.com/2011/04/23/getting-fit-uncle-bob-style/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Sydney</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/04/fitnessetestsetup.png?w=300" medium="image">
			<media:title type="html">FitNesseTestSetup</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/04/fitnessetestrun.png?w=300" medium="image">
			<media:title type="html">FitNesseTestRun</media:title>
		</media:content>
	</item>
		<item>
		<title>Programming Titles : 2011</title>
		<link>http://thirdshelf.com/2011/04/17/programming-titles-2011/</link>
		<comments>http://thirdshelf.com/2011/04/17/programming-titles-2011/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 13:26:37 +0000</pubDate>
		<dc:creator>Sydney du Plooy</dc:creator>
				<category><![CDATA[books]]></category>
		<category><![CDATA[kindle]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[Domain-driven design]]></category>
		<category><![CDATA[Methodologies]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[Software architecture]]></category>

		<guid isPermaLink="false">http://thirdshelf.com/?p=562</guid>
		<description><![CDATA[This site is called Third Shelf and so I thought it befitting to list some of my favourite programming books. By the way, they are actually on my first shelf. When buying programming books, there are a few considerations. Do you need them at work and home? What about when you are travelling? They tend [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=562&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This site is called Third Shelf and so I thought it befitting to list some of my favourite programming books. By the way, they are actually on my first shelf.</p>
<p>When buying programming books, there are a few considerations. Do you need them at <a href="http://stackoverflow.com/q/485154/31770">work and home</a>? What about when you are travelling? They tend to get heavy. For this reason, I <a href="http://thirdshelf.com/2010/03/22/kindle-review/">decided to buy</a> a <a href="http://www.amazon.com/gp/product/B002Y27P3M/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B002Y27P3M%22">Kindle</a>. Well, that was a nice idea. It is comfortable and has the same weight no matter how many books you load on it. Great for travelling. Well, that only lasted for a short while until I had to read source code which is justified by the Kindle. It&#8217;s just ugly. Diagrams are not great and tend to be small and not very readable.  I decided that I will only buy them in paper form. Some publishers will let you have the<a href="http://en.wikipedia.org/wiki/E-book"> e-book</a> for free when you purchase the paper version.</p>
<p>Most of these books are applicable to <a href="http://en.wikipedia.org/wiki/Object-oriented_programming">object-oriented programming</a>, while others are simply timeless practices that are bound to stick for a long time. This is not a definitive list but merely what influenced my thoughts, concepts and styles.</p>
<div><strong>Patterns</strong></div>
<div><strong><br />
</strong></div>
<ul>
<li><a href="http://www.amazon.com/gp/product/0321127420/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321127420">Patterns of Enterprise Application Architecture</a><a href="http://www.amazon.com/gp/product/0321127420/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321127420"><br />
</a></li>
<li><a href="http://www.amazon.com/gp/product/0201633612/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201633612">Design Patterns: Elements of Reusable Object-Oriented Software</a><img src="http://www.assoc-amazon.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=0201633612" alt="" width="1" height="1" border="0" /></li>
</ul>
<div><strong>Design </strong></div>
<div><strong><br />
</strong></div>
<ul>
<li><a href="http://www.amazon.com/gp/product/0321125215/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321125215">Domain-Driven Design: Tackling Complexity in the Heart of Software</a></li>
<li><a href="http://www.amazon.com/gp/product/0735619670/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0735619670">Code Complete: A Practical Handbook of Software Construction</a><img style="border:none!important;margin:0!important;" src="http://www.assoc-amazon.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=0735619670" alt="" width="1" height="1" border="0" /></li>
<li><a href="http://www.amazon.com/gp/product/0465067107/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0465067107">The Design of Everyday Things</a></li>
</ul>
<div><strong>Data Structures</strong></div>
<div><strong><br />
</strong></div>
<ul>
<li><a href="http://www.amazon.com/gp/product/0324782012/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0324782012">Data Structures Using C++</a><img src="http://www.assoc-amazon.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=0324782012" alt="" width="1" height="1" border="0" /></li>
</ul>
<div><strong>Craftmanship </strong></div>
<div><strong><br />
</strong></div>
<div>
<ul>
<li><a href="http://www.amazon.com/gp/product/020161622X/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=020161622X">The Pragmatic Programmer: From Journeyman to Master</a><img src="http://www.assoc-amazon.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=020161622X" alt="" width="1" height="1" border="0" /></li>
<li><a href="http://www.amazon.com/gp/product/0132350882/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0132350882">Clean Code: A Handbook of Agile Software Craftsmanship</a><img src="http://www.assoc-amazon.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=0132350882" alt="" width="1" height="1" border="0" /></li>
</ul>
<div><strong>Assembler</strong></div>
<div><strong><br />
</strong></div>
</div>
<ul>
<li><a href="http://www.amazon.com/gp/product/1590596463/ref=as_li_ss_tl?ie=UTF8&amp;tag=thethishe-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1590596463">Expert .NET 2.0 IL Assembler</a><img style="border:none!important;margin:0!important;" src="http://www.assoc-amazon.com/e/ir?t=&amp;l=as2&amp;o=1&amp;a=1590596463" alt="" width="1" height="1" border="0" /></li>
</ul>
<div> For other books on programming see this<a href="http://stackoverflow.com/q/1711/31770"> StackOverflow question</a>.</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thirdshelf.wordpress.com/562/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thirdshelf.wordpress.com/562/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thirdshelf.wordpress.com/562/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thirdshelf.wordpress.com/562/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thirdshelf.wordpress.com/562/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thirdshelf.wordpress.com/562/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thirdshelf.wordpress.com/562/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thirdshelf.wordpress.com/562/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thirdshelf.wordpress.com/562/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thirdshelf.wordpress.com/562/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thirdshelf.wordpress.com/562/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thirdshelf.wordpress.com/562/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thirdshelf.wordpress.com/562/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thirdshelf.wordpress.com/562/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=562&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thirdshelf.com/2011/04/17/programming-titles-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Sydney</media:title>
		</media:content>

		<media:content url="http://www.assoc-amazon.com/e/ir?t=&#38;l=as2&#38;o=1&#38;a=0201633612" medium="image" />

		<media:content url="http://www.assoc-amazon.com/e/ir?t=&#38;l=as2&#38;o=1&#38;a=0735619670" medium="image" />

		<media:content url="http://www.assoc-amazon.com/e/ir?t=&#38;l=as2&#38;o=1&#38;a=0324782012" medium="image" />

		<media:content url="http://www.assoc-amazon.com/e/ir?t=&#38;l=as2&#38;o=1&#38;a=020161622X" medium="image" />

		<media:content url="http://www.assoc-amazon.com/e/ir?t=&#38;l=as2&#38;o=1&#38;a=0132350882" medium="image" />

		<media:content url="http://www.assoc-amazon.com/e/ir?t=&#38;l=as2&#38;o=1&#38;a=1590596463" medium="image" />
	</item>
		<item>
		<title>Unit testing with Jenkins</title>
		<link>http://thirdshelf.com/2011/03/21/unit-testing-with-jenkins/</link>
		<comments>http://thirdshelf.com/2011/03/21/unit-testing-with-jenkins/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 15:51:23 +0000</pubDate>
		<dc:creator>Sydney du Plooy</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[rants]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Jenkins]]></category>
		<category><![CDATA[MbUnit]]></category>
		<category><![CDATA[Microsoft Visual Studio]]></category>
		<category><![CDATA[msbuild]]></category>
		<category><![CDATA[MsTest]]></category>
		<category><![CDATA[NUnit]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[Unit testing]]></category>
		<category><![CDATA[XUnit]]></category>

		<guid isPermaLink="false">http://thirdshelf.com/?p=511</guid>
		<description><![CDATA[Continuing to setup a build for the first time with Jenkins there is, uh, another challenge. For some reason, I thought it clever to make use of MsTest. This works wonderfully on the development machine. But, of course, when it comes to the build server, you can expect all sorts of weirdness. For example, error CS0246: The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=511&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Continuing to setup a build for the first time with Jenkins there is, uh, another challenge. For some reason, I thought it clever to make use of MsTest. This works wonderfully on the development machine. But, of course, when it comes to the build server, you can <a href="http://thirdshelf.com/2011/03/19/building-a-net-application-with-jenkins/">expect all sorts of weirdness</a>. For example, error CS0246: The type or namespace name &#8216;TestMethodAttribute&#8217; could not be found&#8230;</p>
<p>We&#8217;re sorry, but our testing tools don&#8217;t come standard with the .NET Framework, or in any other way, except TFS and Visual Studio, unless you are willing to follow this <a href="http://www.shunra.com/shunrablog/index.php/2009/04/23/running-mstest-without-visual-studio/">brave soul</a>. I share <a href="http://devlicio.us/blogs/derik_whittaker/archive/2008/09/25/clean-build-server-with-mstest-fail.aspx">Derik Whittaker&#8217;s sentiment on the MsTest and build server</a> issue.</p>
<blockquote><p>This is another issue to me because MSTest is the ONLY test framework (for .Net) that I know of that does not run with a single DLL placed into the bin (or any other output directory).  I just have to ask the genius&#8217; over in Redmond what the hell were they smoking when they decided to build MSTest.  It is pretty clear they had no prior knowledge of how to use the other tools such as NUnit, MBUnit or xUnit (I know, xUnit was not out yet).  I know this because of all the various testing frameworks MSTest is the one that does everything different.  You could argue they were on the cutting edge and were innovating, but I call BS on that.</p></blockquote>
<p>This can be solved. <em>So long MsTest&#8230; Hello NUnit!</em></p>
<p><strong>Converting from MsTest to NUnit</strong></p>
<p>Converting from MsTest is a simple case of find and replace of <a href="http://nunit.org/index.php?p=attributes&amp;r=2.5.9">attributes</a>. NUnit  has the nifty Assert.Catch&lt;T&gt; which beats <a href="http://www.mbunit.com/">MbUnit</a>, MsTest and <a href="http://xunit.codeplex.com">xUnit</a>. xUnit comes with Assert.Throws&lt;T&gt; but cannot assert the exception message whereas NUnit can. No more [ExpectedException] attributes.</p>
<p>Integrating NUnit with the build file (which is MsBuild) is pretty easy:</p>
<p>&lt;Exec Command=&#8221;$(NUnitFolder)\nunit-console-x86.exe [TestAssembly] /framework=net-4.0 /xml=$(TestResultsFolder)\TestResults.xml&#8221; /&gt;</p>
<p>A single Exec statement and out comes an Xml file. To keep the build server clean, I decided to add all the necessary files for unit testing into source control along with the project. The bare minimum files for running NUnit from the command line comes down to the following files:</p>
<ul>
<li>nunit.core.dll</li>
<li>nunit.core.interfaces.dll</li>
<li>nunit.framework.dll</li>
<li>nunit.util.dll</li>
<li>nunit.console-runner.dll</li>
<li>nunit-console-x86.exe</li>
<li>nunit-agent-x86.exe</li>
<li>nunit-agent-x86.exe.config</li>
</ul>
<p>To make it work on .Net Framework 4.0, you have to include the <em>/framework=net-4.0</em> switch on the command line.</p>
<p><strong>Setting up Jenkins with NUnit</strong></p>
<p>Install the NUnit plugin for Jenkins, point it to your test results file and after a build you&#8217;ll get the summarised test results.  It&#8217;s a neat table with all the classes and their respective timings and so on.</p>
<p><a href="http://thirdshelf.files.wordpress.com/2011/03/jenkins-test-results.png"><img class="alignnone size-full wp-image-541" title="Jenkins-Test-Results" src="http://thirdshelf.files.wordpress.com/2011/03/jenkins-test-results.png?w=720" alt=""   /></a></p>
<p>Finally, I have a working build with unit testing. If only it had an installer&#8230;</p>
<p><strong><br />
</strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/thirdshelf.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/thirdshelf.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/thirdshelf.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/thirdshelf.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/thirdshelf.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/thirdshelf.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/thirdshelf.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/thirdshelf.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/thirdshelf.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/thirdshelf.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/thirdshelf.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/thirdshelf.wordpress.com/511/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/thirdshelf.wordpress.com/511/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/thirdshelf.wordpress.com/511/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=thirdshelf.com&#038;blog=3179385&#038;post=511&#038;subd=thirdshelf&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://thirdshelf.com/2011/03/21/unit-testing-with-jenkins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">Sydney</media:title>
		</media:content>

		<media:content url="http://thirdshelf.files.wordpress.com/2011/03/jenkins-test-results.png" medium="image">
			<media:title type="html">Jenkins-Test-Results</media:title>
		</media:content>
	</item>
	</channel>
</rss>
