<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Hurray Igor! <br>
<br>
Testing can never replace code review. The Wikipedia article on
software peer review reports: "The National Software Quality
Experiment,[2] evaluating the effectiveness of peer reviews, finds, "a
favorable return on investment for software inspections; savings
exceeds costs by 4 to 1". To state it another way, it is four times
more costly, on average, to identify and fix a software problem later."<br>
<br>
I suspect that the figure is much higher if it is left to the end user
to find the problem.<br>
<br>
But this requires, of course, that the code is readable and chunkable
so that there is something to review. <br>
<br>
Cheers-<br>
-Trygve<br>
<br>
On 2010.12.17 23:52, Juan Vuletich wrote:
<blockquote cite="mid:4D0BE9BF.9000309@jvuletich.org" type="cite">Igor
Stasenko wrote:
  <br>
  <blockquote type="cite"><br>
My 2c.
    <br>
    <br>
I am always wanted to have some guru who routinely checks my code,
    <br>
 analyzing it, and letting me know if there any shitty stuff.
    <br>
We should stay open to criticism. Otherwise we will stop learning at
    <br>
some moment,
    <br>
because pride turns you into stone.
    <br>
  </blockquote>
  <br>
And you don't even need a 'guru', but a committed team. At my previous
job (@ CaesarSystems), every change had to be reviewed by another team
member. That was true even for the boss and the technical leader. The
reviewer could be any team member (except the author of the change
set). The reviewer checks that the code is sound, that it doesn't break
anything obvious (or any existing test), and that the mandatory tests
fail without the fix and pass with it. But the reviewer could simply
reject the code for not liking it, or not fully understanding the
intent. Some times, when agreement became difficult (author would
defend his original version, reviewer would keep rejecting it), a full
team meeting was done. In these, most people would have learned
something valuable after the discussions, and many times, better
designs would emerge.
  <br>
  <br>
This is also great to have a consistent coding style that is the Team's
one, and not a coder's own. Code review is also a great opportunity to
make team members learn about parts of the system they never worked on,
and it avoids concentrating specific knowledge on a single person.
  <br>
  <br>
This practice was the single main factor resulting in high code quality
and a team with ever increasing skills. It is indeed what I miss most
of that job.
  <br>
  <br>
Nowadays I code mostly alone, and the only way to emulate that practice
is to review my own code one or two days after I write it. It works:
many times I find errors, details I forgot to consider, or unwanted
consequences. For instance, most of the change sets in the Cuis update
stream get rewritten several times over several days, until I'm
satisfied with them.
  <br>
  <br>
Cheers,
  <br>
Juan Vuletich
  <br>
  <br>
  <br>
</blockquote>
<br>
<div class="moz-signature">-- <br>
<meta http-equiv="Content-Type" content="text/html; ">
<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 10">
<meta name="Originator" content="Microsoft Word 10">
<link rel="File-List" href="TrygveSignature-filer/filelist.xml">
<title>-- </title>
<!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:SpellingState>Clean</w:SpellingState>
  <w:GrammarState>Clean</w:GrammarState>
  <w:HyphenationZone>21</w:HyphenationZone>
  <w:PunctuationKerning/>
  <w:DrawingGridHorizontalSpacing>6 pt</w:DrawingGridHorizontalSpacing>
  <w:DrawingGridVerticalSpacing>6 pt</w:DrawingGridVerticalSpacing>
  <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
  <w:DisplayVerticalDrawingGridEvery>3</w:DisplayVerticalDrawingGridEvery>
  <w:UseMarginsForDrawingGridOrigin/>
  <w:DoNotShadeFormData/>
  <w:Compatibility>
   <w:FootnoteLayoutLikeWW8/>
   <w:ShapeLayoutLikeWW8/>
   <w:AlignTablesRowByRow/>
   <w:ForgetLastTabAlignment/>
   <w:LayoutRawTableWidth/>
   <w:LayoutTableRowsApart/>
   <w:UseWord97LineBreakingRules/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
 </w:WordDocument>
</xml><![endif]-->
<style>
<!--
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {mso-style-parent:"";
        margin:0cm;
        margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:12.0pt;
        font-family:"Times New Roman";
        mso-fareast-font-family:"Times New Roman";}
span.SpellE
        {mso-style-name:"";
        mso-spl-e:yes;}
span.GramE
        {mso-style-name:"";
        mso-gram-e:yes;}
 /* Page Definitions */
 @page
        {mso-page-border-surround-header:no;
        mso-page-border-surround-footer:no;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;
        mso-header-margin:35.4pt;
        mso-footer-margin:35.4pt;
        mso-paper-source:0;}
div.Section1
        {page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
        {mso-style-name:"Vanlig tabell";
        mso-tstyle-rowband-size:0;
        mso-tstyle-colband-size:0;
        mso-style-noshow:yes;
        mso-style-parent:"";
        mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
        mso-para-margin:0cm;
        mso-para-margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        font-family:"Times New Roman";}
</style>
<![endif]--><!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="2050"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1"/>
 </o:shapelayout></xml><![endif]-->
<div class="Section1">
<p class="MsoNormal" style=""><span class="SpellE"><span
 style="font-size: 10pt; font-family: Arial;" lang="EN-GB">Trygve</span></span><span
 style="font-size: 10pt; font-family: Arial;" lang="EN-GB">
Reenskaug<span style="">       </span>mailto: <span class="SpellE"><a class="moz-txt-link-abbreviated" href="mailto:trygver@ifi.uio.no">trygver@ifi.uio.no</a></span></span><span
 style="font-size: 10pt; font-family: Arial;"><o:p></o:p></span></p>
<p class="MsoNormal" style=""><span class="SpellE"><span class="GramE"><span
 style="font-size: 10pt; font-family: Arial;" lang="EN-GB">Morgedalsvn</span></span></span><span
 class="GramE"><span style="font-size: 10pt; font-family: Arial;"
 lang="EN-GB">.</span></span><span
 style="font-size: 10pt; font-family: Arial;" lang="EN-GB"> 5A <span
 style="">        </span><a class="moz-txt-link-freetext" href="http://heim.ifi.uio.no/~trygver">http://heim.ifi.uio.no/~trygver</a><o:p></o:p></span></p>
<p class="MsoNormal" style=""><span
 style="font-size: 10pt; font-family: Arial;">N-0378
Oslo<span style="">               </span>Tel: (+47) 22 49 57 27<o:p></o:p></span></p>
<p class="MsoNormal" style=""><span class="SpellE"><span
 style="font-size: 10pt; font-family: Arial;">Norway</span></span><span
 style="font-size: 10pt; font-family: Arial;"><o:p></o:p></span></p>
</div>
</div>
</body>
</html>