One of the greatest aspects of application development is the plethora of ways to solve a problem. This flexibility affords developers a lot of creativity. However, it may not be wise to have all your developers stretching their creative limits at once.
Over time, most organizations adopt best practices and decide on coding standards to promote a specific development approach. One way to enforce these standards is through regular peer code reviews. In this week's column we examine the code review process and list available tools to aid with code review and the .NET Framework.
What is code review?
Developers are a finicky bunch, but methodologies like Extreme Programming (XP) demonstrate that teamwork is essential to successful projects. Code reviews are one part of teamwork. It promotes the review of one developer's code by other team members. Some benefits of code review include:
- Catches more bugs earlier in the software development cycle.
- Junior developers have the opportunity to learn from more experienced peers.
- Helps developers avoid common mistakes.
- Fosters communication among your team.
- Produces code that is easier to maintain.
While it's easy to list the advantages of code review, it can be a difficult process to put in motion. Developers, like most people, don't appreciate criticism. In addition, code review often seems like extra work, when in fact it reduces the workload by allowing the team to catch errors earlier in the development cycle.
Setting and following development standards
Code review is better served if development standards exist within the organization. Standards tell developers how they must write code; however, these standards should prevent each developer from using their own preferred style, while allowing developers some creativity.
One of the benefits of creating standards is that new developers can adhere to the standard, thus easing their ramp up time. Also, during code review, it helps developers to have coding standards to refer to as the ideal state. In addition, if your organization takes advantage of contract programmers, there is often quick turnaround on the team that can lead to inconsistent code. A code review of the code ensures consistency.
Code review in action
There are many different ways to handle code reviews—the approach you use may depend on the size of the development team. The most basic approach involves one developer reviewing the code of another. This approach is great due to convenience, but the results can be inconsistent. A second approach involves a group review where a section of code is presented to the whole team. This approach yields a lot of input, helping the team as a whole, but this can be time-consuming to put into action.
A key facet of code review is the fact that a developer can fix a bug written yesterday faster than a bug found in code written a year ago. The sooner you identify a bug, the easier it is to fix. Also, developers are more familiar with code they are working on now.
In peer review, developers look at code in small chunks as features are completed, before it is added to the source control. Looking for a problem in a single feature is easier than hunting through a mountain of code as a release date looms ahead.
Another approach involves automation. There are several tools available that allow developers to review their code as they work. Automated reviews can happen constantly, allowing violations to be addressed early in the process before they become entrenched. That is, code is written up to standard rather than brought up to standard.
Automated reviews also remove egos and personalities from the review process, making it much more palatable to a wider group of developers. Furthermore, automated reviews help developers who are new to an organization's standards to learn at their own pace, without the potential embarrassment of having to be told something very simple is wrong by another developer.
Code review tools
There are many available tools to facilitate the code review process. Some tools automate the process while others facilitate it. A list of available tools follows:
- CodeReviewer is a fully integrated code-reviewing system. It facilitates peer code review as well as peer-to-peer code review buddy tracking.
- Codestriker is an open-sourced Web application that supports online code review. It supports various source-code management products and stores all review work in a backend database.
- MZ-Tools include a number of Visual Studio .NET add-ons for writing, designing, documenting, and reviewing code.
- Aivosto Tools provide a set of tools for code optimization and standards enforcement.
- Code Analyzer facilitates checking code for compliance with standards and best practices.
- DevPartner integrates with Visual Studio. It allows you to gauge performance as well as standards compliance.
Additionally, there are numerous tools that help with the review process.
- FxCop is an analysis tool provided by Microsoft. The tool analyzes assemblies to ensure that they conform to the .NET Framework Design Guidelines. It comes with various rules that may be extended.
- PrettyCode.Print provides a more readable output for code, thus making it easier for developers to review offline.
- WinDiff is a tool for comparing files and displaying the results graphically.
- WinMerge is an open source visual text file differencing and merging tool for Windows.
These lists are by no means comprehensive, but they do provide a peek at what is available.
Code review may help your team
Code reviews are another piece of the software development cycle. They can be used to reduce development time and deliver more efficient and stable code that adheres to established standards.
Miss a column?
Check out the .NET Archive, and catch up on the most recent editions of Tony Patton's column.
Tony Patton has worn many hats over his 15+ years in the IT industry while witnessing many technologies come and go. He currently focuses on .NET and Web Development while trying to grasp the many facets of supporting such technologies in a production environment on a daily basis.