(57)【要約】【課題】  ソフトウェア開発において、コード作成者は、機能実装を優先しコーディングした後、性能目標達成に向けて性能最適化を実施するため、設計プロセスの後工程での手戻りが多くなる傾向がある。【解決手段】  ソフトウェア性能問題指摘方法において、ソフトウェア開発時に、裏で走っているバックグラウンドソフトウェアであって、入力されたソースコードの実行時間等を算出し、その算出実行時間が所定の時間（目標時間）以上の場合、警告する。【選択図】図１
2012145987.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア開発時に、裏で走っているバックグラウンドソフトウェアであって、入力されたソースコードの実行時間を算出し、該実行時間が所定の時間以上の場合、警告することを特徴とするソフトウェア性能問題指摘方法。
【請求項２】
請求項１記載のソフトウェア性能問題指摘方法において、
各種制約条件と開発中のソースコードを比較し、比較結果を入出力装置に表示することを特徴とするソフトウェア性能問題指摘方法。
【請求項３】
請求項１記載のソフトウェア性能問題指摘方法において、
各種制約条件を比較するための行数比較部、命令数比較部、実行時間比較部を持ち、ソースコードから各種制約条件と比較する為の情報を抽出する行数抽出部、命令数抽出部、実行時間抽出部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項４】
請求項１記載のソフトウェア性能問題指摘方法において、
ソースコードから各種制約条件と比較する為の情報を抽出する行数抽出部内に、複数のソースコードの行数を計測する行数計測部をソース毎に持ち、計測結果を纏める計測結果集計部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項５】
請求項１記載のソフトウェア性能問題指摘方法において、
ソースコードから各種制約条件と比較する為の情報を抽出する命令数抽出部内に、複数のソースコードの命令数を計測する命令数計測部をソース毎に持ち、計測結果を纏める計測結果集計部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項６】
請求項１記載のソフトウェア性能問題指摘方法において、
複数のソースコードの命令数を計測する命令数計測部内に、ソースコードをコンパイルするコンパイラ部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項７】
請求項１記載のソフトウェア性能問題指摘方法において、
複数のソースコードの命令数を計測する命令数計測部内に、既存コンパイル結果からソースコードの命令数を推定する照合部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項８】
請求項１記載のソフトウェア性能問題指摘方法において、
ソースコードから各種制約条件と比較する為の情報を抽出する実行時間抽出部内に、複数のソースコードの実行時間を計測する実行時間計測部をソース毎に持ち、計測結果を纏める計測結果集計部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項９】
請求項１記載のソフトウェア性能問題指摘方法において、
複数のソースコードの実行時間を計測する実行時間計測部内に、関数の実行時間情報を持つ関数モデルを持ち、関数モデルからソースコードの実行時間を推定する照合部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項１０】
請求項１記載のソフトウェア性能問題指摘方法において、
複数のソースコードの実行時間を計測する実行時間計測部内に、既存の実行時間結果データベースを持ち、該実行時間結果データベースからソースコードの実行時間を推定する照合部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項１１】
ソフトウェア開発時に、裏で走っているバックグラウンドソフトウェアであって、入力されたソースコードと他のソースコードとを関数評価部で比較し、前記他のソースコードを入力されたソースコードで置換えること、あるいは、前記入力されたソースコードを前記他のソースコードで置換えることが可能であることを、提示することを特徴とするソフトウェア性能問題指摘方法。
【請求項１２】
請求項１１記載のソフトウェア性能問題指摘方法において、
入力されたソースコードと他のソースコードとを比較するために、前記関数評価部に、ソースコードの機能抽出部と実行時間抽出部、機能照合部、性能照合部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項１３】
請求項１１記載のソフトウェア性能問題指摘方法において、
ソースコードの機能抽出部内に、複数のソースコードの関数情報を抽出する関数抽出部をソース毎に持ち、抽出結果を纏める結果集計部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項１４】
請求項１１記載のソフトウェア性能問題指摘方法において、
ソースコードの機能照合部内に、ソースコードの機能抽出部からの機能情報を基に機能一覧を作成し、入力されたソースコードの機能一覧と、他のソースコードの機能一覧を比較する比較部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項１５】
請求項１４記載のソフトウェア性能問題指摘方法において、
前記比較部にソースコードの性能照合部からの性能情報も入力することを特徴とするソフトウェア性能問題指摘方法。
【請求項１６】
請求項１１記載のソフトウェア性能問題指摘方法において、
ソースコードの機能照合部内に、入力されたソースコードをコンパイルするコンパイラ部と、他のソースコードをコンパイルするコンパイラ部を持ち、それぞれのコンパイル結果を比較する比較部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項１７】
請求項１１記載のソフトウェア性能問題指摘方法において、
ソースコードの性能照合部内に、ソースコードの実行時間抽出部からの性能情報を基に性能一覧を作成し、入力されたソースコードの性能一覧と、他のソースコードの性能一覧を比較する比較部を持つことを特徴とするソフトウェア性能問題指摘方法。
【請求項１８】
請求項１７記載のソフトウェア性能問題指摘方法において、
前記比較部に機能照合部からの機能情報も入力することを特徴とするソフトウェア性能問題指摘方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア開発における性能問題を、コードを記述する際に作成者に通知することで、性能向上と品質向上を可能にする技術に関する。
【背景技術】
【０００２】
今日の組込プロセッサを始めとする組込システム機器の高機能化、多機能化、複雑化に伴い、組込ソフトウェア開発は、急激に肥大化し複雑化している。組込みソフトウェアの肥大化・複雑化が進む状況の中、解決すべき課題もより複雑化しており、組込ソフトウェアの高性能化、高品質化、開発の短期間化は、組込みソフトウェア開発者の共通の課題となっている。特に高性能化に関して、現状のソフトウェア開発の現場では、品質を確保するために、複雑な機能実装を優先して行うため、性能対策は機能実装後に実施される傾向がある。そのため、性能対策のための十分な時間の確保が出来ずに、性能未達問題が発生してしまう。
【０００３】
従来、ソフトウェア開発支援を目的に、作成したソフトウェアの計算時間予測を、テストデータを用いて、ソフトウェアを実際に実行して調べる方法が提案されている。ところが、この方法では、実際にソフトウェアを動作させる必要があるため、少なくとも動作する状態までソフトウェアを作りこむ必要がある。ソフトウェア完成後に、実際に動作させ、計算時間を調べ、性能予測をする方法では、ソフトウェアの肥大化・複雑化が急激に進んでいる今、工数ばかりが膨らむ。一方、実際にソフトウェアを実行するのではなく、ソフトウェアの計算時間、あるいは計算に必要な記憶容量等の性能をソースコードの状態で評価する方法も提案されている。例えば、特許文献１のプログラム自動評価方法では、ソースコードを解析してソフトウェアの計算時間を予測することで、ソフトウェア開発工数削減を実現しようとしている。
【０００４】
特許文献１のソフトウェア自動評価方法は、ソフトウェアのソースコードの構造解析を実施し、ソースコード中の繰り返し構造を抽出し、データ量に対する計算時間あるいはその計算に必要な記憶容量を予測している。ところが、一通りソースコードを作成後に構造解析し、性能を予測する方法では、機能実装を優先し、性能対策は機能実装後に実施する、従来のやり方となる可能性が高く、最終的に性能未達となりかねず、ソフトウェア開発工数短縮への十分な対策とは言えず、更なる改善が必要であると言える。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０５−１５０９７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
前述のように、ソフトウェア開発において、開発者は機能実装を優先しコーディングした後、性能目標達成に向けて性能最適化を実施するため、設計プロセスの後工程での手戻りが多くなる傾向がある。
【０００７】
本発明が解決しようとする第１の課題は、ソフトウェア開発のやり方は既存と変更せず、開発者は性能を意識せずに機能実装しつつも、性能問題となり得るコードを記述した場合は、開発者に何が原因で性能問題を引き起こしたのか、コード量なのか、記述の仕方なのか等、性能問題が発生する可能性を警告することである。
【０００８】
本発明が解決しようとする第２の課題は、開発者が作成した新規のコードと、開発中の他のコードとを比較し、より高い性能が実現可能なコード、或は、よりメンテナンス性に優れるコードがある場合には、開発者に作成した新規のコードよりも、他のコードの方が性能・メンテナンス性に優れることを通知し、コードを置換えるか否かの判断を促し、自動で置換えるか、手動で置換えるか、置換えないかを判断させることである。
【０００９】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１１】
第１の課題を解決するために、本発明では、ソフトウェア開発者が、性能劣化させずにコード作成できるように、コード作成中に裏で走るソフトウェア、バックグラウンドソフトウェアを構成する。バックグラウンドソフトウェアは、開発者が作成中のソースコードと、ソフトウェア開発における制約条件（行数、命令数、時間情報等）を比較し、性能劣化の有無を判断する機能を有し、結果を開発者に伝達する機能を有する。性能劣化有無の判断機能を有する比較部は、作成中のソースコードから各種情報を抽出する、行数抽出部、命令数抽出部、実行時間抽出部を備える。行数抽出部は、ソースコードの行数を計測する機能を有する。命令数抽出部は、ソースコードをコンパイルし実際の命令数を計測する機能と、既存のコンパイル結果を用いて作成中のソースコードの命令数を推定する機能を有する。実行時間抽出部は、時間情報を持つ関数のモデルから作成中のソースコードを実行した時の実行時間を推定する機能と、既存ソースの実行時間結果を用いて作成中のソースコードの実行時間を推定する機能を有する。
【００１２】
上記手段によれば、例えば、コード作成時、冗長なコード記述をした場合において、制約条件との比較で、行数超過、命令数超過、実行時間超過等の情報を開発者がコード作成中に知ることができ、コード作成中に性能劣化させることを無くせる。また、コード記述時に性能劣化情報をディスプレイ装置に表示することが可能であるので、開発者が、随時、性能劣化を発生させずにコード修正することが可能となり、手戻りを減らすことができ、結果、開発工数を削減できる。そして、ソフトウェア開発の早期の段階で、性能問題の解決ができるため、実機を用いた検証工数も削減でき、製品開発期間の短縮が可能となる。
【００１３】
第２の課題を解決するために、バックグラウンドソフトウェアは、開発者が作成中のソースコードと、その他のソースコードを比較し、開発者が作成した新規のコードが他のソースコード内のコードを置換え可能か、若しくは、開発者が作成した新規のコードを他のソースコード内のコードで置換え可能かを判断する機能を有し、結果を開発者に伝達する機能を有する。置換え可能か否かを判断する機能を有する関数評価部は、2つの機能抽出部と機能照合部、2つの実行時間抽出部と性能照合部を備える。機能抽出部は、ソースコードから関数情報を抽出する機能を有する。機能照合部は、機能抽出部が抽出した関数情報の一覧を作成し、その一覧を比較することで、同じ機能か否かを判定する機能、または、機能照合部内のコンパイラ部で、ソースコードをコンパイルした後の命令列を比較することで、同じ機能か否かを判定する機能を有する。更に、性能照合部からの情報を用いて、同一機能のコードの性能も比較して判定することも可能となる。性能照合部は、実行時間抽出部が抽出した性能情報の一覧を作成し、その一覧を比較することで、新規に作成したコードの性能が他のコードに比べて向上したか否かを判定する機能を有する。更に機能照合部からの情報を用いて、同一機能の他のコードでより高性能を実現可能だと判定することも可能となる。
【００１４】
上記手段によれば、例えば、コード作成時、新たな関数等、コード記述をした場合において、同じ機能を持つ重複コードの作成を防ぐことが可能となる。また、開発者が作成した新規コードにより既存コードの一括置き換えが可能となる場合、修正漏れを防ぎ、ソースコードの品質向上が可能となる。更に、開発者が新規に作成したコードに比べ、他のコードを利用した性能の方がより高い場合、既存コードに置き換えが可能となる。また更に、新規に作成したコードが、同じ機能を有する既存コードに比べメンテナンス性に優れる場合、既存コードを置換えることが可能になる。逆に、新規に作成したコードより、同じ機能を有する既存コードの方がメンテナンス性に優れる場合には、既存コードに置換えることも可能になる。
【００１５】
第１の発明の特徴は、（１）ソフトウェア開発時に、裏で走っているバックグラウンドソフトウェアであって、入力されたソースコードの実行時間を算出し、該実行時間が所定の時間（目標時間）以上の場合、警告するソフトウェア性能問題指摘方法にある。
【００１６】
（１）において、（２）各種制約条件（ソースコードの行数、命令数、時間情報等）と開発中のソースコードを比較し、比較結果を入出力装置に表示することが好ましい。
【００１７】
（１）において、（３）各種制約条件（ソースコードの行数、命令数、時間情報等）を比較するための行数比較部、命令数比較部、実行時間比較部を持ち、ソースコードから各種制約条件と比較する為の情報を抽出する行数抽出部、命令数抽出部、実行時間抽出部を持つことが好ましい。
【００１８】
（１）において、（４）ソースコードから各種制約条件と比較する為の情報を抽出する行数抽出部内に、複数のソースコードの行数を計測する行数計測部をソース毎に持ち、計測結果を纏める計測結果集計部を持つことが好ましい。
【００１９】
（１）において、（５）ソースコードから各種制約条件と比較する為の情報を抽出する命令数抽出部内に、複数のソースコードの命令数を計測する命令数計測部をソース毎に持ち、計測結果を纏める計測結果集計部を持つことが好ましい。
【００２０】
（１）において、（６）複数のソースコードの命令数を計測する命令数計測部内に、ソースコードをコンパイルするコンパイラ部を持つことが好ましい。
【００２１】
（１）において、（７）複数のソースコードの命令数を計測する命令数計測部内に、既存コンパイル結果からソースコードの命令数を推定する照合部を持つことが好ましい。
【００２２】
（１）において、（８）ソースコードから各種制約条件と比較する為の情報を抽出する実行時間抽出部内に、複数のソースコードの実行時間を計測する実行時間計測部をソース毎に持ち、計測結果を纏める計測結果集計部を持つことが好ましい。
【００２３】
（１）において、（９）複数のソースコードの実行時間を計測する実行時間計測部内に、関数の実行時間情報を持つ関数モデルを持ち、関数モデルからソースコードの実行時間を推定する照合部を持つことが好ましい。
【００２４】
（１）において、（１０）複数のソースコードの実行時間を計測する実行時間計測部内に、既存の実行時間結果データベースを持ち、該実行時間結果データベースからソースコードの実行時間を推定する照合部を持つことが好ましい。
【００２５】
第２の発明の特徴は、（１１）ソフトウェア開発時に、裏で走っているバックグラウンドソフトウェアであって、入力されたソースコードと他のソースコードとを関数評価部で比較し、前記他のソースコードを入力されたソースコードで置換えること、あるいは、前記入力されたソースコードを前記他のソースコードで置換えることが可能であることを、提示するソフトウェア性能問題指摘方法にある。
【００２６】
（１１）において、（１２）入力されたソースコードと他のソースコードとを比較するために、前記関数評価部に、ソースコードの機能抽出部と実行時間抽出部、機能照合部、性能照合部を持つことが好ましい。
【００２７】
（１１）において、（１３）ソースコードの機能抽出部内に、複数のソースコードの関数情報を抽出する関数抽出部をソース毎に持ち、抽出結果を纏める結果集計部を持つことが好ましい。
【００２８】
（１１）において、（１４）ソースコードの機能照合部内に、ソースコードの機能抽出部からの機能情報を基に機能一覧を作成し、入力されたソースコードの機能一覧と、他のソースコードの機能一覧を比較する比較部を持つことが好ましい。
【００２９】
（１４）において、（１５）前記比較部にソースコードの性能照合部からの性能情報も入力することが好ましい。
【００３０】
（１１）において、（１６）ソースコードの機能照合部内に、入力されたソースコードをコンパイルするコンパイラ部と、他のソースコードをコンパイルするコンパイラ部を持ち、それぞれのコンパイル結果を比較する比較部を持つことが好ましい。
【００３１】
（１１）において、（１７）ソースコードの性能照合部内に、ソースコードの実行時間抽出部からの性能情報を基に性能一覧を作成し、入力されたソースコードの性能一覧と、他のソースコードの性能一覧を比較する比較部を持つことが好ましい。
【００３２】
（１７）において、（１８）前記比較部に機能照合部からの機能情報も入力することが好ましい。
【００３３】
（１）及び（１１）において、（１９）バックグラウンドソフトウェアがサーバーに搭載され、ネットワークを介して各端末がソフトウェア開発時にバックグラウンドソフトウェアを利用することが好ましい。
【００３４】
（１）及び（１１）において、（２０）バックグラウンドソフトウェアがデータセンタ内のサーバーに搭載され、ネットワークを介して各端末がソフトウェア開発時にバックグラウンドソフトウェアを利用することが好ましい。
【００３５】
（１）及び（１１）において、（２１）バックグラウンドソフトウェアがクラウド上のデータセンタ内のサーバー等に搭載され、ネットワークを介して各端末がソフトウェア開発時にバックグラウンドソフトウェアを利用することが好ましい。
【発明の効果】
【００３６】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記の通りである。
【００３７】
前記第１の課題を解決するための手段により、ソフトウェア開発者は、従来のコーディングのやり方を変えることなく、性能劣化問題を発生させずに、且つ開発期間の短縮が可能となり、更に、ソフトウェアの高品質化も可能となる。
【００３８】
前記第２の課題を解決するための手段により、同じ機能を持ちながら複数の冗長コードが作成されるのを防ぎ、どの開発者がコード作成した場合においても、最良の性能を出せるコード、または、最もメンテナンス性に優れるコードの作成が可能となる。
【図面の簡単な説明】
【００３９】
【図１】本発明の第1の基本概念を示す図である。
【図２】本発明の第1の基本概念の動作フローを示す図である。
【図３】本発明の比較部の構成図である。
【図４】本発明の比較部内の行数抽出部の構成図である。
【図５】本発明の比較部内の命令数抽出部の構成図である。
【図６】本発明の命令数抽出部内の命令数計測部の構成図である。
【図７】本発明の比較部内の実行時間抽出部の構成図である。
【図８】本発明の実行時間抽出部内の実行時間計測部の構成図である。
【図９】本発明の第2の基本概念を示す図である。
【図１０】本発明の第2の基本概念の動作フローを示す図である。
【図１１】本発明の関数評価部の構成図である。
【図１２】本発明の関数評価部内の機能抽出部の構成図である。
【図１３】本発明の関数評価部内の機能照合部の構成図である。
【図１４】本発明の関数評価部内の性能照合部の構成図である。
【図１５】本発明の第3の実施例の開発環境を示す図である。
【図１６】本発明の第4の実施例の開発環境を示す図である。
【図１７】本発明の第5の実施例の開発環境を示す図である。
【発明を実施するための形態】
【００４０】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。
【実施例１】
【００４１】
本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号は、それが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００４２】
以下、図１から図８を用いて、本発明の一実施例となるソフトウェアの性能問題指摘方法について説明する。
【００４３】
本提案方式は、ソフトウェア開発時、バックグラウンドで開発者が作成するコードを監視することで、制約条件に違反する記述を開発者がした場合に、入出力装置（例えばディスプレイ装置）に違反内容を通知し、性能劣化問題を発生させないソフトウェア開発を可能とするものである。これにより、ソフトウェア開発者は、従来のやり方でコーディングしつつ、ソフトウェアの性能の評価も可能となり、目標性能未達問題を発生することなく、ソースコード作成が可能となることで、システム設計のトータル工数の削減と、ソフトウェア品質の高品質化が可能となる。
【００４４】
図１は、性能問題指摘ソフトウェアと入出力装置に映し出されている編集中のソースコードの関係を示したものである。本方式では、先述のとおり、開発者がコード作成中に性能劣化問題を発生させた場合に、その問題を指摘するために、バックグラウンドで性能問題指摘ソフトウェアが動作し、常に編集中のソースコードを監視している。性能問題指摘ソフトウェアは、大きく２つ、制約条件である各種情報と、制約条件と開発者が編集しているソースコードの比較を行う比較部を持つ。比較部には、制約条件（行数、命令数、時間情報等）が与えられる。また、開発者が編集しているソースコードの情報が、比較部に入力される。比較部は、この制約条件とソースコードの情報を比較し、その結果を開発者が編集しているソースコードが映し出されている入出力装置上に表示させる。入出力装置上では、性能劣化問題を発生させている編集箇所近辺（例えば編集したコード記述の下の部分）に、違反情報が表示される。具体的には、制約条件毎に、行数の場合は、何行違反あるいは何行超過、命令数の場合は、何命令違反あるいは何命令超過、時間情報の場合は、何時間（s, ms, μs, ns等）違反あるいは何時間超過、等の違反情報が入出力装置上に表示される。
【００４５】
図２は、性能問題指摘ソフトウェアの動作フローを示したものである。先述した図１の説明にもあるように、このソフトウェアは、開発者がコード作成中にバックグラウンドで常に動作しているものである。フローの説明では、１つ１つ順を追って説明するが、このソフトウェアの比較部は常に動作しているものである。フローの説明をすると、まず、開発者がソースコードを編集する。ソースコードの編集と同時に、性能問題指摘ソフトウェアの比較部では、開発中のソースコードと制約条件（行数、命令数、時間情報等）の比較を実施する。その後、比較結果を判定し、制約条件を違反していた場合は、制約条件違反結果（行数・命令数・実行時間等）を入出力装置上に表示する。制約条件を違反していなかった場合は、開発完了か否かを判定する。開発完了であれば、終了し、開発完了でなければ、再びソースコード編集を実行する。
【００４６】
図３は、性能問題指摘ソフトウェアの比較部の構成を示したものである。比較部は、制約条件と、編集中のソースコードとの比較を行うために、各制約条件毎に比較部と編集中のソースコードから情報を抽出する抽出部を持つ。行数比較部は、制約条件の行数と、編集中のソースコードから抽出した行数情報を比較し、制約条件を満たさない場合に、違反情報として、何行違反しているのかを入出力装置上に表示する。表示する項目は、２種類あり、全てのソースコードの行数の合計で何行違反しているのか、若しくは、編集中のソースコードのみで何行違反しているのか、をそれぞれ表示する。行数抽出部は、編集中のソースコードの行数を抽出する。命令数比較部は、制約条件の命令数と、編集中のソースコードから抽出した命令数情報を比較し、制約条件を満たさない場合に、違反情報として、何命令違反しているのかを入出力装置上に表示する。表示する項目は、２種類あり、全てのソースコードの命令数の合計で何命令違反しているのか、若しくは、編集中のソースコードのみで何命令違反しているのか、をそれぞれ表示する。命令数抽出部は、編集中のソースコードの命令数を抽出する。実行時間比較部は、制約条件の時間情報と、編集中のソースコードから抽出した時間情報を比較し、制約条件を満たさない場合に、違反情報として、制約条件に対して違反している実行時間（例えば、10us超過等）を入出力装置上に表示する。表示する項目は、２種類あり、全てのソースコードの実行時間の合計し、制約条件に対する超過分の実行時間、若しくは、編集中のソースコードのみで、制約条件に対する超過分の実行時間、をそれぞれ表示する。
【００４７】
図４は、行数抽出部の構成を示したものである。図４（a）の場合は、行数抽出部は、各ソースコード（A, B, C, …, N）の行数計測部と計測結果集計部とで構成される。この構成は、先述の図３で説明した、全てのソースコードの行数の合計で何行違反しているのか判定する場合のものである。各行数計測部は、対応するソースコードの行数をそれぞれ計測する。計測された各ソースコードの行数は、計測結果集計部で纏められ、全てのソースコードの行数の合計が結果として出力される。図４（b）の場合は、行数抽出部は、１つの行数計測部で構成される。この構成は、先述の図３で説明した、編集中のソースコードのみで何行違反しているのか判定する場合のものである。行数計測部は、対応するソースコードの行数を計測し、結果を出力する。
【００４８】
図５は、命令数抽出部の構成を示したものである。図５（a）の場合は、命令数抽出部は、各ソースコード（A, B, C, …, N）の命令数計測部と計測結果集計部とで構成される。この構成は、先述の図３で説明した、全てのソースコードの命令数の合計で何命令違反しているのか判定する場合のものである。各命令数計測部は、対応するソースコードの命令数をそれぞれ計測する。計測された各ソースコードの命令数は、計測結果集計部で纏められ、全てのソースコードの命令数の合計が結果として出力される。図５（b）の場合は、命令数抽出部は、１つの命令数計測部で構成される。この構成は、先述の図３で説明した、編集中のソースコードのみで何命令違反しているのか判定する場合のものである。命令数計測部は、対応するソースコードの命令数を計測し、結果を出力する。
【００４９】
図６は、命令数計測部の構成を示したものである。図６（a）は、１つのコンパイラ部で構成される。コンパイラ部は、編集中のソースコードをコンパイルし、コンパイル結果の命令数を結果として出力する。実際にコンパイルを実行するため、正確な命令数を計測することが可能となる。図６（b）は、既存コンパイル結果DBと、照合部で構成される。既存コンパイル結果DBは、既存のソースコードのコンパイル結果を纏めたものである。照合部は、既存コンパイル結果DBと編集中のソースコードを照合し、編集中のソースコードをコンパイルした場合、どの程度の命令数になるのかを推定し出力する。推定は、例えば、既存コンパイル結果DBと編集中のソースコードを照合する時、編集中の記述に似た記述を既存コンパイル結果DBから探索し命令数を推定する方法がある。
【００５０】
図７は、実行時間抽出部の構成を示したものである。図７（a）は、各ソースコード（A, B, C, …, N）の実行時間計測部と計測結果集計部とで構成される。この構成は、先述の図３で説明した、全てのソースコードの実行時間を合計し、制約条件に対する超過分の実行時間を判定する場合のものである。各実行時間計測部は、対応するソースコードの実行時間をそれぞれ計測する。計測された各ソースコードの実行時間は、計測結果集計部で纏められ、全てのソースコードの実行時間の合計が結果として出力される。図７（b）の場合は、実行時間抽出部は、１つの実行時間計測部で構成される。この構成は、先述の図３で説明した、編集中のソースコードのみで、制約条件に対する超過分の実行時間を判定する場合のものである。実行時間計測部は、対応するソースコードの実行時間を計測し、結果を出力する。
【００５１】
図８は、実行時間計測部の構成を示したものである。図８（a）は、時間情報を持つ関数モデルと照合部で構成される。関数モデルとは、各関数の実行時間情報を持つモデルである。照合部は、関数モデルと編集中のソースコードを照合し、関数モデルの時間情報を使って、編集中のソースコードの実行時間を推定し出力する。図８（b）は、既存実行結果DBと照合部で構成される。既存実行結果DBとは、既存のソースコードを実行させた時の結果の時間情報を纏めたものである。例えば、この既存実行結果DBと編集中のソースコードを照合し、編集中のソース記述と似た記述を既存実行結果DBで探索し、実行時間を推定する方法がある。
【実施例２】
【００５２】
図９は、性能問題指摘ソフトウェアと入出力装置に映し出されている編集中のソースコードの関係を示したものである。本方式では、先述のとおり、開発者がコード作成中に性能劣化問題を指摘するために、バックグラウンドで性能問題指摘ソフトウェアが動作し、常に編集中のソースコードを監視している。性能問題指摘ソフトウェアは、編集中のソースコード以外のソースコードと編集中のソースコードとを比較し評価する関数評価部を持つ。関数評価部には、先述のとおり、編集中のソースコード以外のソースコードと、編集中のソースコードが入力される。関数評価部は、編集中のソースコードと、それ以外のソースコードを比較し、新規開発コードで既存コードを置換える、新規開発コードよりも既存コードの性能やメンテナンス性が高い等の結果を開発者が編集しているソースコードが映し出されている入出力装置上に表示させる。入出力装置上では、置換え対象となり得る編集箇所近辺（例えば編集したコード記述の下の部分）に、置換え情報が表示される。具体的には、例えば、新規に開発したコードの性能が、既存コードに比べ良い場合、編集部分のコードを既存コードにも適用するとどれだけの性能向上の可能性があり、一括で既存コードを新規開発コードに置換えるか否かの判断を開発者に仰ぐ旨の表示が入出力装置上にされる。
【００５３】
図１０は、性能問題指摘ソフトウェアの動作フローを示したものである。先述した図９の説明にもあるように、このソフトウェアは、開発者がコード作成中にバックグラウンドで常に動作しているものである。フローの説明では、１つ１つ順を追って説明するが、このソフトウェアの比較部は常に動作しているものである。フローの説明をすると、まず、開発者がソースコードを編集する。ソースコードの編集と同時に、性能問題指摘ソフトウェアの関数評価部では、開発中のソースコードとそれ以外のソースコードの比較を実施する。その後、比較結果を判定し、既存コードを新規開発コードに置換えが可能な場合、または、新規開発コードを既存コードに置き換えが可能な場合は、コードの置換えが可能なことを入出力装置上に表示する。ソフトウェアが提示したコードに自動で置換えるか否かをコード開発者が判断し、自動で置換える場合は、一括でコードを置換える。自動で置換えない場合は、開発者が手動で置換えるか否かを判断し、手動で置換えるか、若しくは、ソフトウェアの提示を拒否し置換えないことも選択できる。自動置換え、または、手動置換えした場合は、再度開発中のソースコードと他のソースコードとの比較を行い、更に置換え可能か否かを判定する。ここで更に置換え可能なものがなく、開発完了の場合は、終了する。開発完了ではない場合は、再びソースコード編集を実行する。自動置換えも手動置換えもしない場合は、開発完了であれば終了し、開発完了ではない場合は、再びソースコード編集を実行する。
【００５４】
図１１は、関数評価部の構成を示したものである。関数評価部は、機能を評価する部分（機能抽出部１、機能抽出部２、機能照合部）と、性能を評価する部分（実行時間抽出部１、実行時間抽出部２、性能照合部）の２つで構成される。機能抽出部１と２は、編集中のソースコード以外のソースコードと、編集中のソースコードから機能を抽出するものである。機能照合部は、機能抽出部１と機能抽出部２の結果を照合し、新規に開発したソースコードで、同じ機能を有する既存のソースコードの置換えが可能か否かを判定し、置換えが可能な場合は、どの部分のコードがどのコードに置換えが可能か入出力装置上に表示する。逆に、新規に開発したソースコードを、同じ機能を有する既存のソースコードへの置換えが可能か否かも同時に判定する。また、性能照合部からの情報を使って、新規開発コードより同じ機能を有しつつ性能の高い既存コードへの置換え、または、既存コードより性能の高い新規開発コードへの置換え、若しくは、性能はほぼ差が無いが、メンテナンス性の高い新規開発コードへの既存コードの置換え、または、既存コードへの新規開発コードの置換えを判定することも可能である。実行時間抽出部１と２は、図３で説明した実行時間抽出部と同じものである。性能照合部は、実行時間抽出部１と実行時間抽出部２の結果を照合し、既存コードよりも性能向上が見込める新規開発コードに置換え可能か否か、または、新規開発コードよりも性能向上が見込める既存コードに置換え可能か否かを判定し、置換えが可能な場合は、どの部分のコードがどのコードに置換えが可能か入出力装置上に表示する。また、機能照合部からの情報を使って、新規開発コードより同じ機能を有しつつ性能の高い既存コードへの置換え、または、既存コードより性能の高い新規開発コードへの置換え、若しくは、性能はほぼ差が無いが、メンテナンス性の高い新規開発コードへの既存コードの置換え、または、既存コードへの新規開発コードの置換えを判定することも可能である。
【００５５】
図１２は、機能抽出部の構成を示したものである。機能抽出部は、各ソースコード（A, B, C, …, N）の関数抽出部と結果集計部とで構成される。各関数抽出部は、対応するソースコードの関数から機能情報をそれぞれ抽出する。抽出された各ソースコードの機能情報は、結果集計部で纏められ、全てのソースコードの機能情報が結果として出力される。
【００５６】
図１３は、機能照合部の構成を示したものである。図１３（a）の構成では、機能照合部は、機能抽出部から出力された機能情報から機能一覧を作成し、編集中ソースコード以外のソースコードの機能一覧１と、編集中ソースコードの機能一覧２を比較部で比較し、同じ機能を有するよりメンテナンス性の高いコードへの置換えが可能である場合は、どの部分のコードがどのコードに置換えが可能かを結果として出力する。図１３（b）の構成では、機能照合部は、ソースコードをコンパイラ部に入力し、その結果を比較し、例えば、似たような命令列が出力されるコードを同じ機能と判定し、よりメンテナンス性の高いコードへの置換えが可能である場合は、どの部分のコードがどのコードに置換えが可能かを結果として出力する。また図１３（a）, 図１３（b）どちらの場合も性能照合部からの情報を使って、同じ機能を有しつつ新規開発コードより性能の高い既存コードへの置換え、または、既存コードより性能の高い新規開発コードへの置換え、若しくは、性能はほぼ差が無いが、メンテナンス性の高い新規開発コードへの既存コードの置換え、または、既存コードへの新規開発コードの置換えを判定することも可能である。
【００５７】
図１４は、性能照合部の構成を示したものである。性能照合部では、実行時間抽出部から出力された性能情報から性能一覧を作成し、編集中ソースコード以外のソースコードの性能一覧１と、編集中ソースコードの性能一覧２を比較部で比較し、新規開発コードが既存コードより性能向上が見込め、置換えが可能である場合は、どの部分のコードがどのコードに置換えが可能かを結果として出力する。若しくは、新規開発コードよりも既存コードの方が性能が良く、新規開発コードを既存コードに置換えた方が良い場合も同様に、どの部分のコードがどのコードに置換えが可能かを結果として出力する。また、機能照合部からの情報を使って、同じ機能を有しつつ新規開発コードより性能の高い既存コードへの置換え、または、既存コードより性能の高い新規開発コードへの置換えを判定することも可能である。
【実施例３】
【００５８】
図１５は、性能問題指摘ソフトウェアを導入した開発環境の一例を示す図である。例えば、１か所の開発拠点で複数の開発者が同じソフトウェアを開発している場合、サーバーと各端末がネットワークで繋がれた状態で、各開発者がソースコードの編集を行う場合がある。この場合、性能問題指摘ソフトウェアを各端末では無く、サーバーに導入することで、複数の開発者が同時にソフトウェア開発するのを常に監視し、性能劣化問題が発生するのを防ぐことができる。また、ソースコードの置換え等も常に性能問題指摘ソフトウェアがサーバー上で監視しているため、開発者が新たなコードを作成後、より品質の良いコードに置換えることで、ソフトウェアの品質向上、性能向上、また、性能問題を防ぐことによる開発工数削減も可能となる。
【実施例４】
【００５９】
図１６は、性能問題指摘ソフトウェアを導入した開発環境の一例を示す図である。例えば、複数箇所の開発拠点で複数の開発者が同じソフトウェアを開発している場合、サーバーが設置されているデータセンターと各拠点の端末がネットワークで繋がれた状態で、各拠点の開発者がソースコードの編集を行う場合がある。この場合、性能問題指摘ソフトウェアを各端末では無く、データセンターのサーバーに導入することで、各拠点の複数の開発者が同時にソフトウェア開発するのを常に監視し、性能劣化問題が発生するのを防ぐことができる。また、ソースコードの置換え等も常に性能問題指摘ソフトウェアがデータセンターのサーバー上で監視しているため、開発者が新たなコードを作成後、より品質の良いコードに置換えることで、ソフトウェアの品質向上、性能向上、また、性能問題を防ぐことによる開発工数削減も可能となる。
【実施例５】
【００６０】
図１７は、性能問題指摘ソフトウェアを導入した開発環境の一例を示す図である。例えば、複数箇所の開発拠点で複数の開発者が同じソフトウェアを開発している場合、クラウド上のサーバーやデータセンターと各拠点の端末がネットワークで繋がれた状態で、各拠点の開発者がソースコードの編集を行う場合がある。この場合、性能問題指摘ソフトウェアを各端末では無く、クラウド上のサーバーや、データセンターのサーバーに導入することで、複数の開発者が同時にソフトウェア開発するのを常に監視し、性能劣化問題が発生するのを防ぐことができる。また、ソースコードの置換え等も常に性能問題指摘ソフトウェアがクラウド上のサーバーや、データセンターのサーバー上で監視しているため、開発者が新たなコードを作成後、より品質の良いコードに置換えることで、ソフトウェアの品質向上、性能向上、また、性能問題を防ぐことによる開発工数削減も可能となる。
【産業上の利用可能性】
【００６１】
本発明は、ソフトウェア開発における性能問題を、コードを記述する際に作成者に通知することで、性能向上と品質向上を可能にし、設計プロセスの後工程での手戻りを少なくしたソフトウェア性能問題指摘方法技術として、組込ソフトウェア開発に利用できる。
【符号の説明】
【００６２】
DB：Database。
【図２】
2012145987.tif 000003
【図３】
2012145987.tif 000004
【図４】
2012145987.tif 000005
【図５】
2012145987.tif 000006
【図６】
2012145987.tif 000007
【図７】
2012145987.tif 000008
【図８】
2012145987.tif 000009
【図１０】
2012145987.tif 000010
【図１１】
2012145987.tif 000011
【図１２】
2012145987.tif 000012
【図１３】
2012145987.tif 000013
【図１４】
2012145987.tif 000014
【図１】
2012145987.tif 000015
【図９】
2012145987.tif 000016
【図１５】
2012145987.tif 000017
【図１６】
2012145987.tif 000018
【図１７】
2012145987.tif 000019