(57)【要約】【課題】並行して行われる複数の処理を含むシーケンス図からデータフローの異常を精度良く検出できる情報処理装置を実現する。【解決手段】実施形態によれば、情報処理装置は、第１検出手段と第２検出手段とを具備する。第１検出手段は、複数のオブジェクト間でデータを送受信するメッセージとオブジェクト内でデータを使用するメッセージとを含む複数のメッセージの実行が並行して行われる複数の処理を含むシーケンス図を用いて、当該シーケンス図内の関連するメッセージで用いられるデータの流れを追跡することによって、異常があるメッセージの候補を検出する。第２検出手段は、前記シーケンス図を用いて、前記シーケンス図内の関連しないメッセージで用いられるデータの流れを追跡することによって、前記異常があるメッセージの候補の内の、異常があるメッセージを検出する。【選択図】図５
2015170075.tif 000002
【特許請求の範囲】
【請求項１】
複数のオブジェクト間でデータを送受信するメッセージとオブジェクト内でデータを使用するメッセージとを含む複数のメッセージの実行が並行して行われる複数の処理を含むシーケンス図を用いて、当該シーケンス図内の関連するメッセージで用いられるデータの流れを追跡することによって、異常があるメッセージの候補を検出する第１検出手段と、
前記シーケンス図を用いて、前記シーケンス図内の関連しないメッセージで用いられるデータの流れを追跡することによって、前記異常があるメッセージの候補の内の、異常があるメッセージを検出する第２検出手段とを具備する情報処理装置。
【請求項２】
前記第１検出手段は、前記シーケンス図内で直接的に接続された１以上のメッセージの内の最後尾のメッセージで用いられるデータの流れを追跡することによって、利用可能でない第１データが検出された場合、当該最後尾のメッセージを前記異常があるメッセージの候補に設定し、
前記第２検出手段は、前記異常があるメッセージの候補に設定された、前記最後尾のメッセージとは直接的に接続されていない第１メッセージであって、前記最後尾のメッセージよりも前に、当該最後尾のメッセージと同一のオブジェクト上で実行される第１メッセージで用いられるデータの流れを追跡することによって、前記第１データが利用可能でないことが検出された場合、前記最後尾のメッセージを前記異常があるメッセージに設定し、前記第１データが利用可能なデータであることが検出された場合、前記最後尾のメッセージを異常が誤検出された可能性があるメッセージに設定する請求項１記載の情報処理装置。
【請求項３】
前記第１検出手段は、前記最後尾のメッセージの入力データが、当該最後尾のメッセージの直前のメッセージの入力データと出力データのいずれにも含まれていない場合、前記最後尾のメッセージを前記異常があるメッセージの候補に設定し、
前記第２検出手段は、前記最後尾のメッセージの入力データが、前記第１メッセージの入力データと出力データのいずれにも含まれていない場合、前記最後尾のメッセージを前記異常があるメッセージに設定し、前記最後尾のメッセージの入力データが前記第１メッセージの入力データと出力データの少なくとも一方に含まれている場合、前記最後尾のメッセージを前記異常が誤検出された可能性があるメッセージに設定する請求項２記載の情報処理装置。
【請求項４】
前記第１メッセージは、非同期メッセージである請求項２記載の情報処理装置。
【請求項５】
前記シーケンス図内の、前記異常があるメッセージと前記異常が誤検出された可能性があるメッセージの少なくとも一方を強調して表示する表示手段をさらに具備する請求項２記載の情報処理装置。
【請求項６】
前記表示手段は、ユーザ操作によって、前記シーケンス図内の前記異常が誤検出された可能性があるメッセージを含む第１領域が指示された場合、当該異常が誤検出された可能性があるメッセージを強調して表示し、前記ユーザ操作によって、前記シーケンス図内の前記異常があるメッセージを含む第２領域が指示された場合、当該異常があるメッセージを強調して表示する請求項５記載の情報処理装置。
【請求項７】
前記表示手段は、前記最後尾のメッセージが前記異常が誤検出された可能性があるメッセージに設定され、前記ユーザ操作によって前記シーケンス図内の前記最後尾のメッセージを含む領域が指示された場合、前記第１メッセージを強調して表示する請求項５記載の情報処理装置。
【請求項８】
前記利用可能でないことが検出された第１データを示す情報を前記シーケンス図上に表示する表示手段をさらに具備する請求項２記載の情報処理装置。
【請求項９】
複数のオブジェクト間でデータを送受信するメッセージとオブジェクト内でデータを使用するメッセージとを含む複数のメッセージの実行が並行して行われる複数の処理を含むシーケンス図を用いて、当該シーケンス図内の関連するメッセージで用いられるデータの流れを追跡することによって、異常があるメッセージの候補を検出し、
前記シーケンス図を用いて、前記シーケンス図内の関連しないメッセージで用いられるデータの流れを追跡することによって、前記異常があるメッセージの候補の内の、異常があるメッセージを検出するソフトウェア設計支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ソフトウェアの設計を支援する情報処理装置、及び該装置に適用されるソフトウェア設計支援方法に関する。
【背景技術】
【０００２】
オブジェクト指向のソフトウェア開発には、一般に、Unified Modeling Language（ＵＭＬ）が用いられる。ＵＭＬは、ソフトウェア工学におけるオブジェクトモデリングのために標準化された仕様記述言語である。ソフトウェアの設計者は、例えば、ＵＭＬによって定義される図の一つであるシーケンス図を用いて、オブジェクト間のメッセージを時系列に表すことによって、設計されたソフトウェアが実現可能であるかを確認しながら、ソフトウェアを設計・検証することができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−１４６３８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
シーケンス図では、並行して行われる複数の処理を表すこともできる。しかし、このような複数の処理を含むシーケンス図では、データフローの異常を精度良く検出することが困難である可能性がある。
【０００５】
本発明は、並行して行われる複数の処理を含むシーケンス図からデータフローの異常を精度良く検出できる情報処理装置及びソフトウェア設計支援方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
実施形態によれば、情報処理装置は、第１検出手段と第２検出手段とを具備する。第１検出手段は、複数のオブジェクト間でデータを送受信するメッセージとオブジェクト内でデータを使用するメッセージとを含む複数のメッセージの実行が並行して行われる複数の処理を含むシーケンス図を用いて、当該シーケンス図内の関連するメッセージで用いられるデータの流れを追跡することによって、異常があるメッセージの候補を検出する。第２検出手段は、前記シーケンス図を用いて、前記シーケンス図内の関連しないメッセージで用いられるデータの流れを追跡することによって、前記異常があるメッセージの候補の内の、異常があるメッセージを検出する。
【図面の簡単な説明】
【０００７】
【図１】実施形態に係る情報処理装置の外観を示す斜視図。
【図２】同実施形態の情報処理装置のシステム構成を示すブロック図。
【図３】並行して行われる複数の処理を含むシーケンス図から、データフローの異常が検出される例を説明するための図。
【図４】並行して行われる複数の処理を含むシーケンス図から、データフローの異常が検出される別の例を説明するための図。
【図５】同実施形態の情報処理装置によって実行されるソフトウェア設計支援プログラムの機能構成を示すブロック図。
【図６】図５のソフトウェア設計支援プログラムによる処理を説明するための図。
【図７】同実施形態の情報処理装置によって、シーケンス図からオブジェクトのステレオタイプが検出される例を示す図。
【図８】同実施形態の情報処理装置によって、シーケンス図上のメッセージの実行順序が決定される例を示す図。
【図９】図８のシーケンス図に対応するシーケンス情報の例を示す図。
【図１０】図８のシーケンス図上で、データフローが逆流追跡される例を示す図。
【図１１】図１０のシーケンス図に対応する、シーケンス情報を用いた逆流追跡の例を示す図。
【図１２】図８のシーケンス図上でのデータフローの逆流追跡によって、利用可能でないデータが検出される例を示す図。
【図１３】図１２のシーケンス図に対応する、シーケンス情報を用いた逆流追跡の例を示す図。
【図１４】図１２で検出された利用可能でないデータが、シーケンス上の別のデータフローで受け取られていることが検出される例を示す図。
【図１５】図１４のシーケンス図に対応する、シーケンス情報を用いたデータ受け取りの検出の例を示す図。
【図１６】同実施形態の情報処理装置によって、シーケンス図上に、利用可能でないデータを示す情報が表示される画面の例を示す図。
【図１７】図１６のシーケンス図に対応する、シーケンス情報を用いた利用可能でないデータの検出の例を示す図。
【図１８】同実施形態の情報処理装置によって、シーケンス図上に、異常が誤検出された可能性があるデータを示す情報が表示される画面の例を示す図。
【図１９】同実施形態の情報処理装置によって実行されるシーケンス図作成支援処理の手順の例を示すフローチャート。
【図２０】同実施形態の情報処理装置によって実行されるシーケンス図解析処理の手順の例を示すフローチャート。
【図２１】同実施形態の情報処理装置によって実行されるデータフロー逆流追跡処理の手順の例を示すフローチャート。
【図２２】同実施形態の情報処理装置によって実行されるデータ欠落誤検出防止処理の手順の例を示すフローチャート。
【図２３】同実施形態の情報処理装置によって実行されるデータフロー異常箇所表示処理の手順の例を示すフローチャート。
【発明を実施するための形態】
【０００８】
以下、実施の形態について図面を参照して説明する。  
図１は、一実施形態に係る情報処理装置の外観を示す斜視図である。この情報処理装置は、パーソナルコンピュータ（ＰＣ）、タブレットコンピュータといった情報処理装置である。ここでは、この情報処理装置がノートブックタイプのパーソナルコンピュータ１０として実現されている場合を想定する。
【０００９】
図１に示すように、コンピュータ１０は、コンピュータ本体１１と、ディスプレイユニット１２とを備える。ディスプレイユニット１２には、ＬＣＤ（liquid crystal display）１７が組み込まれている。ディスプレイユニット１２は、コンピュータ本体１１の上面が露出される開放位置とコンピュータ本体１１の上面がディスプレイユニット１２で覆られる閉塞位置との間を回動自在にコンピュータ本体１１に取り付けられている。
【００１０】
コンピュータ本体１１は、薄い箱形の筐体を有しており、その上面には、キーボード１３、本コンピュータ１０を電源オン／電源オフするためのパワーボタン１４、入力操作パネル１５、タッチパッドのようなポインティングデバイス１６、スピーカ１８Ａ，１８Ｂなどが配置されている。入力操作パネル１５上には、各種操作ボタンが設けられている。
【００１１】
また、コンピュータ本体１１の右側面には、ＵＳＢ（universal serial bus）コネクタ１９が設けられている。ＵＳＢコネクタ１９には、様々な周辺デバイス接続することができる。
【００１２】
図２は、コンピュータ１０のシステム構成を示す図である。  
コンピュータ１０は、図２に示されているように、ＣＰＵ１０１、システムコントローラ１０２、主メモリ１０３、グラフィクスプロセッシングユニット（ＧＰＵ）１０５、ビデオＲＡＭ（ＶＲＡＭ）１０５Ａ、サウンドコントローラ１０６、ＢＩＯＳ−ＲＯＭ１０７、ＬＡＮコントローラ１０８、ハードディスクドライブ（ＨＤＤ）１０９、光ディスクドライブ（ＯＤＤ）１１０、ＵＳＢコントローラ１１１Ａ、無線ＬＡＮコントローラ１１２、エンベデッドコントローラ／キーボードコントローラ（ＥＣ／ＫＢＣ）１１３、ＥＥＰＲＯＭ１１４等を備える。
【００１３】
ＣＰＵ１０１は、コンピュータ１０内の各部の動作を制御するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０９から主メモリ１０３にロードされる、オペレーティングシステム（ＯＳ）２１、及び各種アプリケーションプログラムを実行する。アプリケーションプログラムには、ソフトウェア設計支援プログラム２２が含まれている。
【００１４】
ソフトウェア設計支援プログラム２２は、ソフトウェアを設計するためのシーケンス図を作成する機能、シーケンス図に基づく処理を検証する機能、等を有する。ソフトウェア設計支援プログラム２２は、例えば、設計者による操作に応じて作成されたシーケンス図のデータフローに異常があるか否かを検証し、異常箇所や設計者による確認を要する箇所を提示する。
【００１５】
また、ＣＰＵ１０１は、ＢＩＯＳ−ＲＯＭ１０７に格納されたＢＩＯＳも実行する。ＢＩＯＳは、ハードウェア制御のためのプログラムである。
【００１６】
システムコントローラ１０２は、ＣＰＵ１０１のローカルバスと各コンポーネントとの間を接続するブリッジデバイスである。システムコントローラ１０２には、主メモリ１０３をアクセス制御するメモリコントローラも内蔵されている。また、システムコントローラ１０２は、例えば、PCI EXPRESS規格のシリアルバスなどを介してＧＰＵ１０５との通信を実行する機能も有している。
【００１７】
ＧＰＵ１０５は、コンピュータ１０のディスプレイモニタとして使用されるＬＣＤ１７を制御する表示コントローラである。このＧＰＵ１０５によって生成される表示信号はＬＣＤ１７に送られる。
【００１８】
システムコントローラ１０２は、ＰＣＩ（Peripheral Component Interconnect）バス上の各デバイス及びＬＰＣ（Low Pin Count）バス上の各デバイスを制御する。また、システムコントローラ１０２は、ＨＤＤ１０９及びＯＤＤ１１０を制御するためのＩＤＥ（Integrated Drive Electronics）コントローラを内蔵している。さらに、システムコントローラ１０２は、サウンドコントローラ１０６との通信を実行する機能も有している。
【００１９】
サウンドコントローラ１０６は音源デバイスであり、再生対象のオーディオデータをスピーカ１８Ａ，１８Ｂに出力する。ＬＡＮコントローラ１０８は、例えばIEEE 802.3規格の有線通信を実行する有線通信デバイスであり、一方、無線ＬＡＮコントローラ１１２は、例えばIEEE 802.11規格の無線通信を実行する無線通信デバイスである。ＵＳＢコントローラ１１１Ａは、ＵＳＢコネクタ１９を介して接続される外部機器との通信を実行する。
【００２０】
ＥＣ／ＫＢＣ１１３は、電力管理のためのエンベデッドコントローラと、キーボード１３及びタッチパッド１６を制御するためのキーボードコントローラとが集積された１チップマイクロコンピュータである。ＥＣ／ＫＢＣ１１３は、ユーザによるパワーボタン１４の操作に応じてコンピュータ１０を電源オン／電源オフする機能を有している。
【００２１】
次いで、図３及び図４は、並行して行われる複数の処理を含むシーケンス図から、データフローの異常が検出される例を示す。
【００２２】
まず、図３を参照して、シーケンス図３００に含まれる各種の要素を説明する。シーケンス図３００は、オブジェクト間のメッセージの流れを時系列に表すことができる図である。シーケンス図３００には、例えば、ライフライン、ExecutionSpecification、メッセージ、等の要素が含まれる。
【００２３】
ライフライン３０１，３０２，３０３は、オブジェクトやクラスに対応するシーケンス図３００上の記号である。オブジェクトは、ソフトウェアが扱おうとしている現実世界に存在する物理的又は抽象的な実体を、属性（データ）と操作（メソッド）の集合としてモデル化し、コンピュータ上に実現したものである。
【００２４】
ExecutionSpecification３２１〜３２５は、ライフライン（オブジェクト）３０１，３０２，３０３が実行状態にあることを示すシーケンス図上の記号である。
【００２５】
メッセージ３１１〜３１７は、オブジェクト間でデータを送受信するメッセージ、又はオブジェクト内でデータを使用するメッセージを示すシーケンス図上の記号である。メッセージには、同期メッセージと非同期メッセージの２種類のメッセージがある。メッセージは、同期メッセージを示す場合には、先端が塗りつぶされた三角形である矢印（例えば、メッセージ３１１，３１３，３１５，３１６，３１７）で表され、非同期メッセージを示す場合には、先端が塗りつぶされていない矢印（例えば、メッセージ３１２，３１４）で表される。メッセージを同期メッセージと非同期メッセージのいずれに設定するかは、設計されるソフトウェアの動作に応じて、ソフトウェアの設計者によって決定される。
【００２６】
シーケンス図３００上では、メッセージ３１１〜３１７を示す記号（矢印）に、メッセージの内容と受け渡されるデータとが関連付けて記述される。メッセージの内容と受け渡されるデータとは、例えば、メッセージ３１１〜３１７の矢印の上部や右側に記述されている。
【００２７】
また、複数のオブジェクト（ライフライン）の各々に対して、「スレッド」と呼ばれる処理単位が生成され得る。スレッドとして動作するオブジェクト３０１，３０３には、例えば、オブジェクトを示す記号内に“runnable”と記述される。シーケンス図３００では、生成された複数のスレッドが並行して実行されるマルチスレッドの処理を表現することができる。なお、スレッドとして動作しないオブジェクト３０２は、他のオブジェクトによる処理に応じて呼び出されたタイミングで動作を開始する。
【００２８】
図３に示すシーケンス図３００では、メッセージによって、オブジェクト間でのデータの送受信、又はオブジェクト内でのデータの使用が行われている。シーケンス図３００を用いたソフトウェアの設計では、例えば、メッセージによるデータの流れ（データフロー）を追跡することによって、メッセージで使用されるデータが、そのメッセージで利用可能なデータであるか否かを検証することができる。これにより、ソフトウェアが実装される前に、シーケンス図３００が作成された段階でエラーを発見することができる。
【００２９】
データフローは、直接的な接続を有するメッセージ及びExecutionSpecificationを一本道で追跡することによって決定される。シーケンス図３００には、２つのデータフロー３３１，３３２が含まれている。データフロー３３１は、メッセージ３１１〜３１６とExecutionSpecification３２１〜３２４とによって構成される直接的な接続における一本道でのデータの流れを追跡している。また、データフロー３３２は、メッセージ３１７とExecutionSpecification３２５とによって構成される直接的な接続における一本道でのデータの流れを追跡している。
【００３０】
より具体的には、データフロー３３１では、第１オブジェクト３０１は、メッセージ３１１によって、データＡとデータＢとを第２オブジェクト３０２に送信する。第２オブジェクト３０２は、メッセージ３１２によって、第１オブジェクト３０１から受け取ったデータＡを第３オブジェクト３０３に送信する。そして、第３オブジェクト３０３は、メッセージ３１３によって、第２オブジェクト３０２から受け取ったデータＡを使用する。
【００３１】
さらに、データフロー３３１では、第２オブジェクト３０２は、メッセージ３１４によって、第１オブジェクト３０１から受け取ったデータＢを第３オブジェクト３０３に送信する。第３オブジェクト３０３は、メッセージ３１５によって、第２オブジェクト３０２から受け取ったデータＢを使用する。そして、第２オブジェクト３０２は、メッセージ３１６によって、第１オブジェクト３０１から受け取ったデータＢを用いてデータＣを作成する。
【００３２】
このように、メッセージによるデータの流れを追跡することによって、データフロー３３１内の各メッセージで使用されるデータが利用可能なデータであることが確認される。
【００３３】
また、データフロー３３２では、第３オブジェクト３０３は、メッセージ３１７によってデータＡとデータＢとをマージしている。そして、このデータフロー３３２内のメッセージを追跡する方法では、当該データフロー３３２で追跡できる範囲内にデータＡとデータＢとが存在せず、メッセージ３１７が利用可能でないデータＡ及びデータＢを使用するので、メッセージ３１７はデータフローに関する異常を含むと判断される。
【００３４】
しかし、第３オブジェクト３０３による処理では、メッセージ３１７によってデータＡとデータＢとがマージされるよりも前に実行される処理（ExecutionSpecification３２３，３２４）で、メッセージ３１３によってデータＡを使用し、またメッセージ３１５によってデータＢを使用している。したがって、メッセージ３１７で使用されるデータＡとデータＢとは、それらデータＡとデータＢとが過去に使用されているので、第３オブジェクト３０３のローカルに保有されている可能性がある。
【００３５】
このようなデータの使用は、データフロー３３２上での追跡では異常と判断されていても、設計者が以前の処理（以前のデータフロー）のデータを使用することを意図して適切に設計されたものである可能性がある。本実施形態では、このような異常とは断定できないデータの使用と、明らかに異常なデータの使用とをそれぞれ検出することによって、データフローに関する異常の誤検出を低減し、検出精度を高めることができる。また、異常とは断定できないデータの使用箇所については、設計者に確認させることによって、設計者の意図が反映されたソフトウェアの設計及び検証を容易に実現することができる。
【００３６】
また、図４に示すシーケンス図４００には、２つのデータフロー４３１，４３２が含まれている。データフロー４３１は、メッセージ４１１〜４１４，４１６とExecutionSpecification４２１〜４２４，４２６とによって構成される直接的な接続における一本道でのデータの流れを追跡している。また、データフロー４３２は、メッセージ４１５，４１６とExecutionSpecification４２５，４２６とによって構成される直接的な接続における一本道でのデータの流れを追跡している。
【００３７】
より具体的には、データフロー４３１では、第１オブジェクト４０１は、メッセージ４１１によって、データＡとデータＢとデータＣとを第２オブジェクト４０２に送信する。第２オブジェクト４０２は、メッセージ４１２によって、第１オブジェクト４０１から受け取ったデータＡを第３オブジェクト４０３に送信する。そして、第３オブジェクト４０３は、メッセージ４１３によって、第２オブジェクト４０２から受け取ったデータＡを使用する。
【００３８】
さらに、データフロー４３１では、第２オブジェクト４０２は、メッセージ４１４によって、第１オブジェクト４０１から受け取ったデータＢを第３オブジェクト４０３に送信する。そして、第３オブジェクト４０３は、メッセージ４１６によって、データＢとデータＤを使用するが、このデータＤは、データフロー４３１内のメッセージを追跡する方法では存在しないデータである。したがって、メッセージ４１６が利用可能でないデータＤを使用するので、メッセージ４１６はデータフローに関する異常を含むと判断される。
【００３９】
しかし、第３オブジェクト４０３による処理では、メッセージ４１６によってデータＢとデータＤとが使用されるよりも前に実行される処理（ExecutionSpecification４２４）で、別のデータフロー４３２のメッセージ４１５によって、第４オブジェクト４０４から第３オブジェクト４０３にデータＤが送信されている。したがって、メッセージ４１６で使用されるデータＢとデータＤとは、それらデータＢとデータＤとが第３オブジェクト４０３に送信されているので、第３オブジェクト４０３のローカルに保有されている。
【００４０】
このように、シーケンス図４００では、データフロー４３１に対応する処理とデータフロー４３２に対応する処理とが重なっているために、メッセージ４１６はデータフローに関する異常を含むと判断される。このようなデータの使用は、データフロー４３１とデータフロー４３２の各々での追跡だけでは異常と判断されていても、設計者がこれら２つのデータフロー４３１，４３２のデータを併せて使用することを意図して適切に設計されたものである可能性がある。本実施形態では、このような異常の誤検出も低減することができる。
【００４１】
図５及び図６を参照して、本実施形態のコンピュータ１０によって実行されるソフトウェア設計支援プログラム２２の機能構成を説明する。ソフトウェア設計支援プログラム２２は、上述したように、ソフトウェアを設計するためのシーケンス図を作成する機能、シーケンス図に基づく処理を検証する機能、等を有する。ソフトウェア設計支援プログラム２２は、例えば、設計者による操作に応じて作成されたシーケンス図のデータフローに異常があるか否かを検証し、異常箇所や設計者による確認を要する箇所を提示する。ソフトウェア設計支援プログラム２２は、例えば、シーケンス図作成部２２１、シーケンス図解析部２２２、データフロー逆流追跡部２２３、データ欠落誤検出防止部２２４、データフロー異常箇所表示部２２５、等を備える。
【００４２】
まず、シーケンス図作成部２２１は、設計者による操作に応じてシーケンス図２５１を作成する。シーケンス図作成部２２１は、例えば、シーケンス図を構成する各種の要素（例えば、オブジェクト、メッセージ、ExecutionSpecification、等）を作成するためのボタンを含むメニューを表示する。そして、シーケンス図作成部２２１は、そのメニューから選択されたボタンに対応する要素を、指定された位置に配置（表示）することによって、シーケンス図２５１を作成する。
【００４３】
シーケンス図解析部２２２及びデータフロー逆流追跡部２２３は、複数のオブジェクト間でデータを送受信するメッセージとオブジェクト内でデータを使用するメッセージとを含む複数のメッセージの実行が並行して行われる複数の処理を含むシーケンス図２５１を用いて、当該シーケンス図２５１内の関連するメッセージで用いられるデータの流れを追跡することによって、異常があるメッセージの候補を検出する。データフロー逆流追跡部２２３は、シーケンス図２５１内で直接的に接続された１以上のメッセージの内の最後尾のメッセージで用いられるデータの流れを追跡することによって、利用可能でないデータが検出された場合、当該最後尾のメッセージを異常があるメッセージの候補に設定する。
【００４４】
そして、データ欠落誤検出防止部２２４は、シーケンス図２５１を用いて、シーケンス図２５１内の関連しないメッセージで用いられるデータの流れを追跡することによって、異常があるメッセージの候補の内の、異常があるメッセージを検出する。データ欠落誤検出防止部２２４は、例えば、異常があるメッセージの候補に設定された、上述の最後尾のメッセージとは直接的に接続されていない第１メッセージであって、その最後尾のメッセージよりも前に、当該最後尾のメッセージと同一のオブジェクト上で実行される第１メッセージで用いられるデータの流れを追跡することによって、第１データが利用可能であるか否かを検出する。データ欠落誤検出防止部２２４は、第１データが利用可能でないこと検出された場合、最後尾のメッセージを異常があるメッセージに設定する。また、データ欠落誤検出防止部２２４は、第１データが利用可能なデータであることが検出された場合、最後尾のメッセージを異常が誤検出された可能性があるメッセージに設定する。
【００４５】
より具体的には、シーケンス図解析部２２２は、シーケンス図２５１を解析することによってシーケンス情報２５２を抽出する。このシーケンス情報２５２は、例えば、シーケンス図２５１内の各メッセージに対応する実行順序、送信元オブジェクト名、受信先オブジェクト名、メッセージ名、入力データ、出力データ、等を含む。なお、解析されるシーケンス図は、シーケンス図作成部２２１によって作成されたものであってもよいし、予め用意されたシーケンス図（過去に作成されたシーケンス図）であってもよい。
【００４６】
次いで、データフロー逆流追跡部２２３は、シーケンス情報２５２を用いて、利用可能でないデータ（すなわち、未受信のデータ）を入力データとするメッセージがないかどうかを確認する。データフロー逆流追跡部２２３は、シーケンス情報２５２を用いて、データフローを逆流して追跡することによって、利用可能でないデータを入力データとするメッセージがないかどうかを確認する。そして、データフロー逆流追跡部２２３は、利用可能でないデータを入力データとするメッセージが検出された場合、当該メッセージに関する情報をデータフローに関する異常の候補リスト２５３に追加する。データフローに関する異常の候補リスト２５３には、例えば、利用可能でないデータを入力データとするメッセージの実行順序、メッセージ名、入力データ、出力データ、等を含むエントリが追加される。
【００４７】
データ欠落誤検出防止部２２４は、シーケンス情報２５２を用いて、データフローに関する異常の候補リスト２５３に含まれる候補メッセージについて、利用可能でないと判定されている入力データが、別のデータフローに属する過去のメッセージの入力データとして受信されていないかどうかを確認する。利用可能でないと判定されている入力データが、過去のメッセージの入力データとして受信されている場合には、データ欠落誤検出防止部２２４は、候補メッセージに関する入力データが利用できない（欠落）というデータフロー逆流追跡部２２３による判定が誤検出である可能性があると判定する。
【００４８】
一方、利用可能でないと判定されている入力データが、過去のメッセージの入力データとして受信されていない場合には、データ欠落誤検出防止部２２４は、候補メッセージに関する入力データが利用できないという判定を確定し、当該候補メッセージに対応するエントリをデータフローに関する異常のリスト２５４に追加する。この追加されるエントリには、例えば、メッセージの実行順序、メッセージ名、入力データ、出力データ、等が含まれる。以上により、データ欠落誤検出防止部２２４は、異常の候補リスト２５３に含まれる候補メッセージを、異常があるメッセージと、異常が誤検出された可能性があるメッセージ（すなわち、設計者による確認を要するメッセージ）とに分別する。
【００４９】
次いで、データフロー異常箇所表示部２２５は、データフローに関する異常の候補リスト２５３と、データフローに関する異常のリスト２５４とを用いて、シーケンス図２５１内のデータフローに関する異常箇所と異常が誤検出された可能性がある箇所とを強調して表示する。データフロー異常箇所表示部２２５は、データフローに関する異常箇所を含む第１領域を、第１の色（例えば、赤）の枠で囲んで表示し、データフローに関する異常が誤検出された可能性がある箇所を含む第２領域を、第２の色（例えば、青）の枠で囲んで表示する。
【００５０】
また、データフロー異常箇所表示部２２５は、異常がある入力データ（すなわち、利用可能でない入力データ）を示す情報を、画面に表示されたシーケンス図２５１上に表示する。さらに、データフロー異常箇所表示部２２５は、異常の可能性がある入力データ（すなわち、利用可能でない可能性がある入力データ）を示す情報を、画面に表示されたシーケンス図２５１上に表示し、当該データが別のデータフローに属する過去のメッセージの入力データとして受信されていることが、設計者によって意図されたものであるかどうかを確認するためのボタン等を表示してもよい。
【００５１】
以下では、上述したソフトウェア設計支援プログラム２２内の各部について、図７に示すシーケンス図５００が分析対象である場合について具体的に説明する。  
シーケンス図５００では、第１オブジェクト５０１による処理は、オブジェクトが実行状態であることを示すExecutionSpecification５２１を含む。第２オブジェクト５０２による処理はExecutionSpecification５２２を含む。第３オブジェクト５０３による処理はExecutionSpecification５２３，５２５，５２７を含む。また、第４オブジェクト５０４による処理はExecutionSpecification５２４，５２６を含む。
【００５２】
また、シーケンス図５００は以下のメッセージの流れを含む。  
第１オブジェクト５０１は、メッセージ５１１によって、データＡ、データＢ及びデータＣを第２オブジェクト５０２に送信する。第２オブジェクト５０２は、メッセージ５１２によって、データＡを第３オブジェクト５０３に送信する。第３オブジェクト５０３は、メッセージ５１３によって、データＡを使用する。
【００５３】
次いで、第２オブジェクト５０２は、メッセージ５１４によって、データＣを第４オブジェクト５０４に送信する。第４オブジェクト５０４は、メッセージ５１５によって、データＣを用いてデータＤを作成する。そして、第２オブジェクト５０２は、メッセージ５１６によって、データＢを第３オブジェクト５０３に送信する。
【００５４】
また、第４オブジェクト５０４は、メッセージ５１７によって、データＤを第３オブジェクト５０３に送信する。そして、第３オブジェクト５０３は、メッセージ５１８によって、データＢとデータＤとを使用する。
【００５５】
図７に示すように、シーケンス図解析部２２２は、シーケンス図５００から、ライフライン化されたオブジェクト５０１，５０２，５０３，５０４のオブジェクト名とステレオタイプとを検出する。シーケンス図解析部２２２は、第１オブジェクト５０１、第３オブジェクト５０２及び第４オブジェクト５０４のステレオタイプが“runnable”であることを検出する。この“runnable”は、第１オブジェクト５０１、第３オブジェクト５０３及び第４オブジェクト５０４が、スレッドとして動作するオブジェクトであることを示す。そして、シーケンス図解析部２２２は、シーケンス図５００から、当該シーケンス図５００上のメッセージ毎に、送信元オブジェクト、受信先オブジェクト、メッセージ（メッセージ名）、入力データ（引数）、及び出力データ（返り値）を検出する。
【００５６】
次いで、図８に示すように、シーケンス図解析部２２２は、シーケンス図５００に含まれるメッセージ５１１〜５１８に実行順序を付与する。より具体的には、シーケンス図解析部２２２は、まず、シーケンス図５００内の最上部にあるメッセージ５１１に、実行順序“１”を付与する。
【００５７】
そして、シーケンス図解析部２２２は、この最上部のメッセージ５１１に後続するメッセージ（以下、処理対象のメッセージとも称する）５１２に実行順序を付与する。シーケンス図解析部２２２は、メッセージ５１２の直前のメッセージ５１１が同期メッセージと非同期メッセージのいずれであるかと、メッセージ５１２の送信元オブジェクトと受信先オブジェクトとが同じであるか否かとに応じて、実行順序を決定する。
【００５８】
より具体的には、シーケンス図解析部２２２は、直前のメッセージ５１１が同期メッセージであり、且つ処理対象のメッセージ５１２の送信元オブジェクトと受信先オブジェクトとが同じである場合、直前のメッセージ５１１に付与された実行順序の最後尾の数字に１を加えた実行順序を処理対象のメッセージ５１２に付与する。シーケンス図解析部２２２は、直前のメッセージ５１１が同期メッセージであり、且つ処理対象のメッセージ５１２の送信元オブジェクトと受信先オブジェクトとが異なる場合、直前のメッセージ５１１に付与された実行順序の最後尾に、ドット“．”と数字（例えば、“１”から順次増加する数字）とが追加された実行順序をメッセージ５１２に付与する。また、シーケンス図解析部２２２は、直前のメッセージ５１１が非同期メッセージである場合、直前のメッセージ５１１の実行順序の後にアルファベット（例えば、“ａ”）と数字（例えば、“１”から順次増加する数字）とが追加された実行順序をメッセージ５１２に付与する。
【００５９】
図８に示す処理対象のメッセージ５１２は、その直前のメッセージ５１１が同期メッセージであり、且つメッセージ５１２の送信元オブジェクトと受信先オブジェクトとが異なるので、シーケンス図解析部２２２は、直前のメッセージ５１１に付与された実行順序“１”の最後尾に、ドット“．”と数字“１”とが追加された実行順序“１．１”をメッセージ５１２に付与する。
【００６０】
次いで、シーケンス図解析部２２２は、同様にして、メッセージ５１２に後続するメッセージ５１３の実行順序を決定する。メッセージ５１３は、その直前のメッセージ５１２が非同期メッセージであるので、シーケンス図解析部２２２は、直前のメッセージ５１２の実行順序“１．１”の後にアルファベット“ａ”と数字“１”とが追加された実行順序“１．１ａ１”をメッセージ５１３に付与する。さらに、シーケンス図解析部２２２は、同様にして、メッセージ５１４に実行順序“１．２”を付与し、メッセージ５１５に“１．２ａ１”を付与し、メッセージ５１６に実行順序“１．３”を付与する。
【００６１】
メッセージ５１１からメッセージ５１６までの一筆で追跡できるメッセージ群（以下、第１メッセージ群とも称する）に実行順序が付与された後、シーケンス図解析部２２２は、この第１メッセージ群から独立したメッセージ５１７に、第１メッセージ群に付与された実行順序の最上位の数字“１”に１を加えた実行順序“２”を付与する。そして、シーケンス図解析部２２２は、メッセージ５１７に後続するメッセージ５１８の実行順序を決定する。メッセージ５１８は、その直前のメッセージ５１７が非同期メッセージであるので、シーケンス図解析部２２２は、直前のメッセージ５１７の実行順序“２”の後にアルファベット“ａ”と数字“１”とが追加された実行順序“２ａ１”をメッセージ５１８に付与する。  
以上により、シーケンス図５００内の全てのメッセージ５１１〜５１８に実行順序を付与することができる。
【００６２】
図９は、シーケンス図解析部２２２によって生成される、シーケンス図５００に対応するシーケンス情報２５２を示す。シーケンス情報２５２は、複数のメッセージ５１１〜５１８に対応する複数のエントリを含む。各エントリは、例えば、実行順序、送信元オブジェクト、受信先オブジェクト、メッセージ、入力データ、出力データ、等を含む。
【００６３】
あるメッセージに対応するエントリにおいて、「実行順序」は、当該メッセージに付与された実行順序を示す。「送信元オブジェクト」は、当該メッセージを送信するオブジェクトを示す。「受信先オブジェクト」は、当該メッセージを受信するオブジェクトを示す。「送信元オブジェクト」と「受信先オブジェクト」とは、メッセージが、例えば１つのオブジェクト内でデータを使用するメッセージである場合、同一のオブジェクトである。
【００６４】
「メッセージ」は、当該メッセージの内容を示す。「入力データ」は、受信先オブジェクトに入力されるデータを示す。「出力データ」は、受信先オブジェクトによって出力されるデータを示す。換言すると、「入力データ」に示されるデータはメッセージの引数であり、「出力データ」に示されるデータはメッセージの返り値であると云える。「入力データ」及び「出力データ」の各々には、複数のデータが設定されてもよいし、いずれのデータも設定されなくてもよい。
【００６５】
データフロー逆流追跡部２２３は、上述のように生成されたシーケンス情報２５２を用いて、各メッセージで使用されるデータが、データフロー上で切れ目なく流れていることを、シーケンス図５００を逆流して確認する。つまり、データフロー逆流追跡部２２３は、メッセージを実行するために使用される入力データが利用可能であるかどうかを確認する。データフロー逆流追跡部２２３は、例えば、データを使用するメッセージを起点に、データの送信元方向へ、データフローを逆流して追跡することにより、そのデータフローが利用可能なデータだけを使っているかどうかを決定する。
【００６６】
より具体的には、データフロー逆流追跡部２２３は、実行順序の最上位の数字が同じ第１メッセージ群の内、最後尾の実行順序を有するメッセージを処理対象のメッセージに設定する。データフロー逆流追跡部２２３は、シーケンス図解析部２２２によって生成されたシーケンス情報２５２から、処理対象のメッセージの入力データ（以下、第１入力データと称する）と出力データ（以下、第１出力データと称する）とを読み出す。また、データフロー逆流追跡部２２３は、シーケンス情報２５２から、第１メッセージ群の内、処理対象のメッセージの直前の実行順序を有するメッセージの入力データ（以下、第２入力データと称する）と出力データ（以下、第２出力データと称する）とを読み出す。
【００６７】
データフロー逆流追跡部２２３は、読み出された第１入力データ、第１出力データ、第２入力データ、及び第２出力データを用いて、処理対象のメッセージがデータフローに関する異常の候補であるか否かを決定する。データフロー逆流追跡部２２３は、第１入力データが第２入力データに含まれる場合、又は第１入力データが第２出力データに含まれ、且つ第２入力データにいずれのデータも含まれていない場合、処理対象のメッセージが異常の候補でないことを決定する。
【００６８】
また、データフロー逆流追跡部２２３は、第１入力データが第２入力データと第２出力データのいずれにも含まれていない場合、又は第１入力データが第２入力データに含まれず、且つ第２入力データに少なくとも一つのデータが含まれている場合、処理対象のメッセージが異常の候補であることを決定する（すなわち、処理対象のメッセージを異常があるメッセージの候補に設定する）。つまり、データフロー逆流追跡部２２３は、処理対象のメッセージの第１入力データが、当該メッセージの実行に利用可能でないと判断する。データフロー逆流追跡部２２３は、処理対象のメッセージが異常の候補である場合、当該メッセージに対応するシーケンス情報２５２のエントリを、データフローに関する異常の候補リスト２５３に追加する。なお、データフロー逆流追跡部２２３は、第１入力データに複数のデータ（例えば、データＡとデータＢ）が含まれる場合には、データフローに関する異常の候補リスト２５３において、異常が検出された少なくとも一つのデータ（処理対象のメッセージの実行に利用可能でないデータ）が判別できるようにしてもよい。
【００６９】
図１０及び図１１に示すように、データフロー５３１では、メッセージ５１３の入力データ（第１入力データ）であるデータＡが、その直前のメッセージ５１２の入力データ（第２入力データ）であるデータＡに含まれるので、データフロー逆流追跡部２２３は、メッセージ５１３が異常の候補でないことを決定する。同様に、メッセージ５１２の入力データ（第１入力データ）であるデータＡが、その直前のメッセージ５１１の入力データ（第２入力データ）であるデータＡ、データＢ及びデータＣに含まれるので、データフロー逆流追跡部２２３は、メッセージ５１２が異常の候補でないことを決定する。
【００７０】
また、図１２及び図１３に示すように、データフロー５３２では、メッセージ５１８の入力データ（第１入力データ）であるデータＢ及びデータＤの内のデータＢが、その直前のメッセージ５１７の入力データ（第２入力データ）であるデータＤと、当該メッセージ５１７の出力データ（第２出力データ）とのいずれにも含まれていないので、データフロー逆流追跡部２２３は、第１入力データの内のデータＢが利用可能でなく、メッセージ５１８が異常の候補であることを決定する。データフロー逆流追跡部２２３は、この決定に応じて、シーケンス情報２５２の内のメッセージ５１８に対応するエントリを、データフローに関する異常の候補リスト２５３に追加する。なお、データフロー逆流追跡部２２３は、利用可能でないデータがデータＢであることが判別できるように、当該エントリを追加してもよい。  
データフロー逆流追跡部２２３は、同様にして、シーケンス図５００内の他のメッセージがデータフローに関する異常の候補であるか否かを決定する。
【００７１】
次いで、データ欠落誤検出防止部２２４は、データフローに関する異常の候補であるメッセージの利用可能でない入力データが、そのメッセージを含むExecutionSpecificationよりも前のExecutionSpecification（すなわち、データの使用箇所以前の過去のExecutionSpecification）で受け取られているかどうかを判定する。つまり、データ欠落誤検出防止部２２４は、データフロー逆流追跡部２２３によって検出された、入力データが利用可能でないこと（欠落）が誤検出でないかどうかを判定する。
【００７２】
より具体的には、データ欠落誤検出防止部２２４は、データフローに関する異常の候補リスト２５３から、データフローに関する異常の候補である１つのメッセージ（以下、候補メッセージと称する）に対応する入力データ（以下、第１入力データと称する）と、出力データ（以下、第１出力データと称する）とを読み出す。また、データ欠落誤検出防止部２２４は、シーケンス情報２５２から、この候補メッセージよりも実行順序の最上位の数字が小さく、且つ受信先オブジェクトが当該候補メッセージと同じである第２メッセージ群の内、最後尾の実行順序のメッセージに対応する入力データ（以下、第２入力データと称する）と出力データ（以下、第２出力データと称する）とを読み出す。
【００７３】
次いで、データ欠落誤検出防止部２２４は、第１入力データ、第１出力データ、第２入力データ、及び第２出力データを用いて、データフロー逆流追跡部２２３によって判断された第１入力データが利用可能でないことが、誤検出である可能性があるか否かを判定する。第１入力データが第２入力データに含まれる場合、又は第１入力データが第２出力データに含まれ、且つ第２入力データにデータが含まれていない場合、データ欠落誤検出防止部２２４は、第１入力データが利用可能でないことが誤検出である可能性があることを決定する。つまり、データ欠落誤検出防止部２２４は、候補メッセージを異常が誤検出された可能性があるメッセージに設定する。したがって、この候補メッセージは、データフローに関する異常のリスト２５４に追加されない。
【００７４】
また、第１入力データが第２入力データと第２出力データのいずれにも含まれていない場合、又は第１入力データが第２入力データに含まれず、且つ第２入力データに少なくとも一つのデータが含まれている場合、データ欠落誤検出防止部２２４は、候補メッセージを異常があるメッセージに設定する。データ欠落誤検出防止部２２４は、この設定に応じて、データフローに関する異常の候補リスト２５３（又はシーケンス情報２５２）の内の、候補メッセージに対応するエントリを、データフローに関する異常のリスト２５４に追加する。
【００７５】
図１４及び図１５に示す例では、データフロー逆流追跡部２２３によって利用可能でないと判断された候補メッセージ５１８の入力データ（第１入力データ）であるデータＢが、メッセージ５１６の入力データ（第２入力データ）であるデータＢに含まれている。このメッセージ５１６は非同期メッセージである。また、メッセージ５１６は、メッセージ５１８の実行順序“２ａ１”よりも小さい最上位の数字を含む実行順序（すなわち、最上位が“１”）であり、且つ受信先オブジェクトが当該候補メッセージと同じ第３オブジェクト５０３である第２メッセージ群の内の、最後尾の実行順序“１．３”であるメッセージである。よって、データ欠落誤検出防止部２２４は、候補メッセージ５１８の入力データ（第１入力データ）であるデータＢが利用可能でないことが誤検出である可能性があることを決定する。データ欠落誤検出防止部２２４は、候補メッセージ５１８の入力データ（第１入力データ）であるデータＢが利用可能でないことが誤検出である可能性がある場合、候補メッセージ５１８に対応するエントリを、データフローに関する異常のリスト２５４に追加しない。これにより、データが利用可能でないという誤検出を低減することができる。
【００７６】
データフロー異常箇所表示部２２５は、データフローに関する異常のリスト２５４とデータフローに関する異常の候補リスト２５３とを用いて、異常があるメッセージと異常が誤検出された可能性があるメッセージの少なくとも一方を強調して表示する。データフロー異常箇所表示部２２５は、例えば、ユーザ操作によって、シーケンス図５００内の異常が誤検出された可能性があるメッセージを含む第１領域が指示された場合、当該異常が誤検出された可能性があるメッセージを強調して表示する。また、データフロー異常箇所表示部２２５は、ユーザ操作によって、シーケンス図５００内の異常があるメッセージを含む第２領域が指示された場合、当該異常があるメッセージを強調して表示する。
【００７７】
データフロー異常箇所表示部２２５は、例えば、メッセージのような要素が追加される毎に、データフロー逆流追跡部２２３及びデータ欠落誤検出防止部２２４による処理結果に基づいて、データフローの異常箇所や異常が誤検出された可能性がある箇所、等を表示（更新）してもよい。
【００７８】
図１６及び図１７に示す例では、メッセージ６１５の入力データであるデータＣが、データフロー上のメッセージ６１５以前のメッセージ６１１〜６１４の入力データと出力データのいずれにも含まれていないので、データフロー逆流追跡部２２３及びデータ欠落誤検出防止部２２４は、メッセージ６１５に異常があることを決定する。
【００７９】
より具体的には、図１６には、データフローの異常箇所６６を含むシーケンス図６００が示されている。シーケンス図６００内のメッセージ６１５の入力データ（第１入力データ）はデータＢ及びデータＣである。これらデータＢ及びデータＣの内のデータＣは、その直前のメッセージ６１４の入力データ（第２入力データ）であるデータＢと、当該メッセージ６１４の出力データ（第２出力データ）とのいずれにも含まれていない。さらに、データＣは、メッセージ６１４の直前のメッセージ６１３の入力データであるデータＡと、当該メッセージ６１３の出力データとにも含まれていない。そのため、データフロー逆流追跡部２２３は、メッセージ６１５の第１入力データ内のデータＣが利用可能でなく、メッセージ６１５が異常の候補であることを決定する。
【００８０】
また、データ欠落誤検出防止部２２４は、メッセージ６１５よりも実行順序の最上位の数字が小さいメッセージがないので、メッセージ６１５の入力データの内のデータＣが利用可能でなく、メッセージ６１５に異常があることを決定する。
【００８１】
図１６に示すように、データフロー異常箇所表示部２２５は、上述の結果に基づき、ユーザ（設計者）がシーケンス図６００上の異常があるメッセージ６１５を含む所定の領域６６にフォーカスを当てたこと（例えば、ポインティングデバイス等を用いて指示される位置を示すカーソルが所定の領域６６内に入ったこと）に応じて、当該メッセージ６１５を強調して表示し、利用可能でないデータＣを示す情報をポップアップ画面６５で表示する。データフロー異常箇所表示部２２５は、例えば、指定された色（例えば、赤）の枠で囲まれた当該所定の領域６６を表示する。
【００８２】
また、図１８に示す例では、図１２から図１５を参照して説明したように、データフロー逆流追跡部２２３によって利用可能でないと判断された候補メッセージ５１８の入力データ（第１入力データ）であるデータＢが、メッセージ５１６の入力データ（第２入力データ）であるデータＢに含まれている。そのため、データ欠落誤検出防止部２２４は、候補メッセージ５１８の入力データ（第１入力データ）であるデータＢが利用可能でないことが誤検出である可能性があることを決定している（すなわち、候補メッセージ５１８が、異常が誤検出された可能性があるメッセージに設定されている）。
【００８３】
データフロー異常箇所表示部２２５は、候補メッセージ５１８が、異常が誤検出された可能性があるメッセージに設定され、ユーザ操作によってシーケンス図５００内の候補メッセージ５１８を含む領域が指示された場合、候補メッセージ５１８を含む領域５６とメッセージ５１６を含む領域５７の少なくとも一方を強調して表示する。また、データフロー異常箇所表示部２２５は、利用可能でないことが誤検出である可能性があるデータＢを示す情報をポップアップ画面５５で表示する。このシーケンス図５００（ポップアップ画面５５）上にはさらに、このデータＢの使用が意図通りのものであるかどうかを確認するためのボタン等が設けられてもよい。
【００８４】
このような表示により、設計者に、データＢが利用できないことが誤検出であること、すなわち、データＢの利用が設計者の意図したものであることを最終的に確認させ、設計品質の向上を実現することができる。
【００８５】
以上の構成により、並行して行われる複数の処理を含むシーケンス図からデータフローの異常を精度良く検出することができ、またデータフローの異常箇所と異常が誤検出された可能性がある箇所とに関する情報をユーザに提示することができる。
【００８６】
次いで、図１９のフローチャートを参照して、コンピュータ１０によって実行されるシーケンス図作成支援処理の手順の例を説明する。  
まず、シーケンス図解析部２２２は、分析対象となるシーケンス図２５１を受け取る（ブロックＢ１１）。シーケンス図解析部２２２は、受け取ったシーケンス図２５１を用いて、シーケンス情報２５２を生成する（ブロックＢ１２）。
【００８７】
データフロー逆流追跡部２２３は、シーケンス情報２５２を用いて、最後尾にある出力データを起点に、メッセージの流れを逆に追跡することによって、使用されるデータに未受信のデータがないかを確認する（ブロックＢ１３）。データフロー逆流追跡部２２３は、この確認結果に基づいてデータフローに関する異常があるか否かを判定する（ブロックＢ１４）。データフローに関する異常がない場合（ブロックＢ１４のＮＯ）、処理を終了する。
【００８８】
データフローに関する異常がある場合（ブロックＢ１４のＹＥＳ）、データ欠落誤検出防止部２２４は、未受信データの使用以前に、当該未受信データを使用するオブジェクトがそのデータを受け取っていないかを確認する（ブロックＢ１５）。データ欠落誤検出防止部２２４は、この確認結果に基づいてデータフローに関する異常があるか否かを判定する（ブロックＢ１６）。データフローに関する異常がない場合（ブロックＢ１６のＮＯ）、例えば、未受信データの使用以前にそのデータが受け取られている場合、処理を終了する。
【００８９】
データフローに関する異常がある場合（ブロックＢ１６のＹＥＳ）、データフロー異常箇所表示部２２５は、シーケンス図２５１上に、データフローに関する異常箇所を強調して表示する（ブロックＢ１７）。
【００９０】
次いで、図２０から図２３のフローチャートを参照して、図１９のシーケンス図作成支援処理の詳細な手順について説明する。
【００９１】
図２０のフローチャートは、シーケンス図解析部２２２によって実行されるシーケンス図解析処理の手順の例を示す。  
まず、シーケンス図解析部２２２は、分析対象となるシーケンス図２５１を受け取る（ブロックＢ２０１）。シーケンス図解析部２２２は、受け取ったシーケンス図２５１から、オブジェクトの名称と、当該オブジェクトのステレオタイプとを検出する（ブロックＢ２０２）。そして、シーケンス図解析部２２２は、シーケンス図２５１から、当該シーケンス図２５１上のメッセージ毎に、メッセージ名、入力データ（引数）、出力データ（返り値）、送信元オブジェクト、及び受信先オブジェクトを検出する（ブロックＢ２０３）。
【００９２】
シーケンス図解析部２２２は、シーケンス図２５１内の最上部にあるメッセージの実行順序に“１”を付与する（ブロックＢ２０４）。そして、シーケンス図解析部２２２は、最上部にあるメッセージに後続するメッセージを処理対象のメッセージに設定する（ブロックＢ２０５）。シーケンス図解析部２２２は、処理対象のメッセージの直前のメッセージが非同期メッセージであるか否かを判定する（ブロックＢ２０６）。直前のメッセージが非同期メッセージである場合（ブロックＢ２０６のＹＥＳ）、シーケンス図解析部２２２は、直前のメッセージに付与された実行順序の後にアルファベット（例えば、“ａ”）を追加し、その後に数字を順次（例えば、“１”から順に）付与した実行順序を、処理対象のメッセージに付与し（ブロックＢ２０７）、ブロックＢ２１１に進む。
【００９３】
直前のメッセージが非同期メッセージでない場合（ブロックＢ２０６のＮＯ）、すなわち、同期メッセージである場合、シーケンス図解析部２２２は、処理対象のメッセージの送信元オブジェクトと受信先オブジェクトとが同じであるか否かを判定する（ブロックＢ２０８）。送信元オブジェクトと受信先オブジェクトとが同じである場合（ブロックＢ２０８のＹＥＳ）、シーケンス図解析部２２２は、直前のメッセージに付与された実行順序の最後尾の数字を１だけ増加させた実行順序を、処理対象のメッセージに付与する（ブロックＢ２０９）。また、送信元オブジェクトと受信先オブジェクトとが同じでない場合（ブロックＢ２０８のＮＯ）、シーケンス図解析部２２２は、直前のメッセージに付与された実行順序に、ドット“．”と数字とを付与した実行順序を、処理対象のメッセージに付与する（ブロックＢ２１０）。
【００９４】
そして、シーケンス図解析部２２２は、一筆で追跡可能な全メッセージに実行順序が付与されたか否かを判定する（ブロックＢ２１１）。一筆で追跡可能な全メッセージに実行順序が付与されていない場合（ブロックＢ２１１のＮＯ）、ブロックＢ２０５に戻る。一方、一筆で追跡可能な全メッセージに実行順序が付与されている場合（ブロックＢ２１１のＹＥＳ）、シーケンス図解析部２２２は、実行順序が付与されたメッセージから独立したメッセージに、直前に追跡されたメッセージ群に付与された実行順序の最上位の数字を１だけ増加させた実行順序を付与する（ブロックＢ２１２）。
【００９５】
次いで、シーケンス図解析部２２２は、シーケンス図２５１内の全てのメッセージに実行順序が付与されたか否かを判定する（ブロックＢ２１３）。シーケンス図２５１内に実行順序が付与されていないメッセージがある場合（ブロックＢ２１３のＮＯ）、ブロックＢ２０５に戻る。シーケンス図２５１内の全てのメッセージに実行順序が付与されている場合（ブロックＢ２１３のＹＥＳ）、処理を終了する。
【００９６】
図２１のフローチャートは、データフロー逆流追跡部２２３によって実行されるデータフロー逆流追跡処理の手順の例を示す。
【００９７】
まず、データフロー逆流追跡部２２３は、実行順序の最上位の数字が同じ第１メッセージ群の内、最後尾の実行順序を有するメッセージを処理対象のメッセージに設定する（ブロックＢ３０１）。データフロー逆流追跡部２２３は、シーケンス図解析部２２２によって生成されたシーケンス情報２５２から、処理対象のメッセージの入力データ（第１入力データ）と出力データ（第１出力データ）とを読み出す（ブロックＢ３０２）。また、データフロー逆流追跡部２２３は、シーケンス情報２５２から、第１メッセージ群の内、処理対象のメッセージの直前の実行順序を有するメッセージの入力データ（第２入力データ）と出力データ（第２出力データ）とを読み出す（ブロックＢ３０３）。
【００９８】
次いで、データフロー逆流追跡部２２３は、第１入力データが第２入力データに含まれるか否かを判定する（ブロックＢ３０４）。第１入力データが第２入力データに含まれていない場合（ブロックＢ３０４のＮＯ）、データフロー逆流追跡部２２３は、第１入力データが第２出力データに含まれ、且つ第２入力データに値が設定されていない（すなわち、直前のメッセージに入力データがない）か否かを判定する（ブロックＢ３０５）。第１入力データが第２出力データに含まれない、又は第２入力データに値が設定されている場合（ブロックＢ３０５のＮＯ）、処理対象のメッセージを、データフローに関する異常の候補リスト２５３に追加し（ブロックＢ３０６）、ブロックＢ３０７に進む。データフローに関する異常の候補リスト２５３には、例えば、シーケンス情報２５２内の、処理対象のメッセージに対応するエントリが追加される。
【００９９】
第１入力データが第２入力データに含まれる場合（ブロックＢ３０４のＹＥＳ）、又は第１入力データが第２出力データに含まれ、且つ第２入力データに値が設定されていない場合（ブロックＢ３０５のＹＥＳ）、ブロックＢ３０７に進む。
【０１００】
そして、データフロー逆流追跡部２２３は、全てのメッセージの入力データについて調査が完了したか否かを判定する（ブロックＢ３０７）。全てのメッセージの入力データについて調査が完了していない場合（ブロックＢ３０７のＮＯ）、ブロックＢ３０１に戻る。全てのメッセージの入力データについて調査が完了している場合（ブロックＢ３０７のＹＥＳ）、処理を終了する。
【０１０１】
図２２のフローチャートは、データ欠落誤検出防止部２２４によって実行されるデータ欠落誤検出防止処理の手順の例を示す。
【０１０２】
まず、データ欠落誤検出防止部２２４は、データフローに関する異常の候補リスト２５３の内の、１つの候補メッセージに対応する入力データ（第１入力データ）と出力データ（第１出力データ）とを読み出す（ブロックＢ４０１）。データ欠落誤検出防止部２２４は、シーケンス情報２５２から、この候補メッセージよりも実行順序の最上位の数字が小さく、且つ受信先オブジェクトが当該候補メッセージと同じである第２メッセージ群の内、最後尾の実行順序のメッセージに対応する入力データ（第２入力データ）と出力データ（第２出力データ）とを読み出す（ブロックＢ４０２）。
【０１０３】
次いで、データ欠落誤検出防止部２２４は、第１入力データが第２入力データに含まれているか否かを判定する（ブロックＢ４０３）。第１入力データが第２入力データに含まれていない場合（ブロックＢ４０３のＮＯ）、データ欠落誤検出防止部２２４は、第１入力データが第２出力データに含まれ、且つ第２入力データに値が設定されていない（すなわち、第２メッセージ群の内の最後尾の実行順序のメッセージに入力データがない）か否かを判定する（ブロックＢ４０４）。第１入力データが第２出力データに含まれていない場合、又は第２入力データに値が設定されている場合（ブロックＢ４０４のＮＯ）、データ欠落誤検出防止部２２４は、第２メッセージ群に含まれる全てのメッセージの入力データについて調査が完了したか否かを判定する（ブロックＢ４０５）。第２メッセージ群に含まれる全てのメッセージの入力データについて調査が完了していない場合（ブロックＢ４０５のＮＯ）、データ欠落誤検出防止部２２４は、シーケンス情報２５２から、第２メッセージ群の内、次に早い実行順序を有するメッセージの入力データ（第２入力データ）と出力データ（第２出力データ）とを読み出し（ブロックＢ４０６）、ブロックＢ４０３に戻る。
【０１０４】
また、第２メッセージ群の全ての入力データとついて調査が完了している場合（ブロックＢ４０５のＹＥＳ）、データ欠落誤検出防止部２２４は、候補メッセージを、データフローに関する異常のリスト２５４に追加し（ブロックＢ４０７）、ブロックＢ４０８に進む。
【０１０５】
さらに、第１入力データが第２入力データに含まれる場合（ブロックＢ４０３のＹＥＳ）、又は第１入力データが第２出力データに含まれ、且つ第２入力データに値が設定されていない場合（ブロックＢ４０４のＹＥＳ）、ブロックＢ４０８に進む。
【０１０６】
次いで、データ欠落誤検出防止部２２４は、異常の候補リストに他の候補メッセージがあるか否かを判定する（ブロックＢ４０８）。他の候補メッセージがある場合（ブロックＢ４０８のＹＥＳ）、ブロックＢ４０１に戻る。他の候補メッセージがない場合（ブロックＢ４０８のＮＯ）、処理を終了する。
【０１０７】
図２３のフローチャートは、データフロー異常箇所表示部２２５によって実行されるデータフロー異常箇所表示処理の手順の例を示す。
【０１０８】
まず、データフロー異常箇所表示部２２５は、データフローに関する異常のリスト２５４に含まれるメッセージに対応する、シーケンス図２５１内のメッセージを第１の枠（例えば、赤色の枠）で囲んで表示し、異常が検出された入力データ名をポップアップ画面で表示する（ブロックＢ５１）。
【０１０９】
次いで、データフロー異常箇所表示部２２５は、ユーザが、所定箇所にフォーカスを当てたか否かを判定する（ブロックＢ５２）。データフロー異常箇所表示部２２５は、例えば、シーケンス図２５１上の領域が、ポインティングデバイス等を用いて指示されたか否かを判定する。所定箇所にフォーカスが当てられ（ブロックＢ５２のＹＥＳ）、フォーカスを当てられたメッセージが、データフローに関する異常のリスト２５４に含まれず、且つデータフローに関する異常の候補リスト２５３に含まれている場合（すなわち、所定箇所が、データフローに関する異常のリスト２５４に含まれず、且つデータフローに関する異常の候補リスト２５３に含まれるメッセージに対応する、シーケンス図２５１上の領域内である場合）、そのメッセージを第２の枠（例えば、青色の枠）で囲んで表示し、異常の候補として検出された入力データ名をポップアップ画面で表示する（ブロックＢ５３）。
【０１１０】
そして、データフロー異常箇所表示部２２５は、所定箇所からフォーカスが外されたか否かを判定する（ブロックＢ５４）。所定箇所からフォーカスが外されていない場合（ブロックＢ５４のＮＯ）、ブロックＢ５３に戻り、所定箇所に関する表示処理が続行される。フォーカスが外されている場合（ブロックＢ５４のＹＥＳ）、処理を終了する。また、所定箇所にフォーカスが当てられていない場合（ブロックＢ５２のＮＯ）、処理を終了する。
【０１１１】
以上説明したように、本実施形態によれば、並行して行われる複数の処理を含むシーケンス図からデータフローの異常を精度良く検出することができる。シーケンス図解析部２２２及びデータフロー逆流追跡部２２３は、複数のオブジェクト間でデータを送受信するメッセージとオブジェクト内でデータを使用するメッセージとを含む複数のメッセージの実行が並行して行われる複数の処理を含むシーケンス図を用いて、当該シーケンス図内の関連するメッセージで用いられるデータの流れを追跡することによって、異常があるメッセージの候補を検出する。データ欠落誤検出防止部２２４は、シーケンス図を用いて、当該シーケンス図内の関連しないメッセージで用いられるデータの流れを追跡することによって、異常があるメッセージの候補の内の、異常があるメッセージを検出する。
【０１１２】
これにより、例えば時系列ではバラバラである、関連しないメッセージも考慮して、データの流れの異常をまとめてチェックし、シーケンス図からデータフローの異常を精度良く検出することができる。
【０１１３】
なお、図１９から図２３のフローチャートで説明した本実施形態の処理手順は全てソフトウェアによって実行することができる。このため、この処理手順を実行するプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのプログラムを通常のコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
【０１１４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１１５】
２２…ソフトウェア設計支援プログラム、２２１…シーケンス図作成部、２２２…シーケンス図解析部、２２３…データフロー逆流追跡部、２２４…データ欠落誤検出防止部、２２５…データフロー異常箇所表示部、２５１…シーケンス図、２５２…シーケンス情報、２５３…データフローに関する異常の候補リスト、２５４…データフローに関する異常のリスト。
【図１】
2015170075.tif 000003
【図２】
2015170075.tif 000004
【図３】
2015170075.tif 000005
【図４】
2015170075.tif 000006
【図５】
2015170075.tif 000007
【図６】
2015170075.tif 000008
【図７】
2015170075.tif 000009
【図８】
2015170075.tif 000010
【図９】
2015170075.tif 000011
【図１０】
2015170075.tif 000012
【図１１】
2015170075.tif 000013
【図１２】
2015170075.tif 000014
【図１３】
2015170075.tif 000015
【図１４】
2015170075.tif 000016
【図１５】
2015170075.tif 000017
【図１６】
2015170075.tif 000018
【図１７】
2015170075.tif 000019
【図１８】
2015170075.tif 000020
【図１９】
2015170075.tif 000021
【図２０】
2015170075.tif 000022
【図２１】
2015170075.tif 000023
【図２２】
2015170075.tif 000024
【図２３】
2015170075.tif 000025