モデルベース開発入門_モデルベース開発とは

春ですね。
モデルベース開発に関する情報を入門者(新入社員や転職者)向けにまとめていきたいと思います。

第一弾は**そもそもモデルベース開発とは**についてです。

モデルベース開発を中心に組み込み系の情報をまとめたホームページを作成中です。よければ覗いてみてください。
[モデルベース開発入門](http://lets-mbd.com/)

# **モデルベース開発とは**
モデルベース開発とは、主に組み込みソフトウェア開発に適用される手法です。
名前の通り、モデル(制御モデル, ECUモデル, プラントモデル)をベースに組み込みソフトウェア開発を進めていきます。
ここでいうモデルとは、SimulinkというMathWorks社製のモデリングツールによって作られたものを意味します。

# モデルベース開発のメリット
モデルベース開発のメリットを4点挙げます。

## メリット① シミュレーションが可能
一番のメリットは制御ソフトモデルで書くことにより、シミュレーションが実行可能になることです。
シミュレーションが可能になると、ECUにソフトを書きこまずとも動作検証ができるようになります。

従来開発の場合、動作検証は実ECUを用いて行っていました。動作検証中にバグが見つかると、ソフトを修正してバグが無くなるまで検証をやり直します。実ECUを用いての動作検証は人手と時間がかかります。

モデルベース開発の場合、動作検証はシミュレーションを用いて行うことができます。シミュレーションはコンピューター内で完結し、自動テストも可能なので従来開発に比べて大幅に検証工数を削減することができます。(ソフトのコンパイル、書き込み、試験設備などが不要。自動テストの場合人手も不要。)

![MBDのメリット_シミュレーションが可能.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2643741/24e50bc6-4527-4947-6cc9-2716aab0d46c.jpeg)



　また、制御モデルとプラントモデル(実機のモデル)を組み合わせたシミュレーション(MILS)であれば、実機(自動車開発であれば自動車本体)が無い状態でも実機相当の検証が行えます。実機の完成前から動作検証を行うことにより、早期に仕様の検証・確定につながり、開発工数削減に繋がります。新規開発の場合、実機が完成するのは大抵プロジェクト中盤～後半になることが多いので、実機ができた後に問題が発覚すると、大きな手戻り(実機作り直し、制御ソフト作り直し）となり開発工数の圧迫、納期遅れなど悲しい事態に発展します。シミュレーションを駆使し、プロジェクト前半から実機相当の検証を行うことにより、そのような事態に発展することを予防します。


![MBDのメリット_MILS.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2643741/14cbd859-69de-2e6d-49f5-943e01993729.jpeg)




## メリット② 理解が容易(ハンドコード比)
制御ロジックをモデルで書くことにより、ハンドコード(エディタに記載しているソースコード)に比べて理解が容易になります。これは制御モデルがブロックとブロックを信号線で結ぶ形で作成されることに由来します。ハンドコードの場合、処理の流れを追うにはいろいろなファイル・関数を行ったり来たりする必要があり大変です。何十年もハンドコードで開発している場合、大抵ソースファイルがぐちゃぐちゃになっているのではないでしょうか。モデルの場合は、信号線を追っていけば制御ロジックを順に追っていけるので理解が容易です。ただ、モデルでもひとつのブロックに処理を詰め込みすぎたり、意味もなく階層構造を深くしすぎたりすると当然可読性は下がってしまいます。複数人でモデルベース開発を実践する場合は、モデルの記述方法を統一しておくとよいでしょう。(モデリングガイドラインを用意する。)



## メリット③ 自動コード生成
モデルベース開発の特徴として自動コード生成(ACG: Auto Code Generation)が挙げられます。
名前の通り、自動でモデルからコードを生成することができます。従来開発では仕様書からコードを手書きするので 
①時間がかかる,
② 仕様書の意図と異なる実装をしてしまう
③人力なので作業ミスが発生する
など問題が発生していました。
モデルベース開発を導入し、自動コード生成機能を使用すれば高速かつ正確にモデルからコードを作成することができます。

![MBDのメリット_コード生成.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2643741/4f54c8f8-7bbf-fbcd-f0a2-b55320263dbd.jpeg)



## メリット④ 品質を担保しつつ省工数な自動テスト
①でも少し触れましたが、モデルベース開発では工数をかけずに高品質な検証を行うことができます。
自動チェックツールを使用することにより、事前に用意したテストパターンを自動で実行してレポートを出力することができます。従来開発の場合、ソフトが修正されるたびに手動での検証が必要なため莫大な工数がかかったり、工数削減のためソフト変更による影響がないと判断した箇所のテストを省いたりします。この省き方が悪く、本来テストが必要だった部分のテストが漏れてそこにバグがあった場合、市場問題に発展し大きな手戻りに繋がってしまいます。モデルベース開発であれば、一度用意したテストパターンを自動かつ短時間で実行できるので、ソフトの変更がある場合はソフト全体のテストを自動でやり直すことができます。また、ツールを使うことによりテストパターンのカバレッジ(制御ロジックの内何パーセントの確認が完了しているのか)という指標を計測することができます。やみくもにテストパターンを増やすのではなく、足りていないカバレッジを狙ってテストパターンを増やすことにより最短で品質を高めることができます。


# モデルベース開発のデメリット

## デメリット① ツール費用が高い
現状モデルベース開発ツール≒MathWorks社製ツールとMathWorks一強のため、莫大なツール購入費用がかかってしまいます。。。競合が現れて価格競争してくれるとありがたいのですが。MathWorks社製ツールが優秀すぎるのでなかなか競合が現れません。年度が替わるタイミングで値上げが発生したり、あるツールの機能を分割して別ツールとして販売し、分割前の機能を揃えると分割前よりも高くつくといったことがあったりと、完全にMathWorks社の言いなりに各企業なっているのではないでしょうか。ただ、MathWorks社製品は非常に作りこまれており、年々機能アップされているので開発費もかなりのものになると思うので仕方ない部分もあるかと思います。購入費用をペイできるような計画をたてての導入がよいかと思います。

## デメリット② 導入ハードルの高さ
モデルベース開発に限らずですが、新しい物、システム、工程を導入するときは既存の方法に慣れている方からの大きな反発に合います。これは仕方のないことだとは思いますが、将来を見据えてモデルベース開発を導入するには避けては通れないイベントだと割り切り、適宜対策を講じていくいく必要があります。
①いきなりツールを導入するのではなく、ある一部の工程からモデルベース化を始めて成果をアピール
②モデルベース開発のコンサルタント会社への依頼
など様々な対応がとれると思います。

## デメリット③ エンジニアの確保
ツールが購入できても、ツールを使用できるエンジニアを育成または派遣で来てもらう必要があります。世界的にCASE(Connected(コネクティッド) Autonomous(自動化) Shared(シェアリング) Electric(電動化))対応のため、モデルベース開発エンジニアの需要が急拡大しており、育成したエンジニアを好待遇で引き抜かれたり、派遣会社に足元をみられて派遣料が上がったりとエンジニアの確保が年々難しくなってきています。


# 終わりに
　モデルベース開発を適応すると、開発効率は向上しますが決して仕事が楽になる、工数をかけなくてよくなるといった魔法のような開発手法ではありません。メリットデメリットを理解した上で、メリットが上回る場合は導入を検討してみてはいかがでしょうか。極端な話、現行の開発手法で問題なく会社がまわっているであれば無暗に導入しなくてもよいかもしれません。(将来的に規模を拡大するなら話は別ですが)
　新規導入時には、全ての工程にモデルベース開発を導入するのではなく、まずは一部の工程から徐々にモデルベース化していくのがよいと思います。

[次回記事](https://qiita.com/LetsMBD/items/99496567137355a2dc83)ではモデルベース開発の工程について解説します。

記載内容に不明点あればコメントいただけると幸いです。
モデルベース開発を中心に組み込み系の情報をまとめたホームページも作成中ですのでよければ覗いてみてください。
[モデルベース開発入門](http://lets-mbd.com/)