[4]の検索結果
バグのないソフトウェアはない、というくらいソフトウェアにはバグがつきものですが、ソフトウェアの開発プロジェクトには期間や予算に上限があるため、バグの修正に手間取ると十分なテストを実施することができず、品質が低い状態でリリースされてしまうことになります。テストを円滑に進めソフトウェアの品質の高めていくためには、バグを迅速かつ正確にバグを修正していく必要があります。
しかし、オブジェクト指向プログラミング(OOP)やデザインパターンなどプログラムの作り方についての解説書や記事はたくさんあるにも関わらず、「バグは本来あってはいけないもの、あるはずが無いもの」という意識があるためか、デバッグに関して語られている情報源はあまり多くありません。そのため、デバッグのテクニックについてはせいぜい「開発現
場の先輩に教えてもらう」というのが実情です。
知識を共有するために、私がこれまでのソフトウェア開発の経験から得た、デバッグを効率的に行なうための心得をいくつか挙げてみたいと思います。
1. バグの原因は自分が作っているプログラムにある可能性が最も高い
ソフトウェアを構成する要素として、OS、開発ツールに付属するライブラリ、市販ライブラリ、プロジェクト内で作成されたライブラリなどがありますが、バグの原因は自分が作っているプログラムである可能性が最も高いと考えたほうがすばやくバグを見つけられます。なぜなら、今まさに開発が行なわれているプログラムこそが最もテストされていないプログラムだからです。問題の原因をマイクロソフトのせいにする前に自分のプログラムを調べましょう。
2. テストの実施を妨げているバグを優先する
当然のことですが、テストができなければバグを見つけることができません。効率的にバグが発見できるように、めったに行なわれない操作によって発生するバグよりも、必ず行なわれる操作で発生するバグを優先的に修正していく必要があります。
3. 問題を確実に再現できるようする
問題が発生する条件(操作手順、データなど)を必ず特定しなければなりません。これができないと動作確認は不可能ですので、修正したつもりが実は直ってなかったという事態にもなりかねません。この作業自体はソースコードがなくても可能なので、テスト担当者の協力を得られるのであれば、情報を交換しながらテスト担当者と開発担当者が並行して調査を進めるのが良いでしょう。
4. 一度でも問題が発生した場合はバグがある可能が高いので必ず調査する
一度でも問題が発生した場合は、単にバグが発現する条件がわかっていないだけで、必ずどこかにバグがあります。開発作業中はいろいろプレッシャーがあるので難しい面もありますが、見つけた時点で調査しておいた方がいろんな面で良いでしょう。
5. ソースコードを見ただけで正しい処理が行なわれていると判断しない
プログラムはプログラマが思っている通りに動くのではなくコンパイラが解釈した通りに動くものです。コンパイラについての知識が豊富なプログラマが犯しがち問題ですが、プログラマがコンパイラの仕様について誤解しているために生じるバグもよくあります。プログラマ自身は正しいと思っているためソースコードを見ただけではバグを発見することが困難ですがが、このようなバグは実際にプログラムを動かしてみることで簡単に原因を発見することがきます。
6. 想定外の操作や想定外のデータが使用されていないかチェックする
プログラムはプログラマが想定していなかった操作が行なわれたり、想定外のデータが入力されたりした場合は正しく動作しないことが多いものです。問題を発生させる操作やデータがプログラムで想定されているかチェックしてみましょう。
7. バグの原因となっているソースコードは必ず特定する
関係の無いところを直しても問題の現象が発生しなくなる場合もありますが、それでバグが無くなったわけではありません。そのような場合は、また別のところで別のかたちで問題が発生することになりかねません。バグは必ずソースコードレベルで原因を特定し確実に修正すべきです。
8. できるだけ他の処理に影響を与えないようにソースコードを修正する
他の処理に影響を与えるような修正を行なった場合、これまで問題なく動いていた部分に新たなバグを埋め込んでしまう可能性が高いものです。別の問題を引き起こさないように、影響範囲に注意してソースコードを修正します。しかし、単なるコーディング上の間違いであればプログラムの修正は比較的簡単で他の処理に影響を与えることは少ないのすが、設計に問題がある場合は他の部分の影響を与えないようにバグ修正を行なうのが難しい場合があります。そのような場合は、本質的な問題の解決にはならないとしても、影響範囲を限定するために暫定的な対処を行なった方が良いでしょう。
9. ソースコードを修正した場合は必ずテストする
たとえ簡単な修正であっても間違った修正を行なう可能性は常にあります。また、修正が思わぬところに影響を与えることもあります。当たり前ですが、ソースコードを修正した場合は必ずテストを行ないましょう。テスト作業を手を抜くよりも、テストを行なった方がトータル見れば開発者自身にとっても負担が少ないはずです。
しかし、オブジェクト指向プログラミング(OOP)やデザインパターンなどプログラムの作り方についての解説書や記事はたくさんあるにも関わらず、「バグは本来あってはいけないもの、あるはずが無いもの」という意識があるためか、デバッグに関して語られている情報源はあまり多くありません。そのため、デバッグのテクニックについてはせいぜい「開発現
場の先輩に教えてもらう」というのが実情です。
知識を共有するために、私がこれまでのソフトウェア開発の経験から得た、デバッグを効率的に行なうための心得をいくつか挙げてみたいと思います。
1. バグの原因は自分が作っているプログラムにある可能性が最も高い
ソフトウェアを構成する要素として、OS、開発ツールに付属するライブラリ、市販ライブラリ、プロジェクト内で作成されたライブラリなどがありますが、バグの原因は自分が作っているプログラムである可能性が最も高いと考えたほうがすばやくバグを見つけられます。なぜなら、今まさに開発が行なわれているプログラムこそが最もテストされていないプログラムだからです。問題の原因をマイクロソフトのせいにする前に自分のプログラムを調べましょう。
2. テストの実施を妨げているバグを優先する
当然のことですが、テストができなければバグを見つけることができません。効率的にバグが発見できるように、めったに行なわれない操作によって発生するバグよりも、必ず行なわれる操作で発生するバグを優先的に修正していく必要があります。
3. 問題を確実に再現できるようする
問題が発生する条件(操作手順、データなど)を必ず特定しなければなりません。これができないと動作確認は不可能ですので、修正したつもりが実は直ってなかったという事態にもなりかねません。この作業自体はソースコードがなくても可能なので、テスト担当者の協力を得られるのであれば、情報を交換しながらテスト担当者と開発担当者が並行して調査を進めるのが良いでしょう。
4. 一度でも問題が発生した場合はバグがある可能が高いので必ず調査する
一度でも問題が発生した場合は、単にバグが発現する条件がわかっていないだけで、必ずどこかにバグがあります。開発作業中はいろいろプレッシャーがあるので難しい面もありますが、見つけた時点で調査しておいた方がいろんな面で良いでしょう。
5. ソースコードを見ただけで正しい処理が行なわれていると判断しない
プログラムはプログラマが思っている通りに動くのではなくコンパイラが解釈した通りに動くものです。コンパイラについての知識が豊富なプログラマが犯しがち問題ですが、プログラマがコンパイラの仕様について誤解しているために生じるバグもよくあります。プログラマ自身は正しいと思っているためソースコードを見ただけではバグを発見することが困難ですがが、このようなバグは実際にプログラムを動かしてみることで簡単に原因を発見することがきます。
6. 想定外の操作や想定外のデータが使用されていないかチェックする
プログラムはプログラマが想定していなかった操作が行なわれたり、想定外のデータが入力されたりした場合は正しく動作しないことが多いものです。問題を発生させる操作やデータがプログラムで想定されているかチェックしてみましょう。
7. バグの原因となっているソースコードは必ず特定する
関係の無いところを直しても問題の現象が発生しなくなる場合もありますが、それでバグが無くなったわけではありません。そのような場合は、また別のところで別のかたちで問題が発生することになりかねません。バグは必ずソースコードレベルで原因を特定し確実に修正すべきです。
8. できるだけ他の処理に影響を与えないようにソースコードを修正する
他の処理に影響を与えるような修正を行なった場合、これまで問題なく動いていた部分に新たなバグを埋め込んでしまう可能性が高いものです。別の問題を引き起こさないように、影響範囲に注意してソースコードを修正します。しかし、単なるコーディング上の間違いであればプログラムの修正は比較的簡単で他の処理に影響を与えることは少ないのすが、設計に問題がある場合は他の部分の影響を与えないようにバグ修正を行なうのが難しい場合があります。そのような場合は、本質的な問題の解決にはならないとしても、影響範囲を限定するために暫定的な対処を行なった方が良いでしょう。
9. ソースコードを修正した場合は必ずテストする
たとえ簡単な修正であっても間違った修正を行なう可能性は常にあります。また、修正が思わぬところに影響を与えることもあります。当たり前ですが、ソースコードを修正した場合は必ずテストを行ないましょう。テスト作業を手を抜くよりも、テストを行なった方がトータル見れば開発者自身にとっても負担が少ないはずです。
かなり話題になっている記事ですが、内容的には、「そういう風に考えていた時期が私にもありました」という感じです。
Geekなぺーじ : 勝者と敗者の違い
現実にこの教訓の通りに行動するのはかなりの実力と勇気が必要でしょう。学生や社会人になったばかりの人にはまず無理でしょうから、あまりおすすめできません。
失敗の責任が自分にあるのであれば間違っていたというのもいいのですが、現実には他人の失敗まで押し付けられる可能性があるので、むやみに自分が間違っていたというのは得策ではありません。
勝ちまくっているのであれば余裕をぶっこいて「運が良かった」というのもいいのですが、たまにしか勝てないというのが現実なので、できるだけ自分の成果をアピールした方が賢明です。でなければ誰も評価してくれません。
過労死には気をつけて。生き残った人こそが真の勝者です。
問題の本質を指摘すると誰かが怒り出すので、やむをえず場当たり的な対応をしなければならない場合はどうすれば良いのでしょうか。
過ちを犯して償いをしたら敗者に転落してしまうのではないでしょうか。
結果として勝ったのであればそのプロセスが正当化されるというやつですね。戦うべきところと妥協すべきところが行動を起こす前からわかるのであれば苦労は無いのですが、歴史を振り返ればそうではないことがわかるはず。
敗者を見下す勝者が多いのはどう説明したら良いのでしょう。
自分より勝るものから学ぶのは、自分より勝るものを打ち負かすためではないのでしょうか。表面的には敬意を払っているようでも本心では敵意をもっているように思えます。
実際に誇りをもてないような程度の扱いしか受けていないのなら「雇われているだけです」というのは当然のことでしょう。
何かを変えたら必ず状況が良くなるとは限らないのですから、いままでうまくいってた方法を変えるのであれば理由くらい聞くでしょ。
なにはともあれ、人生の勝ち負けについての話が人の関心を引ける話題であるのは間違いなさそうです。
それにつけてもYahooの威力よ
読者の関心が引ける話題だからこそYahoo!ニュースでも取り上げられたのでしょう。
Geekなぺーじ : 勝者と敗者の違い
現実にこの教訓の通りに行動するのはかなりの実力と勇気が必要でしょう。学生や社会人になったばかりの人にはまず無理でしょうから、あまりおすすめできません。
1.勝者は間違ったときには「私が間違っていた」と言う。
敗者は「私のせいではない」と言う。
失敗の責任が自分にあるのであれば間違っていたというのもいいのですが、現実には他人の失敗まで押し付けられる可能性があるので、むやみに自分が間違っていたというのは得策ではありません。
2.勝者は勝因は「運が良かった」と言う。例え運ではなかったとしても。
敗者は敗因を「運が悪かった」と言う。でも、運が原因ではない。
勝ちまくっているのであれば余裕をぶっこいて「運が良かった」というのもいいのですが、たまにしか勝てないというのが現実なので、できるだけ自分の成果をアピールした方が賢明です。でなければ誰も評価してくれません。
3.勝者は敗者よりも勤勉に働く。しかも時間は敗者より多い。
敗者はいつでも忙しい。文句を言うのに忙しい。
過労死には気をつけて。生き残った人こそが真の勝者です。
4.勝者は問題を真っ直ぐ通り抜ける。
敗者は問題の周りをグルグル回る。
問題の本質を指摘すると誰かが怒り出すので、やむをえず場当たり的な対応をしなければならない場合はどうすれば良いのでしょうか。
5.勝者は償いによって謝意を示す。
敗者は謝罪をするが同じ間違いを繰り返す。
過ちを犯して償いをしたら敗者に転落してしまうのではないでしょうか。
6.勝者は戦うべきところと妥協すべきところを心得ている。
敗者は妥協すべきでないところで妥協し、戦う価値がない所で戦う。
結果として勝ったのであればそのプロセスが正当化されるというやつですね。戦うべきところと妥協すべきところが行動を起こす前からわかるのであれば苦労は無いのですが、歴史を振り返ればそうではないことがわかるはず。
7.勝者は「自分はまだまだです」と言う。
敗者は自分より劣るものを見下す。
敗者を見下す勝者が多いのはどう説明したら良いのでしょう。
8.勝者は自分より勝るものに敬意を払い学び取ろうとする。
敗者は自分より勝るものを不快に思い、アラ捜しをする。
自分より勝るものから学ぶのは、自分より勝るものを打ち負かすためではないのでしょうか。表面的には敬意を払っているようでも本心では敵意をもっているように思えます。
9.勝者は職務に誇りを持っている。
敗者は「雇われているだけです」と言う。
実際に誇りをもてないような程度の扱いしか受けていないのなら「雇われているだけです」というのは当然のことでしょう。
10.勝者は「もっと良い方法があるはずだ」と言う。
敗者は「何故変える必要があるんだ?今までうまくいっていたじゃないか」と言う。
何かを変えたら必ず状況が良くなるとは限らないのですから、いままでうまくいってた方法を変えるのであれば理由くらい聞くでしょ。
なにはともあれ、人生の勝ち負けについての話が人の関心を引ける話題であるのは間違いなさそうです。
それにつけてもYahooの威力よ
読者の関心が引ける話題だからこそYahoo!ニュースでも取り上げられたのでしょう。
Movable Type(ムーバブルタイプ)のオープンソース版(GPL)が今年(2007年)第三4半期にリリースされる予定になっているようです。
Movable Type 4 の開発と、ベータテスト、オープンソースについて
Movable Type(ムーバブルタイプ)のソース自体は国際化対応になっているそうなので、オープンソース版でも日本語が使えそうです。
有料ライセンスの「Movable Type 4」は企業向けの機能を強化する方向に進んでいるようなので、個人が使うブログツールとしては不要な機能が多すぎて使いにくいのではないかと思っていましたが、機能を基本的なものに絞ったオープンソース版がリリースされるのであれば、個人ユーザーにとってかなり期待できそうです。
movabletype.org: Welcome to MTOS: the Movable Type Open Source Project
Movable Type 4 の開発と、ベータテスト、オープンソースについて
Movable Type(ムーバブルタイプ)のソース自体は国際化対応になっているそうなので、オープンソース版でも日本語が使えそうです。
有料ライセンスの「Movable Type 4」は企業向けの機能を強化する方向に進んでいるようなので、個人が使うブログツールとしては不要な機能が多すぎて使いにくいのではないかと思っていましたが、機能を基本的なものに絞ったオープンソース版がリリースされるのであれば、個人ユーザーにとってかなり期待できそうです。
movabletype.org: Welcome to MTOS: the Movable Type Open Source Project
ブログ等に貼り付けるためのアマゾンの商品リンクを、Amazon ECS のRESTリクエストを利用して、画像付きで生成するフォームを作成しました。商品のASINとアソシエイトIDを入力して作成ボタンをクリックすると画像付き...
(追記あり)
FeedBurnerに登録する際に見つかったRSSフィード(RSS2.xml)の不具合の修正とHTMLタグへの対応を行ないました。RSS2.xmlはRSSリーダーで参照する際にそれなりに見やすくなったと思います。新規にRSSフィードの購読を...
2007年6月5日、シックス・アパートがブログソフトウェア「Movable Type(ムーバブルタイプ)4 日本語版」を2007年7月18日から出荷すると発表、同時に公開ベータテストを開始した。「Movable Type 4 日本語版」は、シ...
レンタルサーバーの中には無料で利用できるものもありますが、広告が表示されたり、すぐに利用できなかったり、CGIが利用できなかったりとなかなか思いどおりにはなりません。その点、有料の格安レンタルサーバーなら...
「Movable Type(ムーバブルタイプ)」は、シックス・アパート社が開発・販売しているサーバーインストール型の高機能ブログソフトウェアで、基本的な仕組みとしては、記事のデータを MySQL、PostgreSQL、SQLite等のデ...
コンピュータのアーキテクチャや仕組みに関する書籍。コンピュータはなぜ動くのか?知っておきたいハードウエア&ソフトウエアの基礎知識?「アルゴリズム」「オブジェクト指向」「データベース」「ネットワーク」「セ...
もちろん、今現在アルファブロガーと呼ばれている方々が、誰かに取込まれていると言うつもりはないですが、ブログネットワークとアルファブロガー(FIFTH EDITION)ブログネットワークの拡大と共に、これらを誰かが...
(追記あり)
アクセスランキング
今日のアクセスランキング TOP 10
- オープンソースの掲示板ソフト (15 PV)
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (11 PV)
- FC2まとめ (5 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (4 PV)
- サウジ総領事館の記者殺害疑惑、トルコ警察が「殺害された証拠」を発見 (3 PV)
- SQLiteのSELECT文で上位 (TOP) n件のデータを取得する (3 PV)
- Visual Basic (2 PV)
- アリアナ・グランデのコンサートで爆弾テロ事件、ワールドツアーは中止に (2 PV)
- 手帳に入れて使うインターネット閲覧端末「WILLCOM NS(WS026T)」 (2 PV)
- 「mylo(マイロ)」、日本でも発売 (2 PV)
今月のアクセスランキング TOP 10
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (42 PV)
- FC2まとめ (21 PV)
- オープンソースの掲示板ソフト (16 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (15 PV)
- StartPage(スタートページ) - 匿名検索エンジン (8 PV)
- 将棋ウォーズPCブラウザ版がchrome、Firefox、edgeなどに対応 (8 PV)
- [FX]裁量ポジションを簡単に管理できるMT4向け無料の裁量補助EA「PositionKeeper」 (7 PV)
- SQLiteのSELECT文で上位 (TOP) n件のデータを取得する (7 PV)
- 裁量トレードを半自動化する無料のMT5向け裁量トレード支援ツール(裁量補助EA)「PositionKeeper MT5」 #FX (5 PV)
- 安全性重視の完全無料ナンピンマーチンEA「Million Dollar(ミリオンダラー)」 #FX #ゴールド #ビットコイン (5 PV)
アクセス統計
ディレクトリ
関連サイト
