![]() |
[2005 年 6 月号] |
[レポート]
皆さん、受験記の前編はお楽しみいただけたでしょうか?
前編では、クラスの抽出と、画面イメージによる違う角度からの分析、それを受けてのモデルの再検討を行ってきました。
後編では、いよいよモデルの完成を目指して、違う角度からの分析や、先輩方のダメ出しを受けて、更なるモデルの改良を行っていきます。 そして最後には、実際に UMTP L2 受験に挑んだメンバー達の結果と感想をご報告いたします!
これまでの勉強会の成果がどこまで役立ったのか、ご期待ください!
前回の勉強会では、システムの画面イメージの移り変わりを考えました。 これによりシステムで必要とされる情報がわかっただけではなく、 「検索」と「予約」という処理の流れを具体的に考えられるようになりました。
そこで前回の勉強会での最終的なクラス図をもとに、処理の流れをシーケンス図で描く宿題をやってくることにしました。 シーケンス図を描くことは、処理の流れをモデル化するだけでなく、クラス図の洗練にもなります。
今までの勉強会では、クラス図だけを眺めてクラスの責務、つまり
- どのような情報を持つべきか
- どのような振る舞いをするべきか
ということを考えてきましたが、それでは煮詰まってくることを実感しました。
シーケンス図を描き、オブジェクト間のメッセージのやりとりを意識することでクラスの責務を他クラスからの要求、つまり
- どのようなことをそのクラスに期待するか
という視点で考えることができたように思います。
では、今回の議論はどのように発展していったのでしょうか。ご覧ください。
前回の宿題のレビュー
前回の第 2 回勉強会の最後に、第 3 回の勉強会までに新人メンバーが各自やってくることとして、以下の宿題を出していました。
<宿題>
- 第 2 回の勉強会で考えた検索画面と予約画面が実現できるか、という視点でクラス図を考える。
- (※注)コントロールクラスや、作業中に必要を感じたクラスは自由にクラス図に追加する。
- 作成したクラス図をもとに、「検索」「予約」のシーケンス図を描いてくる。
第 3 回勉強会の目標は、前回の宿題をレビューして、勉強会の成果としてのモデルを完成させることです。 メンバーの一人が描いた、一番妥当性が高そうなモデル(クラス図とシーケンス図)について議論し、モデルを改良していきます。
レビュー対象になったモデル
<クラス図>
![]()
<シーケンス図>
この図は、[沖縄] 地区から [札幌] 地区に移動したいという要望を顧客が持っている場合に、航空経路を「検索」するときのシーケンスを表わしています。
[(クラス名)] はそのクラスのオブジェクトを表わしています。各メッセージの詳細
※以下、[検索コントロール] が各オブジェクトに対して指示を出します。
- 1. ユーザが [予約画面] に対して検索を指示します。
- 2. [予約画面] が [検索コントロール] に対して検索を指示します。
※8. 〜 13. を [航空経路] の数だけ繰り返します。
- 3. 〜 4. 検索条件から 2 つの [地区] を生成します。
- 5. 〜 6. 「地区間」に 2 地区の情報を設定します。
- 7. 「地区間」に存在する [航空経路] を取得します。
- 8. [航空経路] で経由する [空港間] を取得します。
- 9. [空港間] を飛行する [便] を取得します。
- 10. 予約したい日付の [フライト] を取得します。
- 11. [フライト] で使用される [航空機] を取得します。
- 12. [航空機] の [座席] を取得します。
- 13. [座席] が空席かどうか取得します。
- 14. [予約画面] に空席結果を表示します。
レビュー その 1 〜モデルに使われている語句を整理しよう〜
一通り、モデルの説明がおわったところで、
■ 「空港間」というクラスが新しく出てきているが、このクラスと「航空経路」クラスの関係は?
■ 「便」と「フライト」の関係は?などの疑問が出てきました。
これは、「航空経路」と「空港間」、「便」と「フライト」など、似たような概念を指すクラスが問題を引き起こしていると考え、ここで一度、クラスが何を表しているのかを整理することにしました。
レビュー対象になったシーケンス図には、「地区」のオブジェクト名 [沖縄]、[札幌] が記されています。
各クラスのインスタンスをこの沖縄から札幌へのケースで考えてみました。
- 地区:
- 空港が存在する地理的区域を表す。(例:{沖縄}、{札幌})
※ {} が一つのインスタンス- 地区間:
- 出発地と到着地として意味づけられた 2 つの地区を表す。(例:{沖縄→札幌})
- 航空経路:
- 空港間を束ねるクラス。リンクする地区間を移動するための一つの選択肢を表す。
(例:{那覇空港→羽田空港、羽田空港→千歳空港}、{那覇空港→伊丹空港、伊丹空港→千歳空港})- 空港間:
- 一回の離陸と着陸で移動できる 2 つの空港を表す。(例:{那覇空港→羽田空港})
- 便:
- 飛行機の定期的な出発予定の一つを表す。(例:{ANB20})
- フライト:
- 特定の日付の便を表す。(例:{ANB20、3/20}、{ANB20、3/21})
- 航空機:
- 飛行機の機種を表す。(例:{B-7J7})
- 座席:
- 一人分の座席を表す。(例:{10A}、{35K})
参考: <ANA 全日空 /航空券予約・空席照会・運賃案内/>
この整理による発見から、モデルを以下のように変更しました。
- 指し示す概念を正確に表すように、「航空機」クラスの名称を「航空機種」に変更する
- 航空機種は日によって(フライトごとに)変わるのではなく、便によって一意に決定されるものとして、「航空機種」クラスと「フライト」クラスの関連を廃止し、新たに「航空機種」クラスと「便」クラスに関連を設ける
レビュー その 2 〜効率を考えよう〜
■ このシーケンスでは座席が「空席」かどうかは座席全てに問い合わせるのですか?非効率ではないですか?
このシーケンスでは、席の一つ一つに対して空席かどうかを問い合わせています。これでは検索処理のたびに検索条件に該当するフライトすべての座席にメッセージを送らなければならないので、コストが大きくなってしまいます。
座席指定で予約するのであれば、このような方法も必要かもしれません。しかし、航空券の予約時に、席は決まらないことが一般的で、この場合、席を一つ一つ識別する必要はありません。
ここでは、航空券の予約時には席は決まらないものとしてモデリングすることにしました。空席情報を取得するコストが小さくなるよう、モデルを以下のように変更しました。
- 「航空機種」は普通席、スーパーシートの席数の情報を持つ
- それぞれのフライトがどれだけ空席を持っているかを管理する
また、シーケンス図でメッセージのやりとりがないクラス間の関連を削除しました。こうしてできあがったのが、以下のクラス図とシーケンス図です。
最終的に出来上がったモデル
クラス図
![]()
検索と予約のシーケンス図
5. モデルのダメ出し!?
第 3 回で作成したモデルについて、先輩方からコメント(ダメだし!?)を頂きました。これを元にモデルを改良します。
以下の他にも、何か気付いたことなどがございましたら、本記事最下部のアンケートの欄にお書きいただければ幸いです。「グレード」クラスについて
「グレード」クラスの扱いが中途半端ではないか?
<先輩のコメント:>
「グレード」をクラスとして抽出したのは、「普通」と「スーパー」以外のグレードが出た時の変更範囲を少なくするためと詮索しました。
ところが、「航空機種」クラス、「便」クラスでは、座席の種別は「普通」「スーパー」しかない、と決め付けてしまっています。従って、新しいグレード(例えば「ウルトラシート」)が登場することになった場合、「航空機種」クラス、「便」クラスに属性(ウルトラシート座席数、ウルトラシート料金)を追加しなければなりません。これは、先ほどの「グレード」クラスを抽出した理由と反するのでは?
すなわち、「グレード」クラスを抽出した理由を徹底するならば、「航空機種」クラス、「便」クラスは、グレードが増えたり減ったりしても、影響が出ないようにするべきではないでしょうか?
<旧新人の答え:>
確かに、「グレード」クラスを出しておきながら、検討が不十分でした。
グレードの増減によって影響が生じる以下の 3 点について、考えたいと思います。
- グレードごとの料金
現在のモデルでは、「便」クラスに普通席料金とスーパーシート料金の属性を設けています。つまり、便ごとに上位グレードの料金が異なるかもしれない、という考え方を採っているわけです。あまり深く検討していませんでした。
これを、現実の国内線に即して、便ごとに普通席料金を設定し、上位グレード(スーパーシートなど)の座席に搭乗する際は、一定の追加料金(スーパーシート料金など)を支払う形に改めます。モデルとしては、「便」クラスの料金に関する属性を普通席料金だけにして、「グレード」クラスに追加料金という属性を設けます。
![]()
- 航空機種のグレードごとの座席数
現在のモデルでは、設定されているグレードの数だけ、「航空機種」クラスに「XXXクラスの座席数」という属性を持たせています。
グレードの増減によって「航空機種」クラスが影響を受けないようにするため、「航空機種」クラスと「グレード」クラスとの間に「座席編成」というクラスを新たに設け、航空機種がどのグレードの座席を何席搭載しているかを管理させることにします。
![]()
- フライトのグレードごとの空席数
現在のモデルでは、設定されているグレードの数だけ、「フライト」クラスに「XXXクラス」の空席数という属性を持たせています。
グレードの増減によって「フライト」クラスが影響を受けないようにするため、「フライト」クラスと「グレード」クラスとの間に「空席情報」というクラスを新たに設け、空席数の管理を「フライト」クラスから切り離すことにします。
![]()
「グレード」クラスは他のクラスと関連しないのか?
<先輩のコメント:>
予約で気にするものの一つとして、座席のグレードは確かにそのとおりです。
しかし、他のクラスにも関連すると思います。
グレードごとの空き座席数は、「フライト」や「航空機種」で扱っているのではないでしょうか。
グレードごとの空き座席数の管理を別クラスで行う理由はなんででしょう?<旧新人の答え:>
先のレビューに対する検討で、「グレード」クラスは、他のクラスとも関連を持つようになりました。「フライト」クラスと「便」クラスについて
便が料金の情報を属性で持つのはおかしいのでは?
<先輩のコメント:>
便が料金の情報をもっているので、もしあるシーズンではサービス料金になるという場合を考えた時に、これも、便に新たな属性を加えるなどの変更を加えなければならなくなります。<旧新人の答え:>
普通席料金を「フライト」クラスの属性にします。そして、予約可能な日付(2 ヶ月先まで?)の「フライト」クラスのインスタンスを予め生成しておくと考え、その際に、シーズンや曜日などに対応した料金を設定することにします。レビューを反映した最終的なクラス図
![]()
ここまで、延べ十数時間に渡ってモデリング勉強会を行ってきましたが、いよいよ、UMTP L2 試験を受験します。
第 3 回のモデリング勉強会が終了した翌週とそのまた翌週、旧新人編集員 6 名を代表して、よねだ と 田邉 の 2 名が挑戦しました。
先に よねだ が受験し、そのフィードバックを受けて 田邉 が受験しました。1 月半やってきたモデリング勉強会の成果を生かすことができるでしょうか・・・?
<UMTP モデリング技能認定試験>
- 実施概要
- 試験概要
- L2 試験受験ガイド
よねだ
先発隊のよねだです。2 人とも落ちたら記事にならないという事でかなり緊張しました(- -;)
ですが・・・・なんとか、''合格''する事ができました\(^o^)/
あーよかった。ではでは、受験後の感想を述べていきたいと思います。
問題の難易度
問題 1 つ 1 つの難易度はそれほど高くはないので、あわてないでじっくり考えれば分かりました。 ただ出題形式として、L1 試験は
「選択肢の中から正しいもの(または、間違っているもの)を 1 つ選ぶ」
というものだったのに対し、L2 では
「複数の選択肢から正しいものをすべて選ぶ」
という形式に変わっています。
1 つでも間違った選択肢を入れていたり、解答を 1 つでもチェックしそびれていた場合、その設問は 0 点になってしまいます。
ですので勘で書いてもなかなか正解できないようになっています。
また、問題文が長いので一度読んだだけでは憶えきれなかったので、先に設問を読んでから問題を解いていくようにしました。時間
時間は全部で 85 分で、私の問題は設問が 23 問ありました。これだけみると、問題数が少なくて時間が十分あるように思えるのですが、見直しが出来たのはたったの 5 分です。問題文が長い上、パッと見て答えが思いつく問題が少ないので、時間がかかります。
受験対策
今回私たちは、「勉強会を開いて 1 つの題材をモデリングする」という勉強方法を行ないました。これは非常に良かったと思います。
1 人でモデリングの練習をしていると、「描いた本人にはわかっているが他の人が見たら理解できないモデル」というのを作ってしまうことがあります。また、間違っているのにそれに気付かない事もあります。
ですが、勉強会でモデリングの練習を行なうと、他の人からノウハウを吸収できるので、他の人が描いたモデルが理解できるようになります。
また、間違えたら指摘してもらえるので、正確なモデルを描けるようになります。今回は、モデリング経験の少ない新人(2 年目)だけで行ないましたが、モデリングの熟練者を加えて勉強会を開くともっとよくなると思います。
他の勉強方法としては、UMTP L1-T2 の問題集をするのもいいと思います。
その際、ただ問題を解くのではなく、正解でないモデルはどこが悪いのかをしっかり考えながら問題を解いていくとよいと思います。以上が、私の受けた L2 の感想です。
次は、田邉君の番です。 大丈夫かなぁ?いやいや 1 月半の努力は無駄ではないはずだ! がんばれ〜\(^〜^)/
田邉
先発の米田君のフィードバックを受けて、第二陣として L2 試験にチャレンジしました。
受験の感想に入る前に、まずはどのようなスキルレベルの人が受験したのかを簡単に紹介しておきたいと思います。筆者のモデリングに関するスキルレベル
- UML の文法は一通り習得済み
- UMTP L1 を昨年 12 月に取得
- 業務でモデリングを行うという経験は皆無
- モデリングの勉強会に定期的に参加
- これまでに読んだ UML に関する書籍
- 「かんたん UML」
- 「はじめて学ぶ UML」
- 「UML モデリングの本質」
- 「UML モデリングのエッセンス 第 2 版」
とまあ、こんな感じの人が受験した感想ということで以下を見ていただければと思います。
受験本番
受験の日程は三連休の初日の 3 月 19 日でした。この合否によって 3 連休をどんな気持ちで過ごせるかが決まるとあってそれなりに気合いが入りました。場所は新宿にあるテストセンター。部屋は、塾の自習室に PC が置いてあるような環境で 5 人分くらいの席しかないような狭い空間でした。手続きを終えて荷物を預けたら、さっそく座席へ案内されます。予約時間前でも座席が空いていたら受験できるようでした。
いざ本番。 L1 と違って一問目から考えさせられる問題が登場。二問目、三問目と一応の解答は出せるのですが、解答に自信が持てない問題が続き、先に進むほど不安は増していきます。問題自体は難しくも簡単でもなく、ほどよいレベルでした。ゆっくり時間をかけて考えれば納得のいく解答が出せそうな雰囲気です。
しかし時間は限られており、限られた時間の中で考えうる最も良い解答を書いて次に進まなければならない。そしてその解答にいまいち自信が持てない。そんな問題が最後まで続きました。フィードバックを受けて時間が足りないことは何度も聞いていましたが、確かにそのとおりでした。少し急ぎ足で問題を解いたつもりなのに、一通り終わって時計を見ると残りは 5 分しかありませんでした。そのまま見直しもろくにできず試験時間終了。結局、解答に自信を持てた問題は半分もなく、手ごたえもありませんでした。結果はぎりぎりの合格でした。
試験が終わって改めて思うことは、この試験の問題そのものの難易度はそれほど高くはないということです。それでも時間に追われて、自分の解答に自信が持てなかった理由はやはり「複数選択式」というところにあると思います。選択肢の中で明らかに正しい選択肢を見つけることができても、残りの選択肢について正しいか間違いかをはっきり言えなければその問題を正解することはできません。
このような問題に正解するためには、より正確でなおかつ経験に裏付けられた知識が必要だと感じました。受験対策
以上の受験経験を踏まえて私なりに考えた対策をまとめてみました。
- 「 UML モデリングのエッセンス 第 2 版」を理解できるまで読む
これによって合格に必要な知識レベルはカバーできます。
- モデリングを実践し、他者に公開する
知識を詰め込むだけでは「複数選択式」に対応できません。自分の持っている知識が妥当かどうか、またそれを使ってモデリングした結果が他人からはどのように見えるかを検証する場が必要です。そのような場は勉強会という形でも良いですし、自分が作ったモデルを上級モデラーにレビューしてもらうという形でも良いと思います。とにかく自分の知識とそれによって作られるモデルをオープンにしてフィードバックを得ることが重要です。そうすることで知識がより洗練され、「複数選択式」にも動じない自信が身につくのではないでしょうか。
こうやって挙げてみると、モデリングに関心のある人ならすでに実施していそうなことばかりですね。
「モデリング技能認定試験」の対策はモデリングをすることだ、なんて当たり前といえば当たり前なのですが、やはりその当たり前の事を着実にこなすことが何より有効な対策なのだと思いました。
二ヶ月に渡ってお送りした旧新人企画、いかがでしたか?
結果としては見事二人合格なのですが、途中経過である勉強会の議論の様子があまりお伝えできていなかったかもしれません。実のところ勉強会では、新人メンバー同士がモデルを前に議論白熱!というよりも、「ああでもない、こうでもない」と全員が唸っているような場面が多かったです。
複数のモデルの候補がでてきたときに、どのようにその良し悪しを判断すればよいか基準がわからず、まだまだモデリングスキルが足らないなぁ・・と思うこともしばしばでした。今回の記事では、お手本となるようなモデルを公開するよりも、モデリングの過程を公開することに重点を置きました。これによって、モデリング初心者の方にとっては「基本的なモデリング手法の一例」の習得を、上級者の方にとっては「新人ってこういうところでつまずくのか」という発見を、してもらえたとすれば大変うれしく思います。
新人による勉強会はひとまず終わりましたが、モデリングの勉強は各自続けていくことでしょう。
旧新人メンバー全員が L2 を取得する日も、そう遠くないはずです・・・。最後に、近く UMTP L2 受験を控えてこのページをご覧になっている方へ
本記事でご紹介したモデリング勉強会などを通じ、私たちは周到に準備して UMTP L2 試験に臨みましたが、
「L2 の受験対策にしては、難しいことをやりすぎではないか」
という先輩の指摘もありました。
実際、落ち着いて取り組めばそれほど怖い資格ではないはずです。受験したメンバーの感想を参考に、当日の試験に取り組んでみてください。
無事合格されることをお祈りしています!
© 2005 OGIS-RI Co., Ltd. |
|