<?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>Mike Conley&#039;s Blog &#187; MarkUs</title>
	<atom:link href="http://mikeconley.ca/blog/tag/markus/feed/" rel="self" type="application/rss+xml" />
	<link>http://mikeconley.ca/blog</link>
	<description>The personal blog of a Toronto based software developer, musician, sound designer, and theatre enthusiast.</description>
	<lastBuildDate>Tue, 10 Jan 2012 13:58:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>My GSoC Project:  Review Board Extensions</title>
		<link>http://mikeconley.ca/blog/2010/04/27/my-gsoc-project-review-board-extensions/</link>
		<comments>http://mikeconley.ca/blog/2010/04/27/my-gsoc-project-review-board-extensions/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 19:54:24 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Code Reviews]]></category>
		<category><![CDATA[Extensions]]></category>
		<category><![CDATA[GSoC]]></category>
		<category><![CDATA[Review Board]]></category>
		<category><![CDATA[addons]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[bloat]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[feature creep]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[MarkUs]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[reviewboard]]></category>
		<category><![CDATA[sonar]]></category>

		<guid isPermaLink="false">http://mikeconley.ca/blog/?p=1201</guid>
		<description><![CDATA[If you didn&#8217;t already know, Review Board is an open-source web-based code review tool.  The MarkUs Team has been using Review Board for pre-commit code review for about a year now.  This has given the team a number of advantages: For a team that usually has a 4 month turnover, this allows us to quickly [...]]]></description>
			<content:encoded><![CDATA[<p>If you didn&#8217;t already know, <a href="http://www.reviewboard.org">Review Board</a> is an open-source web-based code review tool.  <a href="http://www.markusproject.org">The MarkUs Team</a> has been using Review Board for <a href="http://mikeconley.ca/blog/2010/02/02/pre-commit-code-review-in-markus-development/">pre-commit code review</a> for about a year now.  This has given the team a number of advantages:</p>
<ol>
<li>For a team that usually has a 4 month turnover, this allows us to quickly get new team members up to speed with how to contribute to MarkUs.  We review every change that they propose, and give them tips/guidance on how to make it fit in well with the application.  They learn, and the applications code stays healthy.</li>
<li>We catch defects before they enter the code base.  Simple as that.</li>
<li>We get a good sense of what other people are working on, and what is going on in the code.  Review Board has become a central conversation and learning hub for the developers on the MarkUs team.</li>
</ol>
<p>So, the long and the short of it:  <em>I like Review Board.  Review Board helps us write better code.  I want to make Review Board better.</em></p>
<p>So what am I proposing?</p>
<h3>How to Avoid A Bloated Software Monster</h3>
<p>You can never make some people happy.</p>
<p>No matter how decent your software is, someone will eventually come up to you and say:</p>
<blockquote><p>Wow!  Your software would be perfect if only it had feature XYZ!  Sadly, because you don&#8217;t have feature XYZ, I can&#8217;t use it.  Please implement, k thx!</p></blockquote>
<p>And so you either have to politely say &#8220;no&#8221;, and lose that user, or say &#8220;yes&#8221;, and add feature XYZ to the application.  And for users out there who don&#8217;t need, or don&#8217;t care about feature XYZ, that new feature just becomes a distraction and adds no value.  Make this happen a bunch of times, and you&#8217;ve got yourself a bloated mutha for a piece of software.</p>
<p>And we don&#8217;t want a bloated piece of software.  But we <em>do </em>want to make our users happy, and provide feature XYZ for them if they want it.</p>
<p>So what&#8217;s the solution?  <strong>We provide an extension framework</strong> (which is also sometimes called a plug-in architecture).</p>
<p>An extension framework allows developers to easily expand a piece of software to do new things.  So, if a user wants feature XYZ, we (or someone else) just creates and make available an extension that implements the feature.  The user installs the extension, activates it, and bam &#8211; our user is happy as a clam with their new feature.</p>
<p>And if we make it super-easy to develop them, third-party developers can write new, wonderful, interesting extensions to do things that&#8230;well, we wouldn&#8217;t have considered in the first place. It&#8217;s a new place for innovation.  What&#8217;s that old cliché?</p>
<blockquote><p>If you build it [the plug-in framework], they will come [the third-party developers who write awesome things]</p></blockquote>
<p>And the developers do come.  Just look at <a href="https://addons.mozilla.org/en-US/firefox/">Firefox add-ons</a> or <a href="http://wordpress.org/extend/plugins/">WordPress plugins</a>.  Entire <em>ecosystems</em> of extensions, doing things that the original developers would probably have never dreamed of doing on their own.  Hell, <em>I&#8217;ve </em>even written <a href="../category/technology/firefox-extensions/alertcheck-firefox-extensions-technology/">a Firefox add-on.</a> And users love customizing their Firefox / WordPress with those extensions.  It <em>adds value</em>.</p>
<p>So we get wins all over the place:</p>
<ul>
<li>Our user gets their feature</li>
<li>The software gets more attractive because it&#8217;s flexible and customizable</li>
<li>The original software developers get to focus on the core piece of software, and let the third-party developers focus on the fringe features</li>
</ul>
<p>And this is where I think I can help Review Board.</p>
<p>(Before I go on, if you&#8217;re interested, <a href="http://www.fogcreek.com/fogbugz/blog/post/the-fogbugz-plugin-architecture.aspx">here&#8217;s another article on the how and the why of plug-in architectures</a>)</p>
<h3>Review Board Extensions</h3>
<p>So if you look at the <a href="http://code.google.com/p/reviewboard/w/list">Review Board Wiki</a>, or glance at the <a href="http://www.reviewboard.org/mailing-lists/">mailing lists</a> you see numerous requests from users for new features, for example:</p>
<blockquote><p>It would be nice if the review board had a &#8220;next comment&#8221; button that is always available to click, or had a collapse/expand button. This would make it easier to see other people&#8217;s comments in cases like this.</p>
<p>&#8230;</p>
<p>It will be nice to have post-commit support. Instead of every post-commit review being a separate URL, if we could setup default rules for post-commit reviews to update an existing review providing the diff-between-diff features, it would be very useful.</p></blockquote>
<p>The Review Board developers could smell the threat of bloated feature-creep from a mile away.  So, <a href="http://github.com/chipx86/reviewboard/tree/extensions">in a separate branch</a>, they began working on integrating an extension framework into Review Board.</p>
<p>The extension branch, however, has been gathering dust, while the developers focus on more critical patches and releases.</p>
<p>My GSoC proposal is to finish off a draft of the extension framework, document it, and build a very simple extension for it.  My simple extension will allow me to record basic statistics about Review Board reviewers &#8211; for example, how long they spend on a particular review, their inspection rate, etc.</p>
<p>Having been a project lead <a href="http://www.markusproject.org">MarkUs</a> for so long, it&#8217;s going to be a good experience to be back on &#8220;the bottom&#8221; &#8211; to be the new developer who doesn&#8217;t entirely have a sense of the application code yet.  It&#8217;s going to be good to go code spelunking again.  I&#8217;ve done some preliminary explorations, and it&#8217;s reminding me of my first experiences with MarkUs.  Like <a href="http://www.youtube.com/watch?v=7N7i7_ts_eg">a submarine using its sonar</a>, I&#8217;m slowly getting a sense of the code terrain.</p>
<p>I&#8217;ll let you know what my first few sweeps find.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikeconley.ca/blog/2010/04/27/my-gsoc-project-review-board-extensions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ping!</title>
		<link>http://mikeconley.ca/blog/2010/04/27/ping/</link>
		<comments>http://mikeconley.ca/blog/2010/04/27/ping/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 18:03:05 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Code Reviews]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Musings]]></category>
		<category><![CDATA[Poland]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Review Board]]></category>
		<category><![CDATA[UCDP]]></category>
		<category><![CDATA[auschwitz]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[courses]]></category>
		<category><![CDATA[ethics]]></category>
		<category><![CDATA[google summer of code]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[MarkUs]]></category>
		<category><![CDATA[radio play]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[still alive]]></category>

		<guid isPermaLink="false">http://mikeconley.ca/blog/?p=1199</guid>
		<description><![CDATA[I&#8217;ve done it again:  I&#8217;ve let dust gather on my blog. Quick update: I&#8217;ve finished my courses for this semester, and have gone into full-blown research mode. My research proposal is going through ethics review, in order to make sure that I&#8217;m not going to blow things up (or hurt anybody if I do) While [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve <a href="http://mikeconley.ca/blog/2010/01/19/markus-squad-hows-refactor-my-code-belated-happy-holidays-im-not-dead/">done it</a> <a href="http://mikeconley.ca/blog/2009/08/20/still-alive/">again</a>:  I&#8217;ve let dust gather on my blog.</p>
<p>Quick update:</p>
<ul>
<li>I&#8217;ve finished my courses for this semester, and have gone into <a href="http://mikeconley.ca/blog/2010/03/29/does-peer-grading-make-students-better-programmers/">full-blown research mode</a>.</li>
<li>My research proposal is going through ethics review, in order to make sure that I&#8217;m not going to blow things up (or hurt anybody if I do)</li>
<li>While my paperwork is reviewed, I&#8217;m refining my procedure and apparatus.  Better and better.</li>
<li>I&#8217;ve been accepted into <a href="http://socghop.appspot.com">Google Summer of Code</a> this year &#8211; I&#8217;ll be working on <a href="http://www.reviewboard.org">Review Board</a>.  Details about my project will be the subject of an upcoming post, which I will toss up shortly.</li>
<li>I may or may not be co-directing a radio play.  I&#8217;ll let you know.</li>
<li><a href="http://www.markusproject.org">The MarkUs team</a> is about to release version 0.7, and a fresh batch of Summer students will soon be here at UofT to work on it!</li>
<li>I have <em>not </em>forgotten about the <a href="http://www.uc.utoronto.ca/content/view/340/2083/">UCDP</a> <a href="http://mikeconley.ca/blog/category/personal/poland/">trip to Poland</a>.  I still have to tell you what we saw and did at Auschwitz.  Cripes &#8211; it&#8217;s almost a year since I returned, and I&#8217;m only half-way through the whole story.  And there&#8217;s a ton more to tell.  Coming soon.</li>
</ul>
<p>Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikeconley.ca/blog/2010/04/27/ping/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Author Preparation in Code Review:  What Are Those Authors Saying?</title>
		<link>http://mikeconley.ca/blog/2010/03/01/author-preparation-in-code-review-what-are-those-authors-saying/</link>
		<comments>http://mikeconley.ca/blog/2010/03/01/author-preparation-in-code-review-what-are-those-authors-saying/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 04:39:50 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Code Reviews]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[author preparation]]></category>
		<category><![CDATA[basie]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[kde]]></category>
		<category><![CDATA[MarkUs]]></category>
		<category><![CDATA[musicbrainz]]></category>
		<category><![CDATA[reviewboard]]></category>

		<guid isPermaLink="false">http://mikeconley.ca/blog/?p=1049</guid>
		<description><![CDATA[If you recall, I&#8217;m looking at author preparation in code review, and whether or not it impairs the ability of reviewers to perform objective reviews effectively. If this is really going to be my research project, I&#8217;ll need to get my feet a bit more wet before I design my experiment.  It&#8217;s all well and [...]]]></description>
			<content:encoded><![CDATA[<p>If you recall, <a href="http://mikeconley.ca/blog/2010/02/07/the-importance-of-first-impressions-how-theatre-criticism-migh-inform-peer-code-review/">I&#8217;m looking at author preparation in code review, and whether or not it impairs the ability of reviewers to perform objective reviews effectively.</a></p>
<p>If this is really going to be my research project, I&#8217;ll need to get my feet a bit more wet before I design my experiment.  It&#8217;s all well and good to say that I&#8217;m studying author preparation&#8230;but I need to actually get a handle on what authors tend to say when they prepare their review requests.</p>
<p>So how am I going to find out the kinds of things that authors write during author preparation?  <a href="http://www.markusproject.org">The MarkUs Project</a> and <a href="http://www.basieproject.org">the Basie Project</a> both use <a href="http://www.reviewboard.org/">ReviewBoard</a>, so it&#8217;ll  be no problem to grab some review requests from there.  But that&#8217;s a lot of digging if I do it by hand.</p>
<p>So I won&#8217;t do it by hand.  I&#8217;ll write a script.</p>
<p>You see, I&#8217;ve become pretty good at manipulating <a href="http://code.google.com/p/reviewboard/wiki/ReviewBoardAPI">the ReviewBoard API</a>.  So mining the MarkUs and Basie ReviewBoard&#8217;s should be a cinch.</p>
<p>But I&#8217;d like to go a little further. I want more data.  I want data from some projects outside of UofT.</p>
<p>Luckily, ReviewBoard has been kind enough to <a href="http://www.reviewboard.org/users/">list several open source projects that are also using their software</a>.  And some of those projects have their ReviewBoard instances open to the public.  So I just programmed my little script to visit those ReviewBoard instances, and return all of the review requests where the author of the request was the first person to make a review.  Easy.</p>
<p>Besides MarkUs and Basie, I chose to visit the <a href="http://www.asterisk.org/">Asterisk</a>,  <a href="http://www.kde.org/">KDE</a>, and <a href="http://musicbrainz.org/">MusicBrainz</a> projects.</p>
<p>Asterisk was a crapshoot &#8211; of all of their review requests, not a single one returned a positive.</p>
<p>But I got a few blips on the others. Not many, but a few.</p>
<p>I read all of the author preparation for each blip, and broke down what I read into some generalizations.</p>
<p>So, now to the meat:  here are some generalizations of what the authors tended to say, in no particular order.  I&#8217;ve also included a few examples so you can check them out for yourselves.</p>
<h4>&#8220;Here&#8217;s why I did this&#8221;</h4>
<p>The author makes it explicit why a change was made in a particular way.</p>
<p>Examples:</p>
<ul>
<li><a href="http://review.basieproject.org/r/425">Basie:  425</a></li>
<li><a href="http://reviewboard.kde.org/r/2447">KDE: 2447</a></li>
<li><a href="http://review.markusproject.org/r/197">MarkUs: 197</a></li>
<li><a href="http://codereview.musicbrainz.org/r/130">MusicBrainz: 130</a></li>
</ul>
<h4>&#8220;Here&#8217;s what this part does&#8230;&#8221;</h4>
<p>The author goes into detail about what a portion of their diff actually does.</p>
<p>Examples:</p>
<ul>
<li><a href="http://review.basieproject.org/r/418">Basie: 418</a></li>
<li><a href="http://reviewboard.kde.org/r/1515">KDE: 1515</a></li>
<li><a href="http://review.markusproject.org/r/139">MarkUs: 139</a></li>
<li><a href="http://codereview.musicbrainz.org/r/341">MusicBrainz: 341</a></li>
</ul>
<h4>&#8220;Can I get some advice on&#8230;&#8221;</h4>
<p>The author isn&#8217;t entirely sure of something, and wants input from their peers.</p>
<p>Examples:</p>
<ul>
<li><a href="http://review.basieproject.org/r/463">Basie:  463</a></li>
<li><a href="http://reviewboard.kde.org/r/577">KDE:  577</a></li>
<li><a href="http://review.markusproject.org/r/146">MarkUs: 146</a></li>
<li><a href="http://codereview.musicbrainz.org/r/170">MusicBrainz: 170</a></li>
</ul>
<h4>&#8220;Whoops, I made a mistake / inserted a bug.  I&#8217;ll update the diff.&#8221;</h4>
<p>The author has found a mistake in their code, and either indicates that they&#8217;ll update the diff in the review request, or change the code before it is committed.</p>
<ul>
<li><a href="http://review.basieproject.org/r/436">Basie: 436</a></li>
<li><a href="http://reviewboard.kde.org/r/483">KDE: 483</a></li>
<li><a href="http://codereview.musicbrainz.org/r/185">MusicBrainz: 185</a></li>
</ul>
<h4>&#8220;Whoops &#8211; that stuff isn&#8217;t supposed to be there.  Ignore.&#8221;</h4>
<p>The author has accidentally inserted some code into the diff that they shouldn&#8217;t have.  They give their assurances that it&#8217;ll be removed before committing &#8211; reviewers are asked to ignore.</p>
<p>Examples:</p>
<ul>
<li><a href="http://reviewboard.kde.org/r/674">KDE: 674</a></li>
<li><a href="http://review.markusproject.org/r/241">MarkUs: 241</a></li>
<li><a href="http://codereview.musicbrainz.org/r/350">MusicBrainz: 350</a></li>
</ul>
<h4>&#8220;Before you apply this patch, you should probably&#8230;&#8221;</h4>
<p>The author believes that the reviewers will need to do something special, or out of the ordinary, in order to apply the diff.</p>
<ul>
<li><a href="http://review.basieproject.org/r/461">Basie: 461</a></li>
<li><a href="http://reviewboard.kde.org/r/1107">KDE: 1107</a></li>
<li><a href="http://codereview.musicbrainz.org/r/179">MusicBrainz: 179</a></li>
</ul>
<h4>&#8220;&#8230;hello?&#8221;</h4>
<p>The review request has been idle for a while without a single review.  The author pings everybody for some attention.</p>
<p>Examples:</p>
<ul>
<li><a href="http://reviewboard.kde.org/r/619">KDE: 619</a></li>
<li><a href="http://review.markusproject.org/r/215">MarkUs: 215</a></li>
</ul>
<p>Anyhow, those are the general patterns that stand out.  I&#8217;ll post more if I find any.</p>
<p>Have you seen any other common patterns in author preparation?  What would <em>you</em> say, if you were preparing your code for someone else to review?  I&#8217;d love to hear any input.</p>
<p>PS:  If anyone is interested in getting the full list of author prepared review requests for these 4 projects, let me know, and I&#8217;ll toss up all the links.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikeconley.ca/blog/2010/03/01/author-preparation-in-code-review-what-are-those-authors-saying/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Take Those Code Review Requests for a TestDrive&#8230;</title>
		<link>http://mikeconley.ca/blog/2010/02/09/take-those-code-review-requests-for-a-testdrive/</link>
		<comments>http://mikeconley.ca/blog/2010/02/09/take-those-code-review-requests-for-a-testdrive/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 16:43:54 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Code Reviews]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[MarkUs]]></category>
		<category><![CDATA[pre-commit continuous integration]]></category>
		<category><![CDATA[testdrive]]></category>

		<guid isPermaLink="false">http://mikeconley.ca/blog/?p=1021</guid>
		<description><![CDATA[Remember how I wrote a while back that I wanted to write a script to let me do some quick and easy pre-commit continuous integration with the MarkUs project? Well, I think I just wrote one. Introducing TestDrive&#8230; TestDrive will fetch a review request, grab the latest diff (yes, found an easy way past the [...]]]></description>
			<content:encoded><![CDATA[<p>Remember how <a href="http://mikeconley.ca/blog/2010/02/02/pre-commit-code-review-in-markus-development/">I wrote a while back</a> that I wanted to write a script to let me do some quick and easy pre-commit continuous integration with the MarkUs project?</p>
<p>Well, I think I just wrote one.</p>
<h3>Introducing TestDrive&#8230;</h3>
<p>TestDrive will fetch a review request, grab the latest diff (yes, found an easy way past the lack of API there), check out a fresh copy of MarkUs, throw down the diff, set it up with some Sqlite3 databases, run your tests, and voila &#8211; go to localhost:3000, and you&#8217;re running the review request diff.</p>
<p>I&#8217;ve been using it myself for about a week or so, and so far, it&#8217;s helped me catch a number of bugs that I wouldn&#8217;t have caught just by looking at the code in ReviewBoard.  Nice.</p>
<p><a href="http://github.com/mikeconley/TestDrive">Click here to check out TestDrive.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mikeconley.ca/blog/2010/02/09/take-those-code-review-requests-for-a-testdrive/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Screencasting Code Reviews is Hard</title>
		<link>http://mikeconley.ca/blog/2010/02/08/screencasting-code-reviews-is-hard/</link>
		<comments>http://mikeconley.ca/blog/2010/02/08/screencasting-code-reviews-is-hard/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 18:30:21 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Code Reviews]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[MarkUs]]></category>
		<category><![CDATA[recording]]></category>
		<category><![CDATA[screencast]]></category>

		<guid isPermaLink="false">http://mikeconley.ca/blog/?p=1002</guid>
		<description><![CDATA[I&#8217;ve been trying to record myself performing code reviews for The MarkUs Project. It&#8217;s a lot harder than I thought it&#8217;d be.  The screencasts are really only useful if I&#8217;m saying what I&#8217;m thinking, and I&#8217;m finding it difficult to maintain stream of consciousness and perform an effective/thorough review.  The last few times I&#8217;ve tried [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been trying to record myself performing code reviews for <a href="http://www.markusproject.org">The MarkUs Project</a>.</p>
<p>It&#8217;s a lot harder than I thought it&#8217;d be.  The screencasts are really only useful if I&#8217;m saying what I&#8217;m thinking, and I&#8217;m finding it difficult to maintain stream of consciousness <em>and </em>perform an effective/thorough review.  The last few times I&#8217;ve tried it, I find myself blurting an expletive, stopping the recording in frustration, and then starting the review over so that I can do a good, proper job.</p>
<p>I think this is going to take more practice.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikeconley.ca/blog/2010/02/08/screencasting-code-reviews-is-hard/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Importance of First Impressions:  How Theatre Criticism Might Inform Peer Code Review</title>
		<link>http://mikeconley.ca/blog/2010/02/07/the-importance-of-first-impressions-how-theatre-criticism-migh-inform-peer-code-review/</link>
		<comments>http://mikeconley.ca/blog/2010/02/07/the-importance-of-first-impressions-how-theatre-criticism-migh-inform-peer-code-review/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 19:07:55 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Code Reviews]]></category>
		<category><![CDATA[Theater]]></category>
		<category><![CDATA[author preparation]]></category>
		<category><![CDATA[cisco study]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[cognition]]></category>
		<category><![CDATA[criticism]]></category>
		<category><![CDATA[first impressions]]></category>
		<category><![CDATA[jason cohen]]></category>
		<category><![CDATA[MarkUs]]></category>
		<category><![CDATA[objectivity]]></category>
		<category><![CDATA[plays]]></category>
		<category><![CDATA[plot]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[reviewboard]]></category>
		<category><![CDATA[sabotage]]></category>
		<category><![CDATA[smart bear]]></category>
		<category><![CDATA[stories]]></category>
		<category><![CDATA[theatre]]></category>

		<guid isPermaLink="false">http://mikeconley.ca/blog/?p=1004</guid>
		<description><![CDATA[Discussion Plays I have seen plays that have very clear stories, and very clear plots.  I leave the theatre knowing what has happened, and I can be pretty confident that the people who sat around me in the theatre all got the same message as I did. I have also seen plays that are completely [...]]]></description>
			<content:encoded><![CDATA[<h3>Discussion Plays</h3>
<p>I have seen plays that have very clear stories, and very clear plots.  I leave the theatre knowing what has happened, and I can be pretty confident that the people who sat around me in the theatre all got the same message as I did.</p>
<p>I have also seen plays that are completely the opposite.  There doesn&#8217;t appear to be a story.  There doesn&#8217;t appear to be plot.  There are no real characters.  For these plays, all of a sudden, I have to do the work in order to make sense of it all.  And you can be pretty sure that every single audience member got something different out of it.</p>
<p>I want to talk about this second kind of play.  For now, I&#8217;m going to call this kind of play a <em>discussion play</em>, because for me, the best part about these kinds of plays is the discussion I have with my friends afterwards. We&#8217;ll all sit down in a restaurant or a cafe, order some food, and try to figure out what the hell we just saw.  Theories are tossed around.  Everybody brings their own unique impressions and observations to the table.  A very rich ecosystem of ideas develops.</p>
<h3>Back to Peer Code Reviews</h3>
<p>(trust me, this all ties together in the end)</p>
<p>When <a href="http://blog.asmartbear.com/">Jason Cohen</a> did <a href="http://mikeconley.ca/blog/2009/09/14/smart-bear-cisco-and-the-largest-study-on-code-review-ever/">his Peer Review at Cisco Study</a>, he noticed that code that had been prepared by the author for review seemed to have a lower defect density than code that had not been prepared.</p>
<p>What do I mean by prepared?  I&#8217;ll let Jason Cohen explain:</p>
<blockquote><p>The idea of &#8220;author preparation&#8221; is that authors should annotate their source code before the review begins.  Annotations guide the reviewer through the changes, showing which files to look at first and defending the reason and methods behind each code modification.  The theory is that because the author has to re-think all the changes during the annotation process, the author will himself uncover most of the defects before the review even begins, thus making the review itself more efficient.  Reviewers will uncover problems the author truly would not have thought of otherwise.</p>
<p>(Best Kept Secrets of Peer Code Review, p80-81)</p></blockquote>
<p>Looking at the data, author preparation does seem to have a palpable effect.  As Cohen notes, &#8220;for all reviews with at least one author preparation comment, defects density is never over 30; in fact the most common case is for there to be no defects at all!&#8221;.</p>
<p>The study has two explanations for this:</p>
<ol>
<li>Authors gave their code such a thorough look while annotating them, that most defects were eliminated right off the bat.</li>
<li>Since authors were actively explaining, or defending their code, this sabotaged the reviewers ability to do their job effectively.</li>
</ol>
<p>Cohen buys into the first explanation.  He writes:</p>
<blockquote><p>A survey of the reviews in question show the author is being conscientious, careful, and helpful, and not misleading the reviewer.  Often the reviewer will respond to or ask a question or open a conversation on another line of code, demonstrating that he was not dulled by the author&#8217;s annotations.</p></blockquote>
<p>I have huge respect for this study.  But I don&#8217;t entirely buy this explanation.  As Cohen later mentioned in an email to me, this conclusion is not derived from a controlled experiment, and also suffers from selection bias.</p>
<h3>Back to those Discussion Plays</h3>
<p>One of the worst things that can happen to me before going into a discussion play is for someone who has already seen it to tell me their impressions of what they thought was going on.  As soon as I hear their opinion, my own objectivity is compromised.  Whether I want to or not, I&#8217;ll have their impressions in the back of my mind, and I&#8217;ll be using it as a measuring stick or reference point for my own opinions and critiques. They&#8217;ve carved a cognitive path through the work, and I&#8217;m doomed to notice that path, and react to it.</p>
<p>This is horrible.  This limits me.  This more or less hobbles my ability to contribute something unique to the pool of ideas and criticisms in the after-play discussion.  Every impression I have is tainted by someone else&#8217;s first impression.</p>
<p>Don&#8217;t get me wrong &#8211; I love hearing about everyone&#8217;s impressions.  But <em>after I have formed my own.</em> This way, I believe we cover more ground.  A group of us watching a discussion play will carve unique cognitive paths through the work without influencing one another.  When we finally open up and present these paths and ideas to one another over food and drink, I believe we cover more ground.</p>
<p>I have no data to back this up.  Only years of theatre-going experience.</p>
<h3>A Code Review Anecdote</h3>
<p>I recently received an email from a colleague of mine.  She wanted me to go over some of her Javascript to make sure it was up to snuff, since she was relatively new to the language.  I noticed that she had also sent a copy of the email to another developer who has pretty sharp Javascript chops.</p>
<p>When I finally had some free time, I went back to her email to write up the review.  I felt bad &#8211; it was late, and the other reviewer hadn&#8217;t made a peep on the email thread, and she was hoping to use the code relatively soon.  So I dove in, wrote my review, and sent it off.</p>
<p>A little while later, the other developer sent me his review, saying:</p>
<blockquote><p>And here was my answer, which I didn&#8217;t send to you so as not to influence your reply.  ;)</p></blockquote>
<p>So the author of the code received two unique reviews, and neither of them had influenced the other.  When I read his review, I noticed that we covered some similar ground, but a lot of unique ground as well.  I suspect this wouldn&#8217;t have been the case had he sent his review to me first.</p>
<h3>The Hypothesis</h3>
<p>I hypothesize that author preparation in code review sabotages reviewers abilities to objectively carve their own unique cognitive paths through the code.  They see things from the author&#8217;s point of view, and this dulls their critical eye.  Because of this, I believe fewer defects are detected.</p>
<p>I will take this hypothesis one step further.</p>
<p>I suspect <em>any </em>review, by the author or otherwise, will taint future reviews.  If someone has already reviewed some code, I suspect this review will impact and possibly limit the ability of other reviewers to look at the code objectively.  Like author preparation, I suspect this prevents reviewers from getting their own unique, valuable first impressions of the code.  And I suspect that this causes some defects to go undetected.</p>
<h3>Testing This Hypothesis</h3>
<p>It&#8217;s a simple idea really.  Take a chunk of code, and get some number of developers to review it.  Take this same code, add some author preparation comments, and get more developers to review it.  Do all of the normal balancing, etc.</p>
<p>The question:  do the number of detected defects drop?  If so, this looks like evidence that author preparation sabotages review ability.</p>
<p>Take the experiment one step further.  Take some code, have someone else review it, and then have participants review this code, having seen the first review.  What happens to the number and type of defects that they find?  What happens if they don&#8217;t see that initial review?  What yields high defect detection?</p>
<p>Sounds doable.  Sounds interesting.  Sounds like something that would answer a few questions.</p>
<h3>Implications and Ideas</h3>
<p>So what if one or both of my hypotheses are true?  What does this mean for peer code review?</p>
<p>Well, if author preparation alone sabotages review ability, then the answer is simple:  don&#8217;t let the authors prepare the review.  The code goes up, and they stay silent.</p>
<p>But what if both are true?</p>
<p>An idea:  how about I tweak MarkUs&#8217;s ReviewBoard so that reviewers cannot see what other reviewers have said until they&#8217;ve given one review?  What would happen to the defect detection numbers?  Would reviewers react negatively to this?  Would there be lots of repetition in the comments?  Sounds like something worth looking into.</p>
<p>I&#8217;d love to hear some thoughts on this.  Anyone?</p>
]]></content:encoded>
			<wfw:commentRss>http://mikeconley.ca/blog/2010/02/07/the-importance-of-first-impressions-how-theatre-criticism-migh-inform-peer-code-review/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Pre-Commit Code Review in MarkUs Development</title>
		<link>http://mikeconley.ca/blog/2010/02/02/pre-commit-code-review-in-markus-development/</link>
		<comments>http://mikeconley.ca/blog/2010/02/02/pre-commit-code-review-in-markus-development/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 05:55:02 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Code Reviews]]></category>
		<category><![CDATA[basie]]></category>
		<category><![CDATA[basieproject]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[MarkUs]]></category>
		<category><![CDATA[markusproject]]></category>
		<category><![CDATA[post-commit]]></category>
		<category><![CDATA[pre-commit]]></category>
		<category><![CDATA[reviewboard]]></category>

		<guid isPermaLink="false">http://mikeconley.ca/blog/?p=977</guid>
		<description><![CDATA[So, for my Master&#8217;s thesis, I&#8217;ve pretty much set my heart on code review as my research area.  Here&#8217;s why:  it works.  It makes your code better.  It helps you find bugs.  And I&#8217;m not just quoting something overheard in a pub &#8211; there&#8217;s evidence to back these claims up. And then there&#8217;s my own [...]]]></description>
			<content:encoded><![CDATA[<p>So, for my Master&#8217;s thesis, I&#8217;ve pretty much set my heart on code review as my research area.  Here&#8217;s why:  <em>it works</em>.  It makes your code better.  It helps you find bugs.  And I&#8217;m not just quoting something overheard in a pub &#8211; <a href="http://mikeconley.ca/blog/2009/09/14/smart-bear-cisco-and-the-largest-study-on-code-review-ever/">there&#8217;s evidence to back these claims up</a>.</p>
<p>And then there&#8217;s my own experience to boot &#8211; <a href="http://www.markusproject.org">the MarkUs team</a> has been using <a href="http://www.reviewboard.org/">ReviewBoard</a> as our pre-commit code review tool since last summer, and I wouldn&#8217;t ever go back.  If I ever have to work in a shop that doesn&#8217;t perform code reviews, I&#8217;ll campaign my butt off.</p>
<p>Having said all that, <strong>pre-commit</strong> reviews  certainly <a href="http://stackoverflow.com/questions/246319/peer-review-code-before-or-after-check-in">aren&#8217;t for everyone</a>.  Some downsides of pre-commit over post-commit:</p>
<ul>
<li>It goes against &#8220;<a href="http://www.codinghorror.com/blog/archives/001165.html">check in  early, check in often</a>&#8220;</li>
<li>&#8220;The major downside of pre-checkin code review is that it puts a  major  bottle neck on getting changes into the system for other  developers to  integrate with early enough.&#8221; (<a href="http://stackoverflow.com/questions/246319/peer-review-code-before-or-after-check-in">from this link</a>)</li>
<li>For some applications, testing takes hours on end.  Why wait?   Might as well toss it into the repo, let the Continuous Integration build it, and just  see what happens.</li>
</ul>
<p>There are probably more.</p>
<p>My response:  at least for MarkUs, pre-commit code reviews are working just fine, thank you  very much.  At least we&#8217;re reviewing it &#8211; and any review is better than no review.  But to continue my response, here are a couple of advantages of pre-commit code review for the MarkUs development team:</p>
<ol>
<li>Since most students working on MarkUs are doing it for half-credits, this means there&#8217;s a lot of turnover every semester.  ReviewBoard lowers the chance of our new hotshot developers  accidentally slipping something ridiculous into the repository and having to do that neat Subversion trick of pulling it out again.  This is the obvious one.</li>
<li>It helps all developers keep track of what everyone else is doing.  This is true for post-commit reviews too, but it&#8217;s certainly worth the mention.  It sure beats reading SVN log messages&#8230;</li>
<li>It&#8217;s a great arena for new developers to ask questions.  Our new developers this semester have been very active on our ReviewBoard, asking plenty of questions about things that are showing up in the diffs under review.  Sometimes, &#8220;theoretical&#8221; code is posted to demonstrate how something would be done.  Post-commit does not support this nicely.</li>
<li>It&#8217;s an excellent way of showing how you&#8217;re coming along with a task, without the embarrassment of breaking the build.  MarkUs developers sometimes post up &#8220;sneak previews&#8221; just to give everybody a taste of how their particular task is coming.  This &#8220;sneak preview&#8221; gives the opportunity for other developers to critique the direction that the submitter is going in, and offer pointers in case they seem to be heading off in a hazardous direction.</li>
</ol>
<p>Yep, there&#8217;s just something so satisfying about seeing all of those little green &#8220;ship-it&#8217;s&#8221;, and then firing off your code into the repository&#8230; it&#8217;s positive reinforcement for code reviews.  And it&#8217;s strangely addictive to me.</p>
<h3>Another Idea to Augment This Process</h3>
<p>A little while ago, I wrote about what I consider to be one of the <a href="http://mikeconley.ca/blog/2009/10/08/the-achilles-heel-of-light-weight-code-review/">Achilles&#8217; Heels of Peer Code Review</a>.  Here&#8217;s another one: at least for ReviewBoard, during a review <em>all you&#8217;re looking at is the code</em>.  That&#8217;s all fine and dandy if you want to <em>look </em>at the logic of the code&#8230;but what if you want to try it?  Does trying it out help find more bugs than just looking at it?</p>
<p>Well, at least for MarkUs, it&#8217;s helped.  I&#8217;ve recently started checking out a fresh copy of MarkUs every time a review request is put up, and splat a copy of the diff under review on top.  I run the test suites, and if they pass, I drive it around.  I try out the new features that the diff supposedly adds, or try to recreate the bug that the diff supposedly fixes.</p>
<p>And I&#8217;ve caught a few bugs this way.  This is because ReviewBoard is good at showing me what is in the code, but is bad at telling me what is <em>not </em>there.  And that&#8217;s perfectly understandable &#8211; <a href="http://mikeconley.ca/blog/2009/10/27/code-reviews-and-predictive-impact-analysis/">it&#8217;s not psychic</a>.</p>
<p>So here&#8217;s an idea &#8211; how about writing a little script that checks ReviewBoard for new review requests.  When it finds one, it checks out a brand new copy of MarkUs, splats down the diff under review over top, runs the tests, and then posts back as a ReviewBoard reviewer how many tests passed, how many failed, etc. If we wanted to get fancy, the script could even do some commenting on the code &#8211; maybe using <a href="http://github.com/martinjandrews/roodi">Roodi</a>, <a href="http://ruby.sadi.st/Flog.html">Flog</a>, <a href="http://ruby.sadi.st/Flay.html">Flay</a>, or some of those other <a href="http://ruby.sadi.st/Ruby_Sadist.html">sadistically named Ruby tools</a> to say things about the diff.  The script would be another reviewer.</p>
<p>And then the kicker &#8211; the script posts a link in its review where developers can try out a running instance of MarkUs with the applied diff.</p>
<p>Want a fancy name to kick around the office?  Call it <em>pre-commit continuous integration.</em> I just checked &#8211; <a href="http://www.google.ca/search?q=%22pre-commit+continuous+integration%22">it&#8217;s not a common term</a>, but <a href="http://people.canonical.com/~ianc/papers/community-agile/community-agile.html#pre-commit-continuous-integration">I&#8217;m not the first to use it</a>.  Again, so much for being cutting edge.</p>
<p>Would this be useful?  It&#8217;s possible that the Roodi/Flog/Flay stuff would bring too much noise to the review process &#8211; that&#8217;s something to toy with later.  But what about the link to the running instance?  Will that little feature help catch more bugs in MarkUs?  How about for <a href="basieproject.org">Basie</a>?</p>
<p>I&#8217;m curious to find out.</p>
<p>Unfortunately, <a href="http://www.mail-archive.com/reviewboard@googlegroups.com/msg00860.html">ReviewBoard doesn&#8217;t let me download diffs through its API just yet&#8230;</a>if schoolwork lets up for a few days, <a href="http://github.com/reviewboard/reviewboard">I&#8217;ll look into changing that.</a></p>
<p>I&#8217;d love to hear your thoughts.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikeconley.ca/blog/2010/02/02/pre-commit-code-review-in-markus-development/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MarkUs, Squad, How&#8217;s / Refactor My Code, Belated Happy Holidays, and Oh Yeah &#8211; I&#8217;m Not Dead</title>
		<link>http://mikeconley.ca/blog/2010/01/19/markus-squad-hows-refactor-my-code-belated-happy-holidays-im-not-dead/</link>
		<comments>http://mikeconley.ca/blog/2010/01/19/markus-squad-hows-refactor-my-code-belated-happy-holidays-im-not-dead/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 04:32:36 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Code Reviews]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[accidents]]></category>
		<category><![CDATA[bespin]]></category>
		<category><![CDATA[cars]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[how's my code]]></category>
		<category><![CDATA[MarkUs]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[peer review]]></category>
		<category><![CDATA[refactor my code]]></category>
		<category><![CDATA[snow]]></category>
		<category><![CDATA[squad]]></category>

		<guid isPermaLink="false">http://mikeconley.ca/blog/?p=971</guid>
		<description><![CDATA[Belated happy holidays! My last post was over a month ago, and so my blog has a nice layer of web-dust on it right now.  Well, here I am to ease your mind.  I&#8217;m still alive! But that almost wasn&#8217;t true. I won&#8217;t bore you with the details &#8211; I&#8217;ll just give you the facts, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Belated happy holidays!</strong> My last post was over a month ago, and so my blog has a nice layer of web-dust on it right now.  Well, here I am to ease your mind.  I&#8217;m still alive!</p>
<p>But that almost wasn&#8217;t true.</p>
<p>I won&#8217;t bore you with the details &#8211; I&#8217;ll just give you the facts, and let you fill in the blanks.</p>
<ol>
<li>My girlfriend Em, her sister Cassie, and myself, were up in Collingwood on New Years Day, enjoying a relaxing day at a <a href="http://www.scandinaveblue.com/">Norwegian spa</a> (the outdoor baths were amazing &#8211; how awesome is it to be in a boiling hot tub, while simultaneously, your hair <em>is so frozen that it&#8217;s </em><em>snapping off in your hands</em>?)</li>
<li>The roads that night were treacherous.  Snowy, un-plowed, and dark.  I had borrowed my Mom&#8217;s car for the trip, and we took it realllllly slow.</li>
<li><em> </em>After a tortoise-paced two hour ride back to Em&#8217;s place in Newmarket, and then another two hour drive from Newmarket to my home in Grimsby the next day, I was getting pretty sick of winter driving.  On top of that, the brakes seemed to be acting funny.  I found myself sliding a lot, and there didn&#8217;t seem to be a lot of resistance when I put my foot down.</li>
<li>The next day, my Mom takes the car to go to work.  She doesn&#8217;t even leave the drive-way.  The brakes hadn&#8217;t been acting funny:  the brakes <em>hadn&#8217;t been acting at all</em>.  Turns out we had a leaky brake-line for the entire trip&#8230;</li>
<li>Guts of the story:  I think we drove home from Collingwood with about 35% brake power in one of the worst snow storms I&#8217;ve ever driven in.</li>
</ol>
<p>Breakfast tasted especially good for us that morning.</p>
<p>Anyhow, now where was I?  Oh yeah&#8230;</p>
<h3>MarkUs</h3>
<p><a href="http://www.markusproject.org">MarkUs</a> 0.6 got kicked out a week or so ago.  The MarkUs Team kicked the crap out of a bunch of tickets over the holidays, and I think we ended up with a pretty solid release.  MarkUs is being used again at UofT this semester, and <a href="http://www.cs.uwaterloo.ca/~bwbecker/">Byron Weber Becker</a> is also piloting it at UWaterloo.  I&#8217;ll cautiously say that things seem to be going well for this release.  Great job, MarkUs Team!</p>
<p>I&#8217;m TAing the students working on MarkUs for <a href="http://www.third-bit.com">Greg&#8217;s</a> <a href="http://ucosp.wordpress.com">UCOSP course</a> again.  We had a fantastic code-sprint this past weekend!  The new team members have already started working on tickets and submitting code to review.  I think we&#8217;re on our way into another highly productive semester.</p>
<h3>A Few More Web-Based Code Review Tools</h3>
<p>Remember <a href="http://mikeconley.ca/blog/2009/10/13/treasure-hunting-and-research-idea-4/">that big list of code review tools I put up a while back</a>?  I&#8217;ve got a few more to add:</p>
<h4>How&#8217;s My Code</h4>
<p>This is a pretty dead-simple code review tool that came about during <a href="http://www.readwriteweb.com/readwritestart/2009/09/rails-rumble-micro-app-competi.php">a Rails Rumble a few months back</a>.  It has that &#8220;big friendly buttons and round corners&#8221; web 2.0 thingy going on.  I haven&#8217;t gone so far as to actually try it out, but I did watch this web-cast:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="345" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="i=5854" /><param name="allowFullScreen" value="true" /><param name="src" value="http://screenr.com/Content/assets/screenr_0817090731.swf" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="345" src="http://screenr.com/Content/assets/screenr_0817090731.swf" allowfullscreen="true" flashvars="i=5854"></embed></object></p>
<p>Not bad if you just want to get your code out there, and get your team commenting on your changes&#8230;</p>
<p>A few things caught my attention:</p>
<ul>
<li>It&#8217;s a web service, so you don&#8217;t install it&#8230;you sign up for it</li>
<li>It currently only supports Git.  <img src='http://mikeconley.ca/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </li>
<li>There doesn&#8217;t seem to be any support for contextual per-line commenting&#8230;I think it&#8217;s just file by file commenting.  I&#8217;d love it if I could comment on a single line of code&#8230;</li>
</ul>
<p>Still, if I was working on a project hosted on a Git repo, and I needed a dead-simple code review service, and I needed it quickly, I could probably do a lot worse than this.</p>
<p><a href="http://howsmycode.com/">Click here to check out How&#8217;s My Code</a></p>
<h4>Squad</h4>
<p>Remember that time when I wrote about how it might be neat if somebody created <a href="http://mikeconley.ca/blog/2009/11/25/can-google-wave-bring-something-new-to-peer-code-review/">a code review tool on top of Google Wave</a>? (or <a href="https://bespin.mozilla.com/">Bespin</a> for that matter &#8211; though I didn&#8217;t mention it, and should have)</p>
<p><a href="http://helderribeiro.net/?p=130">Looks like somebody else was thinking the same thing.</a> And a few months earlier.  I guess it&#8217;s not easy to be super cutting-edge.</p>
<p>Anyhow, looks like something Wave-ish (yet simpler, more streamlined) has been developed.  <a href="https://squadedit.com/">Check out Squad</a>.</p>
<p>I just tried this thing out for free (with ads, features locked, etc), and it was pretty cool.  I could see something like this being very useful for showing new MarkUs team members how to do things.  Actually, I just used it to show a new member of the MarkUs team how to use Shoulda.  Pretty useful.  It sure beats coding through IRC and Pastie.org.</p>
<p>A few things to keep in mind:</p>
<ol>
<li>Super simple to get going &#8211; open up a session, and send someone a generated link, and you&#8217;re both coding in no time</li>
<li>One person codes at a time&#8230;so while one person edits, the screen is locked for everyone else</li>
<li>Ads on the left are a little annoying</li>
<li>Sports syntax highlighting for a number of languages &#8211; though I noticed that Ruby wasn&#8217;t one of them.  :/</li>
</ol>
<p>I can see this becoming second nature, like Pastie.org.</p>
<p>Who knows &#8211; I might find more reasons to use Squad as the semester rolls, and MarkUs picks up speed.  I&#8217;ll keep you posted.</p>
<p><a href="https://squadedit.com">If you missed the link I put in above, click here to check out Squad</a></p>
<h4>Refactor My Code</h4>
<p>This service crowd-sources code review requests, so don&#8217;t expect to get deep architectural feedback, because it&#8217;ll probably come from strangers who don&#8217;t/barely know your code base.</p>
<p>The idea is &#8211; slap a piece of code that you&#8217;d like refactored up on the site, and then others swoop in with brilliant suggestions (assuming of course, you asked your question properly&#8230;<a href="http://refactormycode.com/codes/1144-need-help-with-index-php">check this out</a>&#8230;what the&#8230;?)</p>
<p>This is the sort of thing that CS instructors probably wouldn&#8217;t want their students using too much&#8230;it&#8217;d then become solve-my-CS-programming-assignment.com.</p>
<p>Still, I think it counts as peer code review.  And it&#8217;s way different that anything else I&#8217;ve been looking at.  Nice.</p>
<p><a href="http://refactormycode.com">Click here to check out Refactor My Code</a></p>
<p>Anyhow, I just thought I&#8217;d mention those.</p>
]]></content:encoded>
			<wfw:commentRss>http://mikeconley.ca/blog/2010/01/19/markus-squad-hows-refactor-my-code-belated-happy-holidays-im-not-dead/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Reviews and Predictive Impact Analysis</title>
		<link>http://mikeconley.ca/blog/2009/10/27/code-reviews-and-predictive-impact-analysis/</link>
		<comments>http://mikeconley.ca/blog/2009/10/27/code-reviews-and-predictive-impact-analysis/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 18:38:22 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[Code Reviews]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[FEAT]]></category>
		<category><![CDATA[gail murphy]]></category>
		<category><![CDATA[MarkUs]]></category>
		<category><![CDATA[MSR]]></category>
		<category><![CDATA[predictive impact analysis]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://mikeconley.ca/blog/?p=874</guid>
		<description><![CDATA[A few posts ago, I mentioned what I think of as the Achilles&#8217; Heel of light-weight code review:  the lack of feedback over dependencies that can/will be impacted by a posted change.  I believe this lack of feedback can potentially give software developers the false impression that proposed code is sound, and thus allow bugs [...]]]></description>
			<content:encoded><![CDATA[<p>A few posts ago, I mentioned what I think of as <a href="http://mikeconley.ca/blog/2009/10/08/the-achilles-heel-of-light-weight-code-review/">the Achilles&#8217; Heel of light-weight code review</a>:  the lack of feedback over dependencies that can/will be impacted by a posted change.  I believe this lack of feedback can potentially give software developers the false impression that proposed code is sound, and thus allow bugs to slip through the review process.  This has happened more than once with <a href="http://www.markusproject.org">the MarkUs project</a>, where we are using <a href="http://www.review-board.org/">ReviewBoard</a>.</p>
<h2>Wouldn&#8217;t it be nice&#8230;</h2>
<p>Imagine that you&#8217;re working on a &#8220;Library&#8221; Rails project.  Imagine that you&#8217;re about to make an update to the Book model within the MVC framework:  you&#8217;ve added a more efficient static class method to the Book model that allows you to check out large quantities of Books from the Library all at once, rather than one at a time.  Cool.  You update the BookController to use the new method, run your regression tests (which are admittedly incomplete, and pass with flying colours), and post your code for review.</p>
<p>Your code review tool takes the change you&#8217;re suggesting, and notices a trend:  in the past, when the &#8220;checkout&#8221; methods in the Book model have been updated, the BookController is usually changed, and <em>a particular area in en.yml locale file is usually updated too</em>.  The code review tool notices that in this latest change, nothing has been changed in en.yml.</p>
<p>The code review tool raises its eyebrow.  &#8220;I wonder if they forgot something&#8230;&#8221;, it ponders.</p>
<p>Now imagine that someone logs in to review the code.  Along with the proposed changes, the code review tool suggests that the reviewer also take a peek at en.yml just in case the submitter has missed something.  The reviewer notices that, yes, a translation string for an error message in en.yml no longer makes sense with the new method.  The reviewer writes a comment about it, and submits the review.</p>
<p>The reviewee looks at the review and goes, &#8220;Of course!  How could I forget that?&#8221;, and updates the en.yml before updating the diff under review.</p>
<p>Hm.  It&#8217;s like a recommendation engine for code reviews&#8230;&#8221;by the way, have you checked&#8230;?&#8221;</p>
<p>I wonder if this would be useful&#8230;</p>
<h2>Mining Repositories for Predicting Impact Analysis</h2>
<p>This area of research is really new to me, so bear with me as I stumble through it.</p>
<p>It seems like it should be possible to predict what methods/files have dependencies on other files based on static analysis, as well as VCS repository mining.  I believe <a href="http://www.cs.ubc.ca/labs/spl/papers/2002/icse02-feat.pdf">this</a> <a href="http://74.125.155.132/scholar?q=cache:9MoooL2SyggJ:scholar.google.com/+%22Impact+Analysis+by+Mining+Software+and+Change+Request+Repositories%22&amp;hl=en">has</a> <a href="http://portal.acm.org/citation.cfm?id=1271355">been</a> <a href="http://portal.acm.org/citation.cfm?id=1137983.1138009&amp;coll=portal&amp;dl=ACM&amp;CFID=58582647&amp;CFTOKEN=72485145">tried</a> in various forms.</p>
<p>But I don&#8217;t think anything like this has been integrated into a code review tool.  <a href="http://mikeconley.ca/blog/2009/10/13/treasure-hunting-and-research-idea-4/">Certainly not any of the ones that I listed earlier.</a></p>
<p>I wonder if such a tool would be accurate&#8230;  and, again, would it be useful?  Could it help catch more of the bugs that the standard light-weight code review process misses?</p>
<p>Thoughts?</p>
]]></content:encoded>
			<wfw:commentRss>http://mikeconley.ca/blog/2009/10/27/code-reviews-and-predictive-impact-analysis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

