プログラムデバッグ心得

最終更新: [2006/06/15]
English version is where??
Copyright

[1996/01/30]
プログラムデバッグ心得 (debug rule)

   ------------------------------------------------------
   0. 揺さぶりをかける
   ------------------------------------------------------
   a. 考える
       -- 何をしたいのかを考える(目的)
       -- 何をすればいいのかを考える(方法)
       -- どうなればいいのかを考える(目標)
   b. 気力を保つ
   c. 休憩する
   d. うっかりミスを防ぐ
   e. プログラムリストを印刷してみる
   ------------------------------------------------------
   1.1 問題を簡単にする.整理し分割する
       -- 必要のない変数を削除する
       -- 長い関数を切り分ける
          切り分けられない場合は問題が整理されてない
       -- 関数への引数を最小限にする
          長くなる場合は問題が整理されてないかも
       -- 似た用途の変数が多数存在する
          構造体でまとめる
       -- マイナーチェンジの部分が多数存在する
          単一の機能を持つ関数を利用する?
       -- 変更点を一つにまとめる
          ヘッダファイルの使用
            定数・ マクロの定義
            (マジックナンバーを使わない)
       -- でも問題を簡単にするのも難しいのだ!
          --> どうしても複数の事をまとめてやってしまおうとしてしまうなぁ
              (特に時間のないときは...(--"))
          --> 問題を各要素に分離できる能力が必要なのか?
              -- c.f. 初心者のプログラムの関数はめちゃめちゃ長くなる.
   1.2 段階的に処理する
   1.3 部分的に確実にする.動作確認を行う.
   ------------------------------------------------------
   3. 装置のケーブル接続確認
      -- つながってるか?
      -- スイッチは入ってるか?
      -- 壊れてないか?
   ------------------------------------------------------
   4. 変数の初期化の確認(超基本!!)
      -- 初期化がちゃんとしてなかったら,まともに動く筈がない
      -- 繰り返し処理や総和を求めるとき
      -- 変数の型のチェック
      -- 配列のサイズや領域確保・開放
      -- 何がなんでも初期化を行う(<-- 処理時間との相反関係)
      -- 元データのチェック
         処理結果がおかしいのではなく元データの段階で
         壊れているのではないか?
   5. 境界値(0 とか最大値とか)での処理結果の確認
       -- 結果の予測の容易な値を使ってみる
       -- 1増やす
       -- 1減らす
       -- 倍にする
       -- 半分にする
   6. 値を変えてみる
     効果がなかったら異常
   7. バグを故意に起こしてみる
     そのバグが起こらなかったら異常
   8. 処理をやめてみる
     その処理の効果が残っていたら異常
   9. 処理順序を変えてみる
     順序に関係ないはずなのに結果が変わったら異常
  10. 処理量を減らしてみる
     簡単に把握できる量でデバックする
     ゆっくり処理してみる
   ------------------------------------------------------
  96. 別の言語を使ってみる
  97. 別のコンパイラを使ってみる
  98. コンパイルしなおしてみる
  99. イチから作り直してみる

  参考文献:
    「プログラム書法」
    「プログラム作法」
    「プログラミングのエッセンス」

  追記:[1996/02/06]
       [1997/12/28]

|| ソフトウェアリンク|| 自作プログラム集||
|| Oshiro Home||

Mail-to: oshiro@mibai.tec.u-ryukyu.ac.jp