(57)【要約】【課題】ブロック線図で構成したモデルから、共通関数化できるクローンのみを広く検出可能にし、ソースコードのサイズ圧縮化を図るクローン検出方法を提供する。【解決手段】制御部が、入力ポートと、出力ポートと、入力ポート及び出力ポートの間に接続されるブロックと、からなるサブシステムを複数有するブロック線図で構成したモデルの中から、少なくとも共通関数化可能な複数のサブシステムを検出する検出工程（ステップＳ２〜ステップＳ４）を備える。【選択図】図２
2015056140.tif 000002
【特許請求の範囲】
【請求項１】
制御部が、入力ポートと、出力ポートと、前記入力ポート及び前記出力ポートの間に接続されるブロックと、からなるサブシステムを複数有するブロック線図で構成したモデルの中から、少なくとも共通関数化可能な複数のサブシステムを検出する検出工程を備える、
ことを特徴とするクローン検出方法。
【請求項２】
前記制御部が、前記検出工程による検出結果を出力する出力工程を備える、
ことを特徴とする請求項１記載のクローン検出方法。
【請求項３】
前記検出工程では、前記制御部は、ライブラリに登録されたサブシステムの候補に対して共通関数化可能な複数のサブシステムを、前記モデルの中から抽出して、前記共通関数化可能な複数のサブシステムとする、
ことを特徴とする請求項１又は２に記載のクローン検出方法。
【請求項４】
前記ライブラリは、前記モデルとは別に予め設定されたものを含む、
ことを特徴とする請求項３記載のクローン検出方法。
【請求項５】
前記ライブラリは、前記制御部が、前記モデルの中で共通関数化可能な複数のサブシステムを抽出し、その抽出したサブシステムを登録することにより設定されたものを含む、
ことを特徴とする請求項３又は４に記載のクローン検出方法。
【請求項６】
前記検出工程では、前記制御部は、機能が同一である複数のサブシステムを、共通関数化可能な複数のサブシステムとして検出する、
ことを特徴とする請求項１乃至５のいずれか１項に記載のクローン検出方法。
【請求項７】
前記検出工程では、前記制御部は、パラメータを変更することにより共通関数化可能なブロックをそれぞれ有する複数のサブシステムを、共通関数化可能な複数のサブシステムとして検出する、
ことを特徴とする請求項１乃至６のいずれか１項に記載のクローン検出方法。
【請求項８】
前記検出工程では、前記制御部は、入出力のポート数は同じで演算子のみが異なるブロックをそれぞれ有する複数のサブシステムを、共通関数化可能ではない複数のサブシステムとして検出する、
ことを特徴とする請求項１乃至７のいずれか１項に記載のクローン検出方法。
【請求項９】
前記検出工程では、前記制御部は、データ型が異なるブロックをそれぞれ有する複数のサブシステムを、共通関数化可能ではない複数のサブシステムとして検出する、
ことを特徴とする請求項１乃至８のいずれか１項に記載のクローン検出方法。
【請求項１０】
前記検出工程では、前記制御部は、前記モデルの中の各サブシステムにおいて、機能に影響しないブロックを削除してから、共通関数化可能な複数のサブシステムを検出する、
ことを特徴とする請求項１乃至９のいずれか１項に記載のクローン検出方法。
【請求項１１】
前記検出工程では、前記制御部は、前記モデルの中の複数のサブシステムが階層構造であり、かつ異なる段階の階層において各々共通関数化可能であると検出した場合は、その検出結果から最上位の階層以外の階層のサブシステムを削除し、最上位の階層のサブシステムのみを検出結果とする、
ことを特徴とする請求項１乃至１０のいずれか１項に記載のクローン検出方法。
【請求項１２】
前記検出結果には、共通関数化可能か否かの判断に関する所定の情報を含む、
ことを特徴とする請求項２記載のクローン検出方法。
【請求項１３】
請求項１乃至１２のいずれか１項に記載のクローン検出方法の各工程をコンピュータに実行させるためのクローン検出プログラム。
【請求項１４】
請求項１３記載のクローン検出方法の各工程をコンピュータに実行させるためのクローン検出プログラムが記録されたコンピュータが読み取り可能な記録媒体。
【請求項１５】
請求項１乃至１２のいずれか１項に記載のクローン検出方法の各工程と、
前記制御部が、前記検出工程により共通関数化可能として検出した複数のサブシステムのうちの少なくとも一部の複数のサブシステムを、コード化した際に共通した関数になるよう設定する共通関数化工程と、を備える、
ことを特徴とするクローン共通関数化方法。
【請求項１６】
請求項１５記載のクローン共通関数化方法の各工程をコンピュータに実行させるためのクローン共通関数化プログラム。
【請求項１７】
請求項１６記載のクローン共通関数化方法の各工程をコンピュータに実行させるためのクローン共通関数化プログラムが記録されたコンピュータが読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばブロック線図で構成したモデルにおけるクローン検出方法及びクローン共通関数化方法に係り、詳しくは、ブロック線図で構成したモデルにおいて、ブロックのコピー等により同様の構成となった部分を検出可能なクローン検出方法及びクローン共通関数化方法に関する。
【背景技術】
【０００２】
従来、コンピュータに指示するためのソースコードを生成するソフトウェアとして、ＭａｔｈＷｏｒｋｓ社のＭＡＴＬＡＢ（登録商標）シリーズの１つであるＳｉｍｕｌｉｎｋ（登録商標）が知られている。このＳｉｍｕｌｉｎｋでは、ユーザは、設計仕様としての要求書及び設計書の情報をブロック線図で構成したモデルとして入力することで、該モデルがプログラミング言語（Ｃ言語）に自動的にコード化され、ソースコードが自動設計されるようになっている。
【０００３】
Ｓｉｍｕｌｉｎｋにおいてブロック線図で構成したモデルを作成する際は、モデルを構成する最小単位であるブロックを１つずつ配置して作成するが、入力ポート及び出力ポートを有し所定の機能を有するグループ化されたブロック（以下、サブシステムという）をコピーし、他の場所にペーストし、そのまま、あるいは適宜修正して作成することも多い。このようなコピー及びペーストによって作成された同様の構成のサブシステム（以下、クローンという）が存在することにより、ブロック線図で構成したモデル全体をコード化した際に、クローンは同様のソースコードになるため、ソースコードには重複部分が多くなることがあった。
【０００４】
ソースコードは実製品では例えばＲＯＭに記憶されるものであり、該ＲＯＭは小容量化が望まれていることから、ソースコードのサイズ圧縮が望まれている。このため、ブロック線図で構成したモデルをコード化する前に、クローンの有無を診断する診断装置が開発されている（特許文献１参照）。この診断装置によれば、ブロック線図で構成したモデルをコード化した際の重複部分の場所が分かるので、診断結果に基づいてブロック線図を設計し直してソースコードのサイズ圧縮を図ることができる。
【０００５】
また、この診断装置では、サブシステムの入力ポート及び出力ポートを除外し、サブシステムの内部のブロックと、サブシステムの前後のブロックとの接続に基づいて、クローンの有無を判断している。これにより、サブシステムの枠に囚われず、モデルの全体からクローンの網羅的な検出を図っている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１２−３８０２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１の診断装置では、モデルの全体からクローンの網羅的な検出を図るものであるので、検出したクローンを共通関数化してソースコードのサイズ圧縮を図ることは考慮されていなかった。このため、クローンの検出処理においては、入力ポート及び出力ポートを除いたサブシステムの内外のブロックを接続して検出するようになっており、入力ポート及び出力ポートが無いことにより共通関数化できない部分であってもクローンとして検出してしまい、検出結果に無駄があるという問題があった。
【０００８】
一方、例えば、類似するブロック間での単なるパラメータの違い等、簡単な修正で共通関数化できるようになる部分については、クローンではないものとして厳密に判断してしまい、ソースコードのサイズ圧縮が不十分であるという問題があった。
【０００９】
そこで本発明は、ブロック線図で構成したモデルから、共通関数化できるクローンのみを広く検出可能にし、ソースコードのサイズ圧縮化を図るクローン検出方法及びクローン共通関数化方法を提供することを目的とするものである。
【課題を解決するための手段】
【００１０】
本発明に係るクローン検出方法は（例えば図２及び図７参照）、制御部（２）が、入力ポートと、出力ポートと、前記入力ポート及び前記出力ポートの間に接続されるブロックと、からなるサブシステムを複数有するブロック線図で構成したモデルの中から、少なくとも共通関数化可能な複数のサブシステムを検出する検出工程を備えることを特徴とする。
【００１１】
また、本発明に係るクローン検出方法は（例えば図２及び図７参照）、前記制御部（２）が、前記検出工程による検出結果を出力する出力工程を備えることを特徴とする。
【００１２】
また、本発明に係るクローン検出方法は（例えば図３参照）、前記検出工程では、前記制御部（２）は、ライブラリに登録されたサブシステムの候補に対して共通関数化可能な複数のサブシステムを、前記モデルの中から抽出して、前記共通関数化可能な複数のサブシステムとすることを特徴とする。
【００１３】
また、本発明に係るクローン検出方法は（例えば図３参照）、前記ライブラリは、前記モデルとは別に予め設定されたものを含むことを特徴とする。
【００１４】
また、本発明に係るクローン検出方法は（例えば図３参照）、前記ライブラリは、前記制御部（２）が、前記モデルの中で共通関数化可能な複数のサブシステムを抽出し、その抽出したサブシステムを登録することにより設定されたものを含むことを特徴とする。
【００１５】
また、本発明に係るクローン検出方法は（例えば図６参照）、前記検出工程では、前記制御部（２）は、機能が同一である複数のサブシステムを、共通関数化可能な複数のサブシステムとして検出することを特徴とする。
【００１６】
また、本発明に係るクローン検出方法は（例えば図５参照）、前記検出工程では、前記制御部（２）は、パラメータを変更することにより共通関数化可能なブロックをそれぞれ有する複数のサブシステムを、共通関数化可能な複数のサブシステムとして検出することを特徴とする。
【００１７】
また、本発明に係るクローン検出方法は（例えば図４参照）、前記検出工程では、前記制御部（２）は、入出力のポート数は同じで演算子のみが異なるブロックをそれぞれ有する複数のサブシステムを、共通関数化可能ではない複数のサブシステムとして検出することを特徴とする。
【００１８】
また、本発明に係るクローン検出方法は、前記検出工程では、前記制御部（２）は、データ型が異なるブロックをそれぞれ有する複数のサブシステムを、共通関数化可能ではない複数のサブシステムとして検出することを特徴とする。
【００１９】
また、本発明に係るクローン検出方法は、前記検出工程では、前記制御部（２）は、前記モデルの中の各サブシステムにおいて、機能に影響しないブロックを削除してから、共通関数化可能な複数のサブシステムを検出することを特徴とする。
【００２０】
また、本発明に係るクローン検出方法は、前記検出工程では、前記制御部（２）は、前記モデルの中の複数のサブシステムが階層構造であり、かつ異なる段階の階層において各々共通関数化可能であると検出した場合は、その検出結果から最上位の階層以外の階層のサブシステムを削除し、最上位の階層のサブシステムのみを検出結果とすることを特徴とする。
【００２１】
また、本発明に係るクローン検出方法は（例えば図２参照）、前記検出結果には、共通関数化可能か否かの判断に関する所定の情報を含むことを特徴とする。
【００２２】
また、本発明に係るクローン検出プログラム（４０）は（例えば図１参照）、上記に記載のクローン検出方法の各工程をコンピュータ（１）に実行させることを特徴とする。
【００２３】
また、本発明に係る記録媒体（４）は（例えば図１参照）、上記に記載のクローン検出方法の各工程をコンピュータ（１）に実行させるためのクローン検出プログラム（４０）が記録されたコンピュータ（１）が読み取り可能なことを特徴とする。
【００２４】
また、本発明に係るクローン共通関数化方法は（例えば図２参照）、上記に記載のクローン検出方法の各工程と、
前記制御部（２）が、前記検出工程により共通関数化可能として検出した複数のサブシステムのうちの少なくとも一部の複数のサブシステムを、コード化した際に共通した関数になるよう設定する共通関数化工程と、を備えることを特徴とする。
【００２５】
また、本発明に係るクローン共通関数化プログラム（４０）は（例えば図１参照）、上記に記載のクローン共通関数化方法の各工程をコンピュータ（１）に実行させることを特徴とする。
【００２６】
また、本発明に係る記録媒体（４）は（例えば図１参照）、上記に記載のクローン共通関数化方法の各工程をコンピュータ（１）に実行させるためのクローン共通関数化プログラム（４０）が記録されたコンピュータ（１）が読み取り可能なことを特徴とする。
【００２７】
なお、上記カッコ内の符号は、図面と対照するためのものであるが、これは、発明の理解を容易にするための便宜的なものであり、特許請求の範囲の構成に何等影響を及ぼすものではない。
【発明の効果】
【００２８】
請求項１に係る本発明によると、ブロック線図で構成したモデルの中から少なくとも共通関数化可能な複数のサブシステムを検出する検出工程を備えるので、検出した共通関数化可能な複数のサブシステム、即ちクローンを共通関数化することができる。これにより、このモデルをコード化する際に、ソースコードのサイズ圧縮を図ることができる。
【００２９】
請求項２に係る本発明によると、検出工程による検出結果を出力する出力工程を備えるので、検出結果をユーザに示すことができ、ユーザは検出結果に基づいて、共通関数化するクローンを適宜選択することができる。また、共通関数化できないと判断されたクローンであっても、ユーザが適宜処理をすることにより共通関数化できるようになる場合もある。これらにより、クローンの共通関数化をユーザの確認を経て適正に実行することができるので、ソースコードのサイズ圧縮をより効果的に実現することができる。
【００３０】
請求項３に係る本発明によると、ライブラリに登録されたサブシステムの候補に対して共通関数化可能な複数のサブシステムを、モデルの中から抽出して、共通関数化可能なクローンとするので、ライブラリを利用しない場合に比べてクローンを検出するための処理時間を短縮することができる。
【００３１】
請求項４に係る本発明によると、ライブラリはモデルとは別に予め設定されたものにできるので、事前に検証を済ませたサブシステムを利用することができる。これにより、共通関数化のためにクローンを置換した後に、置換後のモデルが本来の機能を維持しているか検証する際に、当該サブシステムについては検証を不要にすることができる。このため、検証時間を短縮することができ、全体の処理時間を短縮することができる。
【００３２】
請求項５に係る本発明によると、ライブラリを自動的に作成することができるので、クローン検出の自動化を促進することができる。
【００３３】
請求項６に係る本発明によると、機能が同一である複数のサブシステムを共通関数化可能なサブシステムとして検出するので、機能が同一であっても構成が異なることにより共通関数化不能とする場合に比べて、より多くのクローンを共通関数化できるようになる。これにより、このモデルをコード化する際に、ソースコードの更なるサイズ圧縮を図ることができる。
【００３４】
請求項７に係る本発明によると、パラメータを変更することにより共通関数化可能な複数のサブシステムを共通関数化可能なサブシステムとして検出するので、パラメータを変更することなく共通関数化不能とする場合に比べて、より多くのクローンを共通関数化できるようになる。これにより、このモデルをコード化する際に、ソースコードの更なるサイズ圧縮を図ることができる。
【００３５】
請求項８に係る本発明によると、入出力のポート数は同じで演算子のみが異なる複数のサブシステムを共通関数化可能ではないサブシステムとして検出するので、共通関数化不能であるサブシステムを共通関数化可能であると誤検出することを防止し、クローンを検出するための処理時間を短縮することができる。
【００３６】
請求項９に係る本発明によると、データ型が異なる複数のサブシステムを共通関数化可能ではないサブシステムとして検出するので、共通関数化不能であるサブシステムを共通関数化可能であると誤検出することを防止し、クローンを検出するための処理時間を短縮することができる。
【００３７】
請求項１０に係る本発明によると、機能に影響しないブロックを削除してから共通関数化可能なサブシステムを検出するので、機能に影響しないブロックを有することにより構成が異なるサブシステムであっても共通関数化できることがある。これにより、より多くのクローンを共通関数化できるようになり、このモデルをコード化する際に、ソースコードの更なるサイズ圧縮を図ることができる。
【００３８】
請求項１１に係る本発明によると、検出結果から最上位の階層以外の階層のサブシステムを削除し、最上位の階層のサブシステムのみを検出結果とするので、異なる段階の階層のサブシステムをコード化することによる重複したソースコードの作成を防止することができる。このため、このモデルをコード化する際に、ソースコードの更なるサイズ圧縮を図ることができる。
【００３９】
請求項１２に係る本発明によると、検出結果に共通関数化可能か否かの判断に関する所定の情報を含むので、ユーザは検出結果を参照して共通関数化するか否かを決定することができる。これにより、クローンの共通関数化をユーザの確認を経て適正に実行することができるので、ソースコードのサイズ圧縮をより効果的に実現することができる。
【００４０】
請求項１３に係る本発明によると、上記のクローン検出方法の各工程をコンピュータに実行させるので、コンピュータにより共通関数化可能なクローンを検出することができ、このモデルをコード化する際に、ソースコードのサイズ圧縮を図ることができる。
【００４１】
請求項１４に係る本発明によると、記録媒体にクローン検出プログラムが記録されているので、これを読み取って実行したコンピュータにより共通関数化可能なクローンを検出することができ、このモデルをコード化する際に、ソースコードのサイズ圧縮を図ることができる。
【００４２】
請求項１５に係る本発明によると、共通関数化可能として検出した複数のサブシステムのうちの少なくとも一部の複数のサブシステムを、コード化した際に共通した関数にすることができる。これにより、モデルをコード化する際に、ソースコードのサイズ圧縮を図ることができる。
【００４３】
請求項１６に係る本発明によると、上記のクローン共通関数化方法の各工程をコンピュータに実行させるので、コンピュータによりクローンを共通関数化することができ、このモデルをコード化する際に、ソースコードのサイズ圧縮を図ることができる。
【００４４】
請求項１７に係る本発明によると、記録媒体にクローン共通関数化プログラムが記録されているので、これを読み取って実行したコンピュータによりクローンを共通関数化することができ、このモデルをコード化する際に、ソースコードのサイズ圧縮を図ることができる。
【図面の簡単な説明】
【００４５】
【図１】本発明の実施の形態に係るクローン共通関数化装置を示す概略図である。
【図２】本発明の実施の形態に係るクローン共通関数化装置による処理手順を示すフローチャートである。
【図３】本発明の実施の形態に係るクローン共通関数化装置のメイン画像である。
【図４】本発明の実施の形態に係るクローン共通関数化装置による共通関数化処理において、ブロックの演算子が異なり共通関数化不能である場合を示す説明図である。
【図５】本発明の実施の形態に係るクローン共通関数化装置による共通関数化処理において、構成は同一でパラメータ定数が異なり共通関数化可能である場合を示す説明図であり、（ａ）はゲインａ、（ｂ）はゲインｂの場合である。
【図６】本発明の実施の形態に係るクローン共通関数化装置による共通関数化処理において、異なる構成で同一の機能を有し共通関数化可能である場合を示す説明図であり、（ａ）はｍｉｎブロックに相当する場合、（ｂ）はｍａｘブロックに相当する場合である。
【図７】本発明の実施の形態に係るクローン共通関数化装置により、未処理のモデルから共通化済みのモデルに処理される流れを示す説明図である。
【発明を実施するための形態】
【００４６】
以下、本発明の実施の形態に係るクローン共通関数化方法を実行するクローン共通関数化装置１の構成について、図１に沿って説明する。尚、本実施の形態におけるクローン共通関数化装置１は、例えばコンピュータからなり、後述するクローン共通関数化プログラム４０を実行することでクローン共通関数化方法を実行するようになっている。
【００４７】
図１に示すように、クローン共通関数化装置１を構成するコンピュータは、例えば、制御部としてのＣＰＵ２と、ＲＡＭ３と、記録媒体としてのＲＯＭ４と、入出力インタフェース回路（Ｉ／Ｆ）５と、ディスプレイ６と、キーボード７と、マウス８とを備えている。これらのうち、ＣＰＵ２と、ＲＡＭ３と、ＲＯＭ４と、入出力インタフェース回路５とは、それぞれバスにより接続されてコンピュータ本体１ａを構成している。尚、本実施の形態では、クローン共通関数化装置１を構成するコンピュータはクローン検出装置と共用されている。
【００４８】
ＣＰＵ２は、ＲＯＭ４に記憶されたプログラムを実行し、各種演算やクローン共通関数化装置１の各部を制御する中央処理装置であり、検出部２０と、出力部２１と、共通関数化部２２とを備え、後述するクローン共通関数化方法の各工程を実行するための制御を行うようになっている。
【００４９】
検出部２０は、ブロック線図で構成したモデルの中から、少なくとも共通関数化可能な複数のサブシステムを検出するようになっている。出力部２１は、検出部２０による検出結果を出力するようになっている。共通関数化部２２は、検出部２０により共通関数化可能として検出した複数のサブシステムのうちの少なくとも一部の複数のサブシステムを、コード化した際に共通した関数になるよう設定するようになっている。
【００５０】
ＲＡＭ３は、ＣＰＵ２に対してワーキングメモリを提供するランダムアクセスメモリであり、クローン共通関数化プログラム４０を読み込んで、一時的に記憶して実行するようになっている。
【００５１】
ＲＯＭ４は、各部を制御するための各種プログラムを記憶するメモリであり、例えば、クローン共通関数化プログラム４０が記憶されている。尚、本実施の形態では、各種プログラムはＲＯＭ４に記憶されるようになっているが、これには限られず、例えばハードディスク等、他の外部記憶装置に記憶されるようにしてもよい。
【００５２】
本実施の形態では、クローン共通関数化プログラム４０は、一部にクローン検出プログラムを含んでいる。このため、ＣＰＵ２がクローン共通関数化プログラム４０を実行してクローン共通関数化方法を実施する際は、一部ではクローン検出プログラムを実行してクローン検出方法を実施するようになっている。
【００５３】
入出力インタフェース回路５は、コンピュータ本体１ａと他の装置とを通信可能にしており、本実施の形態では、例えば、ディスプレイ６と、キーボード７と、マウス８とに対して通信可能にしている。ディスプレイ６は、例えば、液晶ディスプレイによって構成されており、出力部２１から出力された検出結果を出力して表示するようになっている。
【００５４】
上述したクローン共通関数化装置１によりクローン共通関数化方法を実施する際の動作を、図２に示すフローチャートに沿って説明する。
【００５５】
ユーザは、例えば、Ｓｉｍｕｌｉｎｋを利用して、コンピュータ上でブロック線図により構成したモデルを作成する。このブロック線図のモデルは、入力ポートと、出力ポートと、入力ポート及び出力ポートの間に接続されるブロックと、からなるサブシステムを複数有するものとする。
【００５６】
モデルの作成後、クローン共通関数化装置１を作動させると、図３に示すように、ディスプレイ６にはメイン画面６１が表示される。メイン画面６１には、検出レベル設定部６１ａと、出力設定部６１ｂと、対象モデル表示部６１ｃと、第１のライブラリ表示部６１ｄと、第２のライブラリ表示部６１ｅとが表示されている。
【００５７】
ユーザは、検出レベル設定部６１ａにおいて、モデル内から検出するサブシステムの検出レベル（規模）を設定する。ここでの設定は、クローン共通関数化装置１のキーボード７やマウス８を利用して行われる。レベルの設定基準としては、本実施の形態では、サブシステム内の最小ライン数と、全ライン数の中での構成の一致率としている。最小ライン数を設定可能であるので、検出対象となるライン数があまりに小さすぎて関数アクセスが頻繁になり、ＲＡＭの増加や関数呼び出しのオーバーヘッドにより処理速度が低下することを防止できる。また、全ライン数の中での構成の一致率は、サブシステムをブロック接続関係に分解した際のラインの数同士を比較して、全体のライン数の中で構成が同じとなるブロック接続関係のライン数となる。尚、レベルの設定基準としては、これらに限られず、例えばブロック数等を利用してもよい。
【００５８】
次に、ユーザは、出力設定部６１ｂにおいて、後に出力されるレポートの表示項目を設定する。クローン共通関数化装置１では、レポートは、後述するようにサブシステムの自動検出を終わった段階（ステップＳ５）及び共通関数化が終わった段階（ステップＳ９）の２回表示される。表示項目としては、モデル内の対象としているサブシステムの名称、そのサブシステムと比較しているライブラリ内のサブシステムの名称、これらのサブシステムの構成の一致率、絵付きレポートの場合はそれらのサブシステムの構成図等がとなっている。尚、表示項目としては、これらに限られないのは勿論である。
【００５９】
次に、ユーザは、対象モデル表示部６１ｃにおいて、対象となるモデルを追加することで、クローン検出の対象となるモデルを選択する（ステップＳ１）。対象モデル表示部６１ｃには、選択されたモデルに含まれるサブシステムがツリー構成で表示される。
【００６０】
一方、ユーザは、事前に第１のライブラリを用意しておき、既に検証済みのサブシステムを候補として適宜数だけ登録しておく。第１のライブラリは、第１のライブラリ表示部６１ｄに名前（図３では、ＵｓｅｒＬｉｂ等）が表示されると共に、リンク先であるモデル名も表示される。また、第２のライブラリ表示部６１ｅには、後述する第２のライブラリの名称が表示されている。
【００６１】
そして、クローン共通関数化装置１がクローン共通関数化プログラム４０を実行することにより、検出部２０は、第１のライブラリからユーザの設定した順序で候補となるサブシステムを選択し、該サブシステムと共通関数化可能なサブシステムを選択したモデルの中から自動的に検出する（ステップＳ２）。第１のライブラリの候補に対して自動検出が終わってから、検出部２０は、モデルの内部を検索し、互いに共通関数化可能なサブシステムを自動的に検出する（ステップＳ３）。即ち、本実施の形態では、ユーザが設定した既存の第１のライブラリを優先して共通関数化の可否の判断を行っている。これにより、後述するように、検証時間を効果的に短縮できるようになる。
【００６２】
ここで、ステップＳ２及びステップＳ３における検出部２０による共通関数化可能か否かの判断手法の例について説明する。尚、本明細書中で共通関数化可能とは、クローン共通関数化装置１により自動的に共通関数化する場合の他、クローン共通関数化装置１により共通関数化可能と検出したサブシステムを中間レポートとして表示し、ユーザが確認して共通関数化可能と判断した半自動的な共通関数化をも含む趣旨としている。また、以下に説明する共通関数化の可否の判断手法は一部の例であり、これらに限定されるものではないことは勿論である。
【００６３】
例えば、図４に示すように、検出部２０がサブシステム１０ａとサブシステム１０ｂとが共通関数化可能であるか否かを判断する場合、各サブシステム１０ａ，１０ｂを２ブロック間の接続関係１１ａ，１１ｂに分解する。図４に示す例では、各サブシステム１０ａ，１０ｂ共に、入力ブロックと加算ブロックとが接続された関係が３、加算ブロックとゲインブロックとが接続された関係が２、加算ブロックと出力ブロックとが接続された関係が１という点で、構成は同じである。ブロック同士の単なる接続関係だけで判断すると、各サブシステム１０ａ，１０ｂは共通関数化可能であると判断してしまう虞があるが、入力ブロックに接続された加算ブロックの一部１２ａ，１２ｂは演算子が逆であり、計算結果は異なるため共通関数化可能ではない。Ｃ言語上に直接書き込まれる文字、例えば演算子である加算、減算、乗算、割り算、論理演算、比較演算等も同様である。そこで、本実施の形態のクローン共通関数化装置１では、接続先のブロックの処理内容まで厳密に確認するようになっており、サブシステム同士の共通関数化の可否を判断することができる。
【００６４】
また、例えば、検出部２０がブロックの構成だけで共通関数化の可否を判断することで、データ型の違いまでは検出しない虞がある。データ型の違いは、データの通り道の大きさが違うことであり、関数名が変わるので共通関数化可能ではない。そこで、本実施の形態のクローン共通関数化装置１では、ブロックの構成に加え、入出力のデータ型をも検出し、その同一性に基づいて共通関数化の可否を判断している。
【００６５】
また、例えば、ブロックの内部で直接グローバルな信号に結果を渡す文面がある場合も共通関数化可能ではない。即ち、Ｃ言語レベルで直接書き込まれる文字に関しては、共通関数化できない。そこで、除去可能なグローバル変数については、これを除去することで共通関数化可能にすることができる。具体的には、図５に示すように、各サブシステム１３ａ，１３ｂでのゲインブロックのゲインはａとｂとであり、パラメータを異にしてブロックの構成を異にしている。この場合、このままでは共通関数化可能ではないと判断される虞がある。これに対し、本実施の形態のクローン共通関数化装置１では、数値パラメータの違いは、演算子の違いと異なり機能的な違いではなくデータの大きさの違いでもないことから、吸収して共通関数化するようにしている。具体的には、共通関数化後のサブシステム１４ａ，１４ｂに示すように、パラメータ名を共通化し、その名前のデータをモデルに渡すための擬似的な入力引数ａ，ｂを設定することでサブシステム１４ａ，１４ｂを同一化し、その上で共通関数化設定を自動的に施すようにしている。このように、調整可能パラメータと呼ばれる引数扱いできる定数については、ブロック同士で異なっていてもマスクパラメータによる定数変更で共通関数化可能となる。
【００６６】
また、例えば、図６に示すように、検出部２０がSwitchブロックとRelationalOperatorブロックとの組み合わせで、MinMaxブロックへの置換候補を自動的に検出することもできる。具体的には、図６（ａ）に示すように、各サブシステム１５ａは、いずれもminブロックに相当する機能を有し、これらはMinMaxブロックに置換可能である。また、図６（ｂ）に示すように、各サブシステム１５ｂは、いずれもmaxブロックに相当する機能を有し、これらはMinMaxブロックに置換可能である。同様に、RelationalOperatorブロックとUnitDelayブロックとの組み合わせで、DetectChangeブロック、DetectIncreaseブロック、DetectDecreaseブロックへの置換候補を自動的に検出することや、LogicalOperatorブロックとRelationalOperatorブロックとConstantブロックとの組み合わせで、IntervalTestブロックへの置換候補を自動的に検出すること等も可能である。
【００６７】
また、モデル内のサブシステムの中で削除してもよいブロックのリストを予め設定し、該当するブロックはモデルのサブシステムのリストを作成する時点で自動的に削除するようにする。例えば、DataTypeConversionブロックやSignalConversionブロック等の信号情報ブロックや、DataTypeDuplicateブロックのような信号定義専用ブロックは、サブシステムの機能には影響しないものであるので、リスト作成時に自動的に削除される。また、離れて接続されるFromブロックとGotoブロックとのように、直接結線されていない場合に、これらのブロックを削除して直接結線された接続に自動的に変換するようになっている。例えば、A-Goto(X)  From(X)-Bは、FromブロックとGotoブロックとを削除してA-Bと変換される。
【００６８】
また、検出部２０が共通関数化の可否を判断する際には、ブロックタイプだけではなく、他の比較パラメータ（オプション）を利用するようにする。例えば、論理演算ブロックでは、各ブロックの演算子による影響が大きいので、演算子の名称をオプションとして設定する。具体的には、Logicブロックでは、演算子のオプションをパラメータとして表記するようにし、例えば、論理演算のＡＮＤ、ＯＲ、ＮＯＴ等の演算子の種類に応じて、Logic(AND)、Logic(OR)、Logic(NOT)等と表記する。また、Lookup_n-Dブロックでは、次数をオプションとしてパラメータ表記するようにし、例えば、Lookup_n-D(1)、Lookup_n-D(2)、Lookup_n-D(3)等と表記する。
【００６９】
また、モデルの中の対象とするサブシステムが階層構造であり、かつ異なる段階の階層においてライブラリのサブシステムと各々共通関数化可能であると検出する場合がある。この場合は、検出部２０は、検出結果から最上位の階層以外の階層のサブシステムを削除し、最上位の階層のサブシステムのみを検出結果とする。これにより、異なる段階の階層のサブシステムをコード化することによる重複したソースコードの作成を防止することができる。尚、例えば、サブシステムＡの内部にサブシステムＢがあった場合、サブシステムＢを先に共通関数化設定してから、サブシステムＡの共通関数化設定をする必要がある。ここで、サブシステムＢが共通関数化可能でない場合は、サブシステムＡのマスクサブシステムにサブシステムＢのパラメータまで考慮したマスクサブシステムを設計する必要がある。
【００７０】
検出部２０は、ステップＳ３において自動検出したサブシステムを第２のライブラリに追加登録する（図３の第２のライブラリ表示部６１ｅ参照）。更に、検出部２０は、第２のライブラリに追加登録したサブシステムを利用して、モデル内で自動検出したサブシステムを置換するためのＭファイルを作成する（ステップＳ４）。このＭファイルは、Ｍ言語により作成されたプログラムであり、実行することにより、上述の追加登録及び置換が実行されるものとしている。尚、ステップＳ２〜ステップＳ４が、本発明の検出工程及びクローン検出方法に相当する。
【００７１】
出力部２１は、所定項目を中間レポートとしてディスプレイ６に表示する（ステップＳ５、出力工程）。ここでの表示は、例えば、ステップＳ４で作成されたＭファイルとして表示され、ユーザはＭファイルを編集することで、クローン共通関数化装置１に指示を与える。表示される所定項目としては、クローン共通関数化装置１が完全同一と判断したサブシステムの名称やパラメータ等、クローン共通関数化装置１が完全同一ではないが機能の同一等で共通関数化可能と判断したサブシステムの名称やパラメータ等、クローン共通関数化装置１がモデルから抽出したもののライブラリのサブシステムとは共通関数化可能とは判断されなかったサブシステムの名称やパラメータ等としている。また、ブロックごとの一致率や、サブシステムの一致率も表示する。更には、クローンであるが計測信号の観測情報だけが異なる場合に、観測信号を出力するか否かも表示・選択できるようにする。尚、所定項目としては、これらに限られないのは勿論である。
【００７２】
ユーザは、所定項目を含むＭファイルが表示されたディスプレイ６を参照し、クローン共通関数化装置１により共通関数化可能と判断されたサブシステムの中から実際に共通関数化するものを選択したり、共通関数化不能と判断されたサブシステムの中からパラメータ変換等の手法により共通関数化可能にしたりして、Ｍファイルを更新する（ステップＳ６）。
【００７３】
更に、ユーザは、Ｍファイルの更新が終了すると、Ｍファイルを実行する（ステップＳ７）。この実行により、共通関数化部２２は、共通関数化可能なサブシステムを共通なサブシステムに自動置換する（ステップＳ８、共通関数化工程）。即ち、クローン共通関数化装置１は、共通関数化可能として検出して中間レポートで表示した複数のサブシステムのうち、ユーザが選択した少なくとも一部の複数のサブシステムを、コード化した際に共通した関数になるよう自動置換する。
【００７４】
クローン共通関数化装置１は、図７に示すように、ステップＳ１の処理により、ユーザが選択した未処理モデル１６を入力して、ステップＳ２〜ステップＳ８の処理によりサブシステムの共通関数化設定を行い、共通化済みモデル１７を作成する。この時、クローン共通関数化装置１は、共通関数化が未設定であったサブシステム１６ａを、共通化設定済みのサブシステム１７ａに自動置換する。
【００７５】
また、ＣＰＵ２は、最終レポートをディスプレイ６の最終画面６２に表示する（ステップＳ９）。ここでの表示項目は、ファイルの実行により各ライブラリに追加されたり、共通関数化のために置換されたサブシステムの名称やパラメータ等である。このように処理内容を最終レポートとして最終画面６２に表示することにより、共通関数化の処理が元のモデルの機能を阻害していないか、ユーザが容易に検証することができる。
【００７６】
その後、ユーザは必要に応じてＣＰＵ２に指示をして、ＣＰＵ２によりモデルをＣコードにコード化する（ステップＳ１０）。この時、共通関数化可能なサブシステムが共通なサブシステムに置換されているので、共通なサブシステムについては共通な関数がコード化されていることから、コード化する際にソースコードのサイズ圧縮を図ることができる。
【００７７】
以上説明したように、本実施の形態のクローン共通関数化装置１によると、ブロック線図で構成したモデルの中から少なくとも共通関数化可能な複数のサブシステムを検出する検出工程を備えるので、検出した共通関数化可能なクローンを共通関数化することができる。これにより、このモデルをコード化する際に、ソースコードのサイズ圧縮を図ることができる。
【００７８】
また、本実施の形態のクローン共通関数化装置１によると、検出工程による検出結果を出力する出力工程を備えるので、検出結果をユーザに示すことができ、ユーザは検出結果に基づいて、共通関数化するクローンを適宜選択することができる。また、共通関数化できないと判断されたクローンであっても、ユーザが適宜処理をすることにより共通関数化できるようになる場合もある。これらにより、クローンの共通関数化をユーザの確認を経て適正に実行することができるので、ソースコードのサイズ圧縮をより効果的に実現することができる。
【００７９】
また、本実施の形態のクローン共通関数化装置１によると、各ライブラリに登録されたサブシステムの候補に対して共通関数化可能な複数のサブシステムを、モデルの中から抽出して、共通関数化可能なクローンとするので、ライブラリを利用しない場合に比べてクローンを検出するための処理時間を短縮することができる。
【００８０】
また、本実施の形態のクローン共通関数化装置１によると、第１のライブラリはモデルとは別に予め設定されたものであるので、事前に検証を済ませたサブシステムを利用することができる。これにより、共通関数化のためにクローンを置換した後に、置換後のモデルが本来の機能を維持しているか検証する際に、当該サブシステムについては検証を不要にすることができる。このため、検証時間を短縮することができ、全体の処理時間を短縮することができる。
【００８１】
また、本実施の形態のクローン共通関数化装置１によると、検出部２０は第２のライブラリを自動的に作成するので、クローン検出の自動化を促進することができる。
【００８２】
また、本実施の形態のクローン共通関数化装置１によると、図６に示すように、機能が同一である複数のサブシステムを共通関数化可能なサブシステムとして検出するので、機能が同一であっても構成が異なることにより共通関数化不能とする場合に比べて、より多くのクローンを共通関数化できるようになる。これにより、このモデルをコード化する際に、ソースコードの更なるサイズ圧縮を図ることができる。
【００８３】
また、本実施の形態のクローン共通関数化装置１によると、図５に示すように、パラメータを変更することにより共通関数化可能な複数のサブシステムを共通関数化可能なサブシステムとして検出するので、パラメータを変更することなく共通関数化不能とする場合に比べて、より多くのクローンを共通関数化できるようになる。これにより、このモデルをコード化する際に、ソースコードの更なるサイズ圧縮を図ることができる。
【００８４】
また、本実施の形態のクローン共通関数化装置１によると、図４に示すように、入出力のポート数は同じで演算子のみが異なる複数のサブシステムを共通関数化可能ではないサブシステムとして検出するので、共通関数化不能であるサブシステムを共通関数化可能であると誤検出することを防止し、クローンを検出するための処理時間を短縮することができる。
【００８５】
また、本実施の形態のクローン共通関数化装置１によると、データ型が異なる複数のサブシステムを共通関数化可能ではないサブシステムとして検出するので、共通関数化不能であるサブシステムを共通関数化可能であると誤検出することを防止し、クローンを検出するための処理時間を短縮することができる。
【００８６】
また、本実施の形態のクローン共通関数化装置１によると、機能に影響しないブロックを削除してから共通関数化可能なサブシステムを検出するので、機能に影響しないブロックを有することにより構成が異なるサブシステムであっても共通関数化できることがある。これにより、より多くのクローンを共通関数化できるようになり、このモデルをコード化する際に、ソースコードの更なるサイズ圧縮を図ることができる。
【００８７】
また、本実施の形態のクローン共通関数化装置１によると、検出結果から最上位の階層以外の階層のサブシステムを削除し、最上位の階層のサブシステムのみを検出結果とするので、異なる段階の階層のサブシステムをコード化することによる重複したソースコードの作成を防止することができる。このため、このモデルをコード化する際に、ソースコードの更なるサイズ圧縮を図ることができる。
【００８８】
また、本実施の形態のクローン共通関数化装置１によると、検出結果に共通関数化可能か否かの判断に関する所定の情報を含むので、ユーザは検出結果を参照して共通関数化するか否かを決定することができる。これにより、クローンの共通関数化をユーザの確認を経て適正に実行することができるので、ソースコードのサイズ圧縮をより効果的に実現することができる。
【００８９】
また、本実施の形態のクローン共通関数化装置１によると、共通関数化可能として検出した複数のサブシステムのうち、ユーザが選択した少なくとも一部の複数のサブシステムを、コード化した際に共通した関数にすることができる。これにより、モデルをコード化する際に、ソースコードのサイズ圧縮を図ることができる。
【００９０】
尚、以上説明した実施の形態のクローン共通関数化装置１においては、検出工程の終了後、出力工程により中間レポートをディスプレイに表示し、ユーザが共通関数化するサブシステムを選択し、共通関数化工程で自動置換するという半自動処理を採用しているが、これには限られない。例えば、検出工程の終了後に、共通関数化に関して所定の条件を満たしたサブシステム同士はそのまま共通関数化工程で自動置換するという自動処理を採用してもよい。あるいは、検出工程で検出を実行し、そのままデータを保存しておき、外部から参照要求があった際にデータを出力するようにしてもよい。
【００９１】
また、本実施の形態のクローン共通関数化装置１においては、ライブラリとして、ユーザが予め設定した第１のライブラリと、クローン共通関数化装置１により対象となるモデルの中から抽出されて追加される第２のライブラリとを備えているが、これら２種類のライブラリを有することには限られない。例えば、いずれか片方のみでもよく、またはいずれも有していなくてもよく、あるいは第１のライブラリ及び第２のライブラリとは別のライブラリを有するようにしてもよい。
【００９２】
尚、以上述べた実施の形態の各処理動作は具体的にはＣＰＵ２により実行されるものであり、上述した機能を実現するソフトウェアのプログラムを記録した記録媒体をＣＰＵ２に供給し、ＣＰＵ２が記録媒体に格納されたプログラムを読み出し実行することによって達成されるようにしてもよい。この場合、記録媒体から読み出されたプログラム自体が上述した各実施の形態の機能を実現することになり、プログラム自体及びそのプログラムを記録した記録媒体は本発明を構成することになる。
【００９３】
また、各実施の形態では、コンピュータ読み取り可能な記録媒体がＲＯＭ４であり、ＲＯＭ４にプログラムが格納される場合について説明したが、これに限定するものではない。プログラムは、コンピュータ読み取り可能な記録媒体であれば、いかなる記録媒体に記録されていてもよい。例えば、プログラムを供給するための記録媒体としては、ＨＤＤ、外部記憶装置、記録ディスク等を用いてもよい。
【実施例】
【００９４】
［比較例］
ブロック数が９７１６個のモデルに対して、人手により可能な限り共通関数化を行い、そのモデルをコード化した。その結果、８２８７行のコードが生成された。
【００９５】
［実施例１］
比較例で用いた人手による共通関数化を行ったモデルに対して、クローン共通関数化装置１により共通関数化処理を行い、そのモデルをコード化した。その結果、８０１８行のコードが生成された。従って、比較例に対するコードの削減行数は２６９行であり、３．３５％の削減効果が認められた。
【００９６】
［実施例２］
共通関数化を全く行わないモデルをコード化した場合のコード行数と、クローン共通関数化装置１により共通関数化処理を行った後のモデルをコード化した場合のコード行数とを比較した。その結果、本実施例では、コード行数の約１０％の削減効果が認められた。
【００９７】
従って、共通関数化を全く行わないモデルに対する効果は勿論、人手で可能な限り共通関数化したモデルに対して、更に３％を超える削減効果を得ることができたので、本クローン共通関数化装置１によれば人間よりも高精度に共通関数化を実現できることが明らかとなった。
【符号の説明】
【００９８】
１    クローン共通関数化装置（コンピュータ）
２    ＣＰＵ（制御部）
４    ＲＯＭ（記憶媒体）
４０  クローン共通関数化プログラム（クローン検出プログラム）
【図１】
2015056140.tif 000003
【図２】
2015056140.tif 000004
【図３】
2015056140.tif 000005
【図４】
2015056140.tif 000006
【図５】
2015056140.tif 000007
【図６】
2015056140.tif 000008
【図７】
2015056140.tif 000009