図面 (/)

技術 クローン検出装置、クローン検出プログラム、及びクローン検出プログラムを記録した記録媒体

出願人 株式会社エクスモーション
発明者 高橋一彰三輪有史
出願日 2010年8月5日 (10年6ヶ月経過) 出願番号 2010-176345
公開日 2012年2月23日 (9年0ヶ月経過) 公開番号 2012-038022
状態 未査定
技術分野 ストアードプログラム ストアードプログラム
主要キーワード ダイナミックシステム 解析性 品質診断 比較モデル 対象元 比較ファイル データ可視化 比較項目
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2012年2月23日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (20)

課題

ブロック線図を対象にした保守性及び効率性が高いクローン検出を行うクローン検出装置、クローン検出プログラム、及びクローン検出プログラムを記録した記録媒体を提供すること。

解決手段

ブロック線図をツリー構造として正規化し、信号線の下流(出力側ブロックから上流(入力側)ブロックへ向かって、ブロック線図を表現するツリーノードに相当するブロック同士を深さ優先で(有向線で繋がったブロックを優先的に比較対象にして)比較し、一致したブロックを登録し、登録したブロックのリスト統合して出力する。

概要

背景

従来、コンピュータに対する一連の指示は、プログラミング言語言語仕様に従って書かれるソースコード原始プログラム)というテキストファイルを用いて行われており、当該ソースコードが書かれたソースファイルは非常に難解な仕様である。
近年、当該ソースコードを生成するためのツール(ソフトウェア)として、MathWorks社のMATLAB(登録商標シリーズの1つに「Simulink(登録商標)」がある。当該Simulinkを利用し、設計仕様としての要求書設計書モデルブロック線図のモデル(Simulinkモデル)で書くことで、プログラミング言語(C言語)のソースコードを自動設計することが可能になる。

より詳しくは、MATLABは、アルゴリズム開発、データの可視化数値計算を行うためのハイレベルテクカルコンピューティング言語および対話型環境であり、信号・画像処理通信システム設計制御系設計実験計測金融工学生命工学などの様々な分野で利用できる。また、Toolbox(登録商標)という目的別のMATLAB関数群を使用することにより、容易にMATLAB環境を拡張し、対象分野に特化した問題を解決することができる。
また、MATLABと関連して、マルチドメインシミュレーション及びダイナミックシステムモデルベースデザインのためのプラットフォームとして提供されているのがSimulinkである。Simulinkの対話型グラフカル環境及びカスタマイズ可能なブロックライブラリ群により、制御、信号処理、通信、その他の時間依存ステムの正確な設計、シミュレーション、実装テストが可能である。また、SimulinkはMATLAB環境に統合されており、ユーザはMATLAB/Simulinkモデルを利用することで広範囲にわたるアルゴリズム開発、データ可視化データ解析、および数値計算のツールに迅速にアクセスすることができる。

プログラミングの問題としてプログラムの大規模化がある。大規模化というのは、文字通りソフトウェアの規模が大きくなることであり、100万行単位のプログラムを数十人〜数百人で開発するような状況になる。大規模なソフトウェアを開発するには、同時並行的に開発を進めたり、理解をし易くするためにソフトウェアを分割することが必要になり、その結果、作業者プログラマー)自身が他者のソースコードのコピーアンドペーストを行ったり、あるいは、アプリケーションフレームワークなどで同じようなコードが自動生成される事が起こり、これがクローンコードが発生する原因となる。
詳しくは後述するが、MATLAB/Simulinkモデルにおけるクローンとは、プログラムのモデル内において、コピーアンドペーストなどにより他の箇所にも同じブロックを組み合わせた同一又は類似する処理が存在することをいい、見かけ上あるいは実質的に同じ構造をしている箇所を指す。

一方、MATLAB/Simulinkモデルなどを使った開発においても、制御ロジック再利用率が高くバリエーション豊富製品の場合、ひとつのモデルを維持及び修正しながら開発が行われることが多く、こうした維持及び修正の際にモデルのコピーアンドペーストを行うことがある。
このようにモデルのコピーアンドペーストを用いた開発が繰り返されると、MATLAB/Simulinkモデルなどの品質が徐々に劣化していき、その結果、開発に悪影響を及ぼすようになる。
こうした開発への悪影響を防ぐために、MATLAB/Simulinkモデルなどの品質を改善する活動を維持的に行うことが重要である。その改善活動では、まず、MATLAB/Simulinkモデルなどに混入した問題点を発見し、次に、その問題に対して適切な対策を行うことが必要である。

近年、プログラミング言語の「ソースコード」を対象としたクローンを検出するツールは多く世に出ている一方で、MATLAB/Simulinkモデルなどで利用される「ブロック線図」を対象としたクローンを検出するツールは開発されていない。
プログラミング言語(C言語)のソースコードを自動設計(生成)するブロック線図のモデル(MATLAB/Simulinkなどを利用したモデル)の段階で、クローンを検出でき、更に、当該クローンを統合することができれば、クローン検出及び統合箇所に紐付いたソースコードの改善も自動設計されることが可能となり、プログラム開発・改善において多大な効率の向上に繋がることが期待できる。

ここで、クローン検出における、従来行われているソースコードを対象にする場合と、MATLAB/Simulinkモデルなどのブロック線図を対象にする場合とでの差異を、図20を用いて説明する。
図20はソースコードとブロック線図の検出対象有向グラフを示した図である。
図20に示すように、ソースコードとブロック線図には、差異の代表例として以下(1)〜(4)などの違いがある。
(1)検出対象が、ソースコードではテキストファイル(a、b、…)であり、一方、ブロック線図ではブロック(A、B、…)のリストである。
(2)検出対象を有向グラフ(矢印)で表したとき、検出対象の有向グラフは、1入力1出力であるソースコードでは入力側も出力側も1本の矢印で表すことができる。一方、主に多入力1出力であるブロック線図では入力側は2本以上の矢印になる場合がある。
ここで、例えば、ブロックCやブロックGは、出力信号を表す矢印が2本出ているが、これは同じ信号が異なる2つのブロックに向けて出力されているためであり、出力信号の種類が2つある(即ち、1つのブロックから異なる2信号が出力されている)というわけではない。
(3)検出対象を有向グラフで表したとき、ソースコードでは繰り返しの処理を行うループ反復処理部)になる部分は存在せず、一方、ブロック線図ではループになる部分が存在する。
(4)ソースコードでは、特定の行(例えば、図示されたa−b−c−d−eの行)へ到達する経路として、1つ前の行(図示しない)からの到達経路は存在しない。一方、ブロック線図では、特定のブロックへ到達する経路として、接続された入力側のブロックの数の分だけ到達経路が存在する。例えば、ブロックAからブロックGへの経路としては、A−B−D−Gと、A−C−E−Gとの2経路が存在する。
上述した(1)〜(4)に代表される違いにより、ソースコードを対象としたクローン検出で用いられている技術を、ブロック線図を対象とするクローン検出に適用することは極端に困難である。また、仮に適用したとしてもクローン検出の複雑化を招くことになってしまう。

次に、ブロック線図におけるクローンが及ぼす影響について説明する。
プログラム内にクローン、即ち、同一又は類似する構造を持つ箇所が多く存在すると、以下(1)〜(4)に説明する要因によりプログラム全体の保守性効率性が悪化する。
(1)プログラム変更時の影響箇所が多くなるなどメンテナンス性が悪化し、メンテナンス費用が増大する。
(2)プログラムの解析性が悪化する。
(3)テスト時に検証項目重複し、テスト費用が増大する。
(4)プログラムサイズが増大し、マイコンなどへの搭載時にリソース、即ち、ROM容量が増大する。
上述した(1)〜(4)などの影響及び問題点があるものの、ブロック線図の大規模化及び複雑化に伴い、目視によるブロック線図のクローン検出はほぼ不可能である。

また、ブロック線図を対象にしたクローン検出として、以下の論文発表されている。

概要

ブロック線を対象にした保守性及び効率性が高いクローン検出を行うクローン検出装置、クローン検出プログラム、及びクローン検出プログラムを記録した記録媒体を提供すること。ブロック線をツリー構造として正規化し、信号線の下流(出力側)ブロックから上流(入力側)ブロックへ向かって、ブロック線を表現するツリーノードに相当するブロック同士を深さ優先で(有向線で繋がったブロックを優先的に比較対象にして)比較し、一致したブロックを登録し、登録したブロックのリストを統合して出力する。

目的

本発明は、ブロック線図を対象にした保守性及び効率性が高いクローン検出を行うクローン検出装置、クローン検出プログラム、及びクローン検出プログラムを記録した記録媒体を提供する

効果

実績

技術文献被引用数
0件
牽制数
1件

この技術が所属する分野

(分野番号表示ON)※整理標準化データをもとに当社作成

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

所定の機能を表す要素の接続関係が、前記要素への入力信号又は前記要素からの出力信号のうち少なくとも何れか1つの信号の向きを示す有向線で表されたモデルファイルを取得する取得手段と、前記モデルファイルが有する、任意の前記要素の接続関係が前記有向線で表された所定サイズの要素群と、同一又は類似する所定サイズの要素群を、前記要素及び前記有向線で示された接続関係に基づいて前記取得した同一モデルファイル又は前記取得した異なるモデルファイルから検出するクローン検出手段と、前記クローン検出手段が検出した前記所定サイズの要素群を出力する出力手段と、を備えたことを特徴とするクローン検出装置

請求項2

前記クローン検出手段は、前記所定サイズの要素群が含む前記要素の最小数又は所定の含有数を設定し、前記設定を満たす要素群を前記所定サイズの要素群として検出することを特徴とする請求項1に記載のクローン検出装置。

請求項3

前記クローン検出手段は、前記要素及び前記有向線で示された要素の接続関係において、前記出力信号を示す有向線の終端に位置する要素から、前記入力信号を出力する要素の方向へ向かって、前記所定サイズの要素群の検出を行うことを特徴とする請求項1又は請求項2に記載のクローン検出装置。

請求項4

前記クローン検出手段は、前記取得したモデルファイルと、前記取得した同一モデルファイル又は前記取得した異なるモデルファイルと、が有する各々の前記要素を、前記有向線で接続された要素を優先して前記所定サイズの要素群の検出を行うことを特徴とする請求項1、請求項2、又は請求項3に記載のクローン検出装置。

請求項5

前記要素は、前記機能ごとに複数種の形状を有し、且つ、前記機能を表す演算の値を有し、また、前記要素1つが前記有向線を複数有する場合と、当該場合に更に前記有向線に前記入力信号の入力順序が定められている場合とがあり、前記クローン検出手段は、前記要素が有する形状、前記演算の値、前記有向線に定められた順序、又は前記入力信号を示す有向線の数のうち少なくともいずれか1つに基づいて前記所定サイズの要素群を検出することを特徴とする請求項1から請求項4のうちいずれか1項に記載のクローン検出装置。

請求項6

コンピュータに、所定の機能を表す要素の接続関係が、前記要素への入力信号又は前記要素からの出力信号のうち少なくとも何れか1つの信号の向きを示す有向線で表されたモデルファイルを取得する取得機能と、前記モデルファイルが有する、任意の前記要素の接続関係が前記有向線で表された所定サイズの要素群と、同一又は類似する所定サイズの要素群を、前記要素及び前記有向線で示された接続関係に基づいて前記取得した同一モデルファイル又は前記取得した異なるモデルファイルから検出するクローン検出機能と、前記クローン検出機能が検出した前記所定サイズの要素群を出力する出力機能と、を実行させるためのクローン検出プログラム

