Edgewall Software

Code Review Wishlist

This page contains some wishful thinking about a hypothetical ideal code review system built into Trac (or a plugin).

What to review?

Changesets

Low overhead. Only for post-commit review. Review experimental repository clones / branches for pre-merge review.

Files

Or parts of files. High overhead. Good for auditing?

Merge requests

Need to add the concept of a merge request to Trac first. But very useful and popular in modern DVCS systems.

Patches

Nice for projects that already rely on submitted patches for their development model. High overhead for projects that are used to direct commit access.

Screenshots

Optional bonus feature?

Wiki pages

Producing high-quality pages also imply some kind of review system. One can always add review comments "inline", but this can quickly clutter the page and makes reading more difficult, so a lot of Wiki systems have the notion of an associated "Talk" page. While a talk page has the benefit of leaving the content focused on its main matter, it also have the disadvantage of being too "disconnected" and the discussion there can quickly become out of sync with the content page.

It would really be nice to be able to see the pristine page content, but also access an alternate view with superposed review annotations. Likewise for editing, one should be able to edit individually:

  • the content alone
  • the review layer alone, for example when creating a review
  • the content and review layers at once, for applying the changes requested by a review and simultaneously update the review comments

I'm not sure at this point how well this idea fits with the rest of the code review topic - so for now just take that as a related topic ;-)

Configurable Workflow

Code reviews should support configurable workflows (like tickets).

Relevant states

  • new
    • A new code review has been created
  • closed
    • The code review has concluded. (Like for tickets, various resolutions may clarify what this means.)
  • assigned, reviewing, reviewed?
    • Shows when a reviewer has been assigned, has started or finished reviewing the code.
    • This may be complicated by the need for multiple reviewers in one review.
    • Avoid over-complicating the process? (It's configurable. Some may need a more advanced workflow, some want to keep a low overhead.)

Relevant resolutions

  • accepted / rejected
    • For acceptance code review that results in a vote on inclusion.
  • completed
    • For educational code review to increase knowledge transfer.
  • invalid (ignore, irrelevant, retracted, superseded, outdated, noneed, nntr (No Need To Review)))
    • For various cases where a code review is aborted.

Assigning reviewers

A new code review should be assignable to specific reviewers (Trac users) or to a group of reviewers (permission groups?). Depending on the workflow, one, some or all of them should have to perform some action on the review.

Voting

In some workflows, the individual reviewers are required / allowed to vote on a code review. Voting could be a state transition. A special transition operation could tally and check the votes against a configured threshold. Depending on the outcome it remain in the same state (and wait for further votes) or resolve the review to the accepted or rejected states.

Veto

Some / all users may have a veto permission to overrule other votes instantly?

Commenting

Reviewers and submitter need to discuss the reviewed code. Referring to specific section or lines of code should be easy, by attaching and showing comments and replies inline / side-by-side with the code.

VCS integration

  • Should a new changeset automatically create a new review?
  • Should a special changeset commit message keyword trigger a new review? (and assign reviewers?)
  • Should the existing changeset / diff / repository view pages be extended or modified?
  • If files are reviewable, the browser could show the Review status of a file.
    • Unreviewed link to the form to start a new review.
    • Reviewed links to the review.
    • What if only an old revision was reviewed?
    • For directories show the percentage of reviewed files?

Ticket integration

  • Should a code review simply be a ticket of ticket type codereview?
    • We get some discussion, notification and workflow support for free.
    • For reviewing patches / merge requests submitted as proposed fixes for the ticket's issue this seems ideal.
  • Should a reviewer open new tickets for each complaint?
  • Should a rejected post-commit code review result in one new ticket?

New navigation tab

If not all code review features are integrated into existing pages, a new navigation tab is needed where code reviews can be created and viewed etc.

One should see (be able to query?) ones submitted and assigned reviews and their most important properties. (Did I or someone else comment or reply?)

Should reviews be prepared and performed in a private staging area and only published when ready?

Other Trac integration

The code review system should be "natively" integrated in Trac in the sense that it works together with the appropriate core systems:

  • Notification
    • People need to be notified when they are assigned as a reviewer or the status of their code review changes.
  • Timeline
    • The timeline should show the important review events.
  • Search
    • Reviews and review comments should be searchable.
  • Wiki
    • Are there any appropriate special macros, link syntax, etc.?
  • Preferences, Admin, Permissions
    • Configuration of code review permissions, admin settings and user preferences should be provided in the standard Trac way.
Last modified 7 years ago Last modified on Jun 20, 2011, 1:33:51 PM
Note: See TracWiki for help on using the wiki.