どしろうと製作所:WebLog

どしろうと製作所のBlogバージョンです。
「どしろうと製作所」のHPの記載内容とはあまり関係無いです。
気が向いたときのみ更新します。
ETロボコンモデルと業務モデルのおはなし
本文書はETロボコン Unofficial Advent Calendar 2017向けに書いております。そのため、ETロボコン参加者側を特に意識した文書になっております。

ETロボコンでDDDを中心とするドメインモデルの手法を試して「うまくできてない」という感じをした人がいるかもしれません。また、同様にドメインモデルの手法を組込み系の業務でうまく適用しづらいという感覚を持った人もいるでしょう。

今回は、モデルを適用する対象の種類(いわゆる組込み系、業務系と呼ばれる2種類)によってモデルが異なる点について紹介してみます。

■モデル適用対象と紹介する例

今回は多少なり例を用意して紹介してみます。
※ただし一部のモデルは十分に作り込めてはいません…(言い訳)

モデル適用対象は「業務系」と「組込み系」の2つを比較してみましょう。例として、次の2つを用意してみました。
・業務系 :A○Aの予約サイトとそのバックエンドのフライト登録システム
・組込み系:おなじみETロボコンのモデル


■ユースケースの違い

さて、早速モデルの違いを見てみましょう。「業務系」のユースケース例は次のようになります。
業務UC
※クリックで拡大

全てを書ききれている訳ではありませんが、複数の人が関連し、多数のユースケースが存在しているという状況はわかると思います。

それでは、「組込み系」のユースケースをETロボコンの例で見てみましょう。
ETロボコンUC
※クリックで拡大

「業務系」と比較してスッキリと小さい内容になります。これでも無理やりユースケースを出し切ろうとしてます。
前者と規模の違いもあるかもしれませんが、ETロボコンのユースケースはこれで全てになると思います。この違いは利用者がシステムと接する部分・単位が大きく異なる、という違いから発生しております。

業務系ではユースケースで見積りを行うことが多いですが、組込み系のモデルではユースケースのみでは見積りは厳しそうです。
※組込みでも、外部のセンサなどの連携をユースケースとして強引に表現する方法も有りますが…

例で分かるように、組込み系ではユースケースを書けたとしても、見積りに使用するような「システム全体を表現しつつ見積り可能な単位で分割する」目的は達成できていません。そのため、組込み系では「ユースケースは使えない」と感じることもあるでしょう。

代わりとして、組込み系では「機能」と呼ばれる単位や、うまく分割するために別の図(要求図、機能構造、システム構造など)を用いることが多いです。また、組込み系では必要な要素技術、実現が難しい要素を抽出することで、システム分割や見積りをする場合もあるでしょう。


■概念/クラスモデルの違い

それでは次に「業務系」の概念/クラスモデルを見てみましょう。
業務概念モデル…イマイチですが
※クリックで拡大。こちらの図は不十分なものしかできてませんでした…orz 時間がある時にでも更新してみます。

「業務系」のモデルには、「便」や「空港」、「予約」というような業務における関心ごとが名前として表現されることが多いです。業務の関心ごととプログラム上の構造が対応づいているモデルがメンテナンスしやすいとも言われています。

「組込み系」の概念/クラスモデルはこのような感じでしょうか。
ETロボコンクラス図
※クリックで拡大。こちらの図は2016年「Champagne Fight」モデルを参考に作成しています。

「組込み系」、特にETロボコンのモデルに関しては、対象要素、対象要素を活用して表現できる概念(走行エリアなど)を使いやすく分けて整理している感じです。

共に「部品」単位で整理しているようですが、部品を分けるための方針が異なっておりますね。


■モデルが異なる背景

今回はユースケースや概念クラス図のモデルを対象として、それらが異なる背景を考察してみましょう。まず、ユースケースではシステムと利用者の接点が異なることでモデルに違いが発生していました。

加えて、モデルは「何らかの複雑な部分を明確にして共有・議論するため」に存在していると考えてみましょう。そうすると、業務系と組込み系で「複雑になりやすい領域(問題領域)」が異なるため、モデルが変わってくると考えることもできます。


■複雑な(問題となる)領域の違いと(概念/クラス)モデルの特徴

それでは、業務系と組込み系に対して、複雑で問題となる領域の違いと、その結果として導出される(概念/クラス)モデルの違いについて考えてみましょう。
※注:問題領域やモデルの特徴は、一部の例を記載しております。他の問題やモデル例も当然あります。

