デバッグを効率的に行なうための9の心得

バグのないソフトウェアはない、というくらいソフトウェアにはバグがつきものですが、ソフトウェアの開発プロジェクトには期間や予算に上限があるため、バグの修正に手間取ると十分なテストを実施することができず、品質が低い状態でリリースされてしまうことになります。テストを円滑に進めソフトウェアの品質の高めていくためには、バグを迅速かつ正確にバグを修正していく必要があります。

しかし、オブジェクト指向プログラミング(OOP)やデザインパターンなどプログラムの作り方についての解説書や記事はたくさんあるにも関わらず、「バグは本来あってはいけないもの、あるはずが無いもの」という意識があるためか、デバッグに関して語られている情報源はあまり多くありません。そのため、デバッグのテクニックについてはせいぜい「開発現
場の先輩に教えてもらう」というのが実情です。

知識を共有するために、私がこれまでのソフトウェア開発の経験から得た、デバッグを効率的に行なうための心得をいくつか挙げてみたいと思います。

1. バグの原因は自分が作っているプログラムにある可能性が最も高い
ソフトウェアを構成する要素として、OS、開発ツールに付属するライブラリ、市販ライブラリ、プロジェクト内で作成されたライブラリなどがありますが、バグの原因は自分が作っているプログラムである可能性が最も高いと考えたほうがすばやくバグを見つけられます。なぜなら、今まさに開発が行なわれているプログラムこそが最もテストされていないプログラムだからです。問題の原因をマイクロソフトのせいにする前に自分のプログラムを調べましょう。

2. テストの実施を妨げているバグを優先する
当然のことですが、テストができなければバグを見つけることができません。効率的にバグが発見できるように、めったに行なわれない操作によって発生するバグよりも、必ず行なわれる操作で発生するバグを優先的に修正していく必要があります。

3. 問題を確実に再現できるようする
問題が発生する条件(操作手順、データなど)を必ず特定しなければなりません。これができないと動作確認は不可能ですので、修正したつもりが実は直ってなかったという事態にもなりかねません。この作業自体はソースコードがなくても可能なので、テスト担当者の協力を得られるのであれば、情報を交換しながらテスト担当者と開発担当者が並行して調査を進めるのが良いでしょう。

4. 一度でも問題が発生した場合はバグがある可能が高いので必ず調査する
一度でも問題が発生した場合は、単にバグが発現する条件がわかっていないだけで、必ずどこかにバグがあります。開発作業中はいろいろプレッシャーがあるので難しい面もありますが、見つけた時点で調査しておいた方がいろんな面で良いでしょう。

5. ソースコードを見ただけで正しい処理が行なわれていると判断しない
プログラムはプログラマが思っている通りに動くのではなくコンパイラが解釈した通りに動くものです。コンパイラについての知識が豊富なプログラマが犯しがち問題ですが、プログラマがコンパイラの仕様について誤解しているために生じるバグもよくあります。プログラマ自身は正しいと思っているためソースコードを見ただけではバグを発見することが困難ですがが、このようなバグは実際にプログラムを動かしてみることで簡単に原因を発見することがきます。

6. 想定外の操作や想定外のデータが使用されていないかチェックする
プログラムはプログラマが想定していなかった操作が行なわれたり、想定外のデータが入力されたりした場合は正しく動作しないことが多いものです。問題を発生させる操作やデータがプログラムで想定されているかチェックしてみましょう。

7. バグの原因となっているソースコードは必ず特定する
関係の無いところを直しても問題の現象が発生しなくなる場合もありますが、それでバグが無くなったわけではありません。そのような場合は、また別のところで別のかたちで問題が発生することになりかねません。バグは必ずソースコードレベルで原因を特定し確実に修正すべきです。