請求項7

コンピュータに、所定の機能を表す要素の接続関係が、前記要素への入力信号又は前記要素からの出力信号のうち少なくとも何れか1つの信号の向きを示す有向線で表されたモデルファイルを取得する取得機能と、前記モデルファイルが有する、任意の前記要素の接続関係が前記有向線で表された所定サイズの要素群と、同一又は類似する所定サイズの要素群を、前記要素及び前記有向線で示された接続関係に基づいて前記取得した同一モデルファイル又は前記取得した異なるモデルファイルから検出するクローン検出機能と、前記クローン検出機能が検出した前記所定サイズの要素群を出力する出力機能と、を実行させるためのクローン検出プログラムを記録した記録媒体

技術分野

0001

本発明は、クローン検出装置クローン検出プログラム、及びクローン検出プログラムを記録した記録媒体係り、例えば、ブロック線図のクローン検出に関する。

背景技術

0002

従来、コンピュータに対する一連の指示は、プログラミング言語言語仕様に従って書かれるソースコード原始プログラム)というテキストファイルを用いて行われており、当該ソースコードが書かれたソースファイルは非常に難解な仕様である。
近年、当該ソースコードを生成するためのツール(ソフトウェア)として、MathWorks社のMATLAB(登録商標シリーズの1つに「Simulink(登録商標)」がある。当該Simulinkを利用し、設計仕様としての要求書設計書モデルをブロック線図のモデル(Simulinkモデル)で書くことで、プログラミング言語(C言語)のソースコードを自動設計することが可能になる。

0003

より詳しくは、MATLABは、アルゴリズム開発、データの可視化数値計算を行うためのハイレベルテクカルコンピューティング言語および対話型環境であり、信号・画像処理通信システム設計制御系設計実験計測金融工学生命工学などの様々な分野で利用できる。また、Toolbox(登録商標)という目的別のMATLAB関数群を使用することにより、容易にMATLAB環境を拡張し、対象分野に特化した問題を解決することができる。
また、MATLABと関連して、マルチドメインシミュレーション及びダイナミックシステムモデルベースデザインのためのプラットフォームとして提供されているのがSimulinkである。Simulinkの対話型グラフカル環境及びカスタマイズ可能なブロックライブラリ群により、制御、信号処理、通信、その他の時間依存ステムの正確な設計、シミュレーション、実装テストが可能である。また、SimulinkはMATLAB環境に統合されており、ユーザはMATLAB/Simulinkモデルを利用することで広範囲にわたるアルゴリズム開発、データ可視化データ解析、および数値計算のツールに迅速にアクセスすることができる。

0004

プログラミングの問題としてプログラムの大規模化がある。大規模化というのは、文字通りソフトウェアの規模が大きくなることであり、100万行単位のプログラムを数十人〜数百人で開発するような状況になる。大規模なソフトウェアを開発するには、同時並行的に開発を進めたり、理解をし易くするためにソフトウェアを分割することが必要になり、その結果、作業者プログラマー)自身が他者のソースコードのコピーアンドペーストを行ったり、あるいは、アプリケーションフレームワークなどで同じようなコードが自動生成される事が起こり、これがクローンコードが発生する原因となる。
詳しくは後述するが、MATLAB/Simulinkモデルにおけるクローンとは、プログラムのモデル内において、コピーアンドペーストなどにより他の箇所にも同じブロックを組み合わせた同一又は類似する処理が存在することをいい、見かけ上あるいは実質的に同じ構造をしている箇所を指す。

0005

一方、MATLAB/Simulinkモデルなどを使った開発においても、制御ロジック再利用率が高くバリエーション豊富製品の場合、ひとつのモデルを維持及び修正しながら開発が行われることが多く、こうした維持及び修正の際にモデルのコピーアンドペーストを行うことがある。
このようにモデルのコピーアンドペーストを用いた開発が繰り返されると、MATLAB/Simulinkモデルなどの品質が徐々に劣化していき、その結果、開発に悪影響を及ぼすようになる。
こうした開発への悪影響を防ぐために、MATLAB/Simulinkモデルなどの品質を改善する活動を維持的に行うことが重要である。その改善活動では、まず、MATLAB/Simulinkモデルなどに混入した問題点を発見し、次に、その問題に対して適切な対策を行うことが必要である。

0006

近年、プログラミング言語の「ソースコード」を対象としたクローンを検出するツールは多く世に出ている一方で、MATLAB/Simulinkモデルなどで利用される「ブロック線図」を対象としたクローンを検出するツールは開発されていない。
プログラミング言語(C言語)のソースコードを自動設計(生成)するブロック線図のモデル(MATLAB/Simulinkなどを利用したモデル)の段階で、クローンを検出でき、更に、当該クローンを統合することができれば、クローン検出及び統合箇所に紐付いたソースコードの改善も自動設計されることが可能となり、プログラム開発・改善において多大な効率の向上に繋がることが期待できる。

0007

ここで、クローン検出における、従来行われているソースコードを対象にする場合と、MATLAB/Simulinkモデルなどのブロック線図を対象にする場合とでの差異を、図20を用いて説明する。
図20はソースコードとブロック線図の検出対象有向グラフを示した図である。
図20に示すように、ソースコードとブロック線図には、差異の代表例として以下(1)〜(4)などの違いがある。
(1)検出対象が、ソースコードではテキストファイル(a、b、…)であり、一方、ブロック線図ではブロック(A、B、…)のリストである。
(2)検出対象を有向グラフ(矢印)で表したとき、検出対象の有向グラフは、1入力1出力であるソースコードでは入力側も出力側も1本の矢印で表すことができる。一方、主に多入力1出力であるブロック線図では入力側は2本以上の矢印になる場合がある。
ここで、例えば、ブロックCやブロックGは、出力信号を表す矢印が2本出ているが、これは同じ信号が異なる2つのブロックに向けて出力されているためであり、出力信号の種類が2つある(即ち、1つのブロックから異なる2信号が出力されている)というわけではない。
(3)検出対象を有向グラフで表したとき、ソースコードでは繰り返しの処理を行うループ反復処理部)になる部分は存在せず、一方、ブロック線図ではループになる部分が存在する。
(4)ソースコードでは、特定の行(例えば、図示されたa−b−c−d−eの行)へ到達する経路として、1つ前の行(図示しない)からの到達経路は存在しない。一方、ブロック線図では、特定のブロックへ到達する経路として、接続された入力側のブロックの数の分だけ到達経路が存在する。例えば、ブロックAからブロックGへの経路としては、A−B−D−Gと、A−C−E−Gとの2経路が存在する。
上述した(1)〜(4)に代表される違いにより、ソースコードを対象としたクローン検出で用いられている技術を、ブロック線図を対象とするクローン検出に適用することは極端に困難である。また、仮に適用したとしてもクローン検出の複雑化を招くことになってしまう。

0008

次に、ブロック線図におけるクローンが及ぼす影響について説明する。
プログラム内にクローン、即ち、同一又は類似する構造を持つ箇所が多く存在すると、以下(1)〜(4)に説明する要因によりプログラム全体の保守性効率性が悪化する。
(1)プログラム変更時の影響箇所が多くなるなどメンテナンス性が悪化し、メンテナンス費用が増大する。
(2)プログラムの解析性が悪化する。
(3)テスト時に検証項目重複し、テスト費用が増大する。
(4)プログラムサイズが増大し、マイコンなどへの搭載時にリソース、即ち、ROM容量が増大する。
上述した(1)〜(4)などの影響及び問題点があるものの、ブロック線図の大規模化及び複雑化に伴い、目視によるブロック線図のクローン検出はほぼ不可能である。

0009

また、ブロック線図を対象にしたクローン検出として、以下の論文発表されている。

0010

Florian Deissenbloeck、Benjamin Hummel、Elmar Jurgens、Bernhard Schatz、Stefan Wagner、JeanーFrancois Girard、Stefan Teuchert著 「Clone Detection in Automotive ModelーBased Development.InACM2008」

0011

上記非特許文献では、まず、ソースコードに対して一定の規則に従って処理を加えるプリプロセスを行い、局所的な1つのシステムとしての構造をもつサブシステムを展開している。次に、展開したデータに対して正規化を行い、ブロックに新たに名前付けを行っている。
そして、幅を優先した幅優先探索でクローン検出を行い、検出されたクローン同士の類似度に基づいてサブグラフを探し、クローンのペアをまとめ、最後に、クラスタリングを行うことが記載されている。なお、幅優先探索については後述する。
また、上記非特許文献では、「最も似ているグラフ(即ち、クローン箇所)」を検出するために、逐一、類似度を判断する演算を行っている。

先行技術

0012

ここで、図21(a)は、前述の幅優先探索を説明するための図である。
同図の各ブロック上部に付された番号が探索の順序を示している。
幅優先探索は、図21(a)に示すように、同一階層に存在するブロックを全て検出対象にし終わってから、次の階層へと探索を進める。
例えば、開始ブロックAの次に検出対象になるブロックは同一階層に存在するブロックBかブロックCである。仮に、開始ブロックAの次にブロックBを検出対象にした場合は、その次の検出対象は、当該ブロックBと信号のやり取りがあるか否か(有向線で繋がれているか否か)にかかわらず、ブロックCであり、開始ブロックAの次に検出対象になるブロックがブロックCの場合も、その次の検出対象は、当該ブロックCと信号のやり取りがあるか否かにかかわらず、ブロックBである。同一階層に存在するブロックを全て検出対象にした後、次の階層(ブロックD、ブロックE、ブロックF)へと進む。

発明が解決しようとする課題

0013

本発明は、ブロック線図を対象にした保守性及び効率性が高いクローン検出を行うクローン検出装置、クローン検出プログラム、及びクローン検出プログラムを記録した記録媒体を提供することを目的とする。

課題を解決するための手段

0014

