(57)【特許請求の範囲】
【請求項１】
検証対象とするジョブネットの定義記述と、前記ジョブネットが実行する１以上のジョブのプログラムのソースコードと、前記ジョブが使用するコマンドの一覧情報と、から、前記ジョブ間の実行順序情報と、前記ジョブと前記ジョブが実行する前記コマンドの対応関係を記録した実行コマンド情報を生成する、ジョブネット解析部と、
前記実行コマンド情報に含まれるコマンドに指定された引数に対して行われるリソース操作種別の入力を受け付けて、前記コマンドに指定された引数と前記各引数に対して行う前記リソース操作種別の情報とを保持するコマンド定義表を生成する、コマンド定義表作成部と、
前記実行順序情報と、前記コマンド定義表と、リソース競合が発生する前記リソース操作種別の組み合わせに関する情報である不具合パターン情報とを用いて、前記ジョブネットの実行時にリソース競合が発生し得るか検証するリソース競合検証部と、
を備えることを特徴とするジョブネット検証装置。
【請求項２】
前記リソース競合検証部は、前記ジョブが使用する前記コマンドのうち、同一リソースに対する操作を実行する任意の２つのコマンドであるコマンドペアに対して、該コマンドペアが実行する前記リソース操作種別の組み合わせが前記不具合パターン情報に含まれており、かつ当該コマンドペアが並行実行される場合、リソース競合が発生し得ると判定する、
ことを特徴とする請求項１に記載のジョブネット検証装置。
【請求項３】
前記リソース競合検証部は、検証実行対象とすべき前記コマンドペアの集合である検証範囲情報を生成し、
過去のある時点でのコマンド定義表である旧コマンド定義表と、現時点でのコマンド定義表である新コマンド定義表とを比較し、その差分から、新たに前記リソース操作種別が定義されたコマンドの一覧であるコマンド定義更新差分情報を作成し、
前記旧コマンド定義表から、前記コマンド定義更新差分情報に含まれるコマンドと同一リソースにアクセスするコマンドについての情報である、定義済みコマンド情報を抽出し、
前記コマンド定義更新差分情報に含まれるコマンドと、前記定義済みコマンド情報に含まれるコマンドとから、同一リソースにアクセスするコマンドのペアを全通り作成し、前記作成された全てのコマンドペアに対して、該コマンドペアが実行する前記リソース操作種別が不具合パターンに一致し、かつ該コマンドペアが並行実行されるか判定する、
ことを特徴とする、請求項２に記載のジョブネット検証装置。
【請求項４】
前記コマンド定義表作成部は、前記実行コマンド情報に含まれるコマンドのうち、同一の引数を有するコマンドを有するグループを作成し、
前記作成されたグループの優先度を決定し、
前記各グループに含まれるコマンドと前記コマンドが有する前記引数の一覧を含み、前記引数ごとに前記リソース操作種別を指定可能にしたユーザ入力用コマンド定義表を生成し、
前記ユーザ入力用コマンド定義表を前記ジョブネット検証装置の表示部に表示するよう構成されており、
前記ユーザ入力用コマンド定義表には、前記優先度の高いグループから順に、前記グループに含まれるコマンドと前記コマンドが有する前記引数の一覧表示される、
ことを特徴とする請求項１ないし請求項３の何れか一項に記載のジョブネット検証装置。
【請求項５】
前記コマンド定義表作成部による前記コマンド定義表の作成と、前記リソース競合検証部による検証は、並行して実行可能である、
ことを特徴とする、請求項１ないし請求項４の何れか一項に記載のジョブネット検証装置。
【請求項６】
検証対象とするジョブネットの定義記述と、前記ジョブネットが実行する１以上のジョブのプログラムのソースコードと、前記ジョブが使用するコマンドの一覧情報と、から、前記ジョブ間の実行順序情報と、前記ジョブと前記ジョブが実行する前記コマンドの対応関係を記録した実行コマンド情報を生成する、ジョブネット解析ステップと、
前記実行コマンド情報に含まれるコマンドに指定された引数に対して行われるリソース操作種別の入力を受け付けて、前記コマンドに指定された引数と前記各引数に対して行う前記リソース操作種別の情報とを保持するコマンド定義表を生成する、コマンド定義表作成ステップと、
前記実行順序情報と、前記コマンド定義表と、リソース競合が発生する前記リソース操作種別の組み合わせに関する情報である不具合パターン情報とを用いて、前記ジョブネットの実行時にリソース競合が発生し得るか検証するリソース競合検証ステップとをコンピュータが実行する、ジョブネット検証方法。
【請求項７】
前記リソース競合検証ステップは、
前記ジョブが使用する前記コマンドのうち、同一リソースに対する操作を実行する任意の２つのコマンドであるコマンドペアに対して、該コマンドペアが実行するリソース操作種別が前記不具合パターン情報に含まれており、かつ当該コマンドペアが並行実行される場合、リソース競合が発生し得ると判定する、
請求項６に記載のジョブネット検証方法。
【請求項８】
前記リソース競合検証ステップでは、
ａ）  検証実行対象とすべき前記コマンドペアの集合である検証範囲情報を生成し、
ｂ）  過去のある時点でのコマンド定義表である旧コマンド定義表と、現時点でのコマンド定義表である新コマンド定義表とを比較し、その差分から、新たにリソース操作種別が定義されたコマンドの一覧であるコマンド定義更新差分情報を作成し、
ｃ）  前記旧コマンド定義表から、前記コマンド定義更新差分情報に含まれるコマンドと同一リソースにアクセスするコマンドについての情報である、定義済みコマンド情報を抽出し、
ｄ）  前記コマンド定義更新差分情報に含まれるコマンドと、前記定義済みコマンド情報に含まれるコマンドとから、同一リソースにアクセスするコマンドのペアを全通り作成し、前記作成された全てのコマンドペアに対して、該コマンドペアが実行するリソース操作種別が不具合パターンに一致し、かつ該コマンドペアが並行実行されるか判定する、
工程が実行される、請求項７に記載のジョブネット検証方法。
【請求項９】
前記コマンド定義表作成ステップは、
前記実行コマンド情報に含まれるコマンドのうち、同一の引数を有するコマンドを有するグループを作成し、
前記作成されたグループの優先度を決定し、
前記各グループに含まれるコマンドと前記コマンドが有する前記引数の一覧を含み、前記引数ごとに前記リソース操作種別を指定可能にしたユーザ入力用コマンド定義表を生成し、
前記ユーザ入力用コマンド定義表を、前記コンピュータの表示部に表示する、
工程を含み、
前記ユーザ入力用コマンド定義表を表示する工程では、前記優先度の高いグループから順に、前記グループに含まれるコマンドと前記コマンドが有する前記引数の一覧が表示される、
請求項６ないし請求項８の何れか一項に記載のジョブネット検証方法。
【請求項１０】
前記コマンド定義表作成ステップと、前記リソース競合検証ステップは、並行して実行可能である、
請求項６ないし請求項９の何れか一項に記載のジョブネット検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はジョブネットを検証し、リソース競合を検出する装置および検証方法に関する。
【背景技術】
【０００２】
種々の業務を実現するシステムでは、業務を実現する処理単位であるジョブを、定義された順序で実行し業務の自動化を実現している。ジョブの実行順序に対する定義をジョブネットと呼び、ジョブネットに従いジョブを管理、実行する製品（プログラム）が提供されている。このプログラムはジョブネット管理プログラムと呼ばれる。
【０００３】
ジョブネットが大規模化すると、全ジョブの実行関係や動作、ひいてはシステム全体の動作を把握することが困難となる。この結果、システムの設計段階での検証を充分行う事が難しくなり、ジョブネットあるいはジョブの実行時に不具合が発生するようなコードが埋め込まれてしまうこともある。
【０００４】
ジョブネットに関する不具合の中でも、特にリソース競合は、プロセスの停止、場合によってはシステム全体の停止を招く重大な不具合である。リソース競合の具体例として、並行実行する２つのジョブが、同一のファイルへ、更新操作と削除操作を同時に実行してしまう場合が考えられる。この場合、更新操作を行うジョブの実行タイミングによっては、このジョブの更新操作前あるいは更新操作中に、操作対象のファイルが削除されてしまう。この結果、ジョブが異常終了する可能性がある。
【０００５】
このような問題に対処するために、従来から、設計・開発段階における検証作業を容易化する技術が開発されてきた。たとえば特許文献１では、ジョブネットをシミュレーション実行する方法が開示されている。ジョブネットをシミュレーション実行し、事前にジョブネットの妥当性を検証することで、設計段階で見落とされたリソース競合を発見できる可能性が高まる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−６１８７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１に開示されているような、シミュレーションによる検証方法では、ジョブネットを網羅的に検証することは困難であり、埋め込まれた全てのリソース競合を検出できないという課題がある。この理由は以下の通りである。ジョブネットに並行実行されるジョブが多く含まれるほど、ジョブネット実行時に発生し得るジョブの実行順序のパターンは増加する。そのため、検証時に検証すべきジョブネットの実行パターンも増加する。前述の通りリソース競合はシステムの停止を招く不具合であり、高信頼性が求められるシステムでは、発生し得る全てのリソース競合を稼働前に除去しなければならない。しかしシミュレーションによる検証方法では、１回のシミュレーションで１つの実行パターンだけが検証されるため、全ての実行パターンを漏れ無くシミュレーションすることが困難である。
【課題を解決するための手段】
【０００８】
本発明の一実施形態に係るジョブネット検証装置は、検証対象とするジョブネットの定義記述と、ジョブネットが実行する１以上のジョブのプログラムのソースコードと、ジョブが使用するコマンドの一覧情報とから、ジョブ間の実行順序情報と、ジョブとジョブが実行するコマンドの対応関係を記録した実行コマンド情報を生成する。続いて実行コマンド情報に含まれるコマンドに指定された引数に対して行われるリソース操作種別の入力を受け付けて、引数と各引数に対して行うリソース操作種別の情報とを保持するコマンド定義表を作成する。そして生成された実行順序情報及びコマンド定義表と、リソース競合が発生するリソース操作種別の組み合わせに関する情報である不具合パターン情報とを用いて、ジョブネットの実行時にリソース競合が発生し得るか、検証を行う。
【発明の効果】
【０００９】
本発明の一実施形態に係るジョブネット検証装置によれば、ジョブネット実行時のリソース競合の発生を未然に防ぐことができ、結果としてシステム停止などによる事故を防止できるようになる。
【図面の簡単な説明】
【００１０】
【図１】ジョブネット検証装置の構成例である。
【図２】ジョブネット検証装置のハードウェア構成例である。
【図３】コマンド定義表入力装置および検証実行装置のハードウェア構成例である。
【図４】ジョブネット定義の例である。
【図５】ジョブが実行するプログラムのソースコードの例である。
【図６】ジョブネット解析部の手順例を示すフローチャートである。
【図７】解析結果保持部に格納するジョブ実行順序情報の例である。
【図８】解析結果保持部に格納する実行コマンド情報の例である。
【図９】グループ・優先度決定部およびユーザ入力用コマンド定義表生成部の手順例を示すフローチャートである。
【図１０】ユーザ入力用コマンド定義表の例である。
【図１１】コマンド定義表入力部におけるコマンド定義表作成画面の例である。
【図１２】定義済みコマンド保持部に格納する定義済みコマンド情報の例である。
【図１３】コマンド定義更新差分保持部に格納するコマンド定義更新差分情報の例である。
【図１４】コマンド定義表更新検出部の手順例を示すフローチャートである。
【図１５】コマンド定義表更新通知部の手順例を示すフローチャートである。
【図１６】検証範囲特定部の手順例を示すフローチャートである。
【図１７】不具合パターン保持部に格納する不具合パターン情報の例である。
【図１８】部分的検証実行部の手順例を示すフローチャートである。
【図１９】検証結果データの例である。
【図２０】コールグラフの例である。
【発明を実施するための形態】
【００１１】
以下、本発明の一実施例を、図面を参照しながら詳細に説明する。
【００１２】
図１は、本実施例におけるジョブネット検証装置２０１の構成例を示すブロック図である。
【００１３】
ジョブネット検証装置２０１は、ジョブネット解析部１１１、グループ・優先度決定部１１２、ユーザ入力表コマンド定義表作成部１１３、コマンド定義表入力部１１４、コマンド定義表更新検出部１１５、コマンド定義表更新通知部１１６、検証範囲特定部１１７、部分的検証実行部１１８、の機能ブロックを含む。またジョブネット検証装置２０１は、解析結果保持部１２１、定義済みコマンド保持部１２２、コマンド定義更新差分保持部１２３、不具合パターン保持部１２４、の記憶部を有する。
【００１４】
ジョブネット解析部１１１は、ジョブネット定義１０１、ジョブが実行するプログラムのソースコード１０２、および利用製品コマンド一覧１０３を受け付け、これらからジョブの実行順序情報および実行コマンド情報を生成し、解析結果保持部１２１に登録する。
【００１５】
グループ・優先度決定部１１２は、解析結果保持部１２１から上記実行コマンド情報を取得し、同一引数を操作するコマンドをグループ化し、各グループに対し、コマンド定義表作成時の優先順位を付与したグループ化・優先度付与済みコマンド一覧情報を作成し、これをユーザ入力用コマンド定義表生成部１１３へ入力する。この際、定義済みコマンド保持部１２２に定義済みコマンド情報が登録されている場合には、定義済みコマンド情報に含まれるコマンドを、グループ化と優先度付与の対象から除外する。
【００１６】
ユーザ入力用コマンド定義表生成部１１３は、上記グループ化・優先度付与済みコマンド一覧情報を受け付け、ユーザが、各コマンドに対し引数種別と操作種別を定義、入力するためのユーザ入力用コマンド定義表を作成し、これをコマンド定義表入力部へ入力する。
【００１７】
コマンド定義表入力部１１４は、上記ユーザ入力用コマンド定義表を受け付け、これを、コマンド定義表作成画面を通じてユーザに提示する。また、コマンド定義表作成画面を通じ、コマンド定義表に対するユーザからの入力を受け付ける。更に、ユーザから入力された定義情報を含むコマンド定義表を、コマンド定義表更新検出部１１５へ入力する。
【００１８】
コマンド定義表更新検出部１１５は、コマンド定義表入力部１１４から上記コマンド定義表を受け付ける。そしてコマンド定義表更新検出部１１５は、定義済みコマンド保持部１２２から定義済みコマンド情報を取得し、定義済みコマンド情報に含まれないが、コマンド定義表入力部１１４から受け付けたコマンド定義表には含まれる情報を、コマンド定義更新差分情報として、コマンド定義更新差分保持部１２３に登録する。その後、コマンド定義表において、操作種別が定義されたコマンドを、定義済みコマンド保持部１２２に登録する。
【００１９】
コマンド定義表更新通知部１１６は、定義済みコマンド保持部１２２から定義済みコマンド情報を、コマンド定義更新差分保持部１２３からコマンド定義更新差分情報をそれぞれ取得し、これらの情報を検証範囲特定部１１７へ入力する。
【００２０】
検証範囲特定部１１７は、上記定義済みコマンド情報およびコマンド定義更新差分情報を受け付け、新たに定義されたコマンドに基づき、リソース競合が発生し得るかを検証可能となるリソース操作のペアの集合を検証可能範囲情報として作成する。この情報を、部分的検証実行部１１８へ入力する。
【００２１】
部分的検証実行部１１８は、上記検証可能範囲情報を受け付け、不具合パターン保持部１２４から不具合パターン情報を取得する。その後、上記検証可能範囲情報から、検証対象とするリソース操作のペアを１つずつ選択し、当該ペアが不具合パターン情報に合致するパターンであるか、並行実行し得るかを検証する。当該ペアが不具合パターンに合致し、かつ並行実行し得る場合、当該ペアを検証対象ジョブネットで発生し得るリソース競合として、検証結果１０４に登録する。
【００２２】
図２は、図１に示したジョブネット検証装置を実現するハードウェア構成の例を示している。
【００２３】
図２において、ジョブネット検証装置２０１は、一例としてパーソナルコンピュータ（ＰＣ）等の、汎用的な計算機で、ＣＰＵ２０２、メモリ２０３、補助記憶装置２０４、表示装置２０５、入力装置２０６、及び外部媒体入出力装置２０７を備える。
【００２４】
ＣＰＵ２０２は、メモリ２０３に記憶されたプログラムを実行することによって、各種処理を実行する。メモリ２０３は、ＣＰＵ２０２のワークエリアとして機能し、プログラム及びプログラムの実行に必要なデータを記憶する。具体的には、メモリ２０３には、ＣＰＵ２０２に実行されることによって、ジョブネット検証装置２０１をジョブネット解析部１１１、グループ・優先度決定部１１２、ユーザ入力表コマンド定義表作成部１１３、コマンド定義表入力部１１４、コマンド定義表更新検出部１１５、コマンド定義表更新通知部１１６、検証範囲特定部１１７、および部分的検証実行部１１８の機能ブロックを備えた装置として動作させるためのプログラム、及びこのプログラムの実行に必要なデータが記憶される。
【００２５】
なお、以下では、ジョブネット検証装置２０１で実行される各種処理の内容を説明する際、ジョブネット解析部１１１等の機能ブロックを処理の主体として説明することがある。ただし先に述べたとおり、実際にはジョブネット解析部１１１等は、プログラムがＣＰＵ２０２に実行されることによって実現される機能ブロックであるから、正確には処理の主体はＣＰＵ２０２である。ただし説明が冗長になることを避けるため、本実施例では、ジョブネット解析部１１１等の機能ブロックを処理の主体として、各種処理の内容を説明する。
【００２６】
また、ジョブネット検証装置２０１で実行されるプログラム（ジョブネット検証装置２０１を、以下で説明する各機能ブロックを有する装置として動作させるためのプログラム）は、プログラム配布サーバや計算機が読み取り可能な記憶メディアによって提供され、プログラムを実行する各装置にインストールされてもよい。計算機が読み取り可能な記憶メディアとは、非一時的なコンピュータ可読媒体で、例えばＩＣカード、ＳＤカード、ＤＶＤ等の不揮発性記憶媒体である。
【００２７】
補助記憶装置２０４は、各種データを格納する。補助記憶装置２０４は、例えばハードディスク装置などの、不揮発性記憶媒体を用いた記憶装置である。上で述べた解析結果保持部１２１、定義済みコマンド保持部１２２、コマンド定義更新差分保持部１２３、および不具合パターン保持部１２４は、補助記憶装置２０４の有する記憶領域を用いて構成される。そのため、本実施例において、「解析結果保持部１２１（または定義済みコマンド保持部１２２、コマンド定義更新差分保持部１２３、および不具合パターン保持部１２４）に情報を格納する」という記述がある箇所は、実際には解析結果保持部１２１（または定義済みコマンド保持部１２２、コマンド定義更新差分保持部１２３、および不具合パターン保持部１２４）を構成する補助記憶装置２０４の記憶領域に情報が格納されることを意味する。
【００２８】
また別の実施形態として、解析結果保持部１２１、定義済みコマンド保持部１２２、コマンド定義更新差分保持部１２３、および不具合パターン保持部１２４は、メモリ２０３の記憶領域を用いて構成されていてもよい。
【００２９】
あるいは、ジョブネット解析部１１１、グループ・優先度決定部１１２、ユーザ入力表コマンド定義表作成部１１３、コマンド定義表入力部１１４、コマンド定義表更新検出部１１５、コマンド定義表更新通知部１１６、検証範囲特定部１１７、および部分的検証実行部１１８を構成するプログラムの少なくとも一部についても、補助記憶装置２０４に格納されてもよい。その場合、各種処理実行の際には、ＣＰＵ２０２は補助記憶装置２０４に格納されたプログラムをメモリ２０３へ読み出して、プログラムを実行する。また各プログラムは、あらかじめ、メモリ２０３または補助記憶装置２０４に格納されていても良いし、必要に応じ、利用可能な媒体を介して、他の装置からメモリ２０３または補助記憶装置２０４に導入されてもよい。媒体とは、例えば、外部媒体入出力装置２０７に着脱可能な記憶媒体、または、ネットワークや、ネットワークを伝搬する搬送波やデジタル信号などの通信媒体を指す。
【００３０】
表示装置２０５は、プログラムの処理結果などを表示する。表示装置２０５は、例えば、ディスプレイなどである。入力装置２０６は、処理の実行指示及び処理に必要な情報の入力などを利用者から受け付ける。入力装置２０６は、例えば、キーボード及びマウスなどである。
【００３１】
外部媒体入出力装置２０７は、外部媒体に格納されているデータなどの入出力を行う。外部媒体は、外部媒体入出力装置２０７に着脱可能で可搬性のある記憶媒体であり、外部媒体出力装置２０７は、外部媒体に読み書き可能なドライブ装置などである。たとえば、ジョブネット定義１０１やソースコード１０２等の、ジョブネットの検証で必要となる情報は、外部媒体入出力装置２０７を介して、ジョブネット検証装置２０１に入力される。ただし別の実施形態として、ジョブネット検証装置２０１にネットワークインタフェースを備え、ネットワーク経由でジョブネットの検証で必要となる情報がジョブネット検証装置２０１に入力されてもよい。
【００３２】
なお、ジョブネット検証装置は、必ずしも単一の計算機で構成されなければならないわけではなく、複数台の計算機を用いてジョブネット検証装置を構成することも可能である。図３には、図１に示したジョブネット検証装置を実現するハードウェア構成の、別の例が示されている。
【００３３】
図３のジョブネット検証装置３００（以下では、図２に示された装置と区別するために、図３のジョブネット検証装置３００を「ジョブネット検証システム３００」と呼ぶこともある）は、コマンド定義表入力装置３０１と検証実行装置３０３を有する。コマンド定義表入力装置３０１と検証実行装置３０３はいずれも、ジョブネット検証装置２０１と同様のハードウェア要素（ＣＰＵ２０２〜外部媒体入出力装置２０７）を持つ、汎用的な計算機である。さらにコマンド定義表入力装置３０１と検証実行装置３０３は、ネットワーク３０２に接続するためのネットワークインタフェースを有し、ネットワーク３０２を介して通信可能に構成される。
【００３４】
コマンド定義表入力装置３０１は、ジョブネット解析部１１１、解析結果保持部１２１、グループ・優先度決定部１１２、ユーザ入力表コマンド定義表作成部１１３、コマンド定義表入力部１１４、コマンド定義表更新検出部１１５、定義済みコマンド保持部１２２、コマンド定義更新差分保持部１２３およびコマンド定義表更新通知部１１６を持つ。
【００３５】
コマンド定義表入力装置３０１の定義済みコマンド保持部１２２およびコマンド定義更新差分保持部１２３に格納された定義済みコマンド情報およびコマンド定義更新差分情報は、ネットワーク３０２を通じて検証実行装置３０３に送信される。
【００３６】
検証実行装置３０３は、検証範囲特定部１１７、部分的検証実行部１１８、不具合パターン保持部１２４を持つ。
【００３７】
検証実行装置３０３は、ネットワーク３０２を介してコマンド定義表入力装置３０１から定義済みコマンド情報およびコマンド定義更新差分情報を受信し、検証範囲特定部１１７および部分的検証実行部１１８を実行することで検証を行う。ジョブネット検証システム３００は、検証結果１０４を検証実行装置３０３の表示装置上に表示するように構成されていてもよいし、あるいはネットワーク３０２を通じて検証結果１０４を検証実行装置３０３からコマンド定義表入力装置３０１上に送信し、コマンド定義表入力装置３０１の表示装置上に表示するように構成されていてもよい。
【００３８】
図３に示されたジョブネット検証システム３００では、定義済みコマンド情報およびコマンド定義更新差分情報を装置間で受け渡す手段としてネットワークが用いられているが、外部媒体入出力装置を使用して、ネットワーク以外、例えば着脱可能な記憶媒体による、情報の受け渡しが行われても良い。
【００３９】
なお、ここではコマンド定義表入力装置３０１に、ジョブネット解析部１１１、解析結果保持部１２１、グループ・優先度決定部１１２、ユーザ入力表コマンド定義表作成部１１３、コマンド定義表入力部１１４、コマンド定義表更新検出部１１５が存在し、それ以外の機能ブロックが検証実行装置３０３に存在する例を説明したが、各機能ブロックはコマンド定義表入力装置３０１と検証実行装置３０３の何れに存在しても、本実施例で説明するジョブネットの検証は可能である。また、ここでは２台の計算機（コマンド定義表入力装置３０１と検証実行装置３０３）でジョブネット検証システムが構成される例を説明したが、これ以外の構成、例えば３台以上の計算機でジョブネット検証システムが構成されてもよい。
【００４０】
また、図２のジョブネット検証装置２０１、そして図３のジョブネット検証システム３００の何れによっても、本実施例にて説明するジョブネットの検証は実行可能だが、以下では主に、図２のジョブネット検証装置２０１でジョブネットの検証が行われる例について説明する。
【００４１】
図４は、本実施例に係るジョブネット検証装置２０１が入力として受け付けるジョブネット定義１０１の例である。ジョブネット定義１０１の例として、ジョブネット定義イメージ４１０、ジョブネット定義テキスト４２０があり得る。ジョブネット定義イメージ４１０は画像形式のジョブネット定義例で、ジョブネット定義テキスト４２０はテキスト形式のジョブネット定義例である。本実施例では、ジョブ管理製品（プログラム）であるJP1/Automatic Job Management Systemによって定義されるジョブネット定義の例について説明するが、本実施例に係るジョブネット検証装置または方法は、必ずしも上記製品で定義されたジョブネットの検証に限定されない。処理の実行順序を定義し、当該定義に従った処理の自動化を実現するその他のジョブ管理製品で実行されるジョブネットに対しても、本実施例に係るジョブネット検証方法を適用できる。
【００４２】
ジョブネット定義イメージ４１０には、入れ子のジョブネット定義例が示されており、ルートジョブネットA４１１には、子要素としてジョブネットB４１２、ジョブネットD４１４、ジョブネットG４１５が定義されている。ジョブネット間の矢印を関連線と呼び、関連線はジョブネット間の実行順序を定義している。関連線４１６は、ジョブネットB４１２の実行後に、ジョブネットD４１４が実行されることを定義している。また、各ジョブネットは子要素としてジョブを保持しており、例えばジョブネットB４１２はジョブC４１３を呼び出すことが定義されている。ジョブは、ジョブネット管理プログラムにおける処理の最小単位で、各ジョブには、ジョブが実行するプログラムまたはコマンドが関連付けられる。
【００４３】
一方、ジョブネットG４１５と他のジョブネット（ジョブネットB４１２、ジョブネットD４１４）の間には関連線が存在しない。これはジョブネットG４１５と他のジョブネットの間に順序関係が定義されていないことを意味する。つまりジョブネットG４１５は、他のジョブネットの前に実行されるか、後に実行されるか、明確に定まっていない。そのためジョブネットG４１５が保持するジョブは、他のジョブネットが保持するジョブと並行に実行される可能性もある。
【００４４】
ジョブネット定義テキスト４２０には、ジョブネット定義イメージ４１０と同じジョブネットに対する定義例の一部が示されている。テキスト形式のジョブネット定義では、unitから始まるステートメントによりジョブネット、ジョブを定義する。ルートジョブネットA４２１は、子要素にジョブネットB４２２を持つことが示されている。また、ジョブネットB４２２は、子要素にジョブC４２３を持つことが示されている。ジョブC４２３の定義中には、teから始まるステートメントにて、当該ジョブが実行するプログラム（またはスクリプト）が定義されている。更に、arから始まるステートメント４２５には、関連線４１６の定義が記述されており、ジョブネットB２２の実行後に、ジョブネットD４２４が実行されることが示されている。
【００４５】
なお、ジョブネット定義イメージ４１０と、ジョブネット定義テキスト４２０のいずれが、ジョブネット検証装置２０１の入力として渡されてもよいが、以下では特に断りのない限り、ジョブネット検証装置２０１への入力情報としてジョブネット定義テキスト４２０が用いられる例について説明する。
【００４６】
図５は、本実施例に係るジョブネット検証装置２０１が入力として受け付ける、ジョブが実行するプログラムのソースコード例である。図５ではソースコード例として、Korn Shellのスクリプトが示されている。
【００４７】
ジョブが実行するプログラムは、図５の例のようなシェルスクリプトの他、実行形式のオブジェクトコード（何らかのプログラミング言語で記述されたソースプログラムをコンパイルすることで生成されるプログラムコード）のこともある。ジョブが実行するプログラムが実行形式のオブジェクトコードの場合、本実施例に係るジョブネット検証装置２０１への入力には、オブジェクトコードの元となるソースプログラム（コンパイル前のソースプログラム）が用いられる。ジョブが実行するプログラムが図５のようなスクリプト（インタープリタによって処理されるソースコードも含まれる）の場合には、このスクリプトが直接ジョブネット検証装置２０１への入力に用いられる。本実施例では、ジョブネット検証装置２０１の入力に用いられる、オブジェクトコードの元となるソースプログラムとスクリプトのいずれも、「ソースコード」と呼ぶ。
【００４８】
ジョブが実行するプログラムがスクリプトの場合、スクリプトから別のプログラム（外部プログラムと呼ぶ）が呼び出され、そのプログラムが実行されることがある。図５のソースコード５０１には、ジョブが外部プログラムを呼び出す例が示されている。ステートメント５０２は、Linux(R)でサポートされるcatコマンド等を実行して、ファイル”/etc/some.conf”を読み込んでファイル”/TMP/config”に書き込む処理を実行するためのものである。またステートメント５０３は、DB製品HiRDB(R)が提供するコマンドを実行することで、データロード処理を実行するためのものである。
【００４９】
スクリプトから呼び出される外部プログラムは一般に「コマンド」と呼ばれるので、本実施例においても、ジョブが実行するプログラムから呼び出されるプログラムのことを「コマンド」と呼ぶ。またジョブが実行するプログラムが実行形式のオブジェクトコードの場合、外部プログラム（あるいはライブラリ）に定義されている関数が呼び出されることがある。本実施例では、ジョブが実行するプログラムから呼び出される関数のことも、「コマンド」と呼ぶこととする。
【００５０】
図６は、本実施例におけるジョブネット解析部の処理手順例を示すフローチャートである。
【００５１】
以下に示す処理は、ジョブネット検証装置２０１の備えるＣＰＵ２０２が、メモリ２０３に格納されたプログラムを実行することによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【００５２】
ジョブネット解析部１１１は、検証対象のジョブネットのジョブネット定義１０１、検証対象のジョブネットの子要素の各ジョブが実行するプログラムのソースコード１０２、そして利用製品コマンド一覧１０３を受領すると、実行を開始する。ジョブネット解析部１１１はまず、ジョブネット定義１０１から、検証対象とするジョブネットにて実行される全ジョブの情報を取得する（ステップ６０１）。ここで取得された、検証対象とするジョブネットにて実行される全ジョブの情報のことを、「全ジョブ一覧」と呼ぶ。
【００５３】
続いてジョブネット解析部１１１は、ジョブネット定義１０１の内容を解析することで、検証対象ジョブネット内で定義される、ジョブの実行順序に関する情報を、ステップ６０１で取得した全ジョブに対して生成する（ステップ６０２）。ここで生成されるジョブの実行順序に関する情報を、「ジョブ実行順序情報」と呼ぶ。例えばジョブネット解析部１１１が、ジョブネット定義１０１として、図４に示されたジョブネット定義テキスト４２０を受け付けて、その内容を解析する場合、ステートメント４２５に定義された関連線により、ジョブネットB４２２を実行後に、ジョブネットD４２４を実行するという順序関係を識別できる。また、ジョブネットB４１２は下位にジョブC４１３を持つ。したがってジョブネット解析部１１１は、ジョブネットB４２２からジョブC４２３、ジョブC４２３からジョブネットD４２４という実行順序関係を取得することができる。
【００５４】
ステップ６０２の後、ジョブネット解析部１１１は利用製品コマンド一覧１０３を用いて、ステップ６０１で取得した全ジョブ一覧に含まれる各ジョブが実行するプログラムのソースコード１０２を解析し、各ジョブが実行するコマンド及びその引数の一覧を生成する（ステップ６０３）。ここで作られる情報は、実行コマンド情報と呼ばれる。
【００５５】
なお、利用製品コマンド一覧１０３とはたとえば、ジョブネットが実行される計算機で実行可能な全てのコマンド名の一覧が記述されたテキストファイルで、あらかじめユーザ（ジョブネットの検証者）が作成しておく情報である。ただし利用製品コマンド一覧１０３のデータ形式は、必ずしもテキスト形式に限定されない。ソースコード１０２に含まれる各コマンドを特定可能な情報を含んでいれば、利用製品コマンド一覧１０３のデータ形式には任意の形式が採用可能である。
【００５６】
また、ジョブネット解析部１１１に入力される利用製品コマンド一覧１０３は一つとは限らない。ジョブネットが実行される計算機に、複数のプログラム製品がインストールされている場合、プログラム製品ごとの利用製品コマンド一覧１０３がジョブネット解析部に入力される。
【００５７】
例えば、ジョブネット解析部１１１が図５に記述されたソースコード５０１の解析を行う例を説明する。ソースコード５０１は、Linux(R)のコマンドである”cat”および”>”（リダイレクト）と、データベース管理プログラムのHiRDB(R)のコマンドである”pdload”を含んでいる。この場合ジョブネット解析部１１１は、Linuxのコマンド一覧が記述された利用製品コマンド一覧１０３とHiRDBのコマンド一覧が記述された利用製品コマンド一覧１０３を用いて解析を行う。
【００５８】
図５の例では、ステートメント５０２，５０３以外の行は、利用製品コマンド一覧１０３に記述されたコマンドを含まないため読み飛ばされる。ステートメント５０２は、Linuxコマンドである”cat”および”>”（リダイレクト）を含むため、ジョブネット解析部１１１はコマンド”cat”とその引数（/etc/some.conf）の組み合わせと、”>”と引数（/TMP/config）の組み合わせを、実行コマンド情報として生成する。また、ステートメント５０３には、HiRDB(R)のコマンドである”pdload”が含まれているので、ジョブネット解析部１１１はコマンド”pdload”とその引数（-ln -is -d -c ${DEFFILE} ${TBLID}\ source ${SOTFILE} error=${ERRFILE} idxwork /AAA）の組み合わせを、実行コマンド情報として生成する。
【００５９】
ジョブネット解析部１１１は、ステップ６０２で取得したジョブ実行順序情報およびステップ６０３で生成した実行コマンド情報を、解析結果として解析結果保持部１２１に格納する。（ステップ６０４）
【００６０】
なお、本実施例では実行順序情報および実行コマンド情報を、ジョブネット定義テキストおよびソースコードから取得する例を説明しているが、これら以外の情報から実行順序情報および実行コマンド情報を取得してもよい。たとえばジョブネットの仕様書など、ジョブの実行順序やジョブが実行するコマンドについて記述された情報を入力として受け付けて、実行順序情報および実行コマンド情報を取得してもよい。
【００６１】
図７は、解析結果保持部１２１に格納されるジョブ実行順序情報の例である。ジョブ実行順序情報７０１は、先に実行される先行ジョブ７０２と、先行ジョブ７０２に続いて実行される後続ジョブ７０３とのペアを、表形式で保持する。
【００６２】
図８は、解析結果保持部１２１に格納される実行コマンド情報の例である。実行コマンド情報８０１は、ジョブID８０２と、実行コマンド８０３という、２つのカラムを有する、表形式の情報である。ジョブID８０２は、実行コマンド８０３に格納されたコマンド（及びその引数）を実行するジョブのジョブＩＤが格納される。
【００６３】
なお、ここではジョブ実行順序情報７０１と実行コマンド情報８０１が表形式の情報である例を説明したが、これらの情報の格納形式に、表以外の形式（たとえばグラフデータ構造等）が用いられてもよい。
【００６４】
図９は、本実施例におけるグループ・優先度決定部およびユーザ入力用コマンド定義表生成部の処理手順例を示すフローチャートである。
【００６５】
以下に示す処理は、ジョブネット検証装置２０１の備えるＣＰＵ２０２が、メモリ２０３に格納されたプログラムを実行することによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【００６６】
グループ・優先度決定部１１２は解析結果保持部１２１から実行コマンド情報８０１を取得する。（ステップ９０１）
【００６７】
グループ・優先度決定部１１２は、続けて定義済みコマンド保持部１２２から定義済みコマンド情報１２０１を取得する（ステップ９０２）。なお、定義済みコマンド情報１２０１は、引数種別と操作種別が定義済みのコマンドの一覧であり、詳細は図１２にて説明する。
【００６８】
グループ・優先度決定部１１２は、ステップ９０１で取得した実行コマンド情報８０１に含まれる各行と、ステップ９０２で取得した定義済みコマンド情報１２０１に含まれる各行とを比較する。グループ・優先度決定部１１２は、各情報が持つジョブID同士、コマンド同士を比較し、双方が一致する行があった場合、当該行を実行コマンド情報８０１から除外する。これにより、以後のステップでは、操作種別が定義済みでないコマンドのみを対象にグループ化、優先度付与が行われる。（ステップ９０３）
【００６９】
グループ・優先度決定部１１２は、実行コマンド情報８０１の実行コマンド８０３に格納されている各コマンドのグループ化を行う（ステップ９０４）。ここでのグループ化では、各コマンドの引数の内容に基づいて、各コマンドの属するグループが決定される。具体的には同一名の引数を含むコマンドは同一グループに属すものと決定される。例えば、コマンド”rm x.txt”は引数”x.txt”というグループに属すと決定される。また、コマンド“cat x.txt y.txt”は、”x.txt”グループと”y.txt”グループに属すると決定される。
【００７０】
グループ・優先度決定部１１２は、ステップ９０４で生成した各コマンドグループにて、グループに含まれるコマンドの数が少ない順に優先度を付与する（ステップ９０５）。例えば、x.txt、y.txt、z.txtを引数にとるコマンドがそれぞれ2個、3個、4個であった場合、x.txtグループに最も高い優先度を、z.txtグループに最も低い優先度を付与する。これは以下の理由による。
【００７１】
本実施例に係るジョブネット検証装置は、ジョブが実行するコマンドの引数に指定されたリソースについて、ジョブネット実行時に競合が発生し得るか検証する。この検証のために、ユーザはリソースの操作種別を指定（定義）する必要がある。x.txtの検証を開始、完結させるためには、ユーザは2個のコマンドについて引数種別と操作種別を定義すれば良い。一方z.txtの検証を開始、完結させるためには、ユーザは4個のコマンドについて引数種別と操作種別を定義しなければならない。したがって、x.txtに関するコマンドから、引数種別と操作種別の定義を始めれば、より早く検証を開始、完結させることができる。よって本実施例では、グループに含まれるコマンド数が少ない順に優先度を付与している。
【００７２】
続いてグループ・優先度決定部１１２は、ユーザ入力用コマンド定義表生成部１１３を実行することによって、ステップ９０４およびステップ９０５で決定したグループと優先度に基づき、ユーザ入力用コマンド定義表１００１を生成する（ステップ９０６）。
【００７３】
なお、本実施例では引数名を基準としたグループ・優先度決定を行っているが、グループ化のための基準はこれに限られない。例えばジョブを基準としたグループを作成するようにしてもよい。 
【００７４】
図１０は、本実施例におけるユーザ入力用コマンド定義表の例である。ユーザ入力用コマンド定義表１００１は、コマンドが取る引数の種別と、引数に対する操作の種別をユーザに入力してもらうための表である。ユーザ入力用コマンド定義表１００１には、グループ・優先度決定部１１２が決定したグループ１００２、定義対象とするコマンド１００３、当該コマンドが取る引数１００４が、ユーザ入力用コマンド定義表生成部１１３により自動で入力される。また各グループは、グループ・優先度決定部１１２が決定した優先度によって、優先度が高いグループほどユーザ入力用コマンド定義表１００１の上に位置し、低いほど下に位置するように、配置される。
【００７５】
なお、各グループにコマンドが重複して属することもある。たとえばコマンド“cat x.txt y.txt”は、”x.txt”グループと”y.txt”グループに属する。ただしユーザ入力用コマンド定義表１００１には、コマンドを重複して配置させる必要はない。そのためコマンドが複数のグループに属する場合、ユーザ入力用コマンド定義表生成部１１３がそのコマンドをユーザ入力用コマンド定義表１００１に配置する際、優先度の高いグループにのみ配置する。
【００７６】
ユーザ入力用コマンド定義表１００１が生成されると、ユーザは、各コマンド１００３の各引数１００４に対し、引数種別１００５および操作種別１００６に情報を入力する。引数種別１００５は、引数１００４の種別を表す情報であり、ユーザは引数種別１００５に情報を入力する際、「リソース」または「リソース以外」のいずれかの情報を設定する。操作種別１００６は引数１００４に対して行われる操作の種類を表す情報であり、“ＣＲＥＡＴＥ”、“ＲＥＡＤ”、“ＵＰＤＡＴＥ”、“ＤＥＬＥＴＥ”のいずれかが操作種別１００６に設定される。
【００７７】
なお、本実施例におけるコマンド定義表は、ジョブが実際に実行するコマンドの引数に対して、引数種別１００５および操作種別１００６が指定されるものだが、コマンド定義表の内容や形式は、これに限定されない。引数に指定されたリソースに対してコマンドが実行するリソース操作の種別が定義された情報であればよい。例えば、コマンド定義表を、実際に実行されるコマンドでなく、より一般化しコマンド自体の定義を入力する表としてもよい。また本実施例では一例として、リソースがファイルである例を説明するが、引数で指定されるリソースはファイル以外のリソースでも良い。
【００７８】
図１１は、本実施例におけるジョブネット検証装置２０１の表示装置２０５に表示されるコマンド定義表作成画面の例である。コマンド定義表作成画面１１０１は、コマンド定義表入力部１１４がユーザに提示する画面であり、ユーザからユーザ入力用コマンド定義表１００１に対する入力を受け付けるための画面である。
【００７９】
コマンド定義表作成画面１１０１は、コマンド定義タブ１１０２および検証結果タブ１１０３を含む。コマンド定義タブ１１０２は、グループ・優先度決定部１１２が生成したユーザ入力用コマンド定義表１００１への情報入力を行うための画面であり、ユーザ入力用コマンド定義ウィンドウ１１０４、表更新ボタン１１０６、検証ボタン１１０７を含む。検証結果タブ１１０３は、検証結果を確認するための画面であり、検証結果１０４を、例えば図１９に示す表形式で表示する。
【００８０】
コマンド定義タブ１１０２では、ユーザは引数種別と引数への操作種別を、プルダウンリスト１１０５から選択することで、ユーザ入力用コマンド定義表１００１に対する入力を行う。
【００８１】
ユーザが表更新ボタン１１０６を押下することで、グループ・優先度決定部１１２およびユーザ入力用コマンド定義表生成部１１３が実行される。これにより、コマンドに対するグループ、優先度の決定（または再決定）が行われ、生成されたユーザ入力用コマンド定義表１００１の内容を反映したユーザ入力用コマンド定義ウィンドウ１１０４が、表示装置２０５に表示される。
【００８２】
ユーザ入力用コマンド定義ウィンドウ１１０４の表示の際、コマンド定義表入力部１１４はユーザ入力用コマンド定義ウィンドウ１１０４に表示される情報と同じ情報を格納した表を、たとえばメモリ２０３上に作成する。ここで作成される表を、最新版コマンド定義表１１０４’と呼ぶ。なお、ユーザ入力用コマンド定義ウィンドウ１１０４上で、引数種別または操作種別がまだ指定されていない箇所があっても、ユーザは表更新ボタン１１０６を押下してもよい。ユーザ入力用コマンド定義ウィンドウ１１０４に表示される情報のうち、引数種別と操作種別がまだ指定されていないコマンドの引数、或いは引数種別が“リソース以外”のコマンドの引数に関する情報は、最新版コマンド定義表１１０４’に反映されない。
【００８３】
なお、本実施例では、ユーザが表更新ボタン１１０６を押下したことに応じて表更新が開始される例を説明しているが、表更新の開始される契機はこれに限定されない。たとえば適当な時間間隔や特定のイベントをトリガとし、グループ・優先度決定部１１２およびユーザ入力用コマンド定義表生成部１１３が実行されるようにしてもよい。また、表更新ボタン１１０６が押下されることで実行される機能ブロック（グループ・優先度決定部１１２、ユーザ入力用コマンド定義表生成部１１３）とコマンド定義表入力部１１４のセットのことを「コマンド定義表作成部」と呼ぶこともある。
【００８４】
一方、ユーザが検証ボタン１１０７を押下すると、コマンド定義表更新検出部１１５、コマンド定義表更新通知部１１６、検証範囲特定部１１７および部分的検証実行部１１８が実行される。なお、検証ボタン１１０７が押下されることで実行される機能ブロック（コマンド定義表更新検出部１１５、コマンド定義表更新通知部１１６、検証範囲特定部１１７、部分的検証実行部１１８）のセットのことを「リソース競合検証部」と呼ぶこともある。
【００８５】
本実施例では、ユーザが検証ボタン１１０７を押下し、それに応じて検証が開始される例を説明しているが、適当な時間間隔や特定のイベントをトリガとし、コマンド定義表更新検出部１１５、コマンド定義表更新通知部１１６、検証範囲特定部１１７および部分的検証実行部１１８が実行されるようにしてもよい。
【００８６】
なお、本実施例に係るジョブネット検証装置２０１は、コマンド定義表更新検出部１１５、コマンド定義表更新通知部１１６、検証範囲特定部１１７あるいは部分的検証実行部１１８の実行と並行して、ジョブネット解析部１１１、あるいはグループ・優先度決定部１１２やユーザ入力用コマンド定義表生成部１１３を実行することもできる。そのためユーザは、部分的検証実行部１１８等によってジョブネットの検証が行われている間に、並行してジョブネット定義１０１の更新を行ってもよい。
【００８７】
あるいはユーザは、ジョブネットの検証が行われている間に、新たなユーザ入力用コマンド定義ウィンドウ１１０４（及び最新版コマンド定義表１１０４’）の作成を、ジョブネット検証装置２０１上で行うこともできる。これによりユーザは、ユーザ入力用コマンド定義ウィンドウ１１０４への情報入力（引数種別や操作種別の入力）を部分的に行った時点でジョブネット検証装置２０１にジョブネットの検証を行わせ、並行して、ユーザ入力用コマンド定義ウィンドウ１１０４に対して、未設定の箇所の情報入力を行うことができる。
【００８８】
ユーザが定義すべきコマンドは、案件が異なれば利用製品も異なるため、検証対象とするジョブネットが変われば、定義すべきコマンドも変わる。すなわち、コマンド定義表は、検証対象とするジョブネットごと，開発案件ごとに作成する必要がある。
【００８９】
図１２は、本実施例における定義済みコマンド保持部１２２に格納される定義済みコマンド情報の例である。コマンドの定義はコマンド定義表入力部１１４を通じてユーザが入力する。ユーザに入力された情報は、定義済みコマンド情報１２０１として表形式で保持する。定義済みコマンド情報１２０１には、どのジョブが、どのようなコマンドを実行するのか、についての情報が、ジョブID１２０２、コマンド１２０３に保持される。更に、各コマンドに指定される引数、各引数の種別、各引数に対して行われる操作についての情報が、引数１２０４、引数種別１２０５、操作種別１２０６に格納される。なお、本実施例では、ユーザの入力により、引数種別が“リソース以外”と定義された引数の情報は、定義済みコマンド情報１２０１には含まれない。
【００９０】
図１３は、本実施例におけるコマンド定義更新差分保持部１２３に格納されるコマンド定義更新差分情報の例である。コマンド定義更新差分情報１３０１は、最新のコマンド定義表が持つ情報と、定義済みコマンド保持部１２２に保持されている情報との差分にあたる。すなわち、コマンド定義更新差分情報１３０１とは、定義済みコマンド保持部１２２には保持されていないが、最新版コマンド定義表１１０４’には保持されている情報を指す。本実施例に係るジョブネット検証装置２０１はコマンド定義更新差分情報１３０１を、図１２に示す定義済みコマンド情報１２０１と同じ表形式で保持する。
【００９１】
図１４は、本実施例におけるコマンド定義表更新検出部の処理手順例を示すフローチャートである。
【００９２】
以下に示す処理は、ジョブネット検証装置２０１の備えるＣＰＵ２０２が、メモリ２０３に格納されたプログラムを実行することによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【００９３】
コマンド定義表更新検出部１１５は、コマンド定義表入力部１１４から最新版コマンド定義表１１０４’を取得する。（ステップ１４０１）
【００９４】
コマンド定義表更新検出部１１５は、続けて定義済みコマンド保持部１２２から、定義済みコマンド情報１２０１を取得する。（ステップ１４０２）
【００９５】
コマンド定義表更新検出部１１５は、ステップ１４０１で取得した最新版コマンド定義表１１０４’と、ステップ１４０２で取得した定義済みコマンド情報１２０１とを比較し、その差分に相当するコマンドを、コマンド定義更新差分情報１３０１として生成する。例えば、最新版コマンド定義表１１０４’と、定義済みコマンド情報１２０１を取得した場合、コマンド”ls -l /work/y.txt /work/z.txt”に対する定義は、定義済みコマンド情報１２０１には存在しないが、最新版コマンド定義表１１０４’には存在するため、当該コマンドの定義情報を、コマンド定義更新差分情報１３０１として生成する。（ステップ１４０３）
【００９６】
コマンド定義表更新検出部１１５は、ステップ１４０３で取得したコマンド定義更新差分情報１３０１を、定義済みコマンド保持部１２２に追記する。（ステップ１４０４）
【００９７】
更にコマンド定義表更新検出部１１５は、ステップ１４０３で取得したコマンド定義更新差分情報１３０１で、コマンド定義更新差分保持部１２３の情報を置換する。（ステップ１４０５）
【００９８】
なお、検証対象のジョブネット定義に対して初めて検証が行われる場合、定義済みコマンド保持部１２２には定義済みコマンド情報１２０１が存在しない。ステップ１４０２でコマンド定義表更新検出部１１５は、定義済みコマンド情報１２０１が存在しないことを検知した場合、ステップ１４０３は実行しない。またこの時、コマンド定義表更新検出部１１５は、ステップ１４０４では最新版コマンド定義表１１０４’の内容をコマンド定義更新差分情報１３０１として、定義済みコマンド保持部１２２に格納し、またステップ１４０５では、最新版コマンド定義表１１０４’の内容をコマンド定義更新差分保持部１２３に格納する。
【００９９】
図１５は、本実施例におけるコマンド定義表更新通知部の処理手順例を示すフローチャートである。
【０１００】
以下に示す処理は、ジョブネット検証装置２０１の備えるＣＰＵ２０２が、メモリ２０３に格納されたプログラムを実行することによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【０１０１】
コマンド定義表更新通知部１１６は、定義済みコマンド保持部１２２から、定義済みコマンド情報１２０１を取得する。（ステップ１５０１）
【０１０２】
コマンド定義表更新通知部１１６は、コマンド定義更新差分保持部１２３から、コマンド定義更新差分情報１３０１を取得する。（ステップ１５０２）
【０１０３】
最後にステップ１５０３でコマンド定義表更新通知部１１６は、ステップ１５０１およびステップ１５０２で取得した情報を、検証範囲特定部１１７に通知する。
【０１０４】
図１６は、本実施例における検証範囲特定部の処理手順例を示すフローチャートである。
【０１０５】
以下に示す処理は、ジョブネット検証装置２０１の備えるＣＰＵ２０２が、メモリ２０３に格納されたプログラムを実行することによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【０１０６】
先に述べたとおり、検証範囲特定部１１７はコマンド定義表更新通知部１１６から、定義済みコマンド情報１２０１と、コマンド定義更新差分情報１３０１を受領する。これに応じて図１６の処理が開始される。
【０１０７】
検証範囲特定部１１７は、コマンド定義更新差分情報１３０１に含まれる各行（コマンド）に対し、ステップ１６０２以降の処理を適用する。まずコマンド定義更新差分情報１３０１に、ステップ１６０２以降の処理を適用していない行が残っているかを確認する。（ステップ１６０１）
【０１０８】
検証範囲特定部１１７は、未処理の行が残っている場合には、コマンド定義更新差分情報１３０１から未処理の行を一つ選択する。（ステップ１６０２）
【０１０９】
検証範囲特定部１１７は、続いてステップ１６０２で選択した行に記述されたコマンドが操作する各引数（引数１３０４に記録されている引数）に対し、ステップ１６０４以降の処理を適用する。よって、ステップ１６０２で選択された行の引数１３０４に、ステップ１６０４以降の処理を適用していない引数が残っているか確認する。（ステップ１６０３）
【０１１０】
検証範囲特定部１１７は、未処理の引数が残っている場合には、未処理の引数を一つ選択する。（ステップ１６０４）
【０１１１】
ステップ１６０５で検証範囲特定部１１７は、ステップ１６０４で選択した引数と同名の引数を有するコマンドの定義情報を、同名引数操作コマンド情報として、定義済みコマンド情報１２０１から抽出する。具体的には検証範囲特定部１１７は、定義済みコマンド情報１２０１の行の中から、引数１２０４に、ステップ１６０４で選択した引数と同名の引数が含まれている行を抽出する。
【０１１２】
ステップ１６０６で検証範囲特定部１１７は、ステップ１６０２で選択した行の情報およびステップ１６０５で抽出した同名引数操作コマンド情報を簡略化した情報を生成する。具体的には検証範囲特定部１１７は、検証時に必要となるジョブID、引数名、引数に対する操作種別の三つ組を生成する。ここで生成された情報を「リソース操作情報」と呼ぶ。また、ステップ１６０２で選択された行の情報を簡略化して生成されるリソース操作情報は、「更新差分情報のリソース操作情報」と呼び、一方同名引数操作コマンド情報から生成されるリソース操作情報は、「定義済みコマンドのリソース操作情報」と呼ぶ。なお本実施例では、このリソース操作情報を、＜ジョブＩＤ，引数名，引数の操作種別＞という形式で表記する。リソース操作情報の例については後述する。
【０１１３】
検証範囲特定部１１７は、更新差分情報のリソース操作情報と、定義済みコマンドのリソース操作情報のペア（コマンドペアと呼ばれる）を作成する。（ステップ１６０７）
【０１１４】
検証範囲特定部１１７は、ステップ１６０７で作成したコマンドペアの集合を、検証範囲情報として保持する。（ステップ１６０８）
【０１１５】
ここでステップ１６０２〜ステップ１６０８の処理の具体例を、図１２に記載された定義済みコマンド情報１２０１と、図１３に記載されたコマンド定義更新差分情報１３０１の例を用いて説明する。例えば、ステップ１６０２にて、検証範囲特定部１１７がコマンド定義更新差分情報１３０１から、コマンド１３０３が”ls -l /work/y.txt /work/z.txt”の行を選択し、ステップ１６０４にてこの行の中から引数”/work/y.txt”を選択した場合を考える。この場合、ステップ１６０５では検証範囲特定部１１７は定義済みコマンド情報１２０１から、コマンド１２０３が”sort /work/x.txt /work/y.txt -o /work/z.txt”と”rm /work/x.txt /work/y.txt”の行を抽出する。
【０１１６】
その後、ステップ１６０６では検証範囲特定部１１７は、ステップ１６０２及びステップ１６０５で得られた情報から、ジョブID、引数名、引数に対する操作種別の三つ組であるリソース操作情報を生成する。たとえばステップ１６０２で得られた行からは、<JobE, /work/y.txt, READ>が生成される。これが更新差分情報のリソース操作情報である。一方、ステップ１６０５で得られた同名引数操作コマンド情報からは、定義済みコマンドのリソース操作情報として、<JobE, /work/y.txt, READ>, <JobH, /work/y.txt, DELETE>が得られる。
【０１１７】
そのためステップ１６０７では、更新差分情報のリソース操作情報と定義済みコマンドのリソース操作情報のペアとして、２つのペア
(<JobE, /work/y.txt, READ>, <JobE, /work/y.txt, READ>)と, 
(<JobE, /work/y.txt, READ>, <JobH, /work/y.txt, DELETE>)
が作成される。検証範囲特定部１１７はこの２つのコマンドペアを検証範囲情報として保持する（ステップ１６０８）。
【０１１８】
なお本実施例では、リソース操作情報（ジョブID、引数、操作種別の三つ組）のペアを検証範囲情報として保持しているが、ジョブID、引数、操作種別の三つ組のペアを特定可能な情報が含まれているものであれば、それを検証範囲情報として用いることができる。
【０１１９】
検証範囲特定部１１７は、ステップ１６０８の後、再度未処理の引数が残っていないかを確認し（ステップ１６０３）、残っている場合にはステップ１６０４以降を繰り返す。全引数に対し処理を行った場合には、コマンド定義更新差分情報１３０１に、未処理のコマンドが残っていないか再度確認する（ステップ１６０１）。未処理のコマンドが残っている場合にはステップ１６０２以降を繰り返す。未処理の引数が残っていない場合には、ステップ１６０８で作成した検証範囲情報を、部分的検証実行部１１８に通知する。（ステップ１６０９）
【０１２０】
図１７は、本実施例における不具合パターン保持部に格納される不具合パターン情報の例である。不具合パターン情報１７０１は、同一のリソースにアクセスする２つのジョブが実行された時に不具合（エラー）が発生し得るリソース操作の組み合わせに関する情報である。不具合パターン情報１７０１は、不具合パターン名１７０２、リソース操作種別（１）１７０３、and/or１７０４、リソース操作種別（２）１７０５のカラムを有する表である。
【０１２１】
リソース操作種別（１）１７０３とリソース操作種別（２）１７０５には、不具合が発生し得るリソース操作の種類が格納される。不具合パターン名１７０２には、発生し得る不具合の種類（名称）が格納される。またand/or１７０４は、リソース操作種別（１）１７０３とリソース操作種別（２）１７０５で特定される２つの操作が同時に成立すべきか、何れかが成立すべきかを表す情報である。and/or１７０４にａｎｄが格納されている場合、リソース操作種別（１）１７０３とリソース操作種別（２）１７０５で特定される２つの操作が同時に成立すると、不具合パターン名１７０２に格納されている種類の不具合が発生することを意味する。
【０１２２】
図１７の例では、不具合パターン名１７０２が「不在リソースへのアクセス」の行のリソース操作種別（１）１７０３とリソース操作種別（２）１７０５にはそれぞれ、“ＤＥＬＥＴＥ”、“ｎｏｔ  ＣＲＥＡＴＥ”が格納されている。またand/or１７０４にａｎｄが格納されている。これは、リソースの削除（ＤＥＬＥＴＥ）を行うジョブ（これを仮に「ＪｏｂＡ」とする）と、リソース作成以外の操作（ｎｏｔ  ＣＲＥＡＴＥ）を行うジョブ（これを仮に「ＪｏｂＢ」とする）が並行実施された場合、ジョブ（特にＪｏｂＢ）が、存在しないリソースにアクセスする可能性があることを意味する。
【０１２３】
たとえばＪｏｂＡがリソース削除を行った直後に、ＪｏｂＢがそのリソースに対する操作（たとえばリソース読み出し（ＲＥＡＤ），リソースの更新（ＵＰＤＡＴＥ）である）を行おうとすると、対象のリソースが削除されている為、エラーが発生する。不具合パターン情報１７０１にはこのように、不具合（リソース競合）が発生し得るリソース操作の組み合わせに関する情報が１つ以上格納される。
【０１２４】
不具合パターン情報１７０１は、あらかじめジョブネット検証装置２０１が保持している情報である。たとえばジョブネット検証装置２０１が実行するプログラムに不具合パターン情報１７０１がコーディングされているとよい。ただし別の実施形態として、利用製品コマンド一覧１０３等と同様に、ユーザがジョブネット検証を行う際に、不具合パターン情報１７０１をジョブネット検証装置２０１に入力するようにしてもよい。
【０１２５】
図１８は、本実施例における部分的検証実行部の手順例を示すフローチャートである。
【０１２６】
以下に示す処理は、ジョブネット検証装置２０１の備えるＣＰＵ２０２が、メモリ２０３で実行するプログラムによって実現される。そしてこのプログラムは、以下に説明される各種の動作を行うためのコードから構成されている。
【０１２７】
部分的検証実行部１１８は、解析結果保持部１２１からジョブ実行順序情報７０１を取得し、これを１つのグラフに統合したコールグラフを生成する。（ステップ１８０１）
【０１２８】
部分的検証実行部１１８は、検証範囲特定部１１７から通知された検証範囲情報に含まれる各コマンドペアに対し、ステップ１８０３以降の処理を適用する。したがって、検証範囲情報に、未処理のコマンドペアが残っているかを確認する。（ステップ１８０２）
【０１２９】
部分的検証実行部１１８は、未処理のコマンドペアが残っている場合には、検証範囲情報から未処理のコマンドペアを一つ選択する。（ステップ１８０３）
【０１３０】
部分的検証実行部１１８は、ステップ１８０３で選択したコマンドペアが実行するリソース操作種別が、不具合パターン保持部１２４に格納された不具合パターンに合致するか判定を行う。（ステップ１８０４）
【０１３１】
部分的検証実行部１１８は、ステップ１８０４における判定の結果、不具合パターンに合致しない場合には、リソース競合が発生しないと判断し、ステップ１８０２を再実行する。不具合パターンに合致する場合には、部分的検証実行部１１８はステップ１８０３で選択したコマンドペアが並行実行され得るかを判定する（ステップ１８０５）。これは、各コマンドを実行するジョブについて、ステップ１８０１で生成したコールグラフ上で、いずれか一方のジョブからもう一方のジョブに到達できるか否かを判定することで実現できる。
【０１３２】
コールグラフの例を図２０に示す。図２０のコールグラフ上で、２つのジョブ（たとえばＪｏｂＣとＪｏｂＥ）が並行実行され得るか判定する場合、部分的検証実行部１１８は一方のジョブ（たとえばＪｏｂＣ）を起点として深さ方向に探索を行うことで、ＪｏｂＥに到達することが可能か判定する。図２０の場合、ＪｏｂＣから深さ方向（リーフノードの方向）にグラフを辿っていくとＪｏｂＥに到達できる。この場合、ＪｏｂＥはＪｏｂＣの後に実行されるという順序関係がジョブネット定義に定義されていることを意味する。そのため部分的検証実行部１１８は、ＪｏｂＥとＪｏｂＣは並行実行されることはないと判断する。
【０１３３】
一方ＪｏｂＣとＪｏｂＨは、並行実行され得るジョブである。ＪｏｂＣから深さ方向にグラフを辿ってもＪｏｂＨに到達せず、あるいはＪｏｂＨから深さ方向にグラフを辿っても、ＪｏｂＣに到達しないからである。そのためこの場合、部分的検証実行部１１８は、ＪｏｂＣとＪｏｂＨは並行実行され得ると判断する。なおコールグラフ上でのジョブ間の到達可能性はこれ以外の方法で判定されてもよい。たとえばグラフを隣接行列として表現し、隣接行列のべき乗を計算することでも実現できる。
【０１３４】
また、ステップ１８０３で選択したコマンドペアに登録されているジョブが同じ場合もある。たとえば先に説明した検証範囲特定部１１７の処理（ステップ１６０７の処理）で、(<JobE, /work/y.txt, READ>, <JobE, /work/y.txt, READ>)というコマンドペアが作成される例を説明した。本実施例では、ジョブＩＤが同じコマンドペアについては、部分的検証実行部１１８はステップ１８０５で、並行実行されることはないと判定する。本実施例に係るジョブネット検証装置２０１は、ジョブ間で発生し得るリソース競合の検出を目的としており、ジョブ内で発生し得るリソース競合は検出対象外だからである。
【０１３５】
部分的検証実行部１１８は、ステップ１８０５における判定の結果が到達可能であった場合、リソース競合が発生しないと判断し、ステップ１８０２を再実行する。到達不可能であった場合には、不具合パターンに合致し、並行実行し得るコマンドペアである。よって部分的検証実行部１１８は、当該コマンドペアはリソース競合を生じ得ると判断し、発生し得る不具合パターン、リソース競合が発生するリソース、リソース競合を発生させる２つのジョブに関する情報を検証結果１０４に記録する。（ステップ１８０６）
【０１３６】
部分的検証実行部１１８は、ステップ１８０６の後、再度未処理のコマンドペアが残っていないかを確認し（ステップ１８０２）、残っている場合にはステップ１８０３以降を繰り返す。全コマンドペアに対し処理が行われた場合には、部分的検証実行部１１８は保持している検証結果１０４を表示装置２０５に出力する。（ステップ１８０７）
【０１３７】
例えば、検証範囲特定部１１７から、以下の２つのコマンドペア
(<JobE, /work/y.txt, READ>, <JobE, /work/y.txt, READ>)と, 
(<JobE, /work/y.txt, READ>, <JobH, /work/y.txt, DELETE>)
が通知された場合を考える。前者のコマンドペアは、操作種別がREAD, READであり、不具合パターン情報１７０１の何れにも合致しない。よって、当該コマンドペアによってリソース競合は発生しえないと判断される。また、後者のコマンドペアは、不具合パターン情報１７０１に合致する。また、ジョブネット定義４０２に従えば、ジョブEおよびジョブHは並行実行し得る。したがって、当該コマンドペアは、リソース競合を発生し得ると判断され、部分的検証実行部１１８はこのコマンドペアの情報を検証結果１０４に記録する。
【０１３８】
なお、本実施例では、２つのリソース操作コマンドのペアに着目する検証方法を用いたが、ジョブ実行順序情報、実行コマンド情報、コマンド定義表に含まれる情報を用いた、いかなる検証方法を用いてもよい。
【０１３９】
図１９は、本実施例における検証結果の例である。検証結果１０４には、検証対象としたジョブネットで発生し得るリソース競合の情報が含まれる。具体的には、発生し得る不具合パターン名１９０２、リソース競合の対象となるリソース名１９０３とリソース種別１９０４が含まれる。また、リソース競合を引き起こす２つのジョブそれぞれについて、ジョブID１９０５、リソース競合を引き起こすコマンド１９０７、当該コマンドの操作種別１９０８が含まれる。
【０１４０】
以上が、本実施例に係るジョブネット検証装置及びジョブネット検証装置で実行されるジョブ検証方法の説明である。本実施例に係るジョブネット検証装置は、ジョブの実行順序に相当するジョブネット定義、ジョブが実行するプログラムのソースコード、検証対象のジョブネットが実行されるシステムで利用される製品（プログラム群）が持つコマンド一覧を入力として受け付ける。ジョブネット検証装置はこれらを解析することで、ジョブの実行順序と、ジョブが実行するコマンドの情報を獲得する。更にジョブネット検証装置は、ジョブが実行する各コマンドの各引数がリソースであるか否か、そして引数がリソースである場合に当該引数（リソース）に対して行われる操作の種類についての情報をユーザに入力させ、コマンド定義表を生成する。そしてジョブネット検証装置は、ジョブ実行順序、実行コマンド、コマンド定義表の情報を用い、ジョブネットの実行時にリソース競合が発生し得るかを検証する。
【０１４１】
また、上記ジョブネット検証の際に、ジョブネット検証装置は同一リソースに対する操作を実行する２つのコマンドの組み合わせ（コマンドペア）を全通り列挙し、全てのコマンドペアについて、当該コマンドペアが実行するリソース操作種別が不具合パターンに一致するか否か、そして当該コマンドペアが並行実行されるか否か、の双方を判定する。これにより、ジョブネット実行時に発生し得るリソース競合を、網羅的にチェックすることができる。その結果、検出したリソース競合への対策を通じて、システム停止による事故を防止できるようになる。
【０１４２】
さらにジョブネット検証装置は検証を行う前に、過去のある時点でのコマンド定義表である旧コマンド定義表と、現時点でのコマンド定義表である新コマンド定義表とを比較し、その差分から、新たに操作種別が定義されたコマンドの一覧であるコマンド定義更新差分情報を作成する。そして、コマンド定義更新差分情報に含まれるコマンドと同一リソースにアクセスするコマンドを、上記旧コマンド定義表から定義済みコマンド情報として抽出する。そして、上記コマンド定義更新差分情報と、上記定義済みコマンド情報から、同一リソースにアクセスするコマンドのペアを全通り作成し、これを検証範囲とした上で、ジョブネット検証を行う。これにより、新たに定義されたコマンドに対してのみ検証を行う、部分的検証が可能になる。
【０１４３】
また本実施例に係るジョブネット検証装置では、一部の情報だけが定義済みであるコマンド定義表に対してもジョブネット検証が実行できる。その結果、コマンド定義表を部分的に作成し、検証を開始した後、検証実行と並行してコマンド定義表の作成を再開できるようになる。これにより、コマンド定義表を完成させてから検証を実行する場合と比べ、コマンド定義表作成開始から検証終了までにかかる時間を短縮させることができる。
【０１４４】
また、上記コマンド定義表に含まれるコマンドに対し、コマンドをグループ化し、各グループに対して、操作種別を定義する順序に対する優先度を付与する。そして、決定されたコマンドグループ、優先度にしたがって、ユーザが各コマンドの操作種別を入力するためのコマンド定義表を作成する。これにより、ユーザがコマンドの定義を入力する際に、早期に検証を開始できるようコマンド定義の入力順序を示唆でき、ユーザがコマンド定義表に示唆される優先順位にしたがってコマンド定義を入力することで、検証効率を向上させることができる。
【０１４５】
以上、本発明の実施例を説明してきたが、これらは、本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施する事が可能である。たとえば上で述べた実施例では、ジョブネット解析部や部分的検証実行部等の機能ブロックが、汎用的な計算機のプロセッサでプログラムが実行されることにより実現される機能ブロックである例を説明したが、別の実施形態として、ジョブネット検証装置の一部または全ての機能ブロックが、ＦＰＧＡやＡＳＩＣ等のハードウェアで実装されていてもよい。
【符号の説明】
【０１４６】
１１１：ジョブネット解析部、  １１２：グループ・優先度決定部、  １１３：ユーザ入力用コマンド定義表生成部、  １１４：コマンド定義表入力部、  １１５：コマンド定義表更新検出部、  １１６：コマンド定義表更新通知部、  １１７：検証範囲特定部、  １１８：部分的検証実行部、  １２１：解析結果保持部、  １２２：定義済みコマンド保持部、  １２３：コマンド定義更新差分保持部、  １２４：不具合パターン保持部
【図１】
0006576873.tif 000002
【図２】
0006576873.tif 000003
【図３】
0006576873.tif 000004
【図４】
0006576873.tif 000005
【図５】
0006576873.tif 000006
【図６】
0006576873.tif 000007
【図７】
0006576873.tif 000008
【図８】
0006576873.tif 000009
【図９】
0006576873.tif 000010
【図１０】
0006576873.tif 000011
【図１１】
0006576873.tif 000012
【図１２】
0006576873.tif 000013
【図１３】
0006576873.tif 000014
【図１４】
0006576873.tif 000015
【図１５】
0006576873.tif 000016
【図１６】
0006576873.tif 000017
【図１７】
0006576873.tif 000018
【図１８】
0006576873.tif 000019
【図１９】
0006576873.tif 000020
【図２０】
0006576873.tif 000021