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

<channel>
	<title>Software Configuration Management and Agile Software Development &#187; AccuLoad</title>
	<atom:link href="http://accurev.com/blog/tag/accuload/feed/" rel="self" type="application/rss+xml" />
	<link>http://accurev.com/blog</link>
	<description>SCM and Agile Software Development Blog</description>
	<lastBuildDate>Fri, 03 Feb 2012 19:28:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Continuous Integration- Like a Perfectly Functioning Toaster Oven</title>
		<link>http://accurev.com/blog/2010/07/12/continuous-integration-toaster-oven/</link>
		<comments>http://accurev.com/blog/2010/07/12/continuous-integration-toaster-oven/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 17:02:38 +0000</pubDate>
		<dc:creator>clucca</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[SCM Resources]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[AccuLoad]]></category>
		<category><![CDATA[agile best practices]]></category>
		<category><![CDATA[customer results]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[feedback loops]]></category>

		<guid isPermaLink="false">http://www.accurev.com/blog/?p=2028</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/07/12/continuous-integration-toaster-oven/' addthis:title='Continuous Integration- Like a Perfectly Functioning Toaster Oven ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>Where would we be in the world if we didn’t have feedback loops? Whether you know it or not, feedback loops are everywhere and you probably use them every day. Your toaster oven, your car, and the computer you’re using right now to read this blog post- feedback loops are everywhere.  Heck, even most biological [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/07/12/continuous-integration-toaster-oven/' addthis:title='Continuous Integration- Like a Perfectly Functioning Toaster Oven '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/07/12/continuous-integration-toaster-oven/' addthis:title='Continuous Integration- Like a Perfectly Functioning Toaster Oven ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><h2><span style="font-weight: normal; font-size: 13px;"><span style="color: #000000;">Where would we be in the world if we didn’t have feedback loops? Whether you know it or not, feedback loops are everywhere and you probably use them every day. Your toaster oven, your car, and the computer you’re using right now to read this blog post- feedback loops are everywhere.  Heck, even most biological organisms including humans and animals are constructed out of feedback loops.</span> (<a href="http://en.wikipedia.org/wiki/Feedback#In_biology" target="_blank"><span style="color: #3366ff;">Don&#8217;t believe me?</span></a>) <span style="color: #000000;">It&#8217;s the basis of all life!</span></span></h2>
