OKI 電気工業株式会社 OKI 電気工業株式会社 株式会社 OKIソフトウェア

メンバページ: Go

エレガントデバッグのススメ

Do you like the Elegant Debug ?


このページは、エレガントにデバッグするコツを掲載していきます。


- 更新記録 -
1日目 エレガントデバッグとは
2日目 使えるものは何でも使え
3日目 見込み捜査の甘い罠
4日目 教科書を捨てて
5日目 デバッグパターン
5日目定時後 番外編:本当にデバッグできたのか?
6日目 非技術的なエレガントな手法って
7日目 エレガントなまとめと参考文献

1日目 --- エレガントデバッグとは

ここではエレガントデバッグについて書いていきます。

疲れることはしない

エレガントデバッグとは、一言で言えば、「疲れることをしないデバッグ」です。

疲れることをしないためには、何でもします。使えるものはなんでも使います。 例えば、ソースコードのコメントも使います。これはデバッグの有用な情報になります。
既に取ってあるなら、メモリダンプも使います。 しかしメモリダンプをわざわざ取ることはしないです。 エレガントじゃありませんから、疲れますから。
デバッグツールはあるのであれば使います。 さらに言えば「なくても」使います。新たにインストールして使います。 結局はエレガントでないことをツールに任せることによって、エレガントなデバッグを進めることになることが多いからです。
ここは2日目の「使えるものは何でも使え」に詳しく書く予定です。
疲れるデバッグは、しばしば「力ずくのデバッグ」と呼ばれています。 例えば、上記に出てきたメモリダンプが典型的な手法です。 他によくあるのは、印字命令の散りばめです。C であれば、printf 文の散りばめです。 またはデバッガによって、ブレークポインタやステップ実行を無闇に行うなどがあります。
これらのデバッグはエレガントデバッグの対極にあります。全く、エレガントではありません。
最後の手段でもないです。そもそも最初に使っている場合も多いです。

バグの原因を考えろ!そして考えろ!

デバッグは、その多くの作業はバグの原因を掴むことです。 逆に言えば、バグの原因が分かれば、その対処は容易になることが多いです。 しばしば、1行で済む場合もあります。
バグの原因を探るには、「帰納法」と「演繹法」があると言われています。 要するに、バグの現象から類推してバグの原因を推定するか、バグの原因を先に仮定してそれを証明するかの違いになります。
両者に根本的な差はありません。順序の問題ですので、自分のやり方に合った方を選びます。 しばしば、この業界ではバグの原因を「犯人」と呼び、真犯人、主犯、従犯を見つけることを行います。
ここでエレガントなデバッグの基本法則があります。
デバッグは楽しんで行え」、これが重要です。これがエレガントデバッグへの近道になります。
犯人を推定できれば、次に証拠集めになります。自白が得られない場合が多いですから、状況証拠の積み重ねで証明していく場合が多いです。
この段階は、兎に角、考えることになります。灰色の脳細胞をフルに使って。
ここは3日目の「見込み捜査の甘い罠」で詳しく実例で紹介していきたいと思います。注意することとともに説明します。

考えても分からないときもある

バグの原因を考えて、それが証明できれば、万歳です。 教科書はここまでしか書いていません。 デバッグの研修でも理想的なサンプルしか用意していないです。
エレガントなデバッグとは無闇に力ずくデバッグをせずに考えること」という単純な話になっています。
読者や受講者は、それを聞いて、分かった風になるというパターンです。
もちろん、現実は「こんなに単純な話ではありません」。

問題はつまり、どんなに考えてもバグの原因が不明であることが多いことです。
これをここでは「オカルトバグ」と呼びます。この名称もデバッグは楽しんで行うの一環です。なお、本当に怖がってはいけません。
オカルトバグが出てきたときに、どのようにエレガントにデバッグをするかを4日目の「教科書を捨てて(スマートに考えてを改題)」で、話していくようにします。つまり3日目のアンチテーゼになっています。

エレガントにデバッグ

エレガントデバッグとは、つまり、「力ずくデバッグ」でもない、また「単純に考えるデバッグ」でもないということです。言い方を変えれば、単純労働でもなく、数学でもないということです。
私たちはエンジニアです。エンジニアとして、エレガントにデバッグをするという使命があります。 このためには、4日目で言及したことも考慮することになります。もちろん、ツールによって力ずくデバッグをやることもあります。数学者になってバグを証明することもあります。しかし本質はエンジニアとして行うデバッグです。これをエレガントなデバッグと呼びます。
ここでは、そのエレガントデバッグについて話していきます。また、周辺の話として、デバッグの確認や非技術的な話、例えば、情報伝達や共有などの話もしていくように考えています。

このページトップへ

みなさんもエレガントなデバッグしていきましょう。

See you again !!

このページトップへ

Copyright (c) 2004-2009 OKI Software Co., Ltd.