掲示板一覧 - トピック一覧 EA API
質問:シーケンス図のメッセージ呼び出しを調べたい |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | トピック |
|---|---|
| 未登録ゲスト | 投稿日時: 2009-12-24 15:26 |
質問:シーケンス図のメッセージ呼び出しを調べたい(目的)あるメソッドに変更が加わった場合に、そのメソッドを呼び出している所を追跡したいと考えています。
(質問への背景)コードで追うことも可能なのですが、コードで追うためには、ポリモフィズムのあるコードでは、追うことが簡単にはできません。 そのため、EAのシーケンス図上から追跡できないかと考えました。 APIのSample(C#)を用いて、出来ないかを調べていたのですが、シーケンス図の実行仕様に当たる所がどこか分からず、行き詰ってしまいました。 実行仕様に当たる所がなければ、ConnectorとLifeLineとの接続のレベルのようなものがあるのかとも思いましたが、見つけられませんでした。 (質問内容) シーケンス図のメッセージによる実行仕様から、どのメッセージが次へ続いているのか、をAPIで見つける方法を教えてください。 (目的は、最初の内容ですので、他の方法でも良いので、) よろしくお願い致します。 |
|
| sugimoto | 投稿日時: 2009-12-24 16:12 |
EA Administrator ![]() ![]() 投稿: 1895 |
Re: 質問:シーケンス図のメッセージ呼び出しを調べたい最初に1点確認ですが、今回調べようとされているシーケンス図は、
Enterprise Architectのシーケンス図自動生成機能を利用して 生成したものでしょうか? それとも、ご自身で書かれたものでしょうか? なお、シーケンス図の実行仕様につきましては、データとしては 保持しておりません。 その前後のメッセージの内容により、適した実行仕様を表示しております。 調べたい内容ですが、あるメッセージが変更になった場合、 そのメッセージを利用している(呼んでいる)メソッドを 調べたいということで認識は合っておりますでしょうか? この場合は、変更のあったメソッドのSequenceNoよりも小さい値を持ち(上部にあり)、 かつConnectorの接続先が該当のメソッドを保有するオブジェクト という条件で探すことになると思います。 いただいた(質問内容)から、調べたいことの認識が異なる可能性も ありますので、その場合は、ご指摘いただけますと助かります。 |
| 未登録ゲスト | 投稿日時: 2009-12-24 16:50 |
Re: 質問:シーケンス図のメッセージ呼び出しを調べたいすばやいご回答、ありがとうございます。
>最初に1点確認ですが、今回調べようとされているシーケンス図は、 >Enterprise Architectのシーケンス図自動生成機能を利用して >生成したものでしょうか? >それとも、ご自身で書かれたものでしょうか? これは、自身で書いたものです。 >調べたい内容ですが、あるメッセージが変更になった場合、 >そのメッセージを利用している(呼んでいる)メソッドを >調べたいということで認識は合っておりますでしょうか? はい。その通りです。 >この場合は、変更のあったメソッドのSequenceNoよりも小さい値を持ち(上部にあり)、 >かつConnectorの接続先が該当のメソッドを保有するオブジェクト >という条件で探すことになると思います。 もう一息、お付き合い頂いて教えていただきたいのですが、メッセージグループが異なるメッセージを拾って来ないようにするには、どのように調べたら宜しいでしょうか? よろしくお願い致します。 |
|
| sugimoto | 投稿日時: 2009-12-24 17:19 |
EA Administrator ![]() ![]() 投稿: 1895 |
Re: 質問:シーケンス図のメッセージ呼び出しを調べたい該当メッセージのSequenceNoの直前から、より小さい値のメッセージに
向かって順番に参照し、新しいメッセージグループが開始されている メッセージがあれば、そこまでが同一グループであるという認識は 可能だと思います。 メッセージグループとは、メッセージを選択し「実行仕様」→ 「新規メッセージグループの開始」の設定を指しています。 この設定が有効な場合は、ConnectorのStateFlagsの文字列内にある Initiateの値が1になっています。(Initiate=1;) この間に、該当のメッセージを保持するオブジェクトに対して、 別のオブジェクトからのメッセージがあれば、それが該当の メッセージを呼んでいるメッセージということが言えるのでは ないかと考えております。 ただし、どのようなシーケンス図を書かれているかにもよりますので、 さらにいくつかの条件をチェックする必要があるかもしれません。 ご検討のほど、よろしくお願いいたします。 何かご不明点などありましたら、ご連絡ください。 |
| 未登録ゲスト | 投稿日時: 2009-12-25 9:42 |
Re: 質問:シーケンス図のメッセージ呼び出しを調べたいどうもありがとうございます。
通常のシーケンスについては、上記で教えて頂いた方法で対応できると思います 。下記のようなケースの場合には、条件を追加しないとならないと思いますが、何を追加して判断したら良いのでしょうか? (imageの貼り付けがうまく出来なかったため、文字ですみません) シーケンスは、上から、 msg元 , msg名 , msg先 O -> 出現メッセージ1() -> クラス1 .. <1> クラス1 -> メッセージ1to2() -> クラス2 .. <2> クラス2 -> メッセージ2to1() -> クラス1 .. <3> クラス1 -> メッセージ1to2の2() -> クラス2 .. <4> <1>により開始された実行仕様が、<2>と<4>をcallしています。 <2>により開始された実行仕様が、<3>をcallしています。 仮に<4>が変更された時に、 単純に下から上に追うと、<4>の上に<3>があり、<3>は、SeqNoが小さく、Connectorの接続先が該当のメソッドを保有するので、該当してしまいますが、実際には、探したいのは、<1>となります。 この他に困りそうな所は、 別のタスクから来たメッセージが混ざっている場合です。 でも、これは、上述の<3>のケースの解決方法の範疇なのかも知れないと思いました。念のため、挙げさせてください。 以上、お手数をお掛けします。よろしくお願い致します。 |
|
| sugimoto | 投稿日時: 2009-12-25 10:50 |
EA Administrator ![]() ![]() 投稿: 1895 |
Re: 質問:シーケンス図のメッセージ呼び出しを調べたいまず、<3>は戻りメッセージではないということでよろしいでしょうか?
この場合ですと、メッセージの向きで判定する必要があると思われます。 変更のあったメッセージと同じと向き(この場合は、左から右)で、 他のオブジェクトからのメッセージという条件になると思います。 メッセージの位置は、StartPointX、EndPointXなどで取得できますので、 この情報を元に向きを判断できます。 ただし、メッセージによっては、右方向にあるオブジェクトからの メッセージ呼び出し(右から左)によって、左から右へのメッセージ を発行する場合もある可能性がありますので、すべてのパターンにおいて、 方向のみで正しく判断できるとは限りません。 また、<4>のメッセージの実行仕様が上がっている場合は、<1>ではなく、 <3>からの呼び出しになると思いますが、この場合は、Connectorの StateFlags内の文字列であるActivationが1になりますので、この情報で判断できます。 さまざまなパターンを考えますと、何かこのデータを参照すれば 間違いないというものは現状ありませんので、周辺のメッセージの 情報を取得し、その都度、解析を行う必要があると思います。 そのほか情報の取得方法などでご不明点がありましたら、ご連絡ください。 |
| 未登録ゲスト | 投稿日時: 2009-12-25 11:14 |
Re: 質問:シーケンス図のメッセージ呼び出しを調べたい>まず、<3>は戻りメッセージではないと
>いうことでよろしいでしょうか? はい。<3>は、戻りメッセージではなく、イベント通知です。但し、同期呼び出しで、通常のメッセージと同じ振る舞いになります。 軽くコードを組んで確認してみました。 向きの判断を加えれば、あとは、出来そうな感じになってきました。向きと、Connectorの位置情報から、大分工夫できそうです。 これ以上の複雑な場合は、シーケンス図側を少しメンテすることで、判断しづらいケースを取り除いたりする方が、コスト面や安全性からみて、良いとも感じました。 また、困ったケースになってしまったら、質問をさせてください。 とても助かりました。どうもありがとうございました。 |
|
| sugimoto | 投稿日時: 2009-12-25 11:20 |
EA Administrator ![]() ![]() 投稿: 1895 |
Re: 質問:シーケンス図のメッセージ呼び出しを調べたいメッセージの向きが、今回の判定に利用できそうでよかったです。
別のケースで、情報の取得方法などが不明な場合は、ご連絡ください。 今後ともよろしくお願いします。 |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |





。