以下実施の形態を、図面を参照して説明する。以下の説明では、コンピュータなどの製品について障害が発生した場合に、ユーザへの対応を行うサポートセンタにおける対応履歴を対象とする。
以下で使用する用語について説明する。「対応」とは、機器の障害に対し、当該障害を解決するために行う何らかの作業や処理をいう。「対応記事」とは、対応の内容を記録したものをいう。「対応手順」とは、対応に含まれる複数の作業や処理を時系列に並べたものをいう。「対応手順」は「作業手順」、「処理手順」、「作業フロー」、「処理フロー」ともいう。「障害記事」とは、製品に発生した障害の内容を記録したものをいう。「対応履歴」とは、対応記事と障害記事との組をいう。
図1は情報処理システムの構成例を示す説明図である。情報処理システムは生成装置1、データベースサーバ2及びサポートセンタ3を含む。生成装置1、データベースサーバ2及びサポートセンタ3はネットワークNにより、互いに通信可能に接続されている。
図2は生成装置1のハードウェア構成例を示すブロック図である。生成装置1はCPU(Central Processing Unit)11、ROM(Read Only Memory)12、RAM(Random Access Memory)13、大容量記憶部14、通信部15、及び読み取り部16を含む。各構成はバスBで接続されている。
CPU11はROM12に記憶された制御プログラム(生成プログラム)1Pにしたがい、ハードウェア各部を制御する。RAM13は例えばSRAM(Static RAM)、DRAM(Dynamic RAM)又はフラッシュメモリである。RAM13はCPU11によるプログラムの実行時に発生するデータを一時的に記憶する。
大容量記憶部14は、例えばハードディスク又はSSD(Solid State Drive)などである。大容量記憶部14は各種データを記憶する。制御プログラム1Pを大容量記憶部14に記憶してもよい。通信部15はネットワークを介して、他のコンピュータと通信を行う。読み取り部16はCD(Compact Disc)−ROM及びDVD(Digital Versatile Disc)−ROMを含む可搬型記憶媒体1aを読み取る。CPU11が読み取り部16を介して、制御プログラム1Pを可搬型記憶媒体1aより読み取り、大容量記憶部14に記憶してもよい。また、ネットワーク等を介して他のコンピュータからCPU11が制御プログラム1Pをダウンロードし、大容量記憶部14に記憶してもよい。さらにまた、半導体メモリ1bから、CPU11が制御プログラム1Pを読み込んでもよい。
次にデータベースサーバ2が記憶しているデータベース(DB:DataBase)について説明する。図3は対応履歴DB21のレコードレイアウト例を示す説明図である。対応履歴DB21は、障害に対して、実際にサポートセンタ3のオペレータが案内した対応手順を記憶するデータベースである。対応履歴DB21は履歴ID列、障害記事列及び対応記事列を含む。履歴ID列は対応履歴の1案件を一意に特定する履歴IDを記憶する。障害記事列は障害の内容を記憶する。対応記事列は障害に対して、サポートセンタ3のオペレータが案内した、又は実施した内容を時系列に記述したものを記憶する。
図4は対応手順DB22のレコードレイアウト例を示す説明図である。対応手順DB22は対応履歴の対応記事から抽出した処理名を記憶するデータベースである。対応手順DB22は履歴ID列、実施順序列、及び処理名列を含む。履歴ID列は履歴IDを記憶する。実施順列は各処理の実施順序を示す序数を記憶する。処理名列は処理内容を示す処理名を記憶する。処理名は、文字列又はフレーズである。ここでいうフレーズとは、目的語と動詞とを組み合わされた2語以上の語を含む表現である。なお、処理名Startは実施順序の最初を示す。処理名Endは実施順序の最後を示す。
図5は処理遷移DB23のレコードレイアウト例を示す説明図である。処理遷移DB23は対応手順に出現する順序が隣接する2つの処理の組み合わせを記憶するデータベースである。処理遷移DB23は前処理名列、後処理名列、及び遷移頻度列を含む。前処理名列は順序が隣接する2つの処理(操作)のうち先に実行する処理の処理名を記憶する。後処理名列は順序が隣接する2つの処理(操作)のうち後に実行する処理の処理名を記憶する。遷移頻度列は、前処理名で特定される処理が実行された後に、後処理名で特定される処理が実行される組み合わせが出現する回数を記憶する。
図6は相違箇所DB24のレコードレイアウト例を示す説明図である。相違箇所DB24は対応履歴間で処理が相違している箇所を記憶するデータベースである。相違箇所DB24は箇所ID列、前処理列、後処理列、相違処理列、及び連続度列を含む。箇所ID列は処理の相違箇所を一意に特定可能な箇所IDを記憶する。前処理列は相違箇所直前の処理名を記憶する。後処理列は相違箇所直後の処理名を記憶する。相違処理列は相違箇所に含まれる処理名を記憶する。処理が異なるのが相違箇所であるから、相違処理列には必ず複数の処理名が記憶されている。連続度列は相違箇所における処理の連続度を記憶する。連続度の詳細については後述する。
図7は対応フローDB25のレコードレイアウト例を示す説明図である。対応フローDB25は生成装置1が生成する対応フローの構成要素を記憶するデータベースである。対応フローDB25はフローID列、ノードID列、種別列、ラベル列、次ノード列、判断1列、判断1次ノード列、判断2列、及び判断2次ノード列を含む。フローID列は対応フローを一意に特定するフローIDを記憶する。ノードID列は同一フロー内で、ノードを一意に特定するノードIDを記憶する。種別列はノードの種別を記憶する。種別は例えば、「開始」、「終了」、「処理」、「条件分岐」などである。ラベル列は各ノードに表記するテキストを記憶する。例えば、ノードの種別が「処理」の場合、ラベル列には処理名を記憶する。ノード種別が「条件分岐」の場合、ラベル列には分岐条件を記憶する。次ノード列は処理終了後の行き先ノードのノードIDを記憶する。ノードの種別によっては、次ノード列には値は記憶されない。種別を上記のように定義した場合、種別が「開始」又は「処理」のノードに対しては、次ノード列に値が記憶される。種別が「終了」又は「条件分岐」のノードに対しては、次ノード列に値は記憶されない。判断1列、判断1次ノード列、判断2列、及び判断2次ノード列は、ノードの種別が「処理分岐」の場合のみ値が記憶される。判断1列は分岐条件に対する1つ目の判断を記憶する。判断1次ノード列は判断1に合致する場合に行き先となるノードのノードIDを記憶する。判断2列は分岐条件に対する2つ目の判断を記憶する。判断2次ノード列は判断2に合致する場合に行き先となるノードのノードIDを記憶する。判断1列及び判断2列には、例えば、「Yes」又は「No」を記憶する。判断1列に「Yes」を記憶した場合には、判断2列には「No」を記憶する。判断1列に「No」を記憶した場合には、判断2列には「Yes」を記憶する。
対応履歴DB21、対応手順DB22、処理遷移DB23、相違箇所DB24、及び対応フローDB25はデータベースサーバ2に記憶されているとしたが、全部又は一部のデータベースを生成装置1の大容量記憶部14に記憶してもよい。
続いて、生成装置1が行う処理について説明する。図8は生成装置1が行う対応フロー生成処理の手順例を示すフローチャートである。CPU11は処理抽出処理を行う(ステップS1)。処理抽出処理は対応記事に含まれる処理を抽出し、対応手順DB22に記憶する処理である。CPU11は処理遷移情報生成処理を行う(ステップS2)。処理遷移情報生成処理は、対応手順DB22に記憶した対応手順から処理遷移DB23に記憶する2つの処理の組み合わせを生成する処理である。CPU11は相違箇所検出処理を行う(ステップS3)。相違箇所検出処理は2つの対応手順から相違する箇所を抽出する処理である。CPU11は連続度算出処理を行う(ステップS4)。連続度算出処理は相違箇所における2つの処理の連続度を算出する処理である。CPU11は分岐挿入判定処理を行う(ステップS5)。分岐挿入判定処理は連続度に基づき、相違箇所における複数の処理の前に分岐処理を挿入し、相違箇所における複数の処理を選択的に実行すべきか否かを判定する処理である。CPU11は分岐修正処理を行う(ステップS6)。分岐修正処理分岐挿入判定処理により挿入された分岐に分岐条件の設定などを行う。CPU11は以上の処理を経て生成した対応フローを出力する(ステップS7)。
次に、ステップS1からS6について詳細に説明する。図9は処理抽出処理の手順例を示すフローチャートである。CPU11は対応フローを生成する障害記事を1つ選択する(ステップS11)。障害記事を選択する基準は様々なものが採用可能である。例えば、外部から選択すべき障害記事の情報を受け付ける。又は、障害記事毎に対応フローが生成済みか否かのフラグを記憶しておき、対応フロー生成されていない障害記事を1つ選択する。CPU11は選択した障害記事と一致する対応履歴を対応履歴DB21で検索する(ステップS12)。CPU11は検索にヒットした対応履歴から入力とする対応記事の履歴IDを選択する(ステップS13)。CPU11は選択した履歴IDの対応記事を取得する(ステップS14)。CPU11は対応記事を解析し、処理名を「目的語+動詞」の形で、記載順に抽出する(ステップS15)。これらの処理は公知の自然言語処理技術により実現可能である。CPU11は抽出した処理名をRAM13等に設けた一時記憶領域に記憶する。記載順に並べた処理名が対応手順に相当する。対応手順の生成は、例えば、次のように行う。対応記事に含まれる(処理名で特定される)処理の任意の2つを取り出す。これを処理の組という。対応記事の構文解析から処理の組に含まれる2つの処理の実行順序を判定する。実行順序を処理に付す。すべての処理の組について、順序付けを終えたら、一の処理の組における順序が後の処理と、他の処理の組における順序が前の処理とが一致するように、処理の組を並べる。並べた処理の組に含まれる処理を順に並べて対応手順を生成する。その際、前後で一致する処理が2回出てくるので、それらは1つにまとめる。CPU11は対応手順の最初にStartを追加する(ステップS16)。CPU11は対応手順の最後にEndを追加する(ステップS17)。CPU11は対応手順を対応手順DB22に記憶する(ステップS18)。記憶するのは履歴ID、実施順序、処理名である。実施順序は対応記事における処理名の記載順により定める。CPU11は検索にヒットした対応履歴の中で未処理の履歴があるか否かを判定する(ステップS19)。CPU11は未処理の対応履歴があると判定した場合(ステップS19でYES)、処理をステップS13に戻す。CPU11は未処理の対応履歴がないと判定した場合(ステップS19でNO)、処理抽出処理を終了する。
図10は処理遷移情報生成処理の手順例を示すフローチャートである。CPU11は対応手順DB22に記憶した対応手順に含まれる履歴IDを1つ選択する(ステップS21)。CPU11はインデックスiを1に設定する(ステップS22)。CPU11は前処理名にi番目の処理名を設定する。CPU11は後処理名にi+1番目の処理名を設定する(ステップS23)。CPU11は前処理名と後処理名との組み合わせが処理遷移DB23に存在するか否かを判定する(ステップS24)。CPU11は前処理名と後処理名との組み合わせが処理遷移DB23に存在すると判定した場合(ステップS24でYES)、対応するレコードの更新頻度を1増加させる(ステップS25)。CPU11は前処理名と後処理名との組み合わせが処理遷移DB23に存在しないと判定した場合(ステップS24でNO)、処理遷移DB23に新規レコードを追加する(ステップS26)。CPU11は後処理名がEndであるか否かを判定する(ステップS27)。CPU11は後処理名がEndでないと判定した場合(ステップS27でNO)、インデックスiを1増加させる(ステップS28)。CPU11は処理をステップS23に戻す。CPU11は後処理名がEndであると判定した場合(ステップS27でYES)、未処理の履歴IDがないか否かを判定する(ステップS29)。CPU11は未処理の履歴IDがあると判定した場合(ステップS29でYES)、処理をステップS21へ戻す。CPU11は未処理の履歴IDがないと判定した場合(ステップS29でNO)、処理を終了する。なお、上述した処理抽出処理で生成した処理の組をRMA13等に記憶しておき、ステップS23、S24の処理で再利用してもよい。
図11は相違箇所検出処理の手順例を示すフローチャートである。CPU11は対応フローを生成する障害記事を1つ選択する(ステップS31)。選択方法は図9のステップS11と同様である。ここでは図8に示したように一連の処理であるから、ステップS31で選択する障害記事は、ステップS11と同じものであるとする。CPU11は選択した障害記事と一致する対応履歴を対応履歴DB21で検索する(ステップS32)。CPU11は検索ヒット件数が2件以上であるか否か判定する(ステップS33)。CPU11は検索ヒット件数が2件以上であると判定した場合(ステップS33でYES)、ヒットした対応履歴の任意の2件の組み合わせを選択する(ステップS34)。以下の説明においては、選択した履歴の一方を履歴Aといい、他方を履歴Bという。CPU11は履歴A及び履歴Bの対応手順を対応手順22DBから取得し、対応手順が完全一致するか否か判定する(ステップS35)。CPU11は対応手順が完全一致すると判定した場合(ステップS35でYES)、処理をステップS37にすすめる。CPU11は対応手順が一致しないと判定した場合(ステップS35でNO)、検出処理を行う(ステップS36)。CPU11は検索にヒットした履歴の全組み合わせについて処理をしたか否かを判定する(ステップS37)。CPU11は処理していない組み合わせがあると判定した場合(ステップS37でNO)、処理をステップS34に戻す。CPU11は全組み合わせについて処理したと判定した場合(ステップS37でYES)、相違箇所DB24に重複レコードがあれば削除する(ステップS38)。CPU11は処理を終了する。CPU11は検索ヒット件数が2件未満であると判定した場合(ステップS33でNO)、処理を終了する。
図12は検出処理の手順例を示すフローチャートである。CPU11は変数i及び変数jに1を設定する(ステップS41)。変数iは履歴の一方(履歴A)に含まれる処理手順の1つを参照するのに用いる序数である。変数jは履歴の他方(履歴B)の含まれる処理手順の1つを参照するのに用いる序数である。以下の説明において、履歴Aに含まれる処理手順のi番目の手順を、単に、履歴Aのi番目と記載する。同様に履歴Bに含まれる処理手順のj番目の手順を、単に、履歴Bのj番目と記載する。CPU11は履歴Aのi番目の処理名と、履歴Bのj番目の処理名とが一致するか否か判定する(ステップS42)。CPU11は処理名が一致しないと判定した場合(ステップS42でNO)、相違箇所DB24に新規レコードを追加する(ステップS43)。CPU11は追加レコードの前処理列に履歴Aのi−1番目の処理名を設定する(ステップS44)、CPU11は追加したレコードの相違処理列に履歴Aのi番目の処理名及び履歴Bのj番目の処理名を設定する(ステップS45)。CPU11は変数i及び変数jをそれぞれ1増加させる(ステップS46)。CPU11は履歴Aのi番目又は履歴Bのj番目の処理名がEndであるか否か判定する(ステップS47)。CPU11は履歴Aのi番目及び履歴Bのj番目の処理名がEndでないと判定した場合(ステップS47でNO)、履歴Aのi番目の処理名と履歴Bのj番目の処理名とが一致するか否かを判定する(ステップS48)。CPU11は処理名が一致しないと判定した場合(ステップS48でNO)、処理をステップS45に移す。CPU11は処理名が一致すると判定した場合(ステップS48でYES)、追加レコードの後処理列に履歴Aのi番目の処理名を設定する(ステップS49)。CPU11は変数i及び変数jをそれぞれ1増加させる(ステップS50)。CPU11は処理をステップS42に移す。CPU11は履歴Aのi番目又は履歴Bのj番目の処理名がEndであると判定した場合(ステップS47でYES)、追加レコードの後処理列にEndを設定する(ステップS51)。CPU11は処理名がEndでない履歴について、選択している手順の処理からEndの1つ前までの処理名を追加レコードの相違処理列に設定する(ステップS52)。CPU11は処理を終了する。CPU11は処理名が一致すると判定した場合(ステップS42でYES)、変数i及び変数jをそれぞれ1増加させる(ステップS53)。CPU11は履歴Aのi番目がEndであるか否かを判定する(ステップS54)。CPU11は履歴Aのi番目がEndでないと判定した場合(ステップS54でNO)、処理をステップS42に戻す。CPU11は履歴Aのi番目がEndであると判定した場合(ステップS54でYES)、処理を終了する。
図13は連続度算出処理の手順例を示すフローチャートである。CPU11は相違箇所DB24から1レコード取得する(ステップS61)。CPU11は取得した相違箇所レコードの前処理列の値を前処理列に持ち、相違箇所レコードの相違処理列の値を後処理列に持つレコードを、処理遷移DB23で検索する(ステップS62)。CPU11は検索にヒットしたレコードにおける遷移頻度を合計し、変数xに代入する(ステップS63)。CPU11は前処理列及び後処理列の値が何れも相違箇所レコードの相違処理列に含まれているレコードを処理遷移DB23で検索する(ステップS64)。CPU11は検索にヒットしたレコードにおける遷移頻度を合計し、変更yに代入する(ステップS65)。CPU11は処理連続度を算出する(ステップS66)。処理連続度はy/xである。CPU11は算出した処理連続度を選択している相違箇所レコードの連続度列に記憶する(ステップS67)。CPU11は未処理の相違箇所レコードがあるか否かを判定する(ステップS68)。CPU11は未処理の相違箇所レコードがあると判定した場合(ステップS68でYES)、処理をステップS61に戻す。CPU11は未処理の相違箇所レコードがないと判定した場合(ステップS68でNO)、処理を終了する。
図14は分岐挿入判定処理の手順例を示すフローチャートである。CPU11は対応フローDB25に新規レコードを追加し、ノードIDを1、ノード種別を開始、ノードラベルをStartに設定する(ステップS71)。選択した対応フローレコードのノードラベルと前処理とが一致するレコードを処理相違箇所DBから検索する(ステップS72)。CPU11は検索がヒットした否かを判定する(ステップS73)。CPU11は検索にヒットしなかったと判定した場合(ステップS73でNO)、ノードIDを1増加させる(ステップS74)。CPU11は選択したレコードのノードラベルが前処理名と一致する処理遷移DB23のレコードを検索し、後処理名を取得する(ステップS75)。CPU11は対応フローDB25に新規レコードを追加し、取得した処理遷移DB23のレコードに基づいて、ノードID、ノードラベルを設定する(ステップS76)。CPU11はノードラベルがEndであるか否かを判定する(ステップS77)。CPU11はノードラベルがEndでないと判定した場合(ステップS77でNO)、処理をステップS72に戻す。CPU11はノードラベルがEndであると判定した場合(ステップS77でYES)、処理を終了する。CPU11は検索がヒットした判定した場合(ステップS73でYES)、検索にヒットした相違箇所レコードの処理連続度を取得する(ステップS78)。CPU11は処理連続度が所定値以下であるか否かを判定する(ステップS79)。CPU11は処理連続度が所定値より大きいと判定した場合(ステップS79でNO)、まとめ処理を実行する(ステップS80)。CPU11は処理をステップS77に移す。CPU11は処理連続度が所定値以下と判定した場合(ステップS79でYES)、分岐処理を実行する(ステップS81)。CPU11は処理をステップS77に移す。
図15はまとめ処理の手順例を示すフローチャートである。CPU11はノードIDを1増加させる(ステップS91)。CPU11は相違箇所レコードの相違処理列に含まれている複数の処理から任意の一つの処理を選択する(ステップS92)。CPU11は対応フローDB25に新しいレコードを追加し、追加したレコードのノードID、ノード種別、ノードラベルを設定する(ステップS93)。ここで設定するノードラベルは、ステップS92で選択した処理に対応するラベルである。CPU11はノードIDを1増加させる(ステップS94)。CPU11は相違箇所レコードより後処理を取得する(ステップS95)。CPU11は対応フローDB25に新しいレコードを追加し、ノードID、ノード種別、ノードラベルを設定する(ステップS96)。ここで設定するノードラベルは、ステップS94で取得した後処理に対応するラベルである。CPU11は処理を終了する。
図16は分岐処理の手順例を示すフローチャートである。CPU11はノードIDを1増加させる(ステップS101)。CPU11は対応フローDB25に新しいレコードを追加し、分岐ノードを追加する(ステップS102)。すなわち、追加のレコードのノード種別には条件分岐を設定する。CPU11はノードIDを1増加させる(ステップS103)。検索にヒットした相違箇所レコードの相違処理列に含まれている処理をそれぞれ別々のレコードとして対応フローDB25に追加する(ステップS104)。CPU11はノードIDを1増加させる(ステップS105)。CPU11は相違箇所レコードより後処理を取得する(ステップS106)。CPU11は対応フローDB25に新しいレコードを追加し、ノードID、ノード種別、ノードラベルを設定する(ステップS107)。ここで設定するノードラベルは、ステップS106で取得した後処理に対応するラベルである。CPU11は処理を終了する。
図17は分岐修正処理の手順例を示すフローチャートである。CPU11は対応フローDB25に記憶した対応フローデータのうち、最初のレコード、例えば、ノードIDが最も小さい値のレコードを選択する(ステップS111)。CPU11は選択したレコードのノード種別が「条件分岐」であるか否かを判定する(ステップS112)。CPU11はノード種別が「条件分岐」ではないと判定した場合(ステップS112でNO)、次レコードを選択する(ステップS113)。CPU11は次レコードのノード種別が「終了」である否かを判定する(ステップS114)。CPU11はノード種別が「終了」であると判定した場合(ステップS114でYES)、処理を終了する。CPU11は、ノード種別が「終了」でないと判定した場合(ステップS114でNO)、処理をステップS112に戻す。
CPU11はノード種別が「条件分岐」であると判定した場合(ステップS112でYES)、分岐条件が取得可能か否かを判定する(ステップS115)。CPU11は対応フローの基である対応記事や、その他関連するマニュアルを参照し、分岐条件に当たる記述があるか否かを判定する。CPU11は分岐条件が取得可能と判定した場合(ステップS115でYES)、分岐条件を分岐ノードのラベルに設定する(ステップS116)。CPU11は分岐先ノードに対する各判断をレコードの判断1列、判断2列に設定する(ステップS117)。CPU11はステップS113以降を実行する。
CPU11は分岐条件が取得できないと判定した場合(ステップS115でNO)、相違箇所DBから分岐に対応する箇所のレコードを読み込み、相違処理、後処理を取得する(ステップS118)。CPU11は分岐シリアル化処理を行う(ステップS119)。CPU11は相違箇所の後処理に対応したレコードを選択する(ステップS120)。CPU11はステップS114以降を実行する。
図18は分岐シリアル化処理の手順例を示すフローチャートである。CPU11は分岐の基となった相違箇所レコードの相違処理列に記憶されている複数の処理を組み合わせて2つの処理を含む複数組の処理遷移を作成する(ステップS131)。CPU11は作成した処理遷移毎に対応履歴数をカウントする(ステップS132)。CPU11は作成した処理遷移毎に後処理までの処理数(処理長)をカウントする(ステップS133)。CPU11は対応履歴数と処理長とに基づき、処理毎に平均処理長を算出する(ステップS134)。CPU11平均処理長の逆数を優先度として算出する(ステップS135)。CPU11は処理を優先度の高い順にソートする(ステップS136)。CPU11はソートした順に処理のノードを配置する(ステップS137)。CPU11は相違箇所後の後処理が、Endであるか否かを判定する(ステップS138)。CPU11は後処理がEndであると判定した場合(ステップS138でYES)、分岐ノードを挿入する(ステップS139)。分岐ノードは優先度が最小の処理を除き、各処理ノードの後に障害が解決したか否かを判断する分岐ノードを挿入する。CPU11は後処理がEndでないと判定した場合(ステップS138でNO)、処理を終了する。
次に生成装置1の動作を、サンプルデータを用いて再度説明する。図3に示す対応履歴DB21に記憶された履歴ID=001の対応記事、履歴ID=002の対応記事は、処理抽出処理(図8のステップS1、図9)及び処理遷移情報生成処理(図8のステップSS2、図10)により、対応手順に変換される。図4に示す対応手順DB22に履歴ID=001及び履歴ID=002の対応手順が記憶されている。
対応手順DB22に記憶している対応手順をフロー図で表す。図19はフロー図の一例を示す説明図である。図19に示すように、履歴ID=001及び履歴ID=002の対応手順は、対応手順DB22に基づき、StartからEndまでのフロー図として表すことができる。
次に、相違箇所検出処理(図8のステップS3、図11)により相違箇所を検出した後のフロー図を概念的に示す。図20は相違箇所を概念的に示したフロー図である。図20は図19に示したフローを重ね合わせ、共通するノードは一つにまとめ、異なるノードは左右に並べて表現している。ノードが異なる相違箇所は点線の四角で囲んでいる。図20の上側が箇所ID=1の相違箇所であり、下側が箇所ID=2の相違箇所である。箇所ID=1の相違箇所では、前処理が「Start」、後処理が「ブラウザをリセット」、相違する処理が「インターネット一時ファイルを削除」と「ブラウザ履歴を削除」とである。この内容が、図6に示す相違箇所DB24に記憶されている。箇所ID=2の相違箇所も同様に、図20に示す内容が相違箇所DB24に記憶されている。
続いて、連続度算出処理(図8のステップS4、図13)により相違箇所についての処理連続度が算出される。図21は処理連続度の算出例を示す説明図である。フロー図においてノード間を結ぶ矢印に付した数字は遷移頻度である。遷移頻度である図5に示した処理遷移DB23に記憶してある。箇所ID=1の相違箇所では、「Start」から「インターネット一時ファイルを削除」への遷移頻度は5である。「Start」から「ブラウザ履歴を削除」への遷移頻度も5である。一方、「ブラウザ履歴を削除」から「インターネット一時ファイルを削除」への遷移頻度は1であり、その逆は0である。ここで、処理連続度は相違する処理間で遷移する確率であるから、箇所ID=1の相違箇所での処理連続度は、図21に示すように0.1となる。同様に箇所ID=1の相違箇所での処理連続度は0.6である。これらの値は、連続度算出処理により、相違箇所DB24の連続度列に記憶される。このように、連続度算出処理では、相違箇所に含まれる処理が、手順中の一定ステップ以内に連続して出現する確率を処理連続度として求めている。処理連続度の高い処理同士は、連続して実施されることが多いため、互いに異なる処理である可能性が高い。
次に、処理連続度により、相違箇所に含まれる複数の処理をまとめるか、条件分岐により一方を処理するようにするかが決定される。図22は分岐挿入判定処理(図8のステップS5、図14)の内容の一例を示す説明図である。上述のように処理連続度の高い処理同士は、互いに異なる処理である可能性が高いため分岐を設け、択一的に実施させる。処理連続度の低い処理は同一の処理である可能性が高いので、1つにまとめる。図22に示す例では、閾値を0.5とした。それより、閾値より小さい処理連続度を持つ箇所ID=1の相違箇所の処理はまとめられる。閾値以上の処理連続度を持つ箇所ID=2の相違箇所の処理は条件分岐により、択一的に実施される。
続いて、分岐修正処理(図8のステップS6、図17)により、挿入された条件分岐に具体的な条件が設定される。図23は分岐条件の設定例を示す説明図である。図23の左側のフローは単に条件分岐が挿入されただけフローであり、分岐条件は記載されていない。ここでの例ではブラウザをリセットした後に、証明書を更新するか、グループポリシーを更新するかに分岐するが、その条件が判明していない。分岐修正処理により、対応記事4が発見されたとする。対応記事4には、ブラウザのリセット後、証明書が古いことが確認され、証明書を更新し解決したとある。これを利用して条件を生成する。すなわち、「証明書が古いか」との条件にYESであれば、対応記事4に沿った一方の処理:証明書を更新し、NOであれは、もう一方の処理:グループポリシーを更新、を実行するようにする。これより、条件分岐が完成する。そして、全体の対応フローが完成することになる。
次に、分岐条件が取得できない場合の処理を説明する。この場合、条件分岐ノードは削除する。分岐先の複数の処理ノードを直列に並べるようにフローを変更する。ただし、すべての処理ノードを実行しなくても良い場合もある。そこで、優先度の高い順に並べ実行する。優先度は、対応履歴において各処理の実施後に手順終了までに要した処理ステップ数に基づいて算出する。図24は優先度の算出の例を示す説明図である。図25は対応フローの一例を示す説明図である。図24Aは「証明書を更新」又は「グループポリシーを更新」以降の処理遷移と、対応履歴の件数を示す表である。状態遷移は4パターンがある。1.証明書を更新→End、2.証明書を更新→ポリシーを更新→End、3.ポリシーを更新→End、4.ポリシーを更新→証明書を更新→Endの4パターンである。それぞれの件数は、2件、2件、4件、2件である。図24Bは終了までの処理数の平均値、優先度及び優先順位の求め方を示している。「証明書を更新」の後、終了までの処理数が0であるのが4件(1.及び4.)、処理数が1であるのが2件(2.)である。したがって、終了までの処理数の平均値は、以下の式(1)で求まる。
0×4/6+1×2/6 = 0.33 … (1)
「グループポリシーを更新」の後、終了までの処理数が0であるのが6件(2.及び3.ょ、処理数が1であるのが2件(4.)である。したがって、終了までの処理数の平均値は、以下の式(2)で求まる。
0×6/8+1×2/8 = 0.25 … (2)
優先度は平均処理数の逆数であるから、「証明書の更新」の優先度は3.0、「グループポリシーを更新」の優先度は4.0である。優先順は「グループポリシー」、「証明書の更新」となる。さらに、優先度が最小の処理を除き、各処理ノードの後ろに障害が解決したかどうかを判断する分岐ノードを挿入する。以上にしたがい、図23の左側のフローを書き直すと図25に示すものとなる。
図26は生成装置1が備える機能の一例を示すブロック図である。生成装置1は抽出部11a、部分生成部11b、検出部11c、算出部11d及び統合部11eを含む。これらの各機能部は、CPU11が制御プログラム1Pに基づいて動作することにより、実現される。
抽出部11aは複数の処理が含まれる対応記事から、処理が実行される順序が順序付けされた2つの処理の組を抽出する。部分生成部11bは抽出した処理の組から処理手順を生成する。検出部11cは複数の対応記事から生成した複数の処理手順同士を比較し、手順が異なる相違箇所を検出する。算出部11dは検出した相違箇所について、一方の処理から他方の処理への遷移確率に基づいて、処理の連続度を算出する。統合部11eは算出した連続度に基づき、複数の処理手順を統合する。
本実施の形態においては、対応履歴に実質的に同じ処理を指す箇所や、分岐条件を設定できない箇所が含まれていても適切な対応フローを生成することができる。
各実施の形態で記載されている技術的特徴(構成要件)はお互いに組み合わせ可能であり、組み合わせすることにより、新しい技術的特徴を形成することができる。
今回開示された実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
以上の実施の形態に関し、さらに以下の付記を開示する。
(付記1)
複数の処理が含まれる対応記事から、前記処理が実行される順序が順序付けされた2つの処理の組を抽出し、
抽出した処理の組から処理手順を生成し、
複数の対応記事から生成した複数の処理手順同士を比較し、手順が異なる相違箇所を検出し、
検出した相違箇所について、一方の処理から他方の処理への遷移確率に基づいて、処理の連続度を算出し、
算出した連続度に基づき、複数の前記処理手順を統合する
処理をコンピュータに実行させるための生成プログラム。
(付記2)
前記連続度は、前記相違箇所の対応する複数の処理が、前記処理手順において一定の範囲内に連続して出現する確率である
付記2に記載の生成プログラム。
(付記3)
前記連続度が閾値よりも小さい場合、前記相違箇所に対応する複数の処理のうち、任意の1つの処理を選択し、
選択しなかった処理を行わず、選択した処理のみを統合する
付記1又は付記2に記載の生成プログラム。
(付記4)
一の前記処理の組における順序が後の処理と、他の前記処理の組における順序が前の処理とが一致するように、前記処理の組を並べ、
並べた処理の組に含まれる各処理を順序にしたがって並べるとともに、前後で一致する処理は1つにまとめ、前記処理手順を生成する
付記1から付記3の何れか一つに記載の生成プログラム。
(付記5)
複数の前記対応記事から前記処理の組を複数抽出し、前記処理の組それぞれが前記対応記事に出現する出現回数を求め、求めた出現回数を前記処理の組それぞれに対応付けて記憶する記憶部を参照し、
前記一方の処理及び前記他方の処理を含む前記処理の組の出現回数を求め、
求めた出現回数を、前記相違箇所の1つ前の処理と、前記一方の処理又は前記他方の処理とを含む前記処理の組の出現回数で割った値を、前記遷移確率とする
付記1から付記4の何れか一つに記載の生成プログラム。
(付記6)
前記連続度が閾値以上の場合、前記相違箇所の対応する複数の処理の何れか1つを選択実行させる条件判定処理を、前記相違箇所の前に挿入する
付記1から付記5の何れか1つに記載の生成プログラム。
(付記7)
前記対応記事から前記条件判定処理における判定条件を抽出する
付記6に記載の生成プログラム。
(付記8)
前記対応記事から前記条件判定処理における判定条件を抽出できない場合、前記相違箇所の対応する複数の処理すべてを直列に実行するよう統合する
付記7に記載の生成プログラム。
(付記9)
前記相違箇所の対応する複数の処理それぞれについて、実施優先度を算出し、
算出した実施優先度に基づいて、前記複数の処理の実行順序定める
付記8に記載の生成プログラム。
(付記10)
前記相違箇所の対応する複数の処理それぞれが、当該処理を含む前記処理手順において、当該処理の実行後から前記処理手順の終了までに実行する処理の数に基づいて算出する
付記9に記載の生成プログラム。
(付記11)
複数の処理が含まれる対応記事から、前記処理が実行される順序が順序付けされた2つの処理の組を抽出する抽出部と、
抽出した処理の組から処理手順を生成する部分生成部と、
複数の対応記事から生成した複数の処理手順同士を比較し、手順が異なる相違箇所を検出する検出部と、
検出した相違箇所について、一方の処理から他方の処理への遷移確率に基づいて、処理の連続度を算出する算出部と、
算出した連続度に基づき、複数の前記処理手順を統合する統合部と
を備える生成装置。
(付記12)
コンピュータにより実行される生成方法であって、前記コンピュータが、
複数の処理が含まれる対応記事から、前記処理が実行される順序が順序付けされた2つの処理の組を抽出し、
抽出した処理の組から処理手順を生成し、
複数の対応記事から生成した複数の処理手順同士を比較し、手順が異なる相違箇所を検出し、
検出した相違箇所について、一方の処理から他方の処理への遷移確率に基づいて、処理の連続度を算出し、
算出した連続度に基づき、複数の前記処理手順を統合する
生成方法。