電子工作でソフトウェア開発:信号機③設計

board 育成

組み込みソフトウェア開発の技術を習得するのに、実際にモノを動かしながらプログラミングできる電子工作は有用と思います。簡単な課題から現実のシステムを模した難しい課題まで、様々なレベルに対応できますし、要件定義、設計、実装、テストと様々な開発フェーズのソフトウェアエンジニアリングを体験することができます。

なので、ここでは信号機の制御を題材にした電子工作を通じてソフトウェア開発の雰囲気を体験したいと思います。電子工作に主眼を置くのではなく、ステートマシンを活用した組み込みソフトウェア設計などのソフトウェア開発がテーマになります。

設計

第①回の要求仕様で定義した内容をもとに、信号機の振る舞いを設計します。設計にはステートマシン図を用いて表現します。ステートマシン図は状態遷移図とも呼ばれます。

状態と状態遷移

ステートマシンでは、ソフトウェアシステムの振る舞いを状態、イベント、アクション(アクティビティ)、遷移の4つの概念で整理して表現します。第②回の信号機のハードウェアでは、「しばらくお待ちくださいランプ」の振る舞いを4つの概念で表現するとして以下のようになります。

  • 状態:しばらくお待ちくださいランプの「白LED点灯中」、「白LED消灯中」
  • イベント:「歩行者用ボタンを押す」
  • アクション:「白LEDを消灯から点灯に切り替える」
  • 状態遷移:「白LED消灯中」から「白LED点灯中」への状態を変化させる

ステートマシン図は以下のようになります。

この図は、文書で説明すると「白LED消灯中」状態から「歩行者用ボタンを押す」イベントが発生すると、「白LEDを消灯から点灯に切り替える」アクションを実行し、状態が「白LED点灯中」状態に遷移することを示しています。

信号機のステートマシン

信号機の要求仕様を段階的に整理して表現すると、以下のようなステートマシン図になります。

表記法を詳細に説明していないので意味が分からないところもあるとは思いますが、要求仕様に書かれたソフトウェアシステムの振る舞いが、ステートマシン図として表現されていることが伝わったでしょうか。

命名規則など気を使わなければならない部分はいろいろありますが、小規模なものですので機械的に命名しています。ソフトウェアエンジニアリング的にどうかとは思いますがご容赦ください。

おわりに

今回はステートマシン図を使って設計しましたが、状態遷移設計という設計方法は状態遷移マトリクスや状態遷移テーブルを用いた方法もあります。また、今回作成したステートマシン図以外にも、要求仕様に書かれた振る舞いをするステートマシン図は人によって様々な図があります。設計には学校のテストのような誰もが同じになる正解はありません。

簡単なソフトウェアシステムであれば、要求仕様からいきなりプログラミングできますが、大規模、複雑になるにつれ、設計の重要性は増します。

規模が大きくなったり、複雑になったりしても破綻しない洗練された設計を行うには、設計技術が必要です。今回、詳しく説明していませんが、今回作成したステートマシン図は、要求仕様に書かれているイベントに着目して設計しています。慣れれば誰でも設計できるようになります。詳細は、別の機会に触れたいと思います。

タイトルとURLをコピーしました