以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態のプログラム解析装置を示す図である。プログラム解析装置10は、プログラムの修正に応じた設計文書の改版を支援する。ここで、プログラム解析装置10は、設計文書を電子データとして管理する。設計文書として、システム開発のV字モデルにおける要件定義書や基本設計書が挙げられる。例えば、要件定義書は、業務ルール表を含む。業務ルール表は、業務における特定のデータ項目に対する処理のルール(業務ルール)を示す情報である。また、要件定義書や基本設計書は、業務用語表を含む。業務用語表は、業務ルールで用いられる用語の定義を示す情報である。
プログラム解析装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性の半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性のストレージでもよい。処理部12は、例えば、CPU(Central Processing Unit)やDSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うこともある。
記憶部11は、第1のプログラムP1の修正後の第2のプログラムP2を記憶する。記憶部11は、第1のプログラムP1に対応する第1の業務ルール表T1を記憶する。また、記憶部11は、業務用語の定義ルールR1を示す情報を記憶する。
ここで、第1のプログラムP1が修正されたにも拘わらず、第1の業務ルール表T1は、修正されていない。第2のプログラムP2は、例えば、第1のプログラムP1に対してデータ項目や当該データ項目に対するロジックが追加されたものである。このため、第2のプログラムP2は、第1の業務ルール表T1と齟齬がある(すなわち、両者の内容が整合していない)。ここで、図1の例における第1のプログラムP1および第2のプログラムP2の左側の番号は、便宜的に付した行番号である。
図1の例では、第2のプログラムP2において、その4行目に定数C2の定義が追加され、その6行目に変数“コード”に関する定数C2を用いた条件判定が追加されている点が第1のプログラムP1と異なる。なお、図1では、第2のプログラムP2の第1のプログラムP1に対する追加部分には強調のために下線を付している。このため、例えば、第1の業務ルール表T1の変数“コード”に関する業務ルールにおいて、第2のプログラムP2に追加された定数C2の内容が反映されていない点で、第1の業務ルール表T1と第2のプログラムP2との対応関係に齟齬が発生しているといえる。
処理部12は、記憶部11に記憶された第2のプログラムP2における条件文に関する分岐条件(分岐毎の入力変数に対する入力値の組)と分岐条件に応じた出力とを示す入出力表T2を作成する。例えば、入出力表T2は、項番、出力および条件(分岐条件)の項目を含む。処理部12は、第2のプログラムP2のシンボリック実行の結果に基づいて、入出力表T2を作成してもよい。シンボリック実行とは、入力変数に記号値を設定してプログラムを模擬的に実行することによりプログラムのロジックを分析する技術である。シンボリック実行の結果は、プログラムに含まれる条件分岐によるパス毎の変数の条件と、出力とを含む。処理部12は、この結果を整理することで、入出力表T2を得る。入出力表T2は、第2のプログラムP2に対応する入出力表である。処理部12は、作成した入出力表T2を示す情報を記憶部11に格納する。
処理部12は、定義ルールR1を示す情報に基づいて、入出力表T2に含まれる条件文の組み合わせ(複合条件)に対する業務用語を定義する。例えば、定義ルールR1には、条件文の組み合わせの書式に対応する業務用語が予め設定されている。例えば、入出力表T2の項番“1”の分岐条件には第2のプログラムP2の3~4行目および6~7行目のIF文に対応する条件文“コード = 1”、“コード = 2”、“0 < 範囲”および“範囲 < 10”が含まれる。
第1の例では、定義ルールR1は、「条件“(下限値 < 変数)AND(変数 < 上限値)”にマッチしたら、“変数内”と命名する」というルールを含む。当該ルールにおける“変数”、“下限値”および“上限値”の文字列は、入出力表T2の条件に含まれる具体的な文字列に置換される。本例では、入出力表T2の項番“1”のレコードに含まれる“範囲”を“変数”に、“0”を“下限値”に、“10”を“上限値”にそれぞれ当てはめることができる。したがって、処理部12は、入出力表T2の項番“1”に含まれる複合条件“(0 < 範囲)AND(範囲 < 10)”を業務用語“範囲内”と命名する。なお、処理部12は、入出力表T2に含まれる複合条件のうち、入出力表T2中に、当該複合条件の否定条件が含まれるものに対して業務用語を定義する。否定条件が含まれない条件は、プログラムのパスに影響せず、業務ルールに関与しないと考えられるためである。例えば、入出力表T2の項番“1”の条件“(0 < 範囲)AND(範囲 < 10)”に対しては、同項番“2”の条件“(0 NOT < 範囲)OR(範囲 NOT < 10)”が否定条件となっている。
第2の例では、定義ルールR1は、「条件“(変数 =定数1)[OR(変数 = 定数2)]+”にマッチしたら、“有効変数”と命名する」というルールを含む。当該ルールの“[OR(変数 = 定数2)]+”の部分は、2つ目以降の定数に関する条件がORで結合され得ることを示す。また、当該ルールにおける“変数”、“定数1”および“定数2”の文字列は、入出力表T2の条件に含まれる具体的な文字列に置換される。本例では、入出力表T2の項番“1”、“2”のレコードに含まれる“コード”を“変数”に、“1”を“定数1”に、“2”を“定数2”にそれぞれ当てはめることができる。したがって、処理部12は、入出力表T2の項番“1”、“2”に含まれる複合条件“(コード = 1)OR(コード = 2)”を業務用語“有効コード”と命名する。なお、入出力表T2の項番“3”の条件“(コード NOT = 1)AND(コード NOT = 2)”は、条件“(コード = 1)OR(コード = 2)”の否定条件となっている。
処理部12は、定義された業務用語を含む業務用語表T3を示す情報を記憶部11に格納する。なお、業務用語表T3では、業務用語に対して正条件が対応付けられる。正条件とは、互いに否定の関係にある2つの条件のうち、否定演算子の少ない方の条件である。
処理部12は、定義された業務用語と入出力表T2とを用いて、第2のプログラムP2に対応する第2の業務ルール表T4を作成する。例えば、処理部12は、業務用語表T3に基づいて、入出力表T2の項番“1”の条件における“(コード = 1)OR(コード = 2)”の部分を、“有効コード=True”に置換する。ここで、“True”は、業務用語表T3に定義された業務用語の条件に対する正条件であることを示す。同様に、処理部12は、業務用語表T3に基づいて、入出力表T2の項番“1”の条件における“(0 < 範囲)AND(範囲 < 10)”の部分を、“範囲内 = True”に置換する。すると、入出力表T2の項番“1”の条件は、“(有効コード = True)AND(範囲内 = True)”と表される。
また、処理部12は、業務用語表T3に基づいて、入出力表T2の項番“2”の条件を、“(有効コード = True)AND(範囲内 = False)”と表す。“範囲内 = False”となる理由は、入出力表T2の項番“2”の条件の“(0 NOT < 範囲)OR(範囲 NOT < 10)”の部分は、業務用語“範囲内”の条件に対する否定条件だからである。
更に、処理部12は、業務用語表T3に基づいて、入出力表T2の項番“3”の条件を“(有効コード = False)”と表す。“有効コード = False”となる理由は、入出力表T2の項番“3”の条件の“(コード NOT = 1)AND(コード NOT = 2)”は、業務用語“有効コード”の条件に対する否定条件だからである。
処理部12は、作成した第2の業務ルール表T4を記憶部11に格納する。また、処理部12は、業務用語表T3および第2の業務ルール表T4を、第2のプログラムP2に対応付ける。
こうして新たに作成された業務用語表T3および第2の業務ルール表T4は、第2のプログラムP2に対する修正を反映した内容となる。例えば、第2の業務ルール表T4における“有効コード”に関する条件の記述は、業務用語表T3によれば、新たに追加された定数C2に関する条件が適切に反映されている。このようにして、プログラム解析装置10によれば、修正後のプログラムに対して、業務ルールを適切に作成することができる。
以下では、プログラム解析装置10として用いられるサーバコンピュータ(解析サーバ)を例示して、プログラム解析の機能を更に詳細に説明する。
[第2の実施の形態]
図2は、第2の実施の形態の解析サーバのハードウェア例を示す図である。解析サーバ100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106およびNIC(Network Interface Card)107を有する。各ハードウェアは解析サーバ100のバスに接続されている。
ここで、解析サーバ100は、第1の実施の形態のプログラム解析装置10の一例である。また、CPU101は、第1の実施の形態の処理部12の一例である。RAM102またはHDD103は、第1の実施の形態の記憶部11の一例である。
CPU101は、解析サーバ100の情報処理を制御するハードウェアである。CPU101は、マルチプロセッサであってもよい。CPU101は、例えばCPU、DSP、ASICまたはFPGAなどである。CPU101は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
RAM102は、解析サーバ100の主記憶装置である。RAM102は、CPU101に実行させるOSのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、CPU101による処理に用いる各種データを記憶する。
HDD103は、解析サーバ100の補助記憶装置である。HDD103は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103は、OSのプログラム、アプリケーションプログラム、および各種データを記憶する。解析サーバ100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、解析サーバ100に接続されたディスプレイ21に画像を出力する。ディスプレイ21として、CRT(Cathode Ray Tube)ディスプレイや液晶ディスプレイなどを用いることができる。
入力信号処理部105は、解析サーバ100に接続された入力デバイス22から入力信号を取得し、CPU101に出力する。入力デバイス22として、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
媒体リーダ106は、記録媒体23に記録されたプログラムやデータを読み取る装置である。記録媒体23として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)を使用できる。また、記録媒体23として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ106は、例えば、CPU101からの命令に従って、記録媒体23から読み取ったプログラムやデータをRAM102またはHDD103に格納する。
NIC107は、ネットワーク24を介して他の装置と通信を行う。NIC107は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
図3は、V字モデルの例を示す図である。システム開発の現場では、V字モデルに従って開発工程の計画や、開発作業が行われる。V字モデルは、最初に要件定義を行う。要件定義では、ユーザの要求する要件を明確化する。次いで、要件定義で明確化された要件を実現するための設計を、基本設計および詳細設計の工程により段階的に詳細化し、その後、プログラムの製造の工程を行う。ここまでがV字の左上から下へ向かう開発作業の流れである。プログラムの製造が行われると、V字の下から右上に向かって、各工程の設計とテスト(単体テスト、結合テストおよびシステムテスト)とを対応付けて品質の確認が行われる。
ここで、V字モデルの各段階において成果物が作成される。成果物には次の文書がある。
要件定義の成果物は、要件定義書D1である。要件定義書D1は、開発対象のシステムで実現すべき要件や機能を、システムの発注者とシステムの開発者との間で明確化する目的で作成される。要件定義書D1は、システムの開発に詳しくない発注者でも容易に理解できるように、システム開発の用語よりも業務用語などを用いて記述されることがある。
基本設計の成果物は、基本設計書D2である。基本設計書D2は、要件定義書の要件を実現するための基本的な設計事項を記述する。基本設計書D2は、基本的で概要的な設計書であり、コンピュータで実行可能なレベルまでは記述せずに、業務用語や基本設計用の用語を用いて記述される。
詳細設計の成果物は、詳細設計書D3である。詳細設計書D3は、基本設計書D2の設計内容をプログラムに実装可能なレベルに詳細化した設計を記述する。プログラム変数に該当するレベルの用語を用いて記述される。
製造の成果物は、プログラムD4である。プログラムD4は、詳細設計書D3の設計内容をコンピュータで実行するためのソースプログラムであり、プログラム言語を用いて記述される。
上記の各成果物は、開発工程の進展に伴い、要件定義書D1からプログラムD4へ向かう順に、記述内容の一貫性を維持して詳細化される。
図4は、文書化された情報範囲と理解の難度の例を示す図である。文書は、要件定義書D1からプログラムD4へと詳細化されるに従って、文書化された情報の範囲が増加し、文書化されていない情報が減少する。文書化されていない情報とは、発注者や開発者の間で常識的あるいは暗黙的に共有される業務知識などである。開発初期に作成される要件定義書D1では、発注者や開発者などの関係者が常識的に業務知識を共有する。このため、要件定義書D1が厳密に定義されない業務用語などの業務知識を用いて記述されていても発注者や開発者などは内容を理解可能である。一方、業務用語を用いた記述の方が簡易な記述となり、発注者と開発者との間で共通理解を形成しやすいという一面もある。
コンピュータを用いて実行可能なシステムを構築するためには、業務知識の意味を厳密に定義することが求められる。このため、コンピュータで実行可能なプログラムを開発するためには、当該システムに関する情報のプログラムD4への記述を要する。その結果、詳細設計書D3やプログラムD4のように、開発後半の文章の記述は詳細となり、また、記述内容の量が多くなる。以上の結果、詳細設計書D3やプログラムD4は、一般に、理解の困難性が高くなる。
図5は、V字モデルにおける文書の例(その1)を示す図である。業務ルールD11は、要件定義書D1に記述される。業務ルールD11は、システムの機能に関連する業務上の特定の判断基準を示す。要件定義書D1は、発注者と開発者との間で開発要件を明確化することが目的であるため、例えば、「有効コード」や「期間内」といった業務用語を用いて記述される。図5の業務ルールD11の例では、可読性や一覧性などを高めるために、決定表(表形式)で記述する場合を示したが、例えば、「有効コードで、かつ、期間内ならば、結果は1とする」のように自然言語で記述されてもよい。
業務用語D12は、要件定義書D1や基本設計書D2において、業務ルールD11の「有効コード」や「期間内」の意味を定義する。例えば、「期間内」は、「2017年8月1日から2017年8月31日の間」を意味する。このように自然言語で記述することもあるし、業務用語D12のように条件式を用いて「(20170801 < 期間)AND(期間 < 20170831)」のように記述することもある。なお、業務ルールD11と業務用語D12とが一体となって、業務ルールに関する知識を形成しているともいえる。当初の設計文書では、業務用語D12の内容が業務ルールD11に組み込まれていることもある。
詳細化された業務ルールD13は、基本設計書D2に記述される。業務ルールD13は、業務ルールD11をプログラム言語で記述することを可能にするため、業務用語D12を条件式に展開して記述したものである。
図6は、V字モデルにおける文書の例(その2)を示す図である。プログラムD14は、プログラムD4の一部であり、詳細化された業務ルールD13をコンピュータにより実行できるようにプログラム言語で記述したものである。プログラムD14では、プログラム言語の一例として、COBOLを用いた記述を示している。
ここで、長期間に亘り運用保守されるシステムでは、不具合の修理や業務内容の変化などに対応するために、機能の変更や追加などの部分的な改修が断続的に行われる。この部分改修を行う際に、開発者により全ての文書とプログラムの一貫性が維持されることが望ましい。しかし、改修のコストや開発期間などの制限のために、開発者が全ての文書とプログラムとを一貫性を維持しながら適切に更新することは容易ではない。
このような状況のため、システムの機能に直接関係するプログラムが改修されても、機能には直接関係しない文書は十分に改修されない事態となり、文書の内容に不備が生じる。すなわち、プログラムの改修内容が設計文書に反映されず、プログラムと設計文書との間に齟齬が生じる。このように、プログラムと設計文書との間に齟齬があると、その後のプログラムの改修の際などに、設計文書に記載の情報を利用することができない。
そこで、解析サーバ100は、プログラムの修正に応じて、業務ルールなどの設計文書を適切に再作成する機能を提供する。
図7は、解析サーバの機能例を示す図である。解析サーバ100は、プログラム記憶部110、解析情報記憶部120、命名ルール記憶部130、解析結果記憶部140および解析部150を有する。
プログラム記憶部110、解析情報記憶部120、命名ルール記憶部130および解析結果記憶部140は、RAM102やHDD103の記憶領域を用いて実現される。解析部150は、CPU101がRAM102に記憶されたプログラムを実行することで実現される。
プログラム記憶部110は、解析対象のプログラム111を記憶する。プログラム111は、あるプログラムの修正後のプログラムである。このため、修正前のプログラムに対して作成された既存の設計文書の業務用語の定義内容や業務ルールの内容は、プログラム111に整合していない。
解析情報記憶部120は、解析部150の処理に用いられる各種の情報を記憶する。例えば、解析情報記憶部120は、シンボリック実行結果121、入出力表122、業務条件候補表123および業務条件選定結果124を記憶する。これらの情報は、テーブル形式のデータでもよい。
シンボリック実行結果121は、解析部150によるプログラム111のシンボリック実行の結果を示す情報である。シンボリック実行結果121は、シンボリック実行により抽出されたプログラムの処理パスの情報を含む。
入出力表122は、解析部150によりシンボリック実行結果121から抽出されたプログラム111における入力と出力との関係を示す情報である。
業務条件候補表123は、解析部150により入出力表122から抽出された業務条件候補を示す情報である。
業務条件選定結果124は、解析部150により業務条件候補表123から選定された業務条件を示す情報である。
命名ルール記憶部130は、命名ルール表131を記憶する。命名ルール表131は、業務条件に対する条件名の命名ルールを示す情報である。
解析結果記憶部140は、解析部150により作成された業務用語表141および業務ルール表142を記憶する。業務用語表141は、業務用語の定義を示す情報である。業務ルール表142は、業務ルールの内容を示す情報である。
解析部150は、解析対象のプログラム111が入力されると、プログラム111を解析し、業務用語表141および業務ルール表142を出力する。解析部150は、シンボリック実行部151、入出力表生成部152、業務条件候補生成部153、業務条件選定部154、業務条件命名部155および入出力表書換部156を有する。
シンボリック実行部151は、解析対象のプログラム111をシンボリック実行することにより、プログラム111の処理パスを抽出し、シンボリック実行結果121を生成する。シンボリック実行部151は、シンボリック実行結果121を解析情報記憶部120に格納する。
入出力表生成部152は、シンボリック実行結果121を集計し、整理することで、プログラム111の入力と出力との関係を示す入出力表122を生成し、解析情報記憶部120に入出力表122を格納する。
業務条件候補生成部153は、入出力表122に含まれる条件から業務条件の候補を生成し、業務条件候補表123に登録する。業務条件候補生成部153は、業務条件候補表123を解析情報記憶部120に格納する。ここで、業務条件とは、プログラム111のうち、ユーザの業務との関連性が比較的強い(例えば、頻繁に更新されるなど)と推定される条件群である。業務条件候補は、複数の条件の組み合わせである複合条件である。したがって、業務条件も複合条件である。複合条件を業務条件の候補とすることで、ユーザにより更新された条件の変更(例えば、変数に対する条件の追加など)を適切に検出可能にする。例えば、新規機能の追加などに応じて、プログラマなどによって、複合的な条件にコードが変更されるケースが多いため、複合条件を検出することで、コードの更新内容を適切に検出できる可能性が高まる。
業務条件選定部154は、業務条件候補表123に登録された業務条件の複数の候補のうち、着目する候補について、当該候補の否定条件が当該複数の候補の中に存在するものを業務条件として選定し、業務条件選定結果124を生成する。業務条件選定部154は、業務条件選定結果124を解析情報記憶部120に格納する。
業務条件命名部155は、業務条件選定結果124に含まれる業務条件に対して、命名ルール表131における命名ルールに基づいて条件名を命名し、命名結果を示す業務用語表141を生成する。業務条件命名部155は、解析結果記憶部140に業務用語表141を格納する。
入出力表書換部156は、業務条件命名部155により命名された業務条件により、入出力表122に含まれる条件の記述を置き換えることで、業務ルール表142を生成する。入出力表書換部156は、解析結果記憶部140に業務ルール表142を格納する。
図8は、シンボリック実行の例を示す図である。プログラムの分析方法の1つに、シンボリック実行(記号実行)がある。シンボリック実行では、プログラムへの入力値を格納する変数に、具体的な数値や具体的な文字に代えて定数を示すシンボル(記号値)を設定して、プログラムの実行可能なパスを抽出することによって、プログラムを分析する技術である。シンボリック実行に関して、例えば、次の文献を参考にすることができる。
(文献)玉井哲雄、福永光一著、「シンボリック実行システム」、情報処理、pp.18-28、1982年1月15日
次に、シンボリック実行によるプログラムの分析例を説明する。
プログラムE1は、分析対象のプログラムの一例である。ただし、図8では、ロジックがわかり易いように、プログラム言語による記述ではなく、フローチャートの形式でプログラムE1を図示している。
プログラムE1は、変数「性別」の値として2文字の文字列を受け取り、変数「結果」の値として1文字を出力する。プログラムE1は、2つの条件分岐を含む。1つ目の条件分岐では、変数「性別」の値が「男性」であるか判定される。変数「性別」の値が「男性」である場合には変数「結果」の値が「M」に更新され、そうでない場合には変数「結果」の値が「 」(空白)に更新される。また、2つ目の条件分岐では、変数「性別」の値が「女性」であるか判定される。変数「性別」の値が「女性」である場合には変数「結果」の値が「F」に更新され、そうでない場合には変数「結果」の値は変化しない。そして、プログラムE1が終了する。
プログラムE1には3つのパスA,B,Cが存在する。変数「性別」の値に応じて、これら3つのパスのうちの何れか1つが実行される。パスAでは、変数「性別」の値が「男性」の場合である。この場合、1つ目の分岐条件はYESと判定され、2つ目の分岐条件はNOと判定される。パスAでは、変数「結果」の値は「M」になる。
パスBは、変数「性別」の値が「女性」の場合である。パスBでは、1つ目の分岐条件はNOと判定され、2つ目の分岐条件はYESと判定される。パスBでは、変数「結果」の値は「F」になる。
パスCは、変数「性別」の値が「男性」でも「女性」でもない場合である。パスCでは、1つ目の分岐条件と2つ目の分岐条件の両方がNOと判定される。この実行パスでは、変数「結果」の値は「 」(空白)になる。
プログラムE1は直列の2つの条件分岐文を含むため、分岐条件の内容を無視すれば、実行パスの候補は4つ存在する。しかし、変数「性別」の値が「男性」であることと変数「性別」の値が「女性」であることは矛盾するため、2つの分岐条件の両方がYESと判定されることはない。よって、4つの実行パスの候補のうち、実行される可能性のある有効な実行パスは3つである。
条件分岐文において、ある分岐方向(YES方向またはNO方向)に進むための条件を満たす変数の値が少なくとも1つ存在するとき、その分岐方向は「充足可能である」と言うことがある。一方、ある分岐方向に進むための条件を満たす変数の値が存在しないとき、その分岐方向は「充足可能でない」と言うことがある。
プログラムE1において、1つ目の条件分岐では変数「性別」の値は制約されていないため、2つの分岐方向は共に充足可能である。一方、2つ目の条件分岐における充足可能性は、1つ目の条件分岐で選択した分岐方向に依存する。1つ目の条件分岐でYES方向を選択した場合、2つ目の条件分岐のYES方向は充足可能でなくなりNO方向のみ充足可能となる。1つ目の条件分岐でNO方向を選択した場合、2つ目の条件分岐の分岐方向は共に充足可能である。よって、有効な実行パスは3つであると判断できる。
ここで、プログラムE1をシンボリック実行する例を説明する。シンボリック実行部151は、プログラムE1に対する入力を示す変数「性別」に、具体的な文字ではなく任意の定数を示す抽象的なシンボル(記号値)を割り当てる。ここでは、変数名と同じ「性別」をシンボルとして用いる。シンボリック実行部151は、シンボルを用いてプログラムE1の命令を擬似的に実行していく。
プログラムE1の始点から1つ目の条件分岐の前までは、パスの分岐は存在しない。1つ目の条件分岐について、この時点ではそのパスが選択される条件(パス条件)は存在せず、2つの分岐方向は共に充足可能である。よって、シンボリック実行部151は、1つ目の条件分岐においてパスを分割し、一方のパスを選択する。ここでは、シンボリック実行部151は、YES方向のパスを選択したとする。
次に、2つ目の条件分岐について、この時点におけるパス条件はシンボル「性別」が「男性」であることであるため、YES方向は充足可能でなくNO方向は充足可能である。よって、シンボリック実行部151はNO方向を選択する。その後、この1番目のパス(パスA)は終了する。シンボリック実行部151は、1番目のパスのパス条件を、シンボル「性別」が「男性」でありかつシンボル「性別」が「女性」でないと判定する。また、シンボリック実行部151は、1番目のパスの処理結果(パス出力)を、変数「結果」の値が「M」であると判定する。シンボリック実行部151は、これらの判定結果を、シンボリック実行結果E2に登録する(項番“1”のレコードに相当)。
1番目のパスが終了すると、シンボリック実行部151は、当該パスの直近の分割点まで戻り、未選択のパスを選択する。ここでは、シンボリック実行部151は、1つ目の条件分岐まで戻ってNO方向のパスを選択する。
2つ目の条件分岐について、この時点におけるパス条件はシンボル「性別」が「男性」でないことであるため、YES方向とNO方向の何れも充足可能である。よって、シンボリック実行部151は、2つ目の条件分岐においてパスを更に分割し、一方のパスを選択する。ここでは、シンボリック実行部151は、YES方向の実行パスを選択したとする。その後、この2番目のパス(パスB)は終了する。シンボリック実行部151は、2番目のパスのパス条件を、シンボル「性別」が「男性」でなくかつシンボル「性別」が「女性」であると判定する。また、シンボリック実行部151は、2番目のパスのパス出力を、変数「結果」の値が「F」であると判定する。シンボリック実行部151は、これらの判定結果を、シンボリック実行結果E2に登録する(項番“2”のレコードに相当)。
2番目のパスが終了すると、シンボリック実行部151は、2つ目の条件分岐まで戻ってNO方向の実行パスを選択する。その後、この3番目のパス(パスC)は終了する。シンボリック実行部151は、3番目のパスのパス条件を、シンボル「性別」が「男性」でなくかつシンボル「性別」が「女性」でないと判定する。また、シンボリック実行部151は、3番目のパスのパス出力を、変数「結果」の値が「 」(空白)であると判定する。シンボリック実行部151は、これらの判定結果を、シンボリック実行結果E2に登録する(項番“3”のレコードに相当)。そして、未選択の実行パスが存在しないためシンボリック実行が終了する。
なお、シンボリック実行部151は、パスの分割点において、その時点のパス条件と各変数の値とを保存しておく。シンボリック実行部151は、1つのパスが終了して分割点までバックトラックしたとき、保存しておいたパス条件と各変数の値とを引き継いで、未選択の分岐方向に対応する他のパスの探索を続ける。
ここで、1番目のパスのパス条件は、「性別が男性である」かつ「性別が女性でない」ことである。これは、「性別が男性である」という条件に簡約化できる。2番目の実行パスのパス条件は、「性別が男性でない」かつ「性別が女性である」ことである。これは、「性別が女性である」という条件に簡約化できる。3番目のパスのパス条件は、「性別が男性でない」かつ「性別が女性でない」ことである。このように、入出力表生成部152は、シンボリック実行結果E2に対する簡約化などを行って整理することで、プログラムE1に関する入出力表E3を生成する。入出力表E3は、プログラムE1に関する入力に応じた条件と出力との対応関係を示す情報である。
なお、条件分岐文における充足可能性の判断やパス条件の簡約化には、既存の数式処理技術を利用することができる。例えば、シンボリック実行部151は、充足可能性の判断に、SMT(Satisfiability Modulo Theories)ソルバやSAT(Satisfiability)ソルバなどを用いることができる。また、入出力表生成部152は、パス条件の簡約化に、クワイン・マクラスキー(QM:Quine-McCluskey)法などを用いることができる。QM法によれば、例えば、論理式A,B,Cに対して、(A∧B∧C)∨(A∧B∧¬C)=A∧Bのように、論理式を簡約化することができる。あるいは、入出力表生成部152は、次のような手順によりパス条件を簡約化することもできる。
(手順1)パス条件の条件式を選言標準形(DNF:Disjunctive Normal Form)に展開する(元々DNFであれば展開不要)。展開後の条件式は、連言節(DNF項と称する)の選言である。すなわち、「条件式=DNF項(1)∨DNF項(2)∨・・・」の形式である。具体的な例として、条件式を「((X>1)∧(Y<0))∨((X>1)∧(Y>10))∨((X>1)∧(Y NOT<0)∧(Y NOT>10))」とする。この場合、DNF項は、((X>1)∧(Y<0))、((X>1)∧(Y>10))、((X>1)∧(Y NOT<0)∧(Y NOT>10))である。
(手順2)条件式から、NOT(否定演算子)をもたない比較演算子だけの比較条件式を、原子比較条件式として抽出する。上記の条件式に対して抽出される原子比較条件式は、(X>1)、(Y<0)、(Y>10)である。
(手順3)DNF項の選言の組み合わせで、原子比較条件式とその否定の連言を因数条件の候補として因数分解する。(X>1)を因数条件として、上記の条件式を因数分解すると、条件式「(X>1)∧((Y<0)∨(Y>10)∨((Y NOT<0)∧(Y NOT>10)))」となる。
(手順4)上記因数条件と連言される他の因数条件が恒真か判定し、恒真であれば、他の因数条件が恒真である旨を代入することで、当該DNF項の選言を簡約化する。(手順3)の例に対して、因数条件(X>1)と連言される他の因数条件は「(Y<0)∨(Y>10)∨((Y NOT<0)∧(Y NOT>10))=TRUE」であり、当該他の因数条件は恒真(Yの値に依らずに常に真)である。よって、(手順3)で得た条件式に、(手順4)の結果を代入することで、(手順1)で示した条件式は、(X>1)のように簡約化される。
図9は、解析対象のプログラムの例を示す図である。プログラム111は、前述のプログラムD14に対する修正後のプログラムの一例である。ここで、プログラム111に含まれる各行を、プログラム111の左側に便宜的に付した行番号により指し示す。また、図9では、図6のプログラムD14に対する修正箇所を強調のために矩形で囲っている。
例えば、プログラム111の12行目には、定数C2の定義が追加されている。また、プログラム111の26行目~34行目には、定数C2を用いた変数“コード”に関する条件判定および条件判定に応じた処理が追加されている。
図10は、シンボリック実行結果の例を示す図である。シンボリック実行結果121は、プログラム111のシンボリック実行の結果である。シンボリック実行結果121は、項番、パス出力およびパス条件の項目を含む。
項番の項目には、レコードの識別番号が登録される。パス出力の項目には、該当のパスでの出力が登録される。パス条件の項目には、該当のパスが実行されるときの条件が登録される。
例えば、シンボリック実行結果121には、項番が“1”、パス出力が“結果 = 1”、パス条件が“((コード = 11) AND (20170801 < 期間) AND (期間 < 20170831))”というレコードが登録される。このレコードは、“コード=11”、かつ、“20170801<期間”、かつ、“期間<20170831”の条件を満たす場合に、プログラム111の出力が“結果=1”であることを示す。
シンボリック実行結果121には、プログラム111に含まれる条件分岐の分岐先の組み合わせに応じたパス毎に、パス出力とパス条件とが登録される。
図11は、入出力表の例を示す図である。入出力表122は、項番、出力および条件の項目を含む。項番の項目には、レコードの識別番号が登録される。出力の項目には、シンボリック実行結果121におけるパス出力の値が登録される。ただし、入出力表122では、シンボリック実行結果121においてパス出力の値が同じであるレコードが複数の場合、当該複数のレコードに含まれる複数の条件が1つに集約される。条件の項目には、シンボリック実行結果121におけるパス出力毎のパス条件を乗法標準形(CNF:Conjunctive Normal Form)に変形した結果が登録される。CNFでは、条件式を選言節の連言の形式で表す。入出力表生成部152は、シンボリック実行結果121のパス条件を同じ値であるパス出力毎にまとめて簡約化し、簡約化した結果をCNFに変形することで、入出力表122における条件の内容を求める。CNFへの変形には、既存の方法(例えば、ドモルガンの法則、分配法則、および、Tseitin変換など)を用いることができる。
例えば、入出力表122には、項番が“1”、出力が“結果 = 1”、条件が“((コード = 11) OR (コード = 22)) AND ((20170801 < 期間) AND (期間 < 20170831))”というレコードが登録される。このレコードは、“コード”が“11”または“22”であり、かつ、“20170801<期間”、かつ、“期間<20170831”の条件を満たす場合に、プログラム111の出力が“結果=1”であることを示す。
入出力表122には、シンボリック実行結果121における出力“結果 = 2”および“結果 = 3”に対応する各レコードも登録される。入出力表122の当該条件に含まれる“コード = 11”、“コード = 22”、“20170801 < 期間”および“期間 < 20170831”などを、条件文と言うことができる。
図12は、業務条件候補抽出用の中間データの例を示す図である。中間データ122aは、業務条件候補の抽出を行うための中間的なデータである。中間データ122aは、入出力表122に基づいて、業務条件候補生成部153により生成され、解析情報記憶部120に格納される。中間データ122aは、条件番号、候補条件、否定関係および正条件の項目を含む。
条件番号の項目には、業務条件候補の抽出元となる条件(候補条件と言う)の識別番号が登録される。候補条件の項目には、候補条件の内容が登録される。候補条件の内容は、入出力表122に基づいて、業務条件候補生成部153により所定の演算を用いて生成される。否定関係の項目には、該当のレコードの候補条件と否定関係にある他の候補条件の条件番号が登録される。否定関係にある他の候補条件が存在しない場合、否定関係の項目は設定なしとなる。ここで、設定なしをハイフン記号“-”で示す。正条件の項目には、否定関係にある他の候補条件がある場合に、正条件に該当するか否かを示す識別情報が登録される。該当する場合、正条件の項目には“該当”が登録される。該当しない場合(否定関係をもたない場合や正条件でない場合)、正条件の項目は設定なし(“-”)となる。ここで、正条件は、互いに否定関係をもつ2つの候補条件のうち、否定演算子の数が少ない方の候補条件である。否定関係にある他の候補条件がない場合、正条件の項目は常に設定なしとなる。
例えば、中間データ122aには、条件番号が“条件1”、候補条件が“((コード = 11) OR (コード = 22)) AND (20170801 < 期間) AND (期間 < 20170831)”、否定関係が“-”、正条件が“-”というレコードが登録される。このレコードは、条件番号“条件1”の候補条件の内容を示しており、当該候補条件には否定関係にある他の候補条件がないことを示す。
中間データ122aの例では、条件番号“条件2”、“条件3”、“条件6”の候補条件も同様に否定関係にある他の候補条件をもたない。
また、中間データ122aには、条件番号が“条件4”、候補条件が“((20170801 < 期間) AND (期間< 20170831))”、否定関係が“条件7”、正条件が“該当”というレコードが登録される。このレコードは、条件番号“条件4”の候補条件の内容を示す。また、このレコードは、条件番号“条件4”の候補条件には、否定関係にある条件番号“条件7”の他の候補条件があること、条件番号“条件4”および“条件7”の候補条件のうち、条件番号“条件4”の候補条件が正条件に該当することを示す。
中間データ122aの例では、条件番号“条件5”および“条件8”の2つの候補条件も互いに否定関係にあり、このうち、条件番号“条件5”の候補条件が正条件である。
図13は、業務条件候補表の例を示す図である。業務条件候補表123は、中間データ122aに基づいて、業務条件候補生成部153により生成される。業務条件候補生成部153は、中間データ122aの候補条件における条件の長い順(節の多い順)、かつ、否定演算子の少ない順に各レコードをソートする。このソートの結果が、業務条件候補表123である(業務条件候補表123における候補条件を、業務条件候補と称する)。業務条件候補表123は、項番、条件番号、業務条件候補、否定関係および正条件の項目を含む。
項番の項目には、レコードの識別番号が登録される。条件番号の項目には、候補条件の識別番号が登録される。業務条件候補の項目には、業務条件候補の内容が登録される。否定関係の項目には、該当のレコードの業務条件候補と否定関係にある他の業務条件候補の条件番号が登録される。否定関係の項目の設定ルールは、中間データ122aと同様である。正条件の項目には、否定関係にある他の業務条件候補がある場合に、正条件に該当するか否かを示す識別情報が登録される。正条件の項目の設定ルールは、中間データ122aと同様である。
業務条件候補生成部153は、前述のように、中間データ122aのソート結果である。このため、各項目の具体的な設定内容は、中間データ122aと同様である。ただし、項番の項目には、ソート後に、各レコードの上位から下位へ向かって昇順に番号が設定される。
図14は、業務条件選定用の中間データの例を示す図である。中間データ123aは、業務条件の選定を行うための中間的なデータである。中間データ123aは、業務条件候補表123に基づいて、業務条件選定部154により生成され、解析情報記憶部120に格納される。中間データ123aは、項番、正条件の入出力表項番、否定の入出力表項番および業務条件判定の項目を含む。
項番の項目には、レコードの識別番号が登録される。正条件の入出力表項番の項目には、業務条件候補表123の該当の項番に対応する業務条件候補の、入出力表122における存在場所(入出力表122におけるレコードの項番、または、当該項番と条件における位置との組)を示す情報が登録される。正条件は、業務条件候補と同じ条件を示す。該当の業務条件候補が入出力表122のあるレコードの条件の一部に一致する場合、入出力表122の項番と、当該項番に対応する条件のうち該当の業務条件候補と一致する位置を示す情報とが、正条件の入出力表項番の項目に登録される。
否定の入出力表項番の項目には、業務条件候補表123の該当の項番に対応する業務条件候補の否定(すなわち、業務条件候補の否定を示す否定条件)の入出力表122における存在場所を示す情報が登録される。該当の業務条件候補の否定が入出力表122のあるレコードの条件の一部に一致する場合、入出力表122の項番と、当該項番に対応する条件のうち該当の業務条件候補の否定と一致する位置を示す情報とが、否定の入出力表項番の項目に登録される。
業務条件判定の項目には、業務条件として選定されたか否かを示す識別情報が登録される。業務条件として選定された場合、業務条件判定の項目には“true”が設定される。業務条件として選定されなかった場合、業務条件判定の項目には“false”が設定される。ここで、互いに否定関係となっている2つの業務条件候補のうち、正条件である方が業務条件として選定される。このため、中間データ123aの項番“6”や項番“8”に対応する業務条件候補は、業務条件の選定の対象外となる。したがって、項番“6”および項番“8”に対応する業務条件候補のレコードには、項番以外の情報が設定されていない(項番以外は設定なし“-”である)。
なお、正条件の入出力表項番および否定の入出力項番の項目は、業務条件判定が“true”の場合に設定値の登録が行われ、業務条件判定が“false”の場合に設定なしとなる。
例えば、中間データ123aには、項番が“1”、正条件の入出力表項番および否定の入出力表項番が設定なし“-”、業務条件判定が“false”というレコードが登録される。このレコードは、業務条件候補表123の項番“1”の業務条件候補が、業務条件として選定されなかったことを示す(項番“2”~“4”のレコードも同様)。
また、中間データ123aには、項番が“5”、正条件の入出力表項番が“1の右端”、否定の入出力表項番が“2の右端”、業務条件判定が“true”というレコードが登録される。このレコードは、業務条件候補表123の項番“5”の業務条件候補と同じ条件が、入出力表122の項番“1”の条件の右端の節にあることを示す。また、当該項番“5”の業務条件候補の否定を示す条件が入出力表122の項番“2”の条件の右端の節であることを示す。更に、当該項番“5”の業務条件候補は、業務条件として選定されたことを示す。
更に、中間データ123aには、項番が“7”、正条件の入出力表項番が“1の左端、2の左端”、否定の入出力表項番が“3”、業務条件判定が“true”というレコードが登録される。このレコードは、業務条件候補表123の項番“7”の業務条件候補と同じ条件が、入出力表122の項番“1”の左端の節、および、入出力表122の項番“2”の左端の節にあることを示す。また、当該項番“7”の業務条件候補の否定を示す条件が入出力表122の項番“3”の条件であることを示す。更に、当該項番“7”の業務条件候補は、業務条件として選定されたことを示す。
図15は、業務条件選定結果の例を示す図である。業務条件選定結果124は、業務条件選定部154により中間データ123aに基づいて生成される。業務条件選定結果124は、項番、業務条件、正条件の出現場所および否定条件の出現場所の項目を含む。
項番の項目には、レコードの識別番号が登録される。業務条件の項目には、業務条件の内容が登録される。正条件の出現場所の項目には、業務条件が出現する入出力表122の位置(レコードの項番と、当該レコードの条件内の位置を示す情報)が登録される。否定条件の出現場所の項目には、業務条件の否定が出現する入出力表122の位置(レコードの項番と、当該レコードの条件内の位置を示す情報)が登録される。
例えば、業務条件選定結果124には、項番が“1”、業務条件が“((20170801 < 期間) AND (期間 < 20170831))”、正条件の出現場所が“1)入出力表条件1の右端”、否定条件の出現場所が“1)入出力表条件2の右端”というレコードが登録される。このレコードは、項番“1”の業務条件を示しており、当該業務条件が入出力表122の項番“1”の条件の右端の節に相当することを示す。また、当該業務条件の否定を示す条件が入出力表122の項番“2”の条件の右端の節に相当することを示す。
また、業務条件選定結果124には、項番が“2”、業務条件が“((コード = 11) OR (コード = 22)”、正条件の出現場所が“1)入出力表条件1の左端、2)入出力表条件2の左端”、否定条件の出現場所が“1)入出力表条件3”というレコードが登録される。このレコードは、項番“2”の業務条件を示しており、当該業務条件が入出力表122の項番“1”の条件の左端の節に出現することを示す。また、当該業務条件が入出力表122の項番“2”の条件の左端の節に出現することを示す。また、当該業務条件の否定を示す条件が入出力表122の項番“3”の条件に相当することを示す。
図16は、命名ルール表の例を示す図である。命名ルール表131は、項番および命名ルールの項目を含む。項番の項目には、レコードの識別番号が登録される。命名ルールの項目には、業務条件に対する業務用語の命名ルールが登録される。
例えば、命名ルール表131には、項番が“1”、命名ルールが“業務条件が「(下限 < 変数) AND (変数 < 上限)」にマッチしたら、「変数内」と命名する。”というレコードが登録される。このレコードは、“変数”に関する業務条件の書式が項番“1”の命名ルールの書式に一致する場合に、当該業務条件を、「変数内」と定義することを示す。ここで、「変数内」の文字列のうち、“変数”の箇所は、実際の変数名が挿入される。
また、命名ルール表131には、項番が“2”、命名ルールが“業務条件が「(変数 = 定数1)[OR (変数 = 定数2)]+」にマッチしたら、「有効変数」と命名する。”というレコードが登録される。このレコードは、“変数”に関する業務条件の書式が項番“2”の命名ルールの書式に一致する場合に、当該業務条件を、「有効変数」と定義することを示す。当該命名ルールの“[OR(変数 = 定数2)]+”の部分は、2つ目以降の定数に関する条件がORで結合され得ることを示す。ここで、「有効変数」の文字列のうち、“変数”の箇所は、実際の変数名が挿入される。
図17は、業務用語表の例を示す図である。業務用語表141は、業務条件選定結果124および命名ルール表131に基づいて、業務条件命名部155により生成される。業務用語表141は、項番、業務用語および条件の項目を含む。
項番の項目には、レコードの識別番号が登録される。業務用語の項目には、命名された業務用語が登録される。条件の項目には、業務用語に対応する条件(業務条件)が登録される。
例えば、業務用語表141には、項番が“1”、業務用語が“期間内”、条件が“(20170801 < 期間) AND (期間 < 20170831)”というレコードが登録される。このレコードは、項番“1”の条件に対して、業務用語“期間内”が命名されたことを示す。業務用語“期間内”は、項番“1”の条件に対して、命名ルール表131の項番“1”の命名ルールが適用された結果である。
また、業務用語表141には、項番が“2”、業務用語が“有効コード”、条件が“(コード = 11) OR (コード =22)”というレコードが登録される。このレコードは、項番“2”の条件に対して、業務用語“有効コード”が命名されたことを示す。業務用語“有効コード”は、項番“2”の条件に対して、命名ルール表131の項番“2”の命名ルールが適用された結果である。
図18は、業務ルール表の例を示す図である。図18(A)は、第1の形式の業務ルール表142を示す。図18(B)は、第2の形式の業務ルール表143を示す。
業務ルール表142は、入出力表122の条件の内容を、業務用語表141で定義されている業務用語に置換したものである。具体的には、入出力表122の条件に含まれる各節を業務条件の正形式および否定形式で置換する。正形式の場合、“業務用語 = True”という書式であり、否定形式の場合、“業務用語 = False”という書式である。
業務ルール表143は、業務ルール表142の条件の内容を、決定表と呼ばれる形式に変換したものである。業務ルール表143では、業務ルール表142における条件のカラムが業務用語毎のカラムに分割され、業務ルール表142における“業務用語 = True”の箇所が“T”に、“業務用語 = False”の箇所が“F”に、それぞれ置き換えられている。
入出力表書換部156は、入出力表122に基づいて、業務ルール表142および業務ルール表143を生成し、解析結果記憶部140に格納する。
次に、解析サーバ100による処理手順を説明する。
図19は、解析サーバの処理例を示すフローチャートである。解析部150は、ユーザによるプログラム111の解析開始の入力を受け付けると、下記の手順を実行する。
(S1)シンボリック実行部151は、プログラム記憶部110に記憶された解析対象のプログラム111をシンボリック実行することで、プログラム111の処理パスを抽出し、シンボリック実行結果121を生成する。シンボリック実行部151は、シンボリック実行結果121を解析情報記憶部120に格納する。
(S2)入出力表生成部152は、解析情報記憶部120に記憶されたシンボリック実行結果121に基づいて、入出力表122を生成する。入出力表生成部152は、入出力表122を解析情報記憶部120に格納する。
(S3)業務条件候補生成部153は、解析情報記憶部120に記憶された入出力表122に基づいて、中間データ122aを生成する。業務条件候補生成部153は、中間データ122aを解析情報記憶部120に格納する。業務条件候補生成部153は、解析情報記憶部120に記憶された中間データ122aに基づいて業務条件候補表123を生成する。業務条件候補生成部153は、業務条件候補表123を解析情報記憶部120に格納する。
(S4)業務条件選定部154は、解析情報記憶部120に記憶された業務条件候補表123に基づいて、中間データ123aを生成する。業務条件選定部154は、中間データ123aを解析情報記憶部120に格納する。業務条件選定部154は、解析情報記憶部120に記憶された入出力表122と中間データ123aとに基づいて、業務条件選定結果124を生成する。業務条件選定部154は、業務条件選定結果124を解析情報記憶部120に格納する。
(S5)業務条件命名部155は、解析情報記憶部120に記憶された業務条件選定結果124と、命名ルール記憶部130に記憶された命名ルール表131とに基づいて、業務用語表141を生成する。業務条件命名部155は、業務用語表141を解析結果記憶部140に格納する。
(S6)入出力表書換部156は、解析情報記憶部120に記憶された入出力表122と解析結果記憶部140に記憶された業務用語表141とに基づいて、業務ルール表142,143を生成する。入出力表書換部156は、業務ルール表142,143を解析結果記憶部140に格納する。そして、解析サーバ100の処理が終了する。
次に、ステップS1~S6それぞれの手順を説明する。
図20は、シンボリック実行の処理例を示すフローチャートである。シンボリック実行の処理は、図19のステップS1で実行される。
(S10)シンボリック実行部151は、プログラム記憶部110に記憶された解析対象のプログラム111を取得する。
(S11)シンボリック実行部151は、プログラム111のシンボリック実行を行う。シンボリック実行部151は、図8で例示したように、プログラム111の入力変数にシンボル値を設定して、プログラム111の実行可能な処理パスを抽出することで、プログラム111におけるパス出力とパス条件との関係を取得する。
(S12)シンボリック実行部151は、各処理パスの終点において、該当の処理パスのパス条件とパス出力とを、シンボリック実行結果121に記録する。シンボリック実行部151は、シンボリック実行結果121を解析情報記憶部120に格納する。そして、シンボリック実行が終了する。
図21は、入出力表生成の処理例を示すフローチャートである。入出力表生成の処理は、図19のステップS2で実行される。
(S20)入出力表生成部152は、シンボリック実行結果121からN(Nはシンボリック実行結果121の全レコード数)個の処理パスのパス出力とパス条件との組(Outn,Cndn)(n=1,・・・,N)を取得する。
(S21)入出力表生成部152は、nに1を代入する(n=1)。
(S22)入出力表生成部152は、nがN以下であるか否か(n≦Nであるか否か)を判定する。nがN以下である場合、ステップS23に処理が進む。nがNよりも大きい場合、ステップS25に処理が進む。
(S23)入出力表生成部152は、(Outn,Cndn)を取り出し、Outnの値毎にCndnをOR(論理和)で結合する。
(S24)入出力表生成部152は、nに1を加算する(n=n+1)。そして、ステップS22に処理が進む。
(S25)入出力表生成部152は、出力値毎の条件を簡約化する。図8で例示したように、入出力表生成部152は、既存の技術を用いて、条件の簡約化を行える。
(S26)入出力表生成部152は、ステップS25による簡約化後の出力値毎の条件をCNFに変形することで、入出力表122を生成する。CNFへの変形には既存の技術を利用することができる。例えば、CNFへの変形には、ドモルガンの法則、分配法則、および、Tseitin変換などを利用する方法が知られている。
(S27)入出力表生成部152は、生成した入出力表122を出力する。入出力表生成部152は、入出力表122を解析情報記憶部120に格納する。そして、入出力表生成が終了する。
ここで、図10で例示したシンボリック実行結果121に対するステップS23の結果を具体的に説明する。シンボリック実行結果121に対してステップS23が繰り返し実行されることで、パス出力“結果=1”に対応する2つのパス条件がORで結合される。より具体的には、入出力表生成部152は、“結果=1”に対して“((20170801 < 期間) AND (コード = 11) AND (期間 < 20170831)) OR ((20170801 < 期間) AND (コード = 22) AND (期間 < 20170831))”を得る。
同様に、パス出力“結果=2”に対応する4つのパス条件がORで結合される。より具体的には、入出力表生成部152は、“結果=2”に対して“((20170801 NOT < 期間) AND (コード = 11)) OR ((20170801 NOT < 期間) AND (コード = 22)) OR ((コード = 11) AND (期間 NOT < 20170831)) OR ((コード = 22) AND (期間 NOT < 20170831))”を得る。
同様に、パス出力“結果=3”に対応する1つのパス条件がORで結合される。より具体的には、入出力表生成部152は、“結果=3”に対して“(コード NOT = 11) AND (コード NOT = 22)”を得る。
この例の場合、出力値毎のパス条件のOR結合結果は、何れも既に簡単であるため、ステップS25において簡約化を施しても元の条件と変わらない。
上記のように、入出力表生成部152は、プログラム111のシンボリック実行の結果に基づいて、入出力表122を作成する。シンボリック実行の結果は、プログラム111による複数の出力(パス出力)それぞれについて、入力変数に関する複数の条件(パス条件)を含む。シンボリック実行結果121の例では、パス出力“結果 = 1”に対して、2つのパス条件が存在し、パス出力“結果 = 2”に対して、4つのパス条件が存在する。入出力表生成部152は、1つの出力に対する複数の条件を1つの分岐条件(入出力表122における条件)に変換する処理を、出力毎に実行することで、入出力表122を作成する。入出力表122の例では、“結果 = 1”に対する2つのパス条件が1つの条件(分岐条件)に変換されている。同様に、“結果 = 2”に対する4つのパス条件が1つの条件(分岐条件)に変換されている。“結果 = 3”については、1つのパス条件しかなかったので、そのまま入出力表122に登録されている。
図22は、業務条件候補生成の処理例を示すフローチャートである。業務条件候補生成の処理は、図19のステップS3で実行される。
(S30)業務条件候補生成部153は、入出力表122から出力と条件との組(Outn,Cndn)(n=1,・・・,N)を取得する(Nは入出力表122の全レコード数)。
(S31)業務条件候補生成部153は、nに1を代入する(n=1)。
(S32)業務条件候補生成部153は、nがN以下であるか否か(n≦Nであるか否か)を判定する。nがN以下である場合、ステップS33に処理が進む。nがNよりも大きい場合、ステップS41に処理が進む。
(S33)業務条件候補生成部153は、入出力表122におけるCNFで表された条件の選言節の組み合わせを連言した条件(候補条件)を生成する。入出力表122に対する具体例を後述する。
(S34)業務条件候補生成部153は、nに対して生成した未処理の候補条件を1つ選択する。
(S35)業務条件候補生成部153は、業務条件候補リスト(すなわち、中間データ122a)に、ステップS34で選択した候補条件が存在しないか否かを判定する。存在しない場合、ステップS36に処理が進む。存在する場合、ステップS39に処理が進む。
(S36)業務条件候補生成部153は、業務条件候補リスト(中間データ122a)に、ステップS34で選択した候補条件を追加する。
(S37)業務条件候補生成部153は、ステップS36で追加した候補条件が、既存の候補条件の否定であるか否かを判定する。追加した候補条件が、既存の候補条件の否定である場合、ステップS38に処理が進む。追加した候補条件が、既存の候補条件の否定でない場合、ステップS39に処理が進む。
(S38)業務条件候補生成部153は、ステップS36で追加した候補条件と当該候補条件と否定関係にある他の候補条件に関して、否定関係を記録する。すなわち、業務条件候補生成部153は、業務条件候補リスト(中間データ122a)において、今回追加した候補条件に対して他の候補条件の識別情報を設定し、また、他の候補条件に対して今回追加した候補条件の識別情報を設定する。
(S39)業務条件候補生成部153は、nに対してステップS33で生成した候補条件を全て処理済であるか否かを判定する。全て処理済である場合、ステップS40に処理が進む。全て処理済でない場合、ステップS34に処理が進む。
(S40)業務条件候補生成部153は、nに1を加算する(n=n+1)。そして、ステップS32に処理が進む。
(S41)業務条件候補生成部153は、業務条件候補リスト(中間データ122a)を参照して、否定関係のある2つの候補条件のうち、否定演算子の少ない方に正条件を示す識別子を設定する。
(S42)業務条件候補生成部153は、業務条件候補リスト(中間データ122a)における候補条件をソートして業務条件候補表123とし、業務条件候補表123を出力する。業務条件候補生成部153は、業務条件候補表123を解析情報記憶部120に格納する。業務条件候補生成部153は、候補条件のソートを所定の規則によって行う。例えば、業務条件候補生成部153は、候補条件に含まれる条件の長い順、および、否定条件の少ない順にソートする。そして、業務条件候補生成が終了する。
ここで、図11で例示した入出力表122に対するステップS33~S39の結果を具体的に説明する。入出力表122に対してステップS33が実行されることで、出力“結果=1”に対して次の候補条件が生成される。出力“結果=1”に関するCNFの選言節の集合は、{((コード = 11) OR (コード = 22)),(20170801 < 期間),(期間 < 20170831)}である。これらCNFの選言節の組み合わせ(連言による組み合わせ)で生成される候補条件は、次の5つである。
(条件1)((コード = 11) OR (コード = 22)) AND (20170801 < 期間) AND (期間 < 20170831)
(条件2)((コード = 11) OR (コード = 22)) AND (20170801 < 期間)
(条件3)((コード = 11) OR (コード = 22)) AND (期間 < 20170831)
(条件4)((20170801 < 期間) AND (期間 < 20170831))
(条件5)((コード = 11) OR (コード = 22))
ステップS36で上記の条件1~5は、既存の条件ではないので、中間データ122aに追加される。また、ステップS38で条件1~5は、既存の否定ではないので、出力“結果=1”の条件の処理は終了する。
また、入出力表122によれば、出力“結果=2”に関するCNFの選言節の集合は、{((コード = 11) OR (コード = 22))、((20170801 NOT < 期間) OR (期間 NOT < 20170831))}である。これらCNFの選言節の組み合わせで生成される候補条件は、次の3つである。
(条件6)((コード = 11) OR (コード = 22)) AND (20170801 NOT < 期間) OR (期間 NOT < 20170831)
(条件7)((20170801 NOT < 期間) OR (期間 NOT < 20170831))
(条件X)((コード = 11) OR (コード = 22))
ステップS36で条件6,7は既存の条件ではないので、中間データ122aに追加される。しかし、条件Xは、既存(条件5に一致)なので、中間データ122aに追加されない。また、ステップS38で、条件7は条件4の否定なので、互いに否定関係にあることを示す識別情報(相手の条件の識別情報)を、中間データ122aに設定する。そして、出力“結果=2”の条件の処理は終了する。
更に、入出力表122によれば、出力“結果=3”に関する条件は、{((コード NOT = 11) AND (コード NOT = 22))}の1つのみである。したがって、ステップS33で生成される候補条件は、次の1つである。
(条件8)((コード NOT = 11) AND (コード NOT = 22))
ステップS36で条件8は既存の条件ではないので、中間データ122aに追加される。また、ステップS38で、条件8は条件5の否定なので、互いに否定関係にあることを示す識別情報(相手の条件の識別情報)を、中間データ122aに設定する。そして、出力“結果=3”の条件の処理は終了する。
なお、以上により入出力表122における全ての出力の条件を処理したので、業務条件候補生成部153は、ステップS41を実行する。そして、業務条件候補生成部153は、条件4と条件7とを比較して条件4に正条件を示す識別子を設定し、条件5と条件8とを比較して条件5に正条件を示す識別子を設定する。そして、業務条件候補生成部153は、ステップS42により中間データ122aをソートすることで、業務条件候補表123を得る。
図23は、業務条件選定の処理例を示すフローチャートである。業務条件選定の処理は、図19のステップS4で実行される。
(S50)業務条件選定部154は、入出力表122の出力と条件との組(Outm,Cndm)(m=1,・・・,M)を取得する(Mは入出力表122の全レコード数)。mは、入出力表122の項番に相当する。
(S51)業務条件選定部154は、業務条件候補表123の条件BzCndn、n=1,・・・,N(Nは業務条件候補表123の全レコード数)を取得する。nは、業務条件候補表123の項番に相当する。業務条件選定部154は、業務条件候補表123に基づいて、中間データ123aを生成する(この段階では、業務条件候補表123の各項番のレコードに対応する項番の値のみが設定されたレコードが中間データ123aに登録される)。
(S52)業務条件選定部154は、nに1を代入する(n=1)。
(S53)業務条件選定部154は、nがN以下であるか否か(n≦Nであるか否か)を判定する。nがN以下である場合、ステップS54に処理が進む。nがNよりも大きい場合、ステップS65に処理が進む。
(S54)業務条件選定部154は、BzCndnが処理済でないか否かを判定する。処理済でない場合、ステップS55に処理が進む。処理済の場合、ステップS58に処理が進む。
(S55)業務条件選定部154は、業務条件候補表123に基づいて、BzCndnに否定関係があるか否かを判定する。否定関係がある場合、ステップS56に処理が進む。否定関係がない場合、ステップS58に処理が進む。否定関係がない場合、業務条件選定部154は、中間データ123aの項番nのレコードの業務条件判定の項目に“false”を設定する(当該レコードは処理済となる)。
(S56)業務条件選定部154は、業務条件候補表123に基づいて、BzCndnが正条件であるか否かを判定する。正条件である場合、ステップS59に処理が進む。正条件でない場合、ステップS57に処理が進む。
(S57)業務条件選定部154は、BzCndnを処理済に設定する。そして、ステップS58に処理が進む。
(S58)業務条件選定部154は、nに1を加算する(n=n+1)。そして、ステップS53に処理が進む。
(S59)業務条件選定部154は、BzCndnを業務条件に選定する。業務条件選定部154は、中間データ123aの項番nのレコードの業務条件判定の項目に“true”を設定する(当該レコードは処理済となる)。
(S60)業務条件選定部154は、mに1を代入する(m=1)。
(S61)業務条件選定部154は、mがM以下であるか否か(m≦Mであるか否か)を判定する。mがM以下である場合、ステップS62に処理が進む。mがMよりも大きい場合、ステップS58に処理が進む。
(S62)業務条件選定部154は、BzCndnまたはBzCndnの否定がCndmに存在するか否かを判定する。BzCndnまたはBzCndnの否定がCndmに存在する場合、ステップS63に処理が進む。BzCndnまたはBzCndnの否定がCndmに存在しない場合、ステップS64に処理が進む。
(S63)業務条件選定部154は、BzCndnまたはBzCndnの否定のCndmにおける出現場所を記録する。具体的には、業務条件選定部154は、BzCndnのCndmにおける出現場所(入出力表122におけるレコードの項番mやCndmのうちBzCndnに一致する箇所を示す情報)を中間データ123aの項番nのレコードに登録する。あるいは、業務条件選定部154は、BzCndnの否定のCndmにおける出現場所(入出力表122におけるレコードの項番mやCndmのうちBzCndnに一致する箇所を示す情報)を中間データ123aの項番nのレコードに登録する。
(S64)業務条件選定部154は、mに1を加算する(m=m+1)。そして、ステップS61に処理が進む。
(S65)業務条件選定部154は、中間データ123aに基づいて、業務条件選定結果124を生成し、出力する。業務条件選定部154は、業務条件選定結果124を解析情報記憶部120に格納する。そして、業務条件選定が終了する。
ここで、ステップS62の判定およびステップS63における「出現場所の記録」では、業務条件選定部154は、それぞれの条件を木構造で表現し、業務条件BzCndnの木構造がCndmの木構造の一部にあるかを調査する。また、否定条件の存在の確認では、業務条件選定部154は、BzCndnの否定条件をドモルガンの法則に基づいて生成し、当該否定条件を木構造で表現することで、上記と同様に出現場所を判定する。
図24は、業務用語表出力の処理例を示すフローチャートである。業務用語表出力の処理は、図19のステップS5で実行される。
(S70)業務条件命名部155は、業務条件BzCndn、n=1,・・・,Nを業務条件選定結果124から取得する。ここで、Nは業務条件選定結果124の全レコード数である。
(S71)業務条件命名部155は、命名ルール記憶部130から命名ルール表131を取得する。
(S72)業務条件命名部155は、nに1を代入する(n=1)。
(S73)業務条件命名部155は、nがN以下であるか否か(n≦Nであるか否か)を判定する。nがN以下である場合、ステップS74に処理が進む。nがNよりも大きい場合、ステップS77に処理が進む。
(S74)業務条件命名部155は、BzCndnの書式が、命名ルール表131における何れかの命名ルールで示される書式に合致するか否かを判定する。BzCndnの書式が命名ルールで示される何れかの書式に合致する場合、ステップS75に処理が進む。BzCndnの書式が命名ルールで示される何れの書式にも合致しない場合、ステップS76に処理が進む。
(S75)業務条件命名部155は、命名ルールに従って、業務条件を命名する。業務条件と当該業務条件に対して命名した業務用語とを業務用語表141に登録する。
(S76)業務条件命名部155は、nに1を加算する(n=n+1)。そして、ステップS73に処理が進む。
(S77)業務条件命名部155は、ディスプレイ21に業務用語表141の内容を表示させる。
(S78)業務条件命名部155は、業務用語を編集するか否かを判定する。業務用語を編集する場合、ステップS79に処理が進む。業務用語を編集しない場合、ステップS80に処理が進む。例えば、ユーザは、ディスプレイ21に表示された業務用語表141の業務用語と業務条件とを参照して、業務条件命名部155により命名された業務用語を編集するか否かを決定することができる。業務条件命名部155は、ユーザによる業務用語の編集指示の入力を受け付けると、業務用語を編集すると判定する。一方、業務条件命名部155は、ユーザによる業務用語の編集を行わない旨の入力を受け付けると、業務用語を編集しないと判定する。
(S79)業務条件命名部155は、ユーザによる業務用語の編集を受け付け、編集内容に応じて、業務用語表141に登録された業務用語を更新する。
(S80)業務条件命名部155は、業務用語表141を出力する。業務条件命名部155は、業務用語表141を解析結果記憶部140に格納する。そして、業務用語表出力が終了する。
ここで、図21で示されるように、入出力表122における条件(分岐条件)は、CNF(乗法標準形)で表される。入出力表122における各条件は、図22の説明で述べたように、プログラム111の条件文または当該条件文の否定に対応する複数の選言節を含む。業務用語の定義では、まず、業務条件候補生成部153により、業務条件候補表123が生成される。すなわち、業務条件候補生成部153は、入出力表122の条件(分岐条件)に含まれる複数の選言節それぞれを組み合わせることで、条件文の組み合わせの複数の候補(業務条件候補)を生成する。そして、業務条件選定部154は、図23の手順により、当該複数の業務条件候補の中から業務用語の定義対象(すなわち、業務条件)を選択する。
具体的には、業務条件選定部154は、複数の業務条件候補のうちの第1の候補に対する否定の条件が当該複数の業務条件候補に含まれるか否かの判定に応じて、第1の候補に対応する条件文の組み合わせを業務用語の定義対象とするか否かを決定する。
更に、業務条件選定部154は、第1の候補に対する否定を示す第2の候補が複数の候補に含まれる場合に、第1の候補が正条件であるか否かの判定に応じて、第1の候補に対応する条件文の組み合わせを業務用語の定義対象とするか否かを決定する。
第1の候補に対する否定条件が業務条件候補表123に存在するか否かを判定する理由は、プログラム111のパスに影響を与える複合条件を適切に抽出するためである。
業務条件命名部155は、こうして決定された業務用語の定義対象(すなわち、業務条件)に対して、図24の手順により、業務用語の命名を行う。これにより、業務条件を適切に選択して、業務条件に対する業務用語の命名を行える。
図25は、業務ルール表出力の処理例を示すフローチャートである。業務ルール表出力の処理は、図19のステップS6で実行される。
(S90)入出力表書換部156は、業務条件BzCndn、n=1,・・・,Nを業務条件選定結果124から取得する。ここで、Nは業務条件選定結果124の全レコード数である。
(S91)入出力表書換部156は、nに1を代入する(n=1)。
(S92)入出力表書換部156は、nがN以下であるか否か(n≦Nであるか否か)を判定する。nがN以下である場合、ステップS93に処理が進む。nがNよりも大きい場合、ステップS96に処理が進む。
(S93)入出力表書換部156は、入出力表122におけるBzCndnの正条件の出現場所を業務用語表141に基づいて、業務用語を用いた記述に置換する。
(S94)入出力表書換部156は、入出力表122におけるBzCndnの否定条件の出現場所を業務用語表141に基づいて、業務用語を用いた記述に置換する。
(S95)入出力表書換部156は、nに1を加算する(n=n+1)。そして、ステップS92に処理が進む。
(S96)入出力表書換部156は、書換後(置換後)の入出力表の形式を変更するか否かを判定する。形式を変更する場合、ステップS97に処理が進む。形式を変更しない場合、ステップS98に処理が進む。
(S97)入出力表書換部156は、書換後の入出力表の形式を決定表の形式に変更する。
(S98)入出力表書換部156は、書換後の入出力表を業務ルール表142(ステップS97で決定表に変更した場合は業務ルール表143)として出力する。入出力表書換部156は、業務ルール表142(または、業務ルール表143)を解析結果記憶部140に格納する。そして、業務ルール表出力が終了する。
このように、入出力表書換部156は、入出力表122における条件(分岐条件)の中での条件文の組み合わせ(業務条件に相当)の出現場所を検索する。そして、入出力表書換部156は、入出力表122の当該出現場所の記述を当該条件文の組み合わせ(業務条件)に対応する業務用語に置換することで、業務ルール表142,143を生成する。
図26は、解析サーバの入出力の例を示す図である。第2の実施の形態で説明したように、解析サーバ100は、プログラム111の入力に対して、プログラム111の解析を行い、業務用語表141および業務ルール表143(または、業務ルール表142)を出力する。
ここで、プログラム111は、図9で例示したように、図6のプログラムD14に対して、定数C2の定義や、定数C2を用いた処理の記述が含まれている。こうしたプログラムD14の部分改修が行われると、プログラムD14に対応する業務ルールD11および業務用語D12の内容と、改修後のプログラム111の内容とが整合しなくなる。例えば、業務用語D12には、定数C2(=22)に関連する有効コードの定義がないし、そのため、業務ルールD11の有効コードの条件も、定数C2(=22)が考慮されていない。すなわち、既存の業務ルールD11および業務用語D12と、改修後のプログラム111との間に齟齬がある。
そこで、解析サーバ100は、プログラム111を入力として、プログラム111に対応する業務用語表141および業務ルール表143(または、業務ルール表142)を出力する。業務用語表141の例では、部分改修により追加された定数C2(=22)に関連づけて有効コードが定義されており、そのため、業務ルール表143の有効コードに対する条件も、定数C2(=22)が考慮された内容となる。したがって、業務用語表141および業務ルール表143と、プログラム111の内容とは整合しており、齟齬がない。このように、解析サーバ100は、修正後のプログラム111に対し、業務用語表141および業務ルール表143(または、業務ルール表142)を適切に作成できる。
図27は、解析対象のプログラムの他の例を示す図である。プログラム112は、図6のプログラムD14が部分改修されて得られた部分改修後のプログラムである。図27では、次の2回の機能追加があった場合を例示する。
(追加1)有効コードに“22”を追加して、有効コードを“11”または“22”とする。
(追加2)有効コードに“33”を追加して、有効コードを“11”または“22”または“33”とする。
これらの機能追加に対応するため、主に、次の2回の部分改修がプログラムD14に対して行われたとする。
(改修1)改修後のプログラム112の18行目のIF文条件において、元々は“コード=C1”であった条件に、“コード=C2”を追加して、“(コード=C1)OR(コード=C2)”とする。ここで、C2は、定数であり、プログラム112の12行目に定義が追加される。
(改修2)改修後のプログラム112の24行目~29行目において、ELSE IFブロックを追加する。ここで、C3は、定数であり、プログラム112の13行目に定義が追加される。
また、プログラム112の例では、図6のプログラムD14の17,18行目の記述が、プログラム112の19行目の記述にまとめられる改修も行われている。
図27で例示されるように、プログラムD14に対して複数回の改修が行われることもあり、改修の方法も唯一ではない。例えば、改修2は、ELSE IFブロックを追加する代わりに、改修1のようにIF文の条件を改修する方法でも対応可能である。しかしながら、長年の保守の間に、当該プログラムD14の担当プログラマが交代している場合などもあり、様々な記述方法で改修が行われ得る。
図28は、解析サーバの入出力の他の例を示す図である。解析サーバ100は、プログラム112の入力に対して、プログラム112の解析を行い、業務用語表141aおよび業務ルール表143aを出力する。ただし、解析サーバ100は、業務ルール表143aを決定表形式に変更した業務ルール表を出力することもできる。
業務用語表141aによれば、部分改修により追加された定数C2(=22)および定数C3(=33)に関連づけて有効コードが定義されている。そのため、業務ルール表143aの有効コードに対する条件も、定数C2(=22)および定数C3(=33)が考慮された内容となる。したがって、業務用語表141aおよび業務ルール表143aと、プログラム112の内容とは整合しており、齟齬がない。このように、解析サーバ100は、修正後のプログラム112に対しても、業務用語表141aおよび業務ルール表143a(または、業務ルール表143aを決定表形式に変更した業務ルール表)を適切に作成できる。
ところで、情報処理システムの保守や再構築の活動では、情報処理システムの現状を把握し、理解するために、当該情報処理システムが扱う業務の知識と当該情報処理システムの実装方法に関する情報(業務用語表や業務ルール表など)が利用される。このような情報は、本来、文書に記述されているものであるが、上記のように当初作成された文書が適切に更新されていないという不備があると、システム開発者は文書を信頼して参照することができない。また、当該情報処理システムの当初の開発担当者などの有識者は、長年の運用期間の間に散逸して不在となる事態も発生するため、有識者に問い合わせることも難しいことが少なくない。
このような文書の不備や有識者の不在などにより、保守や再構築の作業のための情報が不足する場合に、不足する情報を補うために、情報処理システムの実装実態である現状のプログラムの解析によって、当該情報の復元を試みることがある。
しかし、上記のように、長年に亘る部分的な改修を経たプログラムでは業務情報が整然と記述されておらず、プログラム(例えば、プログラム111やプログラム112のように)の所々に分散した形式で記述されることがある。この場合、プログラムの記述をそのまま用いて業務情報を獲得することが難しい。また、設計文書と現状のプログラムとの間に齟齬があり、設計文書に記述された情報を利用できないことがある。
このように、現状のプログラムから業務情報を得ることが難しかった場合でも、解析サーバ100によれば、現状のプログラムから適切に業務知識(業務用語表や業務ルール表)を作成できる。例えば、解析サーバ100は、作成した業務用語表や業務ルール表をディスプレイ21を用いて表示し、システム開発者に提示する。システム開発者は、解析サーバ100により表示された業務用語表や業務ルール表により、情報処理システムの現状を適切に把握し、理解でき、当該情報処理システムの保守や再構築の活動を効率的に進められるようになる。こうして、解析サーバ100は、ユーザによる既存のソフトウェア資産の適切な把握を支援できる。
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU101にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体23に記録できる。
例えば、プログラムを記録した記録媒体23を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体23に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やHDD103などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。