ソースレビューとは、人間によるコーディング作業を行った段階で、そのソースプログラムを目視により見直す作業です。
ソースプログラムのミスをテストで発見する前に、人間のチェックによって障害を発見するというのが直接の目的です。
そのほかにも、他人の目でソースプログラムを見直すことで様々なコーディングの間違いや勘違いを発見するなど、重要な効果が期待できます。
コンパイルエラーもなく、規約チェックツールでも問題が発生しない、実行結果も正しい、それで正しいプログラムが書けているでしょうか?
実行結果は正しかったとしても、別の条件でテストをすれば誤りが発見されるかもしれません。
通常のテストだけでプログラムの全てのバグをみつけるのは困難です。
そこでプログラミングを行う途中でソースレビューを行い、ツールでも発見できない勘違いやミスを見つけることは重要な作業となります。
設計・実装段階でのソースレビューにより、障害の原因になり得る問題点をあらかじめ取り除いておくことに、ソースレビューの意義があります。
結果的にソースレビューをしっかり実施することで、手戻りが少なくなります。
ここではソースレビューで検出すべき、コーディングレベルで発生する一般的な問題点をいくつかご紹介します。 実際にサンプルプログラムを見ながら、問題点ごとに悪い例をみて、どこが悪いのかを考え、正しい記述とその理由を把握してみます。 なお、ここにあげた問題点がコーディングレベルのすべての問題チェック項目を網羅するものではありません。
次のサンプルプログラム「Circle.java」、「Sample.java」は、円の半径を入力して、面積と円周を求めるプログラムです。 このサンプルプログラムは、コンパイルして実行しても特にエラーやバグは発生しないで、正しい計算結果を出力します。 ところが、「Circle.java」に、変数の使い方や入力に関する6つの問題点が存在しています。
以下にサンプルプログラムの内容と、正しい実行結果を示します。
[サンプルプログラム3-1(Circle.java)]
[サンプルプログラム3-2(Sample.java)]
[正しい実行結果]
それでは以下にソースレビューで検出すべき6つの問題点を示します。
まず、クラスのフィールド宣言において、定数や変数はどう使われるかを見極めて、適切な定義をします。
クラスCircleのフィールド宣言において、次の3つの問題点があります。
以上の3つの問題点をふまえて修正すると、次のようになります。
[【問題点1】の修正(フィールド宣言の修正)]
[【問題点2】の修正(フィールド変数名の修正)]
[【問題点3】の修正(カプセル化)]
また、クラスCircleのコンストラクタのローカル変数の名前に問題があります。
この問題点をふまえて修正すると、次のようになります。
[【問題点4】の修正(ローカル変数名の修正)]
メソッド内の例外の取扱いは、例外を処理する理由がプログラム上で明確に示されるようにコーディングしてください。
クラスCircleのメソッドcircleRadiusの例外の取扱いに2つ問題があります。
以上の2つの問題点をふまえて修正すると、次のようになります。
[【問題点5】の修正(入力値の検証)]
[【問題点6】の修正(例外処理)]
いかがでしょうか。
あくまでも簡単なサンプルプログラムですが、このように修正することで、以前より高品質かつ、第3者がみてもわかりやすい(保守性の高い)プログラムとなりました。
実際のプログラミングでは、この他にもたくさんの勘違いやミスを犯すことがあります。
ソースレビューを行った結果を記録しながら、よりよいプログラミングができるようにしていきます。
また、本文中でご紹介したサンプルプログラムがこちらからダウンロードできますので、是非ご活用ください。