請求項1記載の発明では、所定の機能を表す要素の接続関係が、前記要素への入力信号又は前記要素からの出力信号のうち少なくとも何れか1つの信号の向きを示す有向線で表されたモデルファイルを取得する取得手段と、前記モデルファイルが有する、任意の前記要素の接続関係が前記有向線で表された所定サイズの要素群と、同一又は類似する所定サイズの要素群を、前記要素及び前記有向線で示された接続関係に基づいて前記取得した同一モデルファイル又は前記取得した異なるモデルファイルから検出するクローン検出手段と、前記クローン検出手段が検出した前記所定サイズの要素群を出力する出力手段と、を備えたことを特徴とするクローン検出装置を提供する。
請求項2記載の発明では、前記クローン検出手段は、前記所定サイズの要素群が含む前記要素の最小数又は所定の含有数を設定し、前記設定を満たす要素群を前記所定サイズの要素群として検出することを特徴とする請求項1に記載のクローン検出装置を提供する。
請求項3記載の発明では、前記クローン検出手段は、前記要素及び前記有向線で示された要素の接続関係において、前記出力信号を示す有向線の終端に位置する要素から、前記入力信号を出力する要素の方向へ向かって、前記所定サイズの要素群の検出を行うことを特徴とする請求項1又は請求項2に記載のクローン検出装置を提供する。
請求項4記載の発明では、前記クローン検出手段は、前記取得したモデルファイルと、前記取得した同一モデルファイル又は前記取得した異なるモデルファイルと、が有する各々の前記要素を、前記有向線で接続された要素を優先して前記所定サイズの要素群を検出を行うことを特徴とする請求項1、請求項2、又は請求項3に記載のクローン検出装置を提供する。
請求項5記載の発明では、前記要素は、前記機能ごとに複数種の形状を有し、且つ、前記機能を表す演算の値を有し、また、前記要素1つが前記有向線を複数有する場合と、当該場合に更に前記有向線に前記入力信号の入力順序が定められている場合とがあり、前記クローン検出手段は、前記要素が有する形状、前記演算の値、前記有向線に定められた順序、又は前記入力信号を示す有向線の数のうち少なくともいずれか1つに基づいて前記所定サイズの要素群を検出することを特徴とする請求項1から請求項4のうちいずれか1項に記載のクローン検出装置を提供する。
請求項6記載の発明では、コンピュータに、所定の機能を表す要素の接続関係が、前記要素への入力信号又は前記要素からの出力信号のうち少なくとも何れか1つの信号の向きを示す有向線で表されたモデルファイルを取得する取得機能と、前記モデルファイルが有する、任意の前記要素の接続関係が前記有向線で表された所定サイズの要素群と、同一又は類似する所定サイズの要素群を、前記要素及び前記有向線で示された接続関係に基づいて前記取得した同一モデルファイル又は前記取得した異なるモデルファイルから検出するクローン検出機能と、前記クローン検出機能が検出した前記所定サイズの要素群を出力する出力機能と、を実行させるためのクローン検出プログラムを提供する。
請求項7記載の発明では、コンピュータに、所定の機能を表す要素の接続関係が、前記要素への入力信号又は前記要素からの出力信号のうち少なくとも何れか1つの信号の向きを示す有向線で表されたモデルファイルを取得する取得機能と、前記モデルファイルが有する、任意の前記要素の接続関係が前記有向線で表された所定サイズの要素群と、同一又は類似する所定サイズの要素群を、前記要素及び前記有向線で示された接続関係に基づいて前記取得した同一モデルファイル又は前記取得した異なるモデルファイルから検出するクローン検出機能と、前記クローン検出機能が検出した前記所定サイズの要素群を出力する出力機能と、を実行させるためのクローン検出プログラムを記録した記録媒体を提供する。

発明の効果

0015

本発明では、ブロック線図を対象にした保守性及び効率性が高いクローン検出を行うクローン検出装置、クローン検出プログラム、及びクローン検出プログラムを記録した記録媒体を提供することができる。

図面の簡単な説明

0016

本発明のクローン検出装置の本実施形態におけるMATLAB/Simulinkブロックのサンプル例を示した図である。
本発明の実施形態に係るクローン検出装置のハードウェア的な構成例を示した図である。
本発明の実施形態に係るクローン検出装置が行うクローン検出のパターンを説明するための図である。
本発明の実施形態に係るクローン検出装置に表示される初期画面の一例を示した図である。
本発明の実施形態に係るクローン検出装置に表示されるクローン検出設定画面の一例を示した図である。
本発明の実施形態に係るクローン検出装置が行うクローン検出で、選択可能なクローン類似度設定項目の一例を示した図である。
本発明の実施形態に係るサブシステムとその内部の関係を示す図である。
本発明の実施形態に係るブロック図の一例を示した図である。
本発明の実施形態に係るクローン検出装置が行うクローン検出において、クローン候補となるブロックリストが1つ見つかった状態を示した図である。
本発明の実施形態に係るクローン検出装置が行うクローン検出において、クローン候補となるブロックリストが2つ見つかった状態を示した図である。
本発明の実施形態に係るクローン検出装置が行うクローン検出において、2つのブロックリストを統合した状態を示した図である。
本発明の実施形態に係るクローン検出装置における、クローン検出結果表示画面例を示した図である。
本発明の実施形態に係るクローン検出装置における、クローン検出結果表示画面の一覧表示画面例を示した図である。
本発明の実施形態に係るクローン検出装置における、クローン検出結果の一覧表示展開表示された画面例を示した図である。
(a)は、本発明の実施形態に係るクローン検出装置における、クローン検出の全体的な動作の流れを説明するフローチャートであり、(b)は、本発明の実施形態に係るクローン検出装置における、正規化処理の動作を説明するフローチャートである。
本発明の実施形態に係るクローン検出装置における、クローン検出処理の動作を説明するフローチャートである。
本発明の実施形態に係るクローン検出装置における、クローン検出処理の動作を説明するフローチャートである。
本発明の実施形態に係るクローン検出装置における、クローン登録処理の動作を説明するフローチャートである。
本発明の実施形態に係るクローン検出装置における、クローンの統合処理の動作を説明するフローチャートである。
ソースコードとブロック線図の検出対象の有向グラフを示した図である。
先行技術の幅優先探索、並びに、本発明の実施形態に係るクローン検出装置における幅優先探索及び深さ優先探索の一例を説明するための図である。

実施例

0017

以下、本発明のクローン検出装置における好適な実施形態について、図1から図19を参照して詳細に説明する。また、本実施形態では、ブロック線図のモデルは、MathWorks社のMATLAB/Simulinkを使用して作成されたモデルを一例にとり説明する。
(1)実施形態の概要
本発明に係るクローン検出装置の実施形態について、以下イ〜ホに分けて説明する。
イ.モデルファイルの選択、正規化
ロ.クローンの検出
ハ.クローンの登録
ニ.クローンの統合
ホ.クローン検出結果の表示

0018

データの正規化とは、一般的に、ファイル内のデータの重複がないようにテーブルを適切に分割することである。本発明のクローン検出装置に係る実施形態では、MATLAB/Simulinkモデルのブロック線図全体を、所定の演算を行う単位であるブロックが複数個集まり木のように連なった構造であるツリー構造に正規化する。さらに、局所的な機能を発揮するために複数のブロックを用いて構成されているサブシステムや、繰り返し処理(反復処理)を行う構成になっているループに対しては、各々を展開し、展開した接続関係は保存しておき、クローン検出の開始と同時に保存していた接続関係のテーブルを作成する。
本発明に係るクローン検出装置の実施形態では、この正規化を行うファイル、即ち、クローン検出を行うファイル(MATLAB/Simulinkモデルが適用されたファイル)を複数選択することが可能である。
また、本発明に係るクローン検出装置の実施形態では、上述したツリー構造は、データフロー信号線)の下流である終端ブロック、即ち出力側の末端に位置するブロックをクローン検出開始地点とし、上流、即ち入力側へ向かってクローンの検出を進める構成にしている。これは、一般的に、演算を行うブロックの数は出力側の数よりも入力側の数の方が多いことに着目し、データフロー数が少ない出力(下流)側からツリー構造を構築する方が、データフロー数が多い入力(上流)側からツリー構造を構築するよりも、効率的であるからである。しかし、もちろん、上流である入力側からツリー構造を構築してクローン検出を行う構成にしてもよい。
そして、正規化後にクローン検出を行う。

0019

本発明に係るクローン検出装置の実施形態では、ブロック線図を表現するツリーノードに相当するブロック同士を比較する。そうして比較したブロック同士が一致した場合、そのブロックに接続された(即ち、有向線で繋がっている)ブロックを次の比較対象に設定する。
ここで、本実施形態では、説明のため便宜的に、ツリー構造において各々のブロックの入力方向側に接続されたブロックを「子ブロック」、出力方向側に接続されたブロックを「親ブロック」として説明する。
また、本発明に係るクローン検出装置の実施形態では、ブロック線図を表現するツリー構造において、深さ優先探索を行う構成とした。これは、MATLAB/Simulinkモデルを有向グラフで表したときのツリー構造は、一般的に、幅よりも深さの方が広がりが大きい(即ち、ブロックの接続の深さが増大する)傾向にあることに着目して、深さを優先した方が幅を優先するよりも効率的に探索できるためである。しかし、もちろん、幅を優先して探索を行う構成にしてもよい。

0020

ここで、図21(b)及び(c)は、前述の幅優先探索とは別の探索方法である、本発明の実施形態に係るクローン検出装置における深さ優先探索及び幅優先探索の一例を説明するための図である。
同図の各ブロック上部に付された番号が探索の順序を示している。
本実施形態における深さ優先探索は、信号が出力される方面の末端に位置するブロック(出力側ブロック)を探索の先頭ブロックとして開始し、信号を入力する方面の末端に位置するブロック(入力側ブロック)へ向かって探索(クローン検出)を進める。
つまり、図21(b)のブロックAで示されるブロックは出力側の末端ブロックであり、有向線(太矢印線)は入出力信号を示す向きとは逆向きであり探索していく向き(即ち、クローン検出を進める方向)を示している。
深さ優先探索は、図21(b)に示すように、まず、信号のやり取りがある(有向線で繋がれている)ブロックを、階層を跨いで全て検出対象にして探索を進める。
例えば、開始ブロックAの次に検出対象になるブロックは有向線で繋がれたブロックBかブロックCである。仮に、開始ブロックAの次にブロックBを検出対象にした場合は、その次の検出対象は、当該ブロックBと有向線で繋がれたブロックDであり、同様にしてブロックG、ブロックHへと探索を進める。
また、仮に、開始ブロックAの次にブロックCを検出対象にした場合は、その次の検出対象は、当該ブロックCと有向線で繋がれたブロックE(又はブロックF)であり、同様にしてブロックG、ブロックIへと進む(ブロックCの次にブロックFが検出対象に選択された場合は、ブロックFからブロックIへと進む)。
本実施形態では、MATLAB/Simulinkモデルを有向グラフで表したときのツリー構造は、一般的に、幅よりも深さの方が広がりが大きい(即ち、ブロックの接続の深さが増大する)傾向にあることに着目して深さ優先探索を行う構成とした。これは、深さを優先した方が幅を優先するよりも効率的に探索できるためである。しかし、もちろん、図21(c)に示すような、信号が出力される方面の末端に位置するブロック(出力側ブロック)を探索の先頭ブロックとして開始し、信号を入力する方面の末端に位置するブロック(入力側ブロック)へ向かって幅を優先して探索を行う、幅優先探索の構成にしてもよい。

0021

ここで、各用語の定義について説明する。
(i)ブロック、及びブロック線図
図1は、本発明のクローン検出装置の本実施形態におけるMATLAB/Simulinkブロックのサンプル例を示した図である。
ブロック(又は演算ブロック)は、1つのまとまった演算単位を表す要素であり、しばしば矩形などを用いて図示され所定の機能を表し、各ブロック1つ1つに、類似した特性をもつブロックが存在する場合がある。例えば、図1において、入力に対して指定した定数変数、又は式を乗算することによって出力を生成するGainブロック(G)と、Number of inputsパラメータの値に応じてブロック入力の積または商を計算するProductブロック(P)とが、その演算機能のうえで似ている、即ち類似するブロック同士であると言える。
本実施形態では、この類似性をもつブロック同士を類似度判断基準テーブルとして、例えばHDなどに保存している。
ブロック線図とは、制御アルゴリズムをデータフロー(信号線、即ち有向線)と演算ブロックとの繋がりで表現したものであり、当該ブロック線図におけるデータフローには、分岐合流が存在する。一般的に、ブロック線図は階層化することで整理することが可能である。
(ii)クローン
MATLAB/Simulinkモデルにおけるクローンとは、プログラムのモデル内において、他の箇所にも同じブロックを組み合わせた同一又は類似する処理が存在し、見かけ上あるいは実質的に同じ構造をしている箇所を指す。
例えば、モデル内でコピーアンドペーストが行われるなどしてクローン化されたモデルが生成されると、当該モデルに不具合があった場合にコピーした部分(モデル)を全て修正しなければならない。その結果、作業量が増大し、また、修正漏れをしてしまうことが想定される。そのため、このようにクローン化されたモデルを早期に発見(即ち、クローン検出)して対策を行う必要がある。
(iii)クローン検出
クローン検出とは、ブロック図を対象にして、同一あるいは類似したブロックと信号線(データフロー)の接続関係によって作られた塊(この塊をクローンと呼ぶ)を見つけることである。

