ソースコードレビュー チェック項目

ソフトウェア・テストの技法 第2版

ソフトウェア・テストの技法 第2版

  • 作者: J.マイヤーズ,M.トーマス,T.バジェット,C.サンドラー,Glenford J. Myers,Todd M. Thomas,Tom Badgett,Corey Sandler,長尾真,松尾正信
  • 出版社/メーカー: 近代科学社
  • 発売日: 2006/08/01
  • メディア: 単行本
  • 購入: 7人 クリック: 267回
  • この商品を含むブログ (47件) を見る
を読んでいます。その中にレビュー項目の一覧があり、今後も役に立ちそうだったので書き出すことにしました。
(原著が古いといっても、21世紀に入ってから改訂しているのだから、対象言語も変えておいて欲しいな、とは思いましたが。FORTRANとかキツイ)
原文にはFORTRANCOBOLの記述も混じっていますが、下のリストからは除外してあります。

データ参照

  • 変数に値がセットされているか
    • Cの自動変数は要注意
  • 配列のインデクスが範囲内であるか
    • Cでは実行しても潜伏するので要注意
  • 配列のインデクスは整数型か
  • 解放済みの領域にアクセスしていないか
    • 自動変数の参照は外にださない、free関数後に注意する
  • メモリのデータ内容と構造が一致しているか
    • バイト列に構造体で参照しようとした時など
  • 基底となる記憶域属性は正しいか
    • 構造体ポインタのキャストミスとか
  • 文字列への参照について
    • インデクスの領域突破とか。

データ宣言

  • デフォルトの属性で大丈夫か
    • privateとか?
  • 配列や文字列の初期値はどうなっているか?
  • そのデータ型で正しいの?
    • 西暦表現には1バイトじゃ足りない。
  • 似た名前の変数には注意
    • cellの配列でcellsとか駄目なのか

計算

  • 数値でない変数への計算処理とか
  • データ型の混じった計算処理とか
  • 代入文でのデータ型
    • intをchar変数に代入するとか?
  • 計算途中のオーバーフロー/アンダーフロー
  • 0割り算の可能性
  • 2進数表現の正確性
    • 10×0.1は1.0ではない!
  • 変数の意味的な範囲は守られているか
    • 変数percentで101が入るのは、普通おかしいよね。(場合によるけど)
  • 演算子の優先順位は理解している?
    • なるべく()を使いましょう
  • 整数の割り算結果
    • でも5/2が2にならない言語って何だろう?

比較

  • 比較するデータ同士の型は大丈夫か
  • 比較演算子は正確に
    • <と<=の違いとか
  • ブール代数
    • 昔、&&とすべき所を&としたことがあった
  • 比較演算子ブール代数式の混合
    • 1<X<10の実装は(1<X)&&(X<10)です
  • 演算子の優先順位再び
    • なるべく括弧をつk(ry
  • ブール代数の解釈は言語により異なります
    • C言語は0とそれ以外。Javaはtrue/false

制御の流れ

  • 分岐の可能性と分岐先の数が一致するか
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エラーが発生する可能性を忘れてない?

その他

  • タイポ!
    • "You is ...", "recieve"(←昔見たことがある)
  • 0回/1回しか参照されない変数
    • 参照されない変数は削除するとして。1回だけというのは場合によってはありでしょう。
  • コンパイル時の警告
    • 無視すんな
  • コンパイラの警告レベル
    • 出来る限り最凶もとい最強で
  • 仕様を満たしていますか?
    • この項目はすこし大きすぎるw