[プログラム]の検索結果
バグのないソフトウェアはない、というくらいソフトウェアにはバグがつきものですが、ソフトウェアの開発プロジェクトには期間や予算に上限があるため、バグの修正に手間取ると十分なテストを実施することができず、品質が低い状態でリリースされてしまうことになります。テストを円滑に進めソフトウェアの品質の高めていくためには、バグを迅速かつ正確にバグを修正していく必要があります。
しかし、オブジェクト指向プログラミング(OOP)やデザインパターンなどプログラムの作り方についての解説書や記事はたくさんあるにも関わらず、「バグは本来あってはいけないもの、あるはずが無いもの」という意識があるためか、デバッグに関して語られている情報源はあまり多くありません。そのため、デバッグのテクニックについてはせいぜい「開発現
場の先輩に教えてもらう」というのが実情です。
知識を共有するために、私がこれまでのソフトウェア開発の経験から得た、デバッグを効率的に行なうための心得をいくつか挙げてみたいと思います。
1. バグの原因は自分が作っているプログラムにある可能性が最も高い
ソフトウェアを構成する要素として、OS、開発ツールに付属するライブラリ、市販ライブラリ、プロジェクト内で作成されたライブラリなどがありますが、バグの原因は自分が作っているプログラムである可能性が最も高いと考えたほうがすばやくバグを見つけられます。なぜなら、今まさに開発が行なわれているプログラムこそが最もテストされていないプログラムだからです。問題の原因をマイクロソフトのせいにする前に自分のプログラムを調べましょう。
2. テストの実施を妨げているバグを優先する
当然のことですが、テストができなければバグを見つけることができません。効率的にバグが発見できるように、めったに行なわれない操作によって発生するバグよりも、必ず行なわれる操作で発生するバグを優先的に修正していく必要があります。
3. 問題を確実に再現できるようする
問題が発生する条件(操作手順、データなど)を必ず特定しなければなりません。これができないと動作確認は不可能ですので、修正したつもりが実は直ってなかったという事態にもなりかねません。この作業自体はソースコードがなくても可能なので、テスト担当者の協力を得られるのであれば、情報を交換しながらテスト担当者と開発担当者が並行して調査を進めるのが良いでしょう。
4. 一度でも問題が発生した場合はバグがある可能が高いので必ず調査する
一度でも問題が発生した場合は、単にバグが発現する条件がわかっていないだけで、必ずどこかにバグがあります。開発作業中はいろいろプレッシャーがあるので難しい面もありますが、見つけた時点で調査しておいた方がいろんな面で良いでしょう。
5. ソースコードを見ただけで正しい処理が行なわれていると判断しない
プログラムはプログラマが思っている通りに動くのではなくコンパイラが解釈した通りに動くものです。コンパイラについての知識が豊富なプログラマが犯しがち問題ですが、プログラマがコンパイラの仕様について誤解しているために生じるバグもよくあります。プログラマ自身は正しいと思っているためソースコードを見ただけではバグを発見することが困難ですがが、このようなバグは実際にプログラムを動かしてみることで簡単に原因を発見することがきます。
6. 想定外の操作や想定外のデータが使用されていないかチェックする
プログラムはプログラマが想定していなかった操作が行なわれたり、想定外のデータが入力されたりした場合は正しく動作しないことが多いものです。問題を発生させる操作やデータがプログラムで想定されているかチェックしてみましょう。
7. バグの原因となっているソースコードは必ず特定する
関係の無いところを直しても問題の現象が発生しなくなる場合もありますが、それでバグが無くなったわけではありません。そのような場合は、また別のところで別のかたちで問題が発生することになりかねません。バグは必ずソースコードレベルで原因を特定し確実に修正すべきです。
8. できるだけ他の処理に影響を与えないようにソースコードを修正する
他の処理に影響を与えるような修正を行なった場合、これまで問題なく動いていた部分に新たなバグを埋め込んでしまう可能性が高いものです。別の問題を引き起こさないように、影響範囲に注意してソースコードを修正します。しかし、単なるコーディング上の間違いであればプログラムの修正は比較的簡単で他の処理に影響を与えることは少ないのすが、設計に問題がある場合は他の部分の影響を与えないようにバグ修正を行なうのが難しい場合があります。そのような場合は、本質的な問題の解決にはならないとしても、影響範囲を限定するために暫定的な対処を行なった方が良いでしょう。
9. ソースコードを修正した場合は必ずテストする
たとえ簡単な修正であっても間違った修正を行なう可能性は常にあります。また、修正が思わぬところに影響を与えることもあります。当たり前ですが、ソースコードを修正した場合は必ずテストを行ないましょう。テスト作業を手を抜くよりも、テストを行なった方がトータル見れば開発者自身にとっても負担が少ないはずです。
しかし、オブジェクト指向プログラミング(OOP)やデザインパターンなどプログラムの作り方についての解説書や記事はたくさんあるにも関わらず、「バグは本来あってはいけないもの、あるはずが無いもの」という意識があるためか、デバッグに関して語られている情報源はあまり多くありません。そのため、デバッグのテクニックについてはせいぜい「開発現
場の先輩に教えてもらう」というのが実情です。
知識を共有するために、私がこれまでのソフトウェア開発の経験から得た、デバッグを効率的に行なうための心得をいくつか挙げてみたいと思います。
1. バグの原因は自分が作っているプログラムにある可能性が最も高い
ソフトウェアを構成する要素として、OS、開発ツールに付属するライブラリ、市販ライブラリ、プロジェクト内で作成されたライブラリなどがありますが、バグの原因は自分が作っているプログラムである可能性が最も高いと考えたほうがすばやくバグを見つけられます。なぜなら、今まさに開発が行なわれているプログラムこそが最もテストされていないプログラムだからです。問題の原因をマイクロソフトのせいにする前に自分のプログラムを調べましょう。
2. テストの実施を妨げているバグを優先する
当然のことですが、テストができなければバグを見つけることができません。効率的にバグが発見できるように、めったに行なわれない操作によって発生するバグよりも、必ず行なわれる操作で発生するバグを優先的に修正していく必要があります。
3. 問題を確実に再現できるようする
問題が発生する条件(操作手順、データなど)を必ず特定しなければなりません。これができないと動作確認は不可能ですので、修正したつもりが実は直ってなかったという事態にもなりかねません。この作業自体はソースコードがなくても可能なので、テスト担当者の協力を得られるのであれば、情報を交換しながらテスト担当者と開発担当者が並行して調査を進めるのが良いでしょう。
4. 一度でも問題が発生した場合はバグがある可能が高いので必ず調査する
一度でも問題が発生した場合は、単にバグが発現する条件がわかっていないだけで、必ずどこかにバグがあります。開発作業中はいろいろプレッシャーがあるので難しい面もありますが、見つけた時点で調査しておいた方がいろんな面で良いでしょう。
5. ソースコードを見ただけで正しい処理が行なわれていると判断しない
プログラムはプログラマが思っている通りに動くのではなくコンパイラが解釈した通りに動くものです。コンパイラについての知識が豊富なプログラマが犯しがち問題ですが、プログラマがコンパイラの仕様について誤解しているために生じるバグもよくあります。プログラマ自身は正しいと思っているためソースコードを見ただけではバグを発見することが困難ですがが、このようなバグは実際にプログラムを動かしてみることで簡単に原因を発見することがきます。
6. 想定外の操作や想定外のデータが使用されていないかチェックする
プログラムはプログラマが想定していなかった操作が行なわれたり、想定外のデータが入力されたりした場合は正しく動作しないことが多いものです。問題を発生させる操作やデータがプログラムで想定されているかチェックしてみましょう。
7. バグの原因となっているソースコードは必ず特定する
関係の無いところを直しても問題の現象が発生しなくなる場合もありますが、それでバグが無くなったわけではありません。そのような場合は、また別のところで別のかたちで問題が発生することになりかねません。バグは必ずソースコードレベルで原因を特定し確実に修正すべきです。
8. できるだけ他の処理に影響を与えないようにソースコードを修正する
他の処理に影響を与えるような修正を行なった場合、これまで問題なく動いていた部分に新たなバグを埋め込んでしまう可能性が高いものです。別の問題を引き起こさないように、影響範囲に注意してソースコードを修正します。しかし、単なるコーディング上の間違いであればプログラムの修正は比較的簡単で他の処理に影響を与えることは少ないのすが、設計に問題がある場合は他の部分の影響を与えないようにバグ修正を行なうのが難しい場合があります。そのような場合は、本質的な問題の解決にはならないとしても、影響範囲を限定するために暫定的な対処を行なった方が良いでしょう。
9. ソースコードを修正した場合は必ずテストする
たとえ簡単な修正であっても間違った修正を行なう可能性は常にあります。また、修正が思わぬところに影響を与えることもあります。当たり前ですが、ソースコードを修正した場合は必ずテストを行ないましょう。テスト作業を手を抜くよりも、テストを行なった方がトータル見れば開発者自身にとっても負担が少ないはずです。
-
A Python [書籍]
オブジェクト指向スクリプト言語「Python」に関する書籍。Pythonの入門書やリファレンス、プログラミング解説書など。
Pythonで学ぶプログラム作法
プログラミング未経験者を対象に、コンピュータプログラミングの基本理論を解説する入門書。プログラミングの定義、歴史、プログラミングによって問題を解決するための基本テクニックが紹介されている。
みんなのPython
日本人によるオブジェクト指向スクリプト言語「Python」の入門書。インストールからコードを書く方法まで詳しく解説している。
初めてのPython 第2版
オブジェクト指向スクリプト言語「Python」の入門書。Pythonの特徴の解説から、プログラム実行方法、文法解説やプログラミングなど、Pythonプログラミングに欠かせない情報が網羅されている。
Pythonクィックリファレンス
オブジェクト指向スクリプト言語「Python」の文法、モジュールの利用方法がまとめられたリファレンス。
Pythonテクニカルリファレンス―言語仕様とライブラリ
プログラミング言語Pythonのリファレンス。Python言語仕様、Pythonライブラリ、Python拡張APIについての正確な情報が簡潔に記載されている。
PerlユーザのためのPython移行ガイド
Perlとの比較をベースにPythonについて解説。関数や例外処理など基本的な部分から、組み込み関数、OSとのインタフェース、データ操作、ファイル操作、ネットワーク等、開発上必要となる項目が網羅されている。
IronPythonの世界
Pythonをマイクロソフトが.NET Frameworkで動くようにしたオープンソースのスクリプト言語「IronPython」の解説書。
Python for 702NK/702NK2プログラミングブック
Nokia製S60端末上でのPythonプログラミングを解説。基本的な使い方や、702NK及び702NKIIに実行環境をインストールする方法、携帯端末上で動作するアプリケーションなどが紹介されている。
Pythonで学ぶプログラム作法
プログラミング未経験者を対象に、コンピュータプログラミングの基本理論を解説する入門書。プログラミングの定義、歴史、プログラミングによって問題を解決するための基本テクニックが紹介されている。
みんなのPython
日本人によるオブジェクト指向スクリプト言語「Python」の入門書。インストールからコードを書く方法まで詳しく解説している。
初めてのPython 第2版
オブジェクト指向スクリプト言語「Python」の入門書。Pythonの特徴の解説から、プログラム実行方法、文法解説やプログラミングなど、Pythonプログラミングに欠かせない情報が網羅されている。
Pythonクィックリファレンス
オブジェクト指向スクリプト言語「Python」の文法、モジュールの利用方法がまとめられたリファレンス。
Pythonテクニカルリファレンス―言語仕様とライブラリ
プログラミング言語Pythonのリファレンス。Python言語仕様、Pythonライブラリ、Python拡張APIについての正確な情報が簡潔に記載されている。
PerlユーザのためのPython移行ガイド
Perlとの比較をベースにPythonについて解説。関数や例外処理など基本的な部分から、組み込み関数、OSとのインタフェース、データ操作、ファイル操作、ネットワーク等、開発上必要となる項目が網羅されている。
IronPythonの世界
Pythonをマイクロソフトが.NET Frameworkで動くようにしたオープンソースのスクリプト言語「IronPython」の解説書。
Python for 702NK/702NK2プログラミングブック
Nokia製S60端末上でのPythonプログラミングを解説。基本的な使い方や、702NK及び702NKIIに実行環境をインストールする方法、携帯端末上で動作するアプリケーションなどが紹介されている。
XMLに関する書籍。XMLの入門書や技術的な解説書など。
やさしいXML
XML文書の記述方法からXSLによる文書操作、さらにDOMとSAXを使った高度なJavaプログラミングまで、 XMLアプリケーションを構築するための基本技術を、豊富な例題とわかりやすい図解でやさしく解説したXMLの入門書。
入門XML
XMLはWebアプリケーション開発で鍵となる技術であるXMLを、実践例をあげながらXMLおよびXMLが持つ能力をわかりやすく解説。 XMLの基礎を短期間で習得できる。
標準XML完全解説〈上〉
標準XML完全解説〈下〉
XMLとその関連技術を体系的にわかりやすく解説。上巻は、XHTML、名前空間、DTDの作成など。下巻は、XMLテクノロジーの全体構成とその意義、XPath、XSLTの概念や文法などについて。
XMLツールキット
XMLについてその存在意義から丁寧に解説。フリーのツールを活用してXMLの基礎技術を実践する基礎編と、その技術を生かしてホームページのコンテンツをXML化する応用編から成る。
XML Schema
SOAPやWSDLと同じくWebサービスの重要な構成要素の1つであり、XMLの語彙を正確に記述するW3C標準のテクノロジーである「XML Schema」の解説書。豊富な例題を使って、複雑なスキーマ言語を丁寧にわかりやすく解説している。
XMLスキーマ書法
XMLスキーマの書き方を基本から応用まで段階的な具体例で解説。W3C XML Schemaの全仕様をDTD、RELAX NGとの比較を交えて詳述している。
Java&XML 第2版
API、ツールの使い方から、XMLを使って実際のアプリケーションを開発するためのテクニックを豊富な事例をもとに解説。
XMLとJavaによるWebアプリケーション開発
JavaツールであるアプリケーションサーバやEJB、メッセージングなど、WebサービスツールであるSOAP、UDDI、WSDLなども豊富なサンプルプログラムとともに解説。
ASP.NETシステム構築サンプル集―XML処理とカスタマイズのコツ
今すぐASP.NETを始めたい人が「どんな目的のサンプルを作りたい時に」「どのメソッドやプロパティを選択し組み合わせればよいか」を即座に理解できるサンプルを紹介。
XMLデータベースによるWebアプリケーション開発
XMLベースのWebアプリケーションの開発手法を、特にXMLデータの格納・検索の方法に注目しながら解説。 XMLデータベースのアプローチを紹介したうえで、CD-ROMに添付されているXML検索エンジンを使ってオンラインショップを構築する。
実践XMLデータベース構築
XMLデータベースを理解するのに必要な知識をはじめ、構築方法、企業間の取引などプログラムや概念図を用いて解説。
やさしいXML
XML文書の記述方法からXSLによる文書操作、さらにDOMとSAXを使った高度なJavaプログラミングまで、 XMLアプリケーションを構築するための基本技術を、豊富な例題とわかりやすい図解でやさしく解説したXMLの入門書。
入門XML
XMLはWebアプリケーション開発で鍵となる技術であるXMLを、実践例をあげながらXMLおよびXMLが持つ能力をわかりやすく解説。 XMLの基礎を短期間で習得できる。
標準XML完全解説〈上〉
標準XML完全解説〈下〉
XMLとその関連技術を体系的にわかりやすく解説。上巻は、XHTML、名前空間、DTDの作成など。下巻は、XMLテクノロジーの全体構成とその意義、XPath、XSLTの概念や文法などについて。
XMLツールキット
XMLについてその存在意義から丁寧に解説。フリーのツールを活用してXMLの基礎技術を実践する基礎編と、その技術を生かしてホームページのコンテンツをXML化する応用編から成る。
XML Schema
SOAPやWSDLと同じくWebサービスの重要な構成要素の1つであり、XMLの語彙を正確に記述するW3C標準のテクノロジーである「XML Schema」の解説書。豊富な例題を使って、複雑なスキーマ言語を丁寧にわかりやすく解説している。
XMLスキーマ書法
XMLスキーマの書き方を基本から応用まで段階的な具体例で解説。W3C XML Schemaの全仕様をDTD、RELAX NGとの比較を交えて詳述している。
Java&XML 第2版
API、ツールの使い方から、XMLを使って実際のアプリケーションを開発するためのテクニックを豊富な事例をもとに解説。
XMLとJavaによるWebアプリケーション開発
JavaツールであるアプリケーションサーバやEJB、メッセージングなど、WebサービスツールであるSOAP、UDDI、WSDLなども豊富なサンプルプログラムとともに解説。
ASP.NETシステム構築サンプル集―XML処理とカスタマイズのコツ
今すぐASP.NETを始めたい人が「どんな目的のサンプルを作りたい時に」「どのメソッドやプロパティを選択し組み合わせればよいか」を即座に理解できるサンプルを紹介。
XMLデータベースによるWebアプリケーション開発
XMLベースのWebアプリケーションの開発手法を、特にXMLデータの格納・検索の方法に注目しながら解説。 XMLデータベースのアプローチを紹介したうえで、CD-ROMに添付されているXML検索エンジンを使ってオンラインショップを構築する。
実践XMLデータベース構築
XMLデータベースを理解するのに必要な知識をはじめ、構築方法、企業間の取引などプログラムや概念図を用いて解説。
着メロ配信などを行っている東証一部上場企業のドワンゴが、掲示板「2ちゃんねる」の管理人「西村博之」氏と協力して、「2ちゃんねる」での求人広告を開始(3月31日まで)した。募集は通常のバナー掲示などでは...
サン・マイクロシステムズが、オープンソースの3Dデスクトップ環境「Project Looking Glass」のRelease 1.0のLinux、Windows XP、Solaris用のバイナリを公開した。Looking Glassはデスクトップ上のウィンドウを立体的...
当ブログで使用しているブログソフトウェア「59Tracker」の最新版「59Tracker 2.0 alpha2」をリリースしました。更新された内容は主に不具合の修正ですが、一部仕様変更もあります。ただし、プログラム(*.cgi、*.pm...
アフィリエイトプログラムサービス「A8.net(エーハチネット)」を提供しているファンコミュニケーションズが、「A8.net(エーハチネット)」に登録されている広告主の商品データベース(約40社、商品数約50万点 200...
京都地方裁判所が、著作権法違反幇助の罪に問われていたPtoP(ピア・ツー・ピア)型のファイル共有ソフト「Winny(ウィニー)」の開発者である金子勇氏に対し、罰金150万円の有罪判決を言い渡した。「Winny」開発者の...
Binary 2.0 カンファレンス2006 なるものが 2006年12月15日に、Binary 2.0 カンファレンス実行委員会によって開催されるそうです。主催 - Binary 2.0 カンファレンス実行委員会 (協力 Shibuya.pm)日時 - 2006年12月1...
(追記あり)
マイクロソフトの最新OS Windows Vista は最低の品質と自身のブログで発言していた、マイクロソフト日本法人の元会長古川氏がニュースサイト「GIGAZINE」が管理する FAQ - Windows Vista Wiki をマイクロソフトの公式...
アクセスランキング
今日のアクセスランキング TOP 10
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (20 PV)
- StartPage(スタートページ) - 匿名検索エンジン (7 PV)
- FC2まとめ (7 PV)
- 2ちゃんねる(2ch) (5 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (4 PV)
- 水木しげるの人生訓「幸福の七か条」 (3 PV)
- Twitter Lite - 起動時や利用時の読み込み速度が最大30%アップ (3 PV)
- 「RPGツクールMV」製ゲームを簡単にiOS、Androidアプリ化する「Monaca for RPGツクール」 #テクノロジー (3 PV)
- [PR]海外FXのキャッシュバック口座開設なら「TariTali(タリタリ)」経由が断然お得 (3 PV)
- SQLiteのSELECT文で上位 (TOP) n件のデータを取得する (3 PV)
今月のアクセスランキング TOP 10
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (23 PV)
- FC2まとめ (15 PV)
- StartPage(スタートページ) - 匿名検索エンジン (8 PV)
- 将棋ウォーズPCブラウザ版がchrome、Firefox、edgeなどに対応 (8 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (6 PV)
- 掲示板CGI ThreadPlus 1.2 のリリース (5 PV)
- 「Kindle for the Web」 (5 PV)
- 2ちゃんねる(2ch) (5 PV)
- 電通が2ちゃんねるを監視 「電通バズリサーチ(Dentsu Buzz Research)」 (5 PV)
- FC2ブログにコミュニティ機能 (4 PV)
アクセス統計
ディレクトリ
関連サイト