0022

(2)実施形態の詳細
図2は、本実施形態に係るクローン検出装置40のハードウェア的な構成例を示した図である。
本発明の実施形態に係るクローン検出装置40は、例えばパーソナルコンピュータやPDAなどであり、CPU100、RAM200、ROM300、通信I/F(インターフェースコントローラ400、ディスクコントローラ500及びHD(ハードディスク)510、ディスプレイコントローラ600及びディスプレイ601、タッチパネル602、SDカードコントローラ700及びSD701、キーボードコントローラ800及びキーボード801、マウスコントローラ900及びマウス901、などがシステムバス50によって接続された構成になっている。

0023

CPU100は、ROM300やHD510などに記憶されたプログラムを実行し、各種演算や上述した各部を制御する中央処理装置であり、本実施形態のクローン検出装置40の実施形態に係る、対象モデル取得機能101、比較モデル取得機能102、正規化機能103、比較機能104、クローン検出機能105、クローン判定機能106、比較基準設定機能107などを実現するための制御を行う。
RAM200は、CPU100に対してワーキングメモリを提供するランダムアクセスメモリであり、本実施形態において、クローン検出装置40にクローン検出機能を発揮させるプログラムは、当該プログラムを実行する際にこのRAM200上に読み込まれる。
また、本実施形態では、当該プログラムが実行されると、RAM200は、接続関係テーブル201、ループファイル202、対象モデルファイル203、比較モデルファイル204、source用キュー205、destination用キュー206、子src用キュー207、子dst用キュー208、クローン(クローンペアのリスト)ファイル209、表示用クローン(統合後クローン)ファイル210、srcindex211、dstindex212などの各ファイルやテーブルを保存(記憶)する記憶領域を提供する(記憶手段)。
ROM300は、一度書き込まれた情報を読み出すための読み出し専用記憶装置で、書き換える必要のない情報や、書き換えられては困る情報が記憶されている。
通信I/Fコントローラ400は、ネットワークに接続するための制御装置であり、端末装置(コンピュータなど)と周辺機器とのデータ伝送や、コンピュータ間の通信などを行う。例えば、クローン検出を実施するモデルファイルをネットワーク経由により取得する場合は、当該ファイルを取得する取得手段となる。

0024

ディスクコントローラ500は、HD(ハードディスク)510を制御する制御装置である。
HD510は、例えば、半導体装置などによって構成されており、各種のプログラムやデータを記憶している。
本実施形態では、クローン検出を行うための類似判断基準(類似要素情報)を登録したデータベースである類似判断基準表512などを記憶している。なお、類似判断基準表512については後述する。
また、本実施形態に係るクローン検出プログラム511は、このHD510が保存している。しかし、当該クローン検出プログラム511を、図示しない他の記憶媒体別途設けられたサーバなどに保存(格納)しておき、必要に応じて取り出せるように、即ち、当該記憶媒体や外部サーバからネットワーク経由によって取得(インストール)をすることができるように、当該クローン検出プログラム511が記憶された記憶媒体や外部サーバとクローン検出装置40とを接続可能に配設しておく構成にすることも可能である。また、ROM300がクローン検出プログラム511を保存する構成にしてもよい。

0025

ディスプレイ601は、例えば、液晶ディスプレイなどによって構成されており、ディスプレイコントローラ600により制御される。
また、タッチパネル602は、表示機能及び入力機能の2つの機能を備えており、コンピュータなどの外部から受けた画像情報を液晶ディスプレイなどのディスプレイ601で表示すると共に、操作者(クローン検出を実行するユーザ)がその画面に表示された絵やピクトグラムなどの点又は領域に手で触れたり、専用の「スタイラス」などと呼ばれるペンや、一般のペンで圧力を加える等により、触れられた画面位置の情報を感知して外部へ情報信号として出力する。外部装置が画面での位置情報に基づいて、操作者が望む適切な動作を行なう。
タッチパネル602を介することより、操作者は画面に表示された部分を押したり滑らせたりするなど、操作が直感的に理解しやすくなるため、扱いやすい装置を実現することが可能となる。
本実施形態では、上述したディスプレイ601及びタッチパネル602は、管理者がクローン検出装置40を操作するときの操作画面、起動画面、設定画面、及び結果画面などの各種画面を表示する。

0026

SDカードコントローラ700は、SD701を制御する制御装置である。
本実施形態では、クローン検出装置40は、クローン検出の対象にするファイル(ブロック線図により構成されているモデルファイル)として、前述のHD510や当該SD701、USBメモリ(図示しない)に保存されているファイル、あるいは、ネットワーク経由により取得するファイルなどを対象にしてクローン検出を実施することが可能である。
キーボードコントローラ800は、キーボード801を介して取得するユーザからの指示操作受け付けて制御する制御装置である、
マウスコントローラ900は、マウス901を介して取得するユーザからの指示操作を受け付けて制御する制御装置である。このマウス901を利用し、例えば、ユーザがクローン検出を希望するモデルの範囲を、画面上に表示された検出対象のモデルファイルの全体図などに対してマウス901でポイントアンドドラッグをして希望検出対象範囲囲うことで、クローン検出装置40は、クローン検出を実施する範囲を決定(設定)することができるように構成することもできる。

0027

(イ)モデルファイルの選択と正規化
本実施形態に係るクローン検出におけるモデルファイルの選択と正規化の好適な実施形態について詳細に説明する。
図3は、本実施形態に係るクローン検出装置40が行うクローン検出のパターンを説明するための図である。
本実施形態に係るクローン検出装置40は、クローンを検出する対象となるモデルファイルからクローンを検出するにあたり、一例として、以下3つのパターンによりクローンを検出することが可能である。
(1)パターン1(同一ファイル検索
1つのモデルファイルの中に、いくつ、どこに、どのようなクローンが存在しているかを検出する。
例えば、図3のパターン1に示したように、対象モデルファイルの中に、モデルAで表されるクローンが2箇所、モデルBで表されるクローンが2箇所存在していることを検出する。図3では、クローン検出をする場合に必要となる検出元である対象モデルファイル(左図)と、検出先である比較モデルファイル(右図)として、1つのファイル(対象モデルファイル)が複製された概念図が記載されている。
(2)パターン2(別ファイル内検索)
異なるモデルの中に、いくつ、どこに、どのようなクローンが存在しているかを検出する。
例えば、図3のパターン2に示したように、対象モデルファイル(左図)の中に存在しているモデルA、モデルB、及びモデルCで表される各モデルが、比較モデルファイル(右図)の中に、モデルAが2箇所、モデルBが2箇所、及びモデルCが2箇所、クローンとして存在していることを検出する。
(3)パターン3(基モデル検索
ユーザからの選択を受け付けて、クローンとして検出したいモデルAを基モデルとして取得し、この基モデル(モデルA)を比較モデルに設定することで、当該モデルAが任意のモデルファイル(対象モデルファイル)の中に、いくつ、どこに存在しているかを検出する。
例えば、図3のパターン3に示したように、基モデルに設定したモデルA(右図)が、対象モデルファイル(左図)の中に3箇所存在していることを検出する(モデルAのクローンを3箇所見つける)。

0028

図4は、本実施形態に係るクローン検出装置40においてクローン検出プログラム511を起動したときに、クローン検出装置40のディスプレイ601に表示される初期画面の一例を示した図である。
図4において、クローン検出設定ボタン1aはSimulinkモデルのクローン検出に際し設定を受け付けるボタンであり、品質診断設定ボタン1bはSimulinkモデルの品質診断に際する設定を受け付けるボタンである。ユーザがクローン検出設定ボタン1aを押下することで、クローン検出装置40は、クローン検出に際し設定画面(図5)を表示させることができる。設定及び設定画面の詳細については後述する。
クローン検出実行ボタン2はクローン検出装置40がクローン検出プログラム511を実行するためのボタンであり、品質診断実行ボタン4は品質診断プログラムを実行するためのボタンである。
本実施形態のディスプレイ601には、クローンの検出対象とするSimulinkモデルに対して、クローンの検出だけではなく、モデルの品質診断を実行できる場合の画面が表示されているが、クローン検出のみを目的とした画面の構成にすることも可能である。
また、ユーザから終了ボタン3の押下を受け付けた場合は、実行中のクローン検出プログラムを終了する。
このように、本実施形態に係るクローン検出装置40では、上述した初期画面を介してユーザ(クローン検出を行う実行者など)からの操作を受け付けることで、クローン検出を開始又は終了する。

0029

図5は、本実施形態に係るクローン検出装置40に表示されるクローン検出設定画面の一例を示した図であり、図6は、本実施形態のクローン検出装置40において、選択可能なクローン類似度設定項目の一例を示した図である。
ディスプレイ601には、最小ブロック設定数値表示エリア6、最小ブロック設定数値調整入力エリア7、Reset(リセット)ボタン8、類似度設定エリア9、クローン範囲設定エリア10、設定OKボタン11などの設定項目が表示されており、更に、類似度設定エリア9には、ブロックタイプ9a、ブロックの設定値9b、入力ポートの順序9c、及び入力ポートの数9dが、また、クローン範囲設定エリア10には、無視設定ボタン10a、類似設定ボタン10b、及び一致設定ボタン10cなどの設定項目がそれぞれ配置(表示)されている。
本実施形態に係るクローン検出装置40は、最小ブロック設定数値表示エリア6で、ユーザによりキーボード801(図2)を介して入力される数値を設定値として受け付けることで、クローンとする最小ブロック数を設定(確定)する。その場合の数値入力は、ユーザが目的に合わせて押下する、又は最小ブロック設定数値調整入力エリア7の各種ボタンにより選択される数値を受け付けることで設定することができる。また、Resetボタン8が押下されれば、入力されていた数値の取消を受け付けることができる。
あるいは、最小ブロック数という閾値ではなく、任意の数のブロック数を設定できる構成にすることもできるし、デフォルト値として最初に表示される値(例えば「10」、「20」、あるいは「50」など)を適宜設定しておく構成にすることもできる。

0030

また、本実施形態に係るクローン検出装置40は、類似度設定エリア9及びクローン範囲設定エリア10の各種項目の入力を受け付けることで、クローン検出に際する類似度の設定をユーザの目的や用途に合わせて多種多様に設定することができる。
本実施形態に係るクローン検出装置40が類似度を設定する場合は、例えば、ブロックタイプ9aでは、クローン検出の際に、図1に示したようなブロックのタイプに関わる類似度について、類似判断基準表512で各ブロックに予め定められた「類似ブロック」に該当するブロックにまで範囲を広げて検出対象として設定するか(類似設定ボタン10bを選択)、又は、「類似ブロック」に該当するブロックは検出対象に設定せず、一致するブロックのみを検出対象として設定するか(一致設定ボタン10cを選択)などを、ユーザからの各ボタン(10b又は10c)の押下を受け付けることで設定することができる。なお、本実施形態に係るクローン検出装置40は、この設定に基づきクローン検出を実行する。つまり、「類似ブロック」に該当するブロックを検出対象にする設定がなされた場合は、HD510に保存している類似判断基準表512で各ブロックに予め定められた「類似ブロック」に該当するブロックを、当該各ブロックの検出対象として(検出範囲を広げて)検出を行う。
また、本実施形態に係るクローン検出装置40の検出設定画面は、ブロックの設定値9bには「類似」と「一致」とを、入力ポートの順序9cには「無視」(無視設定ボタン10a)と「類似」と「一致」とを、また入力ポートの数9dには「無視」と「一致」とを、各々選択するための各ボタン(10a、10b、10c)が設けられており、ユーザからの押下を受け付けることでクローン検出の際の類似度の設定をユーザの目的や用途に合わせて多種多様に設定することができる。
なお、「ブロックタイプ」、「ブロックの設定値」、「入力ポートの順序」、及び「入力ポートの数」については後述する。

0031

また、本実施形態に係るクローン検出装置40では、検出設定画面を表示させて類似度に関する各設定を行う構成としたが、これに限られることはない。例えば、上述した各設定ボタンを用いて頻繁に設定される設定の組み合わせを、予め、パターン化し、更に名称などを付けて登録(記憶)しておき、そのパターン名(例えば、、乙、丙など)を選ぶことで、自動で類似設定がなされる構成にすることもできる。
また、本実施形態に係るクローン検出装置40では、当該設定をクローン検出を実施する度に設定する構成にしたが、例えば、所定の類似度設定をデフォルト値として保存しておくことで、この設定フローそのものを毎回実施する必要がないように構成することもできる。あるいは、予め類似度設定に係る設定がなされたモデルファイルを取得する構成としてもよい。
また、本実施形態に係るクローン検出装置40では、ユーザによるキーボード801からの手入力を受け付ける構成にしたが、例えば、ディスプレイ601をタッチパネル602にして入力を受け付ける構成や、図示しない音声入力装置からユーザの音声を受け付けて設定する構成にしてもよい。
これらの構成により、類似設定に要する時間を短縮することが可能となり、効率良くクローン検出を行うことができる。

0032

本発明の実施形態に係るクローン検出装置40では、クローン検出におけるクローンと判断する基準(即ち、ブロック同士を比較する際の比較項目)として、「ブロックのタイプ」、「ブロックの設定値」、「入力ポートの順序」、及び「入力ポートの数」の選択可能な4項目を設けた構成にしている。
「ブロックのタイプ」は、一部を図1に示したように数多く存在するブロックの1つ1つについて、1つのブロックが持つ機能に着目し、異なる他のブロックとの類似性を定める項目である。
本発明の実施形態に係るクローン検出装置40は、例えば、Gainブロック(G)の「類似ブロック」にProductブロック(P)を設定しておくことで、類似度の設定を行う時にその粒度、即ち類似判断の精度が「類似」である(即ち、設定画面:図5におけるブロックタイプ9aについて類似設定ボタン10bが選択されている)場合は、クローン検出を行う時に、検出対象ブロックがGainブロック(G)で比較対象ブロックがProductブロック(P)の場合も、検出対象ブロックがGainブロック(G)で比較対象ブロックもGainブロック(G)の場合と同様に、クローンファイル209に登録する。つまり、検出するブロックを「一致」のみではなく「類似」にまで広げて該当するブロックをクローン(即ち、最終的に検出されるクローンを構成する要素としてのブロック)として検出し、登録する。

0033

「ブロックの設定値」は、ブロックの1つ1つが有する演算の値について、1つのブロックが持つ演算の値に着目し、異なる他のブロックとの演算の値の類似性を定める項目である。例えば、定数を出力するブロックであるConstantブロックには、「10」や「1000」といった設定値が設定されている。
本発明の実施形態に係るクローン検出装置40では、例えば、上述した類似判断基準表512においてConstantブロックの設定値「10」と「1000」とを類似とする登録がなされており、且つ、類似度設定エリア9のブロックの設定値9bの設定がクローン範囲設定エリア10で類似設定ボタン10bに設定されている場合には、設定値「10」のConstantブロック(検出対象ブロック)と設定値「1000」のConstantブロック(比較対象ブロック)を類似ブロックであるとして判断し、クローンを構成するブロックとして検出することができる。

0034

「入力ポートの順序」は、ブロックが複数の入力信号を受信する場合で且つ当該入力信号が順序を有する場合に、当該順序に着目して類似性を設定するための項目である。
本発明の実施形態に係るクローン検出装置40は、例えば、検出対象ブロックと比較対象ブロックとが同じブロックであっても、Switchの真偽の違いにまで着目するか否かを、無視設定ボタン10a、類似設定ボタン10b、又は一致設定ボタン10cの何れかの選択を受け付けることで、当該順序に係る粒度(類似判断の精度)を定めることができる。
より詳しくは、MATLAB/Simulinkモデルにおいては、各ブロックは入力信号ごとに一意的な、且つ、意味を持つ番号を有している。例えば、上述したSwitchブロックには、2番目の入力が成り立った場合(即ち、「真」)に、1番目に入力していた信号が出力される。一方、成り立たない場合は、3番目に入力する入力信号が出力される、という決まりがある。
本実施形態に係るクローン検出装置40は、例えば、類似度設定エリア9の入力ポートの順序9cの設定が、クローン範囲設定エリア10で一致設定ボタン10cに設定されている状態で、検出対象ブロックと比較対象ブロックとが同じSwitchブロックの場合には、「真」に接続されたブロック同士を比較し、「」に接続されたブロック同士を比較する。

0035

「入力ポートの数」は、1つのブロックが複数の入力信号を受信する場合に、当該入力信号の数に着目して類似性を設定するための項目である。本発明の実施形態に係るクローン検出装置40は、例えば、1つのブロックに対する入力信号の数を無視して検索、登録するか(無視設定ボタン10aを選択する)、あるいは、1つのブロックに対する入力信号の数まで一致するブロックをクローンとして検索し、登録するか(一致設定ボタン10cを選択)を設定することができる。
本実施形態では、クローン検出装置40のHD510は、どこまでを「類似」と判断するかの範囲(類似性)について予め設定した類似判断基準表512を保存している構成(図2)としたが、都度設定を行う構成にすることもできる。
本実施形態では、このようにしてクローン検出の精度を設定することができるので、クローン検出を行うユーザなどの目的に合わせたクローン検出を効率よく実施することが可能である。

0036

次に、本発明の実施形態に係るクローン検出装置40は、クローン検出のための各種設定がある場合は当該設定の完了後、ユーザからクローン検出実行ボタン2(図4)の押下を受け付けると、図示しないファイル選択画面を表示する。ユーザがクローン検出を行うファイルを選択すると、本実施形態のクローン検出装置40は、対象ファイルとして選択されたファイルをクローン検出対象ファイルとして設定し、また、比較ファイルや基モデルがユーザから選択されている場合は、比較ファイル、基モデル(比較用)として設定する。
なお、本実施形態のクローン検出装置40は、複数のファイルを同時に検出対象ファイルに設定することが可能である

0037

図7は、本実施形態に係るサブシステムとその内部の関係を示す図である。
図7に示したように、サブシステムの中には、Inport(In1、In2、In3など)、Outport(Out1、Out2、Out3など)がブロックとブロックの間に入る。
本実施形態では、クローン検出装置40が正規化を行ってサブシステムを展開し、ブロックに挟まれた(接続された)Inport又はOutportを除いた接続関係(例えば、B−F、C−G、C−Hや、I−D、I−E、H−E)を、接続関係テーブル201としてRAM200に保存する(図2)。この接続関係テーブル201は、本実施形態のクローン検出装置40が実施するクローン検出において、任意のブロックに接続されているブロックを取得する際に使用する。なお、ブロックの取得については後述する。
更に、本実施形態のクローン検出装置40は、この正規化時に、ユニットディレイ(ユニットディレイとは、信号が1つのゲートを通過するたびに、出力は入力に対して所定の最小時間単位だけ遅れることを指す)などのループを展開し、ループファイル202としてRAM200に記憶(保存)する(図2)。このように、ループファイル202を記憶しておくことで、無意味な検出が繰り返されてしまうという不具合が発生しないようにすることができる。

0038

(ロ)クローンの検出
次に、本発明に係るクローン検出装置40の好適な実施形態について詳細に説明する。
本実施形態に係るクローン検出装置40は、ブロック同士の接続関係を有向線に基づいて辿りながら、且つ、類似度設定に基づくブロック同士の比較を逐次行い、比較結果が類似度設定にマッチするブロックを探し続けることによってクローン検出を行う。
本実施形態では、図5及び図6で説明したように「ブロックのタイプ」、「ブロックの値」、ポート順番がある場合は「入力ポートの順序」、又は「入力ポートの数」の4つの値のうちの、少なくともいずれか1つを判断基準にし、上記いずれか同士の比較を行うことで、対象同士が同一(あるいは、同一又は類似)か否か(即ち、クローンであるか違うか)を設定に従って判断している。この際、上述した判断基準を全て用いることなく、いずれか1つを基準とする構成にすることもできる。

0039

(ハ)クローンの登録
次に、本発明の実施形態に係るクローン検出装置40におけるクローンの登録の好適な実施形態について、図8図10を用いて説明する。
図8は、本発明の実施形態に係るブロック図の一例を示した図である。
図9は、本発明の実施形態に係るクローン検出装置40が行うクローン検出において、クローン候補となる、部分的なクローンである部分クローン(ブロックリスト)が1つ見つかった(有色で示されたブロック)状態を示した図である。
図10は、本発明の実施形態に係るクローン検出装置40が行うクローン検出において、クローン候補となるブロックリストが2つ見つかった(有色及び網掛で示されたブロック)状態を示した図である。
本実施形態に係るクローン検出装置40におけるクローンの登録は、検出対象ファイルと比較対象ファイル(図3:パターン1、パターン2、パターン3のうちの選択されたパターンにより比較対象ファイル又はモデルの種類は異なる)とが有するブロック各々を比較した結果、ブロック同士が、事前の設定とマッチ(一致)したときに必ず行う。
この際、検出対象のMATLAB/Simulinkモデルなどを有向グラフで表したときに、同じ深さ(一例として、鎖線Zで示した階層)で既にマッチしたブロックがある場合と、そうでない場合とで、RAM200のクローンファイル209に登録(保存)する方法は異なる。

0040

(同じ深さで、マッチしたブロックがない場合)
同じ深さ(Z)において、本実施形態に係るクローン検出装置40は、任意のブロック同士の比較を初めて行い、その結果、比較したブロック同士がマッチした場合は、当該マッチしたブロックをそのままクローンファイル209に登録する。更に比較と検出を続けて検出されたクローンが図9:A−B−D−Hに示されており、クローンファイル209には図10に示すように保存される。

0041

(同じ深さで、既にマッチしたブロックがある場合)
同じ深さ(Z)において、本実施形態に係るクローン検出装置40は、その深さで(Xの場合)で登録したブロック(例えば、ブロックB)とは別の任意のブロック(例えば、ブロックC)同士の比較(即ち、深さZにおける2回目以降の比較)を行い、その結果、比較したブロック同士がマッチした場合は、当該対象ブロック(ブロックC)の親ブロック(ブロックA)を先頭にしたブロックリストを新規に作成する。更に比較と検出を続け、当該対象ブロックの子ブロック(ブロックE及びブロックF)を比較してマッチしたブロックが存在した場合(ブロックEがマッチ)は、そのブロックを続けてクローンファイル209に登録する(図10:A−C−E)。

0042

(ニ)クローンの統合
次に、本発明の実施形態に係るクローン検出装置40が行うクローンの統合の好適な実施形態について詳細に説明する。
図11は、本発明の実施形態に係るクローン検出装置40が、検出された2つのブロックリスト(図10)を統合した状態を示した図である。
本発明の実施形態に係るクローン検出装置40が行うクローンの統合は、図10に示すような、分岐などを持たない部分クローンであるブロックリスト(A−B−D−HとA−C−E)を、図11に示すようなツリー構造にする処理であり、全ての部分クローン(ブロックリスト)のペアの中から2つを取り出して行う。部分クローン、即ちブロックリストのペア(以後、クローンのペアと呼ぶ)とは、対象モデルファイルと比較モデルファイルとの比較で検出されクローンファイル209に略同じに登録された、対象モデルファイル内及び比較モデルファイル内の部分クローンの2組の組み合わせを指す。また、このクローンの統合処理前は当該クローンのペアが複数存在している。
本実施形態では、クローン検出装置40は、任意のブロックリスト(クローン候補リスト)の、先頭ブロック(例えば、ブロックA)を基点にして部分クローン単体のブロックリスト同士(A−B−D−HとA−C−E)を繋ぎ合わせることで、同一の先頭ブロック(即ち、最初にマッチしたブロック)を有するブロックリストが重複して存在しないように再編する処理を行う。
これは同時に、クローン候補リストとしてRAM200のクローンファイル209に保存(記憶)されたクローンのペアのうち包含関係にあるクローンのペアについては、クラスタリングによって削除する処理である。より詳しくは、全てのクローンのペアの中から2つ(すなわち、合計4つの部分クローン)を取り出し、片方の部分クローン(対象モデルファイル内)の先頭ブロックが、他方の部分クローン(対象モデルファイル内)の途中に含まれていた場合に、先頭ブロックが途中に含まれていた部分クローンをインデックスとしてsrcindex211に登録する。また、同様の処理を比較モデルファイル内の部分クローン同士に対して行うと、完全に包含される部分クローンが存在することがわかる。この、完全に包含される部分クローンを削除する処理である。

0043

(ホ)クローン検出結果の表示
本発明の実施形態に係るクローン検出装置40におけるクローン検出結果の表示について詳細に説明する。
図12は、本発明の実施形態に係るクローン検出装置40における、クローン検出結果表示画面例を示した図である。
まず、本発明の実施形態に係るクローン検出装置40は、図12に示したように、ディスプレイ601の画面中央の、上側のエリア5001にクローンの検出元であるsrc、下側のエリア5002に検出されたクローンであるdstを表示する。また、本実施形態では、クローン検出装置40は、各クローンが複数のサブシステムにまたがっている場合は、クローンとして見つかったブロックを最も多く含むシステムの画像を表示する。
表示切替ボタン1000は、検出されたクローンのクラス(即ち、クローンの種類)を変更させて表示するためのボタンである。
本実施形態のクローン検出装置40は、クローンが有するブロックの数が大きいものの順にクローンのクラスを並べて表示する。
クラス切替ボタン2000は、クローンのクラスの並び順を変更するためのボタンである。
体表示切替ボタン3000は、検出したクローンを、縦に並べて表示するか、一覧で表示するかを切り替えるためのボタンである。
画像変更ボタン4000は、上下それぞれの中央に表示された画像を変更するためのボタンである。
本実施形態のクローン検出装置40は、エリア5001やエリア5002に表示した画像を、ユーザがマウス901を用いてクリックするのを受け付けるなどして、別ウインドウを用意して画像を拡大表示することができる。
また、本実施形態のクローン検出装置40は、ユーザがマウス901を用いてラベル6001やラベル6002をダブルクリックするのを受け付けることで、MATLAB/Simulinkで、各ラベルに表示されたシステムを開くことができる。この構成により、クローン検出装置40は見つかったクローンに対して編集作業などを行うことができる。
本実施形態のクローン検出装置40は、設定内容表示エリア7000に設定画面(図5)で設定した内容を表示する。なお、本実施形態では、クローン検出装置40が設定内容表示エリア7000に表示する内容は、最小ブロック数のみとする構成にしている。しかし、類似度の設定まで表示する構成にすることも勿論可能である。

0044

図13は、本発明の実施形態に係るクローン検出装置40における、クローン検出結果表示画面の一覧表示画面例を示した図である。
図13において、表示エリア5000内の「+」ボタンがユーザによりクリックされると、本実施形態のクローン検出装置40は、該当するエリアに表示していたクローンのクラスと同一のクラスのクローンを全て表示する。クラスエリアCに、該当するクローンのクラスの情報を表示する。クローンのクラスの情報とは、例えば、「見つかった数2」と表示された場合、同じクラスのクローンが2箇所に存在するという情報であり、「規模(最大)10」と表示された場合、クローンに含まれるブロックの数が10であるという情報を表す。
また、本実施形態のクローン検出装置40は、エリア1sにsrcの画像を表示する。 本実施形態のクローン検出装置40が、ユーザからの、エリア1s(又は、表示エリア5000)に表示されたsrc画像のクリックを受け付けると、クローン検出装置40は当該src画像を別のウインドウに拡大表示する。

0045

次に、ユーザによるエリア1s(又は表示エリア5000)のクリックを受け付けた場合に本実施形態のクローン検出装置40が表示するディスプレイ601を説明する。
図14は、本発明の実施形態に係るクローン検出装置40における、クローン検出結果の一覧表示が展開表示された画面例を示した図である。
本実施形態のクローン検出装置40は、エリア1sにsrcの画像、エリア1dにdstの画像を表示し、更に、それぞれの画像に対するユーザからのクリックを受け付けることなどで、別ウインドウに拡大表示することができる。
また、本実施形態のクローン検出装置40は、ユーザがマウス901を用いてラベル6003やラベル6004をダブルクリックするのを受け付けることで、MATLAB/Simulinkで、各ラベルに表示されたシステムを開くことができる。この構成により、本実施形態のクローン検出装置40は、モデル(即ち、ブロック線図)を編集することが可能になる。

0046

次に、以上のように構成された本発明の実施形態に係るクローン検出装置40が行う、クローン検出の一連の動作について詳細に説明する。
まず、本実施形態のクローン検出装置40におけるクローン検出の全体的な動作について説明する。
図15(a)は、本発明の実施形態に係るクローン検出装置40における、クローン検出の全体的な動作の流れを説明するフローチャートである。
本発明の実施形態に係るクローン検出装置40は、まず、クローンを検出する対象となるMATLAB/Simulinkモデルのファイル(クローンを見つけ出したいファイル)を、HD510、SD701、USB(不図示)、あるいはインターネットを介して他サーバ(不図示)から取得し、クローンの検出対象元ファイル(不図示)としてRAM200に保存する。
ここで、本実施形態では、異なる2つのファイルを当該検出対象元ファイルとして取得し、各々のファイルに対するクローン検出を同時に実施することが可能である。更には、上述した3つの検索パターン図3、パターン1:同一ファイル内検索、パターン2:別ファイル内検索、パターン3:基モデル検索)のうち、パターン2又はパターン3の場合は、該当する別ファイル(パターン2)又は基モデルファイル(パターン3)を、同じく、HD510、SD701、USB(不図示)、あるいはインターネットを介して他サーバ(不図示)から取得し、クローン検出比較元ファイル(不図示)としてRAM200に保存する(S100)。

0047

次に、本発明の実施形態に係るクローン検出装置40は、初期画面(図4)をディスプレイ601に表示する。そして、ユーザによるクローン検出設定ボタン1aの押下を受け付けると、同じくディスプレイ601に検出設定画面(図5)を表示し、ユーザによる上述したような各種設定の選択をキーボード801やマウス901、あるいはディスプレイ601を直接操作するタッチパネル602の操作を介して受け付けて、設定を確定する(S101)。
本発明の実施形態に係るクローン検出装置40は、ユーザによる設定OKボタン11の押下を受け付ける(S102;Y)と、設定に係る処理を終了し、再度、ディスプレイ601に初期画面を表示する。ユーザによる設定OKボタン11の押下が確認されない場合(S102;N)は、各種設定が確定していないと判断して検出設定画面を表示し続ける。
各種設定を終了すると、次に、本発明の実施形態に係るクローン検出装置40は、RAM200に保存したクローン検出対象元ファイルに対する正規化処理を行い、この時、上述した検索パターンがパターン2又はパターン3である場合は、同時に、クローン検出比較元ファイルに対する正規化処理を行う(S200)。
正規化処理の詳細については後述する。
また、本実施形態では、上記の流れとしたが、モデルファイルを受け付ける(取得する)(S100)、各種設定を受け付ける(S101及びS102)、正規化処理を行う(S200)は、この順番に限られることはない。例えば、各種設定を受け付けてからモデルファイルを取得する構成や、予め正規化処理されたモデルファイルを取得する構成や、モデルファイルを受け付けて正規化処理を行ってから、各種設定を受け付ける構成にすることもできる。あるいは、各種設定をデフォルト値として設定(登録保存)しておき、各種設定そのものを省略する構成にすることもでき、ディスプレイ601は各フローの順番に適するように初期画面を構成する(必要なボタンを追加配置するなど)ことができる。

0048

正規化処理を終了すると、次に、本発明の実施形態に係るクローン検出装置40は、クローン検出処理を実施し(S300)、クローンが検出された場合は随時クローン登録処理を行い(S400)、その後、クローンの統合処理を行って検出されたクローンを保存し(S500)、ユーザの目的に応じて出力を行う。クローンの統合処理を終了すると、又は、クローンが1つも検出されなかった場合は、本発明の実施形態に係るクローン検出装置40はクローン検出に係る一連の処理を終了する。

0049

(イ)正規化処理
本実施形態のクローン検出装置40における、モデルファイルの選択及び正規化の動作について説明する。なお、本実施形態では、検索パターンがパターン1(同一ファイル内検索)として説明を進める。
図15(b)は、本発明の実施形態に係るクローン検出装置40における、正規化処理(S200)の動作を説明するフローチャートである。
本発明の実施形態に係るクローン検出装置40は、初期画面(図4)で表示したクローン検出実行ボタン2がユーザにより押下されると、クローンの検出対象元ファイル(MATLAB/Simulinkモデルのブロック線図)全体を、ブロックが複数個集まり木のように連なった構造であるツリー構造にする正規化処理を行う。この時、上述したように、データフローの出力側の末端ブロックをクローン検出開始地点とし、入力側へ向かってクローンの検出を進めることができるツリー構造の構成にしている。こうして得られた正規化後のファイルを、対象モデルファイル203としてRAM200に保存する(S205)。また、本実施形態では、比較用としてRAM200に保存する比較モデルファイル204は、対象モデルファイル203を複製したファイルを利用する。

0050

仮に、検索パターンがパターン2やパターン3である場合は、本発明の実施形態に係るクローン検出装置40は、RAM200に保存した(S100)クローン検出比較元ファイル(不図示)を正規化処理し、処理したファイルを比較モデルファイル204としてRAM200に保存する。

0051

更に、本発明の実施形態に係るクローン検出装置40は、クローンの検出対象元ファイル内にサブシステムが存在するか否かを確認し(S201)、サブシステムが存在する場合(S201;Y)はサブシステムを展開する(S202)。サブシステムを展開した後又はサブシステムが存在しない場合(S201;N)は、本実施形態のクローン検出装置40は、クローンの検出対象元ファイルにループが存在するか否かを確認し(S203)、ループが存在する場合(S203;Y)、上述したように1度出現したブロックが2度出現しないように抑制するための処理であるループの展開を行う(S204)。クローン検出装置40は、このループ展開を行うことでユニットディレイなどのループをループファイル202としてRAM200に記憶(保存)する(S205)。この構成により、クローン検出において、ループ処理の箇所で堂々巡りをして検出が終わらないという不具合が発生することを未然に回避することができる。
また、サブシステムを展開して得られる接続関係を接続関係テーブル201として、同時にRAM200に保存(S205)し、正規化処理を終了する。
ここで、本実施形態では、サブシステムの展開後にループ展開を行う構成としたが、これに限られることはなく、ループの展開後にサブシステムを展開するように構成することもできる。

0052

(ロ)クローンの検出
次に、本実施形態のクローン検出装置40における、クローンの検出の実施形態の動作について詳細に説明する。
図16及び図17は、本実施形態のクローン検出装置40における、クローン検出の動作を示すフローチャートである。
まず、本実施形態のクローン検出装置40が行うクローン検出のアルゴリズムを以下に示す。ここで付された番号は、当該クローン検出アルゴリズム内で適用される順序を示している。
(i)クローン検出アルゴリズム
1、与えられたモデルの正規化を行い、サブシステムの展開、ループの展開を行う。
2、与えられたモデルから、全てのブロックを取得しキューに入れる。このキューをsource用キューとし、3へ。
3、source用キューの中から1つブロックを取りだし、srcとする。4へ。もし、source用キューの中が空ならば、12へ。(ブロックが1つもない場合)
4、destination用キューとして、与えられたモデルから、全てのブロックを取得しキューに入れる。5へ。2と同じ操作をdestination用キューに対して行う。
5、destination用キューの中から1つブロックを取りだし、dstとする。destination用キューの中が空ならば、3へ。そうでなければ、6へ。
6、srcとdstを比較し、マッチしたら7へ(階層を1つ下がる)。マッチしなかったら5へ。
7、srcの子ブロックを全て取得し、src用キューを新規に作成し、入れる。
8、dstの子ブロックを全て取得し、dst用キューを新規に作成し、入れる。
9、7で作成したsrc用キューが空でなければ、src用キューから、ブロックを1つ取りだし、srcchildとし、10へ。src用キューが空ならば、階層を1つ上がり、階層が一番上であれば、3へ。そうでなければ、9へ。
10、8で作成したdst用キューが空でなければ、dst用キューから、ブロックを1つ取りだし、dstchildとし、11へ。一方、dst用キューが空ならば、階層を1つ上がり、階層が一番上であれば、3へ。そうでなければ、8へ。
11、srcchildとdstchildを比較し、マッチしたら、srcchildをsrcとし、dstchildをdstとして、7へ。
マッチしなかったら、10へ。
12、終了。

0053

次に、本実施形態のクローン検出装置40における上述したアルゴリズムに基づく、クローン検出処理(S300)の動作について詳細に説明する。
本発明の実施形態に係るクローン検出装置40は、対象モデルファイル203が有する全てのブロックを取得し、キュー(queue、即ち、待ち行列)に入れる(S301)。本実施形態では、このキューをsource(検出元)用キュー205としてRAM200に保存する。
次に、クローン検出装置40は、source用キュー205が空か否かを判断する(S302)。source用キュー205の中が空の場合、即ち、ブロックが1つもない場合(S302;Y)は、クローン検出処理を終了する。
一方、source用キュー205の中が空ではない場合、即ち、ブロックが1つ以上存在している場合(S302;N)は、クローン検出装置40は、source用キューの中から1つのブロックを取りだし、srcとする(S303)。
次に、クローン検出装置40は、比較モデルファイル204から全てのブロックを取得し、destination(検出先)用キューに保存する(S304)。つまり、S301と同じ処理をdestination用キュー206に対して行う。
ここで、クローン検出装置40は、destination用キュー206の中が空か否かを判断する(S305)。この時、destination用キュー206の中が空の場合、即ち、ブロックが1つもない場合(S305;Y)は、S302に戻る。
一方、destination用キュー206の中が空ではない場合、即ち、ブロックが1つ以上存在している場合(S305;N)は、クローン検出装置40はdestination用キュー206から1つのブロックを取りだし、dstとする(S306)。

0054

次に、クローン検出装置40は、各々取り出したsrcとdstとを比較(S307)、各々取り出したsrcとdstとが、設定画面(図5)で設定した設定とマッチ(一致)したか否かを判断する(S308)。比較結果が設定内容と一致した場合(S308;Y)は、当該ブロックを登録する処理であるクローン登録処理を行う(S400)。クローン登録処理(S400)については後述する。
一方、比較した結果、各々取り出したsrcとdstとが設定とマッチ(一致)しなかった場合(S308;N)、クローン検出装置40はS305へ戻り処理を続ける。

0055

次に、クローン検出装置40は、srcの子ブロックを全て取得し、RAM200に子src用キュー207を新規作成し、当該子src用キュー207にsrcの子ブロックを全て入れる(S309)。具体的には、例えば図8(又は図9)で示したようにsrcのブロックAには2つの子ブロック(ブロックB及びブロックC)が存在するので、当該ブロックB及びブロックCを子srcキューに入れる。
ここで、クローン検出装置40がブロック同士の比較を実施している階層が1つ下がったことがわかる。
また、同様に、dstの子ブロックを全て取得し、RAM200に子dst用キュー208を新規作成し、dstの同一階層且つ有向線で繋がっているブロックである子ブロックを当該dst用キュー208に全て入れる(S310)。具体的には、本実施形態では、例えば図8(又は図9)で示したようにdstのブロックAには2つの子ブロック(ブロックB及びブロックC)が存在するので、当該ブロックB及びブロックCをdstキュー208に入れる。

0056

次に、クローン検出装置40は、子src用キュー207が空か否かを判断する(S311)。判断の結果、子src用キュー207が空の場合、即ち、ブロックが1つもない場合(S311;Y)は、クローン検出装置40は、それまでブロック同士の比較を実施していた(クローン検出を行っていた)階層から1つ上の階層へ上がる(S312)。そして、上がった階層が一番上の階層(即ち、クローン検出を開始した出力側の末端ブロックか)か否かを判断し(S313)、当該上がった階層が一番上の階層であった場合(S313;Y)は、S302へ戻って処理を続ける。
一方、当該階層が一番上の階層ではなかった場合(S313;N)、クローン検出装置40は、その階層でのdstの同一階層かつ有向線で繋がっている子ブロックを全て取得し、子dst用キュー208に入れる(S314)。
子dst用キュー208に入れた(S314)後か、又は、S311の判断の結果、子src用キュー207が空ではない(即ち、ブロックが1以上存在していた)場合(S311;N)は、クローン検出装置40は、子src用キュー207から1つのブロックを取り出してsrcchildとする(S315)。

0057

続いて、クローン検出装置40は、同一階層で作成した子dst用キュー208が空か否かを判断する(S316)。判断の結果、同一階層で作成した子dst用キューが空の場合、即ち、ブロックが1つもない場合(S316;Y)は、当該階層の1つ上の階層が一番上の階層か否かを判断する(S317)。判断の結果、当該階層の1つ上の階層が一番上の階層ではない場合(S317;N)は、S310へ戻り処理を続ける。
一方、当該階層の1つ上の階層が一番上の階層だった場合(S317;Y)はS302へ戻って処理を続ける。

0058

また、一方、S316の判断の結果、子dst用キュー208が空ではない場合、即ち、ブロックが1つ以上存在している場合(S316;N)は、クローン検出装置40は、子dst用キュー208から1つのブロックを取り出してdstchildとする(S318)。そして、クローン検出装置40は、S315で子src用キュー207から取り出したsrcchildと、S318で子dst用キュー208から取り出したdstchildを比較し(S319)、設定画面(図5)で設定した内容と一致するかを判断する(S320)。比較の結果、srcchildとdstchildとがマッチしなかった場合(S320;N)は、S316へ戻り処理を続ける。
一方、クローン検出装置40は、比較の結果、srcchildとdstchildとが設定内容とマッチした場合(S320;Y)は、srcchildをsrcに、且つ、dstchildをdstにして(S321)、S400へ戻って登録処理を行う。その後、S309からの一連の処理を繰り返す。
具体的には、例えば図8図9)では、クローン検出装置40は子srcキュー207から子ブロックであるブロックBを取り出し、且つ、子dstキュー208から子ブロックであるブロックBを取り出し(S407)、取り出したsrcのブロックBとdstのブロックBとを比較し、設定内容と一致(マッチ)するかを判断する。この場合、子ブロック同士が共にブロックBなので、比較の結果はマッチするので、クローン検出装置40は、srcのブロックBとdstのブロックBとをクローンファイル209に登録する処理を行う。更に、クローン検出装置40は、srcの子ブロックであるブロックBに更に、例えば、srcの子ブロックであるブロックDが存在するので、当該ブロックDを子src用キュー207に入れ、dstの子ブロックであるブロックDを子dst用キュー208に入れて、srcのブロックDとdstのブロックDとを比較する。この場合は、ブロックD同士でマッチするので、登録処理(S400)に進む。一方、判断の結果、srcの子ブロックであるブロックBに、他に子ブロックが存在しない場合は、src及びdst共に階層を1つ上がって、その階層で、同一階層且つ有向線で繋がっているブロックである子ブロックを全て取得し(S310)、そして、その階層(上がった階層)でS311以降の処理を行う。

0059

(ハ)クローンの登録
次に、本発明の実施形態に係るクローン検出装置40における、クローンの登録の動作について詳細に説明する。
まず、本発明のクローン検出装置40に係る実施形態における、クローンの登録のアルゴリズムを以下に示す。ここで付された番号は、当該クローン登録アルゴリズム内で適用される順序を示し、A〜Hは図8図9、及び図10のブロックA〜ブロックHに対応している。
(ii)クローン登録アルゴリズム
1,srcのブロックAとdstのブロックAを比較してマッチしたので、それぞれを登録する。
2、srcの子ブロックであるブロックB及びCをsrcキューに入れる。
3、dstの子ブロックであるブロックB及びCをdstキューに入れる。
4、srcキューからブロックBを取りだし、dstキューからブロックBを取りだす。
5、srcのブロックBとdstのブロックBを比較しマッチしたので、登録する。
6、srcの子ブロックであるブロックDをsrcキューに入れる。
7,dstの子ブロックであるブロックDをdstキューに入れる。
8、srcのブロックDとdstのブロックDを比較しマッチしたので、登録する。
9、srcの子ブロックであるブロックHをsrcキューに入れる。
10、dstの子ブロックであるブロックG及びブロックHをdstキューに入れる。
11、srcのブロックHとdstのブロックGを比較しマッチしなかったので、登録はしない。
12、srcのブロックHとdstのブロックHを比較しマッチしたので、登録する。
13、srcの子ブロックはないので、src、dst共に1つ階層を上がる。(Dの階層へ)
14、src、dstの他の子ブロックはないので、src、dst共に1つ階層を上がる。(Bの階層へ)
15、src、dstの他の子ブロックはないので、src、dst共に1つ階層を上がる。(Aの階層へ)この時点で図9のようにクローンが見つかる。
16、srcのブロックC、dstのブロックCを比較しマッチしたので、登録する。ここで、深さ(鎖線Z)では、すでに登録されているので、親ブロックであるブロックAを先頭にしたリストを新規に作成する(図10)。この時登録されているブロックリストは、A−B−D−Hと、A−Cの2種類になる。以下他のブロックに対して同様に処理を進めると、最終的に図10に示したブロックリストが記憶される。

0060

次に、本発明の実施形態に係るクローン検出装置40における、上述したアルゴリズムに基づくクローン登録処理(S400)の動作について詳細に説明する。
図18は、本発明の実施形態に係るクローン検出装置40における、クローン登録処理の動作を説明するフローチャートである。
このクローン登録処理は、本発明の実施形態に係るクローン検出装置40が、ブロック同士を比較した結果、当該ブロック同士がマッチした場合に必ず行う処理であり、例えば、上述したS308におけるsrcとdstとを比較した結果、図9に示したようにsrcのブロックAとdstのブロックAとがマッチすると、クローン検出装置40は、それぞれをRAM200のクローンファイル209に登録(記憶)する処理である。

0061

(クローン登録処理)
本発明の実施形態に係るクローン検出装置40が行うクローン登録処理は、まず、現階層(即ち、マッチするブロック同士が検出された階層)で既に他のブロックがクローンファイル209に登録されているか否かを判断する(S401)。判断の結果、既に他のブロック(ブロックリスト)がクローンファイル209に登録されている場合(S401;Y)、本発明の実施形態に係るクローン検出装置40は、この時に登録対象となっているブロック(src及びdst)の親ブロックであるブロックを先頭にして、新規リストを作成し、当該新規リストをクローンファイル209に保存(登録)する(S402)。
一方、判断の結果、既に他のブロックがクローンファイル209に登録されていない場合(S401;N)、本発明の実施形態に係るクローン検出装置40は、一致したブロック(src及びdst)をクローンファイル209に保存する(S403)。
本発明の実施形態に係るクローン検出装置40は、登録したブロックリストが有するブロック数が、設定画面(図5)で設定した「クローンと判定する最小ブロック数」を満たすか否かを判断する(S404)。設定した最小ブロックを満たす場合(S404;Y)は、本発明の実施形態に係るクローン検出装置40は、当該ブロックリストを表示用クローンファイル210に保存し(S405)、一方、設定した最小ブロックを満たさない場合(S404;N)は、登録せずに、クローン登録処理を終了する。
具体的には、例えば、図8図9)では、ブロックB及びCが存在する深さ(この深さとは、図8図9において鎖線Zで囲まれた階層のことである)では、既にブロックBがクローンとしてリスト登録されている。そこで、同じ親ブロックAを先頭にした新しいリストを新規に作成する。
この時、RAM200のクローンファイル209に登録されているブロックリストは、A→B→D→Hと、A→Cの2種類になる。以下、ブロックE、ブロックF、及びブロックJについても同様の処理を行うと、最終的に図10のようなブロックリストがRAM200に記憶される。

