(57)【要約】  複数のファイルやディレクトリに分散したプログラムの環境依存部を効率的に局所化するための判断材料を提供する。  環境依存部の局所化工数を、プログラムの構造データや環境依存部のデータにより独自の方式で算出する。環境依存部の局所化効果は、ローレンツ曲線やジニ係数を基に算出し、可視化する。
2016088271.tif 000002
【特許請求の範囲】
【請求項１】
入力装置、出力装置、演算装置、および記憶装置を有するプログラム依存部可視化装置であって、
前記演算装置は、前記記憶装置に記憶された、あるいは、前記入力装置から入力される、環境依存部データを利用可能であり、
前記環境依存部データは、複数のプログラムに関する情報を含み、前記プログラムの其々を特定する情報と、前記プログラム中に含まれる環境依存部に関するデータの組を有しており、
前記演算装置は、可視化処理部と、環境依存部集計処理部と、局所化工程算出処理部と、環境依存度算出処理部を備え、
前記環境依存部集計処理部は、前記環境依存部データに基づいて、前記プログラムごとに環境依存部を特定し、
前記局所化工数算出処理部は、前記特定された環境依存部の情報に基づいて、前記特定された環境依存部ごとに局所化工数を算出し、
前記可視化処理部は、前記算出された局所化工数に基づいて、前記プログラムごとに局所化工数の値を集計し、
前記環境依存度算出処理部は、前記集計されたプログラムごとの局所化工数の値に基づいて、事象の集中度合いを把握するためのローレンツ曲線およびジニ係数を算出し、
前記出力装置は、前記算出されたローレンツ曲線およびジニ係数に基づいた情報を表示する、
ことを特徴とするプログラム依存部可視化装置。
【請求項２】
前記環境依存部データは、
前記プログラムの其々を特定する情報として、ファイル名およびモジュール名の少なくとも一つを有し、
前記プログラム中に含まれる環境依存部に関するデータとして、前記環境依存部の種類を示す環境依存種を有する、
ことを特徴とする請求項１記載のプログラム依存部可視化装置。
【請求項３】
前記可視化処理部は、前記ファイル名およびモジュール名の少なくとも一つを、可視化単位として指定し、
前記環境依存部集計処理部は、前記可視化単位毎に、前記環境依存種に応じた環境依存部の数を集計し、
前記局所化工数算出処理部は、前記環境依存部の数を示す情報および前記環境依存部の種類を示す環境依存種の少なくとも一つを用いて、前記特定された環境依存部ごとに局所化工数を算出する、
ことを特徴とする請求項２記載のプログラム依存部可視化装置。
【請求項４】
前記演算装置は、前記記憶装置に記憶された、あるいは、前記入力装置から入力される、プログラム構造データを利用可能であり、
前記プログラム構造データは、複数のプログラムに関する情報を含み、前記プログラムの其々を特定する情報と、前記プログラムの機能、特性、複雑度、および規模に関する情報の少なくとも一つに関するデータの組を有しており、
前記局所化工数算出処理部は、前記プログラムの機能、特性、複雑度、および規模に関する情報の少なくとも一つを用いて、前記特定された環境依存部ごとに局所化工数を算出する、
ことを特徴とする請求項３記載のプログラム依存部可視化装置。
【請求項５】
前記環境依存部別に、前記プログラム中の位置を示す行番号の情報をを有し、
前記環境依存種として、char型符号、シフト演算、int型長、およびエンディアンの少なくとも一つを有し、
前記プログラムの機能に関する情報として、前記モジュール名に対応してモジュールの機能を示す関数、変数、およびマクロの少なくとも一つを有し、
前記プログラムの特性に関する情報として、スコープおよび参照関係に関する情報の少なくとも一つを有し、
前記プログラムの規模に関する情報として、プログラムの行数に関する情報を有する、
ことを特徴とする請求項４記載のプログラム依存部可視化装置。
【請求項６】
入力装置、出力装置、演算装置、および記憶装置を有する情報処理装置を用いて行うプログラム依存部可視化方法であって、
前記演算装置は、前記記憶装置に記憶された、あるいは、前記入力装置から入力される、環境依存部データを利用可能であり、
前記環境依存部データは、複数のプログラムに関する情報を含み、前記プログラムの其々を特定する情報と、前記プログラム中に含まれる環境依存部に関するデータの組を有しており、
前記演算装置は、
前記環境依存部データに基づいて、前記プログラムごとに環境依存部を特定する環境依存部数集計ステップと、
前記特定された環境依存部の情報に基づいて、前記特定された環境依存部ごとに局所化工数を算出する局所化工数算出ステップと、
前記算出された局所化工数に基づいて、前記プログラムごとに局所化工数の値を集計する局所化工数集計ステップと、
前記集計されたプログラムごとの局所化工数の値に基づいて、事象の集中度合いを把握するためのローレンツ曲線およびジニ係数を算出する可視化ステップを実行し、
前記出力装置は、前記算出されたローレンツ曲線およびジニ係数に基づいた情報を表示する、
ことを特徴とするプログラム依存部可視化方法。
【請求項７】
前記環境依存部データは、
前記プログラムの其々を特定する情報として、ファイル名およびモジュール名の少なくとも一つを有し、
前記プログラム中に含まれる環境依存部に関するデータとして、前記環境依存部の種類を示す環境依存種を有する、
ことを特徴とする請求項６記載のプログラム依存部可視化方法。
【請求項８】
前記入力装置に入力される情報により、前記ファイル名およびモジュール名の少なくとも一つを、可視化単位として指定し、
前記環境依存部集計ステップは、前記可視化単位毎に、前記環境依存種に応じた環境依存部の数を特定し、
前記局所化工数算出ステップは、前記環境依存部の数を示す情報および前記環境依存部の種類を示す環境依存種の少なくとも一つを用いて、前記特定された環境依存部ごとに局所化工数を算出する、
ことを特徴とする請求項７記載のプログラム依存部可視化方法。
【請求項９】
前記演算装置は、前記記憶装置に記憶された、あるいは、前記入力装置から入力される、プログラム構造データを利用可能であり、
前記プログラム構造データは、複数のプログラムに関する情報を含み、前記プログラムの其々を特定する情報と、前記プログラムの機能、特性、複雑度、および規模に関する情報の少なくとも一つに関するデータの組を有しており、
前記局所化工数算出ステップは、前記プログラムの機能、特性、複雑度、および規模に関する情報の少なくとも一つを用いて、前記特定された環境依存部ごとに局所化工数を算出する、
ことを特徴とする請求項８記載のプログラム依存部可視化方法。
【請求項１０】
前記環境依存部別に前記プログラム中の位置を示す行番号の情報を有し、
前記環境依存種として、char型符号、シフト演算、int型長、およびエンディアンの少なくとも一つを有し、
前記プログラムの機能に関する情報として、前記モジュール名に対応してモジュールの機能を示す関数、変数、およびマクロの少なくとも一つを有し、
前記プログラムの特性に関する情報として、スコープおよび参照関係に関する情報の少なくとも一つを有し、
前記プログラムの規模に関する情報として、プログラムの行数に関する情報を有する、
ことを特徴とする請求項９記載のプログラム依存部可視化方法。
【請求項１１】
入力装置、出力装置、演算装置、および記憶装置を有する情報処理装置を、外部からの指示に応じてプログラムの環境依存部を可視化する手段として機能させるプログラム依存部可視化プログラムであって、
前記情報処理装置を、
データベースプログラムから読み込んだ環境依存部データを基に前記プログラムの前記環境依存部を特定し、前記プログラムを構成するソースファイルまたは前記ソースファイルを含むディレクトリ毎に前記環境依存部の数を集計する環境依存部集計処理部と、
前記環境依存部集計処理部によって集計された前記環境依存部の数を基にローレンツ曲線を可視化する可視化処理部と、
を備えるごとく機能させるプログラム依存部可視化プログラム。
【請求項１２】
請求項１１記載のプログラム依存部可視化プログラムであって、
前記情報処理装置を、
前記データベースプログラムから読み込んだ前記環境依存部データから前記環境依存部の種類を特定し、外部からの指示に応じて前記環境依存部の種類毎に前記環境依存部の数を集計する前記環境依存部集計処理部と、
前記環境依存部集計処理部が前記環境依存部の種類毎に集計した前記環境依存部の数を基に前記ローレンツ曲線を可視化する前記可視化処理部と、
を備えるごとく動作させるプログラム依存部可視化プログラム。
【請求項１３】
請求項１２記載のプログラム依存部可視化プログラムであって、
前記情報処理装置を、
前記データベースプログラムから読み込んだ前記環境依存部データから前記環境依存部を含むモジュールを特定し、前記モジュールが含む前記環境依存部の数および種類を基に前記環境依存部の局所化工数を算出する局所化工数算出処理部と、
前記局所化工数と前記環境依存部集計処理部が集計した前記環境依存部の数を基に前記ローレンツ曲線を可視化する前記可視化処理部と、
を備えるごとく動作させるプログラム依存部可視化プログラム。
【請求項１４】
請求項１３記載のプログラム依存部可視化プログラムであって、
前記情報処理装置を、
前記データベースプログラムから読み込んだプログラム構造データから、前記モジュールのスコープおよびメトリクスおよび依存関係を特定し、これらのデータを基に前記環境依存部の前記局所化工数を算出する前記局所化工数算出処理部と、
前記局所化工数と前記環境依存部集計処理部が集計した前記環境依存部の数を基に前記ローレンツ曲線を可視化する前記可視化処理部と、
を備えるごとく動作させるプログラム依存部可視化プログラム。
【請求項１５】
請求項１４記載のプログラム依存部可視化プログラムであって、
前記情報処理装置を、
前記環境依存部集計処理部が集計した前記環境依存部の数と、前記局所化工数算出処理部が算出した前記局所化工数と、を基にプログラムが環境に依存する度合いを表す環境依存度を算出する環境依存度算出処理部と、
前記環境依存度の値を可視化する処理を行う前記可視化処理部と、
を備えるごとく動作させるプログラム依存部可視化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの構造や特徴を可視化する技術に関する。
【背景技術】
【０００２】
一般に、プログラム（本明細書ではソースコードと同義）は何らかの装置（CPUや周辺機器）、OS等のミドルウェア、およびライブラリに依存している。例えば特定のCPU専用命令セットを呼び出すプログラムは、当該命令セットをサポートしない別のCPUでは動作しない。同様に、特定のOSやライブラリに依存するプログラムは、当該OSおよびライブラリと互換性のない別のOSおよびライブラリでは動作しない。これはプログラムをある実行環境から別の実行環境へ移植する際に問題になることがある。プログラムの内部に存在する特定の実行環境への依存部（以下、単に環境依存部と記載する）がプログラムの至る所に存在する場合、当該プログラムを別の実行環境に移植する際の修正工数が増えるためである。【０００３】
この問題を回避するための方法として、プログラムの内部に分散して存在する環境依存部を一つのファイル（ソースファイル）に纏める「局所化」という手法が一般に用いられる。プログラムの内部に存在する環境依存部を一つのファイルに纏めておくことで、修正箇所を限定し、修正工数を最小限に抑えることが可能となる。【０００４】
しかしながら、プログラムの開発初期においては、当該プログラムを別の実行環境に移植することを想定していない場合が多い。または、開発当初は他環境への移植を想定し、環境依存部を局所化する設計を採り入れていた場合であっても、開発を進めるに従って環境依存部が様々なファイルに分散してしまう場合がある。こうしたプログラムの移植性を高めるには、プログラム内に分散した環境依存部を特定し、それらを局所化することが望ましい。【０００５】
プログラム内に分散した環境依存部を特定するツールとして、MISRA（Motor Industry Software Reliability Associationの略で、登録商標）が開発したC言語向けコーディングガイドラインであるMISRA-Cのルールチェッカーなどが存在する。MISRA-Cはプログラムの安全性、移植性、および信頼性の確保を目的としたコーディングガイドラインであり、環境依存部を特定するための様々なルールを含んでいる。また、例えば特許文献１のように、16進数で表されるアドレスを格納する変数をハードウェアレジスタ変数と推定することでマイコン依存部を抽出する技術がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１４−８９５６８
【発明の概要】
【発明が解決しようとする課題】
【０００７】
MISRA-Cチェッカーや特許文献１記載の環境依存部抽出技術を利用すれば、プログラムの環境依存部を特定することが可能である。しかし一方で、特定した環境依存部の数が非常に多い場合、下記に挙げる課題がある。【０００８】
・環境依存部がどの程度、複数のファイルやディレクトリに分散しているのか判断が難しい
・環境依存部を局所化するために必要な修正工数の見積もりが難しい
・どの環境依存部から局所化を進めれば良いのか判断が難しい
本発明は上記課題の解決を目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するための、本願発明の一側面は、入力装置、出力装置、演算装置、および記憶装置を有するプログラム依存部可視化装置である。この装置において、演算装置は、記憶装置に記憶された、あるいは、入力装置から入力される、環境依存部データを利用可能に構成される。環境依存部データは、例えば、所定のプロジェクト、または、所定のデータベースに属する複数のプログラムに関する情報を含み、プログラムの其々を特定する情報と、プログラム中に含まれる環境依存部に関するデータの組を有している。演算装置は、可視化処理部と、環境依存部集計処理部と、局所化工程算出処理部と、環境依存度算出処理部を備えている。【００１０】
環境依存部集計処理部は、環境依存部データに基づいて、プログラムごとに環境依存部を特定する。局所化工数算出処理部は、特定された環境依存部の情報に基づいて、特定された環境依存部ごとに局所化工数を算出する。可視化処理部は、算出された局所化工数に基づいて、プログラムごとに局所化工数の値を集計する。環境依存度算出処理部は、集計されたプログラムごとの局所化工数の値に基づいて、事象の集中度合いを把握するためのローレンツ曲線およびジニ係数を算出し、出力装置は、前記算出されたローレンツ曲線およびジニ係数に基づいた情報を表示する。【００１１】
環境依存部データは、たとえばテーブル形式のデータベースであり、プログラムの其々を特定する情報として、ファイル名およびモジュール名の少なくとも一つを有する。プログラム中に含まれる環境依存部に関するデータとしては、例えば、環境依存部の種類を示す環境依存種を有する。また、各環境依存部の存在するプログラムの行を示す情報を含んでもよい。環境依存種としては、例えばchar型符号、シフト演算、int型長、エンディアンのような種々の定義が考えられる。【００１２】
可視化処理部は、ユーザに、ファイル名およびモジュール名の少なくとも一つを、可視化単位として指定させる機能を有してもよい。また、好ましい例としては、環境依存部集計処理部は、可視化単位毎に、環境依存種に応じた環境依存部の数を集計し、局所化工数算出処理部は、環境依存部の数を示す情報および環境依存部の種類を示す環境依存種の少なくとも一つを用いて、特定された環境依存部ごとに局所化工数を算出する。これにより、環境依存部の種類ごとに、工数を評価することができる。【００１３】
また、さらに好ましい例としては、前記演算装置は、記憶装置に記憶された、あるいは、入力装置から入力される、プログラム構造データを利用可能に構成される。プログラム構造データは、複数のプログラムに関する情報を含み、プログラムの其々を特定する情報と、プログラムの機能、特性、複雑度、および規模に関する情報の少なくとも一つに関するデータの組を有している。局所化工数算出処理部は、プログラムの機能、特性、および規模に関する情報の少なくとも一つを用いて、特定された環境依存部ごとに局所化工数を算出する。【００１４】
以上のように、本発明の好適な具体例では、環境依存部の局所化工数を、環境依存部のデータやプログラムの構造データを用いて算出する。環境依存部のデータからは、プログラム中の環境依存部の数や種類が特定できる。また、プログラムの構造データからは、環境依存部が存在するプログラムの機能、特性、複雑度、規模等が特定できる。これらの情報を用いると、各環境依存部を局所化するための工数を推測することができる。そして、推測した工数を、ローレンツ曲線およびジニ係数を用いて表示することにより、所定のプロジェクトやデータベースに属する一群のプログラムのうち、いずれのプログラムから局所化処理を行うのが効果的かを判断することができる。【００１５】
本発明の他の側面は、入力装置、出力装置、演算装置、および記憶装置を有する情報処理装置を用いて行うプログラム依存部可視化方法である。演算装置は、記憶装置に記憶された、あるいは、入力装置から入力される、環境依存部データを利用可能である。環境依存部データは、複数のプログラムに関する情報を含み、プログラムの其々を特定する情報と、プログラム中に含まれる環境依存部に関するデータの組を有している。【００１６】
演算装置は、環境依存部データに基づいて、プログラムごとに環境依存部を特定する環境依存部数集計ステップと、特定された環境依存部の情報に基づいて、特定された環境依存部ごとに局所化工数を算出する局所化工数算出ステップと、算出された局所化工数に基づいて、プログラムごとに局所化工数の値を集計する局所化工数集計ステップと、集計されたプログラムごとの局所化工数の値に基づいて、事象の集中度合いを把握するためのローレンツ曲線およびジニ係数を算出する可視化ステップを実行する。出力装置は、算出されたローレンツ曲線およびジニ係数を表示する。【００１７】
本発明の他の側面は、入力装置、出力装置、演算装置、および記憶装置を有する情報処理装置を、外部からの指示に応じてプログラムの環境依存部を可視化する手段として機能させるプログラム依存部可視化プログラムである。このプログラムは、情報処理装置を、データベースプログラムから読み込んだ環境依存部データを基にプログラムの環境依存部を特定し、プログラムを構成するソースファイルまたはソースファイルを含むディレクトリ毎に環境依存部の数を集計する環境依存部集計処理部と、環境依存部集計処理部によって集計された環境依存部の数を基にローレンツ曲線を可視化する可視化処理部と、を備えるごとく機能させる。可視化処理とは、ローレンツ曲線そのものを画像表示する処理、および、ローレンツ曲線に基づいたデータを表示する処理を含む。【００１８】
また、このプログラムは、好ましくは、情報処理装置を、データベースプログラムから読み込んだ環境依存部データから環境依存部の種類を特定し、外部からの指示に応じて環境依存部の種類毎に環境依存部の数を集計する前記環境依存部集計処理部と、環境依存部集計処理部が環境依存部の種類毎に集計した環境依存部の数を基にローレンツ曲線を可視化する前記可視化処理部と、を備えるごとく動作させる。【００１９】
また、このプログラムは、好ましくは、情報処理装置を、データベースプログラムから読み込んだ環境依存部データから環境依存部を含むモジュールを特定し、モジュールが含む環境依存部の数および種類を基に環境依存部の局所化工数を算出する局所化工数算出処理部と、局所化工数と環境依存部集計処理部が集計した環境依存部の数を基にローレンツ曲線を可視化する前記可視化処理部と、を備えるごとく動作させる。【００２０】
また、このプログラムは、好ましくは、情報処理装置を、データベースプログラムから読み込んだプログラム構造データから、モジュールのスコープおよびメトリクスおよび依存関係を特定し、これらのデータを基に環境依存部の局所化工数を算出する局所化工数算出処理部と、局所化工数と環境依存部集計処理部が集計した環境依存部の数を基にローレンツ曲線を可視化する可視化処理部と、を備えるごとく動作させる。
【発明の効果】
【００２１】
本発明によれば、プログラムの環境依存部がどの程度、複数のファイルに分散しているのかを容易に判断できる。上記した以外の効果については実施例の説明により明らかにする。
【図面の簡単な説明】
【００２２】
【図１】本発明のハードウェア構成の例を示すブロック図
【図２】本発明のソフトウェア構成の例を示す機能ブロック図
【図３】環境依存部データ２１１を表すデータベーステーブルの例を示す表図
【図４】プログラム構造データ２１２を表すデータベーステーブルの例を示す表図
【図５】環境依存部の基本的な可視化処理を示したフローチャート図
【図６】ステップ５０７で可視化するローレンツ曲線の例を示すグラフ図
【発明を実施するための形態】
【００２３】
以下、本発明の実施形態を、図面を用いて詳細に説明する。ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【００２４】
以下に説明する発明の構成において、同一部分又は同様な機能を有する部分には同一の符号を異なる図面間で共通して用い、重複する説明は省略することがある。
【００２５】
本明細書等における「第１」、「第２」、「第３」などの表記は、構成要素を識別するために付するものであり、必ずしも、数または順序を限定するものではない。また、構成要素の識別のための番号は文脈毎に用いられ、一つの文脈で用いた番号が、他の文脈で必ずしも同一の構成を示すとは限らない。また、ある番号で識別された構成要素が、他の番号で識別された構成要素の機能を兼ねることを妨げるものではない。
【００２６】
図面等において示す各構成の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面等に開示された位置、大きさ、形状、範囲などに限定されない。
【００２７】
本明細書において単数形で表される構成要素は、特段文脈で明らかに示されない限り、複数形を含むものとする。
【実施例】
【００２８】
図１は、本発明のハードウェア構成の例である。情報処理装置１００のハードウェアとして、中央演算装置１０１、キーボードやマウス等の入力装置１０２、ハードディスク等の二次記憶装置１０３、DRAM等の主記憶装置１０４、ディスプレイ等の表示装置１０５、及び通信装置１０７を有する。尚、各装置は、バス１０６によって接続され、各装置間で相互にデータの送受信が可能である。また、情報処理装置１００は、情報処理装置１００と同様のハードウェア構成を持つ別の情報処理装置１１０と、インターネット等の通信ネットワーク１２０を解して接続できる。上記はハードウェア構成の一例であり、これに限定するものではない。【００２９】
図２は、本発明のソフトウェア構成の例である。プログラム依存部可視化プログラム２００は本発明に係るプログラム図を可視化するプログラムであり、可視化処理部２０１、環境依存部集計処理部２０２、局所化工数算出処理部２０３、環境依存度算出処理部２０４により構成される。プログラム抽象図作成プログラム２００の処理内容については図５で詳細を述べる。【００３０】
データベースプログラム２１０は、任意のデータを格納可能な一般的なデータベースプログラムであり、本発明では環境依存部データ２１１およびプログラム構造データ２１２を格納する。環境依存部データ２１１は図３で、プログラム構造データ２１２は図４でそれぞれ詳細を述べる。データベースプログラム２１０の利用は必須ではなく、代わりに二次記憶装置１０３に環境依存部データ２１１およびプログラム構造データ２１２をファイルデータとして格納してもよい。また、環境依存部データ２１１は本発明で必須のデータであるが、プログラム構造データ２１２は存在しなくても構わない。【００３１】
プログラム依存部可視化プログラム２００およびデータベースプログラム２１０は、情報処理装置の二次記憶装置１０３に保管されるプログラムであり、中央演算装置１０１によって主記憶装置１０４に読み込まれ、実行されるプログラムである。これらのプログラムの実行にはOS(Operating System)等が関与するが、これは自明であるため、説明及び記載は省略する。また、これらのプログラムは同じ情報処理装置１００上で実行されてもよく、ネットワーク１２０を介した別の情報処理装置１００および１１０上でそれぞれ別々に実行されていてもよい。【００３２】
図３は、環境依存部データ２１１を表すデータベーステーブルの例である。環境依存部データとは、MISRA-Cチェッカー等の環境依存部抽出機能を持った解析ツールを用いて抽出した環境依存部を表すデータである。利用する解析ツール、および解析結果のデータベースへの格納手段は様々であるため、ここでは説明を省略する。【００３３】
カラム３０１は、プログラムを構成するソースコードのファイル名を格納するカラムである。カラム３０２は、ソースコード内に定義されている各種モジュールの名前を格納するカラムである。例えば、関数名や変数名、マクロ名などがモジュール名に該当する。カラム３０３は、ソースコード内における環境依存部の位置を示すための行番号を格納する。カラム３０４は、環境依存部の種類（以下、環境依存種と記載）を表す文字列を格納する。例えば、C言語ではchar型（プログラミング言語のデータ型の一つで、文字を一つ格納するためのデータ型）のデフォルトの符号（signedかunsignedか）は環境依存で決定するため、char型の宣言を行っている箇所は「char型符号」の環境依存部であると分類できる。他には、int型（プログラミング言語のデータ型の一つで、整数を格納するためのデータ型。符号の有無やデータ長によっていくつかの種類がある）のビット幅（16ビットか32ビット等）やエンディアン（メモリの中にデータを置く順番で、配列の順番によりビッグかリトルかの種類がある）、シフト演算などが依存種の一例である。図３で示した環境依存部データ２１１の構成は一例であり、この形式に限定するものではない。前述のMISRA-Cチェッカー等の解析ツールで抽出できる種々の環境依存部を格納することができる。【００３４】
環境依存部データ２１１は、あらかじめソースコードを解析ツールで解析した結果に基づいて、人手もしくは自動的に作成し、情報処理装置１１０の記憶装置に格納しておく。【００３５】
図４は、プログラム構造データ２１２を表すデータベーステーブルの例である。プログラム構造データとは、Doxygen等のプログラム構造解析ツールを用いて解析したプログラムの構造を表すデータである。利用する解析ツール、および解析結果のデータベースへの格納手段は様々であるため、ここでは説明を省略する。【００３６】
カラム４０１は、カラム３０１と同様にプログラムを構成するソースコードのファイル名を格納するカラムである。カラム４０２は、カラム３０２と同様に、ソースコード内に定義されている各種モジュールの名前を格納するカラムである。カラム４０３は、“関数”や“変数”や”マクロ”といったモジュールの種類を表す文字列を格納するカラムである。カラム４０４は、static（そのファイルからしかアクセスできない）やglobal（どのファイルからでもアクセスできる）といったモジュールのスコープを表す文字列を格納するカラムである。カラム４０５は、当該カラムのモジュールが参照（呼び出しや読み込み等）する他のモジュールの識別子を表す文字列を格納するカラムである。図４では記載を簡略化するため、カラム４０５にモジュール名を記載しているが、モジュールを一意に識別することができればこれに限らない。図４で示したプログラム構造データ２１２の構成は一例であり、この形式に限定するものではない。前述のDoxygen等の解析ツールで解析できる種々のデータを格納することができる。上に示した以外のデータとして、例えばモジュールの複雑度や行数といったメトリクスデータ４０６もプログラム構造データ２１２に含むことが考えられる。図４ではメトリクスデータ４０６として行数を格納している。プログラム構造データ２１２は、あらかじめプログラムを解析ツールで解析した結果に基づいて、人手もしくは自動的に作成し、情報処理装置１１０の記憶装置に格納しておく。【００３７】
図５は、環境依存部の基本的な可視化処理を示したフローチャートである。  ステップ５００は環境依存部の可視化処理を開始するステップである。プログラム依存部可視化プログラム２００の可視化処理部２０１は、ユーザのGUI操作や他のモジュールからのAPIコールといった一般的なプログラム呼び出し操作を受け、可視化処理を開始する。【００３８】
ステップ５０１は、可視化する対象（環境依存種、可視化単位、プログラムなど）を可視化処理部２０１が決定するステップである。環境依存種とは、本実施例では環境依存部データ２１１のカラム３０４に格納されるデータである。可視化単位とは、例えばソースファイル単位で可視化する場合は「ファイル単位」、ソースファイルを格納するディレクトリ単位で可視化する場合は「ディレクトリ単位」といった文字列データを表す。プログラムとは、可視化対象のプログラムを構成するソースコード一式であり、多くの場合、ソースコード全体を含んだルートディレクトリを指す。【００３９】
まず初めに、可視化処理部２０１は、データベースプログラム２１０から環境依存部データ２１１を取得し、主記憶装置１０４に記憶する。但し、この記憶処理は、既にデータが主記憶装置１０４に記憶されている場合は不要である。また、全ての環境依存部データ２１１を一度に主記憶装置１０４に記憶する方式もあれば、必要に応じてデータベースプログラム２０９から読み込む方式もある。以下、単に環境依存部データ２１１と記載した場合は本ステップで主記憶装置１０４に記憶したデータのことを指す。【００４０】
次に、可視化処理部２０１は、GUI等を通じて環境依存種および可視化単位のデータをユーザに提示し、ユーザはGUI入力操作等を通じて可視化する環境依存種および可視化単位のデータを可視化処理部２０１に入力する。ユーザが選択可能な可視化単位とそれに対応する可視化ロジックは、プログラム依存部可視化プログラム２００の挙動と密接に関係するため、本実施例ではプログラム依存部可視化プログラム２００にハードコーディングされていることを想定するが、これに限るものではない。例えば一般的なプラグイン形式で後からプログラム依存部可視化プログラム２００に可視化単位およびロジックを追加することも可能である。【００４１】
ステップ５０２は、ステップ５０１で決定した可視化対象毎に環境依存部の数を集計するステップである。可視化処理部２０１は、ステップ５０１で決定した可視化対象データ（環境依存種、可視化単位）およびステップ５０１で読み込んだ環境依存部データ２１１を環境依存部集計処理部２０２に出力する。環境依存部集計処理部２０２は、可視化単位毎に環境依存種に応じた環境依存部の数を集計する。【００４２】
例えば環境依存種が「char型符号」、可視化単位が「ファイル単位」であった場合、環境依存種「char型符号」に合致する環境依存部データ２１１の数をソースファイル毎に集計する。図３を用いて説明すると、「FileA」には「char型符号」の環境依存種が1つ存在するが、「FileB」には1つも存在しない。この場合、「FileA」の環境依存部の数は「1」であり、「FileB」の環境依存部の数は「0」である。同様に、全てのソースファイルについて、環境依存部の数を集計する。本ステップで環境依存部集計処理部２０２が集計したデータは、可視化処理部２０１に出力される。【００４３】
ステップ５０３は、データベースプログラム２１０にプログラム構造データ２１２が格納されているかどうかを可視化処理部２０１が判定するステップである。当該データ２１２が格納されている場合はステップ５０４に、格納されていない場合はステップ５０５に進む。【００４４】
ステップ５０４は、ステップ５０３でプログラム構造データ２１２が見つかった場合の処理を行うステップである。まず初めに、可視化処理部２０１は、データベースプログラム２１０からプログラム構造データ２１２を取得し、主記憶装置１０４に記憶する。これはステップ５０１で環境依存部データ２１１を読み込む場合と同様である。次に、可視化処理部２０１は読み込んだプログラム構造データ２１２およびステップ５０１で読み込んだ環境依存部データ２１１を局所化工数算出処理部２０３に出力する。【００４５】
次に、局所化工数算出処理部２０３は、プログラム構造データ２１２に格納されているデータを基に、環境依存部データ２１１に格納されている環境依存部毎の局所化工数を算出する。例えば、環境依存部が以下のような構造を持つモジュール（関数や変数、ファイル等）内に存在する場合、当該環境依存部の局所化工数は大きいと判断する。
Staticなグローバル変数にアクセスしている
Staticな関数にアクセスしている
他のモジュールから参照されている（依存関係にある）
例えばStaticな変数はファイルの中からしかアクセスできない変数であり、これにアクセスしていると、局所化する場合そのファイルを別の場所に移動することができない。よって、上記のような制約のあるモジュールは、局所化（ソースファイルを変更）する工数が大きいと判断できる。よって、ステップ５０４では、このようなモジュール内に含まれる環境依存部の局所化工数を、一定の重み付けにより算出する。【００４６】
例えば、当該モジュール内に含まれない環境依存部の局所化工数をデフォルトの「1」とし、当該モジュール内に含まれる環境依存部の局所化工数を「1.5」にするといった算出方法が考えられる。局所化の難易度を高めるプログラム構造の種類と、局所化工数の増分の関係は複雑であり、一意に決定することはできない。これは過去の経験や、過去の実績を基にプログラム依存部可視化プログラム２００のユーザまたは当該プログラム自身が算出する方法が考えられるが、本発明では算出方法を限定しない。【００４７】
以上のように、プログラム構造データ２１２を用いると、局所化工数の大きさを評価できるが、プログラム構造データ２１２に基づく局所化工数の算出工程５０４を省略することもできる。【００４８】
ステップ５０５は、環境依存部データ２１１のデータを基に環境依存部毎の局所化工数を算出するステップである。この処理は局所化工数算出処理部２０３が実行する。ステップ５０３でプログラム構造データ２１２が見つからなかった場合、可視化処理部２０１がステップ５０１で読み込んだ環境依存部データ２１１を局所化工数算出処理部２０３に出力する。ステップ５０４からステップ５０５に遷移した場合は、局所化工数算出処理部２０３がステップ５０４に続き本ステップの処理を実行する。【００４９】
本ステップでは、例えば、ある関数内に依存種が異なる2つの環境依存部が含まれる場合、この関数の局所化工数は大きいと判断する。これは、当該関数の内部に2つの異なる環境依存部が存在するため、これらを別々のソースファイルに局所化するためには、当該関数を2つに分割する必要が出てくるためである。よって、例えば図３で同一モジュール内に環境依存部が1つしかないModuleBの場合は、当該環境依存部の局所化工数をデフォルトの「1」とし、当該モジュール内に2つの環境依存部が存在するModuleAの場合は、局所化工数を「2」にするといった算出方法が考えられる。【００５０】
また、依存種の種類に応じて局所化工数を算出する方法も考えられる。例えば、「int型長」など、マクロでビット長を明記すれば解決する依存種であれば局所化工数を低く算出することができる。また、メトリクスデータ４０６を利用して局所化工数を算出する方法も考えられる。例えばメトリクスデータにより、モジュールの行数が多いことが検出できれば、そのモジュールの局所化工数は大きいと判断できる。【００５１】
環境依存部データ２１２のデータと局所化工数の増分の関係は複雑であり、ステップ５０４の場合と同様、一意に決定することはできない。本発明では、この算出方法は特に限定しないが、環境依存部データ２１１に出現が想定される所定条件に対応して、重み付を定めたルールを予め規定しておき、局所化工数算出処理部２０３の記憶部に記憶しておく。局所化工数算出処理部２０３は、入力された環境依存部データ２１１について、ルールを参照して判断を行う。なお、簡易な方法では、上記の重み付計算を行わず、単純に環境依存部が含まれるモジュールの数、あるいは環境依存部の数をカウントすることも考えられる。【００５２】
ステップ５０６は、ステップ５０４およびステップ５０５で算出した局所化工数の値を可視化対象毎に集計するステップである。この処理は可視化処理部２０１が実行する。例えば、可視化単位が「ファイル単位」の場合、ソースファイル内に含まれる環境依存部（可視化対象の環境依存種に該当する全ての環境依存部）の局所化工数の総和を算出する。【００５３】
ステップ５０７は、ステップ５０６までに算出した可視化対象毎の局所化工数の総和を基に、ローレンツ曲線を可視化するステップである。ローレンツ曲線は、ある事象の集中度合い（分散度合い）を可視化するための曲線であり、主に多国間の経済格差を可視化するために利用される。本発明では、プログラムの環境依存部が、一部のソースファイルにどの程度集中して（局所化されて）いるのかをローレンツ曲線で表現する。【００５４】
図６は、ステップ５０７で可視化するローレンツ曲線６００の例である（図６では可視化単位が３つで、プロット数が少ないため、厳密には曲線にはなっていない）。可視化単位であるソースA〜Cは、それぞれソースファイルを表している（図３および図４記載のFileA等とは無関係である）。表のX軸は一般のローレンツ曲線では累積ソース数となるが、図６には、局所化工数の総和が少ない順にソースファイル（可視化対象）を並べている。例えばソースAの局所化工数の総和は「1」、ソースBの局所化工数の総和は「2」、ソースCの局所化工数の総和は「9」といったように少ない順にソースファイル名が並んでいる。このためには、図５のステップ５０４〜５０６でソース毎の局所化工数を集計した後、局所化工数の小さい順にソートし、図６のグラフの原点に近いほうから順番にソースをプロットすればよい。図６ではソースA〜Cを等間隔にプロットしているが、これに限るものではない。【００５５】
表のY軸には、局所化工数の総和の累積比率をプロットしている。例えばソースAの局所化工数は「1」のため、局所化工数の累積比率は「8％」、ソースBの局所化工数は「2」のため、局所化工数の累積比率（“ソースAの局所化工数「1」＋ソースBの局所化工数「2」”を全体の局所化工数の総和「12」で除算した割合）は「25％」といったようにプロットする。本実施例ではソースA〜Cの3つのファイルのみでプログラムが構成されているため、ソースCの累積比率は必ず100％になる。【００５６】
仮に全ての環境依存部の局所化工数が等しく、全てのファイルに環境依存部が等しく分散している場合、図６のローレンツ曲線６００とグラフの対角線（均等分配線）６０１の間の部分(iv)の面積は、「0」になる。逆に、ソースCに全ての環境依存部が集中して（局所化されて）いる場合、（i）（ii）（iii）の面積は「0」になり、(iv)の面積は最大になる。この(iv)の面積は「ジニ係数」と呼ばれ、ローレンツ曲線における事象の集中度合いを定量化した値となる。つまり、ジニ係数が小さいほど事象の集中度合い（局所化度合い）は低く、大きいほど集中度合い（局所化度合い）は高くなる。このジニ係数を用いることで、プログラムの環境依存度を定量化することができる。但し、環境依存度が高いほど大きな値を算出するには、ジニ係数ではなく（i）（ii）（iii）の面積の合計を用いる方が良い。本実施例では、図６に示すように（i）（ii）（iii）の面積の合計を環境依存度として算出する。当該算出処理は、可視化処理部２０１からの指示により環境依存度算出処理部２０４が実行する。算出された環境依存度は、図６に示すように画面上部に表示するなどして可視化する。図６のようにローレンツ曲線を応用することで、プログラムの環境依存部がどの程度、複数のファイルやディレクトリに分散しているかを可視化することができる。また、環境依存部の局所化効果は、ローレンツ曲線のジニ係数を基に算出することができる。【００５７】
ステップ５０７では、環境依存度算出処理部２０４は、さらに環境依存部の局所化効果を算出して可視化する。環境依存部の局所化効果は、図６に示すように、当該環境依存部を局所化した際の、局所化前後の環境依存度の差分を基に求めることで算出する。例えばソースAの環境依存部をソースCに局所化した場合、ソースAの環境依存部の数は0になり、（i）の面積が0になる。同様に、（ii）の面積と（iii）の面積も減少する（Y軸は累積比率であるため、原点に近いソースAの環境依存部が局所化されると（ii）と（iii）の面積も減少する）。局所化後の（i）（ii）（iii）の面積から局所化前の（i）（ii）（iii）の面積を減算した値が、ソースAに含まれる環境依存部の局所化効果となる。この算出方法に従えば、より原点に近く（ファイル内に存在する環境依存部の数が少なく）、より局所化工数の大きな（設計の再検討が必要な）環境依存部ほど局所化した際の効果が高くなる。局所化は、環境依存部を含んだファイルの数を少なくすることが目的であるため、この方式に従えば、より効率的に局所化作業を進めることが可能となる。【００５８】
局所化効果の可視化方法は様々であり、例えばマウスポインタをソースAの上に移動させた際に、ソースAを局所化した場合の局所化効果をポップアップで表示することが考えられる。あるいは、ローレンツ曲線の右横に、各ソースを局所化した場合の局所化効果を、表形式で一覧表示したりするなどの可視化方法が考えられる。当該算出処理は、可視化処理部２０１からの指示により環境依存度算出処理部２０４が実行する。【００５９】
図６のようにローレンツ曲線を用いて局所化工数を可視化すると、直感的に環境依存部の分布を把握することが容易となる。また、ローレンツ曲線のグラフそのものを表示することに限らず、ローレンツ曲線やジニ係数に基づく数値を、他の形式で表示してもよい。【００６０】
ステップ５０８は、ステップ５００で開始した可視化処理を終了するステップである。可視化処理部２０１は、GUI等を通じてプログラム依存部可視化プログラム２００のユーザに対し、可視化を終了するためのボタン表示を行うなどして可視化を終了する。【００６１】
以上、本発明の一般的な実施例を記載したが、本実施例に記載した可視化方法は一例であり、その処理内容や処理手順を限定するものではない。【００６２】
以上で述べた本実施例では、ソースコード中のマイコン依存部がどの程度分散しているか、または局所化されているかを、定量的に可視化することができる。また、一部のソースを、マイコンフリー化した際の効果を定量的に可視化することができる。これにより、作業の優先度の判断を容易にできるという効果がある。すなわち具体的には、プログラムの環境依存部がどの程度、複数のファイルに分散しているのかを目視により容易に判断できる。また、環境依存部を局所化するための開発工数の見積もりを自動化することができる。また、どの環境依存部から局所化していけば効率的に移植作業を行えるのかについて明確な指針を示すことができる。【００６３】
以上の構成は、単一のコンピュータで構成してもよいし、あるいは、入力装置、出力装置、処理装置、記憶装置の任意の部分が、ネットワークで接続された別個のコンピュータで構成されてもよい。また、環境依存部データやプログラム構造データは、コンピュータからアクセス可能であればよく、物理的な所在は問わない。また、環境依存部データやプログラム構造データは、単一のデータベースでもよいし、互いに関連付けられたデータを有する複数のデータベースから構成してもよい。【００６４】
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の実施例の構成の追加・削除・置換をすることが可能である。  また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、SSD（Solid State Drive）等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。【００６５】
また、図中の線や点線は説明上必要と考えられるものを示しており、必ずしも全ての線や点線を図示しているとは限らない。
【産業上の利用可能性】
【００６６】
プログラムの構造や特徴を可視化する技術に利用可能である。
【符号の説明】
【００６７】
１００：情報処理装置
１０１：中央演算装置
１０２：入力装置
１０３：二次記憶装置
１０４：主記憶装置
１０５：表示装置
１０６：バス
１０７：通信装置
２０１：可視化処理部
２０２：環境依存部集計処理部
２０３：局所化工数算出処理部
２０４：環境依存度算出処理部
２１１：環境依存部データ
２１２：プログラム構造データ
【図１】
2016088271.tif 000003
【図２】
2016088271.tif 000004
【図３】
2016088271.tif 000005
【図４】
2016088271.tif 000006
【図５】
2016088271.tif 000007
【図６】
2016088271.tif 000008
【国際調査報告】
2016088271.tif 000009
2016088271.tif 000010
2016088271.tif 000011
2016088271.tif 000012