Comments
Description
Transcript
五つの誤解 五つの誤解
Part 1 熊さんのプログラムはなぜ完成しないのか? バグ/デバッグをめぐる 五つの誤解 横丁のご隠居は町一番の物知り。ある春のうららかな午後,大工の熊さんがノート・パソコンとみ やげのりんごを持ってご隠居のところへやってきました。いつもはプログラミングに行き詰まって 暗い顔をしてくる熊さん,今日はやけにうれしそう。しかし熊さんは,自分がバグ(プログラムの 不具合)やデバッグについて大きく誤解していることに,まだ気付いていません──。 熊さん(以下,熊): ん,よくプログラミングしてるヒマあったなァ。 ども! ご隠居,いい日 仕事,最近はヒマなンかい? よりじゃござンせんか! これみやげのりんごっ 熊:とんでもない! うちの棟梁(とうりょう)の 評判がいいせいか,仕事は忙しいっスよ。でも, ス。見 かけは悪 いが減 農薬でうまいっスよ。 ここ数日ちょいとヒマができたんで,久々にち ょこちょこっとプログラミングをやったんスよ。 横 丁 のご隠 居 (以 下 , ご隠居):お,熊さん, で,もうすぐ完成ってトコで,ちょいとご隠居 のところへうかがおうかと。 いつもすまねェな。で, ご隠居:ほう,それでいつもと登場の仕方が違 今 日はやけに“にこや か”じゃねェか。 うってコトかい*1。で,プログラミングが順調 でウキウキ気分の熊さんが今日は何の用かな? 熊:へェ,自分のプロ グラムがもうすぐ完 成 ちょうど酒屋にツケを払っちまったトコでな。 熊:イヤだなァ,ご隠居。お金を借りる相談な しそうなンで,心 が晴 ワケないじゃないスか。実は,デバッガの使い れ晴れとしてるんスよ。 ご隠居:おや,お前さ 方をお教えいただけねェかと思ってまして。 ご隠居:(表情が少し硬くなる)お前さん,デ デバ 図1●バグをめぐる五つの誤解 40 H 2001年4月号 ッガ 1号 図2●Visual Basicの「デバッグ」メニュー バグ/デバッグをめぐる五つの誤解 バッガを使いたいってのかい? 熊:いけませんかィ? あっし程度の腕だと,自 分の作ったプログラムのあちこちでバグ(プロ グラムの不具合)がチョコチョコっと顔を出し やがって,なかなか自分だけではつぶしきれね ェんス。その点,デバッガって殺虫剤みたいな ものっスよね? 油虫にシュシュシュシュシュっ て吹きかけるようにして使えば,バグなんかあ っという間にイチコロだと聞きましたぜ。それ ができりゃ,あっしのプログラムも即完成だと 思ってるんスけど。 ご隠居:(顔をしかめて)どこのだれから聞い たか知らねェが,熊さんはデバッガを万能殺虫 剤みてェに思ってるってワケかい? こりゃア, 時間をかけてじっくり誤解をといてかなきゃい イント」の指定,(2)1行ごとに実行させる「ス テップ実行」 ,(3)「ウォッチ式」による変数の けねェな…(図1) 。 値の監視,くらいのモンさ。 *1 熊さんとご隠居は,1999年3月 号特集「Visual C++なんてこわく ない」 ,2000年3月号特集「なぜあ なたはプログラムを書 けないの か?」に続き,日経ソフトウエア では三度めの登場です。 *2 VBの よ う な 統 合 開 発 環 境 ( IDE: Integrated Development Environment)のほとんどでは, デバッガはメニューから呼び出す 一機能として提供されています。 熊:でもプログラムってこう,理路整然とした モンじゃないスか。だったら,フィルタみたい なものでバグを見つけ出して取ることくらい, 今どきの開発ツールならお茶の子さいさいじゃ ねェんですかね? 熊:でもご隠居,デバッガ(debugger)って その名の通り,バグをなくすためのソフトのは ご隠居:ふん(鼻で笑う) 。試しに,お前さん のVBでフォームにボタン貼り付けてから,リス ずじゃないスか。ほら(と持ってきたノート機 を取 り出 す),あっしが今 回 使 っているVB ト1のコードを書いてごらん。できたかい? じ ゃ,実行してみ。 (Visual Basic)のデバッガなんて,何やら難 しげで,いかにもご利益満載に思えやす*2(図 熊:ちゃんと動いてますぜ(図3) 。 ご隠居:でも,このプログラムはバグがあるか 2) 。いかにも「デバッガでバグなんて一掃しち らアウトだ。 ゃえィ」って感じじゃないスか。 ご隠居:ぜーんぜんマトはずれ。じゃ聞くがな, 熊:へ? エラー・メッセージは出ないし,ちゃ んと動いているじゃないスか。どこにバグがあ このメニューに「バグ取り開始」って項目があ るかい? るんで? ご隠居:ダイアログの内容が違っとる。日経ソ 熊:えっと…ありゃりゃ,ありませンね。ヘン フトウエアの発売日は毎月8日じゃなくて毎月 だなァ,そんな項目があったら,それを選ぶだ けでバグが取れて便利なのに。 24日だ。 熊:そ,それがバグ? プログラムの出来不出 ご隠居:あるワケねェさ。デバッガっつーのは 夢の万能薬なんかじゃなく,もっと単純なツー 来とはぜーんぜん関係ないじゃないスか! ご隠居:それがどうした? ユーザーが「このプ ルだ。VBのデバッガにできることは,せいぜい ログラムはウソをついてる」と感じる以上,こ (1)特定行で実行を一時停止する「ブレークポ れも立派なバグなンだよ。 Option Explicit Private Sub Form_Load() Command1.Caption = "日経ソフトウエアは…" End Sub Private Sub Command1_Click() MsgBox "毎月8日発売です!" End Sub リスト1●このプログラムのバグはどこだ? 図3●リスト1のプログラムを動かした様子。この画 面でバグが何か,わかる人にはわかるはず H 2001年4月号 41