0062

(ニ)クローンの統合
次に、本発明の本実施形態に係るクローン検出装置40における、クローンの統合の動作について説明する。
まず、本発明の実施形態に係るクローン検出装置40における、クローンの統合のアルゴリズムを以下に示す。ここで付された番号は、当該クローン統合アルゴリズム内で適用される順序を示している。
(iii)クローン統合アルゴリズム
1、見つかったクローンのペアの両方(srcとdst)のリストに対して、先頭のブロックが含まれているクローンを探す。先頭のブロックが含まれていたら、そのインデックスをsrcはsrcindex、dstはdstindexに入れ、2へ。
一方、先頭のブロックが含まれていなかったら、残りのクローンのペアのリストに対して同じことを行う。残りのクローンのリストがなければ、4へ。
2、srcindexとdstindexが同じかチェックする。同じであれば、3へ。同じでなければ、1へ。
3、dstの全てのブロックが、全て含まれているかを調べる。全て含まれていたら、追加する必要がないので、1へ。1つでも含まれていなかったら、含まれていないブロックを追加し、1へ。
4、終了。

0063

次に、本発明の実施形態に係るクローン検出装置40における、上述したアルゴリズムに基づくクローン統合処理(S500)の動作について説明する。
図19は、本発明の本実施形態に係るクローン検出装置40における、クローン統合処理の動作を説明するフローチャートである。
本発明の実施形態に係るクローン検出装置40は、まず、クローンファイル209にクローンのペアのリストが保存されているか否かを判断する(S501)。
判断の結果、クローンのペアのリストが登録されていなかった場合(S501;N)は、クローン統合処理を終了する。
一方、本発明の実施形態に係るクローン検出装置40は、クローンのペアのリストが登録されていた場合(S501;Y)は、検出されたクローンのペアのリスト(クローンファイル209に保存されているブロックリスト)1つ1つに対して、最初にマッチしたブロックである先頭のブロック(図8図11における、ブロックA)が含まれているか否かを判断する(S502)。この先頭ブロックが含まれているかの判断処理は、srcとdstの両方のクローンのペアに対して行う。判断の結果、先頭ブロックが含まれていなかった場合(S502;N)はS501へ戻り、クローンファイル209に対して先頭ブロックが含まれるクローンのペアのリストを探す処理を続ける。一方、判断の結果、先頭ブロックが含まれていた場合(S502;Y)は、当該リストの先頭ブロックから数えて2番目のブロックが異なるブロックであるか否かを判断する(S503)。これは、同じsrcに対して異なるdstが複数見つかる場合があるためである。
本発明の実施形態に係るクローン検出装置40は、当該リストの先頭ブロックから数えて2番目のブロックが異なるブロックではないと判断した場合、即ち、srcのTop(先頭ブロック)が同じだが、異なるdstのTopであるリストであった場合(S503;N)、当該検出されたクローンリストを除外し(S504)、S501へ戻る。
一方、当該リストの先頭ブロックから数えて2番目のブロックが異なるブロックであると判断した場合(S503;Y)、本発明の実施形態に係るクローン検出装置40は、当該クローンのペアのリストのインデックスを、srcはsrcindex211、dstはdstindex212に登録し(S505)、srcindex211とdstindex212とを比較して一致するか否かを判断する(S506)。
本発明の実施形態に係るクローン検出装置40は、判断の結果、一致していなかった場合(S506;N)はS501へ戻る。一致していた場合(S506;Y)は、クローンのペアのdstの方の全てのブロックが、全て含まれているかを判断し(S507)、全て含まれていた場合(S507;Y)はS501へ戻る。一方、dstのindex内に1つでも含まれていないブロックがあれば(S507;N)、当該含まれていないブロックを追加して保存し(S508)、追加し終えた統合リストをRAM200に保存する(S509)。

