TOP
>
設計・移行・活用
> サンプルプログラム(カメラショップ)の例
Javaコーディング規約
第1回:良いコードとは、心得5ヶ条
著者:
電通国際情報サービス 高安 厚思、東田 健宏
エー・ピー・アイ 森田 健
2005/8/9
前のページ
1
2
3
次のページ
サンプルプログラム(カメラショップ)の例
まずは、カメラショップを題材としたサンプルプログラムを例にあげ、コーディングレベルについて説明します。そして、コーディングのレベルをCMMIなどの成熟モデルになぞらえて1から5に分類し(表4)、それぞれのレベルでどの点が問題になっているかを説明していきます。
レベル1
外部仕様を満たすことができないプログラム
レベル2
外部仕様を満たすが読みにくいプログラム
レベル3
読みやすくなっているが、コードを分割できていないプログラム
レベル4
コード分割できているが、オブジェクト指向プログラミングできていない
レベル5
柔軟性/拡張性が高いプログラム
表4:コーディングレベル
カメラショップの仕様は以下の通りです。
この店は、カメラとメモリを1商品ずつ取り扱っている
カメラ/メモリについて、それぞれ10個の在庫がある
どちらか片方でも売り切れたら閉店する
ポイントカード会員には合計額の10%を還元する
画面に出力する情報は下記を満たすこと
商品情報
購入情報
全ての商品に対する購入数の確認
表5:カメラショップの仕様概要
レベル1:外部仕様を満たすことができないプログラム
レベル1のプログラムのソースコードは、外部仕様を満たさない上に、余りにも見にくいものとなっています。
レベル1のソースコード
(クリックするとソースコードが表示されます)
レベル1のプログラムのソースコードには主に以下のような問題があります。
10%のポイントがつくのではなく、10%値引きされている
「在庫が2回引かれる」バグが発生することがある
表示がおかしい
あまりにも見にくい
表6:レベル1のソースコードの問題点
外部仕様を満たしていない
レベル1のプログラムは外部仕様を満たしていません。10%のポイントがつくのではなく、10%値引きされた結果が表示されてしまいます(23行目)。
こういったミスは、仕様を理解したかどうかをコーディングに取り掛かる前にSEとプログラマの間で話し合えば防ぐことができたはずです。
「在庫が2回引かれる」バグが発生することがある
条件によりバグが発生するということは、単体レベルでのテストが不十分だったということです(53行目、56行目)。
2回引かれるバグの部分は、恐らくサンプルなどをそのままコピーしたのでしょう。コードの内容を良く理解しないでサンプルをそのままコピーして作成した場合、こういったバグが発生します。
ここでコーディングの心得が効いてきます。
コーディングの心得、5ヶ条「
サンプルを鵜呑みにしない
」
あまりにも見にくい
ソースコード全体を通して適切にインデントがされておらず、大変読みにくいソースコードになっています。
「良いコード」の基本は、「他人が読んでも分かりやすい」と感じるコードです。どういう風に書いたら、読みやすく分かりやすくなるかを念頭において、常に第三者の視点を意識しながら記述して下さい。
また、自分で書いたコードであっても、時間が経って読み返してみると、内容を理解するのに時間がかかった経験はないでしょうか?「他人が読んでも分かりやすい」と感じるコードは、他の人のためだけではなく、自分のためでもあるのです。
ここでコーディングの心得が効いてきます。
コーディングの心得、5ヶ条「
見やすさを重視せよ
」
前のページ
1
2
3
次のページ
著者プロフィール
株式会社電通国際情報サービス 高安 厚思
株式会社電通国際情報サービス 開発技術センター
Java(J2EE)/オブジェクト指向の研究開発やプロジェクト支援、開発コンサルティングに従事。モデル、アーキテクチャ、プロセスが探求対象。今回は Javaコーディング規約2004の仕掛け人。
著者プロフィール
株式会社電通国際情報サービス 東田 健宏
株式会社電通国際情報サービス 開発技術センター
CTI、Webアプリの開発経験を経て、現在は主にプロジェクトマネジメント支援、プロセスエンジニアリング、ソフトウェア工学研究開発に従事。最近はコーチング、ファシリテーションといったヒューマン系スキルに興味を持ち日々修得に努めている。
著者プロフィール
株式会社 エー・ピー・アイ 森田 健
コードが単純になるには?見やすいコードを書くには?を日々模索しています。「コードがドキュメントだ」が、口癖な他称人間コンパイラ。
INDEX
第1回:良いコードとは、心得5ヶ条
はじめに
サンプルプログラム(カメラショップ)の例
レベル2:外部仕様を満たすが読みにくいプログラム