[8]の検索結果
バグのないソフトウェアはない、というくらいソフトウェアにはバグがつきものですが、ソフトウェアの開発プロジェクトには期間や予算に上限があるため、バグの修正に手間取ると十分なテストを実施することができず、品質が低い状態でリリースされてしまうことになります。テストを円滑に進めソフトウェアの品質の高めていくためには、バグを迅速かつ正確にバグを修正していく必要があります。
しかし、オブジェクト指向プログラミング(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!ニュースでも取り上げられたのでしょう。
日米欧の金融当局が協調して大規模な資金供給を行なったにも関わらず、日本ではあまり大きなニュースにはなっていませんが、世界同時株安が発生しているようです。
米国のサブプライムローンに関連して、米投資銀行大手ゴールドマン・サックス傘下のヘッジファンドが多額の損失出したり、仏BNPパリバ銀行傘下のファンドが営業停止に追い込まれるなどかなりやばそうです。
サブプライムローン問題とは
サブプライムローンは、一般の「プライムローン」より金利が高めに設定された、信用力の低い個人や低所得者向けに融資する住宅ローンで、証券化され投信などの金融商品に広く組み込まれているが、米国で不動産ブームが発生していた2005年頃に組まれたローンの返済額が急増する2008年にかけて、延滞率が上昇し焦げ付き問題が本格化するとみられている。
欧米、連日の資金供給 世界同時株安収まらず
サブプライム問題の本質
グローバルな取り付け騒ぎ
このサブプライムローン問題の影響で既に円高になっているため、外貨で資産運用している資産家の方々は損失の発生は避けられないようです。なぜか、円高は外貨投資の格好のチャンスといっている金融の専門家もいますが・・・、
[ゴーログ] 日銀の利上げはない:キャリートレードは死んだ?
ドルバブルで将来ドルが暴落するのが確実なので、ドル建てのファンドを組んで日本人の投資家から資金を調達(円高になった場合の差損は日本人の投資家がかぶる)し、円建てで日本の株式などの資産に投資する(円高差益はファンドが受け取る、もちろんドル建てでは高利回りになる)ことで、ファンドが大儲けできる格好のチャンスですというのならまだ理解できるのですが、日本人の個人投資家がこれから外貨投資というのでは大損確実なのではないでしょうか。既に逃げ遅れたとか言ってる人もいるわけですし。
逃げ遅れた件
米国のサブプライムローンに関連して、米投資銀行大手ゴールドマン・サックス傘下のヘッジファンドが多額の損失出したり、仏BNPパリバ銀行傘下のファンドが営業停止に追い込まれるなどかなりやばそうです。
サブプライムローン問題とは
サブプライムローンは、一般の「プライムローン」より金利が高めに設定された、信用力の低い個人や低所得者向けに融資する住宅ローンで、証券化され投信などの金融商品に広く組み込まれているが、米国で不動産ブームが発生していた2005年頃に組まれたローンの返済額が急増する2008年にかけて、延滞率が上昇し焦げ付き問題が本格化するとみられている。
欧米、連日の資金供給 世界同時株安収まらず
サブプライム問題の本質
グローバルな取り付け騒ぎ
このサブプライムローン問題の影響で既に円高になっているため、外貨で資産運用している資産家の方々は損失の発生は避けられないようです。なぜか、円高は外貨投資の格好のチャンスといっている金融の専門家もいますが・・・、
[ゴーログ] 日銀の利上げはない:キャリートレードは死んだ?
ドルバブルで将来ドルが暴落するのが確実なので、ドル建てのファンドを組んで日本人の投資家から資金を調達(円高になった場合の差損は日本人の投資家がかぶる)し、円建てで日本の株式などの資産に投資する(円高差益はファンドが受け取る、もちろんドル建てでは高利回りになる)ことで、ファンドが大儲けできる格好のチャンスですというのならまだ理解できるのですが、日本人の個人投資家がこれから外貨投資というのでは大損確実なのではないでしょうか。既に逃げ遅れたとか言ってる人もいるわけですし。
逃げ遅れた件
(追記あり)
ブログ等に貼り付けるためのアマゾンの商品リンクを、Amazon ECS のRESTリクエストを利用して、画像付きで生成するフォームを作成しました。商品のASINとアソシエイトIDを入力して作成ボタンをクリックすると画像付き...
(追記あり)
ボディラインがくっきりと浮かび上がったセクシーなスーツに身を包んだ「草薙素子少佐」のフィギュア。攻殻機動隊S.A.C. Solid State Society 草薙 素子 (1/8スケールPVC塗装済み完成品) amazon.co.jp 限定グッドスマ...
私は見逃してしまったのですが、2007年5月8日(火)に放送された、NHKのクローズアップ現代という番組でアルファブロガーが取り上げられたようです。日本のアルファブロガーの一人とされるジャーナリストの佐々木俊尚...
(追記あり)
電通の「鬼十則」と呼ばれる社訓のパロディ版ですが、非常に現実感があります。仕事は自ら創るな。みんなでつぶされる。仕事は先手先手と働きかけていくな。疲れるだけだ。大きな仕事と取り組むな。大きな仕事は己に...
(追記あり)
副島隆彦氏が率いる物書き集団「副島国家戦略研究所」が、属国日本のウソ・欺瞞・虚妄を暴きあげる。1.安倍晋三の奇怪な変節と「ザ・カルト・オブ・ヤスクニ」2.大衆世論を操縦せよ!3.日本銀行はロスチャイルドがつ...
(追記あり)
「Japan Linux Conference」は、オープンソース・ソフトウェアや自由(フリー/リブレ)ソフトウェアに関するさまざまな話題を、広く発表者を募って討議する、日本Linux協会主催のカンファレンスで、ソースコード・レベ...
宇多田ヒカルのシングル「Flavor Of Life -Ballad Version-」のフルPV映像がブログパーツとして公開されている。視聴できるのは、3月8日までの期間限定。「Flavor Of Life -Ballad Version-」は、TBS系列の人気ドラマ...
アクセスランキング
今日のアクセスランキング TOP 10
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (40 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (6 PV)
- MT4向け無料ヘッジ(両建て)ツール(EA)「STOPPER FREE」 #自動売買 #FX (3 PV)
- 裁量トレードを半自動化する無料のMT5向け裁量トレード支援ツール(裁量補助EA)「PositionKeeper MT5」 #FX (3 PV)
- 安全性重視の完全無料ナンピンマーチンEA「Million Dollar(ミリオンダラー)」 #FX #ゴールド #ビットコイン (3 PV)
- 自作のMT4向け無料EA(口座縛り無し、ブローカー縛り無し、使用期限無し)とゴゴジャン出品中の有料EAの一覧 #MT4 (2 PV)
- ハイレバギャンブルトレードで爆益か爆損か? MT4向けの無料EA「10bagger(テンバガー)」 (2 PV)
- 2chまとめサイト - 痛いニュース(ノ∀`) (2 PV)
- [FX]高値更新・安値更新でエントリー、MT4向け無料スキャルピングEA「1Scalper」#システムトレード (2 PV)
- [C言語]UTF-8でエンコードされた文字列の文字数を取得するコード (2 PV)
今月のアクセスランキング TOP 10
- 2NN 2ちゃんねるニュース速報+ナビ (3324 PV)
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (706 PV)
- 安全性重視の完全無料ナンピンマーチンEA「Million Dollar(ミリオンダラー)」 #FX #ゴールド #ビットコイン (124 PV)
- 自作のMT4向け無料EA(口座縛り無し、ブローカー縛り無し、使用期限無し)とゴゴジャン出品中の有料EAの一覧 #MT4 (108 PV)
- SQLiteのSELECT文で上位 (TOP) n件のデータを取得する (91 PV)
- 無料のMT4向けナンピンマーチン爆益(爆損)EA「Jipangu(ジパング)」 (79 PV)
- Million Dollar Ver 1.09向けの収益性を重視したゴールド(Gold、XAUUSD)ロングセットファイル (73 PV)
- 仲値トレードが簡単にできる無料EA「NAKANE3 Ver 2.04」 #MT4 (66 PV)
- [FX]裁量ポジションを簡単に管理できるMT4向け無料の裁量補助EA「PositionKeeper」 (56 PV)
- 裁量トレードを半自動化する無料のMT5向け裁量トレード支援ツール(裁量補助EA)「PositionKeeper MT5」 #FX (54 PV)
アクセス統計
ディレクトリ
関連サイト