日本情報科教育学科第16回全国大会

状態遷移図で表現したシステムの分割を題材にした情報Ⅱ「情報システムとプログラミング」の教材の提案

帝塚山学院大学
喜家村奨、稲川孝司

太成学院大学西野和典

NPO法人 学習開発研究所
高橋参吉

本研究の目的• 今まで主にmicro:bitを用いたプログラミング教
材を開発してきた• 今回は、その研究の一環として、情報Ⅱの（４）情報システムとプログラミングの教材を提案する

高等学校学習指導要領（平成30年告示）解説 情報編（４）情報システムとプログラミング
イ（イ）情報システムをいくつかの機能単位に分割して制作し統合するなど、開発の効率や運用の利便性などに配慮して設計すること。

情報Ⅱ「情報システムの分割と設計」の教材例• 文科省の教員研修用教材では、この単元の教材として図書館の本の貸出システムの例が示されている。今回はこれ以外の例として、特にシステムの振る舞いやハードウエアなどの物理的制約に着目したモジュール（コンポーネント）の分割の教材を提案するシステムをモジュールに分割する利点
・プログラムの構造が分かりやすくなる
・関連する機能をまとめられる・モジュールごとに別々の人が分担して開発・テスト・保守できる・エラーが発生してもモジュール単位で修復できる

本教材のシステム分割の概要
仕様

システムの振る舞いを表す状態遷移図

各コンポーネントの状態遷移図

システムの分割例（自動販売機）

自動販売機の仕様
例示する自動販売機の仕様（概要）は以下の通り
自動販売機にコインを投入し，購入ボタンを押すと商品が出力される．商品はコイン1枚で購入可
能であり，投入したコインは自動販売機に回収され，コイン1枚投入時，おつりは出ない．自動販
売機には2枚までコインが投入でき(3枚目は投入されることはない)，2枚投入し，購入ボタンを押すと，商品とおつりが出力される．購入処理が終わると最初に戻る．

仕様から導出したシステムの振る舞いを表す状態遷移図の例

０

コイン

1コイン

2
ボタン

ボタン

商品

3

おつり

4

コンポーネントの分割• システムの機能からコンポーネントに分割する• 例えばこの自動販売機は以下のように４つのコンポーネントへの分割が考えられる。
コンポーネント名（従事するイベント名）

機能・物理的制約の例

UI（ボタン）

商品購入ボタンなどのユーザインターフェイス部、ルーレット・表示などの機能が実装される可能性がある。

CBOXIn（コイン）入力されたコインをチェックする。偽造コインなどを見分けるため他のメーカから供給される。

CBOXOut（おつり）おつりを出力するコンポーネント。

ITEMOut（商品）

商品を出力するコンポーネント。商品を出力するための制御装置などで構成される。

各コンポーネントの振る舞いの制約• システム全体を表す状態遷移図の振る舞いと各コンポーネントを合成した振る舞いは振舞等価でなければならない。どのように分割すれば振舞等価になるか？

＝
振舞等価システムの振る舞いを表す状態遷移図
各コンポーネントの状態遷移図

プロセス代数における振舞等価• １つの状態遷移図により表現されたシステムを複数のコンポーネントに分割する方法は、プロセス代数におけるプロセス分割問題と捉えることができ、アルゴリズムが既に存在する。次に、その分割法を簡単に説明する。

振舞等価となる各コンポーネントの状態遷移図の導出① システム全体の振る舞いを表す状態遷移図をコンポーネント分コピーする② ある状態から複数のコンポーネントが従事するイベントの遷移がある場合は、必ずいずれかのイベントしか起こらないように内部イベントによる遷移を挿入する③ 各状態から、そのコンポーネントが従事しないイベントの遷移を内部イベントによる遷移に置き換える④ そのコンポーネントが従事するイベントの遷移の後に、同期のための内部イベントによる遷移を挿入する⑤ 不要なイベントの遷移を削除する

①システムの振る舞いを表す状態遷移図をコピーする• 全体の振る舞いを表す状態遷移図をコンポーネント分、コピーする
UI

ITEMOut

０ コイン 1コイン

2ボタン

商品

3CBOXIn

おつり０ コイン 1ボタン

2ボタン

商品

34

コイン

おつりボタン

4

CBOXOut

０ コイン 1コイン

2ボタン

商品

