(57)【特許請求の範囲】
【請求項１】
ソフトウェアのソースコードを切り出して部品化するソフトウェア部品抽出支援装置において、
ソースコード内のデータ入出力と制御構造に着目してコード断片を切り出すソースコード抽出部と、
該コード断片に基本インターフェースを付与してソフトウェア部品を作成するソフトウェア部品作成部と、
該ソフトウェア部品を、元のソースコードの構造を表現する構造図の構成要素および機能の構造を表現する機能構造図の構成要素に対応付けて保持するソフトウェア部品管理部と、
を備え、
前記ソースコード抽出部により切り出された夫々のコード断片に対して、該コード断片の元になった関数の呼び出し関係および呼び出し元・呼び出し先のコメントをソースコードから抽出してメタデータを作成するメタデータ生成部をさらに備え、
前記ソフトウェア部品管理部は、前記メタデータを参照して前記ソフトウェア部品を前記構造図および機能構造図の構成要素に対応付ける、
ことを特徴とするソフトウェア部品抽出支援装置。
【請求項２】
前記ソフトウェア部品管理部に保持されている、ソフトウェア部品と前記構造図および機能構造図の構成要素との対応関係を、使用者の入力により変化させる対応付け結果修正操作部をさらに備えることを特徴とする請求項１に記載のソフトウェア部品抽出支援装置。
【請求項３】
新規ソフトウェアの構造図および機能構造図を入力として受け付けると、入力された構造図および機能構造図の夫々の構成要素に対応するソフトウェア部品を前記ソフトウェア部品管理部から選択して出力するソフトウェア部品選択支援部をさらに備えることを特徴とする請求項１または２に記載のソフトウェア部品抽出支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの再利用のために既存のソフトウェアのソースコードを部品化する装置に関するものである。
【背景技術】
【０００２】
近年、例えば家電機器や携帯機器などの制御ソフトウェアなどに見られるように、ソフトウェアは複雑化と大型化が進む一方、ソフトウェアに求められるニーズは早いスピードで変化している。これに対応して複雑かつ大型のソフトウェアを早いスピードで開発するためには、既存のソフトウェアを出来るだけ効率よく再利用することが不可欠となっている。
【０００３】
ソフトウェアの再利用を効率よく行うためには、既存のソフトウェアのソースコードから再利用可能なソフトウェア部品をそのデータと制御構造によって抽出し、既存のソフトウェアの開発者でなくても理解して再利用できるように、使用しているデータやコメントなどからソフトウェア部品を自動的に分類、整理する技術が求められる。
【０００４】
このような技術に関連して、例えば特許文献１によれば、プログラムの部品を、プログラムの制御構造や処理の入れ子関係から抽出した実行パスごとに管理する方法が示されている。
【０００５】
【特許文献１】特開平８−３２８９０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に示されている技術は、プログラムのテストを正確に行う目的で実行パスによってプログラムの部品が特定されるシステムになっているので、各部品の機能との対応付けが行われておらず、再利用前のプログラムの開発者以外にはわかりにくく、プログラムの部品を再利用してプログラムの開発の効率化を図る目的での使用には適さない。
【０００７】
本発明は、上記に鑑みてなされたものであって、ソフトウェア部品を切り出し、該ソフトウェア部品を効率よく再利用できる部品管理機構を備えたソフトウェア部品抽出支援装置を得ることを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、本発明は、ソフトウェアのソースコードを切り出して部品化するソフトウェア部品抽出支援装置において、ソースコード内のデータ入出力と制御構造に着目してコード断片を切り出すソースコード抽出部と、該コード断片に基本インターフェースを付与してソフトウェア部品を作成するソフトウェア部品作成部と、該ソフトウェア部品を、元のソースコードの構造を表現する構造図の構成要素および機能の構造を表現する機能構造図の構成要素に対応付けて保持するソフトウェア部品管理部と、を備え、前記ソースコード抽出部により切り出された夫々のコード断片に対して、該コード断片の元になった関数の呼び出し関係および呼び出し元・呼び出し先のコメントをソースコードから抽出してメタデータを作成するメタデータ生成部をさらに備え、前記ソフトウェア部品管理部は、前記メタデータを参照して前記ソフトウェア部品を前記構造図および機能構造図の構成要素に対応付ける、ことを特徴とする。
【発明の効果】
【０００９】
この発明によれば、既存のソフトウェアから切り出したソフトウェア部品を元のソフトウェアのソースコードの構造を表現する構造図の構成要素および機能の構造を表現する機能構造図の構成要素の両方に対応付けて保持するので、ソフトウェア部品を切り出し、該ソフトウェア部品を効率よく再利用できる部品管理機構を備えたソフトウェア部品抽出支援装置を得ることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１０】
以下に、本発明にかかるソフトウェア部品抽出支援装置の実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１１】
実施の形態．
図１は、本発明にかかるソフトウェア部品抽出支援装置の実施の形態の機能構成図である。
【００１２】
図１において、ソフトウェア部品抽出支援装置１は、ソースコード抽出部１０、ソフトウェア部品作成部１１、ソフトウェア部品管理部１２、ソフトウェア部品選択支援部１３、メタデータ生成部１４、対応付け結果修正操作部１５、ソースコード保存庫２０、基本インターフェース保存庫２１、ソフトウェア仕様保存庫２２を備える。
【００１３】
次に、ソフトウェア部品抽出支援装置１が備える各機能部の機能を説明する。
【００１４】
ソースコード抽出部１０は、ソースコード保存庫２０からソースコードを取り出し、ソースコード内の関数・繰り返し構文・分岐構文に着目してソースコードを分解し、そこに含まれる条件および処理を部品の候補（コード断片）として切り離す。また、ソースコード抽出部１０は、複数の処理（関数呼び出しなど）と同じ処理を行っている部分があれば、同じ処理を行う複数の断片を一つのコード断片として扱う。
【００１５】
ここで、ソースコード抽出部１０によるソースコードの切り出し方をより具体的に説明する。図２に、例としてセンサー入力に関するソフトウェアのソースコードの一部を示す。図２に示されるソースコードにおいて、ソースコード抽出部１０は、コメント文「センサーデータのバックアップ」に示される関数のような小さい関数はそのまま切り出す。コメント文「センサーデータの更新」に示される関数のような大きな関数は、ソースコード抽出部１０は、繰り返し構文および分岐構文に基づいていくつかの部分に分けて切り出す。さらに、ソースコード抽出部１０は、１１行目および１２行目に記述されている「ｓｅｎｓｏｒ＿ｕｐｄｔｄｒｖ(＆ｓｄａｔａ.ｄａｔａ[ｉ])；ｓｅｎｓｏｒ＿ｃｈｅｃｋ(＆ｓｄａｔａ．ｄａｔａ［ｉ］）；」と、１６行目および１７行目に記述されている「ｓｅｎｓｏｒ＿ｕｐｄｔｄｒｖ（＆ｓｄａｔａ．ｄａｔａ［ｅｎｄ］）；ｓｅｎｓｏｒ＿ｃｈｅｃｋ（＆ｓｄａｔａ．ｄａｔａ［ｅｎｄ])；」のように、使われているデータが同じであって、かつ同じ条件または同じ処理手順の部分については、該複数の部分を同一の断片とみなして１つのコード断片として切り出す。
【００１６】
このように切り離されたコード断片は、ソースコード抽出部１０によりソフトウェア部品作成部１１に送られる。
【００１７】
ソフトウェア部品作成部１１は、ソースコード抽出部１０から送られてきたコード断片にインターフェースを与えて部品化する。インターフェースはインターフェース保存庫２１に蓄えられており、ソフトウェア部品作成部１１は、蓄えられているインターフェースのうち、送られてきたコード断片に最も適切なものを選択する。部品化されたソースコード（以下、単にソフトウェア部品という）はソフトウェア部品管理部１２に送られる。
【００１８】
メタデータ生成部１４は、夫々のコード断片に対応する付加的な情報（メタデータ）を作成する。メタデータは、ソフトウェア部品を後述する元のプログラムの構造を図示したクラス図および元のプログラムの機能の構造を図示したフィーチャモデルに対応付けるための情報であり、具体的には、メタデータ生成部１４により、コード断片の周辺のソースコードおよびコード断片中で使用されているデータから、元になった関数の呼び出し関係や呼び出し元・呼び出し先のコメントが抜き出されて作成される。図２のソースコードの例においては、コメント文「センサーデータのバックアップ」の関数のコード断片に関しては、該コード断片に対するメタデータには、例えば、該コメント文と、代入先のデータ「ｓｄａｔａ＿ｂｋ」および代入されるデータ「ｓｄａｔａ」とが記述される。作成されたメタデータは、コード断片から作成されるソースコードの部品と対にしてソフトウェア部品管理部１２に送られる。
【００１９】
ソフトウェア部品管理部１２は、メタデータに記述される情報を基に、ソフトウェア部品を、ソフトウェア仕様保存庫２２に格納される元のプログラムのクラス図および元のプログラムのフィーチャモデルに対応付ける。
【００２０】
まず、クラス図への対応付けを説明する。クラス図は、クラス（名前、属性、および操作の観点から分類されたデータや機能の集まり）およびインターフェース（本段落のクラス図の説明では、操作のみの機能を指していう）の内容や相互関係などを表現することによりソフトウェアの構造を記述しているものである。
【００２１】
図３は、前述のセンサー入力に関するプログラムのクラス図の例を説明する図である。図３に示すクラス図は、クラスＣと関連のあるクラスＡは、インターフェースＢを参照することによってクラスＢ１、クラスＢ２、およびクラスＢ３と関連を持つ、という構造をセンサー入力に関するプログラムが有しているということを表す。ソフトウェア部品管理部１２は、ソフトウェア部品を、メタデータに記述される関数の呼び出し関係や呼び出し元・呼び出し先のコメントから判断して、クラスＡ、クラスＢ、クラスＢ１〜Ｂ３、およびクラスＣに分類する。
【００２２】
このように、ソフトウェア部品管理部１２が、クラス図中に表現されるインターフェースまたはクラスごとにソフトウェア部品を集約することによって、全てのソフトウェア部品は全体構造に従って体系化される。ここで、一つのソフトウェア部品が複数のクラス若しくはインターフェースに対応してもよい。
【００２３】
次に、フィーチャモデルへの対応付けを説明する。フィーチャモデルは、機能を表すフィーチャと呼ばれるボックスを、木構造で表示することで、プログラムの機能の構造を表現するモデルである。
【００２４】
図４に、前述のセンサー入力に関するプログラムのフィーチャモデルの例を示す。図４において、該プログラムは、フィーチャモデルの木構造の最上位に位置するフィーチャに示されるように、センサー入力にかかるものであり、センサー入力に関する機能は、温度センサーに関する機能とセンサーデータのバックアップ機能とに分類されている。さらに温度センサーに関する機能は、室外気温センサーに関する機能と、室内温度センサーに関する機能とに分けられ、室内温度センサーに関する機能は、床の温度センサー、天井の温度センサー、およびドアの温度センサーに関する機能にさらに分けられる。天井の温度センサーに関する機能と、ドアの温度センサーに関する機能とは、相互排他的なフィーチャとなっている。このようなフィーチャモデルに対して、例えば、図２に示されるソースコードにおいて、コメント文「センサーデータのバックアップ」の部分の関数から作成されるソフトウェア部品は、メタデータに該コメント文が記述されているので、ソフトウェア部品管理部１２は、該メタデータを参照して、該ソフトウェア部品をフィーチャ「センサーデータのバックアップ」に分類する。
【００２５】
このように、機能を階層構造で表されたフィーチャに、ソフトウェア部品を割り当てていくことで、それぞれの部品をソフトウェアのかかわりのある機能に対応付けられる。フィーチャモデルに関しても、１つの部品が複数の機能にかかわっている場合は、１つの部品が複数のフィーチャに割り当てられてもよい。
【００２６】
対応付け結果修正操作部１５は、使用者からの入力に応じて、ソフトウェアの部品と元のプログラムのクラス図およびフィーチャモデルとの対応付けの結果を適宜変更し、修正する。
【００２７】
ソフトウェア部品選択支援部１３は、ソフトウェア部品抽出支援装置１の使用者が必要とするソフトウェアの機能の一部または全部を新規にフィーチャモデルまたはフィーチャモデル並びにクラス図として入力されることにより、該フィーチャモデルのソフトウェアに必要なソフトウェア部品で、かつソフトウェア部品管理部１２に保持されているソフトウェア部品を出力する。
【００２８】
次に、本発明にかかるソフトウェア部品抽出支援装置の実施の形態の動作を説明する。図５は、実施の形態のソフトウェア部品抽出支援装置がソースコードからコード断片を切り出し、クラス図およびフィーチャモデルと対応付けられたソフトウェア部品としてソフトウェア部品管理部１２に登録されるまでの動作を説明するフローチャートである。
【００２９】
図５において、ソースコード抽出部１０は、ソースコード保存庫からソースコードを取り出して該ソースコードを断片化し、同時にメタデータ生成部１４は夫々のコード断片に対応するメタデータを作成する（ステップＳ１）。
【００３０】
次に、ソフトウェア部品作成部１１は、夫々のコード断片に対して、適切なインターフェースを基本インターフェース保存庫より取り出して付加し、コード断片を部品化してソフトウェア部品とする（ステップＳ２）。
【００３１】
次に、ソフトウェア部品管理部１２は、ソフトウェア仕様保存庫より元のプログラムのクラス図を取り出し、夫々のソフトウェア部品に対応するメタデータに基づいて、ソフトウェア部品をクラス図に対応付ける（ステップＳ３）。
【００３２】
続いて、ソフトウェア部品管理部１２は、ソフトウェア仕様保存庫より元のプログラムのフィーチャモデルを取り出し、夫々のソフトウェア部品に対応するメタデータに基づいて、ソフトウェア部品をフィーチャモデルに対応付ける（ステップＳ４）。
【００３３】
そして、ソフトウェア部品管理部１２は、クラス図およびフィーチャモデルと対応付けられた夫々のソフトウェア部品をソフトウェア部品管理部１２内に登録し（ステップＳ５）、動作を終了する。
【００３４】
使用者がソフトウェア部品選択支援部１３に対して新規のフィーチャモデル、またはフィーチャモデル並びにクラス図を入力すると、上述の動作によりソフトウェア部品管理部１２内に登録されたソフトウェア部品から、必要とするソフトウェアの機能の一部または全部のソフトウェア部品が選択されて出力される。また、使用者は、対応付け結果修正操作部１５を操作することにより、ソフトウェア部品とクラス図およびフィーチャモデルとの対応付け結果を修正することが可能である。
【００３５】
なお、本実施の形態においては、プログラムの構造を表現するためにクラス図を用いる構成としたが、プログラムの構造をわかりやすく表現できる手法であれば、例えばオブジェクト図のように他の手法を用いてもかまわない。また、本実施の形態にて使用される機能構造の表現方法であるフィーチャモデルに関しても、プログラムの機能の構造をわかりやすく表現できる手法であればフィーチャモデルにこだわる必要はない。
【００３６】
このように、実施の形態にかかる本発明のソフトウェア部品抽出支援装置は、既存のソフトウェアのソースコードから切り出したコード断片からソフトウェア部品を作成し、該ソフトウェア部品を元のソフトウェアのソースコードの構造を表現する構造図の構成要素および機能の構造を表現する機能構造図の構成要素の両方に対応付けて保持するので、使用者が元のプログラムの開発者でなくても各ソフトウェア部品の元のプログラムの構造上および機能構造上の位置づけを直感的に把握することができるので、ソフトウェア部品を切り出し、該ソフトウェア部品を効率よく再利用できる部品管理機構を備えたソフトウェア部品抽出支援装置を得ることができる。
【産業上の利用可能性】
【００３７】
以上のように、本発明にかかるソフトウェア部品抽出支援装置は、ソフトウェアの再利用のために既存のソフトウェアのソースコードを部品化する装置に適用して好適である。
【図面の簡単な説明】
【００３８】
【図１】本発明の実施の形態にかかるソフトウェア部品抽出支援装置の機能構成図である。
【図２】コード断片が切り出される前の一部のソースコードの例を示す図である。
【図３】コード断片が切り出される前のソースコードのクラス図の例を示す図である。
【図４】コード断片が切り出される前のソースコードのフィーチャモデルの例を示す図である。
【図５】本発明の実施の形態にかかるソフトウェア部品抽出支援装置の動作を説明するフローチャートである。
【符号の説明】
【００３９】
１  ソフトウェア部品抽出支援装置
１０  ソースコード抽出部
１１  ソフトウェア部品作成部
１２  ソフトウェア部品管理部
１３  ソフトウェア部品選択支援部
１４  メタデータ生成部
１５  対応付け結果修正操作部
２０  ソースコード保存庫
２１  基本インターフェース保存庫
２２  ソフトウェア仕様保存庫
【図１】
0005041990.tif 000002
【図２】
0005041990.tif 000003
【図３】
0005041990.tif 000004
【図４】
0005041990.tif 000005
【図５】
0005041990.tif 000006