0064

以上説明したように、本実施形態のクローン検出装置40によれば、MATLAB/Simulinkモデルなどのブロック線図のクローン検出を機械的且つ自動的に行うことが可能になり、その結果、目視に比べて短時間で、また、漏れなくクローンを検出することができる。
更に、検出されたクローンに対してクローンを統合、即ち、共通部分部品化・再利用をすることで、MATLAB/Simulinkモデルなどのメンテナンスやテストに関わる費用を低減させることができ、保守性や効率性を向上させることができる。
また、「一致」した構造だけではなく「類似」した構造をもクローンとして検出することができる。このように、MATLAB/Simulinkモデルなどにおける、完全一致する構造だけではなく似ている構造も検出できることが可能になり、その結果、該当する部分の共通化及び/又は部品化による改善範囲が広がり、保守性や効率性を向上させることができる。

0065

また、クローンは、大きな塊(つまり、同じ構造になっている箇所が、複数のブロックにわたって構成されている)であるほど、当該クローンを含むプログラムへの上述したような悪影響も改善時の効果も大きい。
そこで、クローンであると判定(判断)をするための最小ブロック数を、予め、閾値として指定(設定)することができる構成にしたので、例えば、クローン検出の実施者(ユーザ)が目的にあわせて当該閾値を調整することが可能になる。例えば、優先度の高いもの、つまり、プログラムに対してより高い確率で悪影響を及ぼす可能性のあるクローンの箇所から効率よく検出し、プログラムの改善を進めていくことが可能になり、その結果、保守性や効率性を向上させることができる。また、この閾値を設定する仕方としては、ユーザが閾値を直接入力するように構成してもよいし、あるいは、予め数パターン設定された閾値の中からユーザが選択できるように構成してもよい。