<業務系の例>
「業務系」では、システムに関連する人が非常に多くなります。そして、データも多種多様なものが存在しています。また、存在しているデータが何処で使われているかわからない場合や、時には業務に関しても全体を把握している人がいない…というような状況もありえます。

このような状況で、システム内のデータや業務ロジックがごちゃごちゃになってしまった場合には、変更や修正時に修正する箇所がわからない、修正できたとしても他への影響が分からない…という状況に陥ってしまいます。

そのため、実際に利用する人を特定して、人とシステムとの接点(ユースケース)を明らかにする。そして、共通の用語を明確にしつつ、業務の関心ごととプログラム構造との一致を狙うというのが、業務系に適した開発になります。
「業務の関心ごと」と一致する表現で構造を整理し、ドメインモデルという部品倉庫に整理する活動が有効となるのですね。

<組込み系(ETロボコン)の例>
「組込み系」と括った場合には問題領域は複数ありますが、特にETロボコンでは「ハードウェアの性能を(達成困難なほど)より高める」という点があります。この場合には、開発段階で「試行錯誤」が多数必要となります。

要素技術やハードウェア/デバイス要素、センサの結果から得られる外部環境を部品として表現する。それを組合せてより高い性能にするための試行錯誤をやりやすくする。これを達成するための概念モデル/クラス図が構築できると、性能向上に向けた試行錯誤に役立ちます。
組込み系(ETロボコン)ではユーザとの接点は少ないですが、システムを構築する際の達成困難な機能・性能の達成のためのモデルが有効となっております。
こちらも役立つ「部品」を作ることで組合せて使いやすくしてますね。


上記2つの例では「便利な部品」となるよう概念/ドメインモデル、クラスを整理する活動は一緒です。ですが、解決したい問題が異なることから、整理する背景や整理を行うための基準、手順が異なります。これらの違いがモデルやモデルをつくり込む活動の違いとしてあらわれてくるのでしょう。


<組込み系(その他)の例>
おまけとして、組込み系で他に発生しそうな問題領域を挙げておきます。問題の違いによってモデルのつくり方は変わってくるでしょう。

・製品のラインナップに対応する必要がある場合
家電量販店などでは、同一商品で複数のラインナップがあることに気がつきます。冷蔵庫や洗濯機、電子レンジ、電気ポット、テレビなどは1つの商品単位で非常に多くの種類が存在しております。
この場合に、各商品単位でバラバラな作り方をしていては効率が悪くなります。ハイエンドの商品とローエンドの商品があったとしても、流用できる部品は使いまわしながら開発を行うべきでしょう。
モデルも流用可能な部品単位で構築され、「コンポーネントベース開発」や「ソフトウェアプロダクトライン開発」のような開発手法が役に立ちます。

・同じ処理を非常に多くの条件で使用する場合
例えば業務用プリンタは「印刷する」という処理に対して、多くの設定(N枚印刷、2in1、モノクロ/カラー、etc)が存在しております。加えて、印刷を開始する状態(印刷中の場合、複数の印刷待ちの場合、ネットワークから印刷情報転送中、etc)も多数存在しております。
スマホや携帯電話における「通信する」という処理に関しても同様と考えることもできそうです。
このような問題領域に対応する場合には、今まで紹介した内容とは異なるモデルや開発手法を用いる必要があると想像できるでしょう。

他にも、医療系などの非常に信頼性の高い製品を作る場合や、何らかの規約に従う必要がある場合なども違いがありそうです。こう考えると、単純に「組込み系」という名前で括ってしまうのは危険かもしれませんね。
異なる問題領域の製品担当者が「組込み系」モデルについて議論をすると、「よいモデル」の基準が異なることから空中戦となってしまう可能性もありそうです。


■ざっくりまとめ

「業務系」と「組込み系」という領域を中心に、モデルの特徴とその背景をまとめてみました。
問題領域にあわせて、役に立つモデルのパターンやその作り方を決める/知っていることが役立つんじゃないですかねー、というお話でした。


なお、今回紹介した内容以外にも「モデルの違い」につながる背景、結果として作られるモデルの特徴が存在してそうです。今後も何らかの発見がありましたら紹介してみたいですね。
| 技術 | 18:51 | comments(0) | - |









      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< September 2018 >>
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ CATEGORIES
+ ARCHIVES
+ LINKS
+ PROFILE
+ OTHERS
このページの先頭へ