さてさて、そろそろ何か始めないとな

さいたま市のソフトウェアエンジニアのブログ

システムアーキテクトに苦戦する組込みエンジニア 午後Ⅱ インターフェース?

私は組込みソフトウェアエンジニアです。

2021年4月18日の情報処理試験 システムアーキテクトを受ける予定です。

ですが、午後Ⅱの論文が非常に難しく、合格を諦め始めています^^;

しかし、私なりに幾つかの過去問題に対して、組込みエンジニアとして、言いたいことがあります。

同じような業務の方で、システムアーキテクトを受験しようと考えている方に、なにかしらの参考・ヒントになればと思います。

システムアーキテクト試験の受験は考えていない方でも、組込みシステムのシステムアーキテクトが、どのようなことを考えているのかを記載しているので、そちらでも参考になればと思います。

っていうのも、過去の問題と、参考書の回答が酷すぎる。

組込みシステム製品にもとめられるモジュール間インターフェースの配慮

平成27年度 システムアーキテクト午後Ⅱ 問3になります。

組込み製品におけるインターフェース配慮の前提

ちょっと要約します。

問題文としては、以下のような内容が前提として記載されています。

  • 各機能に対応したモジュール、ユニットなどを組み合わせて構成することがある。
  • インターフェース仕様決定に際しては、製品に求められる要件に配慮しながら、将来発生しうる事態も想定し、適切に対応できるようにすることが望まれる。
  • 少ないハードウェア資源で大きなパフォーマンスが要求される組込みシステム製品の場合は、全体を密結合としたインターフェースにすることもある。
  • 将来、保守、リプレースなどでモジュールを新たなものに置き換えなければならない事態が発生する可能性がある。

「密結合」っていう単語が出てきていますが、密結合することでパフォーマンスがあがると思っているのは、出題者の思いだと思います。決して現場では、パフォーマンスを主題において密結合を選択するというのは、あまり行いません。疎結合で設計することで、パフォーマンスが低下すると思われると困ります。「疎結合」、「密結合」をパフォーマンス視点で考えることは、殆どありません。

 

「インターフェースの仕様決定」とは何か?私は、この問題を読んで、既に混乱しています。

「モジュールを新たに置き換えなければならない」と記載されていますので、この場合のモジュールとは、外付けのハードウェアデバイスのようなものを想定されているのでしょうか?もしくは、社外から購入したライブラリのようなものでも該当するかもしれません。

ここで、先程でてきた「密結合」を再度説明します。

例えばA社から提供されるドライバやミドルウェアを、複数のモジュールが利用するケースがあったとします。このドライバやミドルウェアは外部に接続されたハードウェアに依存していることもあれば、依存していない場合もあることでしょう。

どちらにおいても、継続的に製造を続けなければならない組込み製品では、その外部のデバイスが供給できないケースや、ミドルウェアの提供元がサポートを継続できないケースが発生することがあります。また、製造コストを安くするため、別のメーカーのデバイス、ミドルウェアへの置き換えが必要となるケースもあります。

このように、ミドルウェアやドライバの変更の必要が生じた場合に、複数のモジュールの修正が必要となることは望ましくありません。できる限り、特定のミドルウェアやドライバの入れ替えと共に、あと一箇所程度のモジュール変更で済むように設計しておくことが望ましいです。このような設計考慮が「疎結合」です。

「疎結合」であることのメリットは、他にも派生製品の展開の容易性。複数の製品で、モジュールを共通化することによって、品質の確保や、ソフトウェア開発コストの削減など、いろいろなメリットがあります。

 

そして、前提として記載された文章は、以下のように続きます。

以下は出題分そのまま

したがって、組込み製品に求められる要件を満たすためには、開発に着手する前に最適なモジュール分割、モジュールの結合度、製品寿命などを考慮した上で、インターフェースの仕様を十分に検討することが重要である。

「開発に着手する前に」モジュールの分割やインターフェースの設計を行うことが、当たり前のように記載されています。間違っています。もう、これは既に開発フェーズですよ。開発チームの体制を構築して、開発予算で実行する作業案件です。「開発に着手する前に・・・」なんて、冗談じゃないです。誰がやると思っているのでしょうか。小人さん?

正しくは「開発序盤に・・・」もしくは「開発の最初に・・・」です。

さらに言えば、ソフトウェアの開発規模が大きくなってくると、詳細なインターフェースを決めることは、序盤では行いません。モジュールの分割、役割の決定のみを行います。

モジュールの分割の際に、将来性、発展性、保守性、開発容易性など、いろいろなことを考えて配置を考えなければなりません。

外部に接続されたデバイスとして、どのようなものがあるのか、それぞれどのようなソフトウェアの実装が必要なのか、そのデバイスから得た情報は、どの機能で必要とするのか、デバイスと通信する際に必要な要件は何か等など、様々なことを考える必要があります。

ミドルウェアは、どのようなものが必要なのか、ユーザーインターフェースはどのようなものがあるのか?同時動作する機能は何か、排他動作が許される機能は何か、いろいろなことを考慮しなければ、最適なモジュール分割はできません。

もしかしたら、途中で仕様変更が発生するかもしれません。その場合に対応しやすいように影響を受けるモジュールは最小限にしたいものです。今回作成したソフトウェアモジュールを別の製品でも活用できるようにもしておきたいですね。そういうことも含めていろいろなことを考慮して、システムアーキテクトをしなければいけません。

(書ききれないので省略します)

組込みシステムでは、限られたメモリー、CPUリソースの中で、様々な機能を動作させなければなりません。また、限られた予算、日程で作らなければいけません。だから、本当に設計が大事なんです。

このモジュール分割が十分に検討/設計できていないシステムは、いざ作り始めてから、やり直しを繰り返すことになってしまいます。システムが複雑になってしまいます。複雑なシステムは、テストが困難になり、不十分になります。開発工数が増大します。開発予算の増加、納期遅延等にも繋がります。残業増えます。

だから、コーディングにまだ入らないでください。十分に検討/設計してください。設計は、非常に重要です。

なので、この作業を「開発に着手する前に・・・」という表現は、間違っています。

いざ、問題へ

前置きの前提が記載された文章を読んだだけで、ここまでツッコミしていてはいけません。試験本番では、ぐっと堪えて、飲み込みましょう。

問題は以下のようになります。

設問ア あなたが携わったシステム製品の概要、特徴、及び要件について、モジュール間インターフェース仕様で配慮した内容を含めて、800字以内で述べよ。

 800字で、無理です。書ききれません。

しかも、私には出題者が言っている、「モジュール間インターフェース」が何を意図しているのか、理解できていません。

モジュール間インターフェースを、モジュールの分割設計の考え方として置き換えて良いのであれば、前述したように理解できます。

しかし、考慮するべきことが多すぎて、書ききれなくて悩みます。

設問イ 設問アで述べた組込みシステム製品に求められる要件に適切に対応するために考慮したモジュール間インターフェースについて、将来発生し得ると想定した事象のニア用、及びその事態に対してどのように配慮したかを800字以上、1600以内で具体的に述べよ

 いったいどれに絞ろうか。参考書の回答は、「疎結合」「密結合」を適当に並べた表現で文章が作られていて参考にならない。

一番、大事なことを記載しようなどと考えたところで、大事なのは全部だと思っていまいます。ここは、書きやすいものに絞るべきなのでしょうね。

 

・・・こんなことを当日問題みてから苦悶していたら、時間オーバーで終わるのだろうなと予測して、今から挫折しています。

困りました。