8. できるだけ他の処理に影響を与えないようにソースコードを修正する
他の処理に影響を与えるような修正を行なった場合、これまで問題なく動いていた部分に新たなバグを埋め込んでしまう可能性が高いものです。別の問題を引き起こさないように、影響範囲に注意してソースコードを修正します。しかし、単なるコーディング上の間違いであればプログラムの修正は比較的簡単で他の処理に影響を与えることは少ないのすが、設計に問題がある場合は他の部分の影響を与えないようにバグ修正を行なうのが難しい場合があります。そのような場合は、本質的な問題の解決にはならないとしても、影響範囲を限定するために暫定的な対処を行なった方が良いでしょう。

9. ソースコードを修正した場合は必ずテストする
たとえ簡単な修正であっても間違った修正を行なう可能性は常にあります。また、修正が思わぬところに影響を与えることもあります。当たり前ですが、ソースコードを修正した場合は必ずテストを行ないましょう。テスト作業を手を抜くよりも、テストを行なった方がトータル見れば開発者自身にとっても負担が少ないはずです。
[1067] Posted by kagahiro at 2007/09/10 05:49:45
オープン | 1 point | Link (3) | Trackback (0) | Comment (1)

キーワード
プログラミング デバッグ テスト 

kagahiroのホームページ


デバッグを効率的に行なうための9の心得 関連リンク

ソフトウェアテスト
ソフトウェアテストとは、欠陥を発見するためにソフトウェアを実行することである。テストを重ねることによ...
ソフトウェア開発にハリーポッターは必要ない
残念ながらソフトウェアが魔法のように出来上がるなんてことはありません。プログラミングは一つ一つコード...
Debug Hacks デバッグを極めるテクニック&ツール
ミラクル・リナックスのエンジニアによって書かれた「DEBUG HACKS」という本の出版を記念して、Debug Hacks Conference 2009 というイベントで著者による講演が行われるそうです。Debug Hacks Conference 2009のお知...

デバッグを効率的に行なうための9の心得 トラックバック

トラックバックURL :


デバッグを効率的に行なうための9の心得へのコメント

1 Posted by Moncler ダウン販売 at 2012/11/10 18:19:14
モンクレール mokaをお探しのあなたに激安ショップをセレクト!安心して比較購入 できる激安モンクレール mokaをお選びください。

詳細の入力フィールドを表示する

おすすめ  (チェックしてコメントすると最新情報に掲載)
コメント :

< 前の投稿      次の投稿 >

アクセスランキング

今日のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (170 PV)
  2. Google News (グーグルニュース)日本版 (46 PV)
  3. グーグルニュース日本語版が見れない (10 PV)
  4. フリーソフトウェア/オープンソースのタブー (8 PV)
  5. 人気ユーチューバーの「ヒカル(ネクストステージ所属)」がVALUで自分のVAを全て売却し、詐欺ではないかと騒動に (8 PV)
  6. 「CASH(キャッシュ)」アイテム(ブランド品やガジェット)の写真を撮れば審査なしで現金化できるサービス (7 PV)
  7. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (7 PV)
  8. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (6 PV)
  9. ウェブページを1回だけリロード(再表示)する方法 (6 PV)
  10. VALU詐欺騒動でYouTuberヒカルが自身のVAを買い戻し、期限は18日20時まで (5 PV)

今月のアクセスランキング TOP 10

  1. SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (2492 PV)
  2. Google News (グーグルニュース)日本版 (619 PV)
  3. [将棋]将棋実況ユーチューバーのクロノさんが朝日新聞のクレームで棋譜中継を配信中止 (206 PV)
  4. 「CASH(キャッシュ)」アイテム(ブランド品やガジェット)の写真を撮れば審査なしで現金化できるサービス (149 PV)
  5. グーグルニュース日本語版が見れない (129 PV)
  6. [C言語]UTF-8でエンコードされた文字列の部分文字列を取り出すコード (119 PV)
  7. [食べ物]七草粥(ななくさがゆ) (102 PV)
  8. ウェブページを1回だけリロード(再表示)する方法 (101 PV)
  9. フリーソフトウェア/オープンソースのタブー (95 PV)
  10. Sony、ハイエンドEマウントミラーレスカメラ「α9」(model ILCE-9)を発表 (95 PV)

アクセス統計

ディレクトリ

関連サイト