(57)【要約】【課題】リファクタリング前後で出力値が異なる入力値を迅速かつ効率的に取得する方法は知られていない。【解決手段】複数の対象プログラム間で等価な入力値に対して等価でない出力値となりうる入力値を探索する情報処理装置であって、複数の対象プログラムのそれぞれについて、入力値および出力値が満たすべき条件を示す入出力制約を取得する取得部と、複数の対象プログラムに対する複数の入出力制約を満たし、複数の対象プログラムに対する入力値が等価であり、かつ、複数の対象プログラムに対する出力値が等価でない場合に真となる制約条件を生成する制約条件生成部と、制約条件を制約ソルバに与えて制約条件を満たす入力値を得る制約解消部とを備える情報処理装置、当該情報処理装置を用いた情報処理方法、及び、当該情報処理装置に用いられるプログラムを提供する。【選択図】図１
2014186477.tif 000002
【特許請求の範囲】
【請求項１】
複数の対象プログラム間で等価な入力値に対して等価でない出力値となりうる入力値を探索する情報処理装置であって、
前記複数の対象プログラムのそれぞれについて、入力値および出力値が満たすべき条件を示す入出力制約を取得する取得部と、
前記複数の対象プログラムに対する複数の入出力制約を満たし、前記複数の対象プログラムに対する入力値が等価であり、かつ、前記複数の対象プログラムに対する出力値が等価でない場合に真となる制約条件を生成する制約条件生成部と、
前記制約条件を制約ソルバに与えて前記制約条件を満たす入力値を得る制約解消部と、
を備える情報処理装置。
【請求項２】
前記複数の対象プログラムに対して前記制約解消部が得た入力値を入力して前記複数の対象プログラムを実行する実行部と、
前記実行部による実行の結果、前記複数の対象プログラムから等価でない出力値が得られたか否かを判定する判定部と、
前記複数の対象プログラムから等価でない出力値が得られたと判断されたことを条件として、前記制約解消部が得た入力値をユーザに対して通知する通知部と、
を備える請求項１に記載の情報処理装置。
【請求項３】
前記制約解消部は、前記複数の対象プログラムから等価な出力値が得られたと判断されたことを条件として、前記制約ソルバを再実行させて前記制約条件を満たす異なる入力値を得る請求項２に記載の情報処理装置。
【請求項４】
前記複数の対象プログラムから等価な出力値が得られたと判断されたことを条件として、前記制約条件生成部は、前記制約解消部が得た入力値を除外する条件を前記制約条件に追加して前記制約条件を更新し、
前記制約解消部は、更新された前記制約条件を制約ソルバに与えて前記制約条件を満たす入力値を得る
請求項３に記載の情報処理装置。
【請求項５】
前記複数の対象プログラムのそれぞれの入出力制約を生成する入出力制約生成部を更に備える請求項１から４のいずれか一項に記載の情報処理装置。
【請求項６】
前記入出力制約生成部は、
前記対象プログラム中の代入文に対し、代入される式が代入先の変数と一致する場合に真となる代入式条件を前記入出力制約に加え、
代入される式が前記制約ソルバで扱うことができない演算を含む場合に、代入される式を前記制約ソルバが扱うことができる式に変換する
請求項５に記載の情報処理装置。
【請求項７】
前記入出力制約生成部は、前記代入される式が前記制約ソルバで扱うことができない演算を含む場合に、前記代入式条件を前記制約ソルバが扱うことができるより広い条件に変換する請求項６に記載の情報処理装置。
【請求項８】
前記入出力制約生成部は、前記複数の対象プログラムのうちの一の対象プログラムにおいて、複数の実行パスのうち互いに異なる一部の実行パスを常に真とした複数の入出力制約を生成し、
前記制約条件生成部は、前記複数の入出力制約に対応して複数の前記制約条件を生成し、
前記制約解消部は、前記複数の制約条件のそれぞれを前記制約ソルバに与えて前記複数の制約条件のそれぞれを満たす入力値を得る
請求項５から７のいずれか一項に記載の情報処理装置。
【請求項９】
前記制約条件生成部は、前記複数の対象プログラムに対する入力値が等価である旨の条件として、前記複数の対象プログラムの同一の入力変数の値同士が等しい場合に真となる条件を生成する請求項１から８のいずれか一項に記載の情報処理装置。
【請求項１０】
前記制約条件生成部は、
前記複数の対象プログラムの入力値間の対応を取得し、
前記複数の対象プログラムに対する入力値が等価である旨の条件として、前記複数の対象プログラムのそれぞれに対する入力値が対応する値である場合に真となる条件を生成する請求項１から９のいずれか一項に記載の情報処理装置。
【請求項１１】
前記制約条件生成部は、
前記複数の対象プログラムの出力値が等価でない旨の条件として、前記複数の対象プログラムの同一の出力変数について値が一致しない場合に真となる条件を生成する請求項１から１０のいずれか一項に記載の情報処理装置。
【請求項１２】
前記制約条件生成部は、
前記複数の対象プログラムの出力値間の対応を取得し、
前記複数の対象プログラムに対する出力値が等価でない旨の条件として、前記複数の対象プログラムのそれぞれに対する出力値が対応する値でない場合に真となる条件を生成する請求項１から１１のいずれか一項に記載の情報処理装置。
【請求項１３】
複数の対象プログラム間で等価な入力値に対して等価でない出力値となりうる入力値を探索する情報処理装置により実行される情報処理方法であって、
前記複数の対象プログラムのそれぞれについて、入力値および出力値が満たすべき条件を示す入出力制約を取得する取得段階と、
前記複数の対象プログラムに対する複数の入出力制約を満たし、前記複数の対象プログラムに対する入力値が等価であり、かつ、前記複数の対象プログラムに対する出力値が等価でない場合に真となる制約条件を生成する制約条件生成段階と、
前記制約条件を制約ソルバに与えて前記制約条件を満たす入力値を得る制約解消段階と、
を備える情報処理方法。
【請求項１４】
コンピュータを、複数の対象プログラム間で等価な入力値に対して等価でない出力値となりうる入力値を探索する情報処理装置として機能させるプログラムであって、
当該プログラムは、前記コンピュータを、
前記複数の対象プログラムのそれぞれについて、入力値および出力値が満たすべき条件を示す入出力制約を取得する取得部と、
前記複数の対象プログラムに対する複数の入出力制約を満たし、前記複数の対象プログラムに対する入力値が等価であり、かつ、前記複数の対象プログラムに対する出力値が等価でない場合に真となる制約条件を生成する制約条件生成部と、
前記制約条件を制約ソルバに与えて前記制約条件を満たす入力値を得る制約解消部と、
として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、及び、プログラムに関する。
【背景技術】
【０００２】
プログラム開発において、メンテナンス性を改善する等の目的でプログラムの機能を変更せずにソースコードを変更するリファクタリングが行われてきた。リファクタリングの前後でプログラムの入力値に対する出力値の同一性が保たれているかを検証する方法が知られている（例えば、特許文献１参照）。
［特許文献１］  特開２００７−４１８０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかし、特許文献１によると、プログラムの条件式に対する真入力値及び偽入力値を取得し、さらにこれらに対するプログラムの出力値を対比して検証する必要があり、リファクタリング前後で出力値が異なる結果となる入力値が存在することを迅速かつ効率的に検出することができない。
【課題を解決するための手段】
【０００４】
本発明の第１の態様においては、複数の対象プログラム間で等価な入力値に対して等価でない出力値となりうる入力値を探索する情報処理装置であって、複数の対象プログラムのそれぞれについて、入力値および出力値が満たすべき条件を示す入出力制約を取得する取得部と、複数の対象プログラムに対する複数の入出力制約を満たし、複数の対象プログラムに対する入力値が等価であり、かつ、複数の対象プログラムに対する出力値が等価でない場合に真となる制約条件を生成する制約条件生成部と、制約条件を制約ソルバに与えて制約条件を満たす入力値を得る制約解消部とを備える情報処理装置、当該情報処理装置を用いた情報処理方法、及び、当該情報処理装置に用いられるプログラムを提供する。
【０００５】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではない。また、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【図面の簡単な説明】
【０００６】
【図１】本実施形態の情報処理システム１の構成を示す。
【図２】本実施形態の情報処理装置１０の処理フローを示す。
【図３】本実施形態における対象プログラムのリファクタリングの一例を示す。
【図４】本実施形態における対象プログラムＡの入出力制約の一例を示す。
【図５】本実施形態における対象プログラムＡ'の入出力制約の一例を示す。
【図６】制約条件生成部１０６が生成する制約条件の一例を示す。
【図７】本実施形態の変形例における対象プログラムＸの入出力制約の一例を示す。
【図８】本実施形態の変形例における対象プログラムＸの入出力制約の一例を示す。
【図９】コンピュータ１９００のハードウェア構成の一例を示す。
【発明を実施するための形態】
【０００７】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【０００８】
図１は、本実施形態の情報処理システム１の構成を示す。情報処理システム１は、外部のプログラムデータベース２からリファクタリング前後の対象プログラムを受け取り、当該リファクタリング前後の対象プログラムに非等価な出力値を出力させる結果となる等価な入力値を取得し、取得した入力値をユーザ端末２０に通知する。情報処理システム１は、プログラムデータベース２、制約データベース４、情報処理装置１０、及び、ユーザ端末２０を備える。
【０００９】
プログラムデータベース２は、複数の対象プログラムを格納するデータベースである。プログラムデータベース２は、例えば、対象プログラムＡ、及び、対象プログラムＡをリファクタリングした対象プログラムＡ'を格納する。対象プログラムＡ等は、プログラムの全体であってもよく、又は、関数等のプログラムの一部であってもよい。プログラムデータベース２は、ユーザからの指示に応じてユーザ端末２０により編集された複数の対象プログラムＡ及びＡ'（又は更にプログラムＡ"）を格納し、また情報処理装置１０及びユーザ端末２０に複数の対象プログラムＡ及びＡ'等を供給する。
【００１０】
制約データベース４は、複数の対象プログラム（２又はそれ以上の）のそれぞれについて、入力値および出力値が満たすべき条件を示す入出力制約を格納するデータベースである。例えば、制約データベース４は、プログラムデータベース２に格納される対象プログラムＡに対応する入出力制約ａ、及び、対象プログラムＡ'に対応する入出力制約ａ'を格納する。制約データベース４は、ユーザ端末２０からの指示に応じてユーザ端末２０を用いて編集された複数の対象プログラムＡ及びＡ'の入出力制約を受け取り、情報処理装置１０に入出力制約を供給する。
【００１１】
情報処理装置１０は、プログラムデータベース２に格納された複数の対象プログラムＡ及びＡ'間で等価な入力値に対して等価でない出力値となりうる入力値を探索し、探索された入力値に対する出力値の等価性を判定し、等価でない出力値が得られた入力値をユーザに通知する。情報処理装置１０は、入出力制約生成部１０２、取得部１０４、制約条件生成部１０６、制約解消部１０８、実行部１１０、判定部１１２、通知部１１４、及び、プロジェクト管理部１１６を備える。
【００１２】
入出力制約生成部１０２は、プログラムデータベース２から複数の対象プログラムＡ及びＡ'を取得し、取得した対象プログラムＡ及びＡ'のそれぞれの入出力制約を生成する。例えば、入出力制約生成部１０２は、プログラムデータベース２から対象プログラムＡ、及び、対象プログラムＡをリファクタリングした対象プログラムＡ'を取得し、対象プログラムＡの入出力制約及び対象プログラムＡ'の入出力制約を生成する。入出力制約生成部１０２は、生成した複数の対象プログラムＡ及びＡ'に対する複数の入出力制約を取得部１０４に供給する。入出力制約生成部１０２は、制約した複数の入出力制約を制約データベース４に格納してもよい。
【００１３】
取得部１０４は、入出力制約を取得する。例えば、取得部１０４は、入出力制約生成部１０２が生成した複数の対象プログラムＡ及びＡ'に対する複数の入出力制約を取得してよく、これに代えて、制約データベース４から複数の対象プログラムＡ及びＡ'に対する複数の入出力制約を取得してもよい。取得部１０４は、取得した入出力制約を制約条件生成部１０６に供給する。
【００１４】
制約条件生成部１０６は、複数の対象プログラムＡ及びＡ'（又は更にプログラムＡ"）に対する複数の入出力制約を満たし、複数の対象プログラムＡ及びＡ'に対する入力値が等価であり、かつ、複数の対象プログラムＡ及びＡ'に対する出力値が等価でない場合に真（ＴＲＵＥ）となる制約条件を生成する。制約条件生成部１０６は、生成した制約条件を制約解消部１０８に供給する。
【００１５】
制約解消部１０８は、制約条件を制約ソルバに与えて制約条件を満たす入力値を得る。例えば、制約解消部１０８は、制約条件生成部１０６から取得した制約条件を満たす対象プログラムＡに対する入力変数Ｉの入力値ｉ、及び、対象プログラムＡ'に対する入力変数Ｉ'の入力値ｉ'（又は更にプログラムＡ"に対する入力変数Ｉ"の入力値ｉ"）を取得する。
【００１６】
制約解消部１０８は、１つの入力変数に対応する１つの入力値、又は、複数の入力変数の集合に対応する入力値の集合を入力値ｉとして取得してよい。制約解消部１０８は、取得した入力値ｉ及びｉ'等を実行部１１０に供給する。
【００１７】
実行部１１０は、プログラムデータベース２から読み出した複数の対象プログラムＡ及びＡ'に対して制約解消部１０８が得た入力値ｉ及びｉ'を入力して複数の対象プログラムＡ及びＡ'を実行する。例えば、実行部１１０は、入力値ｉを対象プログラムＡに入力して実行し、入力値ｉ'を対象プログラムＡ'に入力して実行する。
【００１８】
実行部１１０は、対象プログラムＡ及びＡ'（又は更にプログラムＡ"）を実行して得られた出力値ｏ及びｏ'（又は更に出力値ｏ"）を判定部１１２に供給する。ここで、実行部１１０は、１つの出力変数に対応する１つの出力値、又は、複数の出力変数の集合に対応する出力値の集合を出力値ｏ及びｏ'として取得してよい。
【００１９】
判定部１１２は、実行部１１０による実行の結果、複数の対象プログラムから等価でない出力値ｏ及びｏ'が得られたか否かを判定する。即ち、判定部１１２は、対象プログラムＡからの出力値ｏと、対象プログラムＡ'からの出力値ｏ'と（又は更に出力値ｏ"と）が等価であるか否かを判定する。判定部１１２は、判定の結果を制約条件生成部１０６及び通知部１１４に供給する。
【００２０】
通知部１１４は、複数の対象プログラムＡ及びＡ'（又は更にプログラムＡ"）から等価でない出力値ｏ及びｏ'（又は更に出力値ｏ"）が得られたと判定部１１２が判断したことを条件として、制約解消部１０８が得た入力値ｉ及びｉ'（又は更に入力値ｉ"）を、プロジェクト管理部１１６に供給する。これにより、通知部１１４は、プロジェクト管理部１１６を介してユーザに対して当該入力値ｉ及びｉ'等を通知する。
【００２１】
プロジェクト管理部１１６は、プロジェクト管理プログラムを使用して、プログラムデータベース２に格納されるプログラムの設計及び開発等に関するプロジェクトを管理する。例えば、プロジェクト管理部１１６は、プロジェクトに含まれるタスク（例えば、プログラムの全体及び一部分を設計するタスク等）のユーザへの割り当て、及び、タスクのスケジュールリングを管理してよい。
【００２２】
また、プロジェクト管理部１１６は、ユーザ端末２０と通信し、ユーザ端末２０に制約解消部１０８が得た入力値ｉ及びｉ'を通知する。プロジェクト管理部１１６は、プロジェクト管理プログラムとして、例えば、ＩＢＭ  Ｒａｔｉｏｎａｌ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｌｉｆｅｃｙｃｌｅ  Ｍａｎａｇｅｒ（ＲＥＬＭ）を用いてよい。
【００２３】
ユーザ端末２０は、情報処理装置１０のプロジェクト管理部１１６からタスクの情報、及び、入力値ｉ及びｉ'を受け取り、ユーザに表示する。ユーザ端末２０は、ユーザからの入力を受け取り、情報処理装置１０に供給する。ユーザ端末２０は、パーソナルコンピュータ又は携帯情報端末等であってよい。
【００２４】
また、ユーザ端末２０は、プログラムデータベース２から対象プログラムＡ及びＡ'を読み出してユーザに表示し、ユーザにプログラムＡ及びＡ'を編集させてよい。また、ユーザ端末２０は、ユーザから対象プログラムＡ及びＡ'の入出力制約ａ及びａ'を受け取り、当該入出力制約を対象プログラムＡ及びＡ'と対応付けて制約データベース４に格納してもよい。
【００２５】
このように本実施形態の情報処理装置１０によれば、制約解消部１０８を用いて、リファクタリング前後の対象プログラムＡ及びＡ'に対して、等価でない出力値ｏ及びｏ'を出力する等価な入力値ｉ及びｉ'を迅速かつ効率的に得ることができる。
【００２６】
これにより、情報処理装置１０によれば、リファクタリング前後の対象プログラムＡ及びＡ'において実行結果の一貫性が保てなくなる可能性のある入力値ｉ及びｉ'をユーザに通知して、注意を喚起することができる。
【００２７】
図２に、本実施形態の情報処理装置１０による情報処理方法の処理フローを示す。本実施形態において、情報処理装置１０は、Ｓ１００〜Ｓ１１８の処理を実行する。
【００２８】
まず、Ｓ１００において、入出力制約生成部１０２が、記号実行又はパス条件等の手法により、複数の対象プログラム（一例として、２つの対象プログラムＡ及びＡ'）の入出力制約を生成する。例えば、入出力制約生成部１０２は、プログラムデータベース２から、対象プログラムＡを取得し、対象プログラムＡ中の条件分岐により生じる実行パスごとに、実行パスを通過するための条件及び実行パス内の代入式が真となる条件の論理積を生成し、生成した論理積の全実行パスにおける論理和を入出力制約Ｃ（Ｉ，Ｏ）として生成する。
【００２９】
入出力制約生成部１０２は、対象プログラムＡをリファクタリングした対象プログラムＡ'についても同様に入出力制約Ｃ'（Ｉ'，Ｏ'）を生成する。
【００３０】
ここで、入出力制約生成部１０２は、リファクタリング前後のプログラム全体を対象プログラムＡ及びＡ'として入出力制約を生成してもよく、これに代えて、リファクタリング前後のプログラムを関数等の複数のモジュールに分割して、対応関係にある分割された各部分を対象プログラムＡ及びＡ'として入出力制約を生成してもよい。
【００３１】
また、入出力制約生成部１０２は、同一言語で記述された対象プログラムＡ及びＡ'から入出力制約を生成してよく、これに代えて、異なる言語で記述された対象プログラムＡ及びＡ'から入出力制約を生成してもよい。入出力制約生成部１０２は、生成した入出力制約Ｃ（Ｉ，Ｏ）及びＣ'（Ｉ'，Ｏ'）を取得部１０４に供給する。
【００３２】
次に、Ｓ１０２において、取得部１０４は、入出力制約生成部１０２から入出力制約Ｃ（Ｉ，Ｏ）及びＣ'（Ｉ'，Ｏ'）を取得する。取得部１０４は、取得した入出力制約Ｃ（Ｉ，Ｏ）及びＣ'（Ｉ'，Ｏ'）を制約条件生成部１０６に供給する。
【００３３】
次に、Ｓ１０４において、制約条件生成部１０６は、複数の対象プログラムＡ及びＡ'に対する複数の入出力制約Ｃ（Ｉ，Ｏ）及びＣ'（Ｉ'，Ｏ'）を満たし、複数の対象プログラムＡ及びＡ'に対する入力値ｉ及びｉ'が等価であり、かつ、複数の対象プログラムＡ及びＡ'に対する出力値ｏ及びｏ'が等価でない場合に真となる制約条件を生成する。
【００３４】
例えば、まず、制約条件生成部１０６は、取得部１０４から対象プログラムＡの入出力制約Ｃ（Ｉ，Ｏ）及び対象プログラムＡ'の入出力制約Ｃ'（Ｉ'，Ｏ'）を取得する。
【００３５】
次に、制約条件生成部１０６は、複数の対象プログラムＡ及びＡ'に対する入力値ｉ及びｉ'が等価である旨の条件として、複数の対象プログラムＡ及びＡ'の同一の入力変数Ｉ及びＩ'の値同士が等しい場合に真となる条件Ｉ＝Ｉ'を生成する。
【００３６】
これに代えて、制約条件生成部１０６は、複数の対象プログラムＡ及びＡ'の入力値ｉ及びｉ'間の対応を取得し、複数の対象プログラムＡ及びＡ'に対する入力値ｉ及びｉ'が等価である旨の条件として、複数の対象プログラムＡ及びＡ'のそれぞれに対する入力変数Ｉの入力値ｉ及び入力変数Ｉ'の入力値ｉ'が対応する値である場合（例えば、入力変数Ｉと入力変数Ｉ'とが変数名のみが異なり実質的に同一で入力値ｉ及び入力値ｉ'が同一の場合、又は、入力変数Ｉと入力変数Ｉ'が対応関係にあり入力値ｉ及び入力値'が対応する値の場合）に真となる条件を生成してもよい。
【００３７】
入力変数Ｉと入力変数Ｉ'が対応関係にある場合とは、例えば、入力変数Ｉの集合と入力変数Ｉ'の集合が対応関係である場合であってよい。一例として、対象プログラムＡにおける変数Ｘが対象プログラムＡ'においては桁ごとの複数の変数Ｙ、Ｚに対応する場合がある。
【００３８】
このような場合、対象プログラムＡにおいて入力変数Ｉ＝｛Ｘ｝と定義され、対象プログラムＡ'において入力変数'＝｛Ｙ、Ｚ｝と定義される。例えば、制約条件生成部１０６は、Ｘ＝Ｙ×１０＋Ｚ（Ｘは二桁の整数、Ｙ及びＺは一桁の整数）が成り立つ場合に、入力変数Ｉと入力変数Ｉ'が等価である旨の条件としてＸ＝Ｙ×１０＋Ｚを生成してよい。
【００３９】
また、別の一例として、対象プログラムＡにおける変数Ｘが対象プログラムＡ'における変数Ｙを演算して得られる場合がある。例えば、入力変数Ｉ＝｛Ｘ｝、入力変数Ｉ'＝｛Ｙ｝と定義され、Ｘ＝Ｙ＋１（Ｘは０以上の整数、Ｙは１以上の整数）が成り立つ場合に、制約条件生成部１０６は、入力変数Ｉと入力変数Ｉ'が等価である旨の条件としてＸ＝Ｙ＋１を生成してよい。
【００４０】
次に、制約条件生成部１０６は、複数の対象プログラムＡ及びＡ'の出力値ｏ及びｏ'が等価でない旨の条件として、複数の対象プログラムＡ及びＡ'の同一の出力変数Ｏ及びＯ'について値が一致しない場合に真となる条件¬Ｏ＝Ｏ'を生成する（ここで、「¬」は否定条件を示す）。
【００４１】
これに代えて、制約条件生成部１０６は、複数の対象プログラムＡ及びＡ'の出力値ｏ及びｏ'間の対応を取得し、複数の対象プログラムＡ及びＡ'に対する出力値ｏ及びｏ'が等価でない旨の条件として、複数の対象プログラムＡ及びＡ'のそれぞれに対する出力変数Ｏの出力値ｏ及び出力変数Ｏ'の出力値ｏ'が対応する値でない場合（例えば、出力変数Ｏと出力変数Ｏ'とが変数名のみが異なり実質的に同一で出力値ｏ及び出力値ｏ'が異なる場合、又は、出力変数Ｏと出力変数Ｏ'が対応関係にあり出力値ｏ及び出力値ｏ'が対応する値でない場合）に真となる条件を生成してもよい。
【００４２】
出力変数Ｏと出力変数Ｏ'が対応関係にない場合とは、例えば、出力変数Ｏの集合と出力変数Ｏ'の集合が対応関係にない場合であってよい。一例として、出力変数Ｏ＝｛Ｘ｝、出力変数Ｏ'＝｛Ｙ，Ｚ｝と定義され、Ｘ＝Ｙ×１０＋Ｚ（Ｘは二桁の整数、Ｙ及びＺは一桁の整数）が成り立つ場合に、制約条件生成部１０６は、出力変数Ｏと出力変数Ｏ'が等価でない旨の条件としｎｏｔ（Ｘ＝Ｙ×１０＋Ｚ）を生成してよい。
【００４３】
次に、制約条件生成部１０６は、対象プログラムＡ及びＡ'の入出力制約Ｃ（Ｉ，Ｏ）及びＣ'（Ｉ'，Ｏ'）と、入力値ｉ及びｉ'が等価である旨の条件と、出力値ｏ及びｏ'が等価でない旨の条件との論理積から制約条件Ｃ（Ｉ，Ｏ）∧Ｃ'（Ｉ'，Ｏ'）∧Ｉ＝Ｉ'∧¬Ｏ＝Ｏ'を生成する（「∧」は論理積、すなわちＡＮＤ条件を示す）。ここで、制約条件におけるＸ＝Ｘ'は、ＸとＸ'が等価であることを示す。制約条件生成部１０６は、生成した制約条件を制約解消部１０８に供給する。
【００４４】
次に、Ｓ１０６において、制約解消部１０８は、制約条件生成部１０６から取得した制約条件を制約ソルバに与えて制約条件を満たす入力値ｉ及びｉ'を得る。制約解消部１０８は、制約ソルバとして、例えば、Ｓａｔｉｓｆｉａｂｉｌｉｔｙ（ＳＡＴ）ソルバ、又は、Ｓａｔｉｓｆｉａｂｌｅ  Ｍｏｄｕｌｏ  Ｔｈｅｏｒｉｅｓ（ＳＭＴ）ソルバ等を用いてよい。
【００４５】
例えば、制約解消部１０８は、制約条件生成部１０６から制約条件を取得し、制約ソルバに与える。制約解消部１０８は、制約ソルバを実行して、制約条件に含まれる論理式を解き、取得した制約条件を入力変数Ｉ及びＩ'と出力変数Ｏ及びＯ'とのみにより表現される制約条件に変換してよい。
【００４６】
ここで、例えば、制約ソルバは、制約条件の論理式を積和型（ＡＮＤ条件のＯＲ条件）、すなわちＤｉｓｊｕｎｃｔｉｖｅ  Ｎｏｒｍａｌ  Ｆｏｒｍ（ＤＮＦ）に変換し、いずれかのＡＮＤ条件を真とするべくＡＮＤ条件内の各条件が真となるような入力値を探索してよい。制約ソルバは、制約条件を積和型に変換する際に、論理の簡単化を図ってよい。
【００４７】
さらに制約解消部１０８は、制約ソルバにより、制約条件を満たす又は満たす可能性のある対象プログラムＡに対する入力変数Ｉの入力値ｉ、及び、対象プログラムＡ'に対する入力変数Ｉ'の入力値ｉ'を取得する。例えば、制約解消部１０８は、仮設に基づいて解を探索するヒューリスティック法、及び、矛盾が生じた場合に解の探索を仮説決定前の状態に戻すバックトラック法等を制約ソルバに実行させて、入力値ｉ及びｉ'を取得してよい。
【００４８】
制約解消部１０８は、取得した入力値ｉ及びｉ'を制約条件生成部１０６及び実行部１１０に供給する。
【００４９】
Ｓ１０６の処理において、制約解消部１０８が入力値ｉ及びｉ'を取得できなかった場合は、情報処理装置１０は処理を終了してよい。この場合、通知部１１４は、プロジェクト管理部１１６を介して、入力値ｉ及びｉ'が得られなかったことをユーザ端末２０に通知する。
【００５０】
次に、Ｓ１０８において、実行部１１０は、プログラムデータベース２から対象プログラムＡ及びＡ'を読みだし、対象プログラムＡに対して制約解消部１０８から取得した入力値ｉを入力して実行し、対象プログラムＡ'に対して入力値ｉ'を入力して実行する。
【００５１】
これにより、実行部１１０は、制約解消部１０８が得た入力値ｉ及びｉ'が実際に等価でない出力値を出力するか否かを検証することができる。実行部１１０は、入力値ｉ及びｉ'、対象プログラムＡを実行して得られた出力値ｏ、及び、対象プログラムＡ'を実行して得られた出力値ｏ'を判定部１１２に供給する。
【００５２】
次に、Ｓ１１０において、判定部１１２は、複数の対象プログラムＡ及びＡ'から等価な出力値ｏ及びｏ'が得られたか否かを判断する。例えば、判定部１１２は、出力値ｏ及びｏ'が等しいか、又は、出力値ｏ及びｏ'が対応する値であるか否かを判断する。
【００５３】
判定部１１２は、等価な出力値ｏ及びｏ'が得られなかったと判断した場合は、処理をＳ１１４に進め、判定の結果及び入力値ｉ及びｉ'を通知部１１４に供給する。判定部１１２は、等価な出力値ｏ及びｏ'が得られたと判断した場合は、処理をＳ１１８に進め判定の結果及び入力値ｉ及びｉ'を制約条件生成部１０６に供給する。
【００５４】
Ｓ１１４において、通知部１１４は、入力値ｉ及びｉ'をプロジェクト管理部１１６に供給する。プロジェクト管理部１１６は、入力値ｉ及びｉ'をユーザに通知する。ここで、プロジェクト管理部１１６は、入力値ｉ及びｉ'が通知された対象プログラムＡ及びＡ'の調査及び／又は修正を要求するタスクを生成して、ユーザが使用するプロジェクト管理プログラムに与えてよい。
【００５５】
次に、Ｓ１１６において、制約条件生成部１０６は、制約条件を満たす入力値ｉ及びｉ'の取得を、制約解消部１０８により継続するか否かを判断する。例えば、制約条件生成部１０６は、制約解消部１０８が制約条件を満たす入力値ｉ及びｉ'を予め定められた個数取得した場合は、入力値ｉ及びｉ'の取得を継続しないと判断してよい。
【００５６】
また、例えば、制約条件生成部１０６は、処理を開始してから予め定められた時間が経過した場合、入力値ｉ及びｉ'の取得を継続しないと判断してよい。また、例えば、制約条件生成部１０６は、処理の間にユーザからユーザ端末２０を介して処理中止の指示を取得した場合、入力値ｉ及びｉ'の取得を継続しないと判断してよい。
【００５７】
制約条件生成部１０６は、入力値ｉ及びｉ'の取得を継続しないと判断した場合、処理を終了し、継続すると判断した場合、処理をＳ１１８に進める。また、これらに代えて、制約条件生成部１０６は、Ｓ１１６の処理を省略して処理を終了してもよい。
【００５８】
Ｓ１１８において、制約条件生成部１０６は制約条件を更新する。例えば、制約条件生成部１０６はＳ１０４の処理で生成した制約条件に、制約解消部１０８から得た入力値ｉ及びｉ'を除外する条件（例えば、Ｉ！＝ｉ及びＩ'！＝ｉ'）を追加して制約条件を更新する（「！＝」は等しくない、又は、等価でないことを示す）。情報処理装置１０は、処理をＳ１０６に戻す。
【００５９】
２回目以降のＳ１０６の処理において、制約解消部１０８は、更新された制約条件を制約ソルバに与えて更新された制約条件を満たす別の入力値ｉ及びｉ'を得る。
【００６０】
このように本実施形態の情報処理方法によると、情報処理装置１０は、リファクタリング前後の対象プログラムＡ及びＡ'に対して、等価でない出力値ｏ及びｏ'を出力する可能のある等価な入力値ｉ及びｉ'を取得し、当該入力値ｉ及びｉ'により対象プログラムＡ及びＡ'を実行して等価でない出力値ｏ及びｏ'を実際に出力するかテストする。等価でない出力値ｏ及びｏ'を出力した場合、通知部１１４は、入力値ｉ及びｉ'をユーザに通知して注意を喚起する。
【００６１】
また、本実施形態の情報処理方法によると、複数の対象プログラムＡ及びＡ'から等価な出力値ｏ及びｏ'が得られたと判断された場合、制約解消部１０８は、制約ソルバを再実行させて制約条件を満たす異なる別の入力値ｉ及びｉ'を得るサイクルを繰り返す。
【００６２】
これにより、本実施形態の情報処理方法によれば、等価でない出力値ｏ及びｏ'を出力する等価な入力値ｉ及びｉ'を迅速かつ効率的に得ることができ、対象プログラムのリファクタリング前後において実行結果の一貫性が保てなくなる可能性のある入力値をユーザに通知して注意を喚起することができる。
【００６３】
なお、Ｓ１０２の処理において、取得部１０４は、制約データベース４から対象プログラムＡ及びＡ'に対応する入出力制約Ｃ（Ｉ，Ｏ）及びＣ'（Ｉ'，Ｏ'）を取得してもよい。この場合、情報処理装置１０は、Ｓ１００の処理を省略してよい。また、情報処理装置１０は、Ｓ１０８の処理を省略してもよい。
【００６４】
図３は、本実施形態における対象プログラムＡのリファクタリングの一例を示す。例えば、ユーザは、ユーザ端末２０により（ａ）に示すプログラムＡをプログラムデータベース２から読み出し、プログラムＡのリファクタリングを実行して（ｂ）に示すプログラムＡ'を生成する。
【００６５】
例えば、プログラムＡ及びＡ'は、郵便番号に対応する整数ｚｉｐ及び国コードに対応する整数ｃｏｕｎｔｒｙを入力し、当該郵便番号に対応する住所を出力するプログラムであってよい。プログラムＡの２行目の条件式は、条件式ｚｉｐ＜０が真の場合に３行目の処理を実行する。プログラムＡの５行目の条件式は、条件式ｚｉｐ＜０が真の場合に６行目の処理を実行する。その後、プログラムＡは８及び９行目の処理を実行する。プログラムＡ'は、条件式を含まず、３〜６行目の処理を順次実行する。
【００６６】
図４は、入出力制約生成部１０２が生成する、図３に示す対象プログラムＡの入出力制約の一例を示す。Ｓ１００の処理において、入出力制約生成部１０２は、まず、対象プログラムＡからｉｆ文等の条件分岐を検出して、対象プログラムＡ中の１又は複数の実行パスを特定する。
【００６７】
次に、入出力制約生成部１０２は、対象プログラムＡ中の実行パスごとに、当該実行パスを通過するための入力変数及び／又は出力変数に関連する条件式が真となり、かつ、当該実行パス内の入力変数及び／又は出力変数に関連する代入文に対し、代入される式が代入先の変数と一致する場合に真となる条件を、実行パスごとの入出力制約として生成する。
【００６８】
ここで、入力変数及び／又は出力変数に関連する条件式とは、その条件式の真偽が入力変数及び／又は出力変数の値に依存する条件式であってよい。入出力制約生成部１０２は、入力変数及び／又は出力変数に関連する条件式以外の条件を入出力制約に含めなくてよい。
【００６９】
また、入力変数及び／又は出力変数に関連する代入文とは、代入文内の変数に入力変数、出力変数、及び／又は、これらの変数の値に依存する変数を含む代入文であってよい。入出力制約生成部１０２は、入力変数及び／又は出力変数に関連する代入文以外の代入文の条件を入出力制約に含めなくてよい。
【００７０】
次に、入出力制約生成部１０２は、全ての実行パスごとの入出力制約の論理和を生成して対象プログラムＡの入出力制約を生成する。
【００７１】
例えば、図４（ｃ）に示す対象プログラムＡには、条件分岐ｉｆ（ｚｉｐ＜０）内を通過する／通過しない実行パス、及び、条件分岐ｉｆ（ｃｏｕｎｔｒｙ＜０）内を通過する／通過しない実行パスが含まれ、２×２＝計４個の実行パスが存在する。
【００７２】
この場合、入出力制約生成部１０２は、図４（ｄ）に示すプログラムＡの入出力制約として、
（１）条件分岐ｉｆ（ｚｉｐ＜０）内を通過し条件分岐ｉｆ（ｃｏｕｎｔｒｙ＜０）を通過する実行パス（１）の入出力制約、
（２）条件分岐ｉｆ（ｚｉｐ＜０）内を通過せず、条件分岐ｉｆ（ｃｏｕｎｔｒｙ＜０）を通過しない実行パス（２）の入出力制約、
（３）条件分岐ｉｆ（ｚｉｐ＜０）内を通過し、条件分岐ｉｆ（ｃｏｕｎｔｒｙ＜０）を通過しない実行パス（３）の入出力制約、
（４）条件分岐ｉｆ（ｚｉｐ＜０）内を通過せず、条件分岐ｉｆ（ｃｏｕｎｔｒｙ＜０）を通過する実行パス（４）の入出力制約の論理和からなる入出力制約を生成する。
【００７３】
例えば、入出力制約生成部１０２は、（１）の入出力制約として、当該実行パス（１）を通過するための条件式が真となる条件（ｚｉｐ＜０及びｃｏｕｎｔｒｙ＜０）、及び、実行パス（１）内の代入文（ｚｉｐ＝１及びｃｏｕｎｔｒｙ＝０）に対し代入される式が代入先の変数と一致する場合に真となる代入式条件（ｚｉｐ１＝１、ｃｏｕｎｔｒｙ１＝０、及び、ａｄｄｒ＝｛ｚｉｐ＝ｚｉｐ１，ｃｏｕｎｔｒｙ＝ｃｏｕｎｔｒｙ１｝）を満たす入出力制約を生成する。ここで、変数ｚｉｐ１及びｃｏｕｔｎｒｙ１は、代入後の変数ｚｉｐ及び変数ｃｏｕｎｔｒｙを代入前と区別した変数である。
【００７４】
また、例えば、入出力制約生成部１０２は、（２）の入出力制約として、当該実行パス（２）を通過するための条件式が真となる条件（ｚｉｐ＞＝０及びｃｏｕｎｔｒｙ＞＝０）、及び、実行パス（２）内の代入文に対し代入される式が代入先の変数と一致する場合に真となる代入式条件（ｚｉｐ１＝ｚｉｐ、ｃｏｕｎｔｒｙ１＝ｃｏｕｔｎｒｙ、及び、ａｄｄｒ＝｛ｚｉｐ＝ｚｉｐ１，ｃｏｕｎｔｒｙ＝ｃｏｕｎｔｒｙ１｝）を満たす入出力制約を生成する。なお、実行パス（２）において変数ｃｏｕｎｔｒｙに関する代入文は存在しないので、入出力制約生成部１０２は、変数ｃｏｕｎｔｒｙ１に変数ｃｏｕｎｒｙがそのまま代入された条件を用いる。
【００７５】
また、例えば、入出力制約生成部１０２は、（３）の入出力制約として、当該実行パス（３）を通過するための条件式が真となる条件（ｚｉｐ＜０及びｃｏｕｎｔｒｙ＞＝０）、及び、実行パス（３）内の代入文に対し代入される式が代入先の変数と一致する場合に真となる代入式条件（ｚｉｐ１＝１、ｃｏｕｎｔｒｙ１＝ｃｏｕｔｎｒｙ、及び、ａｄｄｒ＝｛ｚｉｐ＝ｚｉｐ１，ｃｏｕｎｔｒｙ＝ｃｏｕｎｔｒｙ１｝）を満たす入出力制約を生成する。
【００７６】
また、例えば、入出力制約生成部１０２は、（４）の入出力制約として、当該実行パス（４）を通過するための条件式が真となる条件（ｚｉｐ＞＝０及びｃｏｕｎｔｒｙ＜０）、及び、実行パス（４）内の代入文に対し代入される式が代入先の変数と一致する場合に真となる代入式条件（ｚｉｐ１＝ｚｉｐ、ｃｏｕｎｔｒｙ１＝０、及び、ａｄｄｒ＝｛ｚｉｐ＝ｚｉｐ１，ｃｏｕｎｔｒｙ＝ｃｏｕｎｔｒｙ１｝）を満たす入出力制約を生成する。
【００７７】
入出力制約生成部１０２は、図４（ｄ）に図示するように、実行パスごとに生成した（１）〜（４）の入出力制約を論理和ＯＲで結合することにより、プログラムＡの入出力制約を生成する。ここで、入出力制約生成部１０２は、対象プログラムのサブルーチン内の静的なローカル変数を入出力変数として扱ってもよく、無視してもよい。
【００７８】
図５は、入出力制約生成部１０２が生成する、図３に示す対象プログラムＡ'の入出力制約の一例を示す。Ｓ１００の処理において、入出力制約生成部１０２は、まず、図５（ｄ）に示す対象プログラムＡ'からｉｆ文等の条件分岐を検出して、対象プログラムＡ'中の実行パスを特定する。対象プログラムＡ'には条件分岐が存在しないので、入出力制約生成部１０２は、対象プログラムＡ'中に１個の実行パスを特定する。
【００７９】
次に、入出力制約生成部１０２は、実行パスを通過するための条件式が真となり、かつ、当該実行パス内の代入文に対し、代入される式が代入先の変数と一致する場合に真となる代入式条件を入出力制約として生成する。
【００８０】
例えば、入出力制約生成部１０２は、図５（ｅ）に示す対象プログラムＡ'の１個の実行パスを通過するための条件式は常に真になるので、当該実行パスを通過するための条件式は設けず、当該実行パス内の代入文（ｚｉｐ'＝Ｍａｔｈ．ｍａｘ（ｚｉｐ'，０）、ｃｏｕｎｔｒｙ＝Ｍａｔｈ．ｍａｘ（ｃｏｕｎｔｒｙ'，０）、及び、Ａｄｄｒｅｓｓ  ａｄｄｒ＝ｎｅｗ  Ａｄｄｒｅｓｓ（ｚｉｐ'，ｃｏｕｎｔｒｙ'））に対し代入される式が代入先の変数と一致する場合に真となる代入式条件（ｚｉｐ１'＝ｍａｘ（ｚｉｐ'，０）、ｃｏｕｎｔｒｙ１'＝ｍａｘ（ｃｏｕｎｔｒｙ'，０）、及び、ａｄｄｒ'＝｛ｚｉｐ＝ｚｉｐ１'，ｃｏｕｎｔｒｙ'＝ｃｏｕｎｔｒｙ１'）を満たす入出力制約を、プログラムＡ'の入出力制約として生成する。
【００８１】
図６は、制約条件生成部１０６が生成する制約条件の一例を示す。Ｓ１０４の処理において、制約条件生成部１０６は、対象プログラムＡ及びＡ'に対する入力値が等価であり（ｚｉｐ＝ｚｉｐ'及びｃｏｕｎｔｒｙ＝ｃｏｕｔｎｒｙ'）、かつ、複数の対象プログラムに対する出力値が等価でない（ａｄｄｒ！＝ａｄｄｒ）場合に真となる条件（ｉ）を生成する。
【００８２】
次に、制約条件生成部１０６は、対象プログラムＡの入出力条件（ｄ）、対象プログラムＡ'の入出力条件（ｆ）、及び、条件（ｉ）を論理積で結合し、これらの条件を満たす制約条件（ｇ）を生成する。
【００８３】
情報処理装置１０は、このように生成した制約条件を用いることにより、等価でない出力値ｏ及びｏ'を出力する等価な入力値ｉ及びｉ'を迅速かつ効率的に取得することができる。
【００８４】
図７は、本実施形態の変形例における対象プログラムＸの入出力制約の一例を示す。Ｓ１００の処理において、入出力制約生成部１０２は、対象プログラム中の代入文において、代入される式が制約ソルバで扱うことができない演算を含む場合に、代入される式を制約ソルバが扱うことができる式に変換してよい。
【００８５】
例えば、入出力制約生成部１０２は、代入式条件が静的解析では解析できない演算を含む場合、代入式条件を制約ソルバが扱うことができるより広い条件に変換してよい。一例として、入出力制約生成部１０２は、代入される式を、代入される式が真（ＴＲＵＥ）の時に真になり、代入される式が偽（ＦＡＬＳＥ）の時にも真となる場合がある条件に変換してよい。
【００８６】
具体例として、図７（ｋ）に示すように、対象プログラムＸに制約ソルバが扱うことができない２乗の演算（Ｍａｔｈ．ｐｏｗ（ｚｉｐ，２））が含まれる場合、入出力制約生成部１０２は、Ｍａｔｈ．ｐｏｗ（ｚｉｐ，２）の演算を制約ソルバが扱うことができ、Ｍａｔｈ．ｐｏｗ（ｚｉｐ，２）よりも広い条件（例えば、ｚｉｐ＞０）に変換してもよい。制約ソルバが扱うことができない演算は、制約ソルバにより異なるが、例えば、べき乗、三角関数、指数／対数関数、及び、乱数等が該当し得る。
【００８７】
これにより、情報処理装置１０は、制約条件を満たす入力値ｉ及びｉ'の範囲が緩和するので、制約解消部１０８により入力値ｉ及びｉ'を取得できる可能性が高くなる。
【００８８】
これに代えて、入出力制約生成部１０２は、代入式条件が静的解析では解析できない演算を含む場合、代入式条件を制約ソルバが扱うことができるより狭い条件に変換してよい。これにより、情報処理装置１０は、制約解消部１０８により、出力値ｏ及びｏ'が等価となる入力値ｉ及びｉ'を取得する可能性が低くなり、探索の精度を向上させることができる。
【００８９】
図８は、本実施形態の変形例における対象プログラムＸの入出力制約の一例を示す。本変形例において、制約解消部１０８は、対象プログラムの実行パスごとに入力値ｉ及びｉ'を探索してもよい。
【００９０】
例えば、本変形例では、Ｓ１００の処理において、入出力制約生成部１０２は複数の対象プログラムのうちの一の対象プログラムにおいて、複数の実行パスのうち互いに異なる一部の実行パスへの通過条件を常に真とした複数の入出力制約を生成してよい。
【００９１】
一例として、図８に示すように、入出力制約生成部１０２は、プログラムＹ中の条件分岐（ｚｉｐ＞５）を満たす実行パス、及び、条件分岐（ｚｉｐ＜０）を満たす実行パス）のうち、（ｚｉｐ＞５）を満たす実行パスの通過条件を常に真とした入出力制約（図８（ｎ）のＴＲＵＥ  ＡＮＤ  ｚｉｐ１＝５  ＡＮＤ  ｃｏｕｎｔｒｙ１＝１  ＡＮＤ  ａｄｄｒ＝｛ｚｉｐ＝ｚｉｐ１，  ｃｏｕｎｔｒｙ＝ｃｏｕｎｔｒｙ１｝）を生成してよい。
【００９２】
ここで、入出力制約生成部１０２は、常に真とする実行パス以外の実行パス（図８の例では、条件分岐（ｚｉｐ＜０）を満たす実行パス）の通過条件を常に偽としてもよい。
【００９３】
さらに、入出力制約生成部１０２は、（ｚｉｐ＜０）を満たす実行パスの通過条件を常に真とした入出力制約（図８（ｏ）のＴＲＵＥ  ＡＮＤ  ｚｉｐ１＝０  ＡＮＤ  ｃｏｕｎｔｒｙ１＝１  ＡＮＤ  ａｄｄｒ＝｛ｚｉｐ＝ｚｉｐ１，  ｃｏｕｎｔｒｙ＝ｃｏｕｎｔｒｙ１｝）を生成してよい。
【００９４】
情報処理装置１０は、複数の実行パスの一部の通過条件を常に真とすることにより、真となる実行パスに対応する条件分岐に係る論理式を解く処理負担を軽減し、真となる実行パスの処理に対応する入力値の候補をより迅速に得ることができる。
【００９５】
ここで、入出力制約生成部１０２は、常に真とする実行パス以外の実行パス（図８の例では、条件分岐（ｚｉｐ＞５）を満たす実行パス）の通過条件を常に偽としてもよい。これにより、情報処理装置１０は、偽とする実行パスの処理負担を軽減し、偽となる実行パス以外の実行パスの処理に対応する入力値の候補をより迅速に得ることができる。
【００９６】
次に、制約条件生成部１０６は、これらのプログラムＹの複数の入出力制約（ｎ）及び（ｏ）に対応して複数の制約条件を生成してよい。制約解消部１０８は、生成したこれらの複数の制約条件のそれぞれを複数の制約ソルバに与えて、複数の制約条件のそれぞれを満たす入力値を複数の制約ソルバから並列して取得してよい。
【００９７】
これにより、情報処理装置１０は、制約条件を満たす入力値ｉ及びｉ'を実行パスごとに並列して取得できるので、処理を高速化することができる。
【００９８】
なお、本実施形態においては、対象プログラムＡ及びＡ'等は、リファクタリング前後のプログラムであるとして説明したがこれに限られない。例えば、対象プログラムＡ及びＡ'は同一又は同等の機能を備えるように別個に生成されたプログラムであってもよい。
【００９９】
図９は、情報処理装置１０として機能するコンピュータ１９００のハードウェア構成の一例を示す。本実施形態に係るコンピュータ１９００は、ホスト・コントローラ２０８２により相互に接続されるＣＰＵ２０００、ＲＡＭ２０２０、グラフィック・コントローラ２０７５、及び表示装置２０８０を有するＣＰＵ周辺部と、入出力コントローラ２０８４によりホスト・コントローラ２０８２に接続される通信インターフェイス２０３０、ハードディスクドライブ２０４０、及びＣＤ−ＲＯＭドライブ２０６０を有する入出力部と、入出力コントローラ２０８４に接続されるＲＯＭ２０１０、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０を有するレガシー入出力部とを備える。
【０１００】
ホスト・コントローラ２０８２は、ＲＡＭ２０２０と、高い転送レートでＲＡＭ２０２０をアクセスするＣＰＵ２０００及びグラフィック・コントローラ２０７５とを接続する。ＣＰＵ２０００は、ＲＯＭ２０１０及びＲＡＭ２０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。
【０１０１】
グラフィック・コントローラ２０７５は、ＣＰＵ２０００等がＲＡＭ２０２０内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置２０８０上に表示させる。これに代えて、グラフィック・コントローラ２０７５は、ＣＰＵ２０００等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
【０１０２】
入出力コントローラ２０８４は、ホスト・コントローラ２０８２と、比較的高速な入出力装置である通信インターフェイス２０３０、ハードディスクドライブ２０４０、ＣＤ−ＲＯＭドライブ２０６０を接続する。通信インターフェイス２０３０は、有線又は無線によりネットワークを介して他の装置と通信する。
【０１０３】
また、通信インターフェイスは、情報処理装置１０におけるユーザ端末２０等と通信を行うハードウェアとして機能する。ハードディスクドライブ２０４０は、コンピュータ１９００内のＣＰＵ２０００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ２０６０は、ＣＤ−ＲＯＭ２０９５からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。
【０１０４】
また、入出力コントローラ２０８４には、ＲＯＭ２０１０と、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０の比較的低速な入出力装置とが接続される。ＲＯＭ２０１０は、コンピュータ１９００が起動時に実行するブート・プログラム、及び／又は、コンピュータ１９００のハードウェアに依存するプログラム等を格納する。
【０１０５】
フレキシブルディスク・ドライブ２０５０は、フレキシブルディスク２０９０からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。入出力チップ２０７０は、フレキシブルディスク・ドライブ２０５０を入出力コントローラ２０８４へと接続するとともに、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を入出力コントローラ２０８４へと接続する。
【０１０６】
ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供されるプログラムは、フレキシブルディスク２０９０、ＣＤ−ＲＯＭ２０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ２０２０を介してコンピュータ１９００内のハードディスクドライブ２０４０にインストールされ、ＣＰＵ２０００において実行される。
【０１０７】
コンピュータ１９００にインストールされ、コンピュータ１９００を情報処理装置１０として機能させるプログラムは、入出力制約生成モジュールと、取得モジュールと、制約条件生成モジュールと、制約解消モジュールと、実行モジュールと、判定モジュールと、通知モジュールと、プロジェクト管理モジュールとを備える。
【０１０８】
これらのプログラム又はモジュールは、ＣＰＵ２０００等に働きかけて、コンピュータ１９００を、入出力制約生成部１０２と、取得部１０４と、制約条件生成部１０６と、制約解消部１０８と、実行部１１０と、判定部１１２と、通知部１１４と、プロジェクト管理部１１６としてそれぞれ機能させてよい。
【０１０９】
これらのプログラムに記述された情報処理は、コンピュータ１９００に読込まれることにより、ソフトウェアと上述した各種のハードウェア資源とが協働した具体的手段である入出力制約生成部１０２と、取得部１０４と、制約条件生成部１０６と、制約解消部１０８と、実行部１１０と、判定部１１２と、通知部１１４と、プロジェクト管理部１１６として機能する。
【０１１０】
そして、これらの具体的手段によって、本実施形態におけるコンピュータ１９００の使用目的に応じた情報の演算又は加工を実現することにより、使用目的に応じた特有の情報処理装置１０が構築される。
【０１１１】
一例として、コンピュータ１９００と外部の装置等との間で通信を行う場合には、ＣＰＵ２０００は、ＲＡＭ２０２０上にロードされた通信プログラムを実行し、通信プログラムに記述された処理内容に基づいて、通信インターフェイス２０３０に対して通信処理を指示する。
【０１１２】
通信インターフェイス２０３０は、ＣＰＵ２０００の制御を受けて、ＲＡＭ２０２０、ハードディスクドライブ２０４０、フレキシブルディスク２０９０、又はＣＤ−ＲＯＭ２０９５等の記憶装置上に設けた送信バッファ領域等に記憶された送信データを読み出してネットワークへと送信し、もしくは、ネットワークから受信した受信データを記憶装置上に設けた受信バッファ領域等へと書き込む。
【０１１３】
このように、通信インターフェイス２０３０は、ＤＭＡ（ダイレクト・メモリ・アクセス）方式により記憶装置との間で送受信データを転送してもよく、これに代えて、ＣＰＵ２０００が転送元の記憶装置又は通信インターフェイス２０３０からデータを読み出し、転送先の通信インターフェイス２０３０又は記憶装置へとデータを書き込むことにより送受信データを転送してもよい。
【０１１４】
また、ＣＰＵ２０００は、ハードディスクドライブ２０４０、ＣＤ−ＲＯＭドライブ２０６０（ＣＤ−ＲＯＭ２０９５）、フレキシブルディスク・ドライブ２０５０（フレキシブルディスク２０９０）等の外部記憶装置に格納されたファイルまたはデータベース等の中から、全部または必要な部分をＤＭＡ転送等によりＲＡＭ２０２０へと読み込ませ、ＲＡＭ２０２０上のデータに対して各種の処理を行う。
【０１１５】
そして、ＣＰＵ２０００は、処理を終えたデータを、ＤＭＡ転送等により外部記憶装置へと書き戻す。このような処理において、ＲＡＭ２０２０は、外部記憶装置の内容を一時的に保持するものとみなせるから、本実施形態においてはＲＡＭ２０２０及び外部記憶装置等をメモリ、記憶部、または記憶装置等と総称する。
【０１１６】
本実施形態における各種のプログラム、データ、テーブル、データベース等の各種の情報は、このような記憶装置上に格納されて、情報処理の対象となる。なお、ＣＰＵ２０００は、ＲＡＭ２０２０の一部をキャッシュメモリに保持し、キャッシュメモリ上で読み書きを行うこともできる。
【０１１７】
このような形態においても、キャッシュメモリはＲＡＭ２０２０の機能の一部を担うから、本実施形態においては、区別して示す場合を除き、キャッシュメモリもＲＡＭ２０２０、メモリ、及び／又は記憶装置に含まれるものとする。
【０１１８】
また、ＣＰＵ２０００は、ＲＡＭ２０２０から読み出したデータに対して、プログラムの命令列により指定された、本実施形態中に記載した各種の演算、情報の加工、条件判断、情報の検索・置換等を含む各種の処理を行い、ＲＡＭ２０２０へと書き戻す。
【０１１９】
例えば、ＣＰＵ２０００は、条件判断を行う場合においては、本実施形態において示した各種の変数が、他の変数または定数と比較して、大きい、小さい、以上、以下、等しい等の条件を満たすか否かを判断し、条件が成立した場合（又は不成立であった場合）に、異なる命令列へと分岐し、またはサブルーチンを呼び出す。
【０１２０】
また、ＣＰＵ２０００は、記憶装置内のファイルまたはデータベース等に格納された情報を検索することができる。例えば、第１属性の属性値に対し第２属性の属性値がそれぞれ対応付けられた複数のエントリが記憶装置に格納されている場合において、ＣＰＵ２０００は、記憶装置に格納されている複数のエントリの中から第１属性の属性値が指定された条件と一致するエントリを検索し、そのエントリに格納されている第２属性の属性値を読み出すことにより、所定の条件を満たす第１属性に対応付けられた第２属性の属性値を得ることができる。
【０１２１】
以上に示したプログラム又はモジュールは、外部の記録媒体に格納されてもよい。記録媒体としては、フレキシブルディスク２０９０、ＣＤ−ＲＯＭ２０９５の他に、ＤＶＤ又はＣＤ等の光学記録媒体、ＭＯ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワーク又はインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ１９００に提供してもよい。
【０１２２】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【０１２３】
特許請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
【符号の説明】
【０１２４】
１  情報処理システム、２  プログラムデータベース、４  制約データベース、１０  情報処理装置、２０  ユーザ端末、１０２  入出力制約生成部、１０４  取得部、１０６  制約条件生成部、１０８  制約解消部、１１０  実行部、１１２  判定部、１１４  通知部、１１６  プロジェクト管理部、１９００  コンピュータ、２０００  ＣＰＵ、２０１０  ＲＯＭ、２０２０  ＲＡＭ、２０３０  通信インターフェイス、２０４０  ハードディスクドライブ、２０５０  フレキシブルディスク・ドライブ、２０６０  ＣＤ−ＲＯＭドライブ、２０７０  入出力チップ、２０７５  グラフィック・コントローラ、２０８０  表示装置、２０８２  ホスト・コントローラ、２０８４  入出力コントローラ、２０９０  フレキシブルディスク、２０９５  ＣＤ−ＲＯＭ
【図１】
2014186477.tif 000003
【図２】
2014186477.tif 000004
【図３】
2014186477.tif 000005
【図４】
2014186477.tif 000006
【図５】
2014186477.tif 000007
【図６】
2014186477.tif 000008
【図７】
2014186477.tif 000009
【図８】
2014186477.tif 000010
【図９】
2014186477.tif 000011