(57)【要約】モジュールが利用する機能に関する情報を活用して、分割可能なモジュールを自動で抽出する、モジュール分割支援装置、モジュール分割支援方法、及びモジュール分割支援プログラムを提供する。  情報処理装置のキーワード取得部は、モジュールが利用している機能に関するデータをモジュール別キーワード使用データへ収集し、データ解析部は、データと、不可分度算出項目リストに格納されたユーザ指定の不可分度算出項目算出方法を用いて、不可分度を算出し、不可分度を不可分度データへ格納する。そして、モジュール分割判定部が、分割判定対象モジュールに対し、ユーザ指定の不可分度算出項目に関係する機能に関する不可分度と、不可分度算出項目リストに格納された閾値とを比較する事で、モジュール分割可能か否かを判定する。
2016092677.tif 000002
【特許請求の範囲】
【請求項１】
入力装置、出力装置、演算装置、および記憶装置を有し、ソースコード中のモジュールを分割するモジュール分割支援装置であって、
前記演算装置は、前記記憶装置に記憶された、あるいは、前記入力装置から入力される、キーワードカテゴリ表と不可分度算出項目リストを利用可能であり、
前記キーワードカテゴリ表は、キーワードと、前記キーワードに対応するカテゴリのデータの組を複数組含み、
前記不可分度算出項目リストは、前記カテゴリのうち第１のカテゴリと第２のカテゴリの間の不可分度算出項目と、前記不可分度算出項目の算出方法に関する情報の組を含み、
前記演算装置は、ソースコード取得部と、キーワード取得部と、データ解析部と、モジュール分割判定部を備え、
前記ソースコード取得部は、前記記憶装置に記憶された、あるいは、前記入力装置から入力される、一群のソースコードおよび可視化対象となるソースコードを取得し、
前記キーワード取得部は、前記一群のソースコード中のモジュール毎に、当該モジュールに含まれる前記キーワードを特定して、モジュール別キーワード使用データを作成し、
前記データ解析部は、前記不可分度算出項目リストに格納された前記算出方法と、前記モジュール別キーワード使用データに格納されたデータと、前記キーワードカテゴリ表に含まれるキーワードに対応するカテゴリに関する情報を用いて、前記第１のカテゴリと第２のカテゴリについての不可分度を算出し、不可分度データを作成し、
前記モジュール分割判定部は、前記可視化対象となるソースコード中の各モジュール内に存在する前記キーワードを特定し、前記各モジュールのうち、所定閾値を下回る前記不可分度を有する第１のカテゴリと第２のカテゴリに対応するキーワードの組を有するモジュールを特定する、
ことを特徴とするモジュール分割支援装置。
【請求項２】
請求項１において、
前記カテゴリは、前記キーワードが関連する機能名であり、
前記データ解析部は、前記不可分度として、前記第１のカテゴリと第２のカテゴリの関連度、または、前記第１のカテゴリと第２のカテゴリの利用順の割合、を算出する、
ことを特徴とするモジュール分割支援装置。
【請求項３】
請求項１において、
前記モジュール分割判定部は、前記所定閾値として、前記入力装置から入力される閾値、または、前記不可分度算出項目リストの各情報の組に付随する閾値を用いる、
ことを特徴とするモジュール分割支援装置。
【請求項４】
請求項１において、
前記モジュール分割判定部は、前記可視化対象となるソースコード中の各モジュールのうち、あるモジュールが含むキーワードに対応したカテゴリ同士の不可分度が、全て前記所定閾値を下回る場合、当該モジュールを分割可能なモジュールと判定し、それ以外を分割可能でないモジュールと判定する、
ことを特徴とするモジュール分割支援装置。
【請求項５】
請求項１において、
前記可視化対象となるソースコード中のモジュールを絞り込むために、絞り込み条件を定義したモジュール絞り込み判定リストを利用可能であり、
前記モジュール分割判定部は、前記絞り込み条件に該当するモジュールについて、前記モジュールを特定する処理を行う、
ことを特徴とするモジュール分割支援装置。
【請求項６】
入力装置、出力装置、演算装置、および記憶装置を用いて、ソースコード中のモジュールを分割するモジュール分割支援方法であって、
前記演算装置は、前記記憶装置に記憶された、あるいは、前記入力装置から入力される、キーワードカテゴリ表と不可分度算出項目リストを利用可能であり、
前記キーワードカテゴリ表は、キーワードと、前記キーワードに対応するカテゴリのデータの組を複数組含み、
前記不可分度算出項目リストは、前記カテゴリのうち第１のカテゴリと第２のカテゴリの間の不可分度算出項目と、前記不可分度算出項目の算出方法に関する情報の組を含み、
前記演算装置は、ソースコード取得部と、キーワード取得部と、データ解析部と、モジュール分割判定部を備え、
前記ソースコード取得部は、前記記憶装置に記憶された、あるいは、前記入力装置から入力される、一群のソースコードおよび可視化対象となるソースコードを取得し、
前記キーワード取得部は、前記一群のソースコード中のモジュール毎に、当該モジュールに含まれる前記キーワードを特定して、モジュール別キーワード使用データを作成し、
前記データ解析部は、前記不可分度算出項目リストに格納された前記算出方法と、前記モジュール別キーワード使用データに格納されたデータと、前記キーワードカテゴリ表に含まれるキーワードに対応するカテゴリに関する情報を用いて、前記第１のカテゴリと第２のカテゴリについての不可分度を算出し、不可分度データを作成し、
前記モジュール分割判定部は、前記可視化対象となるソースコード中の各モジュール内に存在する前記キーワードを特定し、前記各モジュールのうち、所定閾値を下回る前記不可分度を有する第１のカテゴリと第２のカテゴリに対応するキーワードの組を有するモジュールを特定する、
ことを特徴とするモジュール分割支援方法。
【請求項７】
請求項６において、
前記カテゴリは、前記キーワードが関連する機能名であり、
前記データ解析部は、前記不可分度として、前記第１のカテゴリと第２のカテゴリの関連度、または、前記第１のカテゴリと第２のカテゴリの利用順の割合、を算出する、
ことを特徴とするモジュール分割支援方法。
【請求項８】
請求項６において、
前記モジュール分割判定部は、前記所定閾値として、前記入力装置から入力される閾値、または、前記不可分度算出項目リストの各情報の組に付随する閾値を用いる、
ことを特徴とするモジュール分割支援方法。
【請求項９】
請求項６において、
前記モジュール分割判定部は、前記可視化対象となるソースコード中の各モジュールのうち、あるモジュールが含むキーワードに対応したカテゴリ同士の不可分度が、全て前記所定閾値を下回る場合、当該モジュールを分割可能なモジュールと判定し、それ以外を分割可能でないモジュールと判定する、
ことを特徴とするモジュール分割支援方法。
【請求項１０】
請求項６において、
前記可視化対象となるソースコード中のモジュールを絞り込むために、絞り込み条件を定義したモジュール絞り込み判定リストを利用可能であり、
前記モジュール分割判定部は、前記絞り込み条件に該当するモジュールについて、前記モジュールを特定する処理を行う、
ことを特徴とするモジュール分割支援方法。
【請求項１１】
入力装置、出力装置、演算装置、および記憶装置を有する情報処理装置に、ソースコード中のモジュールを分割する処理を実行させるモジュール分割支援プログラムであって、
前記演算装置は、前記記憶装置に記憶された、あるいは、前記入力装置から入力される、キーワードカテゴリ表と不可分度算出項目リストを利用可能であり、
前記キーワードカテゴリ表は、キーワードと、前記キーワードに対応するカテゴリのデータの組を複数組含み、
前記不可分度算出項目リストは、前記カテゴリのうち第１のカテゴリと第２のカテゴリの間の不可分度算出項目と、前記不可分度算出項目の算出方法に関する情報の組を含み、
前記演算装置を、ソースコード取得部と、キーワード取得部と、データ解析部と、モジュール分割判定部を備えるごとく機能させ、
前記ソースコード取得部は、前記記憶装置に記憶された、あるいは、前記入力装置から入力される、一群のソースコードおよび可視化対象となるソースコードを取得し、
前記キーワード取得部は、前記一群のソースコード中のモジュール毎に、当該モジュールに含まれる前記キーワードを特定して、モジュール別キーワード使用データを作成し、
前記データ解析部は、前記不可分度算出項目リストに格納された前記算出方法と、前記モジュール別キーワード使用データに格納されたデータと、前記キーワードカテゴリ表に含まれるキーワードに対応するカテゴリに関する情報を用いて、前記第１のカテゴリと第２のカテゴリについての不可分度を算出し、不可分度データを作成し、
前記モジュール分割判定部は、前記可視化対象となるソースコード中の各モジュール内に存在する前記キーワードを特定し、前記各モジュールのうち、所定閾値を下回る前記不可分度を有する第１のカテゴリと第２のカテゴリに対応するキーワードの組を有するモジュールを特定する、
ことを特徴とするモジュール分割支援プログラム。
【請求項１２】
請求項１１において、
前記カテゴリは、前記キーワードが関連する機能名であり、
前記データ解析部は、前記不可分度として、前記第１のカテゴリと第２のカテゴリの関連度、または、前記第１のカテゴリと第２のカテゴリの利用順の割合、を算出する、
ことを特徴とするモジュール分割支援プログラム。
【請求項１３】
請求項１１において、
前記モジュール分割判定部は、前記所定閾値として、前記入力装置から入力される閾値、または、前記不可分度算出項目リストの各情報の組に付随する閾値を用いる、
ことを特徴とするモジュール分割支援プログラム。
【請求項１４】
請求項１１において、
前記モジュール分割判定部は、前記可視化対象となるソースコード中の各モジュールのうち、あるモジュールが含むキーワードに対応したカテゴリ同士の不可分度が、全て前記所定閾値を下回る場合、当該モジュールを分割可能なモジュールと判定し、それ以外を分割可能でないモジュールと判定する、
ことを特徴とするモジュール分割支援プログラム。
【請求項１５】
請求項１１において、
前記可視化対象となるソースコード中のモジュールを絞り込むために、絞り込み条件を定義したモジュール絞り込み判定リストを利用可能であり、
前記モジュール分割判定部は、前記絞り込み条件に該当するモジュールについて、前記モジュールを特定する処理を行う、
ことを特徴とするモジュール分割支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード内のモジュール、例えば関数分割が可能か否かを判定する、モジュール分割支援装置、モジュール分割支援方法、及びモジュール分割支援プログラムに関する。
【背景技術】
【０００２】
ファイルが適切に設計されず、関数が不適切なファイルに配置されている事があり、ソース可読性低下の原因となっている。特許文献１では、関数の評価ルール（ファイル内に含まれる関数名の類似度等）を用いて、判定対象の関数をファイルから分離するべきか否かを判定する方法が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開2007/219586
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１の方法では、関数内の解析を行わない為、関数の分割が可能か否かを判断する事が出来ず、関数レベルでのソース可読性を向上させる事が出来なかった。
【課題を解決するための手段】
【０００５】
上記課題を解決する為に、本発明のモジュール可視化判定は以下の手段を有するものである。【０００６】
本発明の一側面は、入力装置、出力装置、演算装置、および記憶装置を用いて、ソースコード中のモジュール（例えば、関数、変数、マクロ等のひとまとまりの機能・要素）を分割するモジュール分割支援方法、あるいは、そのための装置、およびプログラムである。【０００７】
演算装置は、記憶装置に記憶された、あるいは、入力装置から入力される、キーワードカテゴリ表と不可分度算出項目リストを利用可能である。キーワードカテゴリ表は、キーワードと、キーワードに対応するカテゴリのデータの組を複数組含む。例えば、カテゴリとして、キーワードに関連する機能を利用することができる。同じまたは関連する機能を有する部分は、なるべく一つのファイルに纏めたほうが、ソースコードの可読性は向上する。このため、機能に着目してキーワードを分類することで、ソースコードの整理がしやすくなる。あるいは、カテゴリとして、キーワードそのものを用いてもよい。この場合は、キーワードとカテゴリが一対一に対応する。より詳細な分析が可能となるが、結果の検討が煩雑になる場合もある。また、カテゴリを２以上に階層化してもよい。【０００８】
不可分度算出項目リストは、カテゴリのうち第１のカテゴリと第２のカテゴリの間の不可分度算出項目と、不可分度算出項目の算出方法に関する情報の組を含む。不可分度算出項目とその算出方法は、経験則に基づいて種々のルールを定めることができる。【０００９】
演算装置は、ソースコード取得部と、キーワード取得部と、データ解析部と、モジュール分割判定部を備える。【００１０】
ソースコード取得部は、記憶装置に記憶された、あるいは、入力装置から入力される、一群のソースコードおよび可視化対象となるソースコードを取得する。キーワード取得部は、一群のソースコード中のモジュール毎に、モジュールに含まれるキーワードを特定して、モジュール別キーワード使用データを作成する。モジュール別キーワード使用データは、一群のソースコードのモジュール中に出現するキーワード間の関連性を、統計的に集計したものである。一群のソースコードは、データが多いほど統計的精度は向上するが、データ処理量は大きくなる。また、一群のソースコードは、可視化対象となるソースコードと関連性の大きい集合であることが好ましい。典型的な例としては、可視化対象となるソースコードが属する、データベースまたはプロジェクトに属するソースコードの集合を一群のソースコードとして利用することが望ましい。【００１１】
データ解析部は、不可分度算出項目リストに格納された算出方法と、モジュール別キーワード使用データに格納されたデータと、キーワードカテゴリ表に含まれるキーワードに対応するカテゴリに関する情報を用いて、第１のカテゴリと第２のカテゴリについての不可分度を算出し、不可分度データを作成する。【００１２】
以上のソースコード取得部とデータ解析部による処理によって、キーワードに関連づけられたカテゴリ相互の不可分度が、不可分度データとしてデータベース化される。【００１３】
モジュール分割判定部は、可視化対象となるソースコード中の各モジュール内に存在するキーワードを特定し、各モジュールのうち、所定閾値を下回る不可分度を有する第１のカテゴリと第２のカテゴリに対応するキーワードの組を有するモジュールを特定する。この特定されたモジュールが、分割を検討すべき候補となる。【００１４】
なお、不可分度データをデータベース化する主体もしくは情報処理装置は、モジュール分割を判定する主体もしくは情報処理装置と別個であってもよい。【００１５】
本発明の好ましい具体例では、カテゴリとして機能を用いた場合、データ解析部は、不可分度として、第１の機能と第２の機能の関連度、または、第１の機能と第２の機能の利用順の割合、を算出する。【００１６】
閾値については、その都度オペレータが入力装置から入力することができる。この場合、閾値と変化させた結果をリアルタイムで確認することができる。または、不可分度算出項目リストの各情報の組に、あらかじめ閾値を付随させておいてもよい。【００１７】
可視化対象となるソースコード中のモジュールに含まれるキーワードに対するカテゴリは、２つとは限らず、３以上ある場合もある。この場合、あるモジュールが含むキーワードに対応したカテゴリ同士の不可分度が、全て前記所定閾値を下回る場合、当該モジュールを分割可能なモジュールと判定してもよい。このようなモジュールは、関連性のない部分が多く含まれることが推測され、優先的に分割を検討することが望ましい。【００１８】
本発明の好ましい具体例では、可視化対象となるソースコード中のモジュールを絞り込むために、絞り込み条件を定義したモジュール絞り込み判定リストを利用可能とする。モジュール分割判定部は、絞り込み条件に該当するモジュールについて特定する処理を行うことにより、処理量を少なくすることができる。絞り込み条件としては、種々の条件を経験的に定めておくことができる。モジュール絞り込み条件の具体的な例としては、使用機能あるいはキーワード数、機能あるいはキーワード間の最大行間数、LOC(Lines Of Code)、種々の指標で測定できる複雑度、修正回数、最後に修正してから経過した時間、開発に関わった人数、または開発者の開発レベル、経験、能力等を利用することができる。【００１９】
より具体的な例では、モジュール分割判定対象モジュールを絞り込むために、絞り込み条件を規定するモジュール絞り込み項目、と項目毎にモジュール絞り込みの閾値を記載したモジュール絞り込み判定データ、を備える。データ解析部は、モジュール絞り込み項目に従いモジュール絞り込みの値を算出し、モジュール絞り込みの値と、モジュール絞り込みの閾値と、を比較する。モジュール絞り込みの値が、モジュール絞り込みの閾値以上である場合に、モジュール分割判定を行い、閾値未満である場合に、モジュール分割判定を行わないように構成することができる。【００２０】
なお、モジュール分割判定に用いる閾値は複数用いることができ、判定条件も種々のものを組み合わせることができる。例えば、単一の閾値では分割可能なモジュールと判定されるモジュールであっても、不可分度の高い機能の組が複数別個に内在するモジュールである場合がある。本発明の他の好適な例では、モジュール分割判定部は、該不可分度の高い機能の組を抽出するとともに、当該不可分度の高い機能の組同士の不可分度を判定する機能を有する。このため、機能の組同士の不可分度が、所定閾値未満である場合に分割可能なモジュールと判定し、それ以外を分割可能でないモジュールと判定することが考えられる。【００２１】
また、本発明の他の観点は、可視化対象のソースコードを取得するソースコード取得部と、ソースコード、またはソースコードが属するプロジェクトに関係するソースコードや開発保守データに記述されているキーワードを取得するキーワード取得部とを備える。また、モジュール内に記述されるキーワードまたはキーワードが属する機能名を纏めたキーワードカテゴリ表を用いる。また、キーワード取得部が、キーワードカテゴリ表を参考にしつつ、取得したモジュール毎のキーワード使用に関するデータを格納するモジュール別キーワード使用データを用いる。また、機能やキーワードの不可分度算出項目、不可分度の算出方法、及び閾値を纏めた不可分度算出項目リストを用いる。また、不可分度算出項目の算出値を格納した不可分度データと、モジュール別キーワード使用データと、不可分度算出項目リストに記載された不可分度算出方法と、を利用して、不可分度の算出を行い、算出結果を該不可分度データに格納するデータ解析部を用いる。また、不可分度と、不可分度算出項目リストから取得した閾値またはユーザが入力した閾値とを比較して、モジュールの分割判定を行うモジュール分割判定部を備える。【００２２】
以上で説明した装置構成は、単体のコンピュータで構成してもよいし、あるいは、入力装置、出力装置、処理装置、記憶装置の任意の部分が、ネットワークで接続された他のコンピュータで構成されてもよい。発明の思想としては等価であり、変わるところがない。【００２３】
本実施例中、ソフトウエアで構成した機能と同等の機能は、FPGA（Field Programmable Gate Array）、ASIC（Application Specific Integrated Circuit）などのハードウエアでも実現できる。そのような態様も本願発明の範囲に含まれる。
【発明の効果】
【００２４】
本発明によれば、ソースコード内に含まれるモジュールに対し、該モジュールが利用する機能に関する情報を活用して機能の不可分度を算出し、該不可分度を用いて分割が可能なモジュールか否かを判定する事で、モジュールレベルでのソース可読性向上を支援する事が出来る。上記した以外の課題、構成、及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００２５】
【図１】実施例におけるハードウェア構成の例を示すブロック図である。
【図２】実施例における例を示す機能ブロック図である。
【図３】実施例におけるキーワードカテゴリ表の例を示す表図である。
【図４】実施例における関数別キーワード使用データの例を示す表図である。
【図５】実施例における不可分度算出項目リストの例を示す表図である。
【図６】実施例における不可分度データの例を示す表図である。
【図７】実施例における関数絞り込み判定リストの例を示す表図である。
【図８】実施例における関数分割を支援するためのプログラム図作成フローチャートの一例を示すフロー図である。
【図９】実施例における分割判定対象関数絞り込みフローチャートの一例を示すフロー図である。
【図１０】実施例における関数分割判定フローチャートの一例を示すフロー図である。
【図１１】不可分度変更に応じて可視化図が変化する一例を示す平面図である。
【図１２】分割優先度の高い関数の一例を示す平面図である。
【図１３】不可分度変更に応じて可視化図が変化する一例を示す平面図である。
【発明を実施するための形態】
【００２６】
以下、本発明による関数分割支援装置、関数分割支援方法、及び関数分割支援プログラムに関する一実施形態を、図面を用いて詳細に説明する。
【００２７】
ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【００２８】
以下に説明する発明の構成において、同一部分又は同様な機能を有する部分には同一の符号を異なる図面間で共通して用い、重複する説明は省略することがある。
【００２９】
本明細書等における「第１」、「第２」、「第３」などの表記は、構成要素を識別するために付するものであり、必ずしも、数または順序を限定するものではない。また、構成要素の識別のための番号は文脈毎に用いられ、一つの文脈で用いた番号が、他の文脈で必ずしも同一の構成を示すとは限らない。また、ある番号で識別された構成要素が、他の番号で識別された構成要素の機能を兼ねることを妨げるものではない。
【００３０】
図面等において示す各構成の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面等に開示された位置、大きさ、形状、範囲などに限定されない。
【００３１】
本明細書において単数形で表される構成要素は、特段文脈で明らかに示されない限り、複数形を含むものとする。
【実施例１】
【００３２】
本実施例１では、複数の関数を含む可視化対象ソースコードに対して、分割可能だと判定した関数を強調したプログラム図を生成する方法の一例を記す。プログラム図の種類は複数考えられるが、本例では、プログラム図として関数の呼出関係図をベースにして記載している。【００３３】
図１は、本発明の実施例１に係る情報処理装置１００のハードウェア及びシステム構成の一例を示す図である。情報処理装置１００のハードウェアとして、中央処理装置１０１、キーボードやマウス等の入力装置１０２、二次記憶装置１０３、主記憶装置１０４、ディスプレイ等の表示装置１０５、及び通信装置１０７を有する。尚、各装置は、バス１０６によって接続され、各装置間で相互にデータの送受信が可能である。また、情報処理装置１００の他に、情報処理装置やネットワークストレージといった、データを保存する事が可能な種々の情報装置Ａ１１０と情報装置Ｂ１２０があり、これらの間が、例えば、インターネット等の通信ネットワーク１３０により接続されている。【００３４】
図２は、本発明の実施例１に係る情報処理装置１００、情報装置Ａ１１０、及び情報装置Ｂ１２０の機能ブロックの一例を示す図である。尚、本実施例においては、情報処理装置１００の機能ブロックの全てが中央処理装置１０１によって実行または操作されるソフトウェアプログラムやデータであるものとして説明するが、一部または全ては、ハードウェアとして実現されても良い。【００３５】
また、本来は、これらの機能ブロックに加え、各機能ブロックの起動や管理等を行うOS(Operating System)や制御プログラム等が存在するが、本実施例では、これらの機能ブロックの連携動作を適宜説明することとし、OSや制御プログラムがここで適宜説明された連携動作に必要となる機能ブロックの起動や動作管理を行う事は自明であるので、これらのOSや制御プログラムについては説明及び記載を省略する。【００３６】
さて、本発明の実施例１に係る情報処理装置１００は、機能ブロックとして、図２に示すように、ソースコード取得部２００、キーワード取得部２０１、データ解析部２０２、関数分割判定部２０３、描画指示部２０４、プログラム図作成制御部２０５、キーワードカテゴリ表２１２、関数別キーワード使用データ２１３、不可分度算出項目リスト２１４、不可分度データ２１５、及び関数絞り込み判定データ２１６を有する。【００３７】
情報装置Ａ１１０は、プロジェクトＡに関するソースコード群２０６、及びソースコードＡ２０７を有する。ソースコードＡ２０７は、関数や変数等の部分的プログラムで構成されている。【００３８】
情報装置Ｂ１２０は、プロジェクトＢに関するソースコード群２０８、及びソースコードＢ２０９を有する。ソースコードＢ２０９は、関数や変数等の部分的プログラムで構成されている。尚、プロジェクトＡに関するソースコード群２０６、ソースコードＡ２０７、プロジェクトＢに関するソースコード群２０８、及びソースコードＢ２０９は必ずしも上述の場所にある必要はなく、情報処理装置１００、情報装置Ａ１１０、及び情報装置Ｂ１２０、あるいは他のアクセス可能な情報処理装置のいずれに格納されていても良い。【００３９】
図３に、キーワードカテゴリ表２１２の一例を示す。キーワードカテゴリ表２１２には、関数内に記述されるキーワード３００１と、該キーワードが属する機能名３００２が格納される。本例では、キーワードとして、SCI0、SCI1、ITU、及びCMTを記載している。また、SCI0とSCI1が属する機能名を通信、ITUとCMTが属する機能名をタイマ、として記載している。キーワードカテゴリ表２１２は、ソフトウェアベンダーが作成することができる。あるいは、ソフトウェアユーザが自分でキーワードのカテゴリ分けをして作成してもよい。これらキーワードや機能名は、キーワード取得部２０１が、ソースコードやソースコードに関する開発・保守データ等で設定されているマクロやキーワード情報を取得し、該情報を、関数別キーワード使用データ２１３に格納する際に用いる。関数別キーワード使用データ２１３に格納する情報に関しては後述する。【００４０】
図４に、関数別キーワード使用データ２１３の一例を示す。関数別キーワード使用データ２１３には、例えば情報装置ＡのプロジェクトＡに関するソースコード群に含まれる、関数４００１毎のキーワード３００１使用に関するデータ４００２が格納される。本例では、キーワード取得部２０１が、関数毎に、キーワードカテゴリ表２１２に記載されているキーワード３００１の使用回数を記載するものとする。キーワードの使用回数は、キーワードが使用されている文単位で一回とカウントしたり、ｘ行数の間にｙ回キーワードが使用している場合に一回とカウントしたり、と複数のカウント方法が考えられる。このようなカウント処理は、各関数のソースコードに対して、キーワードカテゴリ表２１２に示すキーワードを検索し、抽出することで自動的に行うことができる。尚、格納するデータは、キーワードの使用回数に限定されず、どのようなデータも格納可能である。どのようなデータを格納するかを、予めシステムで決めておいても良いし、ユーザ入力等の情報をもとに柔軟に決定する事も考えられる。また、本例ではキーワード３００１単位で使用回数のデータを格納しているが、キーワード単位に限定されるものではなく、機能３００２単位で格納しても良い。【００４１】
図５に、不可分度算出項目リスト２１４の一例を示す。不可分度算出項目リスト２１４には、機能の不可分度算出で利用する項目５００１、該項目の不可分度算出方法５００２、及び該項目の不可分度閾値５００３が格納される。【００４２】
本例では、不可分度算出で利用する項目５００１はユーザが選択するものとする。不可分度算出項目リスト２１４（図５）に格納された不可分度算出方法５００２と関数別キーワード使用データ２１３（図４）に格納されたデータを用いて、ユーザが選択した不可分度算出項目５００１の不可分度を算出し、該算出不可分度を不可分度データ２１５（図６）に格納する。【００４３】
該算出不可分度は、関数分割判定対象関数が分割可能か否かを判定する際に利用する。本例では、不可分度算出項目５００１の例として、“機能の関連度”と“機能の利用順の割合”の二つを挙げている。【００４４】
“機能の関連度（機能Ａと機能Ｂの関連度）”は、機能Ａに属するキーワード及び機能Ｂに属するキーワードを利用する関数の数、を、機能Ａに属するキーワードまたは機能Ｂに属するキーワードを使用する関数の数で除算する事で算出する。【００４５】
“機能の利用順の割合（機能Ａの後に機能Ｂを利用する割合）”は、機能Ａの後に機能Ｂを利用する関数の数を、機能Ａの後に機能Ｂを利用する、または機能Ｂの後に機能Ａを利用する関数の数で除算する事で算出する。【００４６】
不可分度算出項目５００１である“機能の関連度”と“機能の利用順の割合”に関して、それぞれ、閾値５００３として、0.7と0.5が記載されている。本例では、不可分度算出項目として“機能の関連度”を使用する。関数が機能Ａ、機能Ｂ、機能Ｃを使用している場合、機能Ａと機能Ｂ、機能Ｂと機能Ｃ、機能Ａと機能Ｃのそれぞれに対する不可分度を算出し、該不可分度が全て該閾値よりも小さい機能を使用している関数は分割可能と判定する。尚、不可分度算出で利用する項目は、一つずつの利用に限らず、複数の項目を同時に利用する事も考えられる。【００４７】
図５のような、不可分度算出項目リスト２１４は、予め設定して作成しておく。算出方法の例は、図５に限るものではなく、機能相互の関連性もしくは密接性を評価できるものであればよい。図５の例では、算出方法として２つの機能の不可分度を算出したが、３つ以上の機能の不可分度を算出してもよい。例えば、３つの機能Ａ，Ｂ，Ｃの関連度を算出するのであれば、「（機能Ａに関するキーワード及び機能Ｂに関するキーワード及び機能Ｃに関するキーワードを利用する関数の数）／（機能Ａに関するキーワードまたは機能Ｂに関するキーワードまたは機能Ｃに関するキーワードを利用する関数の数）」で計算することができる。機能が４以上の場合でも同様である。また、閾値も予め設定しておくが、後に説明するように、算出時に変更または選択できるようにしておいてもよい。【００４８】
図６に、図４に示した関数別キーワード使用データ２１３を基に、図５に示した不可分度算出方法で算出した不可分度データ２１５の一例を示す。不可分度データ２１５には、ユーザが使用を指定した不可分度算出項目５００１の算出値を格納する。該不可分度の算出方法は、図５で説明した通りである。本例では、利用する不可分度算出項目が“機能の関連度”である場合を想定しており、機能同士の関連度を表現可能な表形式で、不可分度の値６００１を格納している。図５の例では、カテゴリＡ（通信機能）とカテゴリＢ（タイマ機能）の関連度を示している。図５の例では、算出値はカテゴリで纏めて示しているが、キーワード毎に示すこともできる。尚、算出値の格納形式あるいは表示方式は左記に限定されず、任意の形式で格納・表示して良い。【００４９】
図６ではタイマと通信の２つの機能についてのみ示しているが、後に説明するように、分割可能か否かの判定においては、判定対象関数で使用している全ての機能（３以上ある場合もある）の組み合わせに関し、図６の不可分度データを取得する。【００５０】
図７に、関数絞り込み判定リスト２１６の一例を示す。関数絞り込み判定リスト２１６には、関数分割判定対象関数を絞り込むために利用する項目７００１を挙げている。もし分割判定対象関数の数が膨大であれば、分割判定が全て終了するのに時間が掛かるため、関数絞り込み判定リスト２１６を用いて判定対象の関数を絞り込む事で、判定時間を短縮する。図７の判定条件を用いることで、関数分割の検討対象として適するものを抽出することができる。【００５１】
本例では、項目７００１として、“使用機能/キーワード数”、“機能/キーワード間最大行間数”、“LOC”、“複雑度”、“修正回数”、“最後に修正してからの期間”、及び“開発に関わった人数”を挙げており、ユーザは好きな項目を利用出来る。関数絞り込み判定リスト２１６は、経験則等に基づいてあらかじめ設定しておく。例えば、修正回数が多い関数は、構成が複雑で分割をしたほうがよい場合が多い。また、開発人員が多い関数も、構成が複雑で分割をしたほうがよい場合が多い。それぞれの項目に対して閾値７００２を設定しており、項目の値が閾値以上であれば、分割判定対象とし、項目の値が閾値未満であれば、分割判定対象から外す。尚、無論、関数絞り込みで用いる事が出来る項目は上記に限定されるものではない。【００５２】
図８に、情報処理装置１００で、関数分割を支援するために、情報処理装置Ａ１１０に格納されている、ソースコードＡ２０７（図２参照）を可視化する際の一例である、フローチャートを示す。【００５３】
処理８００：プログラム図作成制御部２０５が、プログラム図作成を開始する。本実施例１では、プログラム中の関数に対して、関数が分割可能か否かの判定を行うものとし、分割可能な関数を強調表示したプログラム図を作成する例を示す。【００５４】
処理８０１：入力装置１０２を用いて、ソースコード群２０６の中から可視化するソースコード、をユーザが指定する。本実施例では可視化ソースコードとしてソースコードＡ２０７、を指定したものとする。ユーザが可視化対象ソースコードを指定すると、ソースコード取得部２００が、通信装置１０７を介し、プロジェクトＡに関するソースコード群２０６の中から、可視化対象であるソースコードＡ２０７を取得する。もしソースコード群２０６が巨大で、ソースコードＡ２０７の検索に時間が掛かりそうな場合には、ユーザ指示により、予め、使いそうなファイルを、例えば情報処理装置１００といった高速な検索が可能となる場所へ移動またはコピーしておく事も考えられる。【００５５】
処理８０２：キーワード取得部２０１が、処理８０１でユーザ指定した可視化対象ソースコードＡ２０７が属するプロジェクトＡに関するソースコード群２０６で設定されているマクロ等のキーワード情報を取得し、関数別キーワード使用データ２１３(図４参照）に格納する。【００５６】
本例では、関数毎の、キーワード使用数を格納する。この際、キーワードカテゴリ表２１２(図３参照）によるキーワードの分類を参考にして、関数別キーワード使用データ２１３へ格納していく事も考えられる。このようにする事で、例えば、キーワードであるSCI0と、それが属する機能である通信といったように、キーワードの上位概念まで考慮してデータを格納する事が出来る。【００５７】
尚、本例では、キーワード取得部２０１が取得するキーワードとして、ソースコード内に記述されるマクロやキーワードを挙げているが、左記に限定される事は無い。更に、キーワードを取得する対象として、可視化対象ソースコードＡ２０７が属するプロジェクトＡに関するソースコード群２０６に限定されず、可視化対象と関係の無いソースコードＢ２０９が属するプロジェクトＢに関するソースコード群２０８等、様々なソースコードやそれに関する開発・保守データを利用可能である。【００５８】
処理８０３：入力装置１０２を用いて、分割判定対象関数を絞り込む為の項目と、後に関数を分割するか否かの判定を行うために算出する“機能の不可分度”項目を、ユーザが指定する。分割判定対象関数の絞り込みで利用可能な項目は、予め、関数絞り込み判定リスト２１６(図７参照）に記載しておき、ユーザは関数絞り込み判定リスト２１６から項目を指定する事も考えられる。【００５９】
また、不可分度算出で利用可能な項目は、予め、関数不可分度算出項目リスト２１４(図５参照）に記載しておき、ユーザは関数不可分度算出項目リスト２１４から項目を指定する事も考えられる。本例では、関数絞り込み判定リスト２１６に、“使用機能/キーワード数”、“機能/キーワード間最大行間数”、“LOC”、“複雑度”、“修正回数”、“最後に修正してからの期間”、及び“開発に関わった人数”を記載しており、本処理で“使用機能/キーワード数”を、ユーザが絞り込み項目として指定したものとする。【００６０】
また、不可分度算出項目リスト２１４に、不可分度算出項目５００１として、“機能の関連度”と、“機能の利用順の割合”の二つを記載しており、本処理で“機能の関連度”をユーザが指定したものとする。尚、絞り込み項目や不可分度算出項目は、一つずつの利用に限らず、複数の項目を同時に利用する事もできる。【００６１】
処理８０４：データ解析部２０２が、不可分度算出項目リスト２１４(図５参照）に格納された不可分度算出方法と関数別キーワード使用データ２１３(図４参照）に格納されたデータを用いて、ユーザが選択した不可分度算出項目の不可分度を算出し、不可分度データ２１５(図６参照）へ格納する。該不可分度は、後に関数を分割するか否かの判定で用いる。処理８０３にて、“不可分度”項目として、ユーザが“機能の関連度”を指定したと想定している為、不可分度算出項目リスト２１４記載の“機能の関連度”算出式を用いて不可分度を算出する。【００６２】
“機能の関連度”は、複数の機能が互いにどれだけの関連性があるかを示す指標であり、この値が高い程、それらの機能は同時に利用されやすい事を示す。換言すると、機能の関連度が高ければ、それらの機能は一つの処理として同時に利用されるべきであり、処理として不可分であると言える。不可分度算出項目リスト２１４（図５）によると、“機能Ａと機能Ｂの関連度”は、機能Ａに属するキーワード及び機能Ｂに属するキーワードを利用する関数の数を、機能Ａに属するキーワードまたは機能Ｂに属するキーワードを使用する関数の総数で除算する事で、算出する事が出来る。【００６３】
処理８０５：処理８０５以下では、可視化対象であるソースコードＡ２０７に含まれる関数について、分割判定を行う。プログラム図作成制御部２０５が、処理８０１で取得した可視化対象であるソースコードＡ２０７に含まれる、未だ関数分割判定を行っていない関数の内、一つの関数を関数分割判定対象関数として取得する。【００６４】
処理８０６：関数分割判定部２０３が、処理８０５で取得した関数分割判定対象該関数の分割判定を行うか否かを判定する。本判定では、関数絞り込み判定リスト２１６に記載された項目のうち、“使用機能/キーワード数”を使用するものと想定している。判定が真であれば、処理８０７へ進む。判定が偽であれば、処理８０９へ進む。尚、本処理は後に詳述する。【００６５】
処理８０７：関数分割判定部２０３が、該関数は分割可能か否かを判定する。本判定では、不可分度算出項目リスト２１４(図５）に記載された項目のうち、“機能の関連度”を使用するものと想定している。判定においては、ソースコードＡ２０７に含まれる関数で使用している、全ての機能の組み合わせに対して、”機能の関連度”データ値と、不可分度算出項目リスト２１４記載の“機能の関連度”項目の閾値とを比較する。例えば、全ての”機能の関連度”が、閾値を上回れば、分割不可（分割不適切）と判定する。図６の例では、機能”通信”と”タイマ”の関連度は0.8であり、評価すべき機能がこの２つだけであれば、閾値0.7を超えるため、この関数は分割不可（偽）とする。また、図６には示していないが、他の機能（例えば”Ｉ／Ｏ”）があり、機能”Ｉ／Ｏ”と”タイマ”の関連度が、閾値を下回れば分割可（真）とする。判定が真であれば、処理８０８へ進む。判定が偽であれば、処理８０９へ進む。尚、本処理内容は後に詳述する。なお、上記の例では閾値を１つとしたが、機能の組み合わせに応じて、閾値を別個に設定し、機能の組み合わせ毎に判定した結果を論理演算することも可能である。【００６６】
処理８０８：描画指示部２０４が、該関数を分割可能な関数として強調表示する。また、このとき、不可分度が閾値を下回った機能またはキーワードを併せて表示してもよい。【００６７】
処理８０９：描画指示部２０４が、該関数を分割可能でない関数として強調表示しない。【００６８】
処理８１０：プログラム図作成制御部２０５が、処理８０１で取得したソースコードＡ２０７に未だ関数分割判定を行っていない関数があるか否かを判定する。関数分割判定を行っていない関数がある場合は、処理８０５へ進む。関数分割判定をしていない関数が無い場合は、処理８１１へ進む。【００６９】
処理８１１：プログラム図作成制御部２０５が、プログラム図作成を終了する。【００７０】
図９に、図８の処理８０６において、関数の分割判定を行うか否かを判定する際の一例であるフローチャートを示す。処理８０３にて、分割判定対象関数の絞り込み項目として、関数絞り込み判定リスト２１６(図７）に記載されている項目のうち、ユーザが“使用機能/キーワード数”を指定した事を想定している。この例では条件として一つの項目を用いたが、複数項目を用いてもよい。【００７１】
処理９００：データ解析部２０２が、関数で使われている機能やキーワードの数を解析する。そして、関数分割判定部２０３が、該“使用機能/キーワード数”と、関数絞り込み判定リスト２１６記載の“使用機能/キーワード数”項目の閾値と、を比較し、前者の値が後者の値以上であれば、処理８０７へ進む。前者の値が後者の値より小さければ、処理８０９へ進む。【００７２】
図１０に、図８の処理８０７において、関数の分割判定を行う際の一例であるフローチャートを示す。処理８０３にて、“不可分度”項目として、不可分度算出項目リスト２１４(図５）に記載されている項目のうち、ユーザが“機能の関連度”を指定した事を想定している。この例では条件として一つの項目を用いたが、複数項目を用いてもよい。【００７３】
処理１０００：データ解析部２０２が、関数別キーワード使用データ２１３(図４）より、判定対象関数のキーワードデータを取得する。そして、該データを利用して、該関数で使用している全ての機能の組み合わせに関し、不可分度データ２１５(図６）記載の“機能の関連度”データ値を取得する。そして、関数分割判定部２０３が、関数で使用している全ての機能に対して、該“機能の関連度”データ値と、不可分度算出項目リスト２１４(図５）記載の“機能の関連度”項目の閾値とを比較する。この際、全ての前者の値が後者の値よりも低い機能があれば、処理８０８へ進む。全ての前者の値が後者の値よりも低い機能がなければ処理８０９へ進む。【００７４】
本実施例の効果として、上述した特許文献１に存在した課題、すなわち関数内を解析しない為、関数の分割を行う事が出来ず、ソース可読性を向上出来なかった、という課題を解決する。つまり、関数が利用する機能に着目して、該機能同士の関連度を算出し、これらを関数不可分度として利用する事で、対象関数が分割可能か否かを自動で判定し、該判定結果を用いて、分割可能な関数を強調したプログラム図を構築・表示する事で、ソース可読性を向上させるための支援を行う事が出来る。【００７５】
本実施例の方法を利用して作成するプログラム図は、不可分度の閾値を変更すれば、分割可能として強調表示される関数が変わる。【００７６】
図１１に不可分度の閾値を変更する際の画面例を示す。例えば、図中の四角は関数を示し、四角同士を接続する矢印は、呼び出しや書き込み等を示す。本プログラム図を利用する目的や意図に応じて、分割可能関数をどの程度含めるかの考え方は異なる為、例えば、不可分度算出項目リスト２１４（図５）に記載された不可分度算出項目５００１の閾値５００３の代わりに、図１１で示すように、不可分度閾値スライダ１１０１を調整してその値を閾値として利用する事で、目的や意図に応じて、プログラム図を適宜作り替える事も考えられる。【００７７】
図１１で示すプログラム図の中で、灰色のノード１１０２は分割可能だと判定された関数を示している。図１１上図のように、不可分度閾値が0.8の時には６つの関数が分割可能として強調されているが、不可分度閾値スライダを操作して、0.1へと変更した場合には、図１１下図のように３つの関数だけが分割可能として強調表示される。【００７８】
処理１０００や図１１で行った関数分割判定では、関数内で利用している機能のうち、その関数内の他の機能との関連度が閾値未満であるような機能（分離対象機能）が一つでもあれば、関数分割可能と判定した。ここで、もし関数分割可能であると判定される関数が多い場合等では、分割可能関数を分割優先度の高いものへと絞り込みたい場合がある。
図１２に分割優先度の高い関数の一例を示す。図１２に示す関数、receiveMessage関数は、Ａ機能、Ｂ機能、Ｃ機能、及びＤ機能を利用しており、Ａ機能とＢ機能は不可分度0.8、Ａ機能とＣ機能は不可分度0.2、Ａ機能とＤ機能は不可分度0.2、Ｂ機能とＣ機能は不可分度0.2、Ｂ機能とＤ機能は不可分度0.2、Ｃ機能とＤ機能は不可分度0.7である。このように、不可分度の高い複数の機能の組（Ａ機能及びＢ機能、とＣ機能及びＤ機能）が、二極化（多極化）している関数は分割優先度が高い。次に、このような、機能が二極化している関数を抽出する例を説明する。【００７９】
図１３に不可分度の閾値を変更する別の例を示す。図１２のような場合を分析するために、例えば、図１３で示すように、不可分度閾値スライダは二軸以上あると好ましい。二軸ある事で、不可分度の高い機能の組を選別するための第一の閾値と、不可分度の高い機能の組同士を分離するための第二の閾値と、をそれぞれ設定する事が出来る。図１３において、不可分度閾値スライダの上段１１０１ａは、高い不可分度の機能の組を選ぶ為に利用するものである。上段スライダ１１０１ａの閾値により、関数内に閾値以上の不可分度を有する機能の組が一つでも存在する関数が抽出される。不可分度閾値スライダの下段１１０１ｂは、高い不可分度の機能の組同士を分離する為に利用するものである。下段スライダ１１０１ｂの閾値により、上段スライダで抽出した関数のうち、関数内に閾値未満の不可分度を有する機能の組が一つでも存在する関数が抽出される。すなわち、上段スライダにより、関数内に不可分度の高い機能の組が存在することが分かる。また、下段スライダにより、関数内に不可分度の低い機能の組が存在することが分かる。すなわち、当該関数内には、機能が二極化（あるいは多極化）していることが分かる。この２つのスライダを利用し、まず不可分度の高い機能の組を有する関数を選別した上で、更にその中から分離可能な機能の組が存在する関数を選別する。【００８０】
図１２の関数を用いて説明すると、図１３の上段スライダ１１０１ａの設定では、不可分度の高い機能として、0.6以上の機能、つまり、Ａ機能とＢ機能の組と、Ｃ機能とＤ機能の組の存在が分かり、これを有する関数を抽出出来る。図１３の上段の図では、不可分度が0.6以上の機能の組が一つでもあった場合、関数は白い四角で表示され、それ以外は灰色の四角で示される。しかし、下段スライダ１１０１ｂは０に設定されているため、Ａ機能とＢ機能の組と、Ｃ機能とＤ機能の組の間の関連度（Ｂ機能とＣ機能の関連度）は0.2という小さい値であっても、分離対象関数とならない。よって、分離対象とならない関数は、図１３上段で白い四角で示される。また、図１３上段に灰色で示されている関数は、不可分度が0.6以上の機能の組が一つもない関数ということになる。【００８１】
ここで、下段スライダ１１０１ｂを操作し、0.25に変更する。ここで下段スライダの閾値による判定対象は、上段スライダの設定により0.6以上の不可分度の機能の組を持つ関数（図１３上段で白い四角で示される）に限定される。すると、図１３上段で白い四角で示された関数のうち、0.25未満の不可分度の機能の組を有する関数が抽出される。図１２の関数では、Ｂ機能とＣ機能の不可分度0.2が閾値未満であるため、分離対象の関数となる。図１３下段においては、図１３上段で白い四角で示された関数のうち、いくつかが灰色の四角に変更されている。この、白から灰色に変更された関数が、機能が二極化（多極化）している関数である。【００８２】
上述の説明では、下段スライダの閾値の判定対象を、全ての機能の間の不可分度としている。しかし、上段スライダで抽出した高い不可分度を有するＡ機能とＢ機能の組と、Ｃ機能とＤ機能の組の間の不可分度に絞ってもよい。判定する機能（キーワード）を特定することで、詳細な検討が可能になる。また、図１３の例では、２つのスライダの閾値は、最初から特定の機能相互の不可分度のみに有効な閾値としておくこともできる。例えば、スライダの上段１１０１ａの設定による結果にかかわらず、最初から下段スライダを、図１２のＢ機能とＣ機能の間の不可分度に対する閾値として設定することもできる。【００８３】
関数の分割判定では、機能の不可分度として、機能の利用順の割合を利用する事も出来る。複数の機能を利用するにあたり、Ａ機能を利用した後にＢ機能を利用する、というように、機能の利用順番が決まっている場合がある。図１２を例に、不可分度を“機能の利用順の割合”に対するものと想定して説明すると、Ａ機能を利用した後にＢ機能を利用、またＣ機能を利用した後にＤ機能を利用、する割合は、それぞれ0.8、0.7である。また、Ｂ機能を利用した後にＣ機能を利用する割合は、0.2である。ここで、図１３下図のように、不可分度閾値を設定した場合、Ａ機能とＢ機能の不可分度と、Ｃ機能とＤ機能の不可分度は、閾値0.6以上であるため、これらは関数内の不可分度の高い機能の組として選別される。更に、Ｂ機能とＣ機能の不可分度は、閾値0.25未満であるため、Ａ機能とＢ機能の組と、Ｃ機能とＤ機能の組は分割対象となる。【００８４】
本例では、プログラム図として関数の呼出関係図をベースに記載したため、図１１や図１３に示すように、分割可能と判定した関数自体を強調表示しており、関数内部を表現していない。しかし、分割可能と判定した関数の内部を可視化したい事も考えられる。その際には、例えば、図１２に記載しているように、関数の内部で、不可分な機能の組に色を付けておく、といった可視化方法が考えられる。もちろん、可視化方法は、左記含む、本例記載のものに限定されるものではない。【００８５】
尚、本実施例では、不可分度を、関数を強調表示するか否かで利用する事としたが、左記に限らず、様々な利用法が考えられる。【００８６】
本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることが可能である。また、各実施例の構成の一部について、他の実施例の構成の追加・削除・置換をすることが可能である。
【産業上の利用可能性】
【００８７】
組込装置等、ソフトウェアを動作させる装置に適用出来る。
【符号の説明】
【００８８】
１００  情報処理装置
１０１  中央処理装置
１０２  入力装置
１０３  二次記憶装置
１０４  主記憶装置
１０５  表示装置
１０６  バス
１０７  通信装置
１１０  情報装置Ａ
１２０  情報装置Ｂ
１３０  通信ネットワーク
２００  ソースコード取得部
２０１  キーワード取得部
２０２  データ解析部
２０３  関数分割判定部
２０４  描画指示部
２０５  プログラム図作成制御部
２０６  プロジェクトＡに関するソースコード群
２０７  ソースコードＡ
２０８  プロジェクトＢに関するソースコード群
２０９  ソースコードＢ
２１２  キーワードカテゴリ表
２１３  関数別キーワード使用データ
２１４  不可分度算出項目リスト
２１５  不可分度データ
２１６  関数絞り込み判定データ
【図１】
2016092677.tif 000003
【図２】
2016092677.tif 000004
【図３】
2016092677.tif 000005
【図４】
2016092677.tif 000006
【図５】
2016092677.tif 000007
【図６】
2016092677.tif 000008
【図７】
2016092677.tif 000009
【図８】
2016092677.tif 000010
【図９】
2016092677.tif 000011
【図１０】
2016092677.tif 000012
【図１１】
2016092677.tif 000013
【図１２】
2016092677.tif 000014
【図１３】
2016092677.tif 000015
【国際調査報告】
2016092677.tif 000016
2016092677.tif 000017