{"id":1049,"date":"2010-03-01T23:39:50","date_gmt":"2010-03-02T04:39:50","guid":{"rendered":"http:\/\/mikeconley.ca\/blog\/?p=1049"},"modified":"2023-12-20T16:25:17","modified_gmt":"2023-12-20T21:25:17","slug":"author-preparation-in-code-review-what-are-those-authors-saying","status":"publish","type":"post","link":"https:\/\/mikeconley.ca\/blog\/2010\/03\/01\/author-preparation-in-code-review-what-are-those-authors-saying\/","title":{"rendered":"Author Preparation in Code Review:  What Are Those Authors Saying?"},"content":{"rendered":"<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>\n<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.\u00a0 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>\n<p>So how am I going to find out the kinds of things that authors write during author preparation?\u00a0 <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.\u00a0 But that&#8217;s a lot of digging if I do it by hand.<\/p>\n<p>So I won&#8217;t do it by hand.\u00a0 I&#8217;ll write a script.<\/p>\n<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>.\u00a0 So mining the MarkUs and Basie ReviewBoard&#8217;s should be a cinch.<\/p>\n<p>But I&#8217;d like to go a little further. I want more data.\u00a0 I want data from some projects outside of UofT.<\/p>\n<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>.\u00a0 And some of those projects have their ReviewBoard instances open to the public.\u00a0 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.\u00a0 Easy.<\/p>\n<p>Besides MarkUs and Basie, I chose to visit the <a href=\"http:\/\/www.asterisk.org\/\">Asterisk<\/a>,\u00a0 <a href=\"http:\/\/www.kde.org\/\">KDE<\/a>, and <a href=\"http:\/\/musicbrainz.org\/\">MusicBrainz<\/a> projects.<\/p>\n<p>Asterisk was a crapshoot &#8211; of all of their review requests, not a single one returned a positive.<\/p>\n<p>But I got a few blips on the others. Not many, but a few.<\/p>\n<p>I read all of the author preparation for each blip, and broke down what I read into some generalizations.<\/p>\n<p>So, now to the meat:\u00a0 here are some generalizations of what the authors tended to say, in no particular order.\u00a0 I&#8217;ve also included a few examples so you can check them out for yourselves.<\/p>\n<h4>&#8220;Here&#8217;s why I did this&#8221;<\/h4>\n<p>The author makes it explicit why a change was made in a particular way.<\/p>\n<p>Examples:<\/p>\n<ul>\n<li><a href=\"http:\/\/review.basieproject.org\/r\/425\">Basie:\u00a0 425<\/a><\/li>\n<li><a href=\"http:\/\/reviewboard.kde.org\/r\/2447\">KDE: 2447<\/a><\/li>\n<li><a href=\"http:\/\/review.markusproject.org\/r\/197\">MarkUs: 197<\/a><\/li>\n<li><a href=\"http:\/\/codereview.musicbrainz.org\/r\/130\">MusicBrainz: 130<\/a><\/li>\n<\/ul>\n<h4>&#8220;Here&#8217;s what this part does&#8230;&#8221;<\/h4>\n<p>The author goes into detail about what a portion of their diff actually does.<\/p>\n<p>Examples:<\/p>\n<ul>\n<li><a href=\"http:\/\/review.basieproject.org\/r\/418\">Basie: 418<\/a><\/li>\n<li><a href=\"http:\/\/reviewboard.kde.org\/r\/1515\">KDE: 1515<\/a><\/li>\n<li><a href=\"http:\/\/review.markusproject.org\/r\/139\">MarkUs: 139<\/a><\/li>\n<li><a href=\"http:\/\/codereview.musicbrainz.org\/r\/341\">MusicBrainz: 341<\/a><\/li>\n<\/ul>\n<h4>&#8220;Can I get some advice on&#8230;&#8221;<\/h4>\n<p>The author isn&#8217;t entirely sure of something, and wants input from their peers.<\/p>\n<p>Examples:<\/p>\n<ul>\n<li><a href=\"http:\/\/review.basieproject.org\/r\/463\">Basie:\u00a0 463<\/a><\/li>\n<li><a href=\"http:\/\/reviewboard.kde.org\/r\/577\">KDE:\u00a0 577<\/a><\/li>\n<li><a href=\"http:\/\/review.markusproject.org\/r\/146\">MarkUs: 146<\/a><\/li>\n<li><a href=\"http:\/\/codereview.musicbrainz.org\/r\/170\">MusicBrainz: 170<\/a><\/li>\n<\/ul>\n<h4>&#8220;Whoops, I made a mistake \/ inserted a bug.\u00a0 I&#8217;ll update the diff.&#8221;<\/h4>\n<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>\n<ul>\n<li><a href=\"http:\/\/review.basieproject.org\/r\/436\">Basie: 436<\/a><\/li>\n<li><a href=\"http:\/\/reviewboard.kde.org\/r\/483\">KDE: 483<\/a><\/li>\n<li><a href=\"http:\/\/codereview.musicbrainz.org\/r\/185\">MusicBrainz: 185<\/a><\/li>\n<\/ul>\n<h4>&#8220;Whoops &#8211; that stuff isn&#8217;t supposed to be there.\u00a0 Ignore.&#8221;<\/h4>\n<p>The author has accidentally inserted some code into the diff that they shouldn&#8217;t have.\u00a0 They give their assurances that it&#8217;ll be removed before committing &#8211; reviewers are asked to ignore.<\/p>\n<p>Examples:<\/p>\n<ul>\n<li><a href=\"http:\/\/reviewboard.kde.org\/r\/674\">KDE: 674<\/a><\/li>\n<li><a href=\"http:\/\/review.markusproject.org\/r\/241\">MarkUs: 241<\/a><\/li>\n<li><a href=\"http:\/\/codereview.musicbrainz.org\/r\/350\">MusicBrainz: 350<\/a><\/li>\n<\/ul>\n<h4>&#8220;Before you apply this patch, you should probably&#8230;&#8221;<\/h4>\n<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>\n<ul>\n<li><a href=\"http:\/\/review.basieproject.org\/r\/461\">Basie: 461<\/a><\/li>\n<li><a href=\"http:\/\/reviewboard.kde.org\/r\/1107\">KDE: 1107<\/a><\/li>\n<li><a href=\"http:\/\/codereview.musicbrainz.org\/r\/179\">MusicBrainz: 179<\/a><\/li>\n<\/ul>\n<h4>&#8220;&#8230;hello?&#8221;<\/h4>\n<p>The review request has been idle for a while without a single review.\u00a0 The author pings everybody for some attention.<\/p>\n<p>Examples:<\/p>\n<ul>\n<li><a href=\"http:\/\/reviewboard.kde.org\/r\/619\">KDE: 619<\/a><\/li>\n<li><a href=\"http:\/\/review.markusproject.org\/r\/215\">MarkUs: 215<\/a><\/li>\n<\/ul>\n<p>Anyhow, those are the general patterns that stand out.\u00a0 I&#8217;ll post more if I find any.<\/p>\n<p>Have you seen any other common patterns in author preparation?\u00a0 What would <em>you<\/em> say, if you were preparing your code for someone else to review?\u00a0 I&#8217;d love to hear any input.<\/p>\n<p>PS:\u00a0 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>\n","protected":false},"excerpt":{"rendered":"<p>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.\u00a0 It&#8217;s all well and [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[454],"tags":[623,600,588,501,621,550,622,504],"class_list":["post-1049","post","type-post","status-publish","format-standard","hentry","category-code-reviews","tag-asterisk","tag-author-preparation","tag-basie","tag-code-review","tag-kde","tag-markus","tag-musicbrainz","tag-reviewboard"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/prmTy-gV","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/comments?post=1049"}],"version-history":[{"count":8,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1049\/revisions"}],"predecessor-version":[{"id":1057,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/posts\/1049\/revisions\/1057"}],"wp:attachment":[{"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/media?parent=1049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/categories?post=1049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikeconley.ca\/blog\/wp-json\/wp\/v2\/tags?post=1049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}