以下、図面を用いて本発明の実施例を説明する。同一構成および同一処理には同一符号を付与し、後出の説明を省略する。また各実施例および各変形例は、本発明の技術的思想の範囲内でその一部または全部を組合せることができる。
図1は、実施例1のリスク分析支援装置の構成の一例を示すブロック図である。リスク分析支援装置100は、ユーザが行うリスク分析を支援するシステムである。
リスク分析支援装置100は、分析結果データベース140およびテンプレートデータベース150が接続されている。分析結果データベース140は、過去に実施されたリスク分析において入力された制御構造図と、この制御構造図に対応し、リスク分析によって識別された事故に至るシナリオを木構造の形で蓄積している。木構造で表したシナリオをこれ以降、シナリオ木と呼ぶ。テンプレートデータベース150は、複数のシステムにおいて共通に使用可能な木構造の構成をテンプレートとして格納している。テンプレートは、各ノードがガイドワード番号を構成情報として持つシナリオ木の形となっている。
なお分析結果データベース140およびテンプレートデータベース150は、一体のデータベースに統合されていてもよい。
またリスク分析支援装置100は、ユーザインタフェース部110と、シナリオリコメンデーション部120と、シナリオ取込部130とを有する。ユーザインタフェース部110は、ユーザによる情報入力および情報確認を支援する。ユーザインタフェース部110は、ディスプレイなどの表示装置の表示画面に表示されるGUI(Graphical User Interface)およびキーボード等の入力装置から構成される。
シナリオリコメンデーション部120は、ユーザの入力に応じて、過去のリスク分析結果およびシナリオのテンプレートを元にシナリオをリコメンデーションする。シナリオ取込部130は、シナリオリコメンデーション部120によりリコメンデーションされたシナリオをユーザインタフェース部110に取り込み、ユーザがリコメンデーションされた結果を元に分析可能な環境を提供する。
ユーザインタフェース部110は、制御構造図入力部111と、リコメンデーションインタフェース部112と、シナリオ入力部113とを含む。ユーザは、制御構造図入力部111にて、制御とブロックから構成される制御構造図の入力をし、リコメンデーションインタフェース部112にて、リコメンデーション結果の確認およびこの結果の取り込みをし、シナリオ入力部113にて、取り込んだリコメンデーション結果を元に事故に至るシナリオを木構造の形で入力する。
シナリオリコメンデーション部120は、制御ループ探索部121と、リコメンデーション木生成部122と、リコメンデーション出力部123とを有する。制御構造図入力部111からリコメンデーション指示があると、制御ループ探索部121が制御構造図入力部111に入力されている制御構造図から制御ループを抽出し、抽出した制御ループと類似の制御ループを含む制御構造図を分析結果データベース140から探索する。
ここで制御ループとは、制御構造図内において影響を及ぼし合う制御の部分集合のことである。制御ループはあくまで制御の部分集合であり、ループは存在せずとも良い。例えば制御ループとは、ヒントワードの適用範囲(リスク分析の対象となるブロックと制御の部分集合)である。これ以降、類似の制御ループを含む制御構造図を類似制御構造図と呼ぶ。
リコメンデーション木生成部122は、制御ループ探索部121の探索結果を元に、シナリオのリコメンデーション木を生成する。リコメンデーション出力部123はリコメンデーション木生成部122が生成したリコメンデーション木をリコメンデーションインタフェース部112に受け渡す。
シナリオ取込部130は、リコメンデーションインタフェース部112が表示したリコメンデーション木のうち、ユーザが取り込み指示をしたリコメンデーション木を処理し、入力された制御構造図のシナリオ木としてシナリオ入力部113に表示する。ユーザは、シナリオ入力部113に表示されたシナリオ木を自由に書き換えることができる。ユーザが、制御構造図入力部111で入力した制御構造図、および、シナリオ入力部113で入力したシナリオ木は、分析結果データベース140に蓄積される。
図2は、実施例1の制御構造図入力画面の一例を示す図である。実施例1の制御構造図入力部111が表示する制御構造図入力画面200では、ユーザは、ブロック211と制御212から構成される制御構造図213を入力できる。ブロック211は、ソフトウェア、ハードウェア、システム、あるいは人など、分析対象に応じて決定されるため、限定しない。制御212は、あるブロックからあるブロックへの制御指示、あるいは、制御行動である。ユーザが入力した制御構造図213は、分析結果データベース140に保存される。
ユーザが制御構造図213を入力し、シナリオリコメンデーションボタン220を押下すると、シナリオリコメンデーション部120は、入力された制御構造図213の類似制御構造図を分析結果データベース140から探索し、探索結果を元にリコメンデーション木を生成し、ユーザにリコメンデーションする。
図3は、実施例1のリコメンデーション結果表示画面の一例を示す図である。実施例1のリコメンデーション結果表示画面300は、入力制御構造図表示画面310と、類似制御構造図表示画面330と、リコメンデーション木表示画面350とを有する。
入力制御構造図表示画面310には、ユーザが制御構造図入力画面200にて入力した制御構造図が表示される。類似制御構造図表示画面330には、入力された制御構造図から探索された0個以上の類似制御構造図が表示される。
入力制御構造図表示画面310に表示されている制御構造図内のブロックおよび制御のうち、類似制御構造図に含まれないブロックおよび制御は点線で表示される。点線での表示はあくまで一例であり、類似制御構造図に含まれないブロックおよび制御が識別できれば良い。ユーザが追加探索ボタン320を押下すると、類似制御構造図に含まれないブロックおよび制御を必ず含むような制御構造図およびそれに関連するシナリオ木をリコメンデーション木として追加探索できる。追加探索により追加取得された制御構造図および関連するリコメンデーション木は、リコメンデーション結果画面300のリコメンデーション木表示画面350に表示される。
類似制御構造図表示画面330に表示されている類似制御構造図内のブロックおよび制御のうち、入力された制御構造図に含まれないブロックおよび制御は点線で表示される。点線での表示はあくまで一例であり、入力された制御構造図に含まれないブロックおよび制御が識別できれば良い。
リコメンデーション木表示画面350には、シナリオリコメンデーション部120が生成したリコメンデーション木が0個以上表示される(0個の表示とは、すなわち表示されないことをいう)。シナリオ木およびリコメンデーション木は、制御構造図、の対応関係とガイドワード番号を構成情報として持つノード351と、ゲート352から構成される木構造で表現される。
本実施例において、ノードはUCA(Unsafe Control Action)ノード354とHCF(Hazard Control Factor)ノード351の二種類があるものとする。シナリオ木の頂点となるノードがUCAノード354であり、それ以外のノードがHCFノード351である。また本実施例において、ゲート352はORゲートあるいはANDゲートとする。
リコメンデーション木表示画面350には、類似制御構造図表示画面330に表示されている類似制御構造図内のブロックあるいは制御のうち、入力制御構造図表示画面310に表示されている制御構造図内に存在しないブロックあるいは制御に対応するHCFノード353が警告付きで表示される。警告は、表示線種の変更、色の変更、あるいは注釈の付与など、他のノードと識別可能であれば良い。
またリコメンデーション木表示画面350には、現在表示しているシナリオ木のシナリオによって引き起こされるハザード355も表示される。ハザードには、事故に至る直接的な現象あるいはシステムの状態に限られず、分析対象である事故を表示しても良い。
リコメンデーション木表示画面350においてユーザが取り込みボタン340を押下すると、表示されているリコメンデーション木を入力された制御構造図に対応するシナリオ木として分析結果データベース140に取り込むことができる。分析結果データベース140に取り込まれたシナリオ木は、次回以降の他のリスク分析対象についてのリスク分析の際に用いることができる。
図4は、実施例1のシナリオ入力画面の一例を示す図である。実施例1のシナリオ入力部113が表示するシナリオ入力画面400では、シナリオ木の入力410ができる。また、リコメンデーション結果表示画面300の取り込みボタン340にて取り込まれたリコメンデーション木は、シナリオ木の入力部分410に表示される。取り込まれたリコメンデーション木のうち、リコメンデーション木表示画面350にて警告付きで表示されたノード353は、ガイドワード番号(図4の例では“[(6)]”)のみを構成情報として持つ空のノード411として表示される。ノード411は、リスク分析の実施者による検討対象ノードの一つとなる。
ユーザは、表示されているシナリオ木に対して、ノードの内容の書き換え、ノードの追加および削除、ゲートの追加および削除などを行って、シナリオ木を自由に書き換えることが可能である。シナリオに対応するハザード412もシステムあるいは分析対象に合わせてユーザが書き換えることが可能である。シナリオ入力画面400で入力されたシナリオ木は分析結果データベース140に保存される。なお分析結果データベース140に保存されるシナリオ木は、シナリオ入力画面400での編集を経ず、リコメンデーション結果表示画面300の取り込みボタン340の押下を契機として直ちに分析結果データベース140に保存されてもよい。
図5は、実施例1の制御構造図構成情報の一例を示す図である。実施例1の制御構造図構成情報500は、制御構造図を一意に識別するための制御構造図ID501を持つ。制御リスト502は、制御構造図ID501で識別される制御構造図中に含まれる制御のリストである。ブロックリスト503は、制御構造図ID501で識別される制御構造図中に含まれるブロックのリストである。制御ループリスト504は、制御構造図ID501で識別される制御構造図中に含まれる制御ループを制御ループID601(図6参照を参照して後述)で示すリストである。
制御構造図毎に図5に示す制御構造図構成情報500のデータ形式で分析結果データベース140に保存されている。
図6は、実施例1の制御ループ構成情報の一例を示す図である。実施例1の制御ループ構成情報600は、制御ループを一意に識別するための制御ループID601を持つ。制御リスト602は、制御ループID601で識別される制御ループ中に含まれる制御のリストである。シナリオ木リスト603は、制御ループID601で識別される制御ループに対応するシナリオ木のシナリオ木ID(図9を参照して後述)である。
制御ループ毎に図6に示す制御ループ構成情報600のデータ形式で分析結果データベース140に保存されている。
図7は、実施例1の制御構成情報の一例を示す図である。実施例1の制御構成情報700は、制御を一意に識別するための制御ID701を持つ。制御702は、あるブロックからあるブロックへの制御の内容である。ブロック703は、制御702を指示する、あるいは、制御702の行動を起こすブロックのブロックID801(図8を参照して後述)である。被ブロック704は、制御を受けるブロック、あるいは、制御されるブロックのブロックID801(図8を参照して後述)である。
制御毎に図7に示す制御構成情報700のデータ形式で分析結果データベース140に保存されている。
図8は、実施例1のブロック構成情報の一例を示す図である。実施例1のブロック構成情報800は、ブロックを一意に識別するためのブロックID801を持つ。ブロック名802はブロックの名前である。
ブロック毎に図8に示すブロック構成情報800のデータ形式で分析結果データベース140に保存されている。
図9は、実施例1のシナリオ木構成情報の一例を示す図である。実施例1のシナリオ木構成情報900は、シナリオ木を一意に識別するためのシナリオ木ID901を持つ。対象ハザード902は、シナリオ木ID901で識別されるシナリオによって引き起こされるハザードあるいは事故である。UCAノード903は、シナリオ木ID901で識別されるシナリオ木の頂点となるUCAID1001(図10を参照して後述)のUCAノードである。
シナリオ木毎に図9に示すシナリオ木構成情報900のデータ形式で分析結果データベース140に保存されている。
図10は、実施例1のUCAノード構成情報の一例を示す図である。実施例1のUCAノード構成情報1000は、UCAノードを一意に識別するためのUCAID1001を持つ。UCA1002は、UCAID1001で識別されるUCAの内容である。UCAの内容は、ハザードを引き起こす原因あるいはハザードを引き起こす事象である。関連制御1003は、UCAID1001で識別されるUCAに対応する制御のIDである。下位ゲート1004は、UCAID1001で識別されるUCAノードの下位に接続されているゲートである。
UCAノード毎に図10に示すUCAノード構成情報1000のデータ形式で分析結果データベース140に保存されている。
図11は、実施例1のゲート構成情報の一例を示す図である。実施例1のゲート構成情報1100は、ゲートを一意に識別するためのゲートID1101を持つ。ゲート種別1102は、ゲートID1101で識別されるゲートの種類である。ゲート種別にはORゲートあるいはANDゲートがある。下位ノードリスト1103は、ゲートID1101で識別されるゲートの下位に接続されているHCFノードおよびゲートのリストである。
図12は、実施例1のHCFノード構成情報の一例を示す図である。実施例1のHCFノード構成情報1200は、HCFノードを一意に特定するためのHCFID1200を持つ。HCF1202は、HCFID1200で識別されるHCFの内容である。HCFの内容は、上位のUCAまたは上位のHCFを引き起こす原因または引き起こす事象であり、ユーザがガイドワードを使って想起するHCFである。
下位ゲートリスト1203は、HCFID1200で識別されるHCFノードの下位に接続されているゲートである。ヒントワード番号1204は、HCFID1200で識別されるHCFを特定するために使用したガイドワードの番号である。関連ブロックまたは関連制御1205は、HCFID1200で識別されるHCFに対応するブロックのブロックID801、あるいは、対応する制御の制御ID701である。関連フラグ1206は、シナリオリコメンデーション部120がリコメンデーション処理の過程で使用するフラグであり、ユーザが入力した制御構造図との関連の有無を示す。
図13は、実施例1のUCAノード構成情報(テンプレート)の一例を示す図である。実施例1のUCAノード構成情報(テンプレート)1000-1は、UCAノード構成情報1000と同一のデータ構成であるが、UCA1002および関連制御1003にNULLがセットされている点でUCAノード構成情報1000と異なる。
図14は、実施例1のHCFノード構成情報(テンプレート)の一例を示す図である。実施例1のHCFノード構成情報(テンプレート)1200-1は、HCFノード構成情報1200と同一のデータ構成であるが、HCF1202、および、関連ブロックまたは関連制御1205にNULLがセットされている点でHCFノード構成情報1200と異なる。
UCAノード構成情報(テンプレート)1000-1およびHCFノード構成情報(テンプレート)1200-1は、テンプレートデータベース150に保存されており、各ノードがガイドワード番号のみを構成情報として持つシナリオ木のテンプレートを構成する情報である。
図15および図16は、実施例1のシナリオリコメンデーション部の処理の一例を示すフローチャートである。図15および図16に示す処理は、実施例1のシナリオリコメンデーション部120が、ユーザが制御構造図入力画面200で制御構造図を入力し、シナリオリコメンデーションボタン220を押下したのを契機に、ユーザが入力した制御構造図のシナリオのヒントとなるシナリオ木をリコメンデーションする処理である。
先ず制御ループ探索部121は、入力された制御構造図から制御ループを抜き出す(S1301)。詳細には制御ループ探索部121は、分析結果データベース140に保存されている入力された制御構造図の制御構造図構成情報500(図5参照)の制御ループリスト504から制御ループIDを抽出する。抽出した制御ループIDに該当する制御ループをこれ以降、入力された制御ループと呼ぶ。
次に制御ループ探索部121およびリコメンデーション木生成部122は、分析結果データベース140に保存されている全ての制御構造図について次の処理を繰り返す(制御構造確認ループ:S1302~S1316(図16参照))。
先ずシナリオリコメンデーション部120は、リコメンデーション木リストにNULLを代入し、類似制御構造図リストにNULLを代入する(S1303)。リコメンデーション木リストはリコメンデーション木を列挙する配列変数であり、類似制御構造図リストは類似制御構造図を列挙する配列変数である。後述するように、リコメンデーション木リストにはリコメンデーション木生成部122が生成したリコメンデーション木のシナリオ木ID901が格納され、類似制御構造図リストにはS1308で制御構造図の制御構造図IDが格納される。
さらに制御ループ探索部121およびリコメンデーション木生成部122は、制御構造図の制御ループリスト504について次の処理を繰り返す(制御ループ確認ループ:S1304~S1313)。
先ず制御ループ探索部121は、入力された制御ループのうち制御ループと完全一致するものがあるかどうか確認する(S1305)。完全一致とは制御ループの制御リスト602中の各制御の制御702が全て一致し、さらにブロック703と被ブロック704が一致することをさす。
完全一致する場合(S1305:YES)、制御ループ探索部121は、入力された制御ループに対応する制御ループ構成情報600のシナリオ木リスト603を分析結果データベース140から取得する(S1306)。次に、制御ループ探索部121は、リコメンデーション木リストに、S1306で取得したシナリオ木リスト603をコピーし(S1307)、S1308に処理を移す。
全ての入力された制御ループと制御ループが完全一致しなかった場合(S1305:NO)、制御ループ探索部121は、制御ループの制御リスト602と、入力された制御ループの制御リスト602との類似度を算出する(S1309)。類似度が所定閾値以上の場合(S1310:YES)、制御ループ探索部121は、分析結果データベース140から制御ループに対応するシナリオ木リスト603を取得し、リコメンデーション木生成部122に入力する(S1311)。続いてリコメンデーション木生成部122は、S1311の入力に基づいてリコメンデーション木リストを作成し(S1312)、S1308に処理を移す。
一方類似度が閾値以上でなかった場合(S1305:NO)、制御ループ探索部121は、S1313に処理を移す。
S1308では、制御ループ探索部121は、類似制御構造図リストに、今回の制御構造確認ループの実行で処理対象となっている制御構造図の制御構造図IDを代入する(S1308)。続いて制御ループ探索部121およびリコメンデーション木生成部122は、次の制御ループについて制御ループ確認ループを実行する(S1313)。全ての入力された制御ループについて制御ループ確認ループ:S1304~S1313が終了すると、制御ループ探索部121は、図16のS1314に処理を移す。
続いてS1313で全ての制御ループについて確認が終わった時点で、類似制御構造図リストがNULLであった場合(S1314:YES)、制御ループ探索部121は、次の制御構造図を確認する(S1316)。類似制御構造図リストがNULLでなかった場合(S1314:NO)、リコメンデーション出力部123は、ユーザに対して、リコメンデーションインタフェース部112にリコメンデーション木リストを表示する(S1315)。
続いて、S1316において、全ての制御構造図について確認が終わった時点で、リコメンデーションインタフェース部112にリコメンデーション木が表示されていない場合(S1317:YES)、制御ループ探索部121は、リコメンデーション木生成部122にNULLを入力する(S1318)。これを受けてリコメンデーション木生成部122は、リコメンデーション可能なシナリオ木が分析結果データベース140になかった場合におけるリコメンデーション木リストを、テンプレートデータベース150に保存されているUCAノード構成情報(テンプレート)1000-1およびHCFノード構成情報(テンプレート)1200-1から生成する(S1319)。その後、リコメンデーション出力部123は、S1319で生成されたリコメンデーション木リストをリコメンデーションインタフェース部112に表示する(S1320)。
S1316において、全ての制御構造図について確認が終わった時点で、リコメンデーションインタフェース部112にリコメンデーション木が表示されている場合(S1317:NO)、もしくは、S1320が終了した場合に、本シナリオリコメンデーション部の処理を終了する。
図17は、実施例1のリコメンデーション木生成処理の一例を示すフローチャートである。実施例1のリコメンデーション木生成処理は、図15のS1312および図16のS1319の処理の詳細例を示すサブルーチンである。
先ずS1401では、入力がNULL、つまりリコメンデーション可能なシナリオ木が分析結果データベース140に存在しない場合(S1401:YES)、リコメンデーション木生成部122は、UCAノード構成情報(テンプレート)1000-1およびHCFノード構成情報(テンプレート)1200-1から構成される、ヒントワード番号1204のみが埋められたシナリオ木のテンプレートをテンプレートデータベース150から取得する(S1413)。続いてリコメンデーション木生成部122は、S1413で取得したシナリオ木にシナリオ木ID901を付与してリコメンデーション木リストに追加し(S1414)、本リコメンデーション木生成処理を終了する。
一方入力がNULLでない場合(S1401:NO)、リコメンデーション木生成部122は、入力された全てのシナリオ木について次の処理(リコメンデーション木生成ループ:S1402~S1412)を繰り返す。
先ずリコメンデーション木生成部122は、入力されたシナリオ木のUCAノード1000の関連制御1003を取得する(S1403)。本実施例では、リコメンデーション木の頂点であるUCAノード902の関連制御1003が、ユーザが入力した制御構造図にも存在しなければならないとする。S1403で取得した関連制御1003に一致する制御が、ユーザが入力した制御構造図に存在する場合(S1404:YES)、リコメンデーション木生成部122は、シナリオ木をリコメンデーション木リストに追加する(S1406)。S1403で取得した関連制御1003に一致する制御が、ユーザが入力した制御構造図に存在せず(S1404:NO)、かつ処理対象の入力された全てのシナリオ木についてS1402~S1405の処理が処理済である場合、リコメンデーション木生成部122は、本リコメンデーション木生成処理を終了する。
S1406にさらに引き続き、リコメンデーション木生成部122は、S1406でリコメンデーション木リストに追加したシナリオ木内の全てのHCFノードについて以下の処理(HCFノード確認ループ:S1407~S1412)を繰り返す。
先ずリコメンデーション木生成部122は、処理対象のHCFノードの関連ブロックまたは関連制御1205を取得する(S1408)。ユーザが入力した制御構造図内に一致する制御あるいはブロックが存在する場合(S1409:YES)、リコメンデーション木生成部122は、HCFノードの関連フラグ1206をTrueにする(S1410)。一方存在しない場合(S1409:NO)、リコメンデーション木生成部122は、HCFノードの関連フラグ1206をFalseにする(S1411)。リコメンデーション木生成部122は、処理対象の全てのHCFノードについてS1407~S1412の処理を処理済である場合、S1405に処理を移す。
図18は、実施例1のリコメンデーション木表示処理の一例を示すフローチャートである。実施例1のリコメンデーション木表示処理は、図16のS1315およびS1320のリコメンデーション出力部123がリコメンデーション木を表示する処理の詳細例を示すサブルーチンである。
先ずリコメンデーション出力部123は、リコメンデーション木リスト中の全てのリコメンデーション木について次の処理(リコメンデーション木表示ループ:S1501~S1508)を繰り返す。
先ずリコメンデーション出力部123は、リコメンデーション結果画面300のリコメンデーション木表示画面350に新規タブ(図3において“シナリオ1”“シナリオ2”・・・で例示するタブの新規タブ)を追加する(S1502)。続いてリコメンデーション出力部123は、S1502で追加したタブにリコメンデーション木を表示する(S1503)。
次にリコメンデーション出力部123は、S1503でリコメンデーション木表示画面350の新規タブに表示したリコメンデーション木内の全てのHCFノードについて次の処理(HCFノード警告表示ループ:S1504~S1507)を繰り返す。
先ずリコメンデーション出力部123は、HCFノードの関連フラグ1206がTrueかどうか確認する(S1505)。Falseの場合(S1505:NO)、リコメンデーション出力部123は、該当のHCFノードに警告(図3のHCFノード353参照)を表示する(S1507)。HCFノードの関連フラグ1206がTrue(S1505:YES)の場合、もしくはS1507終了後、リコメンデーション木リスト中の全てのリコメンデーション木についてS1501~1508の処理を終了すると、S1509に処理を移す。
S1509~S1512では、リコメンデーション出力部123は、類似制御構造図の表示を行う。類似制御構造図がNULLの場合(S1509:YES)、本リコメンデーション木表示処理を終了する。NULLでない場合(S1509:NO)、リコメンデーション出力部123は、類似制御構造図表示画面330に新規タブ(図3の“図1”“図2”・・・で例示されるタブの新規タブ)を追加する(S1510)。
続いてリコメンデーション出力部123は、S1510で追加した類似制御構造図表示画面330の新規タブに、類似制御構造図リストに格納されている類似制御構造図を表示する(S1511)。
続いてリコメンデーション出力部123は、類似制御構造図内の全てのブロックについて次の処理(ブロック表示ループ:S1512~S1515)を繰り返す。ユーザが入力した制御構造図内にブロックが存在しない場合(S1513:YES)、リコメンデーション出力部123は、ブロックを点線表示に変える(S1514)。ユーザが入力した制御構造図内にブロックが存在する場合(S1513:YES)、リコメンデーション出力部123は、S1515に処理を移す。
S1515で処理対象の類似制御構造図内の全てのブロックについてS1512~S1515の処理が処理済である場合、リコメンデーション木生成部122は、本リコメンデーション木表示処理を終了する。
図19は、実施例1のシナリオ取込処理の一例を示すフローチャートである。実施例1のシナリオを取込処理は、ユーザが取り込みボタン340(図3)を押下したのを契機に、シナリオ取込部130が、リコメンデーション木表示画面350に表示されているリコメンデーション木をシナリオとして取り込む処理である。
シナリオ入力画面400の全てのタブ(図4の“シナリオ1”・・・で例示する全タブ)について以下の処理(頂点確認ループ:S1601~S1603)を繰り返す。
先ずシナリオ取込部130は、シナリオ入力画面400の処理対象のタブに表示されているシナリオ木の頂点のUCAノードと、リコメンデーション木の頂点のUCAノードが同様かどうか確認する(S1602)。これらの頂点のUCAノードが同様である場合(S1602:YES)、シナリオ取込部130は、処理対象のタブに表示されているシナリオ木の頂点のUCAノードの下位ゲート1004の下位ノードリスト1103に、リコメンデーション木のUCAノードの下位ゲート1004を追加し、表示する(S1607)。S1607の処理により、同じUCAノードのシナリオ木を一つのリコメンデーション木に纏めることで、リスク分析を効率化できる。S1607の表示後、頂点確認ループ(S1601)を終了する。頂点が同様でない場合(S1602:NO)、頂点確認ループを継続する(S1603)。
S1601~S1603の頂点確認ループ終了後に、頂点が同じシナリオ木が存在しなかった場合、シナリオ取込部130は、シナリオ入力画面400に新規タブを追加する(S1604)。続いてシナリオ取込部130は、S1604で追加した新規タブにリコメンデーション木を表示する(S1605)。
シナリオ取込部130は、シナリオ入力画面400の新規タブにリコメンデーション木を表示後、表示したリコメンデーション木内の全てのHCFノードについて以下の処理(HCFノード表示ループ:S1606~S1610)を繰り返す。
先ずシナリオ取込部130は、処理対象のHCFノードの関連フラグ1206がTrueかどうかを確認する(S1608)。Trueでない場合(S1608:NO)、先ずシナリオ取込部130は、処理対象のHCFノードの「HCF1202」「関連ブロックまたは関連制御1205」にNULLを代入し、表示を更新する(S1610)。S1610が終了し、S1609で処理対象の全てのHCFノードについてS1606~S1609の処理が処理済である場合、シナリオ取込部130は、本シナリオ取込処理を終了する。
図20は、実施例1の類似度計算方法の一例を示す図である。実施例1の類似度計算方法は、図15のS1309での制御ループの類似度計算における一方法であるが、これに限られるものではない。類似度評点1701の合計値が高いほど、類似度が高いものとする。
類似度の決定基準の1つが、図20に示す制御リスト602の編集距離1702である。編集距離1702は、入力された制御ループと制御構造図の制御ループリストの制御ループとが一致するまでに、制御またはブロックに対して挿入、削除、置換等の処理を行う必要がある場合に、これらの各処理を一回行う毎に類似度評点を-1する例を示す。
また図20は、制御ループの制御リスト602の各制御について、制御702が一致してかつ制御のブロック703が一致した場合、制御のブロック一致1703とみなし、類似度評点を+1する例を示す。また図20は、制御ループの制御リスト602の各制御について、制御702が一致してかつ制御の被ブロック704が一致した場合、制御の被ブロック一致1704とみなし、類似度評点を+1する例を示す。また図20は、制御リスト602制御リスト602の先頭の制御が一致しない場合、制御リストの先頭の制御が不一致1705とし、類似度評点を-100する例を示す。
なお制御リストの先頭の制御が不一致1705は省略されてもよい。この場合、類似度の計算の際(図15のS1309参照)には、制御ループの制御リストと入力された制御ループの制御リストのUCAノードが不一致であるものは、類似度計算の対象から除外する。
実施例1では、制御とブロックでシステムなどのリスク分析対象を表現した制御構造図と、各ノードが制御構造図およびガイドワードとの対応関係を持つ木構造として表現されたシナリオをデータベースに蓄積し、入力されたシステムの制御構造図の制御の部分集合と類似の部分集合を持つ制御構造図をデータベースから検索し、検索して得られた制御構造図と対応関係を持つハザードシナリオの木構造をリコメンデーションする。よって実施例1によれば、蓄積された過去のハザードシナリオを元に、入力されたシステムの制御構造図に対応するハザードシナリオを表示するので、複数のブロックおよび制御で表現されるシステムのリスク分析の分析時間を短縮し、実施者の負担を軽減することができる。さらに過去のリスク分析結果を流用してシステムに内在するリスクをGUIで視覚的に表示するので、リスク分析の実施者のリスクの見落としを防止できる。