3

おつり０ コイン 1ボタン

4コイン

2ボタン

商品

3

おつりボタン4

②状態分割• 状態１は、複数のコンポーネントが従事するイベントによる遷移あるため、いずれか１つの遷移しか起こらないように状態を分割し、同期のための内部イベントによる遷移を追加する（ラウンドロビン方式）

UI０コイン

コイン

12ix 内部イベントによる遷移iyボタン
商品ボタン

3おつり

4

③イベントの置換• UIコンポーネントが従事しないイベントを同期のための内部イベントによる遷移に置き換える
UI
０

i1

i2

12ix 内部イベントによる遷移

iy

ボタン
i4

ボタン

3i3o4

④同期イベントの挿入• UIコンポーネントが従事するイベントの後に、そのイベントが起こったことを知らせる同期イベントによる遷移を挿入する
UI
０

i1

i2

1
iy2ix

ボタン

ボタン
i4
i4

i3b3i3o4

⑤不要な内部イベントによる遷移の削除• コンポーネントITEMOutについて、不要な内部イベントによる遷移の削除について説明する• イベント商品の出力は、内部イベントi3のイベントの後に実行すればいいので、i1,i2,i4による同期は必要ない。よって、状態0,1,2,4を１つの状態とする（状態の共通化）。

i1

０i0

i2

12i4

i3b

商品

3i3o4０i3b,i3oi0

商品

3全てのコンポーネントの状態遷移図• それぞれのコンポーネントは内部イベントで同期する

実装について• 各コンポーネントを１つmicro:bit上 で実装する場
合は、内部イベントによる同期を共有変数を用いて実現する。
function UI () {if (su[0] == 0) {reciveMsg(i1); su[0] = 1} else if (su[0] == 1) {roundrobin(false,button,i3b,i2,ix,iy,su,3,2)} else if(su[0] == 2) {reciveMsg(button); sendMsg(i4,1); su[0] = 4} else if(su[0] == 3) {reciveMsg(i0); su[0] = 0} else if(su[0] == 4) {reciveMsg(i3o); su[0] = 3}}function CBOXIn () {if (su[0] == 0) {reciveMsg(coin) ; sendMsg(i1,1); su[0] = 1} else if (su[0] == 1) {roundrobin(true,coin, i2, i3b, iy, ix, sci, 2, 3)} else if (su[0] == 2) {reciveMsg(i3o); su[0] = 3} else if (su[0] == 3) {reciveMsg(i0); su[0] = 0}}この教材の利点• 情報Ⅱ（４）情報システムとプログラミングのシステムの分割と設計について、それぞれのコンポーネントが一定に制約（各コンポーネントの物理的な制約）をもとに分割されることを、コンパクトな事例で学習することができる。
• 実装においては、排他制御、コンポーネント間の通信など、並列処理特有の実装における注意点について理解を深めることができる

まとめ• 情報Ⅱ（４）情報システムとプログラミングの教材として、システムの振る舞いに着目した分割法の教材を提案した。
今後の課題：
micro:bitなどのワンボードコンピュータを用いて、分割したコンポーネントを実装するまでを教材として提案できればと思う。
UI：液晶ディスプレイとボタンの制御
CBOXIn：コインのチェックとコインの確認（接触センサなどの制御）
CBOXOut：おつりの出力（サーボモータの制御）
ITEMOut：商品の出力（サーボモータの制御）

END
本研究はJSPS科研費JP20K02528の助成を受けています．

他の題材• 例えば、ハードディスクレコーダの機能をもとに分解してみよう。どのように分割すれば各コンポーネントごとに独立して開発が可能か。

コンポーネントの分割• システムの機能からコンポーネントに分割する• 例えばこの自動販売機は以下のように４つのコンポーネントへの分割が考えられる。
コンポーネント名（従事するイベント名）

機能・物理的制約の例

UI

ユーザの操作するパネル部分、スイッチなどの制御を行う

録画ユニットTVのチューアー機能

レコーディングユニット映像データを変換し、記憶装置に保存する

ネットワークユニット

ネットに接続し、番組情報などを取得
する

状態遷移表入力イベント
コイン状
態
番号（遷移元）01（遷移先）12（遷移先）234

ボタン

出力イベント商品

おつり

3（遷移先）
4（遷移先）

0（遷移先）
3（遷移先）