ソフトウェアのバグをなくすには?--プログラミングの際に避けるべき10の失敗 - (page 4)

David Gewirtz (Special to ZDNET.com) 翻訳校正: 村上雅章 野崎裕子

2016-06-17 06:00

#6:エラーチェックの貧弱さ

 ある有名な陸軍元帥は、敵に遭遇すれば計画は必ず変わると述べている。筆者はこれにならって、ユーザーに遭遇すればソースコードは必ず変わると主張したい。ユーザーがあなたのソースコードをどのように使用するのかなんて分かっていると考えているのであれば、それは間違っている。賭けてもいい。

 ユーザーはコードに潜む穴を探し当ててしまう名人なのだ。

 このため、テストとエラーチェックをしっかりと実施するのが肝要だ。エラーチェックでは、コード中に記述したあらゆる操作の結果をチェックする習慣を身につけてほしい。期待通りのものが得られているかどうかを確認するのだ。さもなければ、あなたのコードは予期せぬ結果に基づいて処理を継続することになる。

 例を挙げてみよう。筆者は講座の課題として、ファイルの読み込みを必要とするプログラムを学生たちに作成させている。そのコードのファイル読み込み部分を見てみると、ほとんどの学生はユーザーがダイアログボックスのキャンセルボタンを押したかどうかをチェックするものの、ファイルの読み込みが実際に成功したか、それとも何らかのシステムエラーが発生したのかをチェックしようとはしない。ファイルへの書き込みになると、状況はさらに悲惨だ。実際にファイルが保存されたかどうかをチェックする学生はほとんどいない。とても深刻な状態だ。

 これがどのような問題を引き起こすのかは分かるはずだ。問題を起こさないようにするには、動作結果が必ず予想できるのかどうかを、すべてのケースで考えておく必要がある。しかし、そもそもそんな予想などできるものではない。だからこそテストが必要となるわけだ。ここでのテストは、プログラマーが自らの手でコードを実行させてみるという話ではない。実際のユーザーという、予測できない振る舞いを見せる可能性がある人物にコードを実行させるという話なのだ。

 これによって貴重な情報が数多く得られるはずだ。

#7:ちゃんとしたデバッガではなく、出力ステートメントを使う

 プログラマーの文化は使用する言語によって左右されるということを、筆者は長年の経験で実感している。その根拠の大半は、異なったソリューションが生み出されている点と、異なったツールが用いられている点にある。

 筆者の講座でC#を学んでいる学生たちと、筆者のプロジェクトでともに作業した経験があるPHPプログラマーたちの違いを例として挙げてみたい。C#を使用している場合、コードのデバッグ時にシンボリックデバッガを使用せずに済ませようとするプログラマーはほとんどいない。その理由は、C#という言語自体がコーディング環境とデバッガを統合した「Visual Studio」を使い、ネイティブなプログラムを作成するようになっているためだ。

 これとは対照的に、筆者が知っているPHPプログラマーの多くは、コードのデバッグ時にはecho関数やvar_dump関数をコード内に記述するだけで十分だと考えている。理由の1つには、ほとんどのPHPプログラマーが開発環境ではなく、エディタを使ってプログラムを作成するという点があるはずだ。両者の大きな違いはデバッガにある。

 それでは、デバッガとは何だろうか?簡単に説明すると、コードの実行時にコードの内部詳細をチェックできるようにするツールだ。コード専用のX線検査や超音波検査、MRI検査みたいなものだと考えてほしい。特定の場所でコードの実行を停止し、すべての変数に格納されている内容をチェックすることができる。特定の条件が発生した時に実行を停止するようなことも可能だ。そして、変数の内容を変更できる。それぞれの値を監視したり、プロファイルを取得することもできる(とは言うものの、プロファイルの取得には別途、専用のツールが用意されている場合もある)。

 生産性の違いは歴然としている。質の高い仕事を早く完了させたいのであれば、本物のシンボリックデバッガを使うようにしてほしい。

ZDNET Japan 記事を毎朝メールでまとめ読み(登録無料)

ホワイトペーパー

新着

ランキング

  1. セキュリティ

    「デジタル・フォレンジック」から始まるセキュリティ災禍論--活用したいIT業界の防災マニュアル

  2. 運用管理

    「無線LANがつながらない」という問い合わせにAIで対応、トラブル解決の切り札とは

  3. 運用管理

    Oracle DatabaseのAzure移行時におけるポイント、移行前に確認しておきたい障害対策

  4. 運用管理

    Google Chrome ブラウザ がセキュリティを強化、ゼロトラスト移行で高まるブラウザの重要性

  5. ビジネスアプリケーション

    技術進化でさらに発展するデータサイエンス/アナリティクス、最新の6大トレンドを解説

ZDNET Japan クイックポール

注目している大規模言語モデル(LLM)を教えてください

NEWSLETTERS

エンタープライズ・コンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]