(57)【要約】【課題】モデルベース開発において、デッドコードが生成されないように自動でモデルを修正する自動修正装置を提供する。【解決手段】モデルベース開発におけるモデルの自動修正装置であって、デッドコードを生成するモデルの記述パターンであるデッドコードパターンに基づいて未修正の修正前モデルからデッドコードを生成する箇所を検出するデッドコード検出処理部と、デッドコード検出処理部で検出されたデッドコードを生成する箇所を修正して修正後モデルを生成するモデル自動修正処理部とを備え、モデルは、信号処理を行う複数のブロックと、ブロック間を繋ぐ結線とを有し、モデル自動修正処理部は、修正前モデルからデッドコードを生成する箇所のブロックを削除し、削除によって発生した断線箇所のブロック間を再結線することで修正後モデルを生成する。【選択図】図１
2018163432.tif 000002
【特許請求の範囲】
【請求項１】
モデルベース開発におけるモデルの自動修正装置であって、
デッドコードを生成するモデルの記述パターンであるデッドコードパターンに基づいて未修正の修正前モデルからデッドコードを生成する箇所を検出するデッドコード検出処理部と、
前記デッドコード検出処理部で検出された前記デッドコードを生成する箇所を修正して修正後モデルを生成するモデル自動修正処理部と、を備え、
前記モデルは、信号処理を行う複数のブロックと、ブロック間を繋ぐ結線とを有し、
前記モデル自動修正処理部は、
前記修正前モデルから前記デッドコードを生成する箇所の前記ブロックを削除し、削除によって発生した断線箇所のブロック間を再結線することで前記修正後モデルを生成する、自動修正装置。
【請求項２】
前記デッドコードパターンは、
出力範囲制限処理の記述パターンを含み、入力が固定値であり、該入力が下限値と上限値の範囲内にある条件を満たすパターンである、請求項１記載の自動修正装置。
【請求項３】
前記デッドコードパターンは、
判断条件となる制御入力に基づいて２つの入力の一方からの入力値を出力値とする判断処理の記述パターンを含み、前記制御入力値が固定値であり、前記２つの入力のうち、条件が成立しない側には前記モデルの外部からデータが入力がない条件を満たすパターンである、請求項１または請求項２記載の自動修正装置。
【請求項４】
前記モデル自動修正処理部は、
前記修正後モデル内に、修正内容を示すコメントを出力し、履歴を残す、請求項１記載の自動修正装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はモデルベース開発におけるモデルの自動修正装置に関する。
【背景技術】
【０００２】
近年、プログラム開発においては、開発者がそのプログラムのソースコードを記述するのではなく、作成が容易で視覚的に表現される「モデル」を用いてプログラムを開発する「モデルベース開発」の手法が採られている。開発者は、このモデルに対応したプログラム開発環境を有するワークステーション、パーソナルコンピュータ等を使用することでソースコードを生成する。モデルに基づいてソースコードを生成する機能を有するプログラムはコード生成ツールと呼称され、モデル開発環境に組み込まれている。
【０００３】
モデルベース開発においては、開発過程でモデルおよびソースコードが、プログラムの製品としてどのような品質を有しているかを、所定の基準に基づいて評価する品質評価を行う。この品質評価の基準としては、例えばカバレッジが挙げられる。
【０００４】
カバレッジとは、モデルおよびソースコードの条件分岐における複数の分岐先のうち、実行されないもの（未到達）がどの程度あるかを示す指標である。モデルおよびソースコードのカバレッジは、テスト入力パターンを用いて、モデルおよびソースの実行シミュレーションを行い、実行された分岐先と実行されなかった分岐先とを調査することで特定する。カバレッジの特定のための処理をカバレッジテストと呼称する。カバレッジテストの結果、実行されない分岐先を有する条件分岐は、実行されないコード、すなわちデッドコードとして抽出される。
【０００５】
特許文献１には、モデルから生成されたソースコードに対するカバレッジ調査の結果、実行されないコード（デッドコード）を抽出し、デッドコードとなる箇所のモデルとソースコードの対応関係をディスプレイに表示する技術が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−３０１５６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１では、デッドコードとなる箇所のモデルの修正を開発者が手動で行うこととなるため時間を要する。また、ヒューマンエラーが発生するリスクもある。
【０００８】
また、デッドコードとしては、例えば、絶対に成立しない条件における実行文などが挙げられるが、このようなデッドコードがソースコードに含まれているとプログラムの行数が増え、プログラムの実行の際に、プログラムを一時的に保存するためのメモリの記憶容量を大きくする必要が生じる。また、プログラムの行数が増えることで可読性が低下するといった課題がある。
【０００９】
さらに、デッドコードを含むソースコードは、ソースコードに入力されるパラメータの値によってはソフトウェアが想定外の動作をする可能性を含むため、規格またはガイドラインで制限または禁止される事例もある。例えば、自動車の機能安全規格ＩＳＯ２６２６２においてハザードを評価する指標であるＡＳＩＬ（Automotive Safety Integrity Level）における「ＡＳＩＬ Ｄ」に準拠させる場合には、デッドコードを含むソースコードは禁止されている。このように、ソースコードにデッドコードを含む場合には、当該ソースコードが規格に準拠していることを示す際の障害となる。
【００１０】
本発明は上記のような課題を解決するためになされたものであり、モデルベース開発において、デッドコードが生成されないように自動でモデルを修正する自動修正装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明に係る自動修正装置の態様は、モデルベース開発におけるモデルの自動修正装置であって、デッドコードを生成するモデルの記述パターンであるデッドコードパターンに基づいて未修正の修正前モデルからデッドコードを生成する箇所を検出するデッドコード検出処理部と、前記デッドコード検出処理部で検出された前記デッドコードを生成する箇所を修正して修正後モデルを生成するモデル自動修正処理部とを備え、前記モデルは、信号処理を行う複数のブロックと、ブロック間を繋ぐ結線とを有し、前記モデル自動修正処理部は、前記修正前モデルから前記デッドコードを生成する箇所の前記ブロックを削除し、削除によって発生した断線箇所のブロック間を再結線することで前記修正後モデルを生成する。
【発明の効果】
【００１２】
本発明に係る自動修正装置によれば、ソースコードを生成する前に、デッドコードが生成されないモデルを作成することが可能となる。
【図面の簡単な説明】
【００１３】
【図１】本発明に係る実施の形態の自動修正装置の構成を示す機能ブロック図である。
【図２】本発明に係る実施の形態の自動修正装置をパーソナルコンピュータで実現する場合の構成を示すブロック図である。
【図３】モデルエディタによって作成されたモデルの一例を示す図である。
【図４】デッドコードパターンと、修正後モデルのパターンを示す図である。
【図５】デッドコード検出処理部の動作を示すフローチャートである。
【図６】デッドコードパターン情報を示す図である。
【図７】検査対象ブロックを示す図である。
【図８】検査対象ブロックを示す図である。
【図９】検査対象ブロックを示す図である。
【図１０】デッドコード検出結果の格納例を示す図である。
【図１１】モデル自動修正処理部の動作を示すフローチャートである。
【図１２】自動修正後モデルに出力されるコメント例を示す図である。
【発明を実施するための形態】
【００１４】
＜実施の形態＞
＜装置構成＞
図１は、本発明に係る実施の形態の自動修正装置１００の構成を示す機能ブロック図である。図１に示すように自動修正装置１００は、処理部１０と記憶部２０とを備えている。なお、自動修正装置１００には、ユーザが自動修正装置１００を操作するためのキーボード、マウスなどの入力装置が接続されるが、図示は省略している。
【００１５】
処理部１０は、デッドコード検出処理部１０１およびモデル自動修正処理部１０２を有し、記憶部２０は、ソースコード生成時にデッドコードが生成されるモデルの記述パターンであるデッドコードパターンを格納するデッドコードパターン情報格納部２０１、デッドコードパターンが生成されないように修正する前の未修正の修正前モデルを格納する修正前モデル格納部２０２、デッドコード検出結果を格納するデッドコード検出結果格納部２０３およびデッドコードパターンが生成されないように修正された後の修正後モデルを格納する修正後モデル格納部２０４を有している。
【００１６】
デッドコード検出処理部１０１は、デッドコードパターン情報格納部２０１に格納されたデッドコードパターンと修正前モデル格納部２０２に格納された修正前モデルとを読み出し、読み出した修正前モデルにおいてデッドコードパターンに一致する箇所、すなわちデッドコードを生成するモデル記述箇所を検出する。検出したモデル記述箇所は、検出結果としてデッドコード検出結果格納部に保存される。
【００１７】
モデル自動修正処理部１０２は、修正前モデル格納部２０２から修正前モデルを読み出し、デッドコード検出結果格納部２０３から検出結果を読み出し、デッドコードを生成するモデル記述箇所をデッドコードが生成されないように修正前モデルを自動修正して修正後モデルを生成する。修正後モデルは修正後モデル格納部２０４に保存される。
【００１８】
モデルベース開発におけるモデルは、所定の規則に基づいて信号を出力することを表現する複数のブロック、およびブロック間の信号の入出力の繋がりを表現する結線等で構成される。このようなモデルは、モデルエディタを使用することによって作成される。
【００１９】
モデルエディタとしては、例えばＭａｔｌａｂ（登録商標）上で動作するＳｉｍｕｌｉｎｋ（登録商標）と呼称されるソフトウェアを用いることができる。なお、モデルエディタはこれに限定されないが、以下の説明においてはモデルエディタとして、Ｍａｔｌａｂ（登録商標）上で動作するＳｉｍｕｌｉｎｋ（登録商標）を例に採って説明する。
【００２０】
図２には、図１に示した自動修正装置１００をパーソナルコンピュータ１で実現する場合の構成を示すブロック図である。図２に示すように、パーソナルコンピュータ１は、入力装置１１、プロセッサ１２、記憶装置１３、第１メモリ１４および第２メモリ１５を備えている。パーソナルコンピュータ１には出力装置として液晶ディスプレイなどの表示装置が接続されるが図示は省略している。
【００２１】
入力装置１１は、キーボード、マウスなどで構成され、ユーザが操作することにより、その操作に応じた信号をプロセッサ１２に出力する。
【００２２】
第１メモリ１４は、例えばＲＡＭ（Random Access Memory）などの読み出し、書き込みが可能な揮発性メモリであり、第２メモリ１５は、例えばＲＯＭ（Read Only Memory）などの読み出し専用の不揮発性メモリである。また、記憶装置１３は、ハードディスク、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスクおよびＤＶＤ（Digital Versatile Disc）などのドライブ装置を必要とする記憶媒体である。なお、第１メモリ１４としては、フラッシュメモリ、ＥＰＲＯＭ（Erasable Programmable Read Only Memory）、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）などを使用することもできる。
【００２３】
記憶装置１３および第２メモリ１５には、プロセッサ１２が読み出して実行するプログラム等のソフトウェアが予め記憶されている。また、記憶装置１３には、モデル、モデルのデータ情報およびデッドコードを生成するモデル記述パターン情報が記憶されている。第１メモリ１４は、プロセッサ１２が記憶装置１３および第２メモリ１５に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域として用いられる。
【００２４】
プロセッサ１２は、パーソナルコンピュータ１に電源が投入されることによって起動すると、第２メモリ１５から所定のブートプログラムを読み出して実行し、このブートプログラムに規定されるオペレーティングシステム（以下ＯＳと略記）およびその他のプログラムを記憶装置１３から読み出して実行することにより、パーソナルコンピュータ１の起動処理を行う。起動処理以後電源が遮断されるまで、プロセッサ１２は、入力装置１１からの信号、ＯＳによって予め定められたスケジュール等に基づいて、記憶装置１３に記憶されている各種プログラムをＯＳ上のプロセスとして実行する。また、上記起動処理およびプロセスにおいて、プロセッサ１２は必要に応じて入力装置１１から信号の入力を受け付け、また第１メモリ１４および記憶装置１３に対してデータの読み出し、書き込みの制御を行う。
【００２５】
図１に示した自動修正装置１００の処理部１０におけるデッドコード検出処理部１０１およびモデル自動修正処理部１０２はプロセッサ１２によるプログラムの実行により実現し、ユーザが入力装置１１に対して所定の操作をすることにより、または、他の方法で指示されることにより実行を開始する。
【００２６】
また、図１に示した自動修正装置１００の記憶部２０におけるデッドコードパターン情報格納部２０１、修正前モデル格納部２０２、デッドコード検出結果格納部２０３および修正後モデル格納部２０４は、それぞれ記憶装置１３の記憶領域の一部である。
【００２７】
＜モデルの例＞
図３はモデルエディタによって作成されたモデルの一例を示す図である。図３に示されるように、符号３０１、３０２、３０３、３０４および３０５が付された、四角形または長円形の要素がモデルを構成するブロックである。ブロックは、入力端および出力端の何れかまたは両方を有し、所定の信号処理を行う。この信号処理は、ブロックが入力端を有していれば当該入力端で受けた信号に基づいた処理となる。また、ブロックが出力端を有していれば、当該ブロックで行った信号処理の結果が出力端から出力される。
【００２８】
また、ブロック間を繋ぐ矢印線が結線（信号線）を表している。結線は、ブロックの出力端を始点とし、ブロックの入力端を終点とするように設定される。なお、結線の始点および終点とは、それぞれ結線を表す矢印線の矢印のない側の端点および矢印のある側の端点を指す。
【００２９】
ここで、あるブロックＡの出力端とあるブロックＢの入力端との結線による繋がりは、ブロックＡの出力端からの出力がブロックＢの入力端において入力されることを表す。すなわち、結線はブロック間の信号の入出力の関係を表している。
【００３０】
図３におけるブロック３０１は、時間的に変化しない定数（Ｐａｒａｍ１）を出力する定数ブロックである。定数の具体的な値は、定数ブロックごとに開発者が設定することができる。図３ではＰａｒａｍ１＝５０が設定された例を示している。
【００３１】
また、図３におけるブロック３０２は、入力値が予め決められた範囲内であれば、入力値をそのままの値で出力し、予め決められた範囲外であれば、予め決められた上限値または下限値を出力する出力値制限ブロックである。図３ではブロック３０２の上限値は５００、下限値は０に設定されているため、ブロック３０１が出力する定数（Ｐａｒａｍ１＝５０）が入力されると、そのままの値で出力される。
【００３２】
また、図３におけるブロック３０３は、四則演算を行うブロックである。図３に示すブロック３０３は、２つの入力端で受けた入力値を加算し、その結果を出力する。
【００３３】
また、図３におけるブロック３０４は、モデル外部からデータの入力を受け、当該データを出力する入力ブロックである。
【００３４】
また、図３におけるブロック３０５は、結線を介して受けたブロック３０３からの入力データをモデル外部に出力する出力ブロックである。
【００３５】
ブロック３０１〜３０５および結線の組み合わせで構成される図３のモデルにおいては、ブロック３０１のデータとブロック３０４に入力されたデータの加算結果をブロック３０５に出力することとなる。その際、ブロック３０１の定数（Ｐａｒａｍ１）がブロック３０２の制限範囲内であれば、入力値をそのままの値で出力し、定数（Ｐａｒａｍ１）が上限値以上であれば上限値（５００）を出力し、下限値以下であれば下限値（０）を出力し、ブロック３０３においてブロック３０４に入力されたデータと加算することとなる。
【００３６】
このように、モデルは、複数のブロックが結線によって繋ぎ合わされることで構成され、その繋ぎ合わせの構造によって、外部とのデータ入出力を表現するようになっている。しかし、図３に示すモデルにおいても、条件によってはデッドコードが生成されることとなる。本実施の形態の自動修正装置１００では、モデル自動修正処理部１０２が、デッドコード検出結果格納部２０３から検出結果を読み出し、デッドコードとなるモデル記述箇所をデッドコードが生成されないように自動修正して修正後モデルを生成するので、デッドコードを含まないソースコードを得ることができる。
【００３７】
＜デッドコードの検出と修正＞
図４は、ソースコード生成時にデッドコードが生成されるモデルのパターン（デッドコードパターン）と、デッドコードが生成されないように修正された修正後モデルのパターンを示す図である。図４は、３行６列のテーブルとして表されている。
【００３８】
図４において、左端の第１列はパターン番号を示し、項目名は「Ｎｏ.」となっている。第２列はデッドコードが生成されるデッドコードパターンを説明しており、項目名は「パターン」となっている。第３列はデッドコードが生成されるデッドコードパターンのブロックの種類を示しており、項目名は「検査対象ブロック」となっている。これが一致することがパターン判定の第１条件となる。第４列はデッドコードが生成されるデッドコードパターンに該当するモデルを図示しており、項目名は「修正前モデル」となっている。第５列は、実際に生成される可能性があるソースコードを図示しており、項目名は「生成コード」となっている。右端の第６列は自動修正後のモデルの図示と修正方法を説明しており、項目名は「修正案」となっている。
【００３９】
ここで、図４におけるＮｏ.１−１およびＮｏ.１−２のパターンは、出力範囲制限処理の入力値が固定値であることと、当該入力値が下限値と上限値の範囲内（出力制限範囲内）であることの２条件を満たしているパターンである。そのため、何れのパターンも検査対象ブロックは、出力値を制限するブロックとなる。
【００４０】
また、図４におけるＮｏ.２のパターンは、判断条件となる制御入力値に基づいて２つの入力の一方からの入力値を出力値とする判断処理の記述パターンであり、制御入力値が固定値であることと、２つの入力のうち絶対に条件が成立しない（選択されない）側に入力ブロックが存在しないことの２条件を満たしているパターンである。そのため、検査対象ブロックは、条件により出力値を判断するブロックとなる。
【００４１】
＜Ｎｏ.１−１のパターンのモデル＞
図４におけるＮｏ.１−１のパターンのモデルは、図３に示したモデルと同じであり、同一の構成については同一の符号を付し、重複する説明は省略する。図４におけるＮｏ.１−１のパターンのモデルでは、ブロック３０２の入力値がブロック３０１が出力する定数（Ｐａｒａｍ１＝５０）であるので、必ず、予め決められた範囲内（０〜５００）の値となる。従って、ブロック３０２において入力値が予め決められた範囲内にあるか否かを判断し、予め決められた範囲外であれば、予め決められた上限値または下限値を出力する出力範囲制限処理は実行されず、このようなモデルから生成されたソースコードにはデッドコードが含まれることとなる。具体的には、「生成コード」の項目に示されているソースコードの破線で囲まれた第４行〜第１０行がデッドコードとなる。
【００４２】
上述したように、図４のＮｏ.１−１のパターンのモデルでは、ブロック３０２において出力範囲を制限する必要はなく、出力値を制限するブロック３０２を削除しても問題はない。そこで、自動修正により、出力値を制限するブロックを削除し、削除によって断線した箇所を再結線することで、図４の「修正案」の項目に示されるように、ブロック３０２が削除され、ブロック３０３の一方の入力端にブロック３０１の出力端が結線された自動修正後のモデルを得る。
【００４３】
出力範囲を制限する処理を削除することで、デッドコードは生成されなくなるので、カバレッジ評価の結果では、デッドコードが抽出されずカバレッジが向上する。
【００４４】
＜Ｎｏ.１−２のパターンのモデル＞
図４におけるＮｏ.１−２のパターンのモデルのブロック４０１は、時間的に変化しない定数（Ｐａｒａｍ１）を出力する定数ブロックであり、図４ではＰａｒａｍ１＝５０が設定された例を示している。
【００４５】
また、ブロック４０３は、時間的に変化しない定数（Ｐａｒａｍ２）を出力する定数ブロックであり、図４ではＰａｒａｍ２＝２００が設定された例を示している。
【００４６】
また、ブロック４０５は、モデル外部からデータの入力を受け、当該データを出力する入力ブロックである。
【００４７】
また、ブロック４０２は、ブロック４０１の出力およびブロック４０３の出力をデータ入力として受け、制御入力となるブロック４０５の出力値に応じて、２つのデータ入力の一方を出力するスイッチブロックである。
【００４８】
また、ブロック４０４は、入力値が予め決められた範囲内であれば、入力値をそのままの値で出力し、予め決められた範囲外であれば、予め決められた上限値または下限値を出力する出力値制限ブロックである。図４ではブロック４０２の上限値は５００、下限値は０に設定されている。
【００４９】
また、ブロック４０６は、結線を介して受けたブロック４０４からの入力データをモデル外部に出力する出力ブロックである。
【００５０】
図４におけるＮｏ.１−２のパターンのモデルでは、ブロック４０２への制御入力が０以外の場合は、ブロック４０１から入力される定数（Ｐａｒａｍ１＝５０）を出力し、ブロック４０２への制御入力が０の場合はブロック４０３から入力される定数（Ｐａｒａｍ１＝２００）を出力する。このため、ブロック４０２から出力される値は５０または２００となるので、ブロック４０４の入力値は、必ず、予め決められた範囲内（０〜５００）の値となる。従って、ブロック４０４において入力値が予め決められた範囲内にあるか否かを判断し、予め決められた範囲外であれば、予め決められた上限値または下限値を出力する出力範囲制限処理は実行されず、このようなモデルから生成されたソースコードにはデッドコードが含まれることとなる。具体的には、「生成コード」の項目に示されているソースコードの破線で囲まれた第１０行〜第１６行がデッドコードとなる。
【００５１】
上述したように、図４のＮｏ.１−２のパターンのモデルでは、ブロック４０４において出力範囲を制限する必要はなく、出力値を制限するブロック４０４を削除しても問題はない。そこで、自動修正により、出力値を制限するブロックを削除し、削除によって断線した箇所を再結線することで、図４の「修正案」の項目に示されるように、ブロック４０３が削除され、ブロック４０２の出力端にブロック４０６の入力端が結線された自動修正後のモデルを得る。
【００５２】
出力範囲を制限する処理を削除することで、デッドコードは生成されなくなるので、カバレッジ評価の結果では、デッドコードが抽出されずカバレッジが向上する。
【００５３】
＜Ｎｏ.２のパターンのモデル＞
図４におけるＮｏ.２のパターンのモデルのブロック５０１は、モデル外部からデータの入力を受け、当該データを出力する入力ブロックである。
【００５４】
また、ブロック５０２は、時間的に変化しない定数（Ｐａｒａｍ１）を出力する定数ブロックであり、図４ではＰａｒａｍ１＝５０が設定された例を示している。
【００５５】
また、ブロック５０３は、時間的に変化しない定数（Ｐａｒａｍ０）を出力する定数ブロックであり、図４ではＰａｒａｍ０＝０が設定された例を示している。
【００５６】
また、ブロック５０４は、入力の絶対値を出力する絶対値ブロックである。
【００５７】
また、ブロック５０５は、ブロック５０４の出力およびブロック５０３の出力をデータ入力として受け、制御入力となるブロック５０２の出力値に基づいて、２つのデータ入力の一方を出力するスイッチブロックである。
【００５８】
また、ブロック５０６は、結線を介して受けたデータをモデル外部に出力する出力ブロックである。
【００５９】
図４におけるＮｏ.２のパターンのモデルでは、ブロック５０５の制御入力はブロック５０２の出力であり、ブロック５０２は定数（Ｐａｒａｍ１＝５０）を出力するので、ブロック５０５の制御入力にはＰａｒａｍ１＝５０、すなわち０以外が与えられるので、ブロック５０５はブロック５０４からの入力を必ず出力する。このため、ブロック５０５への制御入力が０の場合に、ブロック５０３から入力される定数（Ｐａｒａｍ０＝０）を出力する処理は実行されず、このようなモデルから生成されたソースコードにはデッドコードが含まれることとなる。具体的には、「生成コード」の項目に示されているソースコードの破線で囲まれた第７行〜第９行がデッドコードとなる。
【００６０】
上述したように、図４のＮｏ.２のパターンのモデルでは、ブロック５０５において条件により出力値を判断する必要はなく、また、ブロック５０３にはモデル外部からデータの入力を受ける入力ブロックに接続されていない。従って、出力値を判断するブロック５０５および判断条件を出力するブロック５０２および絶対に条件が成立しない側のデータ入力を出力するブロック５０３を削除しても問題はない。そこで、自動修正により、条件により出力値を判断するブロック、判断条件を出力するブロックおよび条件が成立しない側のデータ入力を出力するブロックを削除し、削除によって断線した箇所を再結線することで、図４の「修正案」の項目に示されるように、ブロック５０２、５０３および５０５が削除され、ブロック５０４の出力端にブロック５０６の入力端が結線された自動修正後のモデルを得る。
【００６１】
出力値を判断する処理を削除することで、デッドコードは生成されなくなるため、カバレッジ評価の結果では、デッドコードが抽出されずカバレッジが向上する。
【００６２】
＜デッドコード検出処理＞
次に、図１、図２を参照しつつ図５に示すフローチャートを用いてデッドコード検出処理部１０１の動作について説明する。ユーザが図示されない入力装置を操作することによりデッドコード検出処理が開始されると、まず、デッドコードパターン情報格納部２０１に記憶されたデッドコードパターン情報を読み出す（ステップＳ１）。デッドコードパターン情報は、デッドコードを生成するパターンの情報であり、その一例を図６に示す。
【００６３】
図６に示すデッドコードパターン情報は、２種類のデッドコードパターンについて設定されており、２行５列のテーブルとして表されている。
【００６４】
図６において、左端の第１列は検査対象ブロックの分類を示し、図６ではＴｙｐｅ１およびＴｙｐｅ２として分類されており、項目名は「検査対象ブロックの種類」である。第２列は、検査対象ブロックが接続される接続元のブロックを規定しており、図６ではＴｙｐｅ３のみが規定され、項目名は「接続元ブロックの種類」である。第３列は、接続元のブロックを取得する際のポート番号を示しており、項目名は「接続元ポート」である。第４列は、デッドコードパターンとなる第１の条件を規定しており、項目名は「条件１」である。第５列は、デッドコードパターンとなる第２の条件を規定しており、項目名は「条件２」である。
【００６５】
ここで、図７および図８には、それぞれＴｙｐｅ１およびＴｙｐｅ２に該当する検査対象ブロックを示しており、Ｔｙｐｅ１は出力値を制限するブロック、Ｔｙｐｅ２は出力値を判断するブロックである。また、図９にはＴｙｐｅ３の接続元のブロックを示しており、Ｔｙｐｅ３の接続元のブロックは、時間的に変化しない定数を出力する定数ブロックである。
【００６６】
次に、デッドコード検出処理部１０１は、修正前モデル格納部２０２に記憶された修正前モデルを読み出す（ステップＳ２）。修正前モデルは、例えば、図４における「修正前モデル」の項目に記載されているようなモデルである。
【００６７】
次に、デッドコード検出処理部１０１は、検査対象ブロックの種類がＴｙｐｅＸに対応するブロックを修正前モデルから検出する（ステップＳ３）。例えば、検査対象ブロックがＴｙｐｅ１である場合、修正前モデルに同じブロックが含まれていればそれを検出する。Ｔｙｐｅ１の検査対象ブロックは出力値を制限するブロックであるので、修正前モデルに含まれる出力値を制限するブロックを全て検出する。ここで、検出されたブロックを被検出ブロックと呼称する。なお、修正前モデルに検査対象ブロックに対応するブロックが含まれていない場合は一連の処理を終了する。
【００６８】
検査対象ブロックは、例えば、図４における「検査対象ブロック」の項目に記載されているようなブロックであり、本実施の形態では２種類を想定している。
【００６９】
ここで、検査対象ブロックは、図６の「検査対象ブロックの種類」の項目でＴｙｐｅ１およびＴｙｐｅ２として分類されており、Ｔｙｐｅ１およびＴｙｐｅ２の両方についてステップＳ３以下の処理を繰り返す。
【００７０】
次に、デッドコード検出処理部１０１は、ステップＳ３で検出した被検出ブロックがデッドコードパターンとなる第１の条件（条件１）を満たすか否かを判定する（ステップＳ４）。ここで、条件１は図６の「条件１」の項目で規定されており、Ｔｙｐｅ１の検査対象ブロックに対しては、検査対象ブロックが接続されている「接続元のブロックの種類がＴｙｐｅ３と一致する」という条件である。
【００７１】
そして、条件１を満たさないと判定される場合（Ｎｏ）は、他の被検出ブロックに対してステップＳ４の処理を実行する。なお、ステップＳ３で検出した被検出ブロックが１つだけの場合は、ステップＳ３で次の検査対象ブロックに対応するブロックが検出されるまで待機する。一方、条件１を満たす（Ｙｅｓ）と判定される場合はステップＳ５に移行する。なお、条件１を満たす場合とは、検査対象ブロックが時間的に変化しない定数を出力する定数ブロックに接続されている場合であり、検査対象ブロックに固定値（定数）が入力される場合である。
【００７２】
ステップＳ５では、ステップＳ３で検出した被検出ブロックがデッドコードパターンとなる第２の条件（条件２）を満たすか否かを判定する。
【００７３】
ここで、条件２は図６の「条件２」の項目で規定されており、Ｔｙｐｅ１の検査対象ブロックに対しては、検査対象ブロックの入力値が、下限値と上限値の範囲内であることが成立するという条件である。なお、当該条件は図６では「下限値＜接続元からの出力値＜上限値が成立する」と表されている。また、条件２はＴｙｐｅ２の検査対象ブロックに対しては、「条件が成立しない側の接続元ブロックがＴｙｐｅ３と一致する」という条件である。
【００７４】
そして、条件２を満たさないと判定される場合（Ｎｏ）は、他の被検出ブロックに対してステップＳ４以下の処理を実行する。なお、ステップＳ３で検出した被検出ブロックが１つだけの場合は、ステップＳ３で次の検査対象ブロックに対応するブロックが検出されるまで待機する。一方、条件２を満たす（Ｙｅｓ）と判定される場合はステップＳ６に移行する。なお、条件２を満たす場合とは、Ｔｙｐｅ１の検査対象ブロックに対しては、検査対象ブロックが出力値制限ブロックであり、接続元ブロックからの出力値が、検査対象ブロックの出力の制限範囲内の値となる場合である。また、Ｔｙｐｅ２の検査対象ブロックに対しては、検査対象ブロックが条件により出力値を判断するブロックであり、条件が成立しない側の接続元ブロックが、時間的に変化しない定数を出力する定数ブロックの場合である。
【００７５】
ステップＳ４およびＳ５の判定の結果、ステップＳ３で検出した被検出ブロックがデッドコードパターンとなる条件１および条件２を満たすとなった場合、当該ブロックはデッドコードパターンを生成するブロックであると判断することができ、当該ブロックをデッドコード検出結果としてデッドコード検出結果格納部２０３に格納する（ステップＳ６）。
【００７６】
図１０は、デッドコード検出結果の格納例を示す図である。図１０においては３種類のパターンについて格納例を示しており、３行５列のテーブルとして表されている。
【００７７】
図１０において、左端の第１列は、デッドコードが生成されるブロックを含んだ修正前モデルのパターン番号を示し、図１０ではＮｏ.１−１、Ｎｏ.１−２およびＮｏ.２が示されており、項目名は「Ｎｏ.」である。この修正前モデルが、図５のステップＳ２で読み出したモデルに相当し、Ｎｏ.１−１、Ｎｏ.１−２およびＮｏ.２のパターンからデッドコードを検出したことを表している。
【００７８】
第２列は検査対象ブロックの分類を示し、図１０ではＮｏ.１−１およびＮｏ.１−２が、共にＴｙｐｅ１とされ、Ｎｏ.２がＴｙｐｅ２として分類されており、項目名は「検査対象ブロックの種類」である。第３列はモデルの最上層ブロックから削除対象ブロックまでのパス（絶対パス）が示されており、項目名は「削除対象ブロックパス」である。第４列は再結線する入力側と出力側それぞれのブロックまでのパスが上下段に分けて示されており、項目名は「再結線対象ブロックパス」である。なお、上段が入力側のブロックまでのパスであり、下段が出力側のブロックまでのパスである。第５列は検査対象ブロックを削除して断線箇所を再結線するパターンと、検査対象ブロックの他に、デッドコードとなるブロックも削除して断線箇所を再結線するパターンを規定しており、項目名は「削除対象オプション」である。なお、検査対象ブロックのみを削除するパターンを「０」とし、検査対象ブロックを含めて複数を削除するパターンを「１」で表している。
【００７９】
ここで図５のフローチャートの説明に戻る。ステップＳ６でデッドコード検出結果をデッドコード検出結果格納部２０３に格納した後は、ステップＳ３で検出した全ての被検出ブロックに対してステップＳ４〜Ｓ６のデッドコード検出処理を実行したか否かを判定する（ステップＳ７）。
【００８０】
そして、全ての被検出ブロックに対してデッドコード検出処理を実行した（Ｙｅｓ）と判定される場合はステップＳ８に移行し、処理すべき被検出ブロックが残っている（Ｎｏ）と判定される場合は残っている被検出ブロックに対してステップＳ４以下の処理を実行する。
【００８１】
ステップＳ８では、ステップＳ２で読み出した修正前モデルに対して、全ての検査対象ブロックを適用したか否かを判定する。すなわち、図６に示したように、検査対象ブロックの種類がＴｙｐｅ１およびＴｙｐｅ２の２種類である場合、ステップＳ２で読み出した修正前モデルについて、Ｔｙｐｅ１およびＴｙｐｅ２の検査対象ブロックを適用して、対応するブロックが含まれているか否かを判定したかを確認する。
【００８２】
そして、修正前モデルに対して全ての検査対象ブロックを適用した（Ｙｅｓ）と判定される場合は一連の処理を終了し、適用すべき検査対象ブロックが残っている（Ｎｏ）と判定される場合はステップＳ３以下の処理を繰り返す。
【００８３】
＜モデル自動修正処理＞
次に、図１、図２を参照しつつ図１１に示すフローチャートを用いてモデル自動修正処理部１０２の動作について説明する。ユーザが図示されない入力装置を操作することによりモデル自動修正処理が開始されると、まず、デッドコード検出結果格納部２０３に記憶されたデッドコード検出結果を読み出す（ステップＳ１１）。
【００８４】
次に、モデル自動修正処理部１０２は、修正前モデル格納部２０２に記憶された修正前モデルを読み出す（ステップＳ１２）。
【００８５】
次に、モデル自動修正処理部１０２は、削除対象ブロックを特定する（ステップＳ１３）。削除対象ブロックは、図１０に示されるデッドコード検出結果の格納例においては、「削除対象ブロックパス」の項目に記載されている情報で規定される。すなわち、「削除対象ブロックパス」の項目では、例えばＮｏ.１−１のパターンの場合、「Ｓａｍｐｌｅ１／Ｔａｒｇｅｔ１」のように削除対象が規定されており、このうち「Ｓａｍｐｌｅ１」を参照して、削除対象ブロックとする。また、「Ｔａｒｇｅｔ１」はモデルの最上層ブロックから削除対象ブロックまでのパスを規定している。
【００８６】
次に、モデル自動修正処理部１０２は、修正方法の判定を行う（ステップＳ１４）。具体的には、図１０に示されるデッドコード検出結果の「削除対象オプション」の項目を参照し、削除対象オプションが「０」であるか否かを判定し、「０」の場合（Ｙｅｓ）はステップＳ１５に移行し、「１」の場合（Ｎｏ）はステップＳ２０に移行する。例えばＮｏ.１−１のパターンの場合、削除対象オプションは「０」であるので、ステップＳ１５において検査対象ブロックのみを削除する。
【００８７】
次に、モデル自動修正処理部１０２は、削除対象ブロックの削除により断線している箇所を再結線する（ステップＳ１６）。再結線の箇所は、図１０に示されるデッドコード検出結果の「再結線対象ブロックパス」の項目に記載されている情報で規定されている。すなわち、「再結線対象ブロックパス」の項目では、例えばＮｏ.１−１のパターンの場合、「Ｓａｍｐｌｅ１／Ｂｌｏｃｋ１」、「Ｓａｍｐｌｅ１／Ｂｌｏｃｋ２」のように再結線対象が規定されており、「Ｔａｒｇｅｔ１」は削除されたブロックであり、「Ｂｌｏｃｋ１」は「Ｔａｒｇｅｔ１」の入力側にあるブロックまでのパスを示し、「Ｂｌｏｃｋ２」は「Ｔａｒｇｅｔ１」の出力側にあるブロックまでのパスを示している。モデル自動修正処理部１０２は、この情報に基づいて「Ｂｌｏｃｋ１」と「Ｂｌｏｃｋ２」との間を再結線する。Ｎｏ.１−１のパターンの場合、図４の「修正案」の項目に示されるように、ブロック３０２が削除され、ブロック３０３の一方の入力端にブロック３０１の出力端が結線されたモデルとなる。
【００８８】
その後、モデル自動修正処理部１０２は、モデルを修正したことを、修正後モデル内にコメントとして出力し、履歴を残す（ステップＳ１７）。図１２にはモデル内に出力されるコメントの例を示す。図１２に示されるように、コメントには、修正日、修正者、修正内容が記載される。これにより、ユーザの便宜を図ることができる。
【００８９】
その後、モデル自動修正処理部１０２は、ステップＳ１８において、デッドコード検出結果に含まれる全ての削除対象ブロックを修正したか否かを判定し、全ての削除対象ブロックを修正した場合（Ｙｅｓ）には、ステップＳ１９において修正後モデルを修正後モデル格納部２０４に格納して一連の処理を終了し、未修正の削除対象ブロックがある場合（Ｎｏ）には、ステップＳ１３以下の処理を繰り返す。
【００９０】
ここで、ステップＳ１４で修正方法の判定を行った結果、削除対象オプションが「１」の場合は、削除対象ブロックが検査対象ブロック以外にも複数存在するため、その全てを削除する。例えばＮｏ.２のパターンの場合、「削除対象ブロックパス」の項目には、「Ｓａｍｐｌｅ３／Ｔａｒｇｅｔ３」、「Ｓａｍｐｌｅ３／Ｔａｒｇｅｔ４」および「Ｓａｍｐｌｅ３／Ｔａｒｇｅｔ５」のように削除対象が規定されており、このうち「Ｓａｍｐｌｅ３」を参照して、削除対象ブロックとする。また、「Ｔａｒｇｅｔ３」、「Ｔａｒｇｅｔ４」および「Ｔａｒｇｅｔ５」のように、削除対象ブロックまでの絶対パスが３系統あるので、削除対象ブロックが検査対象ブロック以外にもあることを示している。
【００９１】
ステップＳ２０では、まず削除対象ブロックである「Ｔａｒｇｅｔ３」を削除し、次に、ステップＳ２１において、「削除対象ブロックパス」の項目にある全ての削除対象ブロックを削除したか否かを判定し、全ての削除対象ブロックを削除した場合（Ｙｅｓ）には、ステップＳ２２において削除対象ブロックの削除により断線している箇所を再結線する。図１０の「再結線対象ブロックパス」の項目では、例えばＮｏ.２のパターンの場合、「Ｓａｍｐｌｅ３／Ｂｌｏｃｋ５」、「Ｓａｍｐｌｅ３／Ｂｌｏｃｋ６」のように再結線対象が規定されており、「Ｔａｒｇｅｔ３」は削除されたブロックであり、「Ｂｌｏｃｋ５」は「Ｔａｒｇｅｔ３」の入力側にあるブロックまでのパスを示し、「Ｂｌｏｃｋ６」は「Ｔａｒｇｅｔ３」の出力側にあるブロックまでのパスを示している。モデル自動修正処理部１０２は、この情報に基づいて「Ｂｌｏｃｋ５」と「Ｂｌｏｃｋ６」との間を再結線する。
【００９２】
一方、ステップＳ２１において、未削除の削除対象ブロックがある（Ｎｏ）と判定される場合には、ステップＳ２０以下の処理を繰り返す。ここで、「削除対象ブロックパス」の項目にある「Ｔａｒｇｅｔ４」および「Ｔａｒｇｅｔ５」は、「Ｔａｒｇｅｔ３」以外にもブロックが含まれることを示しているが、これらのブロックは、「再結線対象ブロックパス」の項目では、再結線の対象となるブロックとして挙げられていないので、ステップＳ２０で削除の対象となる。Ｎｏ.２のパターンの場合、図４の「修正案」の項目に示されるように、ブロック５０２、５０３および５０５が削除され、ブロック５０４の出力端にブロック５０６の入力端が結線されたモデルとなる。
【００９３】
なお、本発明は、その発明の範囲内において、実施の形態を適宜、変形、省略することが可能である。
【符号の説明】
【００９４】
１０１  デッドコード検出処理部、１０２  モデル自動修正処理部。
【図１】
2018163432.tif 000003
【図２】
2018163432.tif 000004
【図３】
2018163432.tif 000005
【図４】
2018163432.tif 000006
【図５】
2018163432.tif 000007
【図６】
2018163432.tif 000008
【図７】
2018163432.tif 000009
【図８】
2018163432.tif 000010
【図９】
2018163432.tif 000011
【図１０】
2018163432.tif 000012
【図１１】
2018163432.tif 000013
【図１２】
2018163432.tif 000014