<p><span style="color: #000000;">A classic example of a feedback loop is the temperature control on your toaster oven. <a href="http://www.accurev.com/blog/wp-content/uploads/2010/07/Toaster.jpg"><img class="alignleft size-medium wp-image-2040" title="The Continuous Integration Feedback Loop- Like a Perfectly Working Toaster Oven" src="http://www.accurev.com/blog/wp-content/uploads/2010/07/Toaster-300x300.jpg" alt="Toaster 300x300 Continuous Integration  Like a Perfectly Functioning Toaster Oven" width="300" height="300" /></a><br />
</span></p>
<p><span style="color: #000000;">Let’s imagine that we set the temperature to 300 degrees.</span></p>
<p><span style="color: #000000;">Here is the loop in which your toaster oven sets its temperature to 300 degrees:</span></p>
<p><span style="color: #000000;"> 1. Check thermostat for temperature</span></p>
<p><span style="color: #000000;"> 2. If greater than or equal to 300 degrees, stop heating coils</span></p>
<p><span style="color: #000000;"> 3. If less than 300 degrees, heat coils</span></p>
<p><span style="color: #000000;"> 4.  Goto step #1</span></p>
<p><span style="color: #000000;">“So what?” You’re probably saying to yourself, that’s easy.  Provide feedback to a device and it’s behavior will change. Why is this a big deal?</span></p>
<p><a href="http://www.accurev.com/continuous-integration.html" target="_blank"><span style="color: #3366ff;">Continuous integration</span></a> <span style="color: #000000;">is the feedback loop for your development organization. It’s a feedback loop for </span><strong><span style="color: #000000;">people.</span></strong><span style="color: #000000;"> It allows your developers to rapidly change course at a moment’s notice.</span></p>
<h2><span style="color: #000000;">The Continuous Integration Feedback Loop</span></h2>
<p><span style="color: #000000;">Let’s run through the continuous integration feedback loop, which is remarkably similar to the toaster oven.</span></p>
<p><span style="color: #000000;">Here is the feedback loop for a developer while using continuous integration:</span></p>
<p style="padding-left: 60px;"><span style="color: #000000;">1. Checkin code</span></p>
<p style="padding-left: 60px;"><span style="color: #000000;">2. Receive e-mail of build results</span></p>
<p style="padding-left: 60px;"><span style="color: #000000;">3. If build/test is success, enjoy the fruits of your labor</span></p>
<p style="padding-left: 60px;"><span style="color: #000000;">4.  If build/test is broken, fix and Goto step #1</span></p>
<p><span style="color: #000000;">If you don’t believe a feedback loop is necessary, if you’re thinking everything is working fine, you’re fooling yourself!  The reason? If there is a problem, you’re just not aware of it. In the same sense, would you just turn off the thermostat in your toaster?</span></p>
<p><span style="color: #000000;">Here’s how the toaster works without the feedback loop:</span></p>
<p style="padding-left: 60px;"><span style="color: #000000;">1. Heat coils</span></p>
<p style="padding-left: 60px;"><span style="color: #000000;">2.  Burn down house</span></p>
<p><span style="color: #000000;">And that’s what NOT doing continuous integration is like… playing with fire.</span></p>
<p><span style="color: #000000;">A lot of times I hear from customers who aren’t doing continuous integration that it’s just too hard to implement CI in their organization. The reasons vary, but usually come down to not being able to afford rewriting manual processes already in place in order to gain a rapid, consistent build running. To this I say, you are using the wrong tools, and bad practices to boot. The amount of rework and frustration you will save will be worth your effort. It’s a fools game not to expose your integration problems to the rest of the organization.</span></p>
<p><span style="color: #000000;">When I talk to customers who HAVE implemented a CI solution, I’m astonished at what I hear. They say “We never know we had so many issues until the QA cycle” or “We can’t’ believe we ever lived without this.”</span></p>
<p><span style="color: #000000;">Changing course is one of the key principles of <a href="http://www.accurev.com/agile-software-development.html" target="_blank">Agile</a>; <a href="http://www.accurev.com/blog/2010/05/07/inspecting-adapting-agile-processes/" target="_blank">inspecting and adapting</a> is what allows your team to avoid disasters. It gives visibility into what’s happening with your current processes. Continuous integration is the tool that you need to allow your teams to function like a perfectly functioning toaster oven.</span></p>
<p><span style="color: #000000;">So what does a world look like without feedback? Houses on fire, cars crashing, development organizations failing and developers blindly making disastrous coding changes. Do yourself a favor, and </span><strong><span style="color: #000000;">think about feedback.</span></strong></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2010/07/12/continuous-integration-toaster-oven/' addthis:title='Continuous Integration- Like a Perfectly Functioning Toaster Oven '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2010/07/12/continuous-integration-toaster-oven/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The AccuRev CLI &#8211; Going beyond SCM</title>
		<link>http://accurev.com/blog/2008/10/01/accurev-cli-going-beyond-scm/</link>
		<comments>http://accurev.com/blog/2008/10/01/accurev-cli-going-beyond-scm/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 14:51:51 +0000</pubDate>
		<dc:creator>AccuRev</dc:creator>
				<category><![CDATA[AccuRev]]></category>
		<category><![CDATA[Customer Guest Blogs]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[AccuLoad]]></category>
		<category><![CDATA[AccuRev CLI]]></category>
		<category><![CDATA[AccuRev command line interface]]></category>
		<category><![CDATA[AccuRev XML]]></category>
		<category><![CDATA[change logs]]></category>
		<category><![CDATA[database objects AccuRev]]></category>
		<category><![CDATA[database server change logs]]></category>
		<category><![CDATA[DDL change]]></category>
		<category><![CDATA[DDL event]]></category>
		<category><![CDATA[SQL Object Scripter]]></category>
		<category><![CDATA[stored procedures]]></category>
		<category><![CDATA[web-based application]]></category>

		<guid isPermaLink="false">http://accurev.wordpress.com/?p=379</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/10/01/accurev-cli-going-beyond-scm/' addthis:title='The AccuRev CLI &#8211; Going beyond SCM ' ><a href="//addthis.com/bookmark.php?v=250&#38;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">&#124;</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div>By Ryan LaNeve, AVI-SPL Much has been written on this blog already regarding the ease with which AccuRev allows you to tailor your development process without having to fight with your SCM software. While I could offer yet another account of how simple and straightforward it is to manage our particular process using AccuRev, instead [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/10/01/accurev-cli-going-beyond-scm/' addthis:title='The AccuRev CLI &#8211; Going beyond SCM '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/10/01/accurev-cli-going-beyond-scm/' addthis:title='The AccuRev CLI &#8211; Going beyond SCM ' ><a href="//addthis.com/bookmark.php?v=250&amp;username=xa-4d2b47597ad291fb" class="addthis_button_compact">Share</a><span class="addthis_separator">|</span><a class="addthis_button_preferred_1"></a><a class="addthis_button_preferred_2"></a><a class="addthis_button_preferred_3"></a><a class="addthis_button_preferred_4"></a></div><p><strong>By Ryan LaNeve, AVI-SPL</strong></p>
