Differences between revisions 8 and 9
Revision 8 as of 2009-02-18 18:17:51
Size: 17200
Comment:
Revision 9 as of 2009-02-19 10:48:09
Size: 17193
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
~-[[title(The Document Review Process)]] -~
Line 5: Line 7:
[[Anchor(DocReviewPurpose)]] '''~+Purpose+~'''[[BR]]  We use document reviews to improve correctness of documentation. [[Anchor(DocReviewPurpose)]] '''~+Purpose+~'''[[BR]] We use document reviews to improve correctness of documentation.
Line 7: Line 9:
[[Anchor(DocReviewResponsible)]]  '''~+Responsible+~'''[[BR]]  The Task holder of [:Process/Implementation WithTitle:implementation] task doing or correcting document or script. The task holder is specified in the [:Development#CurrentIterationTaskOverview:current iteration task overview] [[Anchor(DocReviewResponsible)]] '''~+Responsible+~'''[[BR]] The Task holder of [:Process/Implementation WithTitle:implementation] task doing or correcting document or script. The task holder is specified in the [:Development#CurrentIterationTaskOverview:current iteration task overview]
Line 28: Line 30:
 1. Before the review time, each participant reads the code thoroughly and note problems  - big or small - that should be discussed. Place the comments at the relevant places in Crucible. For instance:  1. Before the review time, each participant reads the code thoroughly and note problems - big or small - that should be discussed. Place the comments at the relevant places in Crucible. For instance:
Line 32: Line 34:
[[Anchor(CodeReviewReviewSession)]] '''''Review Session '''''[[BR]]  This part, while central to the whole process, should not be allowed to drag on forever. If the reviewers cannot agree on how to fix a problem within a few minutes, the item should be marked as "consider how to..." rather than prolonging the discussion. [[Anchor(CodeReviewReviewSession)]] '''''Review Session '''''[[BR]] This part, while central to the whole process, should not be allowed to drag on forever. If the reviewers cannot agree on how to fix a problem within a few minutes, the item should be marked as "consider how to..." rather than prolonging the discussion.
Line 58: Line 60:
[[Anchor(CodeReviewFollowUp)]]  '''''Follow-up''''' [[Anchor(CodeReviewFollowUp)]] '''''Follow-up'''''
Line 79: Line 81:
'''''[[Anchor(NameCodeReviewPage)]]'''''''''' ''''' ''' '''''[[Anchor(NameCodeReviewPage)]]'''''''''' ''''''''
Line 82: Line 84:
Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented'' ''''' ''' Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented'' ''''''''
Line 84: Line 86:
''''''''''''Each code review page is named according to the codes position in the Java project. ''''' ''' ''''''''''''Each code review page is named according to the codes position in the Java project. ''''''''''''''''
Line 86: Line 88:
''''''''''''For classes the name is formed from the class and package name as follows ''''' ''' ''''''''''''For classes the name is formed from the class and package name as follows
Line 88: Line 90:
 . ''''''''''''''''<Unique package name for class>  + <Class name> + "Review"'' '''''  . ''''''''''''''''<Unique package name for class> + <Class name> + "Review"'' '''''
Line 92: Line 94:
 . for dk.netarkivet.common.distribute.channels.java  (under /trunk/src/)  . for dk.netarkivet.common.distribute.channels.java (under /trunk/src/)
Line 99: Line 101:
 . for History/!HarvestStatus-jobdetails.jsp  (under /trunk/webpages/)  . for History/!HarvestStatus-jobdetails.jsp (under /trunk/webpages/)
Line 107: Line 109:
 . '''''[[Include(CodeReviewCodePageTemplate)]]'''''''''' ''''' '''  . '''''[[Include(CodeReviewCodePageTemplate)]]'''''''''' ''''''''
Line 113: Line 115:
Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented [[BR]] The contents can be seen as guidence of what informaiton should be through the review'' ''''' ''' Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented [[BR]] The contents can be seen as guidence of what informaiton should be through the review'' ''''''''
Line 115: Line 117:
''''''''''''You must use the CodeReviewCodePageTemplate (Code Review Class/JSP Page Template) to create a new page. ''''' ''' ''''''''''''You must use the CodeReviewCodePageTemplate (Code Review Class/JSP Page Template) to create a new page. ''''''''''''''''
Line 117: Line 119:
 * ''''''''''''Create new page named as described above ''''' '''  * ''''''''''''Create new page named as described above
Line 119: Line 121:
 * Insert the template it into the new review page and  adjust it  * Insert the template it into the new review page and adjust it
Line 125: Line 127:
Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented [[BR]] The contents can be seen as guidence of what informaiton should be through the review'' ''''' ''' Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented [[BR]] The contents can be seen as guidence of what informaiton should be through the review'' ''''''''
Line 127: Line 129:
''''''''''''If the Code Review Class Page already exists then the tables for a new review is inserted in the top of the page in order always to see newest review text first. ''''' ''' ''''''''''''If the Code Review Class Page already exists then the tables for a new review is inserted in the top of the page in order always to see newest review text first. ''''''''''''''''
Line 129: Line 131:
''''''''''''The page may contain a link to old review pages which is placed on another media and therefore not readable for all. ''''' ''' ''''''''''''The page may contain a link to old review pages which is placed on another media and therefore not readable for all.
Line 131: Line 133:
''''''''''''[[Anchor(CodeReviewOverview)]]'''''''''''''' ''''' ''''''''''''[[Anchor(CodeReviewOverview)]]''''''''''''''''''''''
Line 134: Line 136:
Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented [[BR]] The contents can be seen as guidence of what informaiton should be through the review''''' ''''' Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented [[BR]] The contents can be seen as guidence of what informaiton should be through the review'' ''''''''Each iteration has its own page with an overview of code reviews, author of changes and who the reviewer is.
Line 136: Line 138:
'''''Each iteration has its own page with an overview of code reviews, author of changes and who the reviewer is. ''''' ''''''''''[[Anchor(NameCodeReviewOverview)]]'''''''''' '''''''''
Line 138: Line 140:
'''''[[Anchor(NameCodeReviewOverview)]]'''''''''' ''''' ''' ''''
Line 141: Line 143:
Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented [[BR]] The contents can be seen as guidence of what informaiton should be through the review'' ''''' ''' Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented [[BR]] The contents can be seen as guidence of what informaiton should be through the review'' '''''''''''''''''Each Iteration review overview page is named according to the Iteration name. ''''''''''''''''''''''The name is formed from the iteration number as follows ''''''''''''''''''"Iteration" + <Iteration number> + "!ReviewsOverview" '''''''''''''
Line 143: Line 145:
''''''''''''Each Iteration review overview page is named according to the Iteration name. ''''' '''
Line 145: Line 146:
''''''''''''The name is formed from the iteration number as follows ''''' '''
Line 147: Line 147:
 . ''''''''''''"Iteration" + <Iteration number> + "!ReviewsOverview" ''''' '''  .
Line 155: Line 155:
Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented [[BR]] The contents can be seen as guidence of what informaiton should be through the review'' ''''' ''' Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented [[BR]] The contents can be seen as guidence of what informaiton should be through the review '''''''''''''''''The below table (from [:CodeReviewOverviewPageTemplate:template]) keeps information of reviews made on a class/JSP-page within an Iteration. ''''''''''''''''''[[Include(CodeReviewOverviewPageTemplate)]]'''''''''''''' '''''''
Line 157: Line 157:
''''''''''''The below table (from [:CodeReviewOverviewPageTemplate:template]) keeps information of reviews made on a class/JSP-page within an Iteration. ''''' '''

 . ''''''''''''[[Include(CodeReviewOverviewPageTemplate)]]'''''''''''''' '''''
 .
Line 171: Line 169:
 * Insert the template it into the new review page and  adjust it  * Insert the template it into the new review page and adjust it
Line 181: Line 179:
'''''[[Anchor(CodeReviewTime)]]'''''''''' '''~+Time+~'''[[BR]] The input must be review as soon after actual implementation as possible. In case of changes in code, it cannot be passed to quality assurance (before release test) before it has been reviewed. ''''' ''' '''''[[Anchor(CodeReviewTime)]]'''''''''' '''~+Time+~'''[[BR]] The input must be review as soon after actual implementation as possible. In case of changes in code, it cannot be passed to quality assurance (before release test) before it has been reviewed. ''''''''
Line 183: Line 181:
''''''''''''[[Anchor(CodeReviewInput)]]'''''''''''''' '''~+Input+~'''[[BR]] Usually the input is code implementing a Tracker Issue which have been ''''' ''''''''''''[[Anchor(CodeReviewInput)]]'''''''''''''''''''unit tested ''' '''~+Input+~'''[[BR]] Usually the input is code implementing a Tracker Issue which have been
Line 185: Line 183:
 * '''''unit tested '''''  * ''''''''''
Line 190: Line 188:
[[Anchor(CodeReviewOutput)]] ~+Output+~'''[[BR]] Reviewed and followed-up input, ready for quality assurance before it can be marked as ready for release test. ''' [[Anchor(CodeReviewOutput)]] ~+Output+~[[BR]] Reviewed and followed-up input, ready for quality assurance before it can be marked as ready for release test. ''''''[[Anchor(CodeReviewBackground)]]'''''' '''~+Background for Code Review process+~'''[[BR]] The code review process was inspired by [http://satc.gsfc.nasa.gov/fi/fipage.html NASA's ideas for code inspection]. The process has however been simplified in order to ease the transition to inspection. As the project group gains experience with inspection it is recommended that the inspection process is refined. The description focuses on code-inspection. ''''''[[Anchor(CodeReviewResourceUsage)]]'''''' '''~+Resource Usage+~'''[[BR]] Code review takes time, of course. The actual time spent discussing the code is typically roughly the same as is spent going over the code beforehand. Follow-up can take a varying amount of time, depending on the starting quality of the code and whether significant changes have been found necessary. Some kinds of code take longer to review than others, for instance straight-forward getter-and-setter style classes go very fast, while a review of a few lines of change in a complex method can take much longer. In the start of the !NetarchiveSuite project, we kept track of the time spent preparing for and executing the review (but not doing the follow-up changes to the code). The ratio of preparation time to review time varied, but there was never more than a factor 2 difference to either side, on average the two were about the same. The number of lines of code reviewed per hour (LoC/h) varied from 88 to 300, with a mean and average value of about 170 LoC/h. Later code review times were not recorded, but is likely to be slightly faster due to a better system for taking notes. ''''''[[Anchor(CodeReviewLiterature)]]'''''' '''~+Literature+~'''[[BR]] ''''''Steve !McConnell, Rapid Development page 73-74 ''''''
Line 192: Line 190:
'''[[Anchor(CodeReviewBackground)]]'''''' '''~+Background for Code Review process+~'''[[BR]] The code review process was inspired by [http://satc.gsfc.nasa.gov/fi/fipage.html NASA's ideas for code inspection]. The process has however been simplified in order to ease the transition to inspection. As the project group gains experience with inspection it is recommended that the inspection process is refined. The description focuses on code-inspection. '''
Line 194: Line 191:
'''[[Anchor(CodeReviewResourceUsage)]]'''''' '''~+Resource Usage+~'''[[BR]] Code review takes time, of course. The actual time spent discussing the code is typically roughly the same as is spent going over the code beforehand. Follow-up can take a varying amount of time, depending on the starting quality of the code and whether significant changes have been found necessary. Some kinds of code take longer to review than others, for instance straight-forward getter-and-setter style classes go very fast, while a review of a few lines of change in a complex method can take much longer. In the start of the !NetarchiveSuite project, we kept track of the time spent preparing for and executing the review (but not doing the follow-up changes to the code). The ratio of preparation time to review time varied, but there was never more than a factor 2 difference to either side, on average the two were about the same. The number of lines of code reviewed per hour (LoC/h) varied from 88 to 300, with a mean and average value of about 170 LoC/h. Later code review times were not recorded, but is likely to be slightly faster due to a better system for taking notes. '''
Line 196: Line 192:
'''[[Anchor(CodeReviewLiterature)]]'''''' '''~+Literature+~'''[[BR]] '''

 * '''Steve !McConnell, Rapid Development page 73-74 '''
 *

title(The Document Review Process)

Action(edit)

The Document Review process covers: [#DocReviewPurpose Purpose], [#DocReviewResponsible Responsible], [#DocReviewMethod Method] ([#DocReviewPlanning Planning], [#DocReviewReviewSession Review Session], [#DocReviewFollowUp Follow-Up]), [#DocReviewTime Time], [#DocReviewInput Input], [#DocReviewOutput Output]

Anchor(DocReviewPurpose) PurposeBR We use document reviews to improve correctness of documentation.

Anchor(DocReviewResponsible) ResponsibleBR The Task holder of [:Process/Implementation WithTitle:implementation] task doing or correcting document or script. The task holder is specified in the [:Development#CurrentIterationTaskOverview:current iteration task overview]

--Rewrite the below--

Anchor(DocReviewMethod) MethodBR A document review consists of 2 or more persons that read the document/script and in a structured way identify changes that will improve it. Our process for document review contain planning, review session and follow-up as described below.

Anchor(CodeReviewPlanning) Planning

  1. Review participants are specified in the current [Iteration task list]. Usually it is the implementor and another developer.
  2. The implementor specifies the code to be reviewed in Crucible
    1. Log on to Crucible (http://kb-prod-udv-001.kb.dk:8060). Please refer to [:Guidelines/GettingCrucibleAccount:Crucible Guidelines for sign-up] if you don't have an account already.

    2. Go to your Crucible DashBoard (using the link "My Crucible DashBoard")

    3. Click on "Create new review" in the top right corner
    4. Select a proper titel (e.g. Feature request Y, og Bug Y plus description). If it corresponds to a task in the current [Iteration task list], it should have the same title, as is written there.
    5. Set yourself both as 'moderator', and 'author' (unless code is authored by somebody else).
    6. Write relevant comments in the "Statement of Objects" for instance genral comments to the review and list of deleted file or class names that for obvious reasons cannot be included.
    7. Add the files included in the review. This can be done by selecting files in different changesets or in the repository. Note that we do not review code in the test-branch.
    8. Add a revision comment to each of the files with specific lines to be review (or ALL LINES). Also note what happened here if relevant e.g. lines that have been removed (file/class name and revision of file is given automatically by Crucible)
    9. You notify the reviewer of the existence of a review, by clicking "Start Review". BR Note that it is best to make wiki review entry (as explained in the next step) before notification.

  3. Make an entry with review information for the review in the wiki current [Review Table] (see for example ????) ....
  4. The participants agree on a time to review.
  5. Before the review time, each participant reads the code thoroughly and note problems - big or small - that should be discussed. Place the comments at the relevant places in Crucible. For instance:
    • Add a new general comment: BR For general problems like design problems or problems concerning most of the files like missing '.' in end of JavaDoc.

    • Add a revision comment: BR For general problems in a specific file like generally missing JavaDoc in this particular file.

    • On specific line (mark line will result in a comment field to appear): BR For problems on specific lines of a file like lack of white space around delimiters. BR REMEMBER to post the comments by clicking "Post" for each of the comments.

Anchor(CodeReviewReviewSession) Review Session BR This part, while central to the whole process, should not be allowed to drag on forever. If the reviewers cannot agree on how to fix a problem within a few minutes, the item should be marked as "consider how to..." rather than prolonging the discussion.

A typical review session should take no more than an hour (and most take less than that). If it takes longer, the review should be stopped and a time to continue should be agreed upon. More than an hour of straight review reduces the efficiency.

  1. The participants meet on the phone (only physical meeting if possible)
  2. Before starting check that
    1. Code has been unit tested
    2. Code has been sanity tested
    3. Functionality has been document in manuals
    4. If any of these are missing than the Review should be postponed.
  3. Use Crucible to go through the review
    1. Log on to Crucible - preferable both reviewers.
    2. Discuss each posted comment in order of appearance.
      • General comments
      • Revision comments
      • Specific line comments
    3. Those items that the participants don't agree to discard are marked by clicking on the "Defect" box which enables selection of rank in the "Select rank" drop-down list. When Defect and Rank is specified the irem is posted by clicking "Post".

    4. Note it is only the author of the comment that can post the comment. If only one of the reviewers have access to Crucible, the non-owned comments must be copied into new comment that can be posted with the mentioned information.

    5. Note the time used for the task in a Crucible General comments for the review using following wording: BR Time use (Coding,Documentation,Review) BR <IinitialsOf1Reviewer>: <NoOfManDaysUsed> BR <IinitialsOf2Reviewer>: <NoOfManDaysUsed> BR Remember to set selection of rank in the "Select rank" drop-down list to "Time Used". This is used for the [Iteration review] made in the end of the iteration.

    6. Remember to mark the General comment as defect and post it - otherwise this information will not be passed to the wiki afterwards.

    7. Complete the review by clicking "Complete"
  4. Agree to who is doing follow-up in case flaws are found during code review. Usually, this will be the implementor.
  5. Update the table in the current [Review Table] with

Anchor(CodeReviewFollowUp) Follow-up

  1. The follow-up person goes through the list of items and handles each of them. Depending on how an item is handled, the item is marked under Status on the [link Code Review Class Page paragraph].
  2. The follow-up person mark the file as fully reviewed on the [link review page] once all items have been handled.
  3. If the implementor feels the changes are significant enough to require a new review, another review cycle starts. The first review is left as-is. This rarely happens, and should only happen when design issues have been identified and resolved during the review process.

Anchor(CodeReviewReviewPages)

Review Pages (technical information)

There are two kinds of review pages:

  • Code Review Page per Class
  • that contains all reviews made on the class
  • Code Review Overview per Iteration
  • that contains an overview of code reviews made within an iteration

Anchor(CodeReviewPagePerPage)

Code Review Page per Class/JSP-page

Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented BR The contents can be seen as guidence of what informaiton should be through the review

Each class/JPS-page has its own page with all code reviews and their documentation made on the specific Class/JPS-page.

Anchor(NameCodeReviewPage)'

Name of Code Review Class/JSP page

Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented

Each code review page is named according to the codes position in the Java project. '

For classes the name is formed from the class and package name as follows

  • '<Unique package name for class> + <Class name> + "Review"

Where each part of the name starts by upper case and continuous in lower case (as WikiWords), for example

For JSP pages the name is formed from the JSP-page group and the JSP page name as follows

  • <Unique group for JSP-page > + <JSP-page name> + "JSPReview"

Where each part is of the name starts by upper case and continuous in lower case – and “-“ are skipped where letter after “-“ is written in uppercase too (as WikiWords), for example

  • HistoryHarveststatusJobdetailsJSPReview

  • for History/!HarvestStatus-jobdetails.jsp (under /trunk/webpages/)

Anchor(TablesFilledPageReview)

Code Review Tables filled for each review of a class/JSP-page

Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented BR The contents can be seen as guidence of what informaiton should be through the review

The below tables (from [:CodeReviewCodePageTemplate:template]) keeps the information for each review of a class/JSP-page (or parts of one). If a class/JSP-page is reviewed more than once, new sections like this get added at the top of the same page. Storing the old reviews with task, date, SVN version and lines has proven useful for tracking down problematic changes and misunderstood designs.

Example is CommonDistributeChannelsReview

Anchor(CreationCodeReviewCodePage)

Creation of New Code Review Class/JSP Page

Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented BR The contents can be seen as guidence of what informaiton should be through the review

You must use the CodeReviewCodePageTemplate (Code Review Class/JSP Page Template) to create a new page. '

  • Create new page named as described above

  • Copy the text from the template in edit mode
  • Insert the template it into the new review page and adjust it

If an old review page exists on another media then this link should be referenced.

Anchor(UpdateCodeReviewPage)

Update of Existing Code Review Class/JSP Page

Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented BR The contents can be seen as guidence of what informaiton should be through the review

If the Code Review Class Page already exists then the tables for a new review is inserted in the top of the page in order always to see newest review text first. '

The page may contain a link to old review pages which is placed on another media and therefore not readable for all.

Anchor(CodeReviewOverview)'

Code Review Overview per Iteration

Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented BR The contents can be seen as guidence of what informaiton should be through the review Each iteration has its own page with an overview of code reviews, author of changes and who the reviewer is.

'Anchor(NameCodeReviewOverview)'

'

Name of Iteration Code Review Overview

Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented BR The contents can be seen as guidence of what informaiton should be through the review Each Iteration review overview page is named according to the Iteration name. 'The name is formed from the iteration number as follows "Iteration" + <Iteration number> + "ReviewsOverview" '

for example

Anchor(TableFilledReviewsOverview)

Code Review Overview Table Filled for each Iteration

Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented BR The contents can be seen as guidence of what informaiton should be through the review The below table (from [:CodeReviewOverviewPageTemplate:template]) keeps information of reviews made on a class/JSP-page within an Iteration. Include(CodeReviewOverviewPageTemplate) '

Example is Iteration33ReviewsOverview

Anchor(CreationCodeReviewOverviewPage)

Creation of New Iteration Code Review Overview Page

Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented BR The contents can be seen as guidence of what informaiton should be through the review

You must use the CodeReviewOverviewPageTemplate(Code Review Iteration Page Template) to create a new page.

  • Create new page named as described above

  • Copy the text from the template in edit mode
  • Insert the template it into the new review page and adjust it

Anchor(UpdateCodeReviewOverviewPage)

Update of Existing Iteration Code Review Overview Page

Note this is taken from the current process, it will be changed according to use of a new tool for registration of code reviews is chosen and implemented BR The contents can be seen as guidence of what informaiton should be through the review

For each class/JSP-page to be reviewed, there must be added a table line describing it.

Note that the same class/JSP-page may appear several times.

Anchor(CodeReviewTime)' TimeBR The input must be review as soon after actual implementation as possible. In case of changes in code, it cannot be passed to quality assurance (before release test) before it has been reviewed.

Anchor(CodeReviewInput)'unit tested InputBR Usually the input is code implementing a Tracker Issue which have been

  • '

  • sanity tested
  • documented in manuals

but depending on the implemented task, it can also be corrected documentation scripts etc.

Anchor(CodeReviewOutput) OutputBR Reviewed and followed-up input, ready for quality assurance before it can be marked as ready for release test. Anchor(CodeReviewBackground) Background for Code Review processBR The code review process was inspired by [http://satc.gsfc.nasa.gov/fi/fipage.html NASA's ideas for code inspection]. The process has however been simplified in order to ease the transition to inspection. As the project group gains experience with inspection it is recommended that the inspection process is refined. The description focuses on code-inspection. Anchor(CodeReviewResourceUsage) Resource UsageBR Code review takes time, of course. The actual time spent discussing the code is typically roughly the same as is spent going over the code beforehand. Follow-up can take a varying amount of time, depending on the starting quality of the code and whether significant changes have been found necessary. Some kinds of code take longer to review than others, for instance straight-forward getter-and-setter style classes go very fast, while a review of a few lines of change in a complex method can take much longer. In the start of the NetarchiveSuite project, we kept track of the time spent preparing for and executing the review (but not doing the follow-up changes to the code). The ratio of preparation time to review time varied, but there was never more than a factor 2 difference to either side, on average the two were about the same. The number of lines of code reviewed per hour (LoC/h) varied from 88 to 300, with a mean and average value of about 170 LoC/h. Later code review times were not recorded, but is likely to be slightly faster due to a better system for taking notes. Anchor(CodeReviewLiterature) LiteratureBR Steve McConnell, Rapid Development page 73-74

Process/Document Review WithoutTitle (last edited 2010-08-16 10:24:30 by localhost)