(57)【要約】【課題】デバイス側の負担とソフトウェア開発者側の負担を同時に軽減し、かつデバッグ情報が偏りなく一様に取得できるようなデバッグ情報収集方法を提供すること。【解決手段】ソフトウェア配布装置１０２において、バイナリ解析部１２２はソフトウェアにプローブを挿入可能な挿入位置の全体集合を求める。バイナリ変更部１２５は、ソフトウェアに挿入するプローブの挿入位置の母集団と、デバイス１０４ごとに挿入するプローブの挿入数を決定し、母集団から上記挿入数だけプローブの挿入位置を選択してソフトウェアに挿入する。その際、プローブ情報１２３、実行装置情報１２４、デバッグ情報１３２を参照する。ソフトウェア配布部１２９はプローブの挿入されたソフトウェアをデバイス１０４に配布する。【選択図】図１
2008140162.tif 000002
【特許請求の範囲】
【請求項１】
デバッグ情報を収集するためにソフトウェアにプローブを挿入して複数のデバイスに配布し、該デバイスにおいて該ソフトウェアを実行することにより得られるデバッグ情報を収集するデバッグ情報収集方法において、
上記ソフトウェアにプローブを挿入可能な挿入位置の全体集合を求め、
該全体集合から部分集合を取り出して上記ソフトウェアに挿入するプローブの挿入位置の母集団を決定し、
上記デバイスごとに挿入するプローブの挿入数を決定し、
上記母集団から上記挿入数だけプローブの挿入位置を選択して上記ソフトウェアに挿入し、
プローブの挿入されたソフトウェアを上記デバイスに配布することを特徴とするデバッグ情報収集方法。
【請求項２】
請求項１に記載のデバッグ情報収集方法であって、
前記デバイスに挿入するプローブの挿入数は、該デバイスの記憶容量またはＣＰＵ性能に基づき、デバイスごとに挿入数を決定し、
前記母集団から上記挿入数だけプローブの挿入位置を乱数を用いて選択して前記ソフトウェアに挿入することを特徴とするデバッグ情報収集方法。
【請求項３】
請求項１に記載のデバッグ情報収集方法であって、
前記プローブの挿入位置の母集団は、過去に配布したソフトウェアに挿入したプローブの挿入回数を参照し、該挿入回数の少ない挿入位置の部分集合から決定することを特徴とするデバッグ情報収集方法。
【請求項４】
請求項１に記載のデバッグ情報収集方法であって、
前記プローブの挿入位置の母集団は、過去に配布したソフトウェアに挿入したプローブから収集したデバッグ情報を参照し、該デバッグ情報から各プローブの実行回数を求め、該実行回数の少ないプローブ挿入位置の部分集合から決定することを特徴とするデバッグ情報収集方法。
【請求項５】
請求項４に記載のデバッグ情報収集方法であって、
前記プローブの挿入位置の母集団は、前記デバッグ情報から各プローブの実行回数を求め、その中で障害発生時に実行された実行回数の少ないプローブ挿入位置の部分集合から決定することを特徴とするデバッグ情報収集方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はソフトウェアの品質向上のため、特にネットワークに接続された多くのデバイスに対して配布され、実行されるソフトウェアのデバッグ情報収集方法に関する。
【背景技術】
【０００２】
情報家電、携帯電話など、いわゆる組込み機器と呼ばれる情報処理機器において、ソフトウェア規模が増大している。ネットワーク対応のための機能追加、ユーザ要求の増大等により、ソフトウェアを用いて短期間で多くの新機能を実現することが求められているためである。このようなソフトウェア規模の増大に伴い、ソフトウェアの品質確保が要請されている。しかしながら、品質確保に当てる時間の確保が難しく、製品を出荷後にソフトウェア更新するなどの対応もとられている。
【０００３】
ソフトウェアの品質を確保する手法として、ソフトウェアに実行経過を調べるためのプローブを挿入し、デバッグ情報を収集する手法がある。例えば、ソフトウェアの実行部分と非実行部分を調査するカバレッジ、開発者が指定する条件文の真偽値を調査するアサーションなどの手法である。しかし、計算機資源に乏しい組込み機器では、必要とする記憶領域の増加や性能オーバーヘッドの要求を受け入れられず、多数のプローブを挿入することができない。
【０００４】
この問題に対し、特許文献１では、プローブを挿入する範囲を人間が指定し、指定された範囲に自動的にプローブを挿入する手法を明らかにしている。この手法では、挿入するプローブを一部に限定することでメモリ領域と実行時間の問題を回避する。同時に収集される情報も限定されるが、プローブ挿入範囲の変更とデバッグ情報収集を繰り返すことで、必要な量のデバッグ情報を収集することができる。
【０００５】
また、非特許文献１では、プローブを用いて取得したデバッグ情報を、ネットワークを介して収集する手法を明らかにしている。この方法は特許文献１の方法とは異なり、挿入するプローブを限定せず、全てのプローブをソフトウェアに挿入する。その代わり、ソフトウェア実行時に乱数を用いて情報を収集するプローブを一部に限定することで、収集する情報量を減らし、同時に情報収集による実行時間の増加を回避している。合わせて収集した情報を統計的に解析することで、障害の原因（バグの箇所）を推定する手法を明らかにしている。
【０００６】
【特許文献１】特開平６−１６１８２５号公報
【非特許文献１】Ｂｅｎ  Ｌｉｂｌｉｔ，Ａｌｅｘ  Ａｉｋｅｎ，Ａｌｉｃｅ  Ｘ．Ｚｈｅｎｇ  ａｎｄ  Ｍｉｃｈａｅｌ  Ｉ．Ｊｏｒｄａｎ．  Ｂｕｇ  Ｉｓｏｌａｔｉｏｎ  ｖｉａ  Ｒｅｍｏｔｅ  Ｐｒｏｇｒａｍ  Ｓａｍｐｌｉｎｇ．  ＰＬＤＩ’０３，Ｊｕｎｅ  ９−１１，２００３
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献１ではプローブの挿入範囲が限定されており、メモリ資源および実行時間のオーバーヘッドは限定されており、開発者がプローブの挿入範囲を指定するため、多様なデバイスの特性やテスト条件に応じたきめ細かい情報収集が可能である。しかし、多数のデバイスから繰り返し情報を収集するには大きな手間がかかるという課題がある。
【０００８】
また、非特許文献１では乱数を用いて情報を取得するプローブを限定しているため、実行時間のオーバーヘッドは限定されており、開発者がプローブを指定する手間も不要となる。しかし、全てのプローブを予めプログラムに挿入しているため、メモリ資源に与えるオーバーヘッドが大きいという課題がある。
【０００９】
すなわち、これらの文献の技術では、多数かつ多様なデバイスからデバッグ情報を収集する際のメモリ資源およびプローブ実行時間の削減と、開発者による情報収集の手間の削減が両立されていない、という課題がある。また、仮に上記両文献の技術を組み合わせたとしても、プローブから収集するデバッグ情報に偏りが発生することは避けられず、よって迅速で効率的なソフトウェア開発の妨げになるという課題が残る。
【００１０】
本発明の目的は、デバイス側の負担と開発者側の負担を同時に軽減し、かつデバッグ情報が偏りなく一様に取得できるようなデバッグ情報収集方法を提供することである。
【課題を解決するための手段】
【００１１】
本発明は、デバッグ情報を収集するためにソフトウェアにプローブを挿入して複数のデバイスに配布し、デバイスにおいてソフトウェアを実行することにより得られるデバッグ情報を収集するデバッグ情報収集方法において、ソフトウェアにプローブを挿入可能な挿入位置の全体集合を求め、全体集合から部分集合を取り出してソフトウェアに挿入するプローブの挿入位置の母集団を決定し、デバイスごとに挿入するプローブの挿入数を決定し、母集団から上記挿入数だけプローブの挿入位置を選択してソフトウェアに挿入し、プローブの挿入されたソフトウェアをデバイスに配布する。
【００１２】
前記デバイスに挿入するプローブの挿入数は、デバイスの記憶容量またはＣＰＵ性能に基づき、デバイスごとに挿入数を決定し、前記母集団から上記挿入数だけプローブの挿入位置を乱数を用いて選択してソフトウェアに挿入する。
【００１３】
前記プローブの挿入位置の母集団は、過去に配布したソフトウェアに挿入したプローブの挿入回数を参照し、挿入回数の少ない挿入位置の部分集合から決定する。
【００１４】
前記プローブの挿入位置の母集団は、過去に配布したソフトウェアに挿入したプローブから収集したデバッグ情報を参照し、デバッグ情報から各プローブの実行回数を求め、実行回数の少ないプローブ挿入位置の部分集合から決定する。
【００１５】
前記プローブの挿入位置の母集団は、前記デバッグ情報から各プローブの実行回数を求め、その中で障害発生時に実行された実行回数の少ないプローブ挿入位置の部分集合から決定する。
【発明の効果】
【００１６】
本発明によれば、デバイス側の負担とソフトウェア開発者側の負担を軽減し、配布したソフトウェアの障害原因解析の迅速化を図ることができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施形態を、図面を用いて説明する。
図１は、本発明に係るソフトウェア配布システムの全体構成を示す図である。本システムは、ソフトウェア開発装置１０１、ソフトウェア配布装置１０２、デバッグ情報収集装置１０３、および複数の実行装置（デバイス）１０４、１０５、１０６などから構成される。まず、各装置の関連について説明する。
【００１８】
ソフトウェア開発者は、ソフトウェア開発装置１０１を用いてソフトウェアを開発し、実行可能なバイナリを作成する。製作されたバイナリは、イントラネットなどを介してソフトウェア配布装置１０２に送付される。ソフトウェア配布装置１０２はバイナリに対してプローブを挿入した後、インターネットなどを経由し、そのバイナリを実行装置１０４、１０５、１０６などに配布する。各実行装置は配布されたバイナリを実行し、実行装置の所有者などにサービスを提供する。同時にプローブによって得られるデバッグ情報を収集し、これをデバッグ情報収集装置１０３に送付する。デバッグ情報収集装置１０３は、各実行装置から送付されてくるデバッグ情報を蓄積し、統計的な解析などにより障害原因を推定するための情報を生成する。この情報はソフトウェア開発装置１０１などを通じ、ソフトウェア開発者に提供される。次に各装置の内部構成について説明する。
【００１９】
ソフトウェア開発装置１０１は、ソースコード１１１、バイナリ１１２などのデータを保持し、ソースコード編集処理部１１３、コンパイル処理部１１４などの機能を持つ。ソースコード編集処理部１１３は、ソフトウェア開発者によるソースコード１１１の作成作業を支援する。コンパイル処理部１１４は、ソースコード１１１をバイナリ１１２に変換する。バイナリ１１２は、開発者の判断に応じてソフトウェア配布装置１０２に送付される。
【００２０】
ソフトウェア配布装置１０２は、ソフトウェア開発装置１０１より送付されたバイナリ１１２をバイナリ１２１として保持する。バイナリ解析部１２２はバイナリ１２１を解析し、プローブを挿入可能な箇所を抽出する。抽出されたプローブ挿入箇所は、プローブ情報１２３に保持される。また、ソフトウェア配布対象となる実行装置（デバイス）のリストを、実行装置情報１２４に保持する。バイナリ変更部１２５はバイナリ１２１にプローブを挿入するが、その際、実行装置情報１２４、プローブ情報１２３、デバッグ情報１３２などを参照してプローブの数と挿入位置を決める。バイナリ変更部１２５は、挿入プローブ選択部１２６や、プローブ挿入部１２７などの機能モジュールから構成される。挿入が完了したバイナリは、プローブ挿入済バイナリ１２８となって保持される。ソフトウェア配布部１２９は、プローブ挿入済バイナリ１２８を、実行装置１０４などに送信する。
【００２１】
実行装置１０４は、ソフトウェア配布装置１０２にソフトウェア（バイナリ）の配布を要求し、ソフトウェア受信部１４３はプローブ挿入済バイナリ１４１を受信し、プローブ挿入済バイナリ１４１として保持する。ユーザによる起動などのトリガに応じてプローブ挿入済バイナリ１４１を実行し、実行の結果としてプローブ収集情報１４２を取得する。この時取得できるプローブ収集情報は、ソフトウェア配布装置１０２において挿入されたプローブに限定され、挿入されなかったプローブについては情報が得られないことは当然である。取得したプローブ収集情報１４２は、プローブ収集情報送信部１４４により、デバッグ情報収集装置１０３に送付される。
【００２２】
デバッグ情報収集装置１０３は、プローブ収集情報受信部１３３を介し、実行装置１０４などからプローブ収集情報１４２を受信し、デバッグ情報１３２として格納する。また、障害原因箇所推定部１３１は、デバッグ情報１３２を用いてソフトウェア実行時に発生した障害の原因に関係するプローブを推定し、原因の可能性が高いプローブのリストを作成する。このリストはソフトウェア開発者に提供され、これを基にソフトウェア障害の原因を解析する。この解析には一定量のデータが必要である。各実行装置で十分な回数ソフトウェアが実行されて十分な量のデータがデバッグ情報１３２に蓄積されるまで、一定の時間がかかる。
【００２３】
本システムの構成では、ソフトウェア配布装置１０２のバイナリ変更部１２５は、挿入プローブ選択部１２６とプローブ挿入部１２７を有する。挿入プローブ選択部１２６は、実行装置情報１２４、プローブ情報１２３、デバッグ情報１３２などを参照してバイナリ１２１に挿入するプローブが偏りなく一様になるよう選択する。またプローブ挿入部１２７は、各実行装置（デバイス）の性能に応じてプローブの挿入位置等を決めることにも特徴がある。
【００２４】
図２は、ソフトウェア配布装置１０２の保持するプローブ情報１２３の一例を示す図である。ここでは、対象とするソフトウェアとしてメール送受信用のプログラムを想定する。挿入する各プローブには、これらを識別するためにプローブＩＤ２０１を割り振り、対象モジュール２０２は各プローブがどのモジュールに属するかを示す。ここでは例として、ＭａｉｌＲｅａｄＵＩ、ＭａｉｌＥｄｉｔＵＩ、ＣｏｍｍｏｎＬｏｇｇｅｒなどの名称のモジュールに属する。プローブ種別２０３は、関数の返り値を観測する「返り値」と、ポインタなどの変数へ代入された値を観測する「代入値」の２つを挙げている。この他に、ソフトウェア開発者が挿入する条件文の真偽値を観測する「アサーション」、分岐箇所の分岐方向を観測する「カバレッジ」など、別種のプローブでも良い。
【００２５】
対象クラス２０４、対象メソッド２０５、挿入位置２０６は、プローブの挿入箇所を特定するための情報である。ここではＪａｖａ(登録商標)などのプログラム形式を想定し、クラスとメソッドにより命令列を特定し、挿入位置により命令列先頭からのオフセットバイト数を特定する例を示しているが、他のプログラム形式でもよい。ソースコード行２０７は、各プローブがソースコード１１１においてどの位置に対応しているかを示す情報である。障害との関連が推定されるプローブが決定されると、ソフトウェア開発者は、プローブに対応するソースコード行２０７の周辺を優先して障害原因を調査することができる。また、本実施例では、プローブ内で取得した値をそのまま観測結果とするのではなく、取得した値と特定の値を比較した結果を観測結果とした。比較対象２０８は、比較する特定の値、もしくは変数を示している。挿入回数２０９は、各プローブが何回挿入されたかを示す値である。一つの実行装置へソフトウェアを配布する時、ソフトウェアに一定個数のプローブ群が挿入されるので、挿入されたプローブに対応する「挿入回数」に１を加算する。
【００２６】
プローブＩＤ＝１の例についてデータの内容を述べると、ＭａｉｌＲｅａｄＵＩモジュールにおける返り値型のプローブであり、ＭａｉｌＬｉｓｔクラス、ｕｐｄａｔｅメソッドの１２４バイト目に挿入されている。また、このプローブは、観測データを０と比較した結果を返し、これまでに配布バイナリに挿入された回数は３回である。
【００２７】
図３は、ソフトウェア配布装置１０２の保持する実行装置情報１２４の一例を示す図である。装置ＩＤ３０１は、出荷時に各実行装置に割り振られる製造番号をＩＤとして、一意に識別できるものである。実行装置の種別３０２は、Ｈ９０００という旧型とＨ９０１０という新型の２機種とした。それぞれの機種を比較すると、ＣＰＵ種別３０３は「Ａ」と「Ｂ」、ＣＰＵ周波数３０４は「２００」ＭＨｚと「２３３」ＭＨｚのごとく性能が異なる。さらに、組込み機器はメモリ資源に関する制約があるため、配布可能なソフトウェアのサイズにも上限を設けることが多い。ここでは、ソフトウェア配布装置１０２から受信できるソフトウェアのサイズ制限３０５を、Ｈ９０００については３２ｋバイト、Ｈ９０１０については６４ｋバイトと異なる値を持つ。その結果、挿入可能なプローブ数の上限３０６は、それぞれ１２個、１４個に設定されている。
【００２８】
図４は、デバッグ情報収集装置１０３の保持するデバッグ情報１３２の一例を示す図である。本データは、計測条件４００と計測結果４１０に分かれている。計測条件４００は、プローブＩＤ４０１、プローブ種別４０２、実行装置種別４０３からなる。ここでは、プローブＩＤ＝１により特定されるプローブについて、４回の計測が行われたことを示している。このプローブのＩＤは「１」、種別は「返り値」であり、Ｈ９０００による計測が２回、Ｈ９０１０による計測も２回実施されている。
【００２９】
計測結果４１０は、終了状態４１１と、比較結果の回数４１２から構成されている。終了状態４１１は、各プローブから得られる情報と合わせて、収集されるソフトウェア終了時の状態を示す情報である。ここでは、エラー無しで終了した「正常終了」、クラッシュなどのエラーにより終了した「エラー」の２状態を識別するデータとしている。比較結果の回数４１２は、各プローブにおける比較の結果を「負：＜」「正：＞」「等：＝」に分け、各々の回数をカウントした数字である。例えばプローブＩＤ＝１における最初のデータは、正常終了したときに、このプローブで２回の計測が行われ、比較結果が正のときが１回、等しかったときが１回あったことを示している。
【００３０】
これらのデバッグ情報１３２は、次にソフトウェアを配布する際にデバッグ情報を均一、効率的に収集できるよう、挿入するプローブを選択するために用いる。
【００３１】
図５は、本発明によるデバッグ情報収集処理の全体のフローチャートの一例を示す図である。各処理ステップについて順に説明する。
ステップＳ５０１：ソフトウェア開発装置１０１にて作成したバイナリを配布するために、ソフトウェア配布装置１０２にバイナリをコピーする。
ステップＳ５０２：バイナリ解析部１２２は配布対象のバイナリ１２１を解析し、挿入可能なプローブをリストアップする。例えばメソッドの呼び出し箇所を抽出し、これをメソッドの「返り値」を観測するプローブの挿入箇所とする。抽出したプローブ挿入箇所を、プローブ情報１２３に追加する。このようにして、配布対象となるバイナリ全体についてプローブ情報１２３を作成する。
ステップＳ５０３：ソフトウェアの配布対象となる実行装置（デバイス）を１つ選択する。この場合、ソフトウェア配布装置１０２が、実行装置情報１２４を基に自主的に配布先の実行装置を選択するか、あるいは実行装置１０４からソフトウェアの配布要求を受けて、これに応じて配布する形態でもよい。
【００３２】
ステップＳ５０４：バイナリ変更部１２５は、選択した配布対象の実行装置向けに、挿入するプローブを選択する。その際、実行装置に応じてプローブの数を決定し、また挿入履歴に応じて挿入するプローブの母集団を決定する。これらの詳細は後述する。
ステップＳ５０５：選択したプローブをバイナリ１２１に挿入し、プローブ挿入済バイナリ１２８を生成する。
ステップＳ５０６：ソフトウェア配布部１２９は、プローブ挿入済バイナリ１２８を配布対象の実行装置１０４へ送信する。
【００３３】
ステップＳ５０７：実行装置１０４は、受信したソフトウェアを実行する。
ステップＳ５０８：ソフトウェア実行の結果としてプローブ収集情報１４２を取得し、デバッグ情報収集装置１０３へ送信する。
ステップＳ５０９：デバッグ情報収集装置１０３は、取得したプローブ収集情報１４２をデバッグ情報１３２として格納する。
ステップＳ５１０：障害原因箇所推定部１３１は、実行時に発生した障害に関係するプローブを推定して、プローブのリストを作成する。
ステップＳ５１１：ソフトウェア開発者はプローブリストを基にソフトウェア障害の原因を解析する。
【００３４】
図６は、前記図５における挿入プローブ選択処理（ステップＳ５０４）の詳細なフローチャート図である。
ステップＳ６０１：バイナリ変更部１２５は、実行装置情報１２４を参照し、配布対象の実行装置に関する情報を取得する。取得する情報は、図３に示した装置種別、ＣＰＵ種別、ＣＰＵ周波数、配布ソフトウェアサイズ制限、プローブ数上限などである。
【００３５】
ステップＳ６０２：取得した実行装置情報１２４に基づき挿入するプローブ数を決定する。プローブ数は、配布対象の実行装置の性能によって適切に決定する。さらに、同一の実行装置に繰り返し配布する場合は、配布のたびごとに異なっていても良い。
【００３６】
ここで、実行装置に応じてプローブ数を決定するいくつかの具体的方法を述べる。
（１）配布可能なソフトウェアサイズ制限に基づき決定する方法。挿入するプローブの個数を増やすと、バイナリサイズは増加する。そこで、バイナリサイズが制限値を超えないような最大のプローブ数（プローブ数の上限値３０６）を、挿入個数とする方法である。例えば、プローブの挿入個数がバイナリサイズの増加に比例関係を定める場合、挿入前のバイナリサイズをＸｏ、全プローブＮ個を挿入したバイナリのサイズをＸｐ、配布可能なバイナリサイズの上限をＭとしたとき、以下の式を満たすような最大のｎをプローブ数とする。
ｎ（Ｘｐ−Ｘｏ）／Ｎ＋Ｘｏ＜Ｍ
これにより、各実行装置の記憶領域を最大限に活用したデバッグ情報の収集が可能となる。
【００３７】
（２）ＣＰＵの種別や動作周波数に基づき決定する方法。ＣＰＵの種別に応じ、予め定めておいた定数をプローブ数とする。または、動作周波数とプローブ数の比例関係を定めておき、プローブ数を定める。これにより、演算能力が高いＣＰＵを持ち、処理時間に余裕の多い実行装置では多数のプローブを用いて測定する。演算能力の低いＣＰＵを持ち、処理時間に余裕の少ない実行装置では、少数のプローブに限定して測定する。その結果、各実行装置の動作能力に合わせたデバッグ情報の収集が可能となる。なお、測定するプローブ数を実行装置側で限定する方法を併用してもよい。この場合は、実行装置毎に測定プローブ数を変えるため、ソフトウェア配布装置１０２から実行装置に測定プローブ数を伝達し、伝達した数のプローブからのみ情報を取得することで、ＣＰＵ性能に応じた情報収集を実現できる。
【００３８】
（３）その他のプローブ数決定方法。ユーザがソフトウェアを使用するために結ぶ契約の内容に基づく決定方法、ＧＰＳ測位によるデバイスの位置情報に基づく決定方法、ネットワーク帯域やネットワーク接続が常時か否かに基づく決定方法なども可能である。また、前述の決定方法を含め、複数の決定方法を組み合わせても良い。各決定方法から算出されるプローブ数のうち、最小のプローブ数を選択する決定方法でも良い。
【００３９】
ステップＳ６０３：バイナリ変更部１２５は、さらにプローブ情報１２３、デバッグ情報１３２を参照し、プローブ挿入箇所の全体集合に関する情報を取得する。
ステップＳ６０４：挿入するプローブを選択するときに、選択対象となるプローブの母集団を決定する。この母集団は、プローブ情報１２３から取得したプローブ全体集合の部分集合である。すなわち選択するプローブは全体集合からではなく、母集団から決定する。
【００４０】
ここで、プローブの挿入履歴から母集団を決定するいくつかの具体的方法を述べる。
（４）各プローブの挿入回数に応じて決定する方法。プローブ情報１２３から得られる挿入回数の最大値を持つプローブを除外し、それ以外のプローブを母集団とする。言い換えれば、挿入回数の少ないプローブで母集団を構成する。例えば、図２の場合にはＩＤ＝２は挿入回数が最大（４回）なので母集団から除外する。この操作によって挿入回数の少ないプローブが選択され、各プローブの挿入回数の偏りをなくし一様化することができる。プローブの挿入回数に偏りがあると、特定のプローブについて収集される情報が少なくなるため、障害原因箇所の推定に必要な情報を得るための待ち時間が長くなる。挿入回数の偏りをなくすことで、より短時間で障害原因箇所を推定することができる。
【００４１】
（５）過去のデバッグ情報に応じて決定する方法。各プローブの実行回数、およびエラー発生時の実行回数による方法である。図４に示したデバッグ情報１３２は、プローブＩＤ＝１が４回実行され、そのうちエラーが１回発生している。一方、プローブＩＤ＝２は２回実行され、そのうちエラーが１回発生している。プローブの母集団として、実行回数の少ないプローブを選択することで、それらのプローブの情報をより短時間で収集しやすくなる。もしくはエラー発生回数の少ないプローブを選択することで、エラー発生時の情報をより収集しやすくなる。これにより、各プローブについて実行回数の偏りが無くなり、推定に必要となる情報収集の待ち時間が短縮される。
【００４２】
（６）その他の母集団の決定方法。モジュール毎のプローブ実行回数を比較し、モジュール単位で母集団を選択する方法や、プローブの挿入履歴から一回の配布において挿入するプローブの組み合せをチェックし、プローブの組み合せの偏りを平均化する方法なども可能である。また、前述の決定方法を含め、複数の決定方法を組み合わせても良い。例えば、各決定方法から得られる母集団の和集合や積集合を、母集団とする方法がある。
【００４３】
ステップＳ６０５：上記決定したプローブの母集団から乱数等を用いてプローブを１つ選択する。選択したプローブについては、プローブ情報１２３の「挿入回数２０９」に１を加算する。
ステップＳ６０６：選択したプローブの数が、ステップＳ６０２にて決定した挿入プローブ数に達していれば、プローブの選択を完了する。達していない場合は、ステップＳ６０３に戻って再度プローブを選択する。
【００４４】
このように本実施例によれば、実行装置の性能に応じて挿入するプローブ数を決定するので実行装置側の負担が過大となることがない。また、プローブの挿入履歴を反映して母集団を決定するので、挿入するプローブに偏りがなくなる。その結果、デバイス側の負担と開発者側の負担を同時に軽減し、かつデバッグ情報を一様に取得できるようになり、ソフトウェアの障害原因解析の迅速化に寄与する。
【００４５】
上記実施例では、単一のバイナリについてデバッグ情報を収集する例を示したが、複数のバイナリを対象にして適用することも可能である。また上記実施例では、バイナリに対してプローブを挿入する例を示したが、ソースコードにプローブを挿入してもよい。その場合は、ソフトウェア配布装置１０２はバイナリの代わりにソースコードを配置し、コンパイル処理部を持たせればよい。
【００４６】
上記実施例では、インターネットなどの公共ネットワークを介してソフトウェア配布装置１０２、デバッグ情報収集装置１０３、実行装置１０４、１０５、１０６などを接続する場合を示したが、これらはイントラネットなどの組織内ネットワークを用いて接続してもよい。
【００４７】
すなわち、実行装置１０４などを出荷する前のソフトウェア改善についても、本発明は適用可能である。また、ソフトウェアの配布は実行装置１０４の出荷前にイントラネット経由で実施し、デバッグ情報の収集を実行装置１０４の出荷後にインターネット経由で実施する形態でもよい。すなわち、ソフトウェア配布のサービスを提供しない場合にも、本発明は適用可能である。
【００４８】
本実施例ではソフトウェア開発装置１０１、ソフトウェア配布装置１０２、デバッグ情報収集装置１０３などがイントラネットなどの組織内ネットワークにより接続する例を示したが、これらはインターネットなどの公共ネットワークを用いて接続してもよい。すなわち、ソフトウェア配布装置１０２、およびデバッグ情報収集装置１０３による、ソフトウェアの配布とデバッグ情報収集の機能を、ソフトウェア開発者に対して有償もしくは無償のサービスとして提供する場合にも、本発明は適用可能である。
【図面の簡単な説明】
【００４９】
【図１】本発明に係るソフトウェア配布システムの全体構成を示す図。
【図２】ソフトウェア配布装置の保持するプローブ情報１２３の一例を示す図。
【図３】ソフトウェア配布装置の保持する実行装置情報１２４の一例を示す図。
【図４】デバッグ情報収集装置の保持するデバッグ情報１３２の一例を示す図。
【図５】デバッグ情報収集処理の全体のフローチャートの一例を示す図。
【図６】図５における挿入プローブ選択処理の詳細なフローチャート図。
【符号の説明】
【００５０】
１０１…ソフトウェア開発装置、１０２…ソフトウェア配布装置、１０３…実行情報収集装置、１０４，１０５，１０６…実行装置、１１１…ソースコード、１１２…バイナリ、１１３…ソース編集処理部、１１４…コンパイル処理部、１２１…バイナリ、１２２…バイナリ解析部、１２３…プローブ情報、１２４…実行装置情報、１２５…バイナリ変更部、１２６…挿入プローブ選択部、１２７…プローブ挿入部、１２８…プローブ挿入済バイナリ、１２９…ソフトウェア配布部、１３１…障害原因箇所推定部、１３２…デバッグ情報、１３３…プローブ収集情報受信部、１４１…プローブ挿入済バイナリ、１４２…プローブ収集情報、１４３…ソフトウェア受信部、１４４…プローブ収集情報送信部。
【図１】
2008140162.tif 000003
【図２】
2008140162.tif 000004
【図３】
2008140162.tif 000005
【図４】
2008140162.tif 000006
【図５】
2008140162.tif 000007
【図６】
2008140162.tif 000008