(57)【要約】【課題】本発明は、プログラム完成前の段階において性能評価し要求仕様で与えられる目標性能値を各プログラムブロックに分配することが可能なプログラム作成装置を提供することを目的とする。【解決手段】本発明によるプログラム作成装置は、分解ソースコードに対して実行状況を記録する命令を埋め込み、プログラムの実行性能を測定して評価することを可能とする性能測定手段と、機能依存関係データベースに記録された依存関係に基づいて、性能測定手段にて実行状況を記録する命令が埋め込まれた複数の分解ソースコードを合成して実行可能なソースコードとして性能測定手段に与え、当該性能測定手段によるプログラムの実行性能の測定、評価に供するソースコード合成手段と、性能測定手段による評価結果と機能依存関係データベースに記録された依存関係とに基づいて、プログラムブロック単位に性能制約を配分する性能配分手段とを備える。【選択図】図１
2011175398.tif 000002
【特許請求の範囲】
【請求項１】
処理対象プログラムのソースコードを解析してプログラムブロック単位に分解するとともに、前記分解されたソースコード（以下、分解ソースコードとする）に対して編集、または前記分解ソースコードに基づいて前記プログラムブロック間の機能の依存関係を整理するソースコード解析・編集手段と、
前記分解ソースコードを記録する分解ソースコードデータベースと、
前記分解ソースコードに対して実行状況を記録する命令を埋め込み、プログラムの実行性能を測定して評価することを可能とする性能測定手段と、
前記プログラムブロック間の機能の依存関係を記録する機能依存関係データベースと、
前記機能依存関係データベースに記録された前記依存関係に基づいて、前記性能測定手段にて前記実行状況を記録する命令が埋め込まれた複数の前記分解ソースコードを合成して実行可能なソースコードとして前記性能測定手段に与え、当該性能測定手段による前記プログラムの実行性能の測定、評価に供するソースコード合成手段と、
前記性能測定手段による評価結果と前記機能依存関係データベースに記録された前記依存関係とに基づいて、前記プログラムブロック単位に性能制約を配分する性能配分手段と、
前記性能制約を記録する性能要求データベースと、
を備える、プログラム作成装置。
【請求項２】
前記性能測定手段は、
前記性能制約に基づいて前記処理対象プログラムの実行を制御するプログラム実行制御手段を備えることを特徴とする、請求項１に記載のプログラム作成装置。
【請求項３】
前記ソースコード解析・編集手段は、
前記依存関係に基づいて設定されたハイパーリンクを用いて前記ソースコードの編集を行うソースコード編集手段を備えることを特徴とする、請求項１または２に記載のプログラム作成装置。
【請求項４】
前記性能配分手段は、
前記機能依存関係ＤＢに記録された前記依存関係に含まれる前記プログラムブロックの依存元および依存先の情報を用いることによって、前記依存先のプログラムブロックの前記性能制約の合計が前記依存元のプログラムブロックの性能制約を超えないように、前記性能制約を前記プログラムブロックに自動的に配分することを特徴とする、請求項１ないし３のいずれかに記載のプログラム作成装置。
【請求項５】
前記性能配分手段は、
前記性能制約の初期値を、前記性能測定手段による前記評価結果のうちの、前記ソースコードが修正されていない前記プログラムブロックの評価結果に基づく前記性能制約とすることを特徴とする、請求項１ないし４のいずれかに記載のプログラム作成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム作成装置に関し、特に、プラント向けの大規模システムにおける性能評価方法に基づくプログラム作成装置に関する。
【背景技術】
【０００２】
プラント向けの大規模システムのプログラム作成において、システム試験のような検証段階で速度性能の未達成やメモリ使用量の超過などが指摘されることが多い。このようなプログラム開発で性能の未達成が発覚した場合には、決められた性能を達成するようにソースコードを修正する必要があるが、プログラムの規模が大きいために多くの時間とコストがかかる。従って、プログラム開発の早期の段階で、性能が要求条件を満たしているか否かを評価できることが望まれている。
【０００３】
従来では、発覚した性能問題に対してソースコードを修正する際において、可読性の低いソースコードに対する保守作業を容易にするために、ソースコードを分割して当該分割されたソースコードを仮想的に準備し、これに基づいて機能単位でソースコードを表示し、機能間の依存関係を編集した情報に基づいてソースコードへの機能追加や修正をソースコードに自動的に反映することによって、改良されたソースコードを得る技術がある（例えば、特許文献１参照）。
【０００４】
また、発覚した性能問題に対して限られた開発者資源を有効活用して対象プログラムの性能を向上させるために、対象プログラムの構造を解析して実行状況を記録するトレース命令をソースコードに挿入し、そこから生成した実行モジュールの実行状況に基づいて、ソースコードを分割して生成された複数のプログラムブロックのうちから改善すべきプログラムブロックを判定することによって、限られた開発者資源を高い性能改善効果を得られるプログラムブロックの最適化作業に割り当てて有効活用させる技術がある（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１８６２４４号公報
【特許文献２】特開２００９−２１１４２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来のプログラム作成装置では、実行状況を記録する命令を埋め込んだソースコードから生成される実行モジュールの実行状況を監視することによって、各プログラムブロック（例えば、クラス、モジュール、関数など）の性能を測定することができるが、要求仕様で与えられる目標性能値は各プログラムブロックに配分されずにプログラム全体に対して設定されているため、システム試験のようなプログラム完成後の検証段階まで性能が評価できないという問題があった。
【０００７】
本発明は、これらの問題を解決するためになされたものであり、プログラム完成前の段階において性能評価し要求仕様で与えられる目標性能値を各プログラムブロックに分配することが可能なプログラム作成装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記の課題を解決するために、本発明によるプログラム作成装置は、処理対象プログラムのソースコードを解析してプログラムブロック単位に分解するとともに、分解されたソースコード（以下、分解ソースコードとする）に対して編集、または分解ソースコードに基づいてプログラムブロック間の機能の依存関係を整理するソースコード解析・編集手段と、分解ソースコードを記録する分解ソースコードデータベースと、分解ソースコードに対して実行状況を記録する命令を埋め込み、プログラムの実行性能を測定して評価することを可能とする性能測定手段と、プログラムブロック間の機能の依存関係を記録する機能依存関係データベースと、機能依存関係データベースに記録された依存関係に基づいて、性能測定手段にて実行状況を記録する命令が埋め込まれた複数の分解ソースコードを合成して実行可能なソースコードとして性能測定手段に与え、当該性能測定手段によるプログラムの実行性能の測定、評価に供するソースコード合成手段と、性能測定手段による評価結果と機能依存関係データベースに記録された依存関係とに基づいて、プログラムブロック単位に性能制約を配分する性能配分手段と、性能制約を記録する性能要求データベースとを備える。
【発明の効果】
【０００９】
本発明によると、処理対象プログラムのソースコードを解析してプログラムブロック単位に分解するとともに、分解されたソースコード（以下、分解ソースコードとする）に対して編集、または分解ソースコードに基づいてプログラムブロック間の機能の依存関係を整理するソースコード解析・編集手段と、分解ソースコードを記録する分解ソースコードデータベースと、分解ソースコードに対して実行状況を記録する命令を埋め込み、プログラムの実行性能を測定して評価することを可能とする性能測定手段と、プログラムブロック間の機能の依存関係を記録する機能依存関係データベースと、機能依存関係データベースに記録された依存関係に基づいて、性能測定手段にて実行状況を記録する命令が埋め込まれた複数の分解ソースコードを合成して実行可能なソースコードとして性能測定手段に与え、当該性能測定手段によるプログラムの実行性能の測定、評価に供するソースコード合成手段と、性能測定手段による評価結果と機能依存関係データベースに記録された依存関係とに基づいて、プログラムブロック単位に性能制約を配分する性能配分手段と、性能制約を記録する性能要求データベースとを備えるため、プログラム完成前の段階において性能評価し要求仕様で与えられる目標性能値を各プログラムブロックに分配することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態によるプログラム作成装置のシステム構成の一例を示す図である。
【図２】本発明の実施形態によるプログラム作成装置１のハードウェア構成の一例を示す図である。
【図３】本発明の実施形態によるプログラム作成装置の機能構成の一例を示す図である。
【図４】本発明の実施形態によるソースコード編集部における分解されたソースコードの表示の一例を示す図である。
【図５】本発明の実施形態による性能評価部における性能評価結果および性能未達成箇所の表示の一例を示す図である。
【図６】本発明の実施形態による性能要求入力部における性能要求の入力の一例を示す図である。
【図７】本発明の実施形態による性能配分部における性能要求をプログラムブロック単位に配分する一例を示すフローチャートである。
【図８】本発明の実施形態によるプログラム作成装置を用いて新規にプログラムを開発するときの開発プロセスの一例を示すフローチャートである。
【図９】本発明の実施形態によるプログラム作成装置を用いて既存のプログラムの機能追加または修正を行うときの開発プロセスの一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
本発明の実施形態について、図面を用いて以下に説明する。
【００１２】
図１は、本発明の実施形態によるプログラム作成装置１のシステム構成の一例を示す図である。図１に示すように、本実施形態によるプログラム作成装置１は、性能評価の対象となるプログラム（処理対象プログラム）のソースコードを解析してプログラムブロック単位に分解するとともに、分解されたソースコード（分解ソースコード）に対して編集、または分解ソースコードに基づいてプログラムブロック間の機能の依存関係を整理するソースコード解析・編集手段５と、分解ソースコードを記録する分解ソースコードＤＢ９（分解ソースコードデータベース）と、分解ソースコードに対して実行状況を記録する命令を埋め込み、プログラムの実行性能を測定して評価することを可能とする性能測定手段８と、プログラムブロック間の機能の依存関係を記録する機能依存関係ＤＢ１０（機能依存関係データベース）と、機能依存関係ＤＢ１０に記録された依存関係に基づいて、性能測定手段８にて実行状況を記録する命令が埋め込まれた複数の分解ソースコードを合成して実行可能なソースコードとして性能測定手段８に与え、当該性能測定手段８によるプログラムの実行性能の測定、評価に供するソースコード合成手段６と、性能測定手段８による評価結果と機能依存関係ＤＢ１０に記録された依存関係とに基づいて、プログラムブロック単位に性能制約を配分する性能配分手段７と、性能制約を記録する性能要求ＤＢ１１（性能要求データベース）とを備えている。また、入力手段２、表示手段３、出力手段４を備えている。
【００１３】
図２は、本発明の実施形態によるプログラム作成装置１のハードウェア構成の一例を示す図である。図２に示すように、本実施形態によるプログラム作成装置１は、プログラム作成装置１を制御してプログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１２を備えている。ＣＰＵ１２は、バス１３を介してＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１４、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１５、ＦＤＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）１６、ＣＤＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ  Ｄｒｉｖｅ）１７、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１８、Ｋ／Ｂ（Ｋｅｙ  Ｂｏａｒｄ）１９、マウス２０、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）２１、プリンタ２２、モデム２３と接続されており、これらのハードウェアデバイスを制御している。
【００１４】
なお、ＲＡＭ１５は揮発性メモリの一例であり、ＲＯＭ１４、ＦＤＤ１６、ＣＤＤ１７、ＨＤＤ１８は不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。また、Ｋ／Ｂ１９、マウス２０は、入力装置あるいは入力部の一例、ＣＲＴ２１は表示装置あるいは表示部の一例、プリンタ２２は出力装置あるいは出力部の一例、モデム２３は通信装置あるいは通信部の一例である。
【００１５】
ＨＤＤ１８には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）２４、ウィンドウシステム２５、プログラム群２６、ファイル群２７が記憶されている。プログラム群２６のプログラムは、ＣＰＵ１２、ＯＳ２４、ウィンドウシステム２５により実行される。なお、ＨＤＤ１８に替えて、光ディスク装置、メモリカード読み書き装置などの記憶装置を備えてもよい。
【００１６】
プログラム群２６には、ソースコード解析・編集手段５、ソースコード合成手段６、性能配分手段７、性能測定手段８を実行させるためのプログラムが記憶されている。ファイル群２７には、分解ソースコードＤＢ９、機能依存関係ＤＢ１０、性能要求ＤＢ１１のデータが記憶されている。
【００１７】
入力手段２は入力装置に代表されるが、記憶装置や通信装置によって実現してもよい。また、表示手段３は表示装置に代表されるが、記憶装置や出力装置、通信装置によって実現してもよい。また、出力手段４は出力装置に代表されるが、記憶装置や通信装置によって実現してもよい。
【００１８】
図３は、本発明の実施形態によるプログラム作成装置１の機能構成の一例を示す図である。図３に示すように、ソースコード解析・編集手段５は、ソースコード解析部２８、ソースコード編集部２９（ソースコード編集手段）、機能依存関係管理部３０を備え、ソースコード合成手段６は、ソースコード合成部３１を備えている。また、性能配分手段７は、性能要求入力部３２、性能配分部３３を備え、性能測定手段８は、性能測定部３４、性能評価部３５、プログラム実行制御部３６（プログラム実行制御手段）を備えている。
【００１９】
ソースコード解析部２８では、入力手段２を用いて入力された、処理対象プログラムのソースコード３７をプログラムブロック（例えば、機能や関数単位など）に分解し、分解されたソースコード３８は分解ソースコードＤＢ９に記録される。なお、ソースコード解析部２８がソースコード３７を解析してプログラムブロック単位に分解する方法は周知である（例えば、特許文献１参照）。
【００２０】
機能依存関係管理部３０では、分解されたソースコード３８に基づいて、プログラムブロック間の依存関係を入力手段２を用いて入力された機能単位に整理し、整理された機能依存関係３９は機能依存関係ＤＢ１０に記録される。
【００２１】
性能測定部３４は、分解されたソースコード３８のプログラムブロックごとに（プログラム単位で）、プログラムの実行状況を記録する命令を埋め込む。なお、性能測定部３４が、分解されたソースコード３８のプログラムブロックごとに実行状況を記録する命令を埋め込む方法は周知である（例えば、特許文献２参照）。
【００２２】
プログラム実行制御部３６では、分解されたソースコード３８のプログラムブロックごとに、性能要求４０（性能制約）に基づいて性能制約が未達成な場合にプログラムの実行を中断する命令を埋め込む。具体的には、プログラム実行制御部３６は、性能測定部３４が分解されたソースコード２２０のプログラムブロックごとに実行状況を記録する命令を埋め込む時に、当該埋め込まれた命令の直後に、記録されたプログラムブロックの実行状況から当該プログラムブロックの性能を測定する命令と、測定された性能と性能要求４０から取得する当該プログラムブロックの性能の制約条件とを比較する命令と、比較した結果、測定された性能が性能の制約条件を未達成だった場合にプログラムの実行を中断する命令を埋め込む。なお、測定された性能と性能の制約条件とを比較する命令は、性能の制約条件をソースコードに埋め込む方法が一例としてあるが、性能要求４０から性能の制約条件を取得する命令を埋め込み、性能の制約条件をソースコードに埋めこまない方法でもよい。
【００２３】
ソースコード合成部３１では、分解されたソースコード３８を機能依存関係３９に基づいて合成し、出力手段４から合成ソースコード４１を出力する。なお、ソースコード合成部３１が、機能依存関係３９に基づいて、分解されたソースコード３８を合成する方法は周知である（例えば、特許文献１参照）。
【００２４】
性能評価部３５では、入力された合成ソースコード４１に基づいて性能を評価し、性能評価結果４２および性能未達成箇所４３を出力手段４から出力する。なお、本実施形態による性能評価部３５は、入力手段２を用いて入力された合成ソースコード４１を実行モジュールに変換して実行しているが、プログラム作成装置１とは別の装置によって合成ソースコード４１を変換した実行モジュールを入力して実行する方法や、プログラム作成装置１とは別の装置によって実行した際に性能測定部３４およびプログラム実行制御部３６にて埋め込まれた命令によって出力されるプログラムの実行状況の記録や実行の中断の記録を入力する方法でもよい。
【００２５】
開発者４４は性能評価結果４２を確認することによって、対象プログラムが性能要求を満たしているか否かを判断する。また、性能未達成箇所２７０を確認することによって、対象プログラムの性能要求を満たすために修正すべき箇所を判断する。
【００２６】
性能要求入力部３２では、開発者４４が入力手段２を用いて性能要求４０を入力し、入力された性能要求４０は性能要求ＤＢ１１に記録される。
【００２７】
性能配分部３３は、入力手段２を用いて入力された性能評価結果４２と機能依存関係３９とに基づいて、性能要求４０をプログラムブロック単位に配分する。プログラムブロック単位に配分された性能要求４０について修正が必要な場合は、開発者４４は入力手段２から性能要求入力部３２を介して性能要求４０を修正することもできる。また、対象プログラムの性能評価が行われず性能評価結果４２が入力されていない場合であっても、性能配分部３３は、性能要求４０を機能依存関係３９に基づいてプログラムブロック単位に配分することもできる。
【００２８】
開発者４４は、ソースコード編集部２９を用いて、分解されたソースコード３８を修正して対象プログラムの性能を改善する。また、新規にプログラムを開発する場合は、開発者４４はソースコード編集部１２０を用いて、分解されたソースコード３８を作成し、作成されたソースコード３８を分解ソースコードＤＢ９に記録する。修正または新規に作成された分解されたソースコード３８に対して、前述の方法を繰り返して性能評価結果４２および性能未達成箇所４３を出力する。
【００２９】
また、開発者４４が性能未達成箇所４３を修正することによって対象プログラムの性能要求を満たすことが困難であると判断した場合や、対象プログラムの性能要求を満たすために他の箇所を修正する必要があると判断をした場合には、性能配分部３３は、機能依存関係３９と修正後に得られた新たな性能評価結果２５０とに基づいて、性能要求４０をプログラムブロック単位に配分する。そして、新たな性能要求４０に基づいて、前述の方法を繰り返して性能評価結果４２および性能未達成箇所４３を出力する。開発者４４は、性能未達成箇所４３を確認することによって対象プログラムの性能要求を満たすために必要な修正箇所を判断し（発見し）、当該修正箇所のソースコード３８を修正する。対象プログラムが性能要求を満たすまで、以上の処理が繰り返して実行される。
【００３０】
図４は、本発明の実施形態によるソースコード編集部２９における分解されたソースコード３８の表示の一例を示す図である。図４に示すように、ソースコード編集部２９には、例えば、機能依存関係表示部４５、ソースコード表示部４６、依存元表示部４７などの表示部が含まれる。
【００３１】
機能依存関係表示部４５は、機能依存関係３９を表示する表示部である。開発者４４は、機能依存関係表示部４５からソースコードを表示させたいプログラムブロックを選択することができる。また、機能依存関係表示部４５に、機能依存関係管理部３０を含めることもできる。この場合、機能依存関係表示部４５上でプログラムブロック間の依存関係を修正したり、プログラムブロックの追加・削除を行ったりすることができる。本実施形態による機能依存関係表示部４５では、プログラムブロックの依存関係を構成する階層構造に従ってツリー表示（ツリーの上位階層から順にプログラム全体−機能−より上位のプログラムブロック−より下位のプログラムブロック−・・・）することが示されるが、セミ・ラティス構造などとして表示しても、異なる階層構造で表示してもよい。
【００３２】
ソースコード表示部４６は、機能依存関係表示部４５にて選択されたプログラムブロックに対応する、分割されたソースコード３８を表示する表示部である。ソースコード表示部４６では、機能依存関係３９に基づいて、ソースコードのプログラムブロック呼び出し部分に依存先のプログラムブロックへのハイパーリンクが設定され、開発者４４は設定されたハイパーリンクを選択することによって依存先のプログラムブロックをソースコード表示部４６に表示させることができる。開発者４４は、ソースコード表示部４６上にてソースコードの修正を行うことができる。
【００３３】
依存元表示部４７では、機能依存関係３９に基づいて、ソースコード表示部４６に表示中のプログラムブロックを呼び出しているプログラムブロックの一覧を表示するとともに、依存元のプログラムブロックへのハイパーリンクが設定されている。開発者４４は、ハイパーリンクを選択することで、依存元のプログラムブロックをソースコード表示部４６に表示させることができる。
【００３４】
機能依存関係管理部３０は、機能やプログラムブロックごとに対応する、分解されたソースコード３８、依存元の機能やプログラムブロック、依存先の機能やプログラムブロック、および依存関係が生じているソースコードの箇所を、機能依存関係３９として機能依存関係ＤＢ１０に記録する。
【００３５】
図５は、本発明の実施形態による性能評価部３５における性能評価結果４２および性能未達成箇所４３の表示の一例を示す図である。図５に示すように、本実施形態による性能評価部３５には、例えば、性能評価結果表示部４８、性能未達成箇所表示部４９などの表示部が含まれる。
【００３６】
性能評価結果表示部４８は、性能評価結果４２として、例えばプログラムブロックの実行時刻や性能未達成の内容などを表示する表示部である。性能評価結果表示部４８では、一覧表示しているプログラムブロックに対してハイパーリンクが設定されており、開発者４４はハイパーリンクを選択することによって、選択したプログラムブロックをソースコード表示部４６に表示させることができる。
【００３７】
性能未達成箇所表示部４９は、性能未達成箇所４３として、例えば中断した時に実行していたプログラムブロックなどを表示する表示部である。性能未達成箇所表示部４９では、表示しているプログラムブロックに対してハイパーリンクが設定されており、開発者４４はハイパーリンクを選択することによって、選択したプログラムブロックをソースコード表示部４６に表示させることができる。
【００３８】
なお、本実施形態による性能評価部３５では、性能評価結果４２および性能未達成箇所４３を表示する表示手段として、ソースコード編集部２９と同一の表示手段に別々に表示することを例示しているが、同一の表示手段に同時に表示しても、別々の表示手段に表示してもよい。
【００３９】
性能配分部３３は、性能評価結果４２が入力された場合は、機能依存関係３９に基づいて、性能要求４０の初期値として機能やプログラムブロックの性能の制約条件を設定する。その後、性能評価部３５による性能評価後に修正または追加された機能やプログラムブロックの性能の制約条件を設定する。また、性能評価結果４２が入力されていない場合は、性能要求４０の初期値が設定されていない状態で、全ての性能の制約条件を設定する。性能の制約条件は、開発者４４が性能要求入力部３２を介して性能の制約条件を設定した後、性能配分部３３が性能の制約条件が設定されていない機能やプログラムブロックの性能の制約条件を設定する。なお、開発者は初期値が設定されている機能やプログラムブロックの性能の制約条件を、性能要求入力部３２を介して変更可能だが、性能配分部３３は、初期値が設定されている機能やプログラムブロックの性能の制約条件および性能要求入力部３２を介して設定された性能の制約条件を変更することができない。また、性能要求４０（性能制約）の初期値を、性能測定手段８の性能評価部３５による性能評価結果のうちの、ソースコードが修正されていないプログラムブロックの評価結果に基づく性能制約としてもよい。
【００４０】
図６は、本発明の実施形態による性能要求入力部７における性能要求の入力の一例を示す図である。図６に示すように、性能要求入力部３２には、例えば、性能要求表示部５０、機能依存関係表示部４５などが含まれる。
【００４１】
性能要求表示部５０は、機能依存関係表示部４５にて選択された機能やプログラムブロックに対応する性能要求４０を表示する表示部である。性能要求表示部５０では、機能単位やプログラムブロック単位での最大実行時間や平均メモリ使用量などの性能の制約条件を設定することができる。また、機能依存関係３９と他の機能やプログラムブロックの性能要求４０とに基づいて、当該機能やプログラムブロックで設定可能な性能の上限などが表示される。なお、本実施形態による性能要求表示部５０は、ソースコード編集部２９、性能評価部３５と同一の表示手段に別々に表示することが例示されているが、同一の表示手段に同時に表示しても、別々の表示手段に表示してもよい。
【００４２】
図７は、本発明の実施形態による性能配分部３３における性能要求４０をプログラムブロック単位に配分する一例を示すフローチャートである。
【００４３】
図７に示すように、ステップＳ７０１では、機能依存関係ＤＢ１０の機能依存関係３９で管理される機能やプログラムブロックから、依存元を持たない機能やプログラムブロック（以下、根元ブロックとする）の一覧を取得する。
【００４４】
ステップＳ７０２では、全ての根本ブロックが親ブロックとなったか否かを判定し、Ｙｅｓであれば性能配分を終了する。
【００４５】
ステップＳ７０３では、根本ブロックの一覧から、まだ親ブロックとなっていない根本ブロックを１つ抽出し、親ブロックとする。根本ブロックを抽出する方法は、機能依存関係３９にて機能やプログラムブロックを管理するときのＩＤ順に抽出する方法が一例としてあるが、機能やプログラムブロックのソースコードのサイズの大きい順などの方法でもよい。
【００４６】
ステップＳ７０４では、機能依存関係３９に基づいて、親ブロックに依存先の機能やプログラムブロックがあるか否かを判定し、ＮｏであればステップＳ７０２に戻って性能配分を続ける。
【００４７】
ステップＳ７０５では、機能依存関係３９に基づいて、親ブロックの依存先の機能やプログラムブロック（以下、子ブロックとする）の一覧を取得し、親ブロックと子ブロックの対応関係（以下、親子関係とする）を記録する。
【００４８】
ステップＳ７０６では、全ての子ブロックの性能の制約条件が設定済みか否かを判定し、ＹｅｓであればステップＳ７０８に移行する。
【００４９】
ステップＳ７０７では、子ブロックの一覧から、まだ性能の制約条件が設定されていない子ブロックを１つ抽出し、性能の制約条件を設定し、ステップＳ７０６に戻って性能配分を続ける。ここで、性能の制約条件の設定において、プログラム実行時間に例示される逐次プログラムブロックが実行された時の性能合計が制約条件となる性能項目については、同時に実行されない子ブロックの性能の制約条件の合計が親ブロックの性能の制約条件を上回らないように適切な値を設定する。また、メモリ使用量に例示される逐次プログラムブロックが実行された時の性能最大値が制約条件となる性能項目については、同時に実行される子ブロックの性能の制約条件の合計が親ブロックの性能の制約条件を上回らないように適切な値を設定する。
【００５０】
子ブロックの性能の制約条件の合計が親ブロックの性能の制約条件を上回らないように適切な値を設定する方法としては、既に性能の制約条件が設定されている子ブロックの性能の制約条件の合計を親ブロックの性能の制約条件から減算することで、性能の制約条件が設定されていない子ブロックの性能の制約条件の合計の上限を算出し、性能の制約条件が設定されていない子ブロックの数で除算することで、各子ブロックの性能の制約条件を設定する方法が一例としてあるが、性能の制約条件が設定されていない子ブロックの性能の制約条件の合計の上限を性能の制約条件が設定されていない子ブロックのソースコードの長さや実行ステップ数などの値で比例配分する方法などとしてもよい。また、これらの配分は自動的に行ってもよい。すなわち、性能配分手段７の性能配分部３３は、機能依存関係ＤＢ１０に記録された依存関係３９に含まれるプログラムブロックの依存元および依存先の情報を用いることによって、依存先のプログラムブロックの性能制約の合計が依存元のプログラムブロックの性能制約を超えないように、性能制約をプログラムブロックに自動的に配分されてもよい。
【００５１】
ステップＳ７０８では、全ての子ブロックが親ブロックとなったか否かを判定し、ＹｅｓであればステップＳ７１０に移行する。
【００５２】
ステップＳ７０９では、子ブロックの一覧からまだ親ブロックとなっていない子ブロックを１つ抽出して親ブロックとし、ステップＳ７０４に戻って性能配分を続ける。
【００５３】
ステップＳ７１０では、親ブロックの親子関係に基づいて、親ブロックに親が存在するか否かを判定し、ＮｏであればステップＳ７０３に戻って性能配分を続ける。
【００５４】
ステップＳ７１１では、現在の親ブロックと子ブロックとの間の親子関係の記録を破棄し、親ブロックの親子関係に基づいて、親ブロックの親の機能やプログラムブロックを新しい親ブロックとし、ステップＳ７０５に戻って性能配分を続ける。
【００５５】
図８は、本発明の実施形態によるプログラム作成装置１を用いて新規にプログラムを開発するときの開発プロセスの一例を示すフローチャートである。図８に示すように、ステップＳ８０１において、開発者４４はシステムに対する要求仕様５１を分析して、プログラムの機能仕様５２と性能仕様５３とを作成する。
【００５６】
ステップＳ８０２において、開発者４４は機能仕様５２に基づいて機能の設計を行い、設計した機能をソースコード編集部２９を用いて入力する。機能依存関係管理部３０は、入力された機能に基づいて機能依存関係３９を出力する。
【００５７】
ステップＳ８０３において、開発者４４は機能依存関係３９に基づいて、ソースコード編集部２９を用いてプログラムを作成し、分解されたソースコード３８を出力する。なお、分解されたソースコード３８を使用するステップＳ８０６以降の処理は、部分的なプログラムブロックに対しても実施可能であるため、作成が完了したプログラムブロックから順次ステップＳ８０６以降の処理を行う。
【００５８】
ステップＳ８０４において、開発者４４は性能仕様５３と機能依存関係３９とに基づいて、性能要求入力部３２を介して機能単位の性能の制約条件を入力し、性能要求４０として出力する。
【００５９】
ステップＳ８０５において、性能配分部３３は、機能依存関係３９に基づいて性能要求４０をプログラムブロック単位に配分し、当該性能要求４０を出力する。
【００６０】
ステップＳ８０６において、性能測定部３４は、分解されたソースコード３８に対して実行状況を記録する命令を埋め込み、当該命令が埋め込まれた、分解されたソースコード３８を出力する。
【００６１】
ステップＳ８０７において、プログラム実行制御部３６は、性能要求４０に基づいて、分解されたソースコード３８に対してプログラムの実行を制御する命令を埋め込み、当該命令が埋め込まれた、分解されたソースコード３８を出力する。
【００６２】
ステップＳ８０８において、ソースコード合成部３１は、機能依存関係３９に基づいて、分解されたソースコード３８を合成し、合成ソースコード４１を出力する。なお、分解されたソースコード３８が全てのプログラムブロックについて作成されていない段階であっても、ソースコード合成部３１は、作成されている（作成された分の）分解されたソースコード３８を合成して部分的に実行可能なソースコードを作成し、部分的に実行可能な合成ソースコード４１として出力する。
【００６３】
ステップＳ８０９において、開発者４４は性能評価部３５を用いて合成ソースコード４１の試験を行い、性能評価結果４２と性能未達成箇所４３とを出力する。試験の結果、性能が達成されていればプログラムの開発は終了する。一方、性能が未達成の場合は、開発者４４はステップＳ８０５に戻って性能配分を再度行う。ステップＳ８０５では、性能配分部３３は機能依存関係３９に加えて性能評価結果４２にも基づいて、性能要求４０をプログラムブロック単位に配分し、性能要求４０を出力する。以降、ステップＳ８０９までの処理を行い、ステップＳ８０９にて試験を行う。試験の結果、性能が達成されていればプログラムの開発は終了する。一方、再度、性能が未達成の場合には、ステップＳ８１０に移行して機能の再設計を行う。
【００６４】
なお、開発者４４は性能評価部３５を用いて部分的に実行可能な合成ソースコード４１の試験を行い、性能評価結果４２および性能未達成箇所４３を出力することもできる。そして、試験の結果、性能が達成されていれば試験したプログラムブロックの開発は終了する。一方、性能が未達成の場合には、開発者４４はステップＳ８０４に戻って性能制約を再設定するか、またはステップＳ８１０に移行して機能の再設計を行うかを選択する。
【００６５】
ステップＳ８１０において、開発者４４は性能未達成箇所４３に基づいて、ソースコード編集部２９を用いて機能依存関係３９の修正を行う。機能依存関係管理部３０は、修正された機能に基づいて、修正後の機能依存関係３９を出力する。
【００６６】
ステップＳ８１１において、開発者４４は修正後の機能依存関係３９に基づいて、ソースコード編集部２９を用いてプログラムを修正し（修正の対象となるプログラムを図中の矢印１から取得して修正する）、修正後の分解されたソースコード３８を出力する。その後、開発者４４は、ステップＳ８０６に戻って（図中の矢印２）実行状況を記録する命令の埋め込みを再度行う。ステップＳ８０６において、性能測定部３４は、修正後の分解されたソースコード３８に実行状況を記録する命令を埋め込み、分解されたソースコード３８を出力する。
【００６７】
ステップＳ８１２において、開発者４４は修正後の機能依存関係３９に基づいて、性能要求入力部３２を介して性能要求４０を修正し（修正の対象となる性能要求を矢印３から取得して修正する）、修正後の性能要求４０を出力する。その後、開発者４４はステップＳ８０５に戻って（図中の矢印４）性能配分をやり直す。
【００６８】
以降、ステップＳ８０９の試験にて性能が達成されるまで、ステップＳ８１０の機能の再設計、ステップＳ８１１のプログラムの修正、ステップＳ８１２の性能制約の再設定を繰り返し行う。
【００６９】
図９は、本発明の実施形態によるプログラム作成装置１を用いて既存のプログラムの機能追加または修正を行うときの開発プロセスの一例を示すフローチャートである。図９に示すように、ステップＳ９０１において、ソースコード解析部２８は既存のプログラムのソースコード３７を解析して、分解されたソースコード３８および機能依存関係３９を出力する。
【００７０】
ステップＳ９０２において、性能測定部３４は、分解されたソースコード３８に実行状況を記録する命令を埋め込み、当該埋め込まれた分解されたソースコード３８を出力する。
【００７１】
ステップＳ９０３において、ソースコード合成部３１は、機能依存関係３９に基づいて、分解されたソースコード３８を合成し、当該合成した合成ソースコード４１を出力する。
【００７２】
ステップＳ９０４において、性能評価部３５は、合成ソースコード４１の性能評価を行い、当該性能評価の結果である性能評価結果４２を出力する。
【００７３】
ステップＳ９０５において、開発者４４は、システムに対する変更要求仕様５４を分析して、プログラムの変更機能仕様５５および変更性能仕様５６を作成する。
【００７４】
ステップＳ９０６において、開発者４４は、変更機能仕様５５に基づいて機能の再設計を行う。再設計した機能は、ソースコード編集部２９を用いて機能依存関係３９を修正して入力することで得られる。機能依存関係管理部３０は、入力された機能に基づいて、変更後の機能依存関係３９を機能依存関係ＤＢ１０に出力する。
【００７５】
ステップＳ９０７において、開発者４４は、ソースコード編集部２９にて、機能依存関係３９に基づいて、分解されたソースコード３８（図中の矢印１から取得）を修正し、修正後の分解されたソースコード３８を出力する。
【００７６】
ステップＳ９０８において、開発者４４は、変更性能仕様５６と変更後の機能依存関係３９と性能評価結果４２（図中の矢印２から取得）に基づいて、性能要求入力部３２を用いて機能単位の性能の制約条件を入力し、性能要求４０を出力する。
【００７７】
ステップＳ９０９において、性能配分部３３は、機能依存関係３９に基づいて性能要求４０をプログラムブロック単位に配分し、性能要求４０を出力する。
【００７８】
ステップＳ９１０において、性能測定部３４は、分解されたソースコード３８に対して実行状況を記録する命令を埋め込み、当該命令が埋め込まれた分解されたソースコード３８を出力する。
【００７９】
ステップＳ９１１では、プログラム実行制御部３６は、性能要求４０に基づいて、分解されたソースコード３８に対してプログラムの実行を制御する命令を埋め込み、当該命令が埋め込まれた分解されたソースコード３８を出力する。
【００８０】
ステップＳ９１２において、ソースコード合成部３１は、機能依存関係３９に基づいて、分解されたソースコード３８を合成して実行可能なソースコードを作成し、合成ソースコード４１として出力する。
【００８１】
ステップＳ９１３において、開発者４４は、性能評価部３５を用いて合成ソースコード４１の試験を行い、性能評価結果４２および性能未達成箇所４３を出力する。試験の結果、性能が達成されていればプログラムの開発は終了する。一方、性能が未達成の場合は、開発者４４はステップＳ９０９に戻って性能配分を再度行う。そして、ステップＳ９０９において、性能配分部３３は機能依存関係３９に加えて性能評価結果４２にも基づいて、性能要求４０をプログラムブロック単位に配分し、性能要求４０を出力する。
【００８２】
以降、ステップＳ９１３までの処理を行い、ステップＳ９１３にて試験を行う。試験の結果、性能が達成されていればプログラムの開発を終了する。一方、再度、性能が未達成の場合は、開発者４４はステップＳ９０６に戻って機能設計を再度行う。ステップＳ９０６において、開発者４４は変更機能仕様５５に加えて性能未達成箇所４３にも基づいて機能の再設計を行う。再設計した機能は、ソースコード編集部２９を用いて機能依存関係３９を修正して入力することによって得られる。機能依存関係管理部３０は、入力された機能に基づいて、変更後の機能依存関係３９を出力する。以降、ステップＳ９１３までの作業を行い、ステップＳ９１３にて試験を行う。ステップＳ９１３の試験で性能が達成されるまで、上記作業を繰り返し行う。
【００８３】
以上のことから、本実施形態によるプログラム作成装置１は、性能要求入力部３２と性能配分部３３とを備えることによって、各プログラムブロックの性能制約の初期値を自動的に得ることができるため、性能の制約条件を設定する作業を削減することでき、プログラム完成前の単体試験（プログラムブロック単位での試験）段階で性能が要求条件を満たしているか否かを評価し要求仕様で与えられる目標性能値を各プログラムブロックに分配することができるという効果が得られる。
【００８４】
また、ソースコード編集部２９において、ハイパーリンクを使ってソースコードを入力しながら機能を定義する可能としたため、複数の機能に属するプログラムブロックの機能依存関係の把握が容易となり、プログラムブロック単位の性能制約の入力が容易になるという効果が得られる。
【００８５】
また、プログラム実行制御部３６を備えたことによって、プログラムが性能の制約条件を未達成の場合にはプログラムの実行を停止することが可能となるため、性能未達成の原因となる箇所の特定および修正が容易になるという効果が得られる。
【符号の説明】
【００８６】
１  プログラム作成装置、２  入力手段、３  表示手段、４  出力手段、５  ソースコード解析・編集手段、６  ソースコード合成手段、７  性能配分手段、８  性能測定手段、９  分解ソースコードＤＢ、１０  機能依存関係ＤＢ、１１  性能要求ＤＢ、１２  ＣＰＵ、１３  バス、１４  ＲＯＭ、１５  ＲＡＭ、１６  ＦＤＤ、１７  ＣＤＤ、１８  ＨＤＤ、１９  Ｋ／Ｂ、２０  マウス、２１  ＣＲＴ、２２  プリンタ、２３  モデム、２４  ＯＳ、２５  ウィンドウシステム、２６  プログラム群、２７  ファイル群、２８  ソースコード解析部、２９  ソースコード編集部、３０  機能依存関係管理部、３１  ソースコード合成部、３２  性能要求入力部、３３  性能配分部、３４  性能測定部、３５  性能評価部、３６  プログラム実行制御部、３７  ソースコード、３８  分解されたソースコード、３９  機能依存関係、４０  性能要求、４１  合成ソースコード、４２  性能評価結果、４３  性能未達成箇所、４４  開発者、４５  機能依存関係表示部、４６  ソースコード表示部、４７  依存元表示部、４８  性能評価結果表示部、４９  性能未達成箇所表示部、５０  性能要求表示部、５１  要求仕様、５２  機能仕様、５３  性能仕様、５４  変更要求仕様、５５  変更機能仕様、５６  変更性能仕様。
【図１】
2011175398.tif 000003
【図２】
2011175398.tif 000004
【図３】
2011175398.tif 000005
【図４】
2011175398.tif 000006
【図５】
2011175398.tif 000007
【図６】
2011175398.tif 000008
【図７】
2011175398.tif 000009
【図８】
2011175398.tif 000010
【図９】
2011175398.tif 000011