(57)【要約】  組込みシステムとして比較的に大規模、複雑化されたソフトウェアであっても、複数のソースコード間の差分箇所を容易に特定し、差分箇所が及ぼす影響範囲を容易に理解可能とする。  コンピュータシステムが組込まれた組込みシステムのソフトウェア解析システムにおいて、組込みシステムを制御しているソースコード中の依存関係をグラフ構造として扱い、一つ以上のソースコードの類似度を測定する類似度測定部１３２と、類似度を表示する画像表示部１４とを有する。
2013088461.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに入力された複数のソースコードを解析して、ソースコードの変更箇所を特定するソフトウェア解析システムであって、
前記複数のソースコード中の少なくとも二つのソースコードそれぞれから、変数または関数の依存関係を抽出してノードとリンクからなるグラフ構造を作成し、前記二つのソースコードそれぞれに対応するグラフ構造の類似度を測定し、前記コンピュータ外部へ出力することを特徴とするソフトウェア解析システム。
【請求項２】
請求項１に記載のソフトウェア解析システムにおいて、前記類似度は、ハミング距離、相関係数、または中心化共鳴性であることを特徴とするソフトウェア解析システム。
【請求項３】
請求項１または２いずれかに記載のソフトウェア解析システムにおいて、前記ノードは変数を表し、前記リンクは前記変数間の代入関係を表すことを特徴とするソフトウェア解析システム。
【請求項４】
請求項１または２いずれかに記載のソフトウェア解析システムにおいて、前記ノードは関数を表し、前記リンクは前記関数間の呼び出し関係を表すことを特徴とするソフトウェア解析システム。
【請求項５】
請求項１から４いずれかに記載のソフトウェア解析システムにおいて、前記ノードの参照関係の大小から統計的に決定した重要ノードのみで構成されているグラフ構造に対し、類似度を測定することを特徴とするソフトウェア解析システム。
【請求項６】
請求項１から５いずれかに記載のソフトウェア解析システムにおいて、前記ソースコードの制御周期ごとに構成されているグラフ構造に対し、類似度を測定することを特徴とするソフトウェア解析システム。
【請求項７】
請求項１から６いずれかに記載のソフトウェア解析システムにおいて、測定した類似度を画像表示することを特徴とするソフトウェア解析システム。
【請求項８】
請求項７に記載のソフトウェア解析システムにおいて、測定した類似度と共にグラフ構造を表示することを特徴とするソフトウェア解析システム。
【請求項９】
請求項１から８いずれかに記載のソフトウェア解析システムにおいて、
二つのソースコードの差分を解析し、前記コンピュータ外部へ出力することを特徴とするソフトウェア解析システム。
【請求項１０】
請求項１から９いずれかに記載のソフトウェア解析システムに用いられるソフトウェア解析プログラムにおいて、
前記コンピュータに、入力されたソースコードから、変数または関数の依存関係を抽出してノードとリンクからなるグラフ構造を作成させるソースコード解析部と、
前記コンピュータに、二つのグラフ構造の類似度を測定させる類似度測定部と、を備えることを特徴とするソフトウェア解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの開発、検証、保守支援に好適なソフトウェア解析プログラムに関する。
【背景技術】
【０００２】
エレベータ、自動車、建設機械等の技術分野ではいわゆる組込みソフトウェアによって制御対象を制御する、組込み制御装置が用いられている。組込みソフトウェアは、従来の機械的機構や電気回路による方式に比べて柔軟かつ高度な制御が実現できること、ソフトウェアの部分的な変更によって多くの派生製品を開発できることが利点として挙げられる。【０００３】
近年、組込み制御装置に求められる制御処理が年々複雑化するとともに、制御変数間の依存関係が複雑化し、ソフトウェアの開発が困難となっている。その一方で、ソフトウェア開発サイクルは短期化を求められている。これに対して、複雑かつ大型のソフトウェアを短期間で開発するには、既存のソフトウェアをできるだけ効率よく再利用した派生開発が重要となる。【０００４】
既存のソフトウェアを再利用する派生開発では、既存製品と新製品の差分箇所を変更開発または新規開発する。この際、複雑なソフトウェアを短期間開発するにあたり、既存製品と新製品の差分箇所を効率良く理解することは、必要不可欠な技術である。【０００５】
ソフトウェアの差分箇所を特定する技術としては、二つのソースコードの対比を行うことで、変更箇所を特定する技術が知られ、例えば特許文献１に記載されている。【０００６】
また一方で、現在のソースコードの構造を効率よく理解するために、既存のソースコード制御フローとデータ依存関係を解析し、アプリケーション構造をノードとリンクからなるグラフによって表示する技術が知られ、例えば特許文献２に記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−３２６３３７号公報
【特許文献２】ＷＯ２００９／０１１０５６
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記従来技術において、特許文献１に記載されたものは、二つのソースコードの差分を抽出することで、複雑化が進んでいるソースコードの理解容易性向上を行っている。しかしながら、大規模・複雑化が進むソースコードに対し、ソースコードの差分のみでは、実質的に変数依存関係に変更が生じる変更箇所の特定や、変更箇所が前後に与える影響範囲が特定しにくいといった課題がある。【０００９】
また、特許文献２に記載されたものでは、ソースコード一つ一つの変数依存関係が理解できない上に、アプリケーションモデルの複雑度をもとにリファクタリング候補箇所を提案するにとどまっており、新旧二つのソースコードの相違点を理解することはできない。【００１０】
本発明の目的は、上記従来技術の課題を解決し、大規模・複雑化した組込みシステムの制御ソフトウェアにおいて、一つ以上のソースコードの差分箇所を容易に特定し、差分箇所が周囲に与える影響範囲を容易に特定することを可能とすることである。
【課題を解決するための手段】
【００１１】
上記課題を解決するため本発明は、コンピュータに入力された複数のソースコードを解析して、ソースコードの変更箇所を特定するソフトウェア解析システムであって、前記複数のソースコード中の少なくとも二つのソースコードそれぞれから、変数または関数の依存関係を抽出してノードとリンクからなるグラフ構造を作成し、前記二つのソースコードそれぞれに対応するグラフ構造の類似度を測定し、前記コンピュータ外部へ出力する。
【発明の効果】
【００１２】
本発明によれば、組込みシステムとして大規模、複雑化されたソフトウェア（コンピュータプログラム）であっても、二つのソフトウェア間の差分箇所を容易に特定可能、かつ差分箇所が影響を与えている範囲を容易に理解することが可能である。
【図面の簡単な説明】
【００１３】
【図１】本発明による一実施の形態のソフトウェア解析システムの表示画面を示す図。
【図２】本発明による一実施の形態の全体構成を示すブロック図。
【図３】一実施の形態におけるソースコード管理部を示す図。
【図４】一実施の形態におけるソースコードデータを示す図。
【図５】一実施の形態におけるソースコード管理部の処理を示すフローチャート。
【図６】一実施の形態におけるソースコードバージョンデータを示す図。
【図７】一実施の形態におけるデータフロー管理部を示す図。
【図８】一実施の形態におけるソースコード解析部の処理を示すフローチャート。
【図９】一実施の形態におけるデータフローを示す図。
【図１０】一実施形態におけるデータフロー登録部の処理を示すフローチャート。
【図１１】一実施の形態におけるデータフローバージョンデータを示す図。
【図１２】一実施の形態における差分解析部を示す図。
【図１３】一実施の形態における比較対象選択部の処理を示すフローチャート。
【図１４】一実施の形態におけるソースコード差分解析部の処理を示すフローチャート。
【図１５】一実施の形態におけるソースコード差分を示す図。
【図１６】一実施の形態における類似度測定部の処理を示すフローチャート。
【図１７】一実施の形態における類似度を示す図。
【図１８】一実施の形態における画像表示部を示す図。
【図１９】一実施の形態における解析結果出力部の処理を示すフローチャート。
【図２０】一実施の形態における解析結果出力部における表示を示す図。
【図２１】一実施の形態における解析結果出力部における表示を示す図。
【図２２】一実施の形態におけるソースコードバージョンデータを示す図。
【図２３】一実施の形態におけるソースコード差分を示す図。
【図２４】一実施の形態における類似度を示す図。
【図２５】一実施の形態における解析結果出力部における表示を示す図。
【発明を実施するための形態】
【００１４】
本発明は、家庭用機器、産業用機器、医療用機器等、電子制御を必要とする製品の特定の機能を実現するためにコンピュータシステムが組込まれている組込みシステムのソフトウェア部品作成支援装置に関し、特に携帯電話やデジタル家電、さらには自動車、鉄道、エレベータ等の輸送機器など、必要とする機能が多岐にわたるシステム、複数のハードウェア、複数のソフトウェアを組み合わせた規模の大きなシステムの、ソフトウェア開発、検証、保守支援に好適である。
【実施例１】
【００１５】
以下、図面を参照して本発明による一実施の形態を説明する。  
図１は、本発明によるソフトウェア解析システムの出力画面の一例を示す図である。ソースコードを入力とし、ソースコードの差分箇所を特定するだけでなく、ソースコード中の依存関係をリンクとノードからなるグラフ構造と解釈し、グラフの類似度を測定することで、一つ以上のソースコードの差分箇所をソースコードだけでなく、グラフの類似度を指標として評価し、図１のような出力を画面に表示する。【００１６】
図２は、ソフトウェア解析システム１の全体像を示すブロック図である。ソフトウェア解析システムは、ソースコード管理部１１と、データフロー管理部１２と、差分解析部１３と、画像表示部１４とを含むプログラムと、このプログラムがコンピュータで処理されたときに、入出力されるデータを格納するための構成管理ＤＢ１５とを備える。ソースコード管理部１１は構成管理ＤＢ１５よりソースコードデータ１５１を入力とし、ソースコードのバージョン管理を行うソースコードバージョンデータ１５２を出力する。データフロー管理部１２は、ソースコードデータ１５１に格納されたソースコードを入力とし、ソースコード中で使用される変数の依存関係を示すデータフローデータ１５３を作成し、データフローバージョンデータ１５４を出力する。差分解析部１３は、ソースコードバージョンデータ１５２とデータフローバージョンデータ１５４と、比較対象選択部１３３よりユーザ５が操作部３を用いて操作選択した情報を入力とし、ソースコード間の差分情報であるソースコード差分データ１５５と、データフローの類似度を表す指標である類似度データ１５６を出力する。画像表示部１４は、ソースコード差分データ１５５と、類似度データ１５６を入力とし、入力情報を表示部４に画像表示する。なお、ソフトウェア解析システム１は、ユーザ５が端末として使用するコンピュータ２とネットワーク等で接続された別のコンピュータに実装されても良いし、コンピュータ２内に実装されても良い。【００１７】
図３はソースコード管理部１１の詳細な構成を示す図である。ソースコード管理部１１は、ソースコードデータ１５１に新たに格納されたソースコードをソースコードバージョンデータ１５２に登録するソースコード登録部１１１を備え、ソースコードデータ１５１に格納されたソースコードを入力とし、入力されたソースコードデータをバージョン毎に対応付けて複数保存するデータベースであるソースコードバージョンデータ１５２にソースコードデータ１５１を登録する。なお、ソースコードデータ１５１に格納されるソースコードは、Ｃ言語などの高級言語で記載されたソースコードのファイルだけでなく、コンパイル後のオブジェクトファイルでも良いし、コンパイル後のプログラムの実行ログでも良い。【００１８】
図４はソースコードデータ１５１の詳細を示す図である。ソースコードファイル１５１１は、関数ｆｕｎｃ＿ｄの処理手順により構成されている。なお、ソースコードファイル１５１１で用いられている変数ａ、ｂ、ｃ、ｄ、ｅはグローバル変数で定義されているとする。関数ｆｕｎｃ＿ｄにおいて、変数ａとｂの値から変数ｃを更新する処理を行い、変数ｃとｄの値から変数ｅを更新する処理を行っている。【００１９】
図５は、ソースコード登録部１１１の詳細な実行フローを示す図である。ステップＳ１１１０から処理が始まる。ステップＳ１１１１ではソースコードデータ１５１の入力を行う。ステップＳ１１１２では、入力されたソースコードデータ１５１をソースコードバージョンデータ１５２にバージョン毎に対応付けて登録する。この対応付けは、例えばソースコードデータ１５１に格納されたソースコードのファイル名等からソースコードのバージョンを取得し、実現できる。ステップＳ１１１３で処理を終了する。このようにソースコードをバージョン毎に対応付けて登録することで、後述する比較対象選択部１３３による比較対象の選択が容易となる。【００２０】
図６はソースコードバージョンデータ１５２の詳細を示す図である。ソースコードファイル１５２１とソースコードファイル１５２２は共にソースコードバージョンデータ１５２に登録されているバージョンの異なるソースコードファイルをそれぞれ示している。ソースコードファイル１５２２はソースコードファイル１５２１に比べ、変数ｄの値を用いて変数ａを更新する処理が行われている行が多いことが見て取れる。【００２１】
図７はデータフロー管理部１２の詳細な構成を示す図である。データフロー管理部１２は、ソースコードデータ１５１に格納されたソースコードを入力とし、そのソースコード中の変数依存関係を解析しデータフローを作成するソースコード解析部１２１と、データフロー図をデータフローバージョンデータ１５４に登録するデータフロー登録部１２２とを備え、ソースコードデータ１５１に格納されたソースコードを入力とし、入力されたソースコードファイルから変数依存関係をグラフ化したデータフローを作成し、作成したデータフローをバージョン毎に対応付けて保存するデータベースであるデータフローバージョンデータ１５４に登録する。【００２２】
図８は、ソースコード解析部１２１の詳細な実行フローを示す図である。ステップＳ１２１０から処理が始まる。ステップＳ１２１１ではソースコードデータ１５１１の入力を行う。ステップＳ１２１２では、入力されたソースコードを解析し、ソースコード中の変数依存関係を抽出する。ステップＳ１２１３では、ステップＳ１２１２にて抽出された変数依存関係から、データフローを作成する。ステップＳ１２１４では、ステップＳ１２１３にて作成されたデータフローをデータフローのデータベースであるデータフローデータ１５３に登録する。ステップＳ１２１５で処理を終了する。【００２３】
図９はデータフローデータ１５３の詳細を示す図である。マトリクス１５３１は、ソースコードファイル１５１１中の変数依存関係を表形式にて表した図である。データフロー１５３２は、ソースコードファイル１５１１中の変数依存関係をグラフ形式にて表した図である。本実施の形態においては、データフロー１５３２は、変数をノード、変数間の代入関係を矢印で表されたリンクとして変数依存関係を表現する。例えば、ここでは変数ａと変数ｂに基づいて変数ｃが演算されていることを変数ａ、ｂ、ｃを表すノードとこれらノード間を結ぶリンクとで表現されている。【００２４】
図１０はデータフロー登録部１２２の詳細な実行フローを示す図である。ステップＳ１２２０から処理が始まる。ステップＳ１２２１では、データフローデータ１５３よりデータフローの入力を行う。ステップＳ１２２２ではステップＳ１２２１で入力されたデータフローをデータフローのバージョン管理データベースであるデータフローバージョンデータ１５４にソースコードのバージョン毎に対応付けてデータフローを登録する。ステップＳ１２２３で処理を終了する。このようにデータフローをバージョン毎に対応付けて登録することで、後述する比較対象選択部１３３による比較対象の選択が容易となる。【００２５】
図１１はデータフローバージョンデータ１５４の詳細を示す図である。マトリクス１５４１はあるバージョンのソースコードファイル１５２１中の変数依存関係を表形式にて表した図である。データフロー１５４２は、ソースコードファイル１５２１中の変数依存関係をグラフ形式にて表した図である。マトリクス１５４３は他のバージョンのソースコードファイル１５２２中の変数依存関係を表形式にて表した図である。データフロー１５４４は、ソースコードファイル１５２２中の変数依存関係をグラフ形式にて表した図である。【００２６】
図１２は差分解析部１３の詳細な構成を示す図である。差分解析部１３は、操作部３を通してユーザ５より比較対象を示すソースコードのバージョン等のデータ情報を選択する比較対象選択部１３３と、ソースコードバージョン間の差分を解析するソースコード差分解析部１３１と、データフロー間の類似度を測定する類似度測定部１３２とを有する。差分解析部１３は、操作部３を通してユーザ５より比較対象を示すデータ情報を入力し、比較対象のデータ情報に基づきソースコードバージョンデータとデータフローバージョンを入力とし、ソースコードの差分を解析しソースコード差分データを出力するとともに、データフローの類似度を測定し類似度データを出力する。【００２７】
図１３は比較対象選択部１３３の詳細な実行フローを示す図である。ステップＳ１３１０から処理が始まる。ステップＳ１３１１では、操作部３を通してユーザ５より比較対象の情報データを入力する。情報データとしては、ソースコードのバージョン情報やリリース情報が挙げられる。ステップＳ１３１２では、ステップＳ１３１１で入力された比較対象が二つ選択されているかどうかを判断する。比較対象が二つ選択済みであった場合（ＹＥＳ）、ステップＳ１３１３に進み、処理を終了する。比較対象が二つ選択されていなかった場合（ＮＯ）、ステップＳ１３１１へと進み処理を続行する。このように、更にＳ１３１２のような処理を実装することで、ユーザによる入力誤りなどを防止できる。【００２８】
図１４はソースコード差分解析部１３１の詳細な実行フローを示す図である。ステップＳ１３２０から処理が始まる。ステップＳ１３２１では、比較対象選択部１３３より比較対象情報を入力する。ステップＳ１３２２では、ステップＳ１３２１より入力された比較対象情報に基づき、ソースコードバーションデータ１５２より比較対象のソースコードを入力する。ステップＳ１３２３では、ステップＳ１３２２より入力された比較対象のソースコードの差分を解析する。解析手法としては、例えばＵＮＩＸ（登録商標）などでシェル・コマンドとして用意されているｄｉｆｆコマンドや、ＭＳ−ＤＯＳ（登録商標）におけるｃｏｍｐコマンドなどの手法を用いることができる。これにより、テキストなどで記述されたソースコードの差分を解析できる。ステップＳ１３２４では、ステップＳ１３２３より解析されたソースコード差分データをソースコード差分のデータベースであるソースコード差分データ１５５に登録する。差分データは、例えばソースコードの行番号データ等で表すことができる。ステップＳ１３２５で処理を終了する。【００２９】
図１５は、ソースコード差分データ１５５新バージョンのソースコードに表示させた例の詳細を示す図である。新旧バージョンのソースコードファイル１５５１とソースコードファイル１５５２を比較した結果、ソースコードファイル１５５２内の変数ａを更新する処理が、ソースコードファイル１５５１とソースコードファイル１５５２の差分であることがわかる。【００３０】
図１６は類似度測定部１３２の詳細な実行フローを示す図である。ステップＳ１３３０から処理が始まる。ステップＳ１３３１では、比較対象選択部１３３より比較対象情報を入力する。ステップＳ１３３２では、ステップＳ１３３１より入力された比較対象情報に基づき、データフローバージョンデータ１５４より比較対象のデータフローを入力する。ステップＳ１３３３では、ステップＳ１３３２より入力された比較対象のデータフローの類似度を測定する。ここで、類似度とは、相関係数、ハミング距離、中心化共鳴性分析などが考えられるが、ここでは相関係数を用いた類似度測定について後述する。ステップＳ１３３４では、ステップＳ１３３３より測定された類似度を、類似度情報のデータベースである類似度データ１５６に登録する。ステップＳ１３３５で処理を終了する。【００３１】
図１７は類似度データ１５６の詳細を示す図である。ソースコードバージョン１５２１内の変数依存関係を表形式にて表したマトリクス１５６１とソースコードバージョン１５２２内の変数依存関係を表形式にて表したマトリクス１５６２を比較すると、（ｄ、ｅ）の値が０と１で異なっていることがわかる。同様の内容をグラフ形式で表したデータフロー１５６２とデータフロー１５６５を比較すると、変数ｄから変数ａへの依存関係線が異なっていることがわかる。データフロー１５６２とデータフロー１５６５の類似度である相関係数を求めると、０.８７であることがわかる。ここで算出した相関係数とは、以下の式にてｒで定義されるものである。【００３２】
2013088461.tif 000003
【００３３】
ここで、ｘiは変数依存関係を表形式にて表示したマトリクス１５６２および１５６４から対角成分を除いた残りの成分を指す。つまり、この場合におけるｘi1およびｘi2はそれぞれ次の形で表記できる。【００３４】
ｘi1＝(０,１,０,０,０,１,０,０,０,０,０,１,０,０,０,１,０,０,０,０)
ｘi2＝(０,１,０,０,０,１,０,０,０,０,０,１,１,０,０,１,０,０,０,０)
図１８は画像表示部１４の詳細な構造を示す図である。画像表示部１４は、ソースコード差分データ１５５と類似度データ１５６を表示部４に表示する差分データ出力部１４１を有する。画像表示部１４はソースコード差分データ１５５と類似度データ１５６を入力とし、ソースコードの差分情報とデータフローの類似度を表示部４に出力する。【００３５】
図１９は差分データ出力部１４１の詳細な実行フローを示す図である。ステップＳ１４１０から処理が始まる。ステップＳ１４１１では、ソースコード差分情報をソースコード差分データ１５５から入力する。ステップＳ１４１２では、データフローの類似度情報を類似度データ１５６から入力する。ステップＳ１４１３では、ステップＳ１４１１およびステップＳ１４１２より入力されたソースコード差分情報と類似度情報を表示部４に出力する。ステップＳ１４１４で処理を終了する。【００３６】
なお、ソースコード差分情報と類似度情報は表示部４に出力せずに、ネットワークなどの媒介を通じて他のコンピュータや他のユーザに提供してもよい。【００３７】
図２０は画像表示部１４の画像表示結果の一例を示す図である。この例では、ソースコードａ、ｂ、ｃ、ｄを有するフォルダＡ−１を含むディレクトリＡと、ソースコードａ′、ｂ′、ｃ′、ｄ′を有するフォルダＡ′−１を含むディレクトリＡ′とを比較した結果を示している。表示結果４１２では、ソースコードｂとｂ′間とソースコードｄとｄ′間に差分情報があることが強調表示されている。また、ソースコードｂとｂ′の類似度が１.００なのに対し、ソースコードｄとｄ′の類似度は０.８７であることがわかる。このことから、ユーザはソースコードに変更があったソースコードｂ′ｂ′間とソースコードｄ、ｄ′間のうち、ソースコードｂ、ｂ′間に変数依存関係の変更は存在せず、ソースコードｄ、ｄ′間に変数依存関係の変更があったことが一目でわかる。【００３８】
なお、本実施の形態では、差分解析部１３においてソースコード差分解析部１３１と類似度測定部１３２とを双方備えているが、ソースコード差分解析部１３１を省略してもよい。但し、本実施の形態では、ソースコード差分解析部１３１を備えることにより、ソースコードの差分とデータフローの類似度とを双方比較できるので、単なるソースコードの形式的な記述の変更と、実際に変数依存関係に変更の生じるソースコードの記述の変更と、を区別して把握することができる。また、ソースコード差分解析部１３１を備えることにより、ソースコードに変更が生じている具体的な箇所を確認でき、ファイル単位よりも細かい単位、例えばソースコードの行数情報などで変更箇所を特定することもできる。【００３９】
図２１は画像表示部１４の画像表示結果の一例を示す図である。画像では、ソースコードｄ、ｄ′間のソースコード差分と、データフローの違い、類似度の値０.８７を表示している。【００４０】
図２２はソースコードバージョンデータ１５２におけるソースコードｂとソースコードｂ′の詳細を示す図である。図で示すように、ソースコードｄ′はソースコードｄに対しマクロＨを用いている点で異なっている。【００４１】
図２３はソースコード差分データ１５５の詳細を示す図である。ソースコードｄ′はマクロＨを用いている箇所が差分として強調表示されている。【００４２】
図２４は類似度データ１５６の詳細を示す図である。ソースコードｂとソースコードｂ′間において、変数依存関係においては変更が存在しないため、ソースコード中の変数依存関係を表形式にて表したマトリクス１５６７１とマトリクス１５６８１はまったく同じ値となる。また、変数依存関係をグラフ形式にて表したデータフロー１５６７２と１５６８２も同等の結果となる。そのため、類似度を示す相関係数１５６７３と相関係数１５６８３は１.００となる。【００４３】
図２５は画像表示部１４の画像表示結果の一例を示す図である。この図では、ユーザ５によって選択された解析対象４２１の解析結果を４２２に表示し、差分結果の詳細を４２３に表示している。この図から、ソースコードｂとｂ′はソースコード中に差分はあるものの、変数依存関係を示すデータフローは同等で、類似度は１.００であることが一目でわかる。【００４４】
このように、本実施の形態によれば、ソースコードの差分だけでなくデータフローの類似度を比較するので、単なるソースコードの記述のみの差ではなく、実際に変数依存関係に変更があったか否かを把握できる。これにより、実質的なソースコードの変更箇所の特定と、変更箇所が実質的に周囲に与える影響を把握することができる。
【実施例２】
【００４５】
以下、本発明の他の実施の形態について実施例１との差異点を中心に説明する。【００４６】
本実施の形態では、ソースコード解析部１２１は、構成管理ＤＢに登録されるデータフローデータ１５３、データフローバージョンデータ１５４として、関数をノード、関数間の呼び出し関係をリンクとしたデータフローを作成する。この場合、あるノードで表される関数が他のノードで表される関数を呼び出しているということが表現される。【００４７】
本実施の形態によれば、関数間の呼び出しが複雑なソースコードにおいても、ソースコードのバージョン間の変更箇所を容易に特定し、変更箇所が周囲に与える影響範囲を容易に特定することが可能になる。
【実施例３】
【００４８】
以下、本発明の他の実施の形態についてこれまで説明した実施例との差異点を中心に説明する。【００４９】
本実施の形態では、エレベータ、自動車、建設機械等の制御対象を制御する組込み制御装置に実装されるソースコードから、制御周期ごとに分けてデータフローを作成し、データフローデータ１５３、データフローバージョンデータ１５４へ登録する。また、制御周期ごとに分けられたグラフ構造同士の類似度を測定する。ソースコードを制御周期ごとに分ける処理は、ソースコード解析部１２１において実行されても良いし、予めソースコードデータ１５１に制御周期ごとに分けたソースコードを入力しておいても良い。【００５０】
組込み制御装置、例えばエレベータ制御装置では、一定周期または割り込みによってタスクを起動し、行き先階指定ボタンやドア安全センサ等のセンサの入力に基づいて制御変数を更新し、ドア開閉用モータやかご駆動用モータなどのアクチュエータを制御する、いわゆるデータ駆動型の計算モデルが採用されている。また、タスクは複数種類ある制御周期、または割り込みにあわせて、複数用意されている。そして、それぞれのタスクで実行する制御処理は、それぞれ独自のフィードバックループを形成する場合が多い。したがって、それぞれのタスク毎で行われるセンサからの入力、制御変数の演算および更新などに伴うデータの参照関係、関数の呼び出し関係は、同一タスク内で実行する制御処理で完結することも多い。そして、ある制御周期で実行される処理に関するソースコードのみ変更があった場合に、その変更箇所の周期に与える影響の範囲は、同一制御周期で実行される処理に関するソースコード内であることも多い。【００５１】
本実施の形態では、制御周期または割り込み内容毎にデータフローを分けて作成し、類似度測定部１３２による類似度の計測を行う。【００５２】
本実施形態によれば、制御周期毎にグラフ構造を分割して類似度の計測を行い、変更箇所の周期に与える影響の範囲を予め予測して限定できるので、類似度の計測による演算負荷を低減し、またユーザに表示部４を介して提示するデータの簡略化が図れる。特に、ソフトウェア規模が大規模な場合に、データを簡略化してユーザに提示することは、変更箇所の概略を把握するために有用である。また、ソースコードのファイル単位よりも小さいタスク単位で、変更箇所の特定ができる。【００５３】
なお、ここでいう制御周期とは、１０ｍｓ間隔などの一定周期に限られず、例えば自動車用エンジンの回転数に同期して実行される、エンジン回転数同期等の周期などであってもよい。
【実施例４】
【００５４】
以下、本発明の他の実施の形態についてこれまで説明した実施例との差異点を中心に説明する。【００５５】
本実施の形態では、変数の依存関係の大小に基づいて全ノード中の重要ノードを決定する処理を行う。ソースコード解析部１２１は、データフローを作成する際にデータの参照関係の多いノードを重要ノードとして決定し、重要ノード以外のノードと、不要なリンクを間引いたデータフローをデータフローデータ１５３、データフローバージョンデータ１５４へ登録する。【００５６】
ここで、データの参照関係の大小の一例として、図１のデータフロー図に表される変数ａを表すノードと変数ｃを表すノードとについて説明する。変数ｃは変数ａとｂとに基づいて決定され、さらに変数ｅからも参照されるため、変数ｃはデータの参照関係が三つ存在する。一方、変数ａについては変数ｃからしか参照されないために、データの参照関係が一つしか存在しない。このようにしてデータの参照関係の大小を判断できる。【００５７】
なお、ノード重要ノードの決定は、データ参照関係の大小をソースコード全体から見た統計処理に基づいて決めても良いし、所定の閾値に基づいて決めても良い。【００５８】
本実施の形態によれば、重要ノードのみで表されたデータフローに対して類似度測定部１３２による類似度の計測を行うので、類似度の計測による演算負荷を低減し、またユーザに表示部４を介して提示するデータの簡略化が図れる。【００５９】
以上、本発明の実施の形態について説明してきたが、これら実施の形態で示された発明は、それぞれを単独の発明と捉えるべきでなく適宜組み合わせて実施することができ、そのような組み合わせは当業者にとって試行錯誤を要することがないことは自明である。
【符号の説明】
【００６０】
１  ソフトウェア解析システム
２  コンピュータ
３  操作部
４  表示部
５  ユーザ
１１  ソースコード管理部
１２  データフロー管理部
１３  差分解析部
１４  画像表示部
１５  構成管理ＤＢ
１１１  ソースコード登録部
１２１  ソースコード解析部
１２２  データフロー登録部
１３１  ソースコード差分解析部
１３２  類似度測定部
１３３  比較対象選択部
１４１  差分データ出力部
１５１  ソースコードデータ
１５２  ソースコードバージョンデータ
１５３  データフローデータ
１５４  データフローバージョンデータ
１５５  ソースコード差分データ
１５６  類似度データ
【図１】
2013088461.tif 000004
【図２】
2013088461.tif 000005
【図３】
2013088461.tif 000006
【図４】
2013088461.tif 000007
【図５】
2013088461.tif 000008
【図６】
2013088461.tif 000009
【図７】
2013088461.tif 000010
【図８】
2013088461.tif 000011
【図９】
2013088461.tif 000012
【図１０】
2013088461.tif 000013
【図１１】
2013088461.tif 000014
【図１２】
2013088461.tif 000015
【図１３】
2013088461.tif 000016
【図１４】
2013088461.tif 000017
【図１５】
2013088461.tif 000018
【図１６】
2013088461.tif 000019
【図１７】
2013088461.tif 000020
【図１８】
2013088461.tif 000021
【図１９】
2013088461.tif 000022
【図２０】
2013088461.tif 000023
【図２１】
2013088461.tif 000024
【図２２】
2013088461.tif 000025
【図２３】
2013088461.tif 000026
【図２４】
2013088461.tif 000027
【図２５】
2013088461.tif 000028
【手続補正書】
【提出日】平成24年5月8日(2012.5.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに入力された複数のソースコードを解析して、ソースコードの変更箇所を特定するソフトウェア解析システムであって、
前記複数のソースコード中の少なくとも二つのソースコードそれぞれから、グローバル変数の依存関係を抽出し、前記グローバル変数を表すノードと前記グローバル変数間の代入関係を表すリンクとを含むグラフ構造を作成し、前記二つのソースコードそれぞれに対応するグラフ構造の類似度を測定し、前記コンピュータ外部へ出力することを特徴とするソフトウェア解析システム。
【請求項２】
請求項１に記載のソフトウェア解析システムにおいて、前記類似度は、ハミング距離、相関係数、または中心化共鳴性であることを特徴とするソフトウェア解析システム。
【請求項３】
（削除）
【請求項４】
請求項１または２いずれかに記載のソフトウェア解析システムにおいて、前記ノードは関数を表し、前記リンクは前記関数間の呼び出し関係を表すことを特徴とするソフトウェア解析システム。
【請求項５】
請求項１から４いずれかに記載のソフトウェア解析システムにおいて、前記ノードの参照関係の大小から統計的に決定した重要ノードのみで構成されているグラフ構造に対し、類似度を測定することを特徴とするソフトウェア解析システム。
【請求項６】
請求項１から５いずれかに記載のソフトウェア解析システムにおいて、前記ソースコードの制御周期ごとに構成されているグラフ構造に対し、類似度を測定することを特徴とするソフトウェア解析システム。
【請求項７】
請求項１から６いずれかに記載のソフトウェア解析システムにおいて、測定した類似度を画像表示することを特徴とするソフトウェア解析システム。
【請求項８】
請求項７に記載のソフトウェア解析システムにおいて、測定した類似度と共にグラフ構造を表示することを特徴とするソフトウェア解析システム。
【請求項９】
請求項１から８いずれかに記載のソフトウェア解析システムにおいて、二つのソースコードの差分を解析し、前記コンピュータ外部へ出力することを特徴とするソフトウェア解析システム。
【請求項１０】
請求項１から９いずれかに記載のソフトウェア解析システムに用いられるソフトウェア解析プログラムにおいて、前記コンピュータに、入力されたソースコードから、変数または関数の依存関係を抽出してノードとリンクからなるグラフ構造を作成させるソースコード解析部と、前記コンピュータに、二つのグラフ構造の類似度を測定させる類似度測定部と、を備えることを特徴とするソフトウェア解析プログラム。
【国際調査報告】
2013088461.tif 000029
2013088461.tif 000030
2013088461.tif 000031
2013088461.tif 000032