(57)【要約】      （修正有）【課題】複数人で開発する大規模なソフトウェア開発において、実際の組込みシステム上での組込みソフトウェア実行による性能測定を回避し、性能の予測見積りにより判定することで、性能向上と品質向上を可能にしたソフトウェア性能逐次予測方法及び予測システム方法を提供する。【解決手段】ソフトウェア開発時に、ソースコードの変更を登録する前に実施されるソフトウェアであって、入力されたソースコードの性能低減比率を算出し、該性能低減比率が所定の数値以上の場合、外部に判定結果を通知する。【選択図】図１
2012234448.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア性能予測システムにより、ソースコードの変更に伴うソフトウェアの性能を予測するソフトウェア性能逐次予測方法であって、
前記ソフトウェア性能予測システムは、前記ソフトウェアを登録するデータベースを備えており、かつ、複数の端末に接続可能に構成されており、
前記複数の端末の少なくとも１つから前記ソフトウェアの開発に伴う初期ソースコードもしくは変更ソースコードの入力を受け付け、ソースコード情報として、前記データベースに登録し、
前記変更ソースコードによる前記ソフトウェアの性能を登録済の前記ソースコード情報に含まれる旧ソースコードによる前記ソフトウェアの性能と比較して、新旧ソースコードの性能の低減比率を算出し、
該性能の低減比率が所定の値を超えるか否かを判定し、
前記性能低減比率が前記所定の値を超える場合、外部に前記判定結果を通知する
ことを特徴とするソフトウェア性能逐次予測方法。
【請求項２】
請求項１記載のソフトウェア性能逐次予測方法において、
前記ソフトウェアは、一連機能を含む組込みソフトウェアであり、
前記新旧ソースコードの性能の低減比率は、性能測定に代えて、前記ソースコードの変更による処理時間の変化を予測して見積もりを行うことにより算出される
ことを特徴とするソフトウェア性能逐次予測方法。
【請求項３】
請求項１記載のソフトウェア性能逐次予測方法において、
前記ソースコードは、初期ソースコードに前記変更ソースコードによる変更情報を加えて逐次最新のバージョンに更新されるものであり、
前記ソースコードは、分解可能な複数の機能を含んでおり、
前記機能毎の前記変更ソースコードの入力を、空間的にあるいは時間的に分散して存在する前記複数の端末の少なくとも１つから受け付け、
該入力を受け付けた前記端末に前記判定結果を通知する
ことを特徴とするソフトウェア性能逐次予測方法。
【請求項４】
請求項１記載のソフトウェア性能逐次予測方法において、
前記新旧ソースコードの性能の低減比率の結果の情報を、前記複数の端末に対応する前記フトウェアの開発者毎、あるいは開発拠点毎、前記フトウェアを構成するモジュール毎、の何れかの区分により出力する
ことを特徴とするソフトウェア性能逐次予測方法。
【請求項５】
請求項１記載のソフトウェア性能逐次予測方法において、
前記ソフトウェア性能予測システムは、データベース構築部、判定部、及び通知部を備えており、
前記端末から入力されたデータを前記データベースに保持し、
該入力されたデータを変換し前記データベースに登録し、
前記判定部で該入力されたデータによる性能を予測し、該予測値から前記ソフトウェアの性能が劣化するかを判定し、
前記通知部が、前記入力を受け付けた端末に前記性能の劣化を通知する
ことを特徴とするソフトウェア性能逐次予測方法。
【請求項６】
請求項５記載のソフトウェア性能逐次予測方法において、
前記データベース内に、前記ソースコード情報として、前記ソースコードと関数構造情報と関数単位アセンブラ命数を格納し、前記変更情報として、変更関数名と修正関数アセンブラ命令数と性能増減比率情報を格納する
ことを特徴とするソフトウェア性能逐次予測方法。
【請求項７】
請求項６記載のソフトウェア性能逐次予測方法において、
前記ソースコード情報は、過去に登録された初期ソースコードや前記変更ソースコードと、それらの関数構造を示前記す関数構造情報と、関数毎のコンパイル結果から導き出される前記各関数単位のアセンブラ命令数とを含む、第１の情報と、
前記変更ソースコードにて変更された関数名を示す前記変更関数名と、その変更関数に対し、コンパイルによって得られたアセンブラ命令数を示す前記修正関数アセンブラ命令数と、前記性能低減比率情報を含む、第２の情報とを有し、
前記第１の情報の前記関数構造情報は、前記関数毎の関数コール回数を含む
ことを特徴とするソフトウェア性能逐次予測方法。
【請求項８】
請求項６記載のソフトウェア性能逐次予測方法において、
前記判定部は、変更関数抽出部と、アセンブラ命令数抽出部と、関数コール算出部と、変更情報生成部とを備えており、
前記変更関数抽出部で前記変更ソースコードの変更箇所を特定し、
前記アセンブラ命令数抽出部で前記変更ソースコードのアセンブラ命令数を算出し、
前記関数コール算出部で関数コールを算出し、
前記変更情報生成部で、変更情報を生成する
ことを特徴とするソフトウェア性能逐次予測方法。
【請求項９】
請求項８記載のソフトウェア性能逐次予測方法において、
前記変更情報生成部内において、
前記判定部は、減算器と、変更関数影響度算出部と、乗算器と、加算器とを備えており、
前記減算器で、前記変更関数のアセンブラ命令数と関数単位アセンブラ命令数の差を求め、
前記変更関数影響度算出部で、前記関数単位アセンブラ命令数と前記変更関数名から変更関数影響度指標を求め、
前記乗算器で、前記減算器で求めた前記差分値と前記変更関数影響度指標と前記関数コール回数とから、性能増減比率情報を求め、
前記加算器で、前記性能増減比率情報から前記変更情報を求める
ことを特徴とするソフトウェア性能逐次予測方法。
【請求項１０】
請求項５記載のソフトウェア性能逐次予測方法において、
前記データベース構築部において、情報入出力制御部で情報の入出力を制御し、コンパイル部でソースコードからアセンブラ命令とコールグラフを出力し、関数構造情報生成部でコールグラフから関数構造情報を生成し、関数単位アセンブラ命令抽出部でアセンブラ命令から関数単位のアセンブラ命令数を抽出する
ことを特徴とするソフトウェア性能逐次予測方法。
【請求項１１】
請求項８記載のソフトウェア性能逐次予測方法において、
前記変更関数の過去の変更情報が前記データベースに存在しない場合、前記変更関数における変更情報の代用として、変更関数影響度指標と関数コール回数が一致する関数の変更情報を用いる
ことを特徴とするソフトウェア性能逐次予測方法。
【請求項１２】
ソフトウェア性能予測システムにより、ソースコードの変更に伴うソフトウェアの性能を予測するソフトウェア性能逐次予測システムであって、
前記ソフトウェアを登録するデータベースを備えており、かつ、複数の端末に接続可能に構成されており、
前記複数の端末の少なくとも１つから初期ソースコードもしくは変更ソースコードの入力を受け付け、ソースコード情報として、前記データベースに登録する機能と、
前記変更ソースコードによる前記ソフトウェアの性能を登録済の前記ソースコード情報に含まれる旧ソースコードによる前記ソフトウェアの性能と比較して、新旧ソースコードの性能の低減比率を算出する機能と、
該性能の低減比率が所定の値を超えるか否かを判定する機能と、
前記性能低減比率が前記所定の値を超える場合、外部に前記判定結果を通知する機能とを備える
ことを特徴とするソフトウェア性能逐次予測システム。
【請求項１３】
請求項１２記載のソフトウェア性能逐次予測システムにおいて、
前記ソフトウェアは、一連機能を含む組込みソフトウェアであり、
前記端末から入力されたデータを変換し前記データベースに登録するデータベース構築部と、
該入力されたデータによる性能を予測し、該予測値から前記ソフトウェアの性能が劣化するかを判定する判定部と、
前記入力を受け付けた端末に前記性能の劣化を外部に通知する通知部を備えており、
前記新旧ソースコードの性能の劣化の判定は、前記ソースコードの変更による処理時間の増大に基づいて算出される
ことを特徴とするソフトウェア性能逐次予測システム。
【請求項１４】
請求項１３記載のソフトウェア性能逐次予測システムにおいて、
前記判定部は、
前記変更ソースコードの変更箇所を特定する変更関数抽出部と、
前記変更ソースコードのアセンブラ命令数を算出するアセンブラ命令数抽出部と、
関数コールを算出する関数コール算出部と、
変更情報を生成する変更情報生成部とを備えている
ことを特徴とするソフトウェア性能逐次予測システム。
【請求項１５】
請求項１４記載のソフトウェア性能逐次予測システムにおいて、
前記変更情報生成部内において、
前記判定部は、減算器と、変更関数影響度算出部と、乗算器と、加算器とを備えており、
前記減算器で、前記変更関数のアセンブラ命令数と関数単位アセンブラ命令数の差を求め、
前記変更関数影響度算出部で、前記関数単位アセンブラ命令数と前記変更関数名から変更関数影響度指標を求め、
前記乗算器で、前記減算器で求めた前記差分値と前記変更関数影響度指標と前記関数コール回数とから、性能増減比率情報を求め、
前記加算器で、前記性能増減比率情報から前記変更情報を求める
ことを特徴とするソフトウェア性能逐次予測システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの性能逐次予測方法及びシステムに係り、特に、そのソフトウェアの開発時におけるソースコードの登録方法、並びに性能管理方法に関する。
【背景技術】
【０００２】
組込みシステムの高機能化と多機能化に伴い、組込みシステムの主たる構成要素である組込みプロセッサ上で動作する組込みソフトウェアの記述量は肥大化している。この高機能化と多機能化により、組込みソフトウェアの機能や品質の確保が重大な課題となっている。更に、高機能化や多機能化に加え、組込みシステムにはリアルタイム応答性などの性能に関する要求も含まれる。
【０００３】
現状の組込みソフトウェア開発の現場では、高機能化と多機能化に伴い、機能品質を確保するため、複雑な機能実装を優先して行う傾向にあり、リアルタイム性などの性能対策は機能実装後に実施されることがある。そのため、性能対策のための十分な時間の確保が出来ずに、性能未達という問題が発生することがある。
【０００４】
性能対策は、実際の組込みシステム上で組込みソフトウェアを動作させ、その性能プロファイル結果を元に性能ボトルネックとなっている箇所を特定し、組込みソフトウェアに対して性能対策を実装し、再び組込みシステム上にて対策した組込みソフトウェアを実行して性能測定するという、繰り返しのプロセスによって実現される。本方法には２つの課題が存在する。
【０００５】
１つ目は、性能測定のために、実際に組込みソフトウェアを実行する組込みシステムが必要であり、開発コストが高額になる。２つ目の課題は、組込みソフトウェアの性能測定を伴う実行を繰り返し行う必要があるため、その実行時間により、開発期間が長期化することである。
【０００６】
これらの課題に対し、組込みソフトウェアを実際の組込みシステム上で実行するのではなく、ソフトウェアの処理時間、あるいは処理に必要な記憶容量等の性能をソースコードの状態で評価する方法が提案されている。
【０００７】
特許文献１には、ソフトウェアコンポーネント単位での性能予測を行う「ソフトウェアコンポーネントの性能測定を基にしたシステム性能予測方式および方法」が開示されている。ソフトウェアコンポーネントとは、通信コンポーネント、適用コンポーネント、データベース・コンポーネントなどで構成され、コンポーネント毎にＣＰＵ使用時間などの性能情報を定義したデータベースを有する。本方式では、複数のコンポーネントが連続的に実行された場合の総処理時間を、データベースに格納された性能情報を元に予測するものである。特許文献１によれば、実際の組込みシステム上で修正した組込みソフトウェアを実行することなく、修正ソフトウェアの性能を予測することが可能となる、と記載されている。更に、修正したソフトウェアにて、再度、性能を測定し、修正ソフトウェアとその性能情報のペアをデータベースにて保持することにより、常に、最新のソフトウェアの性能を管理することが出来ると共に、新たに修正したソフトウェアに対する性能に関し、高い予測精度を維持することが可能となる、と記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００４−２２０４５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
先に述べたように、組込みシステムの高機能化と多機能化に伴い、組込みソフトウェアのコード規模は増大している。コード規模の増大に従い、１つの組込みシステムを実現するために必要な組込みソフトウェアの開発者数が増加し、組込みシステム内の1つの一連機能（換言するとモジュール）についても、複数の開発者で開発する開発スタイルが主流となっている。特に、開発規模が大きい場合、オフショア開発など、複数のソフトウェア開発者が空間的にも時間的にも分散して、１つの一連機能を開発することもある。
【００１０】
特許文献１で示した性能予測手法は、１つのソフトウェア修正に対し、性能予測を実施し、性能低下が発生しない場合、その修正したソフトウェアをデータベースに登録すると共に、再度、修正したソフトウェアを元に性能を測定し、その性能情報をデータベースに登録する方式である。本手法にて、複数人が1つの一連機能を修正する場合、個別のソフトウェア修正単位で性能測定が必要となり、結果的に、先に示した課題である、実際の組込みシステムによる、修正した組込みソフトウェアの実行を通した性能測定を繰り返し実行しなければならない。
【００１１】
このように、複数人で開発する大規模なソフトウェア開発において、実際の組込みシステム上での組込みソフトウェア実行による性能測定が必要であり、それに伴う、設計プロセスの後工程での手戻りの発生、ひいては開発に要する時間の増加や開発コストの増大、という事態が避けられない。
【００１２】
本発明が解決しようとする課題は、この実際の組込みシステム上での組込みソフトウェア実行による性能測定を回避し、性能の予測見積りにより判定することで、性能向上と品質向上を可能にしたソフトウェア性能逐次予測方法及び予測システム方法を提供することにある。
【課題を解決するための手段】
【００１３】
本願において開示される発明の代表的なものを示すと、次の通りである。本発明のソフトウェア性能逐次予測方法は、ソフトウェア性能予測システムにより、ソースコードの変更に伴うソフトウェアの性能を予測するソフトウェア性能逐次予測方法であって、前記ソフトウェア性能予測システムは、前記ソフトウェアを登録するデータベースを備えており、かつ、複数の端末に接続可能に構成されており、前記複数の端末の少なくとも１つから前記ソフトウェアの開発に伴う初期ソースコードもしくは変更ソースコードの入力を受け付け、ソースコード情報として、前記データベースに登録し、前記変更ソースコードによる前記ソフトウェアの性能を登録済の前記ソースコード情報に含まれる旧ソースコードによる前記ソフトウェアの性能と比較して、新旧ソースコードの性能の低減比率を算出し、該性能の低減比率が所定の値を超えるか否かを判定し、前記性能低減比率が前記所定の値を超える場合、外部に前記判定結果を通知することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、組込みソフトウェア実行による性能測定を回避し、生成された変更情報の採用の可否を性能の予測見積りにより判定する。これにより、複数人の共同作業になるソフトウェア開発においても、各ソフトウェア修正単位で、その性能の変化を管理し、複数の修正箇所のうち性能劣化箇所の抽出を容易に実現する。そのため、組込みソフトウェアの性能劣化を抑止すると共に、開発コストを削減できる。
【図面の簡単な説明】
【００１５】
【図１】本発明の第一の実施例としての、ソフトウェア性能予測システムの全体の構成を説明するための図である。
【図２】第一の実施例における、生成された変更情報のデータベースへの登録と、ソースコード情報を生成するデータベース構成部の詳細を示した図である。
【図３Ａ】第一の実施例における、データベースに格納する２種類の情報を説明するための図である。
【図３Ｂ】本発明における、ソフトウェア開発時、バージョン管理システムなどによりデータベースに登録された、初期ソースコード及び変更ソースコードの概念を示す図である。
【図４】第一の実施例における、判定部の構成を説明するための図である。
【図５】第一の実施例における、変更情報生成部の構成を説明するための図である。
【図６】第一の実施例における、ソフトウェア性能予測システムの全体的な動作フローを示したものである。
【図７】第一の実施例における、判定処理の動作フローを示したものである。
【図８】第一の実施例における、データベース登録処理の動作フローを示したものである。
【図９】本発明の第二の実施例になるソフトウェア性能予測システムの、全体の構成を説明するための図である。
【図１０】第二の実施例における、判定部の構成を説明するための図である。
【図１１】第二の実施例における、変更情報生成部の構成を示した図である。
【図１２】本発明の第三の実施例になるソフトウェア性能予測システムの、動作フローを示した図である。
【図１３】第三の実施例における、判定部の構成を説明するための図である。
【図１４】本発明の第四の実施例になるソフトウェア性能予測システムにおける、プロジェクト管理者に性能増減比率を表示する出力画面を示した図である。
【発明を実施するための形態】
【００１６】
ここで、上記の課題を解決するために、ソフトウェアの性能予測方法、システムに関して、本願において開示される発明の代表的な実施の形態について概要を説明する。  
本発明は、組込みシステムの構成要素の１つであるＣＰＵ上で動作するソフトウェアに関し、そのソフトウェア開発時、開発者が、初期のソースコードやそれを変更した以前のソースコード（旧ソースコード）を変更した新たなソフトウェア(以下、変更ソースコード)を、バージョン管理システムなどのデータベースに登録する方法に関するものである。具体的には、変更ソースコードをバージョン管理システムに対して登録要求した時点で、過去の変更履歴のデータ(以下、変更情報)が格納されたデータベースを参照し、今回の変更箇所が過去に変更されたかを検索し、履歴があった場合に、その変更情報に格納された情報と今回の変更を比較することで、性能測定を実施せずに、性能を予測して見積もりを行う。比較の際には、アセンブラ命令を用いる。本方式により、開発者はソースコード変更の際に、性能測定を実施せずに性能劣化を防ぐことが可能となり、システム設計のトータル工数の削減と、ソフトウェア品質の高品質化が可能となる。
【００１７】
本発明におけるソフトウェア性能予測システムは、変更ソースコードを入力とする。判定部は、ソースコードと、後述するデータベースに格納された様々な情報を利用して、変更ソースコードが、その変更により性能影響（処理時間の増減）をもたらすか否かを判定し、判定した結果である判定結果を出力し、その判定結果をソフトウェア開発者に通知するための表示装置である通信部に入力する。また、判定部の更なる機能は、変更ソースコードが、過去に登録されたソースコードと比較して、どのような変更がもたらされたか、また、どのような性能影響（処理時間の増減）をもたらすかを示す変更情報を生成する手段を有する。変更情報は、データベース構築部に入力され、データベース構築部は、変更情報をデータベースに格納するために、そのフォーマット変換などを行う手段を有する。
【００１８】
判定部は変更ソースコードと過去に登録されたソースコードを入力とし、２つの入力の差分から、変更ソースコードのどの関数に対して変更が生じたかを判断し、変更関数名を出力する。また、変更ソースコードをコンパイルし、対象となる変更関数のアセンブラ命令数を算出する。判定部は、変更関数名を元に、データベースに格納された関数単位アセンブラ命令数と変更情報のうち、性能増減比率情報から、対象の修正によって生じる性能の増減（処理時間の増減）を予測し、変更情報として出力する。得られた性能増減比率がある一定の数値を上回った場合、登録者に通知する。これにより、性能の著しい劣化を未然に防ぐことができる。
【００１９】
このように、本発明よれば、ソースコード上の個別の変更ごとの情報をストックしておき、静的解析の情報や、すでに取得済みの実行情報と組み合わせることで、新たに加えた変更が性能を劣化させるか、また、その効果の影響を予測することで、性能測定のコストを削減し、登録前に開発者に知らせることで著しい性能劣化を事前に防ぐことができる。
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【実施例１】
【００２０】
本発明の一実施例となるソフトウェアの性能予測方法について、まず、概要を説明する。本発明は、組込みシステムの構成要素の１つであるＣＰＵ上で動作するソフトウェアに関し、そのソフトウェア開発時、開発者が変更したソフトウェア(以下、変更ソースコード)をバージョン管理システムなどのデータベースに登録する方法に関するものである。変更ソースコードをバージョン管理システムに登録する際に、変更ソースコードにもたらされた変更による性能への影響を予測により見積ることで、著しく性能が劣化する恐れがある場合に、ソフトウェア開発者やバージョン管理システムの管理者に性能劣化の影響を通知し、変更ソースコード登録の事前に、性能劣化の防止を可能とする。具体的には、変更ソースコードをバージョン管理システムに対して登録要求した時点で、過去の変更履歴のデータ(以下、変更情報)が格納されたデータベースを参照し、今回の変更箇所が過去に変更されたかを検索し、履歴があった場合に、その変更情報に格納された情報と今回の変更を比較することで、性能測定を実施せずに、性能を予測して見積もりを行う。比較の際には、アセンブラ命令を用いる。アセンブラ命令とは、ＣＰＵに処理を行わせるための機械語を人間にわかりやすい形で記述したもので、Ｃ言語などの高級言語に比べ、処理の粒度が細かい低級言語である。このアセンブラ命令を用いることによって細かい変更による性能影響（処理時間の増大・スループット低下）を見積もることができる。本方式により、開発者はソースコード変更の際に、性能測定を実施せずに性能劣化を防ぐことが可能となり、システム設計のトータル工数の削減と、ソフトウェア品質の高品質化が可能となる。
【００２１】
次に、図１から図８を用いて、本発明の一実施例となるソフトウェアの性能予測方法について、詳細に説明する。
【００２２】
図１は、本発明におけるソフトウェア性能予測システム１０の構成を説明するための図である。ソフトウェア性能予測システム１０は、ソースコードの変更による著しい性能劣化を抑止するため、変更による性能影響（処理時間の増減）を予測するシステムである。このソフトウェア性能予測システム１０には、ネットワーク４０を介して、複数のソフトウェア開発者Ｐａ〜Ｐｎの端末２０（２０−１〜２０−ｎ）が接続される。これら複数のソフトウェア開発者は、１つの一連機能を含む組込みソフトウェアを開発するメンバーであり、空間的にも時間的にも分散して存在する。複数の端末２０−１〜２０−ｎは、空間的に分散する複数の開発拠点Ｃ１〜Ｃｎの何れかに属する。また、ソフトウェア性能予測システム１０には、プロジェクト管理者Ｍの端末３０も接続される。
【００２３】
ソフトウェア性能予測システム１０には、端末２０や端末３０から初期ソースコード２０２、変更ソースコード５００、その他ソフトウェア開発に必要な情報が入力され、後述するデータベース２００に登録・格納される。
【００２４】
ソフトウェア性能予測システム１０は、コンピュータ上でプログラムを実行することにより実現される機能として、データベース構成部１００、判定部３００及び通知部４００を備えている。端末２０、３０は、ソフトウェア性能予測システム１０にアクセスし、初期ソースコード２０２や変更ソースコード５００その他ソフトウェア開発に必要な情報を編集・入力する機能及び、ソフトウェア性能予測システム１０からソフトウェア開発に必要な情報を取得する機能を有している。
【００２５】
ソフトウェア性能予測システム１０の判定部３００は、初期ソースコード２０２及び変更ソースコード５００と、データベース２００に格納された様々な情報を利用して、変更ソースコード５００が、その変更により性能影響（処理時間の増減）をもたらすか否かを判定し、判定した結果である判定結果７００を出力し、入出力部９００を介してその判定結果をソフトウェア開発者の端末２０やプロジェクト管理者Ｍの端末３０に通知するための通信部４００に入力する。また、この判定結果は、入出力部９００にも表示される。
【００２６】
また、判定部３００の更なる機能は、変更ソースコード５００が、過去に登録された登録済みのソースコードと比較して、どのような変更がもたらされたか、また、どのような性能影響（処理時間の増減）をもたらすかを示す変更情報２５０を生成する手段を有する。変更情報２５０は、データベース構築部１００に入力され、データベース構築部１００は、変更情報２５０をデータベース２００に格納するために、そのフォーマット変換などを行う手段を有する。
【００２７】
図２は、データベース構成部１００の詳細を示した図である。データベース構成部１００は、初期ソースコード２０２、変更ソースコード５００、及び生成された変更情報２５０のデータベース２００への登録と、ソースコード情報２０１を生成する機能を有する。データベース構築部１００は、データの入出力を制御する情報入出力制御部１０１と、初期ソースコード２０２からコールグラフ１０６とアセンブラ命令１０７を生成するコンパイル部１０２と、コンパイル部１０２から出力されたコールグラフ１０６から参照関係（関数構造情報２０３）を生成する関数構造情報生成部１０３と、コンパイル部１０２から出力されたアセンブラ命令１０７を関数単位アセンブラ命令に切り分け関数単位アセンブラ命令数２０４を抽出する関数単位アセンブラ命令数抽出部１０４から構成される。
【００２８】
情報入出力制御部１０１では、変更情報２５０が入力されたとき、データベース２００へ登録する。初期ソースコード２０２や変更ソースコード５００が入力されたとき、コンパイル部に渡す。関数構造情報２０３と関数単位アセンブラ命令数２０４が入力されたとき、初期ソースコード２０２や変更ソースコード５００と併せてソースコード情報２０１として、データベース２００へ登録する。コンパイル部１０２では入力された初期ソースコード２０２や変更ソースコード５００をコンパイルし、コールグラフ１０６とアセンブラ命令１０７を生成する。関数構造情報生成部１０３では、入力されたコールグラフ１０６から、各関数が何回コールされているかの情報を関数構造情報２０３として出力する。関数単位アセンブラ命令数抽出部１０４では、入力されたアセンブラ命令１０７から、アセンブラ命令数を関数単位に切り分けし、関数単位アセンブラ命令数２０４として出力する。
【００２９】
図３Ａは、データベース２００に格納する３種類の情報を説明するための図である。第１の情報であるソースコード情報２０１は、過去に登録された初期ソースコード２０２や変更ソースコード５００と、そのソースコード２０２や変更ソースコード５００の関数構造を示す関数構造情報２０３と、関数毎のコンパイル結果から導き出される各関数単位のアセンブラ命令数２０４からなる。関数構造情報２０３は、関数毎の関数コール回数を含む。第２の情報である変更情報２５０は、変更ソースコード５００にて変更された関数名を示す変更関数名２５１と、その変更関数に対し、コンパイルによって得られたアセンブラ命令数を示す修正関数アセンブラ命令数２５２と、本修正により増減する性能を示す性能増減比率情報２５３からなる。データベース２００には、ソースコード情報２０１や変更情報２５０に保持されない、性能増減や判定結果等に関するその他の情報２６０も適宜、格納される。
【００３０】
図３Ｂは、本発明における、ソフトウェア開発時、バージョン管理システムなどによりデータベースに登録された、初期ソースコード及び変更ソースコードの概念を示す図である。ソースコードは、ソフトウェア開発の進展に伴い、逐次最新のバージョンに更新される。ソースコードは、その記述を複数の機能Ｆａ〜Ｆｘに分解することができる。そして、１つあるいは複数の機能を組み合わせて、１つのモジュールとなり、これらのモジュールＡ〜Ｎにより、要求される各種要求を満たす１つの組込みソフトウェアが完成する。各機能Ｆａ〜Ｆｘは、夫々、一人あるいは複数の開発者により、同じ空間あるいは分散した空間、同じ時間あるいは異なる時間おいて、開発され、更新される。すなわち、ソースコードの1つの一連機能が複数人により開発される。
【００３１】
図４は、ソフトウェア性能予測システム１０の判定部３００の構成を説明するための図である。判定部３００は、変更関数抽出部３０１と、アセンブラ命令数抽出部３０２と、関数コール数算出部３０３と、変更情報生成部３０４から構成される。変更関数抽出部３０１は、最新の変更ソースコード５００と過去に登録された初期ソースコード２０２や変更ソースコード５００を入力とし、新旧２つの入力ソースコードの差分から、変更ソースコード５００のどの関数に対して変更が生じたかを判断し、変更関数名２５１を出力する。アセンブラ命令数抽出部３０２は、変更関数名２５１を元に、変更ソースコード５００をコンパイルし、対象となる変更関数のアセンブラ命令数２５２を算出する。関数コール数算出部３０３は、変更関数名２５１を元に、関数構造情報２０３から、変更対象の関数の関数コール回数３０７を算出する。変更情報生成部３０４は、変更関数名２５１、変更関数アセンブラ命令数２５２、関数コール回数３０７、並びに、データベース２００に格納された関数単位アセンブラ命令数２０４と、変更情報２５０のうちの性能増減比率情報２５３を入力とし、対象の修正によって生じる性能の増減（処理時間の増減）を予測し、変更情報２５０として出力する。
【００３２】
図５は、変更情報生成部３０４による変更情報２５０の生成手段を説明するための図である。変更情報生成部３０４は、減算器３２０、変更関数影響度算出部３２１、乗算器３２２、加算器３２３、及び、性能劣化検出部３２７を備えている。アセンブラ命令数抽出部３０２により生成された変更関数アセンブラ命令数２５２とデータベース２００に格納された関数単位アセンブラ命令数２０４は、減算器３２０に入力され、変更によって生じたアセンブラ命令数の差分値３２４が生成される。また、関数単位アセンブラ命令数２０４と変更関数名２５１は、変更関数影響度算出部３２１に入力される。変更関数影響度算出部３２１は、変更関数名２５１で指示された変更関数が、全関数に対してどの程度占有しているかを示す変更関数影響度指標３２５を生成する。本変更関数影響度指標３２５の有効範囲は０から１であり、対象とする変更関数が、全関数に対して、殆ど影響しない場合、値は０に近づき、全関数に対して、非常に大きな影響をもたらす場合には、値は１に近づく。本実施形態の説明では、説明を容易とするために、本変更関数影響度指標３２５を全関数のアセンブラ命令数に対する変更対象関数のアセンブラ行数として説明する。しかしながら、本変更関数影響度指標３２５の生成方式には、一例であった、本生成方式に関し、限定を持たない。
【００３３】
生成されたアセンブラ命令数の差分値３２４、変更関数影響度指標３２５、並びに対象となる変更関数の関数コール回数３０７は、乗算器３２２にて掛け算を行い、性能増減比率情報２５３を出力する。本性能増減比率情報２５３は、対象となる修正により生じた性能の増減値の割合を示す。
【００３４】
本性能増減比率情報２５３は、ソースコードを登録する度に、データベース２００内の性能増減比率情報２５３として、履歴を蓄積する。本蓄積により、過去の各ソースコード修正によって発生した性能の増減を保持することが出来る。過去に登録された性能増減比率情報２５３と、新たに生成した性能増減比率情報２５３を加算器３２３で加算することで、現在の修正によって、オリジナルのソースコード２０２あるいは５００からの性能の増減を示す、変更情報（Ｘ）２５０を得ることが出来る。この変更情報（Ｘ）２５０の中の性能低減比率に関するデータは、性能劣化検出部３２７で所定値αと比較され、Ｘ＞αの場合、性能劣化として検出され、その旨を通知する判定結果７００の情報が生成され、該当する端末等を経て関係者に通知されると共にデータベース２００に記録される。性能劣化が検出されなかった場合には、この変更情報（Ｘ）２５０に基づいてデータベース２００のソースコードに関する情報が更新される。なお、この変更情報（Ｘ）２５０の中には、性能増加比率に関するデータも含まれるが、この情報は、関係者に通知されるのが望ましいものの、逐一通知することが必須ではない。性能増加比率に関するデータの利用に関しては、例えば、データベース２００に記録を残し、プロジェクト管理者Ｍに、同様な機能を有するソースコード他の部分にも反映させるか否か等の判断させるようにしても良い。
【００３５】
図６は、本発明におけるソフトウェア性能予測システム１０の動作フローを示したものである。本ソフトウェア性能予測システムは、ソフトウェア開発者が変更ソースコードをバージョン管理システムに登録する際に動作する。ソースコードの入力を受け付けると（ステップＳ１００）、変更ソースコードか否かを判定する(Ｓ１０１)。入力が変更ソースコード５００の場合はステップＳ１０２に移り、初期ソースコード２０２の場合は変更情報６００を生成するステップＳ１０８に移る。変更ソースコード５００の登録要求を発行すると（ステップＳ１０２）、変更ソースコード５００は後述の判定部３００に入力される(ステップＳ１０３)。判定部３００で、変更ソースコード５００と後述するデータベース２００に登録されている変更情報６００の比較を実施する(ステップＳ１０４)。ステップＳ１０４で判定部３００が生成した変更情報の性能低減比率Ｘがある一定値αを超えた場合（ステップＳ１０５）、登録者に性能劣化の可能性を通知する（ステップＳ１０６）。なお、ある変更ソースコード５００が性能低減するものであったとしても、その工程の状況等によっては、それを一連機能あるいは組込みソフトウェアの一部として採用せざるを得ない場合もある。この判断は、性能向上、品質向上、設計プロセスの後工程での手戻り等を総合的に勘案してなされるべきものであり、登録者やプロジェクト管理者Ｍに判断が委ねられる。もし、性能が低減する変更ソースコード５００を採用する場合には、変更情報を生成するステップＳ１０８に移る。もし、性能が低減する変更ソースコード５００を採用しない場合には、その変更ソースコード５００に代わるものとして、以前のバージョンのソースコードを利用する等、登録者やプロジェクト管理者Ｍの対応指示を受け付ける。また、性能増減比率情報２５３に含まれる性能増加比率に関するデータも、データベース２００に登録される。このようにして作成された変更情報や、対応指示の情報をデータベース２００に登録して(ステップＳ１１０)、一連の処理を終了する。
【００３６】
図７は、図６の判定処理Ｓ１０４の詳細の動作フローを示したものである。まず、入力された変更ソースコード５００から変更関数名２５１と関数コール回数３０７と変更関数アセンブラ命令数２５２を抽出する。次に、変更関数アセンブラ命令数２５２とデータベース２００の関数単位アセンブラ命令数２０４との差分値３２４を求める（ステップＳ１０３１）。関数単位アセンブラ命令数２０４と変更関数名２５１から変更関数影響度指標３２５を求める（ステップＳ１０３２）。ステップＳ１０３１で求めた差分値３２４とステップＳ１０３２で求めた変更関数影響度指標３２５と関数コール回数３０７から、性能増減比率情報２５３を求める（Ｓ１０３３）。求めた性能増減比率情報２５３と、データベースの性能増減比率情報２５３を加算し変更関数名２５１、修正関数アセンブラ命令数２５２と併せて変更情報２５０を生成する（Ｓ１０３４）。例えば、入力の変更ソースコードが関数名funcAについて変更されており、アセンブラ命令数がデータベースのfuncAの変更情報の関数単位アセンブラ命令数から５命令増える変更であったときの性能増減比率は以下のように求める。増加分５命令と全関数における対象関数の比重を表す変更関数影響度指標(０から１の値)と関数コール回数(ｎ回)を乗算する。変更関数影響度指標は、ソースコードのアセンブラ総行数における変更関数のアセンブラ総行数の割合である。求めた性能増減比率にデータベースに登録されている関数名funcAの性能増減比率を加算し、変更による最終的な性能増減比率を求める。
【００３７】
図８は、図６のデータベース登録処理Ｓ１１０の詳細の動作フローを示したものである。はじめに入力がソースコード２０２か変更情報２５０か判別する（Ｓ１１００）。入力が初期ソースコード２０２、更新ソースコード５００の場合はアセンブラ命令とコールグラフを抽出する（ステップＳ１１０１）。抽出したアセンブラ命令とコールグラフから関数構造情報２０３と関数単位アセンブラ命令数２０４を生成する（Ｓ１００２）。ソースコード２０２、５００と生成した関数構造情報２０３と関数単位アセンブラ命令数２０４をソースコード情報２０１としてデータベース２００に登録する。一方、入力が変更情報２５０等の場合（Ｓ１１００）、別途、必要な情報がデータベース２００に登録される。
【００３８】
本実施例によれば、更新ソースコードを受け付けた際に新旧バージョンのソースコード間の性能を予測に基づいて判定し、性能低下の問題がある場合には、更新ソースコードを記述する際に事前に作成者等に通知するので、性能向上と品質向上を可能にし、しかも、設計プロセスの後工程での手戻りを少なくした、組込ソフトウェア開発に利用できるソフトウェア性能逐次予測技術を提供することができる。
【実施例２】
【００３９】
次に、本発明の第２の実施の形態としての性能逐次予測方法、システムを説明する。実施例１の判定部への入力に加えて動的関数コールを用いて性能を予測するものである。実施例１では性能増減比率を計算する際、関数コール数を用いているが、本実施例では、動的関数コール数を用いることにより、実行に即した性能予測が可能になる。
【００４０】
図９は、本実施例のソフトウェア性能予測システムの構成を説明するための図である。本ソフトウェア性能予測システム１０は、実施例１で述べたとおり、ソースコードの変更による著しい性能劣化を抑止するため、変更による性能影響（処理時間の増減）を予測するシステムである。ソフトウェア性能予測システム１０は、初期ソースコード２０２、変更ソースコード５００及び実行トレース８００を入力とする。判定部３００’は、初期ソースコード２０２、変更ソースコード５００と実行トレース８００と、後述するデータベース２００に格納された様々な情報を利用して、変更ソースコード５００が、その変更により性能影響（処理時間の増減）をもたらすか否かを判定し、判定した結果である判定結果７００を出力し、その判定結果をソフトウェア開発者に通知するための通信部４００に入力する。その他の特に言及しない部分には実施例１と同一符号を付して、それらの詳細は省略する。
【００４１】
図１０は、本実施例のソフトウェア性能予測システムの判定部３００’の構成を説明するための図である。関数コール算出部３０３’では、変更関数名と実行トレースから対象関数が動的に何回呼ばれているかをカウントし動的関数コール数３０７’を出力する。変更情報生成部３０４は、変更関数アセンブラ増減数２５２と関数単位アセンブラ命令数２０４と変更関数名２５１と動的関数コール回数３０７’と性能増減比率情報２５３を入力として受け取り、変更情報２５０を出力する。その他の特に言及しない部分には同一符号を付して、それらの詳細は省略する。
【００４２】
図１１は、乗算器３２２’において動的コール回数３０７’を用いて性能増減比率を求めることを表した図である。その他の特に言及しない部分には実施例１と同一符号を付して、それらの詳細は省略する。
【００４３】
本実施例によれば、更新ソースコードを受け付けた際に新旧バージョンのソースコード間の性能を予測に基づいて判定し、性能低下の問題がある場合には、更新ソースコードを記述する際に事前に作成者等に通知するので、性能向上と品質向上を可能にし、しかも、設計プロセスの後工程での手戻りを少なくした、組込ソフトウェア開発に利用できるソフトウェア性能逐次予測技術を提供することができる。
【実施例３】
【００４４】
次に、本発明の第３の実施の形態としての性能逐次予測方法、システムを説明する。  
図１２は、変更関数の過去の変更情報がデータベースに存在しない場合の動作フローを示している。データがなかった場合、変更関数における変更情報の代用として、変更関数影響度指標と関数コール回数が一致する関数の変更情報を用いる。入力された変更ソースコードの変更関数の過去の変更情報がデータベースに存在するかを調べる(ステップＳ１０３５)。変更関数の過去の変更情報がデータベースにない場合、変更関数影響度指標と関数コール回数が一致する関数を調べる（Ｓ１０３６）。一致する関数がある場合、その関数の変更情報を代用する（Ｓ１０３７）。これは、一般に、表記が類似している場合、同様な機能を表現している蓋然性が高いという実体を前提にしている。これにより入力された変更ソースコードにおける変更関数の変更情報がデータベースに存在しない場合でも性能予測が可能となる。その他のステップにおいて、特に言及しない部分には同一符号を付して、それらの詳細は省略する。
【００４５】
図１３は、実施例３におけるソフトウェア性能予測システム１０の判定部３００の構成を説明するための図である。関数コール数算出部３０３と変更情報生成部３０４は、変更関数影響度指標と関数コール回数の一致する関数の変更情報を利用し、データベース２００に格納された、関数単位アセンブラ命令数２０４’と、変更情報２５０’のうちの性能増減比率情報２５３’を入力とし、対象の修正によって生じる性能の増減（処理時間の増減）を予測し、変更情報２５０として出力する変更情報生成部３０４から構成する。その他において、特に言及しない部分には同一符号を付して、それらの詳細は省略する。
【００４６】
本実施例によれば、更新ソースコードを受け付けた際に、変更関数の過去の変更情報がデータベースに存在しない場合でもそれに代わる情報を用いて、更新ソースコードの性能を判定し、性能低下の問題がある場合には、更新ソースコードを記述する際に事前に作成者等に通知するので、性能向上と品質向上を可能にし、しかも、設計プロセスの後工程での手戻りを少なくした、組込ソフトウェア開発に利用できるソフトウェア性能逐次予測技術を提供することができる。
【実施例４】
【００４７】
次に、本発明の第４の実施の形態としての性能逐次予測方法、システムを説明する。図１４は、実施例１の判定部において、プロジェクト管理者向け情報の出力方法を示した図である。プロジェクトの開発者が変更ソースコードをリポジトリに登録するとき、本ソフトウェア逐次性能予測システムは動作する。本実施例は、登録要求があったときに、管理者向けの情報として開発者毎、モジュール毎、開発拠点ごとに性能増減比率の状況一覧を生成する。また、プロジェクト計画を入力しておき、性能増減比率が決められた数値以上であった場合、プロジェクト管理者に知らせる。これにより、変更による著しい性能劣化を未然に防ぐことが可能となる。
【００４８】
本実施例によれば、複数人で開発する大規模なソフトウェア開発において、新旧バージョンのソースコード間の性能を予測に基づいて判定し、プロジェクト管理者に、開発者毎、モジュール毎、あるいは開発拠点毎の性能低下の有無などの情報を各端末に提供するので、性能向上と品質向上を可能にし、しかも、設計プロセスの後工程での手戻りを少なくした、ソフトウェア性能逐次予測技術を提供することができる。
【符号の説明】
【００４９】
１０      ソフトウェア性能予測システム
２０（２０−１〜２０−ｎ）      ソフトウェア開発者端末
３０      プロジェクト管理者の端末
４０      ネットワーク
１００    データベース構築部
１０１    情報入出力制御部
１０２    コンパイル部
１０３    関数構造情報生成部
１０４    関数単位アセンブラ命令抽出部
１０６    コールグラフ
１０７    アセンブラ命令
２００    データベース
２０１    ソースコード情報
２０２    初期ソースコード
２０３    関数構造情報
２０４    関数単位アセンブラ命令数
２５０    変更情報
２５１    変更関数名
２５２    修正関数アセンブラ命令数
２５３    性能増減比率情報
３００    判定部
３００’  判定部
３０１    変更関数抽出部
３０２    アセンブラ命令数抽出部
３０３    関数コール数算出部
３０４    変更情報生成部
３０７    関数コール回数
３２０    減算器
３２１    変更関数影響度算出部
３２２    乗算器
３２３    加算器
３２４    差分値
３２５    変更関数影響度指標
４００    通知部
５００    変更ソースコード
７００    判定結果。
【図１】
2012234448.tif 000003
【図２】
2012234448.tif 000004
【図３Ａ】
2012234448.tif 000005
【図３Ｂ】
2012234448.tif 000006
【図４】
2012234448.tif 000007
【図５】
2012234448.tif 000008
【図６】
2012234448.tif 000009
【図７】
2012234448.tif 000010
【図８】
2012234448.tif 000011
【図９】
2012234448.tif 000012
【図１０】
2012234448.tif 000013
【図１１】
2012234448.tif 000014
【図１２】
2012234448.tif 000015
【図１３】
2012234448.tif 000016
【図１４】
2012234448.tif 000017