<p>Much has been written on this blog already regarding the ease with which AccuRev allows you to tailor your <a href="http://www.accurev.com/accurev-software-development-process.html" target="_blank">development process</a> without having to fight with your <a href="http://www.accurev.com/software-configuration-management-resources.htm" target="_blank">SCM</a> software. While I could offer yet another account of how simple and straightforward it is to manage our particular process using AccuRev, instead I thought I’d take a few minutes to point out some of the things we’ve done using the tool’s command-line interface and its ability to output results formatted as XML.</p>
<p>Of the various tools we have created over the years, the two we find most useful are what we call “AccuLoad” and “SQL Object Scripter”. The former pulls data out of AccuRev, while the latter puts data into AccuRev. Both were developed in a matter of hours thanks to the extremely intuitive command-line interface which AccuRev provides. Let’s take a closer look at each.</p>
<p>We’ll start with our “SQL Object Scripter”. Anyone whose development efforts involve a database server knows how difficult it is to maintain change logs for the “code” kept within the database. There are a number of “best practices” with regards to maintaining this information within an SCM, but in our experience they are all too time-consuming and involved, which leads to one or more members of the team either forgoing the process due to time constraints or just ignoring the process all together. Maybe we’ve just become spoiled by AccuRev allowing us to work exactly the way we want and otherwise staying out of our way, but we now have a hard time following any procedure which requires us to change the way we do things.</p>
<p>So one day a couple of us sat down and decided to find a new solution. We felt that, at a minimum, what we really wanted was to be able to view changes over time for our database objects, such as tables, views and stored procedures. We knew that if we could just get each change into AccuRev some of our issues would immediately disappear, but we found it too difficult to require the entire team to manually create every script and then manually promote that script into our SCM. We decided that what we needed was a tool that could simply detect changes to our database objects and automatically store those changes within AccuRev. Again, thanks to the simplicity of AccuRev and its CLI, our “SQL Object Scripter” tool was born in a matter of hours. We now have a record in AccuRev of (almost) every change made to any database object we care about, which then allows to use the features of AccuRev to view the history of any object, the differences between any versions of any object and even an annotation of any object to see who is responsible for the make-up of the object. The solution consists of a few parts: a SQL Server table to store DDL change event details, with a DDL trigger on the various databases we care about. The trigger fires whenever a DDL event occurs, such as the creation or alteration of a table, view or stored procedure, and the details of the event get logged to a table. Our custom console app is then scheduled to run every few minutes and checks the table for any records. When a record is found, the console app scripts out the definition of the object to a file and then uses the AccuRev CLI to add/keep/promote the file to our “SQL Scripts” depot – whatever is appropriate depending on whether the object is brand new or pre-existing and has been changed. The AccuRev commands all run within the context of whichever user made the change in the database itself, so all of our AccuRev transactions are associated with the correct team member. While this solution is not optimal and does not provide as much traceability as having each developer maintain and promote database change scripts themselves, we have found it to be an excellent interim solution which was extremely easy to put together.</p>
<p>Another of our tools is the one we call “AccuLoad”. The purpose of this tool is to pull various bits of information out of AccuRev and load that information into a database. We then use the information in the database from several other applications. The tool is a console application which runs in a couple of different modes, but the primary mode is run via an AccuRev trigger. Whenever a promote happens in one of our depots, our custom trigger runs and fires up our console app, passing in a few details such as the name of the depot, the name of the stream and the transaction number of the promote. AccuLoad then takes this information and makes various calls to the AccuRev CLI to gather more details, such as which elements were included in the promote, the version numbers of each of those elements, the user who performed the promote, etc, etc… Additionally, a diff is run against any changed elements, and those details are stored in the database as well. Gathering all of this information from AccuRev was extremely simple thanks not only to the intuitive nature of the functionality exposed by the AccuRev CLI, but also thanks to the option of having the results returned as XML. While I’m sure it would have been possible to create such a tool using any SCM, I doubt we would have ever found the time to do so had we not been fortunate enough to have AccuRev as our SCM. It was, again, only a matter of hours from the time we came up with the idea for AccuLoad and the time our first promotions were being logged in our database.</p>
<p>Having this database detailing the activity in our SCM, we were then able to create several other tools to utilize the information, such as one we call “AccuBrowse”, seen below. This web-based application allows us to browse the database and view any transaction within any stream of any of our depots, and see who performed the promote, the comments supplied during the promote, the elements included in the promote and the differences for any changed element. I should mention that much of this functionality is probably available in the <a href="http://www.accurev.com/web-interface.html" target="_blank">AccuRev Web Interface,</a> though we have not actually used that tool provided by AccuRev. Ours was created a couple of years ago and suits our needs. Beyond just allowing us to browse our SCM history via a web-interface, our database also allows us to perform some analysis, such as frequency of change for elements within a specific depot or stream, which allows to keep tabs on classes within our systems which may have too much responsibility. We can even run queries against the data to find “problematic” code, such as those files most often included in promotions which cause a failed build (not that our builds ever fail, of course…).</p>
<p>In summary, there are a myriad of fantastic features and functionality within AccuRev which make it a great fit as an SCM for any development environment. Once you’ve got your core needs taken care of by the out-of-the-box functionality, I encourage you to explore what can be done with the provided CLI and its XML-formatted output. In our experience, if you can imagine it, you can build it with AccuRev in no time at all.</p>
<p>Our custom AccuBrowse application, viewing a transaction involving a SQL Server stored procedure:</p>
<p><a href="http://www.accurev.com/blog/wp-content/uploads/2008/09/accurev-accubrowse1.png"><img class="alignleft size-medium wp-image-384" title="accurev-accubrowse1" src="http://www.accurev.com/blog/wp-content/uploads/2008/09/accurev-accubrowse1.png?w=300" alt=" The AccuRev CLI   Going beyond SCM" width="300" height="155" /></a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://accurev.com/blog/2008/10/01/accurev-cli-going-beyond-scm/' addthis:title='The AccuRev CLI &#8211; Going beyond SCM '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://accurev.com/blog/2008/10/01/accurev-cli-going-beyond-scm/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

