(57)【要約】可視化対象ソースコードの実装者らのプログラム開発スキル値を算出、活用して、ソースコード内から重要なモジュールのみを自動で抽出して可視化するプログラム図作成装置、プログラム図作成方法、及びプログラム図作成プログラムを提供する。情報処理装置１００のデータ解析部２０２は、開発スキル値算出利用表２１２を用いて可視化判定対象モジュール実装者のプログラム開発スキル値を算出し、該開発スキル値とモジュール重要度算出式データ２１３を用いてモジュール重要度を算出する。その後、可視化判定部２０３が、該モジュール重要度と可視化判定閾値データ２１４から取得した閾値またはプログラム図利用者の開発スキルを元に計算したモジュール重要度の閾値とを比較してプログラム図作成制御部２０５がソースコードＡ２０７から抽出したモジュールの可視化判定を行う。そして、該判定結果に応じて、プログラム図作成制御部２０５はプログラム図を作成する。
2015063954.tif 000002
【特許請求の範囲】
【請求項１】
モジュールから構成されるソースコードと、前記ソースコードが関係するプロジェクトと前記ソースコードの開発または保守データとを示すリポジトリとを記憶する記憶部と、
指定されたソースコードとそのソースコードに関するリポジトリとを取得し、そのソースコードが関係するプロジェクトに関わる開発者または保守者のスキル値を、前記プロジェクトに関わる開発者または保守者のスキルを示すスキル値を算出するためのスキル値算式により開発者または保守者ごとに算出するスキル値算出部と、
算出された前記開発者または保守者のスキル値の中から前記モジュールの実装に関わる開発者または保守者のスキル値を取得し、取得したスキル値に基づいて、前記モジュールの重要度を示す重要度算式によりモジュールの重要度を算出する重要度算出部と、
算出された重要度が所定の閾値以上であるか否かを判定し、算出された重要度が所定の閾値以上であると判定した場合に、閾値以上と判定されたモジュールを表示部に表示して可視化する可視化判定部と、
を備えることを特徴とするプログラム図作成装置。
【請求項２】
前記スキル値算出部は、（ａ）実装したソース行数に対するバグ数の逆数、（ｂ）実装したソース行数に対するコード規約違反数の逆数、（ｃ）実装したソース行数に対するバグの数を、実装したソースの循環的複雑度で除算した値の逆数、（ｄ）実装したソース行数に対するコード規約違反数を、実装したソースの循環的複雑度で除算した値の逆数、（ｅ）ソース実装期間に対する同時実装ソース数、ソース実装期間に対する該実装ソース行数、またはソース実装期間に対する該実装ソース行数を、実装したソースの循環的複雑度で乗算した値、を前記スキル値算出式によって前記スキル値として算出する、
ことを特徴とする請求項１記載のプログラム図作成装置。
【請求項３】
前記スキル値算出部は、前記開発者または前記保守者であるプログラム図の利用者の開発スキル値を前記スキル値算式により算出し、前記プログラム図の利用者のスキル値に基づいて算出されたモジュールの重要度を算出閾値として設定し、
前記可視化判定部は、前記重要度算出部が算出したモジュールの重要度が前記算出閾値以上であるか否かを判定し、前記モジュールの重要度が前記算出閾値以上であると判定した場合に可視化する、
ことを特徴とする請求項１記載のプログラム図作成装置。
【請求項４】
前記重要度算出部は、（Ａ）前記ソースコードを構成するモジュールの初期実装者が実装したソース行数に対するバグ数の逆数、（Ｂ）該モジュールの初期実装者が実装したソース行数に対するコード規約違反数の逆数、（Ｃ）該モジュールの初期実装者が実装したソース行数に対するバグの数を、実装したソースの循環的複雑度で除算した値の逆数、（Ｃ）該モジュール初期実装者が実装したソース行数に対するコード規約違反数を、実装したソースの循環的複雑度で除算した値の逆数、（Ｄ）該モジュールの初期実装者があるソースを実装している期間に同時に実装しているソース数、該モジュールの初期実装者が行ったソース実装期間に対する該実装ソース行数、該モジュールの初期実装者が行ったソース実装期間に対する該実装ソース行数を、実装したソースの循環的複雑度で乗算した値、（Ｅ）または該モジュールの総行数に対する実装者の該モジュール実装行数で示される該モジュール実装寄与率に対して、該実装者の開発スキル値を乗算する計算を、全ての該モジュールの実装者に対して行い、それら全ての値を足した結果、をモジュールの重要度として算出し、
前記可視化判定部が、該モジュール重要度が前記算出閾値以上であるか否かを判定し、前記モジュールの重要度が前記算出閾値以上であると判定した場合に可視化する、
ことを特徴とする請求項３記載のプログラム図作成装置。
【請求項５】
モジュールから構成されるソースコードと、前記ソースコードが関係するプロジェクトと前記ソースコードの開発または保守データとを示すリポジトリとを記憶する記憶部を有したプログラム図作成装置で行われるプログラム図作成方法であって、
指定されたソースコードとそのソースコードに関するリポジトリとを取得し、そのソースコードが関係するプロジェクトに関わる開発者または保守者のスキル値を、前記プロジェクトに関わる開発者または保守者のスキルを示すスキル値を算出するためのスキル値算式により開発者または保守者ごとに算出するスキル値算出ステップと、
算出された前記開発者または保守者のスキル値の中から前記モジュールの実装に関わる開発者または保守者のスキル値を取得し、取得したスキル値に基づいて、前記モジュールの重要度を示す重要度算式によりモジュールの重要度を算出する重要度算出ステップと、
算出された重要度が所定の閾値以上であるか否かを判定し、算出された重要度が所定の閾値以上であると判定した場合に、閾値以上と判定されたモジュールを表示部に表示して可視化する可視化判定ステップと、
を含むことを特徴とするプログラム図作成方法。
【請求項６】
前記スキル値算出ステップでは、（ａ）実装したソース行数に対するバグ数の逆数、（ｂ）実装したソース行数に対するコード規約違反数の逆数、（ｃ）実装したソース行数に対するバグの数を、実装したソースの循環的複雑度で除算した値の逆数、（ｄ）実装したソース行数に対するコード規約違反数を、実装したソースの循環的複雑度で除算した値の逆数、（ｅ）ソース実装期間に対する同時実装ソース数、ソース実装期間に対する該実装ソース行数、またはソース実装期間に対する該実装ソース行数を、実装したソースの循環的複雑度で乗算した値、を前記スキル値算出式によって前記スキル値として算出する、
ことを特徴とする請求項５記載のプログラム図作成方法。
【請求項７】
前記スキル値算出ステップでは、前記開発者または前記保守者であるプログラム図の利用者の開発スキル値を前記スキル値算式により算出し、前記プログラム図の利用者のスキル値に基づいて算出されたモジュールの重要度を算出閾値として設定し、
前記可視化判定ステップでは、前記重要度算出ステップで算出したモジュールの重要度が前記算出閾値以上であるか否かを判定し、前記モジュールの重要度が前記算出閾値以上であると判定した場合に可視化する、
ことを特徴とする請求項５記載のプログラム図作成方法。
【請求項８】
前記重要度算出ステップでは、（Ａ）前記ソースコードを構成するモジュールの初期実装者が実装したソース行数に対するバグ数の逆数、（Ｂ）該モジュールの初期実装者が実装したソース行数に対するコード規約違反数の逆数、（Ｃ）該モジュールの初期実装者が実装したソース行数に対するバグの数を、実装したソースの循環的複雑度で除算した値の逆数、（Ｃ）該モジュール初期実装者が実装したソース行数に対するコード規約違反数を、実装したソースの循環的複雑度で除算した値の逆数、（Ｄ）該モジュールの初期実装者があるソースを実装している期間に同時に実装しているソース数、該モジュールの初期実装者が行ったソース実装期間に対する該実装ソース行数、該モジュールの初期実装者が行ったソース実装期間に対する該実装ソース行数を、実装したソースの循環的複雑度で乗算した値、（Ｅ）または該モジュールの総行数に対する実装者の該モジュール実装行数で示される該モジュール実装寄与率に対して、該実装者の開発スキル値を乗算する計算を、全ての該モジュールの実装者に対して行い、それら全ての値を足した結果、をモジュールの重要度として算出し、
前記可視化判定ステップでは、該モジュール重要度が前記算出閾値以上であるか否かを判定し、前記モジュールの重要度が前記算出閾値以上であると判定した場合に可視化する、
ことを特徴とする請求項７記載のプログラム図作成方法。
【請求項９】
モジュールから構成されるソースコードと、前記ソースコードが関係するプロジェクトと前記ソースコードの開発または保守データとを示すリポジトリとを記憶する記憶部を有したコンピュータに、
指定されたソースコードとそのソースコードに関するリポジトリとを取得し、そのソースコードが関係するプロジェクトに関わる開発者または保守者のスキル値を、前記プロジェクトに関わる開発者または保守者のスキルを示すスキル値を算出するためのスキル値算式により開発者または保守者ごとに算出するスキル値算出ステップと、
算出された前記開発者または保守者のスキル値の中から前記モジュールの実装に関わる開発者または保守者のスキル値を取得し、取得したスキル値に基づいて、前記モジュールの重要度を示す重要度算式によりモジュールの重要度を算出する重要度算出ステップと、
算出された重要度が所定の閾値以上であるか否かを判定し、算出された重要度が所定の閾値以上であると判定した場合に、閾値以上と判定されたモジュールを表示部に表示して可視化する可視化判定ステップと、
を実行させることを特徴とするプログラム図作成プログラム。
【請求項１０】
前記スキル値算出ステップでは、（ａ）実装したソース行数に対するバグ数の逆数、（ｂ）実装したソース行数に対するコード規約違反数の逆数、（ｃ）実装したソース行数に対するバグの数を、実装したソースの循環的複雑度で除算した値の逆数、（ｄ）実装したソース行数に対するコード規約違反数を、実装したソースの循環的複雑度で除算した値の逆数、（ｅ）ソース実装期間に対する同時実装ソース数、ソース実装期間に対する該実装ソース行数、またはソース実装期間に対する該実装ソース行数を、実装したソースの循環的複雑度で乗算した値、を前記スキル値算出式によって前記スキル値として算出する、
ことを特徴とする請求項９記載のプログラム図作成プログラム。
【請求項１１】
前記スキル値算出ステップでは、前記開発者または前記保守者であるプログラム図の利用者の開発スキル値を前記スキル値算式により算出し、前記プログラム図の利用者のスキル値に基づいて算出されたモジュールの重要度を算出閾値として設定し、
前記可視化判定ステップでは、前記重要度算出ステップで算出したモジュールの重要度が前記算出閾値以上であるか否かを判定し、前記モジュールの重要度が前記算出閾値以上であると判定した場合に可視化する、
ことを特徴とする請求項９記載のプログラム図作成プログラム。
【請求項１２】
前記重要度算出ステップでは、（Ａ）前記ソースコードを構成するモジュールの初期実装者が実装したソース行数に対するバグ数の逆数、（Ｂ）該モジュールの初期実装者が実装したソース行数に対するコード規約違反数の逆数、（Ｃ）該モジュールの初期実装者が実装したソース行数に対するバグの数を、実装したソースの循環的複雑度で除算した値の逆数、（Ｃ）該モジュール初期実装者が実装したソース行数に対するコード規約違反数を、実装したソースの循環的複雑度で除算した値の逆数、（Ｄ）該モジュールの初期実装者があるソースを実装している期間に同時に実装しているソース数、該モジュールの初期実装者が行ったソース実装期間に対する該実装ソース行数、該モジュールの初期実装者が行ったソース実装期間に対する該実装ソース行数を、実装したソースの循環的複雑度で乗算した値、（Ｅ）または該モジュールの総行数に対する実装者の該モジュール実装行数で示される該モジュール実装寄与率に対して、該実装者の開発スキル値を乗算する計算を、全ての該モジュールの実装者に対して行い、それら全ての値を足した結果、をモジュールの重要度として算出し、
前記可視化判定ステップでは、該モジュール重要度が前記算出閾値以上であるか否かを判定し、前記モジュールの重要度が前記算出閾値以上であると判定した場合に可視化する、
ことを特徴とする請求項１１記載のプログラム図作成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、可視化対象であるソースコード内のモジュールを自動で複数選択するプログラム図作成装置、プログラム図作成方法、及びプログラム図作成プログラムに関する。
【背景技術】
【０００２】
プログラムを理解する方法として、例えばフローチャート図といったプログラム図を生成・利用して処理の流れを追う方法がある。しかし、複雑なプログラムを対象として生成したプログラム図は、プログラム全体に渡って詳細に出力され、注目する必要のないモジュールが含まれてしまう為、プログラム全体の概要を把握したい場合や特定の箇所に着目して調査したい場合に時間が掛かるという問題があった。そこで従来、例えば特許文献１では、可視化するモジュールを開発者やユーザ等が予め手動で選択しておき、選択したモジュールのみを可視化する事で、プログラム理解に特化したプログラム図を生成する方法が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−２５７６６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１の方法では、開発者やユーザ等が予め可視化するモジュールをソースコード内から選択しておく必要があり、この選択作業に工数を要していた。【０００５】
本発明は、上記に鑑みてなされたものであって、ソースコード内の可視化するモジュールを予め開発者やユーザ等が選択していない場合でも、可視化するモジュールを自動で選択してプログラム図を構築・表示することで、可視化工数を削減することが可能なプログラム図作成装置、プログラム図作成方法、及びプログラム図作成プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決する為に、本発明にかかるプログラム図作成装置は、モジュールから構成されるソースコードと、前記ソースコードが関係するプロジェクトと前記ソースコードの開発または保守データとを示すリポジトリとを記憶する記憶部と、指定されたソースコードとそのソースコードに関するリポジトリとを取得し、そのソースコードが関係するプロジェクトに関わる開発者または保守者のスキル値を、前記プロジェクトに関わる開発者または保守者のスキルを示すスキル値を算出するためのスキル値算式により開発者または保守者ごとに算出するスキル値算出部と、算出された前記開発者または保守者のスキル値の中から前記モジュールの実装に関わる開発者または保守者のスキル値を取得し、取得したスキル値に基づいて、前記モジュールの重要度を示す重要度算式によりモジュールの重要度を算出する重要度算出部と、算出された重要度が所定の閾値以上であるか否かを判定し、算出された重要度が所定の閾値以上であると判定した場合に、閾値以上と判定されたモジュールを表示部に表示して可視化する可視化判定部と、を備えることを特徴とするプログラム図作成装置として構成される。【０００７】
また、本発明は、上記プログラム図作成装置で行われるプログラム図作成方法、プログラム図作成プログラムとして把握される。
【発明の効果】
【０００８】
本発明によれば、ソースコード内の可視化するモジュールを予め開発者やユーザ等が選択していない場合でも、可視化するモジュールを自動で選択してプログラム図を構築・表示する事で、可視化工数を削減出来る。
【図面の簡単な説明】
【０００９】
【図１】実施例におけるハードウェア構成の一例図である。
【図２Ａ】実施例における機能ブロックの一例図である。
【図２Ｂ】図２Ａに示したソースコードの開発・保守データの構成例を示す図である。
【図３】実施例における開発スキル値算出利用表の一例図である。
【図４】実施例におけるモジュール重要度算出式データの一例図である。
【図５】実施例における可視化判定閾値データの一例図である。
【図６】実施例におけるモジュール別重要度データの一例図である。
【図７】実施例における開発者別開発スキルデータの一例図である。
【図８】実施例１におけるプログラム図作成フローチャートの一例図である。
【図９】実施例１における可視化判定フローの一例図である。
【図１０】モジュール重要度変更に応じて可視化図が変化する一例図である。
【発明を実施するための形態】
【００１０】
以下、本発明によるプログラム図作成装置、プログラム図作成方法、及びプログラム図作成プログラムに関する一実施形態を、図面を用いて詳細に説明する。
【実施例１】
【００１１】
本実施例１では、複数のモジュールを含む可視化対象ソースコードに対して、重要度の高いモジュールや可読性の高いモジュールのみで構成されたプログラム図を生成する方法の一例を記す。【００１２】
図１は、本発明の実施例１に係る情報処理装置１００のハードウェア及びシステム構成の一例を示す図である。情報処理装置１００のハードウェアとして、中央処理装置１０１、キーボードやマウス等の入力装置１０２、二次記憶装置１０３、主記憶装置１０４、ディスプレイ等の表示装置１０５、及び通信装置１０７を有する。尚、各装置は、バス１０６によって接続され、各装置間で相互にデータの送受信が可能である。また、情報処理装置１００の他に、情報処理装置やネットワークストレージといった、データを保存する事が可能な情報装置Ａ１１０と情報装置Ｂ１２０があり、これらの間が、例えば、インターネット等の通信ネットワーク１３０により接続されている。【００１３】
図２Ａは、本発明の実施例１に係る情報処理装置１００、情報装置Ａ１１０、及び情報装置Ｂ１２０の機能ブロックの一例を示す図である。尚、本実施例においては、情報処理装置１００の機能ブロックの全てが中央処理装置１０１によって実行または操作されるソフトウェアプログラムやデータであるものとして説明するが、一部または全ては、ハードウェアとして実現されても良い。また、本来は、これらの機能ブロックに加え、各機能ブロックの起動や管理等を行うOS(Operating System)や制御プログラム等が存在するが、本実施例では、これらの機能ブロックの連携動作を適宜説明することとし、OSや制御プログラムがここで適宜説明された連携動作に必要となる機能ブロックの起動や動作管理を行う事は自明であるので、これらのOSや制御プログラムについては説明及び記載を省略する。【００１４】
さて、本発明の実施例１に係る情報処理装置１００は、機能ブロックとして、図２Ａに示すように、ソースコード取得部２００、リポジトリ取得部２０１、データ解析部２０２、可視化判定部２０３、描画指示部２０４、プログラム図作成制御部２０５、開発スキル値算出利用表２１２、モジュール重要度算出式データ２１３、可視化判定閾値データ２１４、モジュール別重要度データ２１５、及び開発者別開発スキルデータ２１６を有する。情報装置Ａ１１０は、様々な複数のソースコードの集合であるソースコード群２０６、ソースコードＡ２０７を有する。ソースコードＡ２０７は、モジュールという単位の部分的プログラムで構成されている。情報装置Ｂ１２０は、ソースコードＡ２０７が関係するプロジェクト全体または一部の開発・保守データの集合であるリポジトリ２０８、及びソースコードＡ２０７の開発・保守データ２０９を有する。尚、ソースコード群２０６、ソースコードＡ２０７、ソースコードＡ２０７が関係するプロジェクト全体または一部の開発・保守データの集合であるリポジトリ２０８、及びソースコードＡ２０７の開発・保守データ２０９は必ずしも上述の場所にある必要はなく、情報処理装置１００、情報装置Ａ１１０、及び情報装置Ｂ１２０のいずれに格納されていても良い。【００１５】
図２Ｂに、ソースコードＡ２０７の開発・保守データ２０９の構成例を示す。図２Ｂに示すように、ソースコードＡ２０７の開発・保守データ２０９は、ソースコードを識別するためのソースコード名と、そのソースコードに含まれるモジュール名と、そのモジュールの開発者名と、そのモジュールのステップ数およびバグ数と、そのモジュールのメンテナンス者名とが対応付けて記憶されている。図２Ｂでは、例えば、ソースコードＡ２０７にはモジュールＢ１等の複数のモジュールによって構成され、モジュールＢ１については、開発者（開発時の実装者）が「日立太郎」であり、そのモジュールのステップ数（総実装行数）が１５００ステップ、バグ数（Ｂ票数）が３０箇所であり、メンテナンス時の実装者である「日立花子」によってメンテナンスされたことを示している。これらの情報の他に、メンテナンス者がメンテナンスしたモジュールのステップ数やバグ数が同様に記憶され、開発者やメンテナンス者が犯したコード規約違反数等の情報も記憶されている。また、ソースコード２０７Ａには、そのソースコードが関係するプロジェクトが対応付けて記憶されている。したがって、この開発・保守データ２０９を参照すれば、どのプロジェクトのどのソースコードが誰によって開発され、またはメンテナンスされたのか、さらにはどのような精度によって開発またはメンテナンスされたのかがわかる。【００１６】
図３に、開発スキル値算出利用表２１２の一例を示す。開発スキル値算出利用表２１２には、個人のプログラム開発スキルレベルを意味する、開発スキル項目と、左記項目の値を算出する式を格納する。開発スキル項目として、本例では、バグ作成率の逆数（ｘ１）、コード規約違反率の逆数（ｘ２）、補正バグ作成率の逆数（ｘ３）、及び補正コード規約違反率の逆数（ｘ４）を挙げており、これら開発スキル項目の値は後述するモジュール重要度算出で利用する。開発スキルが高い開発者は、プログラム内の重要なモジュールを実装する傾向が高い為、開発スキルに着目する事で重要なモジュールの抽出が可能となる。【００１７】
開発スキル値の算出では、メトリクス等の開発者が実装したソースコードから得られる情報の他に、例えば、開発者が作ったバグ数や開発者が犯したコード規約違反数といった、リポジトリに格納されている開発・保守データから得られる情報を利用する。バグ作成率は、開発・保守データの一つである開発者の作成バグ数（Ｂ票数）を、同じく開発・保守データの一つである開発者の実装総行数（総実装行数）で除算して算出する。コード規約違反率は、開発・保守データの一つである開発者のコード規約違反数を、同じく開発・保守データの一つである開発者の実装総行数（総実装行数）で除算して算出する。補正バグ作成率は、開発・保守データの一つである開発者の作成バグ数（Ｂ票数）を、同じく開発・保守データの一つである開発者の実装総行数（総実装行数）と、実装したソースコードの循環的複雑度で除算して算出する。【００１８】
一般的に、作成するプログラムの難易度が高ければ実装行当たりのバグ数が増え、逆に低ければ実装行当たりのバグ数が減る為、開発者の実装行当たりのバグ作成数を、構造的なプログラム作成難易度とほぼ同じ意味を持つ、該実装ソースコード部の循環的複雑度で割る事で、プログラム作成難易度の影響を除去し、バグ作成率を補正する事が出来る。補正コード規約違反率は、開発・保守データの一つである開発者のコード規約違反数を、同じく開発・保守データの一つである開発者の実装総行数（総実装行数）と、実装したソースコードの循環的複雑度で除算して算出する。バグ作成率と同様に、一般的に、作成するプログラムの難易度が高ければ実装行当たりのコード規約違反数が増え、逆に低ければ実装行当たりのコード規約違反数が減る為、開発者の実装行当たりのコード規約違反数を、構造的なプログラム作成難易度とほぼ同じ意味を持つ、該実装ソースコード部の循環的複雑度で割る事で、プログラム作成難易度の影響を除去し、コード規約違反率を補正する事が出来る。バグ作成率、コード規約違反率、補正バグ作成率、及び補正コード規約違反率に関して、値が低い程プログラム開発スキルが高い事を意味する為、これらの値の逆数を取り、開発スキル項目としている。【００１９】
尚、無論、開発スキル項目、利用するリポジトリ内の開発・保守データ、及び開発スキル項目の値算出で利用する計算式はいずれも上記で述べたものに限定される事はない。考え得る開発スキル項目やその項目値の算出に利用可能なものであれば、いずれも利用可能である。例えば、開発スキル項目値の算出で利用可能なリポジトリ内開発・保守データとして、バグ数、コード規約違反数、実装行数の他に、実装期間、コミット回数、レビュー回数、レビュアとして活躍した回数、作成ドキュメント数、コミットを許可された数等、の利用が考えられる。例えば、ソース実装行数を該ソースの実装期間で除算すると、開発速度という開発スキル項目として利用出来る。更に、例えば、前述の補正バグ作成率や補正コード規約違反率と同様の考えで、ソース実装行数を該ソース実装期間と実装ソース部の循環的複雑度で乗算する事で、プログラム作成難易度の影響を除去した、補正開発速度という開発スキル項目として利用出来る。また、例えば、ある実装期間において、同時に実装しているソースコードの数は、並行実装ソース数という開発スキル項目として利用出来る。尚、前述した、補正バグ作成率、補正コード規約違反率、及び補正開発速度といった、循環的複雑度を用いた開発スキル値の算出では、本実施例で述べたように、循環的複雑度の値をそのまま用いるだけでなく、循環的複雑度の値を元に四則演算で算出した結果を開発スキル値算出で用いる事も考えられる。【００２０】
図４に、モジュール重要度算出式データ２１３の一例を示す。モジュール重要度算出式データ２１３には、モジュールの可視化判定で利用するモジュール重要度を算出する式の情報が格納される。モジュール重要度１（ｚ１）として、該モジュール初期実装者のバグ作成率の逆数（ｘ１）を、モジュール重要度２（ｚ２）として、該モジュール初期実装者の補正コード規約違反率の逆数（ｘ４）を、モジュール重要度３（ｚ３）として、モジュールを実装した開発者の実装割合（該開発者のモジュール実装数をモジュールの総行数で除算した算出結果）と、補正バグ作成率の逆数（ｘ３）を互いに乗算する計算を、モジュールを実装した全ての開発者に対して行い、それら全ての算出結果値を加算するという算出式を挙げている。【００２１】
図４では、モジュール重要度算出式データ２１３として上記の式を挙げたが、式中に登場する、ｘ１、ｘ３、及びｘ４は、開発スキル値算出利用表２１２に記載された開発スキル項目のいずれでも適宜代替利用可能である。モジュール重要度１（ｚ１）、モジュール重要度２（ｚ２）、及びモジュール重要度３（ｚ３）に共通する事は、バグ作成率、コード規約違反率、補正バグ作成率、補正コード規約違反率が低いような、プログラム開発スキルの高い人がモジュールを実装すれば、モジュールの重要度を示す算出結果値が高くなるという事である。これは、プログラム開発スキルの高い人は、プログラムの中で重要なモジュールの実装を担当する傾向がある事に基づいている。尚、モジュール重要度算出式として、上記に限らず、開発スキル値算出利用表２１２に記載される開発スキル項目の値を用いた様々な式の利用が考えられる。無論、モジュール重要度に関する算出式は一つとは限らず、図４に示すように、複数存在する事が考えられる。【００２２】
なお、図４では代表的な例について示しているが、モジュールの初期実装者が実装したソース行数に対するバグの数を、実装したソースの循環的複雑度で除算した値の逆数、該モジュール初期実装者が実装したソース行数に対するコード規約違反数を、実装したソースの循環的複雑度で除算した値の逆数、モジュールの初期実装者があるソースを実装している期間に同時に実装しているソース数、モジュールの初期実装者が行ったソース実装期間に対する実装ソース行数、モジュールの初期実装者が行ったソース実装期間に対する該実装ソース行数を、実装したソースの循環的複雑度で乗算した値、またはモジュールの総行数に対する実装者のモジュール実装行数で示されるモジュール実装寄与率に対して、実装者の開発スキル値を乗算する計算を、全ての該モジュールの実装者に対して行い、それら全ての値を足した結果、をモジュール重要度として、可視化判定部２０３が、モジュール重要度と可視化判定閾値データから取得したモジュール重要度の閾値またはプログラム図利用者の開発スキルを元に計算したモジュール重要度の閾値とを比較し、前者の方が後者より大きい場合に可視化し、小さい場合に可視化しないと判定してもよい。【００２３】
図５に、可視化判定閾値データ２１４の一例を示す。可視化判定閾値データ２１４には、ソースコード内にあるモジュールの可視化判定を行う際に利用する、判定項目に関する様々な閾値が格納される。ここでは、モジュール重要度１（ｚ１）、モジュール重要度２（ｚ２）及びモジュール重要度３（ｚ３）を挙げた。この際の閾値として、固定値を利用する方法や、可視化したプログラム図を見る人のプログラム開発スキルに応じて可変値を用いる方法が考えられる。固定値の場合は、予め、値を可視化判定閾値データ２１４に入力しておく必要がある。また、可視化したプログラム図を見る人のプログラム開発スキルに応じて閾値を変更する場合は、モジュールの可視化判定までに閾値を算出して設定する必要がある。後者に関しては後で詳述する。【００２４】
図６に、モジュール別重要度データ２１５の一例を示す。モジュール別重要度データ２１５には、プログラムの各モジュールに対して算出したモジュール重要度が格納される。本例では、モジュール重要度１（ｚ１）、モジュール重要度２（ｚ２）、及びモジュール重要度３（ｚ３）の項目に関して、可視化対象ソースコード内モジュールである、モジュールＡ、モジュールＢ、及びモジュールＣに対するモジュール重要度が記載されている。後述するが、モジュール別重要度データ２１５は、二度目以降のプログラム図作成を高速化する為に用いる。【００２５】
図７に、開発者別開発スキルデータ２１６の一例を示す。開発者別開発スキルデータ２１６には、可視化対象ソースコードが関係する開発プロジェクトに関わる全開発者に対し、開発スキル値算出利用表２１２に記載されている開発スキル項目と、左記項目の算出結果値が格納される。【００２６】
図８に、情報処理装置１００でソースコードＡ２０７を可視化する際の一例であるフローチャートを示す。【００２７】
処理８００：プログラム図作成制御部２０５が、プログラム図作成を開始する。本実施例１ではプログラム図としてプログラム内のモジュールを全て可視化せず、重要なモジュールのみで構成されたプログラム図を作成する例を示す。【００２８】
処理８０１：入力装置１０２を用いて、本シーケンスにより作成するプログラム図の主利用者、ソースコード群２０６の中から可視化するソースコード、及び該ソースコード用リポジトリを、ユーザが指定する。例えば、本システムにネットワーク接続されたクライアント端末の入力部がその指定の入力を受け付ける。本実施例では可視化ソースコードとしてソースコードＡ２０７、及び該ソースコード用リポジトリとしてレポジトリ２０８を指定する。この際、主利用者名、可視化ソースコードや該ソースコード用レポジトリは、本処理８０１のようにユーザが入力せずとも、予め指定しておいても良い。【００２９】
処理８０２：ソースコード取得部２００が、通信装置１０７を介し、ソースコード群２０６の中から、可視化対象であるソースコードＡ２０７を取得する。また、同時に、リポジトリ取得部２０１が、通信装置１０７を介し、リポジトリ２０８を取得した上で、リポジトリ２０８内に格納されている該ソースコードＡ２０７の開発・保守データ２０９を取得する。もしソースコード群２０６やリポジトリ２０８が巨大で、ソースコードＡ２０７や開発・保守データ２０９の検索に時間が掛かりそうな場合には、ユーザ指示により、予め、使いそうなファイルを、例えば情報処理装置１００といった高速な検索が可能となる場所へ移動またはコピーしておく事も考えられる。【００３０】
処理８０３：データ解析部２０２が、処理８０２で取得したリポジトリ２０８に格納されている、様々なソースコードに関する開発・保守データを活用して、リポジトリに格納されている様々なソースコードを実装した全ての実装者のプログラム開発スキルを、開発スキル値算出利用表２１２に記載された計算式を利用して算出し、左記の算出結果を、開発者毎に、開発者別開発スキルデータ２１６へ格納する。この際、処理８０１にて入力されたプログラム図の主利用者名から、もし、プログラム図の主利用者はリポジトリに格納されているソースコード実装者の内の一人である事が判明した場合、モジュール重要度算出式データ２１３を用いて、該主利用者の開発スキルを利用したモジュール重要度を算出し、可視化判定閾値データ２１４の閾値として利用する事が考えられる。【００３１】
処理８０４：プログラム図作成制御部２０５が、処理８０２で取得したソースコードＡ２０７に含まれる、まだ解析していないモジュールの内、一つのモジュールを可視化判定対象モジュールとして取得する。また、データ解析部２０２が、処理８０２で取得した該ソースコードＡ２０７の開発・保守データ２０９から、取得した可視化判定対象モジュールの実装者名を取得し、それら全実装者のプログラム開発スキルを、開発者別開発スキルデータ２１６から取得する。【００３２】
処理８０５：可視化判定部２０３が、処理８０４で取得したモジュールを可視化するか否かを判定する。判定が真であれば、処理８０６へ進む。判定が偽であれば、処理８０７へ進む。尚、本処理内容は後に詳述する。【００３３】
処理８０６：描画指示部２０４が、該モジュールを表示する。【００３４】
処理８０７：描画指示部２０４が、該モジュールを非表示にする。【００３５】
処理８０８：プログラム図作成制御部２０５が、処理８０２で取得したソースコードＡ２０７にまだ解析していないモジュールがあるか否かを判定する。解析していない処理がある場合は、処理８０４へ進む。解析していない処理がない場合は、処理８０９へ進む。【００３６】
処理８０９：プログラム図作成制御部２０５が、プログラム図作成を終了する。【００３７】
処理８０５の可視化モジュール判定方法に関して、本例では、重要なモジュールを可視化モジュールとして抽出する方法を図９に示す。【００３８】
処理９００：データ解析部２０２が、処理８０４で取得した、可視化判定対象モジュール実装者のプログラム開発スキルを利用して、モジュール重要度を算出する。この際のモジュール重要度は、モジュール重要度算出式データ２１３の中から算出式を一つ選択して、算出する。算出式の選択方法は、最も利用頻度の高いものを選ぶといった方法や、ユーザが選ぶといった方法等、複数の方法が考えられるが、左記に限定されない。本例では、モジュール重要度算出式データ２１３の中から、モジュール重要度３（ｚ３）を選択した場合を述べる。データ解析部２０２は、開発者別開発スキルデータ２１６から、モジュール実装者らの補正バグ作成率の逆数（ｘ３）を、また、ソースコードＡの開発・保守データ２０９から、可視化判定対象モジュールに対するモジュール実装者毎の実装行数、及び可視化判定対象モジュールの総行数を取得し、モジュール重要度３（ｚ３）を算出する。モジュール重要度３（ｚ３）では、実装者らの開発スキル、及び実装寄与度（例えば、モジュールの総行数に対する実装者のモジュール実装行数）に基づきモジュール重要度を算出する。算出したモジュール重要度はモジュール別重要度データ２１５に格納しておき、後述するように、この後、重要度変更を行い適宜図を作り替える際に利用する。【００３９】
処理９０１：可視化判定部２０３が、可視化判定閾値データ２１４からモジュール重要度３（ｚ３）の閾値を取得、または処理８０３で述べたように、処理８０１にて入力されたプログラム図利用者の開発スキルを元にモジュール重要度３（ｚ３）の閾値を計算、し、処理９００で算出したモジュール重要度３（ｚ３）が、左記の閾値以上か否かを判定する。判定が真であれば、処理８０６へ進む。判定が偽であれば、処理８０７へ進む。【００４０】
本実施例の効果として、上述した特許文献１の可視化方法に存在した課題、すなわち開発者やユーザ等が予め可視化する処理を選択しておく必要があり、可視化の工数が掛かるという課題を解決し、ソースコード内の可視化する処理やモジュールを予め開発者やユーザ等が選択していない場合でも、モジュール実装者のプログラム開発者スキルを利用してモジュール重要度を算出する事で、可視化モジュールを自動で抽出してプログラム図を構築・表示する事で、可視化工数を削減出来る。【００４１】
本実施例のように一度プログラム図を作成すると、以降、該プログラム図と同時に表示されるモジュール重要度の閾値スライダーを調整して、表示するモジュールの重要度閾値を変更する事で、適宜、プログラム図を容易に作り替える事が出来る。これを、図１０を用いて説明する。【００４２】
処理９０１で、可視化判定閾値データ２１４に記載されたモジュール重要度３（ｚ３）の閾値または処理８０１にて入力されたプログラム図利用者の開発スキルを元に計算したモジュール重要度３（ｚ３）の閾値と、処理９００にてモジュール重要度算出式データ２１３に記載されたモジュール重要度３（ｚ３）の算出式を用いて算出したモジュール重要度とを比較し、モジュール重要度１０以上のモジュールのみを可視化すると、図１０の上図のようなプログラム図が表示される。この後、改めてユーザがモジュール重要度８０以上のモジュールで構成されたプログラム図を作成したいと考え、画面に表示されているモジュール重要度スライダを調整して、重要度を１０から８０に変更した場合は、前回、算出したモジュール重要度３（ｚ３）の値を、処理９００にてモジュール別重要度データ２１５に格納した事で、既に算出結果を保持している為、今回は、処理９００で行うモジュール重要度の算出を省略してモジュール別重要度データ２１５に格納された値を利用、また処理９０１で利用する閾値としてユーザが重要度の閾値スライダーで設定したモジュール重要度の閾値を利用する事で、容易に図１０下図を構築出来る。
【産業上の利用可能性】
【００４３】
以上のように、本発明にかかるプログラム図作成装置、プログラム図作成方法、及びプログラム図作成プログラムは、組込装置等、ソフトウェアが動作する差様々な装置に適用することができる。
【符号の説明】
【００４４】
１００  情報処理装置
１０１  中央処理装置
１０２  入力装置
１０３  二次記憶装置
１０４  主記憶装置
１０５  表示装置
１０６  バス
１０７  通信装置
１１０  情報装置Ａ
１２０  情報装置Ｂ
１３０  通信ネットワーク
２００  ソースコード取得部
２０１  リポジトリ取得部
２０２  データ解析部
２０３  可視化判定部
２０４  描画指示部
２０５  プログラム図作成制御部
２０６  ソースコード群
２０７  ソースコードＡ
２０８  リポジトリ
２０９  ソースコードＡの開発・保守データ
２１２  開発スキル値算出利用表
２１３  モジュール重要度算出式データ
２１４  可視化判定閾値データ
２１５  モジュール別重要度データ
２１６  開発者別開発スキルデータ。
【図１】
2015063954.tif 000003
【図２Ａ】
2015063954.tif 000004
【図２Ｂ】
2015063954.tif 000005
【図３】
2015063954.tif 000006
【図４】
2015063954.tif 000007
【図５】
2015063954.tif 000008
【図６】
2015063954.tif 000009
【図７】
2015063954.tif 000010
【図８】
2015063954.tif 000011
【図９】
2015063954.tif 000012
【図１０】
2015063954.tif 000013
【国際調査報告】
2015063954.tif 000014
2015063954.tif 000015