0066

以上、本発明のクローン検出装置に係る1実施形態について説明したが、本発明は説明した実施形態に限定されるものではなく、各請求項に記載した範囲において各種の変形を行うことが可能である。
また、特定のブロック(例えば、ユーザを介して指定された特定のブロック・タイプ、あるいはブロックの値)を含んだクローンを検出できるように設定することができる構成にすることができる。つまり、「Switch」を含むクローンのみが検出されるように初期設定ができる構成とすることができる。このような構成により、開発の目的や用途に合わせた効率の良いクローン検出を実現することができる。
また、本発明のクローン検出装置に係るクローン検出機能を、例えば、新旧モデルファイルの差分検出といった他の用途に使用することも考えられる。これは、クローン検出を実施した結果、検出されなかった方のブロックを報告する構成にすることで可能になる。
また、例えば、説明した実施形態では、深さ優先探索によるクローン検出としたが、幅優先探索によるクローン検出にしてもよい。

0067

また、現状ではモデルの品質に問題がない場合であっても、本願発明のクローン検出を定期的に行うことで品質が劣化した時にすぐに気付くことができ、開発に悪影響を及ぼす前に対策をとることができる。
更には、MATLAB/Simulinkモデルなどのソフトフェア品質診断を視覚的に行うためのツールとして利用することもできる。例えば、本願発明のクローン検出技術を用いてMATLAB/Simulinkモデルなどに対してクローン検出を行った結果をもとに得点化を行う。そして、例えばスコープ品質特性といった2つの評価軸分類及び分析し、定量化したものを、例えばレーダチャート散布図などを用いて視覚的な「結果」に落とし込む。そうすることで、ソフトフェア品質の可視化を行うことができる。この可視化により、マクロ的な品質判断と品質を妨げる要素、即ち、ファイルや関数などを特定することが可能になる。

