ソースコードレビュー チェック項目
- 作者: J.マイヤーズ,M.トーマス,T.バジェット,C.サンドラー,Glenford J. Myers,Todd M. Thomas,Tom Badgett,Corey Sandler,長尾真,松尾正信
- 出版社/メーカー: 近代科学社
- 発売日: 2006/08/01
- メディア: 単行本
- 購入: 7人 クリック: 267回
- この商品を含むブログ (47件) を見る
(原著が古いといっても、21世紀に入ってから改訂しているのだから、対象言語も変えておいて欲しいな、とは思いましたが。FORTRANとかキツイ)
原文にはFORTRANやCOBOLの記述も混じっていますが、下のリストからは除外してあります。
データ参照
- 変数に値がセットされているか
- Cの自動変数は要注意
- 配列のインデクスが範囲内であるか
- Cでは実行しても潜伏するので要注意
- 配列のインデクスは整数型か
- C系の言語ならコンパイル時にひっかかる
- 解放済みの領域にアクセスしていないか
- 自動変数の参照は外にださない、free関数後に注意する
- メモリのデータ内容と構造が一致しているか
- バイト列に構造体で参照しようとした時など
- 基底となる記憶域属性は正しいか
- 構造体ポインタのキャストミスとか
- 文字列への参照について
- インデクスの領域突破とか。
データ宣言
- デフォルトの属性で大丈夫か
- privateとか?
- 配列や文字列の初期値はどうなっているか?
- そのデータ型で正しいの?
- 西暦表現には1バイトじゃ足りない。
- 似た名前の変数には注意
- cellの配列でcellsとか駄目なのか
計算
比較
制御の流れ
- 分岐の可能性と分岐先の数が一致するか
switch(test){ case 1: break; case 2: break; }
ならtestは1と2だけであるべき
- for/whileから脱出できるか
- 終了条件、またはcontinue/break文
- その関数は終了するか(タスクループを除く)
- ループに入らない可能性は?それでもOKか?
- 0オリジンなループ?
- {}によるブロック構造は大丈夫か
インターフェイス
- 引数の数、属性(型/長さ)、順序の一致
- 属性は配列の長さ、とかかな。型が一致していると、順序を間違えていてもコンパイラは指摘してくれない。
- 引数の単位系の一致
- cmもmも同じintでしょう・・・
- 引数の値チェック
- 変な入力がされないとは限りません。出力用引数ならNULLチェック必須
- 引数の(I/O)
- 存在する大域変数に対して、ばらばらな考え方を持っていないか?
ファイル
- open命令のリード/ライト属性
- アペンドとか
- ファイルデータを展開するバッファのサイズは足りているか
- 大きいファイルもありますよ
- openしてからアクセス
- 終了時には必ずclose
- EOFを検知しましょう
- I/Oエラーが発生する可能性を忘れてない?