(57)【要約】【課題】別々のＥＣＵが実行していた複数のアプリケーションの統合の自動化を支援する統合支援装置を提供すること。【解決手段】ＥＣＵに搭載されていた複数のアプリケーションのソースコードを記憶する記憶手段３１から、それぞれのソースコードを読み出し機能単位毎の記述を抽出する抽出手段３３と、第1のアプリケーションの前記記述と第２のアプリケーションの前記記述を比較して、一致条件を満たした前記記述同士を関連づける関連づけ手段３４と、前記第1のアプリケーション又は前記第２のアプリケーションの前記記述の一方を共通コード部に登録し、前記第1のアプリケーション及び前記第２のアプリケーションから関連づけられた前記記述をそれぞれ消去すると共に前記共通コード部への対応づけ情報を記述する統合手段３６と、を有することを特徴とする。【選択図】図２
2012208663.tif 000002
【特許請求の範囲】
【請求項１】
ＥＣＵに搭載されるアプリケーションの統合を支援する統合支援装置であって、
ＥＣＵに搭載されていた複数のアプリケーションのソースコードを記憶する記憶手段から、それぞれのソースコードを読み出し機能単位毎の記述を抽出する抽出手段と、
第1のアプリケーションの前記記述と第２のアプリケーションのソースコードの前記記述を比較して、一致条件を満たした前記記述同士を関連づける関連づけ手段と、
前記第1のアプリケーション又は前記第２のアプリケーションのソースコードの前記記述の一方を共通コード部に登録し、前記第1のアプリケーション及び前記第２のアプリケーションから関連づけられた前記記述をそれぞれ消去すると共に前記共通コード部への対応づけ情報を記述する統合手段と、
を有することを特徴とする統合支援装置。
【請求項２】
前記関連づけ手段は、第1のアプリケーションの前記記述と第２のアプリケーションの前記記述を関連づける操作を受け付ける、
ことを特徴とする請求項１記載の統合支援装置。
【請求項３】
前記関連づけ手段は、第1のアプリケーションの前記記述と第２のアプリケーションのソースコードの前記記述の比較結果を用いて、第1のアプリケーションの前記記述と第２のアプリケーションの前記記述の相違部分を表示装置に提示する、ことを特徴とする請求項１又は２記載の統合支援装置。
【請求項４】
前記抽出手段は、複数のアプリケーションの前記記述に含まれるプログラム言語の関数の書式が関数毎に登録された関数仕様ドキュメントを前記記憶手段から読み出し、関数毎に関数仕様記述を抽出し、
前記関連づけ手段は、前記第1のアプリケーションと前記第２のアプリケーションの前記関数仕様記述を比較して、前記一致条件を満たした前記関数仕様記述同士を関連づけ、
前記統合手段は、前記第1のアプリケーション又は前記第２のアプリケーションの前記関数仕様記述の一方を共通仕様記述部に登録し、前記第1のアプリケーション及び前記第２のアプリケーションから関連づけられた前記関数仕様記述をそれぞれ消去すると共に前記共通仕様記述部への対応づけ情報を記述する、
ことを特徴とする請求項１〜３いずれか１項記載の統合支援装置。
【請求項５】
前記関連づけ手段は、前記第1のアプリケーションと前記第２のアプリケーションの前記関数仕様記述が前記一致条件を満たすと判定した場合にのみ、
前記関数仕様記述に含まれる関数名を少なくとも一部に含む、第1のアプリケーションの前記記述と第２のアプリケーションの前記記述が一致したと判定する、
ことを特徴とする請求項４記載の統合支援装置。
【請求項６】
前記一致条件は、関数の引数又は戻り値の少なくとも一方が一致することを条件とする、ことを特徴とする請求項１〜４いずれか１項記載の統合支援装置。
【請求項７】
前記関連づけ手段は、前記一致条件の設定を受け付ける、ことを特徴とする請求項１〜４いずれか１項記載の統合支援装置。
【請求項８】
ＥＣＵに搭載されるアプリケーションの統合を支援する統合支援方法であって、
抽出手段が、ＥＣＵに搭載されていた複数のアプリケーションのソースコードを記憶する記憶手段から、それぞれのソースコードを読み出し機能単位毎の記述を抽出するステップと、
関連づけ手段が、第1のアプリケーションの前記記述と第２のアプリケーションのソースコードの前記記述を比較して、一致条件を満たした前記記述同士を関連づけるステップと、
統合手段が、前記第1のアプリケーション又は前記第２のアプリケーションのソースコードの前記記述の一方を共通コード部に登録し、前記第1のアプリケーション及び前記第２のアプリケーションから関連づけられた前記記述をそれぞれ消去すると共に前記共通コード部への対応づけ情報を記述するステップと、
を有することを特徴とする統合支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のアプリケーションがＥＣＵに統合される際に開発者を支援する統合支援装置に関する。
【背景技術】
【０００２】
車載機器の電子化や制御の高度化が進み、一台の車両に搭載される電子制御ユニット（以下、ＥＣＵという）の数が増加してきた。しかし、搭載するためのスペースの制約やコスト増が生じるようになってきたため、複数のＥＣＵがそれぞれ提供していた機能を１つのＥＣＵに統合することが要請されるようになった。もともと個別のＥＣＵが提供していた機能を統合するためには多様な検討が必要とされている（例えば、特許文献１参照。）。特許文献１には、通信量が同程度のＥＣＵをクラスタリングすることで、統合後のＥＣＵネットワーク設計を支援する設計支援装置が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−２０５１０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところでＥＣＵの機能の多くはアプリケーション（プログラム）が提供するので、ＥＣＵの機能統合には複数のアプリケーションを１つのＥＣＵに再搭載する作業が含まれる。統合対象となるアプリケーションは個別のＥＣＵ上で動くことを前提に設計されているので、アプリケーション間で機能が重複することがある。この場合、単に複数のアプリケーションを統合すると１つのＥＣＵが複数の同じ機能を有してしまい好ましくない。
【０００５】
また、機能が同じでもわずかな仕様の違いにより、統合の前後でアプリケーションの振る舞いが変わってしまう場合もある。
【０００６】
このような不都合を回避するため、従来、別々のＥＣＵ上で動作していたアプリケーションを１つのＥＣＵに統合する際は、開発者が複数のアプリケーションにおいて、
・同一機能で仕様が同じ部分
・同一機能でも仕様が部分的に異なる部分
を判断して、手作業で統合化を行っている。
【０００７】
機能と仕様が同じであれば統合の前後でアプリケーションの振る舞いが変わるおそれは少ない。また、同一機能でも仕様が部分的に異なる場合、開発者が機能に関するソースコードを調整すればよいことがわかるので、調整すれば振る舞いが変わるおそれを低減できる。したがって、統合前にこういった仕様の違いを抽出できれば開発者の作業負担を軽減できる。
【０００８】
本発明は、上記課題に鑑み、別々のＥＣＵが実行していた複数のアプリケーションの統合の自動化を支援する統合支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題に鑑み、本発明は、ＥＣＵに搭載されるアプリケーションの統合を支援する統合支援装置であって、ＥＣＵに搭載されていた複数のアプリケーションのソースコードを記憶する記憶手段から、それぞれのソースコードを読み出し機能単位毎の記述を抽出する抽出手段と、第1のアプリケーションの前記記述と第２のアプリケーションの前記記述を比較して、一致条件を満たした前記記述同士を関連づける関連づけ手段と、前記第1のアプリケーション又は前記第２のアプリケーションの前記記述の一方を共通コード部に登録し、前記第1のアプリケーション及び前記第２のアプリケーションから関連づけられた前記記述をそれぞれ消去すると共に前記共通コード部への対応づけ情報を記述する統合手段と、を有することを特徴とする。
【発明の効果】
【００１０】
別々のＥＣＵが実行していた複数のアプリケーションの統合の自動化を支援する統合支援装置を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】統合支援装置の構成例を示す図の一例である。
【図２】統合支援装置の機能ブロック図の一例である。
【図３】統合支援装置の全体的な動作を示すシーケンス図の一例である。
【図４】ドキュメントからの抽出を模式的に説明する図の一例である。
【図５】ソースファイルからの抽出を模式的に説明する図の一例である。
【図６】アプリケーションBのドキュメントとソースファイルからの抽出を模式的に説明する図の一例である。
【図７】アプリケーションＡとＢのドキュメントの照合について説明する図の一例である。
【図８】アプリケーションＡとＢのソースコードの照合について説明する図の一例である。
【図９】アプリケーションＡとＢのドキュメントの統合について説明する図の一例である。
【図１０】アプリケーションＡとＢのソースコードの統合について説明する図の一例である。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態について図面を参照しながら説明する。
図１（ａ）は統合支援装置の正面図の一例を示す。統合支援装置１００はコンピュータを実体とし、コンピュータがプログラムを実行することで統合支援装置１００が実現される。図では一台のコンピュータが図示されているが、１つのコンピュータで統合支援装置１００の全ての処理を行う必要はなく、例えば、開発者の操作するコンピュータがサーバ上のコンピュータに処理を依頼する形態で１つの統合支援装置１００を提供するとしてもよい。また、統合支援装置１００は多くのデータを使用するが、統合支援装置１００が全てのデータをローカルに記憶していてもよいし、ネットワークを介して接続された他の１台以上のコンピュータが分散して記憶していてもよい。
【００１３】
図１（ｂ）は統合支援装置１００のハードウェア構成図の一例を示す。統合支援装置１００は、バスにより接続されたＣＰＵ２３、ＲＯＭ１８、ＲＡＭ１９、外部Ｉ／Ｆ２０、通信制御部２１、入力装置Ｉ／Ｆ１４、表示装置Ｉ／Ｆ１５、記憶装置１６、及び、補助記憶装置１７を有する。
【００１４】
ＣＰＵ２３は統合支援装置１００の全体の制御を司るものであり、その他のブロックはＣＰＵ２３の制御下におかれる。ＲＯＭ１８は、入出力用の簡易なプログラム及びその他の静的な（書き換えのない）データを記憶している。ＲＡＭ１９は、ＣＰＵ２３がプログラムを実行する際、プログラムやデータの一時的な記憶場所として利用される。
【００１５】
外部Ｉ／Ｆ２０は、ＵＳＢ等のインターフェースを用いて外部の機器との通信を可能とする。通信制御部２１は、有線または無線によりイーサネット（登録商標）等のネットワークに接続し、外部の機器との通信を可能とする。
【００１６】
入力装置Ｉ／Ｆ１４にはキーボードやマウス等の入力装置１１が接続され、開発者からの操作を受け付けるインターフェースとなる。表示装置Ｉ／Ｆ１５にはディスプレイ等の表示装置１２が接続され開発者に視覚的な情報を提供するインターフェースとなる。
【００１７】
記憶装置１６は、プログラム２２や大量のデータなどを蓄積したり、データベースの記憶場所として利用される不揮発のメモリ（ＨＤＤ等）である。プログラム２２は、不図示のサーバからダウンロードすることでインストールされたり、可搬型記憶媒体１３に記憶された状態で配布される。
【００１８】
補助記憶装置１７は、DVDやメモリカードなどの可搬型記憶媒体１３からデータを読み込んだり、バックアップのためのデータを書き込んだりする、可搬型記憶媒体１３のインターフェースとして利用される。
【００１９】
図２は、統合支援装置１００の機能ブロック図の一例を示す。統合支援装置１００は抽出部３３、照合部３４及び統合部３５を有する。これらの機能はＣＰＵ２３がプログラム２２を実行して実現される。また、統合支援装置１００は統合元データ３１、統合テンプレート３２、及び、統合後データ３６を記憶している。これらはアプリケーション及びアプリケーションに付随するドキュメントである。統合元データ３１等は記憶装置１６、可搬型記憶媒体１３、ネットワーク上のＮＡＳ（Network  Attached  Storage）、又は、ネットワークに接続された他の機器に記憶されている。図では、アプリケーションを「アプリ」と省略している。
【００２０】
アプリＡ、Ｂは統合対象の２つのアプリケーションであり、統合元データ３１として記憶装置１６等に記憶される。ＧＵＩ３７は、主に表示装置１２に表示される操作画面であり、入力装置１１を介して開発者の操作を受け付けるために使用される。アプリＡ´、Ｂ´及び共通部は統合後データ３６として記憶装置１６等に記憶されている。アプリＡ´はアプリケーションＡに固有の部分、アプリＢ´はアプリケーションＢに固有の部分、共通部はアプリケーションＡとＢに共通の部分である。
【００２１】
統合元データ３１は、統合対象の各アプリケーションの統合に必要なデータである。具体的にはアプリケーションＡ、Ｂのソースコード、アプリケーションＡ、Ｂの仕様が記述されたドキュメント等が含まれる。本実施形態では２つのアプリケーションの統合を例に説明するがアプリケーションの数が３つ以上でも同様に処理できる。
【００２２】
ソースコードは、例えばＣ、Ｃ＋＋、ＧＯ、Ｊａｖａ（登録商標）等どのようなプログラム言語で記述されていてもよい。ソースコードはプログラム言語の文法に従って記述されている。
【００２３】
ドキュメントは自然言語（日本語、英語、中国語等）やXML等のマークアップランゲージで記述されているが、好ましくは予め定められたフォーマットを用いて記述されている。フォーマットは、項目分けすること、及び、項目毎の記述内容を定めている。自然言語の場合のフォーマットは、ドキュメントがテーブル状、リスト状などに記述される際の項目を規定しており、マークアップランゲージの場合はタグによりデータ構造が定められる。また、このように厳密に項目を定めておくことが困難な場合、ドキュメントは少なくとも段落分けされている。
【００２４】
ドキュメントは、アプリケーションに含まれるモジュールの機能、各機能を提供するための関数の仕様等を定める。関数が機能に対応する場合、仕様は同じ機能の振る舞いに影響する。ドキュメントを読めば、ソースコードの開発者以外の人間がアプリケーションが提供する各機能や、機能を使用するために必要な情報（引数や戻り値）を理解できるようになっている。ドキュメントはアプリケーションの開発者が作成するものであるが、いくつのドキュメントに分割するか、ドキュメント名、ドキュメント内容等が厳密に決まっているとは限らない。
【００２５】
統合テンプレート３２は、抽出部３３が抽出した統合中のアプリケーションのドキュメントやソースコードを管理するためのデータである。具体的には、アプリケーションの機能や仕様についてドキュメントで記述された機能説明箇所、及び、機能を提供する（機能に対応した）ソースコードの機能対応関数等が登録される。
【００２６】
統合後データ３６は、上記のとおり、複数のアプリケーションが統合されることで得られた統合後のアプリケーションＡ´、Ｂ´及び共通部である。それぞれ、ドキュメントやソースコード等を含む。
【００２７】
抽出部３３は、アプリケーションのドキュメントやソースコードを参照して、アプリケーション毎に、統合元データ３１から、アプリケーションの機能に対応するドキュメントの機能説明箇所、及び、ソースコードから機能を実現する機能対応関数、を抽出する。抽出した機能説明箇所、機能対応関数を統合テンプレート３２に登録する。
【００２８】
照合部３４は、２つの方法でアプリケーション間で重複している機能を対応づける。まず、照合部３４は抽出部３３が抽出したアプリケーション間の機能説明箇所同士、機能対応関数同士を照合して一致している機能説明箇所及び機能対応関数を特定する。機能説明箇所又は機能対応関数が完全に一致している場合、その関数の機能は２つのアプリケーションに重複しているし、仕様も同じだと判定される。また、照合部３４は機能説明箇所及び機能対応関数が類似しているが完全には一致しない場合、相違部分を開発者に提示する。開発者は、相違部分を見ることで２つのアプリケーションの機能や仕様が同じか否かを判断することができる。
【００２９】
また、照合部３４は開発者から、２つのアプリケーションに共通する機能説明箇所又は機能対応関数を受け付ける。開発者が選択した２つのアプリケーションの機能説明箇所又は機能対応関数は、開発者が機能だけでなく仕様も同じであると判断した機能である。すなわち、上記の明示の前又は後に、開発者が重複していると判断した機能説明箇所又は機能対応関数を選択することで、照合部３４は２つのアプリケーションの機能説明箇所同士又は機能対応関数同士を関連付けることができる。
【００３０】
統合部３５は、照合部３４が重複していると判定した又は受け付けた機能について、ドキュメントとソースコードをそれぞれ編集することで、アプリＡ´、Ｂ´を作成する。また、ドキュメントとソースコードの共通部分をそれぞれ抽出し、統合後データ３６の共通部に出力する。
【００３１】
〔動作手順〕
図３は、統合支援装置１００の全体的な動作を示すシーケンス図の一例を示す。
Ｓ１：開発者は、統合支援装置１００の入力装置１１を操作して統合対象のアプリケーションを指示する。
Ｓ２：抽出部３３は開発者が指示したアプリケーションＡ，Ｂを統合元データ３１に登録する。
Ｓ３：抽出部３３は統合元データ３１のアプリケーションＡ，Ｂからドキュメントとソースコードをそれぞれ取り出し、機能説明箇所及び機能対応関数を抽出する。機能説明箇所と機能対応関数は照合部３４に出力される。
Ｓ４：照合部３４はアプリケーションＡとＢの機能説明箇所を突合して重複する機能説明箇所、及び、アプリケーションＡとＢの機能対応関数を突合して重複する機能対応関数を関係づける。
Ｓ５：照合部３４は重複する機能説明箇所及び機能対応関数、並びに、機能説明箇所及び機能対応関数の相違部分をＧＵＩ３７に提示する。
Ｓ６：開発者は、ＧＵＩ３７に表示される機能説明箇所及び機能対応関数の相違部分を目視して、又は、目視する前に、アプリケーションＡ、Ｂの機能説明箇所を関連付け、アプリケーションＡ、Ｂの機能対応関数を関連付ける。
Ｓ７：照合部３４は、機能説明箇所及び機能対応関数の関連づけを統合部３５に通知する。
Ｓ８：統合部３５は、関連付けられた機能説明箇所及び機能対応関数はアプリケーションＡとＢに共通であるとして、アプリケーションＡとＢのうち一方の機能説明箇所及び機能対応関数を共通部に登録する。また、元のアプリケーションＡ、Ｂのドキュメントから機能説明箇所を削除すると共に、共通部への参照情報を記述する。同様に、元のアプリケーションＡ、Ｂのソースコードから機能対応関数を削除すると共に、共通部への参照情報を記述する。このような編集後のアプリケーションＡ、ＢのドキュメントとソースコードがアプリＡ´、Ｂ´である。
【００３２】
なお、統合部３５はアプリケーションＡ´、Ｂ´や共通部を作成する際、開発者による仕様の変更などの操作を受け付けることができる。
以下、抽出、照合、及び、統合について詳細に説明する。
【００３３】
〔抽出〕
図４はドキュメントからの抽出を模式的に説明する図の一例である。図４では抽出部３３がアプリケーションＡから機能説明箇所を抽出している。
【００３４】
まず、統合元データ３１にはアプリケーションＡのドキュメントとソースコードが登録されている。
S3-1：抽出部３３は統合テンプレート（成果物一覧）を作成する。アプリケーションＡの成果物一覧にはモジュール仕様書、関数仕様書、ソースファイル等が登録される。成果物はアプリケーション間で共通とは限らないので、開発者が、抽出部３３が処理対象とするドキュメント及びソースコードを統合支援装置１００に指示したり、処理対象のドキュメント及びソースコードに特定のファイル名を付与しておくことも有効である。
【００３５】
成果物一覧はドキュメント及びソースコードの具体的な内容であり、成果物一覧のモジュール仕様書と関数仕様書はドキュメントから抽出され、ソースファイルはソースコードから抽出される。
【００３６】
ところで、アプリケーションの統合において、ソースコードが統合されていれば、１つのＥＣＵに統合後のアプリケーションを搭載することができる。しかしながら、ソースコードに付随するドキュメントがなければその後のメンテナンス等に不都合が生じるおそれがある。本実施形態では、ドキュメントの統合を含めアプリケーションの統合について説明するが、アプリケーションの規模が小さい場合などは、ソースコードのみを統合することも可能である。
S3-2：抽出部３３はモジュール仕様書から各モジュールを、関数仕様書から各関数をリストアップする。ここではモジュール仕様書の目次に各モジュールがリストアップされているものとして、抽出部３３はモジュール仕様書の目次を抽出する（図の統合テンプレート（モジュール仕様））。モジュール仕様書は、例えばアプリケーションの中の１つ以上の機能の集合である。１つの関数が１つの機能に対応する場合、複数の関数（モジュール）の集合の機能を定義している。
統合テンプレート（モジュール仕様）には「はじめに」「モジュール一覧」「ModuleA1」「ModuleA2」が登録されている。「ModuleA1」「ModuleA2」はモジュール名とみなすことができる。抽出部３３は関数仕様書からも同様に統合テンプレート（関数仕様書）を作成するが、これについては後述する。
S3-3：抽出部３３は統合テンプレート（モジュール仕様）の各モジュールに対する記述をモジュール毎に、モジュール仕様書から抽出して記述部に登録する。この記述部が、モジュール仕様書の機能説明箇所である。統合テンプレート（モジュール仕様）にはまず「ModuleA1」が登録されているので、抽出部３３は目次を参照し又は「ModuleA1」でモジュール仕様書を検索する等して、モジュール仕様書から「ModuleA1」にいて記述された箇所を特定する。「ModuleA2」についても同様である。抽出部３３は、特定した箇所から次のモジュールの特定箇所が始まるまでを１つのモジュールに関する記述として抽出する。これらの処理により、「ModuleA1」の記述部には以下のような記述が登録される。
「３．ModuleA1  
3.1  概要
ModuleA1はXXに対するサービスを提供する。…  」
「４．ModuleA2  
4.1  概要
ModuleA2はYYに対するサービスを提供する。…  」
“XXに対するサービス”や“YYに対するサービス”がアプリケーションＡのモジュールの機能の説明である。
【００３７】
図５はソースファイルからの抽出を模式的に説明する図の一例である。図５では抽出部３３がアプリケーションＡから機能対応関数を抽出している。
S3-11：すでに説明したように抽出部３３は統合テンプレート（成果物一覧）を作成している。
S3-12：抽出部３３はソースファイルを参照して、ソースファイルのフォルダ構成とファイル名を統合テンプレート（ソースファイル一覧）に登録する。ソースファイルは機能単位の開発や開発管理などのため複数のファイルから構成されることが多い。また、ファイル間の関係を明確にするため、ファイルがフォルダに分散して管理されることがある。フォルダ構成とは各ファイルが記憶されているフォルダとフォルダ間の関係を意味する。
【００３８】
アプリケーションＡの統合テンプレート（ソースファイル一覧）にはモジュール名“1 MdlA1”に続いて、ファイル名“1.1  srcA1.c”“1.2  srcA1.h”“1.3  srcA2.c”“1.4  srcA3.c”が登録されている。ファイル名の前の数字1.1〜1.4がファイル構造を表し、左から数えて同じ位の数字が同じファイルは同じ階層のフォルダであることを意味する。深い階層のフォルダに記憶されているファイルほど数字の桁数が多くなる。よって、ファイル名の前の数字を辿ることでフォルダ構造が表される。
S3-13：抽出部３３は統合テンプレート（ソースファイル一覧）に登録されたファイル毎に、ソースファイルから統合テンプレート（関数一覧）を作成する。この統合テンプレートはソースファイルの関数をリストアップしたものである。
【００３９】
関数型の言語では開発者が関数を定義することができ、関数の書式は言語毎に決まっている。例えば、Ｃ言語では「返り値の型  関数名(引数の並び){   関数の内容や処理  }  」という記述で関数を定義できる。返り値の型はint、char、void（返り値が不要な場合）等、いくつかの種類に限定される。よって、返り値の型の後から“（”の手前までが、関数名である。抽出部３３はこのように言語毎に定まっている関数の定義の書式に基づき関数名をソースファイルの各ファイルから抽出する。
【００４０】
このような処理により、アプリケーションＡの“srcA1.c”というファイルの統合テンプレート（関数一覧）には“FuncA11”“FuncA12”“FuncA13”“FuncA14”“FuncA15”という関数名が登録される。
S3-13：抽出部３３は統合テンプレート（関数一覧）に登録された各関数のコードをファイルから抽出して記述部に記述する。図示するように、FuncA13という関数のコードは以下のようになる。
101行：void  FuncA13（int  mod1）
102行：{
…
106行：case  SLEEP;
1xx行：｝
関数の定義がどのコード（どの行）で終了したかは、関数の書式により定められている。例えば、Ｃ言語の場合、関数名の直後の“｛”が閉じる1xx行目の“｝”である。よって、抽出部３３は、各関数のコードを容易に特定して抽出することができる。関数はアプリケーションの機能を提供するものなので、関数に対応するコードは機能対応関数となる。
【００４１】
図６はアプリケーションBのドキュメントとソースファイルからの抽出を模式的に説明する図の一例である。図６では抽出部３３がアプリケーションBから機能説明箇所と機能対応関数を抽出している。
S3-21：すでに説明したように抽出部３３は統合テンプレート（成果物一覧）を作成している。アプリケーションＢの成果物一覧は、関数設計書、ソースコード、及び、要求仕様書であり、アプリケーションＡとはドキュメント名が異なっている。しかし、同等の記述が含まれるドキュメントが存在する。
S3-22：抽出部３３は関数設計書を参照して、統合テンプレート（関数設計書）を作成する。関数設計書の目次に各関数がリストアップされているものとして、抽出部３３は関数設計書の目次を抽出する。アプリケーションBの統合テンプレート（関数仕様書）には「はじめに」「ModuleB1」「FuncB1」「FunckB2」が登録されている。これから「ModuleB1」に含まれる関数名が抽出される。
S3-23：抽出部３３は統合テンプレート（関数設計書）の各関数に対する記述を関数毎に、関数設計書から抽出して記述部に登録する。この記述部は関数設計書の機能説明箇所である。統合テンプレート（関数設計書）には「FuncB1」が登録されているので、抽出部３３は目次を参照し又は「FuncB1」で関数設計書を検索する等して、関数設計書から「FuncB1」にいて記述された箇所を特定する。「FuncB2」についても同様である。抽出部３３は、特定した箇所から次の関数の特定箇所が始まるまでを１つの関数に関する記述として抽出する。これらの処理により、「FuncB1」の記述部には以下のような記述が登録される。
「2.1  FunckB1  
1)  シンタックス
void  Func1(int  mod1)
2)  引数
mod1：制御モード」
例えば、シンタックスはこの関数の書式を示し、引数は関数に渡す変数にどのような物理量が格納されるかが示される。シンタックスや引数が仕様の一例であるが、この他、関数の振る舞いに影響しうる要素は仕様となりうる。
【００４２】
抽出部３３は、アプリケーションＡと同様にアプリケーションＢの統合テンプレート（ソースファイル一覧）及び統合テンプレート（関数一覧）を作成する。作成方法はアプリケーションＡと同様なので省略する（S3-24〜S3-26）。
【００４３】
＜ドキュメントの関数の仕様とソースコードの関数について＞
ドキュメントの関数仕様書や関数設計書に仕様が記述された関数と、ソースコードの関数は対応関係を有する。ドキュメントはソースコードの関数の記述方法を規定したものだからである。例えば、アプリケーションＢの場合、関数設計書の“FuncB1”と統合テンプレート（関数一覧）の“FuncB1”は対応している。ソースコードの関数は、対応する関数設計書の関数の書式に必ず従っている。このため、開発者は、関数設計書とソースコードの関数を把握できるように、関数仕様書の関数名とソースコードの関数名が一致するように、又は、少なくとも関数仕様書の関数名を一部に含むようにしてソースコードの関数名を付与する。例えば、関数設計書の“FuncB1”と統合テンプレート（関数一覧）の“FuncB1xx”は関係した関数である。したがって、統合支援装置１００はドキュメントの関数名を一部に含むソースコードの関数は、ドキュメントに規定された関数であることを検出できるようになっている。
【００４４】
なお、関数設計書がある関数の書式の全てを規定する（例えば全ての引数）のに対し、ソースコードでは一部の書式（例えば、引数）を省略できる。このため、ソースコードには、関数仕様書の１つの関数から派生した複数の関数が含まれる可能性があり、関数仕様書の関数とソースコードの関数は１対１に対応するとは限らない。
【００４５】
〔照合〕
図７は、アプリケーションＡとＢのドキュメントの照合について説明する図の一例である。照合部３４はアプリケーションＡとＢの重複する機能説明箇所と重複する機能対応関数を関係づける。まず、開発者が、成果物単位でアプリケーションＡとＢで重複している成果物を把握しているのであれば、開発者は重複している成果物を選択すればよい。
【００４６】
照合部３４は、アプリケーションＡとＢの統合テンプレート（成果物一覧）をＧＵＩ３７に表示する。アプリケーションＡでは関数の書式等が記述されているドキュメントの名称が“関数仕様書”となっているが、アプリケーションＢでは“関数設計書”となっている。開発者は“関数仕様書”と“関数設計書”が対応するもの（内容が等価）であることを入力装置１１を使って入力する。照合部３４は、“関数仕様書”と“関数設計書”が対応しているという操作を受け付ける。
【００４７】
実際には、成果物単位の全体が重複していることは希なので、次に、照合部３４は受け付けた“関数仕様書”と“関数設計書”が対応しているという対応関係を用いて、アプリケーションＡの統合テンプレート（関数仕様書）とアプリケーションＢの統合テンプレート（関数設計書）をＧＵＩ３７に表示する。開発者は、提供する機能及び仕様が同じであるため、内容が等価と見なせる関数を入力装置１１を使って入力する。
例えば、統合対象のアプリケーションＡとアプリケーションＢにおいて、同じ機能及び仕様の関数は同じ関数名で記述されているのであれば、開発者は、照合部３４が同じ関数名の関数を関連付ければよい。図では、開発者はアプリケーションＡの“FuncA1”とアプリケーションBの“FuncB2”を関係づけている。照合部３４は、“FuncA1”と“FuncB2”が対応しているという操作を受け付ける。開発者は、このような操作をアプリケーションＡとＢで機能が重複する全ての関数について行う。
【００４８】
これにより、照合部３４は、アプリケーションＡの統合テンプレート（関数仕様書）から“FuncA1”の記述部と、アプリケーションＢの統合テンプレート（関数仕様書）から“FuncB2”の記述部とを関係づけることができる。このようにして機能説明箇所のレベルで関連づけが行われる。
【００４９】
“FuncA1”の記述部と“FuncB2”の記述部では関数名が異なっているが、機能説明箇所が完全には一致しなくても、開発者が機能及び仕様が同じであると判断すれば、互いに重複する機能であるとみなすことができる。
【００５０】
なお、開発者が関数仕様書や関数設計書の関数名から全ての記述部の内容を思い出すことは困難なので、開発者は入力装置１１を操作して記述部をＧＵＩ３７に表示して、記述部の内容を確認しながらアプリケーションＡとＢの機能説明箇所を関連づける。
【００５１】
一方、関数の数が多い場合など、開発者が全ての関数について重複した記述部を関連付けることは時間がかかる。このため、照合部３４は開発者による機能説明箇所の関連づけを支援する。照合部３４は、アプリケーションＡの関数仕様書の各関数の記述部と、アプリケーションＢの関数設計書の各関数の記述部とを、１つの文字（アルファベット、数字、記号等を含む）ずつ比較し全ての文字が一致するか否かを判定する。照合部３４は、記述部が完全に一致する関数は機能及び仕様が重複した関数であるとして両者を関連付ける。
【００５２】
アプリケーションＡとアプリケーションＢにおいて、同じ機能及び仕様でも、記述部が全く同じであることは多くないので、照合部３４は一部が一致した２つの記述部について機能及び仕様が重複すると判定することもできる。例えば、引数の物理量が全て同じ、かつ、戻り値が同じ関数は、仕様が同じ機能が重複していると判定する。こうすることで、記述部の若干の相違部分を無視して、機能及び仕様が共通する関数を対応づけることができる。
【００５３】
例えば、図７では“FuncA1”と“FuncB21”は関数名が異なるが、引数の物理量がどちらも“制御モード”であり、どちらも戻り値がないため、照合部３４はこの２つの関数は、仕様が同じ機能が重複していると判定できる。なお、この場合、開発者は、照合部３４が一致していると判定する条件（引数の物理量が一致すること、戻り値が一致すること、引数と戻り値がともに一致すること等）を設定することができる。
【００５４】
また、ある条件の下、照合部３４が一致したと判定するのでなく、記述部の内容がある程度は一致するが完全に一致しない関数を開発者に提示することもできる。例えば、引数の物理量が一致したがその他が一致しない場合、戻り値が一致したがその他が一致しない場合、引数の物理量と戻り値が一致したがその他が一致しない場合、照合部３４は一致しない部分を強調してＧＵＩに表示する。図では“FuncB21”が強調して（四角で囲って）表示されている。または、一致する部分を強調して表示してもよい。開発者は、相違部分又は一致部分を目視して、２つの記述部が記述する関数の機能及び仕様が重複するか否かを容易に判断することができる。この場合、開発者は、照合部３４が強調表示するための一致条件を設定することができる。
【００５５】
図８は、アプリケーションＡとＢのソースコードの照合について説明する図の一例である。ソースコードの照合もドキュメントと同様である。すなわち、照合部３４は、アプリケーションＡとＢの統合テンプレート（成果物一覧）をＧＵＩ３７に表示する。アプリケーションＡではソースコードが記憶されたドキュメントの名称が“ソースファイル”となっているが、アプリケーションＢでは“ソースコード”となっている。開発者は“ソースファイル”と“ソースコード”が対応するもの（内容が等価）であることを入力装置１１を使って入力する。照合部３４は、“ソースファイル”と“ソースコード”が対応しているという操作を受け付ける。
【００５６】
照合部３４は、受け付けた“ソースファイル”と“ソースコード”が対応しているという対応関係を用いて、アプリケーションＡの統合テンプレート（ソースファイル一覧）とアプリケーションＢの統合テンプレート（ソースコード一覧）をＧＵＩ３７に表示する。開発者は、提供する機能が同じであるため、内容が等価と見なせるソースファイルとソースコードを入力装置１１を使って入力する。図では、開発者はアプリケーションＡの“srcA1.c”とアプリケーションBの“srcB11.c”を関係づけている。照合部３４は、“srcA1.c ”と“srcB11.c”が対応しているという操作を受け付ける。開発者は、このような操作をアプリケーションＡとＢで等価と見なせる全てのソースファイル又はソースコードについて行う。
【００５７】
次に、照合部３４は、受け付けた“srcA1.c ”と“srcB11.c”が対応しているという対応関係を用いて、アプリケーションＡの統合テンプレート（関数一覧）とアプリケーションＢの統合テンプレート（関数一覧）をＧＵＩ３７に表示する。開発者は、提供する機能及び仕様が同じであるため、内容が等価と見なせる関数名を入力装置１１を使って入力する。図では、開発者はアプリケーションＡの“FuncA12”とアプリケーションBの“FuncB4”を関係づけている。照合部３４は、“FuncA12”と“FuncB4”が対応しているという操作を受け付ける。開発者は、このような操作をアプリケーションＡとＢで等価と見なせる全ての関数について行う。
【００５８】
これにより、照合部３４は、アプリケーションＡの統合テンプレート（関数一覧）から“FuncA12”の記述部と、アプリケーションＢの統合テンプレート（関数一覧）から“FuncB4”の記述部とを関係づけることができる。このように、記述部の記述が一致すると判定された関数は、アプリケーションＡとＢで共通化できる関数となる。
【００５９】
また、ドキュメントにおける関数の対応付けと同様に、照合部３４は２つの記述部が一致条件を満たす場合に、ソースコードの関数が共通の機能及び仕様を提供すると判定する。照合部３４は２つの記述部を1つの文字ずつ比較し完全に一致する場合、又は、一部が一致する場合、ソースコードが提供する機能が一致すると判定することができる。この一致条件は関数仕様書（又は関数設計書）の一致条件と同じであることが好ましい。一致条件が同じであることで、ドキュメントが一致する関数はソースコードも一致すると判定されやすくなる。
【００６０】
また、照合部３４は、一部が一致しない場合に相違部分又は一致部分を強調して表示して開発者に通知する。これにより、開発者はソースコードの相違を容易に把握できる。
【００６１】
なお、ある関数についてアプリケーションＡ，Ｂの関数仕様書と関数設計書の記述部（機能説明箇所）が一致した場合、同じ関数のソースコードの記述部（機能対応関数）がアプリケーションＡ，Ｂ間で一致するかどうかは不定である。上記のように、関数仕様書は関数の仕様に過ぎないので、ソースコードで実際に関数が全ての引数を使用するかどうか等は決まっていないためである。逆に、アプリケーションＡ，Ｂのソースコード間で一致すると判定された記述部の関数は、関数仕様書と関数設計書の記述部（機能説明箇所）が一致すべきである。したがって、この関係を利用して、機能対応関数が共通か否かを、機能説明箇所も共通か否かに応じて保証することが好適となる。すなわち、照合部３４は、ソースコードの関数に対応する関数のドキュメントの２つの記述部が一散していると判定された場合に限り、ソースコードの２つの関数の機能が重複すると判定する。こうすることで、関数の重複を厳密に判定できる。
【００６２】
なお、図７，８ではアプリケーションＡのモジュール仕様書から抽出された記述部について、アプリケーションＢと比較されていない。これは、アプリケーションＢにモジュール仕様書が含まれていないためであり、アプリケーションＢのドキュメントにモジュール仕様書又はモジュール仕様書に相当する仕様書が含まれていれば、記述部同士が比較して関連づけされる。関数の重複の判定にモジュール仕様書の記述部が一致するか否かを利用することもできる。
【００６３】
〔統合〕
統合部３５は照合結果に基づき、アプリケーションＡとＢのドキュメント及びソースコードを編集し、また、アプリケーションＡとＢに共通のドキュメント及びソースコードを作成する（上記の共通部）。
【００６４】
図９は、アプリケーションＡとＢのドキュメントの統合について説明する図の一例である。統合部３５は、共通部の関数仕様書（関数設計書としてもよい）を作成する。すなわち、アプリケーションＡ又はＢのドキュメントの記述部の一方を選択し、共通部の記述部に登録する。アプリケーションＡ又はＢのドキュメントの記述部が同じであれば、どちらを採用してもよい。なお、関数が提供する機能及び仕様は同じだが、アプリケーションＡとＢでドキュメントの記述部が完全には一致しない場合がある。この場合、統合部３５は、予め定められたアプリケーションＡ又はＢのいずれかの記述部を一貫して共通部の記述部に採用する。共通部の関数仕様書には、ドキュメントにおいて機能が重複した数だけ関数名が登録される。
【００６５】
なお、開発者は記述部の内容を、アプリケーションＡ又はＢのいずれかの記述部とも異なる内容に変更することができる。こうすることで、統合時の関数の仕様を詳細に定めることができる。
【００６６】
また、統合部３５は共通部の記述部に登録した関数に、アプリケーションＡ，Ｂにとって共通の関数名を付与する。例えば、アプリケーションＡの関数仕様書では“FuncA1”、アプリケーションＢの関数設計書では“FuncB21”という関数名に、“FunCom1”という関数名を付与する。新たな関数名は、開発者が置き換えられていない関数名と一見して判別できる関数名となっている。
【００６７】
また、統合部３５は、アプリケーションＡの関数仕様書において“FuncA1”を“FunCom1”に置き換え、アプリケーションＢの関数設計書において“FuncB21”を“FunCom1”に置き換える。置き換わった後の関数仕様書はアプリケーションＡに固有の関数仕様書であり、置き換わった後の関数設計書はアプリケーションＢに固有の関数設計書である。以下、置き換えられた関数を共通関数という。
【００６８】
そして、統合部３５は、アプリケーションＡの関数仕様書の共通関数に、共通関数の記述部と関連づける参照情報を記述する。アプリケーションＢの関数設計書においても同様である。
【００６９】
このように、アプリケーションＡとＢで機能が共通する関数を共通部に抽出することで、開発者は共通の機能についてそのドキュメントを一元管理することができる。例えば、開発者は、アプリケーションＡ、Ｂには共通関数があること、及び、共通関数の個数を容易に把握できる。
【００７０】
図１０は、アプリケーションＡとＢのソースコードの統合について説明する図の一例である。ドキュメントと同様に、統合部３５は関連付けられた関数に、アプリケーションＡ，Ｂにとって共通の関数名を付与する。置き換えられた関数名は、置き換えられていない関数名と開発者が一見して判別できる関数名となっている。
【００７１】
また、統合部３５は、ソースコードの関数に対応する関数仕様書または関数設計書の関数名と、同じ又は同じ関数名を一部に含む関数名をソースコードの関数に付与する。ソースコードの関数と、関数仕様書又は関数設計書の関数の対応は、少なくとも一部の関数名が共通することから特定されている。
【００７２】
また、統合部３５は、アプリケーションＡ又はＢのソースコードの記述部の一方を選択し、共通部の記述部に登録する。アプリケーションＡ又はＢのドキュメントの記述部が同じであれば、どちらを採用してもよい。関数が提供する機能及び仕様は同じだが、アプリケーションＡとＢでソースコードの記述部が完全には一致しない場合がある。この場合、統合部３５は、予め定められたアプリケーションＡ又はＢのいずれかの記述部を一貫して共通部の記述部に採用する。共通部の関数一覧には、ソースコードにおいて機能が重複した数だけ関数名が登録される。
【００７３】
なお、開発者は記述部の内容を、アプリケーションＡ又はＢのいずれかの記述部とも異なる内容に変更することができる。こうすることで、統合時の関数のソースコードを詳細に定めることができる。
【００７４】
また、統合部３５は、統合テンプレート（関数一覧）を編集する。例えば、アプリケーションＡの関数一覧では“FuncA12”、アプリケーションＢの関数一連では“FuncB4”という関数名に、新たに付与した“FunCom11”という関数名を付与する。この結果、アプリケーションＡの関数一覧において“FuncA12”は“FunCom11”に置き換わる。アプリケーションＢの関数一覧において“FuncB4”は“FunCom11”に置き換わる。これに伴い、統合部３５は、アプリケーションＡのソースコードから“FuncA12”の記述部を削除し、“FunCom11”の記述部への参照情報を記述する。同様に、アプリケーションBのソースコードから“FuncB4”の記述部を削除し、“FunCom11”の記述部への参照情報を記述する。置き換わった後の関数一覧はアプリケーションＡに固有の関数一覧であり、置き換わった後の関数一覧はアプリケーションＢに固有の関数一覧である。
【００７５】
このように、アプリケーションＡとＢで機能及び仕様が共通する関数を共通部に抽出することで、開発者は共通の機能についてそのソースコードを一元管理することができる。
【００７６】
〔開発者による実装作業について〕
開発者は統合後データ３６を参照しながらアプリケーションＡとＢを１つのＥＣＵに搭載する。具体的には、ソースコードをコンパイルしたオブジェクトコードが搭載される。
【００７７】
従来の課題であった、２つのアプリケーションを統合することで同一機能が重複して搭載されてしまうことについて、アプリケーションＡ´、アプリケーションＢ´及び共通部のオブジェクトコードを搭載することで解決できる。こうすることで共通の機能は１つしか搭載されないようにすることができ、アプリケーションＡ´とアプリケーションＢ´の両方が共通の機能を呼び出すこともできる。
【００７８】
また、従来の課題であった、統合の前後で同一アプリケーションの挙動の違いが生じることについては、関数一覧の照合時に、挙動の違いが生じないように一致条件を定めておくことで解決できる。一致条件を満たさない記述部同士は関連付けられないので、統合部３５は統合しない。したがって、機能が同じでも挙動（仕様）が異なる関数は、アプリケーションＡ´の固有の部分とアプリケーションＢ´の固有の部分にそれぞれ残るので、統合前の挙動を示すことができる。
【００７９】
なお、統合の前と後でＥＣＵのハードウェア構成が異なることに起因して、関数の挙動が異なる場合は各関数を別々に搭載するだけでは解決できない。しかし、この場合でも、アプリケーションＡ´の固有の部分とアプリケーションＢ´の固有の部分にそれぞれ関数が残るので、開発者がそれぞれを別の記述に修正することで対応できる。
【符号の説明】
【００８０】
３１    統合元データ
３２    統合テンプレート
３３    抽出部
３４    照合部
３５    統合部
３６    統合後データ
３７    ＧＵＩ
１００  統合支援装置
【図１】
2012208663.tif 000003
【図２】
2012208663.tif 000004
【図３】
2012208663.tif 000005
【図４】
2012208663.tif 000006
【図５】
2012208663.tif 000007
【図６】
2012208663.tif 000008
【図７】
2012208663.tif 000009
【図８】
2012208663.tif 000010
【図９】
2012208663.tif 000011
【図１０】
2012208663.tif 000012