0068

また、本実施形態では、MATLAB/Simulinkモデルを例にとり説明をしたが、これに限られるものではない。例えば、LabVIEW、MapleSim、そしてScilab(登録商標)/Scicosなど様々な製品によるモデルへの本発明のクローン検出装置、クローン検出プログラム、及びクローン検出プログラムを記録した記録媒体の適用が可能になり得る。

0069

1aクローン検出設定ボタン
1b品質診断設定ボタン
1s src画像表示エリア
1ddst画像表示エリア
2 クローン検出実行ボタン
3 終了ボタン
4 品質診断実行ボタン
5ディスプレイ
6最小ブロック設定数値表示エリア
7 最小ブロック設定数値調整入力エリア
8 Resetボタン
9類似度設定エリア
9aブロックタイプ
9bブロックの設定値
9c入力ポートの順序
9d 入力ポートの数
10クローン範囲設定エリア
10a 無視設定ボタン
10b 類似設定ボタン
10c 一致設定ボタン
11 設定OKボタン
40クローン検出装置
50システムバス
100 CPU
200 RAM
201接続関係テーブル
202ループファイル
203対象モデルファイル
204比較モデルファイル
205 sourse用キュー
206 destination用キュー
207 子src用キュー
208 子dst用キュー
209クローンファイル
210表示用クローンファイル
211 srcindex
212 dstindex
300 ROM
400通信I/Fコントローラ
500ディスクコントローラ
510 HD
511 クローン検出プログラム
512類似判定基準
600ディスプレイコントローラ
601 ディスプレイ
602タッチパネル
700SDカードコントローラ
701 SD
800キーボードコントローラ
801キーボード
900マウスコントローラ
901マウス
1000表示切替ボタン
2000クラス切替ボタン
3000 全体表示切替ボタン
4000画像変更ボタン
5000 表示エリア
5001 エリア
5002 エリア
6001 ラベル
6002 ラベル
6003 ラベル
6004 ラベル
7000設定内容表示エリア
C クラス表示エリア

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

ページトップへ

技術視点だけで見ていませんか?

この技術の活用可能性がある分野

分野別動向を把握したい方- 事業化視点で見る -

(分野番号表示ON)※整理標準化データをもとに当社作成

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

関連する公募課題一覧

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