第4章

情報システムとプログラミング

本単元の学習内容

180

学習19

情報システム全体の情報の流れ

学習20

情報システムの情報セキュリティ 190

学習21

情報システムの表し方

198

学習22

情報システムの分割と設計

206

学習23

分割したシステムの制作とテスト 214

学習24

分割したシステムの結合とテスト 222

学習25

情報システムの評価・改善

全体を通じた学習活動の進め方

182

230
238

第

4

章

情報システムとプログラミング

本単元の学習内容 【学習内容の全体像】
4

ア

情報システムとプログラミング
1 情報システムにおける情報の流れや処理の仕組み
2 情報システムにおける情報セキュリティを確保する方法や技術

情報システム全体の
情報の流れ

イ

3情
 報システムから提供されるサービスが生活に与える効果や影響，サービスが停止した時の影響
1情
 報システムの機能や性能を明確化する要件を定義し，これを表す方法を理解する

情報システムの表し方，
情報システムの分割と設計

2情
 報システムを機能要素ごとに分割し，その関係を定義した上で，分割されたシステムの設計
3全 体の進行を見据えたプロジェクト・マネジメントの手法

ウ

1分
 割したシステムの制作に適したプログラミング言語の選択とそれを利用した制作

分割したシステムの制作・統合・テスト2分
 割して作成したプログラムの統合
3分 割したプログラムのテスト及び統合した後の情報システムの動作テスト

実際に稼働している情報システムを調査する活動や情報システムを設計し制作する活動を

全 体

通して，情報の科学的な見方・考え方を働かせて，情報システムの仕組み，情報セキュリティを確保する方法，情報システムを設計しプログラミングする方法を理解し，必要な技能を身に付けるようにするとともに，情報システムの制作によって課題を解決したり新たな価値を創造したりする力を養う。

180

▪情報システムにおける，情報の流れや処理の仕組み，情報セキュリティを確保す
る方法や技術について理解するとともに，それらによって提供されるサービスについて，その在り方や社会に果たす役割と及ぼす影響について考察する。
▪情報システムの設計を表記する方法，設計，実装，テスト，運用等のソフトウェ

学習目標

ア開発のプロセスとプロジェクト・マネジメントについて理解するとともに，情報システムをいくつかの機能単位に分割して制作し統合するなど，開発の効率や運用の利便性などに配慮して設計する。
▪情報システムを構成するプログラムを制作する方法について理解し技能を身に付けるとともに，これを制作し，その過程を評価し改善する。

▪社会の中で実際に稼働している情報システムを取り上げ，それらの仕組みと関連させながら扱う。

本単元の
取扱い

情報Ⅰの
学習内容
との関連

▪情報システムとプログラミングについては，（3）「コンピュータとプログラミン
グ」や，（4）「情報通信ネットワークとデータの活用」などの各項目と関連付けて扱う。

▪本章の演習においては，プログラミング言語Pythonを想定している。Pythonに 関 し て は，v3.7以 上 で，AnacondaのJupyter Notebook, Jupyter Labo,
Spyder などの統合開発環境での利用を想定している。

本章の
学習での
演習環境

▪環境の構築については複数のライブラリやモジュールを利用し，システム構
築 を 行 う こ と か ら， オ
ンライン実行環境と同様 に， 使 用 端 末 に 直 接Anaconda Distributionなどをインストールする
方法が考えられる。また，
Anaconda Distributionなどをインストールする
こ と で，Python及 び 必
要なライブラリをインストールすることができる。

図表1 「Anaconda Distribution」のインストール画面
URL：https://www.anaconda.com/distribution/

181

学習

19 情報システム全体の情報の流れ
研修内容
研修の目的

1

⃝情報システムにおける，ユーザーが提供する情報と情報システムが提供する利便性を理解する。
⃝情報システムにおける，情報の流れや処理の仕組みについて理解する。
⃝情報システムによって提供されるサービスについて，その在り方や社会に果たす役割と及ぼす
影響力について考察させる授業ができるようになる。

情報システムが集めるデータと生み出す利便性

情報システムとは情報通信ネットワークを活用し， れ，効率よく営業できる利便性を提供することができ

様々なデータを収集・共有し，伝達することで運用る。

されているシステムのことである。身近な情報シス

図表１ にPOSシステムのデータの流れを図解化しテムとして，コンビニエンスストアなどで使用されたものを示す。このように情報システムはユーザーかているPOSシステム（Point Of Sales System）がある。 らデータを収集し，集められたデータを効果的に処理
POSシステムは，ユーザーが提供する情報を収集し， し，そのデータを別のユーザーなどに伝達することで，集めた情報を効果的に活用することで，商品が品切れ

図表２ に示すような大きな利便性を生み出すことがですることなく，状況に応じて必要な数の商品が入荷さ

きる。

顧客の情報
などを送る

POS
レジ

ストア
PC
商品の値段をレジに表示する

商品コード・
客層・性別・
金額などの
情報を提供

顧客

配送情報
を送る

店舗
商品や
ポイントなど
の提供

商品
を送る

配送
センター

図表1 POSシステムのデータの流れを図解化したもの
182

売上情報
を送る

商品を送る

本部
各店舗の
売上情報を
処理
発注情報
を送る

メーカー

｜第４章｜

ユーザーが提供する情報

情報システムとプログラミング

情報システムが提供する利便性

・バーコードによる商品コード・購入した時間・年齢層・性別・ポイントカードとのひも付け等・在庫管理及び店舗管理の効率化
・売り上げ分析
・顧客分析
・個人の購入履歴に応じたサービスの提供

図表 2 POS システムが集める情報と提供する情報
図表３ に身近な情報システムが集める情報と提供する利便性の例を示す。情報通信ネットワークの発達にその情報をビッグデータとして活用することが近年注目されている。

より，今や私たちの生活において，情報システムは身その一方で，集められたビックデータをどう分析す

近で利用することが当たり前になり，日常生活においればいいか分からない，あるいは集めたデータを適切て必要不可欠な存在になった。そのため情報システムに管理するための情報セキュリティを確保しなければの利用者が増え，集められるデータの量が膨大となり， ならないといった課題を抱えるようになった。
情報システム

集める情報提供する利便性

電子決済システム

購入した商品店舗情報
購入日時
支払者の決済システムへの登録情報

支払いの簡略化SNS

ユーザーから投稿された
文字・写真・動画

ユーザー間の交流の促進

ITS（Intelligent Transport 位置情報
Systems）
目的地
e ラーニング

学習履歴
学習習熟度

最適な交通ルートの提供
次に学習する内容の提案

図表 3 情報システムが集める情報と提供する利便性の例

演習 1

EXERCISE

POS システムや 図表３ 以外の身近な情報システムについて，情報システムにユーザーが提供する情報と，その情報システムが提供する利便性について考えてみましょう。

2

情報システムの情報の流れや処理の仕組み

このように，情報システムはユーザーから情報を集に注目するため，図解化という概念を用いて情報シスめ，集めた情報を効果的に処理し，伝達することによ

テムの情報の流れや処理の仕組みを表現してみよう。

り大きな利便性を生み出す。

図解化とは，概念を図形の組み合わせによって表す

こうした情報システムの情報の流れや処理の仕組みものである。例えば，「西浜は茅ヶ崎に手紙を送る」

を表現する方法として，データフロー図，UML（199という概念を図解化して表すと 図表４ のようになる。

ページ）といった表現方法がある。しかし，ここでは
情報システムがどんなデータを集め，利便性があるか183

（2）要素同士の関係を矢印で書く。

西浜

手紙を送る

（3）
必要に応じて矢印の上にどのような関係なのか書く。

茅ヶ崎

このポイントを押さえた上で，POSシステムの情報の流れや処理の仕組みを図解化したものが 図表１ である。

図表 4 図形と矢印によって概念を表す図解化の例

情報システムの情報の流れや処理の仕組みは，資料等を目で見るだけではなかなか理解することができな

図解化のポイントは以下の3つである。

い。実際に自分の手で情報システムの概念を図解化し（1）対象からキーワードを抽出し，図解の要素としててみることで，情報システムにおける情報の流れや処理の仕組みについて理解することができる。

枠で囲む。

演習 2

EXERCISE

演習 1 で調べた情報システムの情報の流れや処理の仕組みを図解化し，図解化したからこそ見えてきたことについてまとめましょう。

3

情報システムの処理形態

情報システムの情報の処理形態には様々なものがあの処理も同じで，1台で集中的に処理をするか，あるる。例えば人が仕事をする場合，一人で仕事をすると

いは分散して処理するかによって処理形態が異なる。

きと複数人で仕事をするときでは，仕事のやり方が異図表５ に示すように，処理のタイミングなどによるなる。複数人で仕事をする場合は，事前に仕事のねら

情報システムの処理形態としては，バッチ処理，オンいに沿った計画を立て，人に適切な役割を割り振り， ライントランザクション処理，リアルタイム制御処理，仕事量を分散して作業する必要がある。コンピュータ
処理名

利用されている情報システム

処理内容

給与計算システム

情報を一括処理する形態。
一定期間あるいは一定量データをためてから，一括して処理をする。データを投入してから処理結果を得られるまでの処理手順が確立しており，その手順に沿って処理を行う。

オンライントラン 座席予約システム
ザクション処理
預金システム

データを即時処理する形態。
データの発生と同時に処理するが，高い信頼性と即時性が要求され，多数の端末からの同時要求に対しても，応答時間を維持できるようにすることが重要である。

リアルタイム
制御処理

自動運転システム

極めて厳しい即時性を要求される形態。カメラやセンサなどを使って常に状態を監視することが要求される。

プログラム開発

人の判断を加えながら情報処理を進める形態。ユーザーがディスプレイ上に表示されたアイコンなどを選択し，キーボードからコマンドを入力することによって，コンピュー
タとの情報のやり取りを行う。

バッチ処理

対話型処理

図表 5 情報システムの処理形態
184

対話型処理などがある。

｜第４章｜

情報システムとプログラミング

演習 3

EXERCISE

演習 1 で調べた情報システムは，どの処理形態か調べてみましょう。

4

情報システムの集中処理と分散処理

情報システムにおけるネットワークの仕組みでは， システム全体が停止してしまうデメリットがある。
集中処理と分散処理がある。拡張性の高さや障害への一方の分散処理システムは，1台のコンピュータが耐久性の面より，1台のホストコンピュータに複数の故障しても処理を継続できるため信頼性が高く，機能端末を接続し，ホストコンピュータに集中して処理さの拡張が容易ではあるが，保守やセキュリティ管理，せる集中処理から，複数台のコンピュータが処理を分運用管理が複雑になるデメリットがある。ただし近年担して処理を行う分散処理に移行するものもみられる。 では，インターネットを経由して利用するクラウドコ
集中処理は，保守や運用管理，セキュリティの管理が容易ではあるが，ホストコンピュータが故障すると

5

ンピューティングが普及しつつあり，集中処理か分散処理かを区別することの意義が薄れつつある。

クライアントサーバシステムとP2Pシステム

情報システムの分散型システムとして， 図表６ に示
サーバ

すようなクライアントサーバシステムがある。サービスを要求するクライアントと，要求されたサービスを提供するサーバで構成されている。
クライアントサーバシステムは，1つのサーバに複数の機能を持たせることも，1つの機能を複数のサーバに分散することもできる。サーバの役割として，
図表７ に示すような種類がある。

クライアントクライアントクライアント

図表 6 2 層クライアントサーバシステム

サーバ

役割

ファイルサーバ

ファイルを集中管理し，ユーザーのアクセス権に従ってファイルを提供する。

Web サーバ

Web ページを管理し，クライアントの要求によって情報や機能を提供する。

データベースサーバ

データベースを一元管理し，アクセス制御，データの登録・削除などを行う。

コミュニケーションサーバ

通信制御を行う。プロトコルの異なるネットワークを接続する機能を持つ。

プリントサーバ

プリンタを共有する機能を提供する。

メールサーバ

電子メールの配送を行う。

図表 7 サーバの種類
185図表8 に示すように，現在主流となっている3層ク

セスする形の2層構成であった。しかし，データベー

ライアントサーバシステムは，それまでクライアント

スの検索結果が全てネットワークを通じて送られるたが行っていた「データの加工」をアプリケーションサー

め，クライアントとサーバ間の通信負荷が問題となっバに行わせ，クライアントでは「入力や表示」のみをた。そこで，クライアントには画面表示などの機能を行う仕組みが主流となっている。

残し，利用頻度の高いプログラムをアプリケーション

当初のクライアントサーバシステムは，クライアントのアプリケーションがサーバのデータベースにアククライアント

サーバに置いてデータベースにアクセスする形の3層構成が主流になり現在でも多く使われている。

サーバ

操作データ

問い合わせ

表示データ

結果データ

プレゼンテーション層（Web ブラウザ）

ファンクション層（ アプリケーション
サーバ ）

データ層

（ データベースサーバ ）図表 8 3 層クライアントサーバシステムの仕組み

情報システムにおいてクライアントサーバシステムのためクライアントサーバシステムに対して，低コスがよく用いられているが，暗号資産のブロックチェー

トで拡張性の高いネットワークが構築でき，またサーンや一部のSNSアプリ（電話アプリやメッセンジャー

ビス提供までの時間が短縮できるメリットがある。そアプリなど）には，サーバを介さずに情報のやり取りの一方で，データが端末に分散して置かれることから，をするP2P（Peer-to-Peer）システムが用いられていデータの流出時にくい止めることが容易でないというるものもあり，IoT分野でも利用されている。

デメリットがある。

図表9 に示すように，P2Pはサーバを介さない。そサーバ

クライアントサーバ 型
図表 9 情報システムのネットワーク形態の比較
186

P2P（ Peer to Peer ）型

｜第４章｜

6

情報システムとプログラミング

組み込みシステム

パソコンなどの汎用的なシステムとは異なり，特定

すように，電子機器の多くは組み込みシステムと言えの機能を実現するために，専用化されたコンピュータる。組み込みシステムは，機器にコンピュータを組みハードウェアと，それを制御するソフトウェアから構込むことで，ソフトウェアを変更するだけで，製品の成されている組み込みシステムがある。 図表10 に示改良を低コストで実現できるメリットがある。

機器

ハードウェア

通信機器

携帯電話，スマートフォン，FAX

運輸機器

自動車

家電機器

テレビ，洗濯機，冷蔵庫，電子レンジ

医療機器

X 線断層撮影装置，磁気共鳴画像診断装置，陽電子放出断層撮影装置

産業機器

エレベーター，信号機，ATM

図表 10 組み込みシステムの種類の例

7

情報システムの効果的な活用方法について

情報システムの効果的な活用方法について考えるたることが重要である。これらを踏まえた上で，情報シ

めには，これまでこの章で述べてきた，情報システム

ステムの全体の情報の流れを図解化することにより，に用いられるハードウェア・ネットワーク・ソフトウェ

情報システムがどのような利便性を生み，社会にどのアの仕組みを理解した上で，情報システム全体の情報

ような影響を与えるかが見えてくる。

の流れを把握することが重要である。

ま た，GPS（Global Positioning System）とGIS

ハードウェアではコンピュータやセンサ，組み込み（Geographic Information System）な ど，2つ 以 上

システムなどのハードウェアの仕組み。ネットワークの情報システムを組み合わせることで，より高度な情では，クライアントサーバシステムやP2Pシステムな報システムが開発されている。こうした複数の情報シどのネットワークデータ通信の仕組み。ソフトウェア

ステムを組み合わせることで，情報システムの仕組み

では，ハードウェアやネットワークを制御するソフトは複雑にはなるが，新しい利便性を生み出すことがでウェアや処理形態の仕組み。これら3つの情報技術をきる。このような情報システムの効果的な活用につい理解した上で，情報システム全体の情報の流れを考えても考えていくことが重要である。

演習 4

EXERCISE

既存の情報システム 2 つを組み合わせることで，新しい利便性を生み出すことができそうな情報システ
ムを提案してみましょう。

【参考文献】●「栢木先生の基本情報技術者教室」栢木厚 著

技術評論社（2019）187

学習活動と展開
学習活動の目的

情報システムにおける，情報の流れや処理の仕組みについて理解し，情報システムが提供するサービスが与える効果と影響について考えられるようになる。

学習活動とそれを促す問い
問

展 開

1

展 開

2

い

学習活動

身近な情報システムを挙げ，情報

ユーザーが情報システムから集める情報と，情報シシステムにユーザーが提供する情ステムが提供する利便性について考える。

報と，その情報システムが提供す情報システムのデータの流れがどのようになっている利便性について考えてみよう。

るか，データの流れを把握する。

身近な情報システムを挙げ，どの情報システムがどのような用途で利用されているかような処理形態なのか考えてみよ

考え，どのような処理形態が適切であるか考える。

う。

展 開

3

複数の情報システムを組み合わせ

複数の情報システムのハードウェア・ネットワーク・た，高度な情報システムについて

ソフトウェアの仕組みを理解した上で，組み合わせ

提案してみよう。

た情報システムが提供するサービスが与える効果と影響について考える。

展開 1
問

い

身近な情報システムを挙げ，情報システムにユーザーが提供する情報と，その情報システム
が提供する利便性について考えてみよう。
⃝ユーザーが情報システムから集める情報と，情報システムが提供する利便性について考え

学習活動

る。
⃝情報システムのデータの流れがどのようになっているか，データの流れを把握する。

指導上の
留意点

188

情報システムのデータの流れを DFD（201 ページ）で指導した場合，様々な図形がでてくるため，指導が困難になる場合がある。その場合は図解化など，データの流れを把握しやすい手法を取り入れてデータの流れを表現させる。

｜第４章｜

情報システムとプログラミング

展開 2
問

い

学習活動

指導上の
留意点

身近な情報システムを挙げ，どのような処理形態なのか考えてみよう。

情報システムがどのような用途で利用されているか考え，どのような処理形態が適切であるか考える。

処理形態にはそれぞれの形態に応じたメリットやデメリットがある，これらを整理させた上で適切な処理形態を考えられるようにする。

展開 3
問

い

学習活動

指導上の
留意点

複数の情報システムを組み合わせた，高度な情報システムについて提案してみよう。

複数の情報システムのハードウェア・ネットワーク・ソフトウェアの仕組みを理解した上で，組み合わせた情報システムが提供するサービスが与える効果と影響について考える。

複数の情報システムを組み合わせると仕組みが複雑になるため，まずは 2 つの情報システ
ムを組み合わせた情報システムの事例を提示する。

まとめ
情報システムのデータの流れを図解化などで表現させ，情報システム全体の流れを把握させまとめた上で，情報システムによって提供されるサービスについて，その在り方や社会に果たす役
割と及ぼす影響力について考察できるようになる。

189

学習

20 情報システムの情報セキュリティ
研修内容
研修の目的

⃝情報システムにおける情報セキュリティを確保する方法や技術について理解する。
⃝暗号化，ファイアウォール，個人認証，アクセス制御，ネットワークのセグメント化など，セキュリティを確保する方法について理解する。
⃝情報システムのサービスが停止したときや，あるいは個人情報が漏洩したときの影響力について考え，これらに対応できる力を身に付ける授業ができるようになる。
⃝人間が安全かつ快適に活用できる情報システムの在り方や社会に果たす役割について考察させる授業ができるようになる。

1

情報システムにおける情報セキュリティ

情報システムにおける情報セキュリティを考える際て欠かせない存在になった。情報システムはユーザー

は，組織としてどのようにシステムの安定性やデータから情報を収集・共有し，伝達することで大きな利便の保守性を確保していくかという観点で考えていかな性を向上させた一方で，情報システムにトラブルが発ければならない。
「情報Ⅰ」では個人の情報セキュリ

生すると大きな事故につながる危険性を抱えている。

ティ対策について扱ったが，「情報Ⅱ」では組織や情図表１ に示すような情報システムのトラブルが起こる

報システムとしての情報セキュリティ対策についてと，企業や組織の社会的な信頼を大きく失墜させてし扱っていく。

まう可能性がある。

現代社会にとって情報システムは，日常生活におい情報システムのトラブル
機密情報の漏洩

個人情報の流出Web ページ改ざん
システム停止ウイルス感染トラブルの影響
ウイルスへの感染や不正な情報の持ち出し，記録媒体の紛失は，組織の競争力や信頼を大きく損なう可能性がある。

保有する個人情報を流出させてしまった場合は，賠償や訴訟など大きな問題にまで発展する可能性がある。

組織の顔ともいえる Web ページの改ざんは，イメージ損失につながる。また，Web サーバがウイルスに感染していると，訪問者にウイルスを感染させてしまう。

システムが停止してしまうと，最悪の場合は業務そのものが停止してしまう。
ウイルスが既に感染したパソコン内で複製され，他のパソコンに感染を広げ，上記で述べた全てのトラブルを引き起こす可能性がある。

図表1 情報システムのトラブルとその影響の例
190

｜第４章｜

これらのトラブルを防ぐために，情報セキュリティ

情報システムとプログラミング

ステムにおいて確保することが重要である。

の3要素である，機密性（認められた者だけがアクセ

これらの3要素は最大限確保すればいいものではな

スできる）
・完全性（情報や処理方法が正確である）・

く，情報システムの運用コストや，導入コストを考慮

可用性（必要なときに情報にアクセスできる）を情報シした上で検討していかなければならない。

演習 1

EXERCISE

図表１ で示している情報システムのトラブルについて，実際に起こったトラブルの内容とトラブルによる社会的な影響について調べ，トラブルを防ぐためにどんな手だてを行えばいいか考えてみましょう。

2

データの暗号化による情報流出の防止

情報システムはインターネット上で，不特定多数の鍵サーバを経由してデータのやり取りを行う。その際に送信者から受信者にデータが届くまでに，悪意のある
第三者にデータを盗み見られる「盗聴」，送信者にな

平文

暗号化

暗号文

復号

平文

りすまし，受信者にデータを送信する「なりすまし」，送信されたデータを不正に書き換えて受信者に送信す鍵

る「改ざん」などの脅威がある。また，情報システムに保管されていたデータが外部に流出した場合，機密情報の漏洩や個人情報の流出となってしまう。

暗号文

こうしたネットワーク上の脅威やデータ流出に対して考えられた技術が，データの暗号化である。暗号化とは，元のデータのビット列を，容易にその内容が分からない別のビット列に変換する技術のことである。
逆に復号とは，暗号化されたデータを元のデータに戻

図表 2 暗号化と復号の仕組み
出典：「安心してインターネットを使うために（総務省）をもとに作成

国民のための情報セキュリティサイト」

https://www.soumu.go.jp/main_sosiki/joho_tsusin/security/basic/structure/02.
html

すことである 図表２ 。情報システムに保管しているない状態となるためデータを守ることができる。デー

データを暗号化しておくことで，仮にデータが流出しタの暗号化には様々な種類がある，その一例を 図表３ても，暗号化されたままのデータではその内容が読め

に示す。

暗号方式
共通鍵暗号方式

公開鍵暗号方式

デジタル署名内容
暗号化の鍵も復号の鍵も同じ鍵を使用する暗号方式。鍵を盗まれないように大切に管理する必要がある。代表的な方式に AES などがある。盗聴対策に効果的である。

暗号化する公開鍵と復号する秘密鍵の 2 種類の鍵を使用した暗号方式。公開鍵だけを広く公開
し，秘密鍵は公開しないので情報を安全にやり取りできる。不特定多数の人と情報をやり取りすることに向いており，代表的な方式に RSA や楕円曲線暗号がある。盗聴対策に効果的である。
送信者の秘密鍵で電子文書の署名データを生成し，送信者の公開鍵で署名データの作成者が電子文書の送信者と同一であることを検証する仕組み。改ざん対策に効果的である。

SSL（Secure Sockets Layer） インターネット上で個人情報やパスワード，クレジットカードなどの情報を暗号化して送受信／ TLS（Transport Layer
Security）

するプロトコル。SSL は，共通鍵暗号方式の利点と，公開鍵暗号方式の利点の双方を生かすよ
うな暗号方式である。SSL の仕組みは，TLS に引き継がれている。

図表 3 データの暗号化の仕組みの例
191

3

情報システムのファイアウォール

情報システムが外部からアクセスを受けるときに， でルールを決め，そのルールに従って通過させるかど認められた者だけがアクセスできる機密性を保持しなうかを判断する仕組みである。パケットフィルタリン

ければならない。この機密性を確保する方法として， グはルータに実装されている場合が多い。
ファイアウォールがある。

TCP/IPネットワークでは，IPアドレスにより通信

ファイアウォールは防火壁という意味があり，情報

ホストを特定することができる。しかし，1台のホスシステムがある組織内ネットワークとインターネット

ト上で複数の通信サービス（アプリケーション）が動作の接続点で，パケットフィルタリング方式やアプリ

していることがある。このアプリケーションを識別

ケーションゲートウェイ方式などを用いて，外部からする番号をポート番号という。ポート番号には0からの不正なアクセスを防止している。

65535までの番号が付けてあり，そのうち0~1023ま

図表４ に示すパケットフィルタリング方式は，パ

ではウェルノンポート（よく知られているポート番号）

ケットのヘッダーを見て，許可されたパケットだけをと呼ばれ，特定のアプリケーションのために予約され通過させる仕組みである。パケットの送信元のIPアドている。ウェルノンポートの一部とそれに対応するプ

レスとポート番号，宛先のIPアドレスとポート番号間

ロトコルを 図表５ に示す。
ファイアウォールでは通過を許可するポート番号を設定することで，情報システムの機密性を保持するこファイアウォール

（ 定めたルールに従っているか判断 ）内部（ LAN ）

外部

ルールに
従っている
パケットは
通過を
許可される

（ インターネット ）とができる。
アプリケーションゲートウェイ方式は，プロキシプ
ログラムを使用することで，組織内ネットワークとイ
ンターネットを切り離し，アプリケーションレベルでフィルタリングを行う方式である。クライアントから
インターネット上のサーバにアクセスがあった場合は，それ以外のパケットは遮断される

プロキシプログラムがクライアントからの要求を中継し，更にサーバからクライアントの応答も中継することで組織内のクライアントを守ることができる 図表6 。

図表 4 パケットフィルタリング方式

ポート
番号

プロトコル

22

SSH

53

DNS

80

HTTP

123

NTP

443

HTTPS

L AN

D MZ
クライアントクライアント

図表 5
ポート番号とプロトコルの例

組織内
ネットワーククライアント

通信
リクエスト
リプライ

プロシキサーバ
通信リクエストプロキシによる
リプライ

図表 6 アプリケーションゲートウェイ方式
192

インターネットサーバ

｜第４章｜

このときにDMZ（DeMilitarized Zone）と呼ばれる，内部インターネットと外部インターネットの両方

情報システムとプログラミング

なアクセスがあったとしても，内部ネットワークに被害が及ばないようにしている場合が多い。

から隔離された区域を設定することで，外部から不正

演習 2

EXERCISE

暗号化やファイアウォールを設定していなかったために起こった情報システムのトラブルについて，その内容と社会的にどのような影響を与えたのか調べ，どのような対策をすれば防げたのかを考えてみましょう。

4

情報システムの個人認証

情報システムを利用する場合は，まず利用者が使用

ザIDと，利用者本人であることを確認するためのパすることを許可されている本人であるかどうかを確認

スワードを使用して行われることが多いが，情報シスするユーザ認証を行う必要がある。

テムではセキュリティを高めるために 図表7 のユーザ

ユーザ認証は，利用者を一意に識別するためのユー
ユーザ認証

認証も使われている。
内容

パスワード認証

ユーザーだけが知っている ID とパスワードにより認証する方式。

ワンタイムパスワード

一度しか使用することができない使い捨てのパスワードをその都度発行する方式。

コールバックバイオメトリクス認証

多要素認証

アクセス権を持つ端末であることを確認するため，回線をいったん切り，システム側から再発信して通信を開始する方式。

身体的特徴や行動的特徴を抽出して認証する方式。身体的特徴としては，指紋や静脈認証がある。行
動的特徴としては，署名するときの速度や筆圧から特徴を抽出する方式などがある。

ユーザーだけが知っている知識情報，ユーザーだけが持っている所持情報，ユーザーだけの生体情報などのうち，2 つ以上を組み合わせて認証する方式。

図表 7 代表的なユーザ認証の例

5

アクセス制御とアクセス権

情報システムで共有するディレクトリやファイルは，

認可とは，管理者があらかじめ定めた条件を満たし許可されていない人にデータを勝手に見られたり，書たユーザーのみアクセスを許可する制御方法である。

き換えられたりすると大きな問題につながる。そこで管理者が定めた条件をアクセスコントロール（ACL）

ディレクトリやファイルに対して，ユーザーごとに行といい，その条件を満たしたユーザーのみがアクセス動を制限している。アクセス制御の方法は，「認証・することができる。

認可・監査」という3つのモデルから成り立っており，それぞれに役割が異なる。
認証とは，対象の正当性や真正性を確かめるものであり，コンピュータにログインするユーザーが本人か

監査とは，認証や認可でとった処理の過程で発生したログを記録し，検証した結果，条件を見直すことによってより高い精度のアクセス制御を行う制御方法である。アクセス制御方式の例を 図表８ に示す。

どうかを識別するユーザ認証などがある。

193

モデル方式
任意アクセス制御

強制アクセス制御
役割ベースのアクセス制御内容
最も一般的なアクセス制御。ユーザーが自分で情報システムのアクセス制御を行う方式。ユーザーの自由度は高く，管理者の負担は少ないが，ルールの統一が難しくセキュリティ面で問題がある。

管理者がルールを決め，他のユーザーがルールを変更することができない方式。任意アクセス制御よりも一般的にセキュリティが高くなる。

管理者の持つ権限の一部を特定のユーザーに与える方式。権限を与えられたユーザーは，その範囲内で業務上必要な担当者にアクセス権を付与したりすることができる。

図表 8 アクセス制御方式の例

また実際にユーザーが情報システムにアクセスでき

図表９ に示す参加者リストのフォルダのアクセス権たとしても，ファイルやフォルダの読み取りや書き込の設定をした場合，Aさんは参加者リストのフォルダ

みのアクセス権（許可，拒否）を設定することで，情報の全ての権限を有しており，Bさんはフォルダのデーシステムの機密性をより高めることができる。アクセ

タを見る，あるいは新しいデータを追加することはで

ス権は，フォルダやファイルに対して，ユーザーごときるが，既存のデータを修正したり，削除したりするに「読み取り」「追加」「修正」「削除」などの権限をことができない。Cさんは参加者リストのフォルダの設定することができ，また複数ユーザーをまとめたグ存在すら見ることができないようになっている。

ループごとにアクセス権の設定を行うことができる。

参加者リスト

読み取り○

読み取り ×

追加○

追加 ×

修正○

修正 ×

削除○

A さん

B さん
読み取り○

追加○

修正 ×

C さん

削除 ×

削除 ×

図表 9 アクセス権の設定例

6

ネットワークのセグメント化

ネットワークで機密性の度合いが異なる情報ごとするデータを扱う学習系ネットワークを別のセグメンに，セグメントを設定することをネットワークのセグトに分けてネットワークを構築することを示している。

メント化という。教育現場においては，文部科学省よこうしてセグメントを分割することで，学習者用端り「教育情報セキュリティポリシーに関するガイドラ

末や指導者用端末から，校務系ネットワークや校務外イン」（令和元年12月版）が公開されており，セキュ部接続系ネットワークへのアクセスを防ぐことができ

リティ対策の例として， 図表10 に示すように教員が使る。

用するデータを扱う校務系ネットワークと生徒が使用
194

｜第４章｜

物理的な接続形態とは独立して仮想的情報システムとプログラミング

校務系のシステムのうち、インターネット接続が必要なものは、校務外部接続系を利用するなLANセグメントを作るVLAN（VirtualLAN）と 呼 ば れ る 技 術 で， 情 報 セ キ ュインターネット

データセンターリ テ ィ の 機 密 性 を 高 め る こ と も で き る。

校務系サーバVLANはその機能を持つLANスイッチを

校務外部接続系サーバ

情報資産

使用し，接続された機器を管理者の設定し

情報資産

情報資産

ネットワーク分離

た任意のグループに分けることで，ネット

学習系サーバネットワーク分離

校務系
ネットワーク

校務外部接続系ネットワーク

学習系
ネットワーク

校務系
ネットワーク

校務外部接続系ネットワーク

学習系
ネットワーク

ワークを分割することができる。 図表11では，1つのネットワーク内で直接通信で

学校

きる範囲
（ブロードキャストドメイン）を，ネットワーク分離

VLANを使って2つに分割した様子を示し

ネットワーク分離ている。物理的な1つのネットワークを仮想的に2つのネットワークに分割すること

校務系端末

で，柔軟にネットワークを構成・変更することができ，組織内における情報セキュリ
ティの機密性を向上させることができる。

校務外部接続系端末

教職員のみが利用

学習系
サーバ

指導者用端末 学習者用端末

児童生徒、教員が利用

図表 10 教育現場におけるセグメント化
出典：「『教育情報セキュリティポリシーに関するガイドライン』ハンドブック」文部科学省
https://www.mext.go.jp/content/20200225-mxt_jogai02-100003157_003.pdf

VLAN1

VLAN2

VLAN1

VLAN2

図表 11 VALN による仮想的なセグメント化

演習 3

EXERCISE

アクセス制御やネットワークのセグメント化を設定していなかったために起こった情報システムの事故について，その内容と社会的にどのような影響を与えたのか調べ，どのような対策をすれば防げたのかを考えてみましょう。

演習 4

EXERCISE

これまで調べてきた事例をもとに，人間が安全かつ快適に活用できる情報システムの在り方や社会に果たす役割について考えてみましょう。

【参考文献・参考サイト】●「栢木先生の IT パスポート教室」栢木厚 著 技術評論社（2019）●「栢木先生の基本情報技術者教室」栢木厚 著 技術評論社（2019）●「安心してインターネットを使うために 国民のための情報セキュリティサイト」総務省

https://www.soumu.go.jp/main_sosiki/joho_tsusin/security/business/executive/01.html

195学習活動と展開
学習活動の目的

組織や情報システムとしての情報セキュリティ対策を実行し，人間が安全かつ快適に利用できるための情報システムについて考えられるようになる。

学習活動とそれを促す問い
問
展 開

1

展 開

2

展 開

3

い

学習活動

既存の情報システムにトラブルが過去の情報システムに起こったトラブルについて調発生した場合，どのような影響がべ，どのような社会的な影響があったのか考えさせあるか考えてみよう。

る。

情報システムの情報の漏洩を防ぐ

暗号化やファイアウォール，個人認証などの技術をためには，どのような対処をすれ

基に，情報システムの利用用途に合わせた適切な技

ばいいか考えてみよう。

術を考える。

人間が安全，かつ快適に活用でき

安全かつ快適に運用され，ユーザーからの評価の高

る情報システムの在り方について

い情報システムについて調べ，情報システムの在り考えてみよう。

方について考える。

展開 1
問

い

学習活動

指導上の
留意点

196

既存の情報システムにトラブルが発生した場合，どのような影響があるか考えてみよう。
過去の情報システムに起こったトラブルについて調べ，どのような社会的な影響があったのか考えさせる。
過去の情報システムのトラブルはどのような手だてがあれば防ぐことができたのか考えさせる。

｜第４章｜

情報システムとプログラミング

展開 2
問

い

学習活動

指導上の
留意点

情報システムの情報の漏洩を防ぐためには，どのような対処をすればいいか考えてみよう。

暗号化やファイアウォール，個人認証などの技術を基に，情報システムの利用用途に合わせた適切な技術を考える。

情報セキュリティを高めることも大切だが，運用コストやユーザーの利便性についても考えた上で情報セキュリティ対策を考えるようにする。

展開 3
問

い

学習活動

指導上の
留意点

人間が安全，かつ快適に活用できる情報システムの在り方について考えてみよう。

安全かつ快適に運用され，ユーザーからの評価の高い情報システムについて調べ，情報シス
テムの在り方について考える。

その情報システムの在り方や社会的に果たす役割についても考える。

まとめ
まとめ

情報システムの果たす役割や社会的な影響を踏まえた上で，運用状況に応じた組織や情報システムとしての適切な情報セキュリティ対策が行えるようになる。

197

学習

21 情報システムの表し方
研修内容
研修の目的

⃝情報システムの設計において要件定義が必要であることを，生徒に理解させることができるようになる。
⃝ユースケース図を使って利用者とシステムとのやり取りを図示し，システムのモデル化を生徒ができるようになる。
⃝シーケンス図を使ってオブジェクト指向の考え方を理解し，システム設計に応用することを生徒ができるようになる。
⃝DFDやアクティビティ図を使ってデータの流れに着目したシステムの図表化を生徒ができる
ようになる。

1

要件定義「家を建てる」ときに，何も考えないで建てると後のような機能が必要か」「利用者にはどのような人がになって「このようなはずではなかった」と後悔するいるのか」をじっくり考える必要がある。このことをことになるだろう。そうならないためにも事前に「ど要件定義と呼び，業務上実現すべき要件である業務要のような家を建てたいか」をじっくり考える必要があ

件定義と，業務要件を実現するために必要な情報シスる。

テムの機能を明らかにする機能要件定義などがある

情報システムにおいても同様に作成する前に，
「ど

図表１ 。

業務要件定義・利用者がシステムを使う目的を明確にする。

・利用者がシステムを使うことで得られる利益を明確にする。

機能要件定義・目的を達成するために，利用者がシステムを使って行う仕事を明確にする。

・システムを使うことで利益を得るためのプロセスを定義する。 ・ユーザーの視点で，システムは何を行う必要があるかを定義
する。

例）

例）

・煩雑な在庫管理を情報システムに置き換えることで管理コス ・利 用者はシステムを使って，「在庫確認」「追加発注」「在庫トをカットする。

履歴印刷」ができる。

とができる。

タを更新し，在庫確認時は在庫の数を正しく表示する。

・利用者はシステムを通して，常に正しい在庫数を確認するこ ・システムは在庫のリストをデータとして保持し，納品後はデー

図表1 業務要件定義と機能要件定義の違い

198

｜第４章｜

演習 1

情報システムとプログラミング

EXERCISE「図書館の本の貸出」について情報システムに置き換える場合の要件定義をしてみましょう。

2

利用者とシステムのやり取りの図表化

機能要件定義の中で利用者がシステムを使って行う（1）ユースケース図

仕事を明確にする必要がある。だが，言語のみで明確利用者がシステムを使って行う仕事を明確にする場になった事項を整理しようとすると，正しく意図が伝合に使用される図には，ユースケース図などがある。

わらない場合があり，正しい情報が共有されない可能

この図は利用者とシステムとのやり取りを表したもの性が生じる。そこで，情報システムの開発においてはであり，名のとおり「システムの使用例」という意味

要件定義等を図表化することにより，正しく情報が共がある。

有できるように工夫がなされている。ここで紹介する

ここでは一つの例として商品の受注管理システムを

図 表 化 はUML（Unified Modeling Language， 統

開発することを考える。機能要件定義から 図表２ の項

一モデリング言語）と呼ばれている。

目を作った。

受注担当者が受注管理システムで行うこと
在庫管理者が受注管理システムで行うこと・システムで注文の連絡を受け付ける・システムに注文を登録する・システムで在庫を確認する・システムで在庫を確認する・システムで在庫を更新する

図表 2 機能要件定義から洗い出した項目例

上で示した要件定義をユースケース図で表現したものは下の図である 図表３ 。

受注管理システム
注文受付
受注登録
在庫確認
受注担当者

在庫更新
在庫管理者

図表 3 ユースケース図のイメージ
199

また，ユースケース図の記号には以下の意味がある 図表４ 。
アクター

システムを操作する対象。人型で描き，システム境界の外部に記述する。

ユースケースシステムの機能。機能名を丸で囲み，システム境界の内部に記述する。

システム

複数のユースケースから構成される。アクターとの境界を表すために線で囲む。システム名を上部に記述する。

図表 4 ユースケース図の記号

演習 2

EXERCISE「図書館の本の貸出システム」と「利用者」「司書」を例に，ユースケース図を作図してみましょう。

（2）
シーケンス図ここでは一つの例として商品の注文管理システムをシーケンス図はユースケース図と同じように利用者

開発することを考える。次の処理を例に取り上げる。

とシステムのやり取りを表現した図である。ユース

店員が管理画面を使って在庫の商品を調べる処理

ケース図と異なる点は，利用者とシステムのやり取りを時間軸に沿って表現する点であり，システムを実現する各要素が時間軸に沿ってどのように関係しているかが分かる。この図では，メッセージと呼ばれる矢印
で各要素間の応答を表し，縦軸（上から下）を時系列として応答の順序を表現している。

❶店員は管理画面を使って在庫確認を行おうとする。
❷管理画面の操作によりシステムは倉庫に在庫検索をかける。
❸倉 庫はその中にあるデータベース「商品リスト」に商品が存在するか検索をかける。
❹「商品リスト」は商品一覧を倉庫に渡す。
❺倉庫は商品一覧にある在庫を在庫一覧として管理画面に渡す。
❻管理画面は在庫一覧から在庫結果確認として店員に表示する。
次の図では在庫管理システムの一機能をシーケンス
図で表現したものである。システムは，「店員」「管理画面」「倉庫」「商品リスト」などの要素から構成され，店員が在庫管理画面から在庫一覧を確認する動作を表現している 図表５ 。

200

｜第４章｜

店

員

管理画面

倉

庫

情報システムとプログラミング

商品リスト

❶
在庫確認

❷
在庫検索

❸
商品検索
❹

❺

商品一覧

在庫一覧

❻
在庫結果確認図表 5 シーケンス図演習 3

EXERCISE「図書館の蔵書システム」を使って「司書」が問い合わせのあった本について現在図書館にあるかを確認する処理を例に，シーケンス図を作図してみましょう。

3

データの流れに着目した図表化

利用者とシステムとのやり取りを整理すると同時（1）DFDに，システム内をデータがどのように流れているかに

DFDとは，対象となる活動のデータの流れと処理着目した表があると，違った視点からシステムを見の関連に注目して視覚的に表したものである。具体的

つめ直すことができる。ここではDFD（Data Flowには「データがどこから発生して，どのように処理さDiagram）とアクティビティ図を紹介する。

れ，どこで吸収されるか」を，次のような記号を用いて表す 図表６ 。

201

記号

名称

意味

データフロー

データの流れを表す

プロセス（処理）

データの処理を表す

データストア（ファイル）

ファイルを表す

データの源泉と吸収

データの始まりと終わりを表す

図表 6 DFD の記号の一部

下の図では注文を受けて，在庫が変化していく処理❺在庫の引き当てができないときには，購入部門にを表現している 図表７ 。

購入を依頼する。

❶取引先から注文書がくる。

※ここでいう「引き当て」とは注文分の在庫を確❷注文を受注台帳に登録する。

保すること。

❸在庫台帳を参照して在庫の引き当てを行う。
❹在庫の引き当てができたときには，在庫台帳が更
新される。

取引先

受注台帳
注文書

❶

❷

受注処理

❸
引当

購入依頼書
❺
購入部門

図表 7 DFD の例

202

❹
在庫台帳

｜第４章｜

情報システムとプログラミング❶取引先から注文書がくる。

（2）
アクティビティ図❷注文を受注台帳に登録する。

アクティビティ図は，実行の順序や条件分岐，並行処理など，制御の流れを記述する。よって，アクティ❸在庫台帳を参照して在庫の引き当てを行う。

ビティ図はDFDと異なり，処理の分岐を明確に記述❹在庫の引き当てができたときには，在庫台帳が更することができる。

新され，商品発送手続きを行う。
❺在庫の引き当てができないときには，購入部門に

下の図では注文を受けて，在庫の変化していく処理を表現している 図表８ 。

購入を依頼する。

❶ 注文担当者

開始❷
受注台帳登録❸
在庫引当❹［在庫あり］❺［在庫なし］

購買依頼
商品発送

在庫更新
終了
終了

図表 8 アクティビティ図演習 4

EXERCISE「司書」が「本を貸し出す」ときの処理についてアクティビティ図を用いて作図してみましょう。

【参考文献・参考サイト】●「栢木先生の基本情報処理技術者教室」栢木厚 著●「IT 専科」http://www.itsenka.com

技術評論社（2019）203学習活動と展開
学習活動の目的洗い出した要件定義に基づいてシステムの図表化ができるようになる。

学習活動とそれを促す問い
問

展 開

1

い

学習活動

「図書館の本貸出システム」を利利用者及び司書の立場になって「図書館の本貸出シ

用者とシステムがどのようなデー

ステム」にはどのような機能が必要か考えて，ユー

タのやり取りをしているか図表化

スケース図で図表化する。

しよう。

展 開

2

「図書館の本貸出システム」にて利用者がシステムを使って，結果が返ってくるまで利用者が操作したらデータにアクどのような処理がなされているか，シーケンス図でセスするまでにどのような順番で図表化する。

処理されているか図表化しよう。

展 開3「図書館の本貸出システム」は状分岐を考えながら，どのような処理がなされている

況によって行う処理が変わる。どか，アクティビティ図で図表化する。

のように変わるか図表化しよう。

展開 1
問

い

学習活動

指導上の
留意点

204

⃝「図書館の本の貸出システム」にはどのような機能が必要かを考えよう。
⃝考えた機能をユースケース図で図表化しよう。
⃝必要な機能を考えることで要求定義の大切さを確認する。
⃝ユースケース図で表現する。
⃝クラス内で複数人が必要と答えている機能は大半の利用者も必要と感じている機能であることを確認させる。
⃝利用者と司書の立場では扱う処理が変わることを確認させる。

｜第４章｜

情報システムとプログラミング

展開 2⃝利用者がシステムを操作してから結果が表示されるまでどのような順番で処理が進んでい問

いるかを考えよう。
⃝考えた処理の順番をシーケンス図で図表化しよう。

学習活動

指導上の
留意点

⃝時系列で処理の順番を考えることで必要となる処理を考えさせる。
⃝シーケンス図で表現する。

処理の順番を考えさせるときに必要でない処理を取り入れていないかよく考えさせる。

展開 3
問

い

学習活動

指導上の
留意点

⃝図書館の本の貸出システムにおいて処理の分岐があることを確認しよう。
⃝処理の分岐を踏まえた上でアクティビティ図で図表化しよう。

⃝どのような場面で処理の分岐が起こるか，ケーススタディから考えさせ列挙させる。
⃝アクティビティ図で表現する。

⃝あまりに複雑な分岐になった場合は，分岐を減らすなど単純化を進めさせる。
⃝シーケンス図とアクティビティ図の違いをよく意識させる。

まとめ⃝情報システムの開発ではシステムの対象についてよく考察を行うことにより，必要となる処理が明らかになることを認識させる。
まとめ⃝言語だけでは整理しきれないことを 3 つの図表化で認識させる。
⃝ここで整理した図表を使って，システムをどのように構築するか考えると，内部設計につながることを説明する。

205

学習

22 情報システムの分割と設計
研修内容
研修の目的

⃝システムの内部を考えるソフトウェア方式設計の重要性を生徒に理解させることができるようになる。
⃝ソフトウェア方式設計から更に詳細に分割・階層構造にするモジュール分割を行うメリットと必要性を生徒に理解させることができるようになる。
⃝モジュール分割技法の違いを理解させ，生徒がモジュール分割を行えるような授業ができるようになる。
⃝適切にモジュールに分割できるようになるためにモジュール結合度を生徒が理解できるようになる。
⃝生徒がカプセル化の概念を理解し，より効果的にモジュールに分割できるようになる。

1

ソフトウェア方式設計

ユースケース図やシーケンス図などでは利用者の視ムで提供する予定の機能をどのように分割してプログ点からシステムに何が求められるかを整理した。これ

ラムとして記述するかを要件定義と矛盾がないようにを外部設計と呼び，次に行うべき設計は整理した内容設計を行う。この設計をソフトウェア方式設計と呼ぶ。

をどのようにプログラムとして記述するかを考えるも図表１ 。

のである。これを内部設計と呼ぶ。はじめに，システ

本の貸し出し分割

管理画面プログラム

蔵書リストにアクセスするプログラム

検索結果を印刷するプログラム

図表1 ソフトウェア方式設計のイメージ
206

｜第４章｜

2

情報システムとプログラミング

ソフトウェア詳細設計

ソフトウェア方式設計ではシステムをプログラム単る。いわばモジュールは，ある機能を実現するソフト

位に分割するが，ソフトウェア詳細設計ではプログラ

ウェアの部品であり，ソフトウェアユニットとも呼ばムを更に細かく，モジュールと呼ばれる単位に分割・れる 図表２ 。

階層化し，モジュール間のインタフェースを明確にす

上位モジュール
モジュール

プログラム
分割・階層化
モジュール

モジュール

下位モジュール

図表 2 階層化による分割のイメージモジュール単位に分割すると，モジュールごとに設

ジュール単位でデバッグ（218ページ）できる。1つ計・作成・テストができるので作業を分担し，並行しのモジュールを複数箇所で再利用することも可能になて進めることができる。また，問題が起こってもモり、開発の効率化につながる。

3

モジュール分割技法

システム開発ではプログラムをモジュールに分割し❸モジュールの分割技法の選択ていくが，見通しを持たずにモジュールに分割する❹モジュールの分割と，開発が難しくなることが予想される。現在ではモ❺インタフェースの定義

ジュールの分割技法がいくつか開発されている。

❻分割すべきほかのモジュールの検討

一般にモジュール分割は，次のような手順で行われる。
❶最上位のモジュールの定義

また，モジュール分割技法には，データの流れに着目したプロセス中心設計と，データ構造に着目した
データ中心設計がある 図表３ 。

❷モジュールの機能分析
207

モジュール１

モジュール２

入力モジュール３

処理

出力

図表 3 データの流れに着目したモジュール分割のイメージ

演習 1

EXERCISE

図書館の本の貸出システムの「貸し出す本があるか検索するプログラム」についてモジュール分割をしてみましょう。

4

モジュール結合とカプセル化

モジュール分割においては，モジュール同士が適切モジュールとモジュールの結び付きをできるだけ弱に分割されていないと，切り離して作業を進めること

くし，お互いの独立性を高めることにより分業での開ができない。以下にモジュール分割の留意点を示す。

発作業が行いやすくなり，モジュールの再利用も可能となるなど開発上のメリットが大きい。

・一つのモジュールの大きさが適切になるようにする。

図表４ に，独立性の低いモジュールの例を示す。モジュール内部の変数（データ）が他のモジュールから直・一つのモジュールから呼び出す他のモジュールの数に制限を付ける。

接読み書きできてしまうため，モジュールを正しく作ったとしても他のモジュールの不具合などでデータ

・モジュールからモジュールを呼び出す階層構造の整合性が壊れてしまう可能性がある。

があまり深くならないようにする。
・モジュール間のインタフェースが単純になるよ
うにする。

モジュール
変数 1

値を 3 に変更
他の
モジュール

関数
変数 2

図表４ 独立性の低いモジュール
208

値の読み出し

｜第４章｜

情報システムとプログラミングモジュールの独立性が高い状態では，モジュール

通常のプログラムでは，プログラムを「フローチャーの内部は他のモジュールから見ることはできず，モトや，反復や条件分岐などの制御構造などの処理の流ジュールが公開したインタフェースを通してのみ，それ」で考えるが，オブジェクト指向ではプログラムのモジュールにアクセスして利用することができを「処理の流れとデータを1つのまとまりにしたオブる。このような独立性の高い状態にすることは，オブジェクト」で考える。そしてプログラム全体をオブジェ

ジェクト指向という設計方式ではカプセル化と呼ばクトの関係としてとらえて設計し，開発を進めていく。

れている。以下の説明では，モジュールの独立性を

オブジェクトで見たときのモジュールは， 図表５ のよ高める方法として，オブジェクト指向のカプセル化

うに，データである変数と，手続きである関数で定義の考え方を紹介する。オブジェクト指向は広く使わされる。なお，オブジェクト指向では数値や文字列のれており，「情報I」の教員研修資料で扱った言語ではような基本的なデータもオブジェクトとして扱うこと

Python，JavaScript，Swift，ドリトルが，その他にがあるが，今回の説明では「本の登録モジュール」「本もC#，Ruby，Javaなど多くの言語がオブジェクトの貸出モジュール」のようなプログラムの機能のまと指向の考え方でプログラムを記述する。

まりであるモジュールを，大きなオブジェクトと見なして説明している。

モジュール
変数 1
関数 1

関数 2
関数 3
関数 4

変数 2

変数 3

変数 4

図表 5 オブジェクトとしてのモジュールのイメージモジュールは，変数（データ）とそれに関する手続き

タを直接アクセスすることを禁止しているが，デー（関数）を1つにまとめたものであり，他のプログラム

タを読み書きするための関数を用意することができ
在庫管理者

からは，内部のデータを直接見たり，値の変更を行っる。これはモジュールのインタフェースに相当する。

たりすることができない。このようにモジュールやオ

図表６ のモジュールでは，変数に値を書くための設定

ブジェクトの内部情報を隠ぺい化することをカプセル用の関数と，変数の値を参照するための読み出し用の化という 図表６ 。カプセル化によって，外部からデー関数を用意している。
209

モジュール
変数 1

設定関数

関数
または
別のモジュール

変数 2◯

値を3に変更×

直接の読み書きは

他の
モジュール

不可
読み出し関数◯

値の読み出し図表 6 カプセル化のイメージ

カプセル化の効果として，モジュールの内部データ

ジュールがデータの値に直接アクセスすることがない

構造やメソッドの実装を変更しても，その影響をほかので，独立性が高まり，モジュールを再利用しやすくのモジュールに及ぼしにくくなることがある。カプなるなどメリットが大きい。

セル化をモジュールの設計に利用した場合，他のモ

演習 2EXERCISE

先の演習で図書館の本の貸出システムの「貸し出す本があるかを検索するプログラム」についてモジュール分割を行いましたが，これらのモジュールをカプセル化できるかどうかを検討し，可能な限りカプセル化を行いましょう。

210

｜第４章｜

情報システムとプログラミング【参考文献・参考サイト】●「栢木先生の基本情報処理技術者教室」栢木厚 著●「IT 専科」http://www.itsenka.com

技術評論社（2019）211

学習活動と展開
学習活動の目的⃝プログラムをモジュールに分割する必要性を理解させる。
⃝プログラムを適切にモジュールに分割する力を身に付ける。

学習活動とそれを促す問い
問
展 開

1

展 開

2

い

学習活動

「図書館の本の貸出システム」に「図書館の本の貸出システム」を例にどのようなプ

おいてどのようなプログラムに分

ログラムに分割できるか，要件定義を踏まえて考え割できるか考えよう。

させる。

「貸し出す本があるか検索するプ「貸し出す本があるか検索するプログラム」に対しログラム」をモジュール分割しよてモジュール分割を行い，他の人の例と比較する。

う。

展 開

3

分割したモジュールの中でカプセ分割したモジュールの中でカプセル化できるものがル化できるものがないか考えよ

ないか考えることでモジュールの独立性を考える。

う。

展開 1
問

い

学習活動

指導上の
留意点

212

⃝「図書館の本の貸出システム」においてどのような機能が必要かを確認しよう。
⃝「図書館の本の貸出システム」においてどのようなプログラムが必要かを考えよう。
⃝要件定義を踏まえて必要な機能を確認する。
⃝機能から逆算して必要となるプログラムを考える。
要件定義からはみ出ないように必要な機能は厳選する。

｜第４章｜

情報システムとプログラミング

展開 2
問

い

学習活動

指導上の
留意点

⃝「貸し出す本があるか検索するプログラム」についてモジュール分割を考えよう。
⃝他の人はどのように分割しているか比較しよう。

⃝「貸し出す本があるか検索するプログラム」のモジュール分割を検討する。
⃝他の人はどのように分割しているか比較する。

⃝入力，処理，出力の 3 つに分けて始めると取り組みやすいことを伝える。
⃝他の人と比較することで必要ではないモジュールがないかを検証する。

展開 3
問

い

学習活動

指導上の
留意点

分割したモジュールの中からカプセル化できないか考えよう。

⃝モジュールの中からカプセル化できるものがないかを考える。
⃝カプセル化する前と後でモジュールの独立性が高まったことを確認する。

データのアクセスをどのように行っているかでカプセル化ができるかを検証させる。

まとめ⃝モジュールの分割を通して，この後の作業が分業可能になることを伝える。
まとめ⃝モジュールの独立性はとても大事で，独立性が低いと，分業が難しくなることを伝える。
⃝要求定義がしっかりなされていないと，モジュールの分割も困難であることを認識させる。

213

学習

23 分割したシステムの制作とテスト
研修内容
研修の目的

⃝単体プログラムの制作に適したプログラミング言語を選ぶ方法について理解する。
⃝単体プログラムを作成する方法について理解する。
⃝単体プログラムをテストする方法について理解する。
⃝単体プログラムをデバッグする方法について理解する。
⃝単体プログラムを作成する一連の方法について授業することができる。

1

この学習項目で使用するプログラミング言語は Python です。

プログラミング言語の選択

プログラミング言語には，データの扱いに適したも点があるが，開発時にはプログラムの動作を確認すの，機械の制御に適したもの，グラフィックスに強いるたびにコンパイル作業を行う必要がある。C，C#，

ものなどの特性があり，作ろうとするものに合ったプ

Java，Swiftはコンパイルを行うが，後述するIDE（統ログラミング言語を選べば，効率よく目的を達成する

合開発環境）を使用することで対話的な開発が可能でことができる。作成しようとするものに合わせて適切ある。インタプリタ方式はコンパイル作業が不要だ

なプログラミング言語を選択することが大切である。 が，動作させるコンピュータにインタプリタのプログ
図表１ に代表的なプログラミング言語の例を示す。

ラムが入っている必要がある。

JavaScript，PHP，

作 成 し た プ ロ グ ラ ム を 実 行 す る 方 式 に は， コ ン

Python，R，Rubyはインタプリタ方式に該当する。

ピュータが直接実行可能な形式を生成するコンパイ

作成しようとするシステムの性質により，また学習す

ル方式と，記述したプログラムを実行時に逐次コンる生徒の特性に合ったプログラミング言語を選択する

ピュータが直接実行可能な形式に翻訳するインタプリ必要があるだろう。

タ方式がある。コンパイル方式は一般に動作が速い利また，プログラムを作成するだけではなく，正しく動作するかどうかのテストも行うために，命令補完機能を備えたソースコードエディタや，デバッガを備え

言語

用途の例

C

OS や組込機器のプログラムなど

Java

情報システム開発，Android のC#

JavaScript
PHP

Python
R

Ruby
Swift

Windows のアプリケーション開発など
アプリケーション開発など

Web 画面で動作するプログラムなど

Web サーバで動作するプログラムなど
機械学習のプログラムなど
統計処理のプログラムなど

Web サーバで動作するプログラムなど

Mac や iOS のアプリケーション開発など

図表1 プログラミング言語の例
214ているIDEで開発に取り組むことも効率的である。その際に，インストール不要となっているオンライン上のエディタや開発環境も活用したい。

｜第４章｜

情報システムとプログラミング

演習 1

EXERCISE

作成したいシステムに向いているプログラミング言語を選択してみましょう。
・iOS でも Android でも動作するアプリを開発するためにどのようなプログラミング言語を選択するとよいか。
・Windows OS を前提とした図書館の図書管理システムを開発するためにはどのようなプログラミング言語を選択するとよいか。

2

単体プログラムの作成

単体プログラムの作成のゴールは，機能ごとに分割されたシステムをプログラミング言語で表現することタを取得する簡単なプログラムを作成して実行するまでの処理について学んでいく。

である。単体プログラムの多くは，入力に対して処理

例えば，キーワードを送ることにより，関連した図を行い，その結果を出力するものが多い。まず，入力書のデータを返すWeb APIを考える。作成するプロと出力のデータの形式を定めることが必要である。

グラムは，入力されたデータをWeb APIの仕様に定単体プログラムのデータの入力及び出力としては次のものが一般的である。

められた形式で送り，Web APIの仕様に定められた出力形式の図書データを受け取ることになる。 図表２・関数への引数や戻り値として渡すに，実習で使用できる図書検索用Web APIの仕様を・ネットワーク通信のメッセージとして渡す示す。このAPIを利用して図書の検索を行う単体プロ

ここでは，インターネットで公開されている関数

グラムを作成する。

（Web API）で用意されている機能を利用して，デー

変数
url

説明
図書検索を行うサーバの URL

以下は， 図表３ の params で指定するパラメータ
token

Web API を利用するためのアクセスキー

table

使用するテーブルの名前

column

検索する列の名前

value

検索する文字列

format出力形式に json を指定する

図表 2 使用する図書検索 Web API の仕様

ここで得られた書籍の情報を，単体プログラムの出ドが検索できるようになっている。 図表３ に「Python

力として表示する処理を考える。今回のサンプルでは， 入門」というタイトルで検索するPython言語のプロ
図書情報として書名，著者名，出版社名，ISBNコーグラムの例を示す。

215

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

import urllib.request, urllib.parse, json
def get(url,params):
p=urllib.parse.urlencode(params)
url=url+"?"+pwith urllib.request.urlopen(url) as res:return json.loads(res.read().decode("utf-8"))# パラメータを設定して図書を検索する
params = {"token": "test","table": "book","column": "title","value": "Python 入門 ","format":"json"}
url = "https://api.eplang.jp/mext2/search"data = get(url,params)
print(data)

図表 3 Web API を利用した図書検索プログラム

プログラムを動かしながら試すためには，公式サ
イトからダウンロードして手元のPCにPythonをインストールすることも可能だが，Googleのアカウン

開く）
をクリックする。
（３）
「Copy to Drive」（ドライブにコピー）
をクリッ
クする。

トがあれば，Google Chromeなどのブラウザから（４）サ ンプルプログラムの左側にある「[ ]」にマウ

Google Colaboratoryで実行することができる。ア

スカーソルを置くと に変わる。クリックするとカウントがなくても，次のURLに今回のサンプルプ

プログラムが実行されて結果が表示される。プロ

ログラムを実行できるページを用意した。

グラムを編集することも可能である。

（１）
次のURLにアクセスする。
（※）
http://bit.ly/39dK9qc（２）
「Open in playground」（PLAYGROUNDで（※）短縮していないURL
https://colab.research.google.com/
drive/1r26wcPi3jcVfe0BhzbyTj0-oGhi8AgBC

演習 2

EXERCISE

著者名で検索して，該当する書籍を一覧で表示するプログラムを作成しましょう。

3

単体テスト

大規模なプログラムを作成する場合や，業務や研究

この条件分岐の実行は両方ともテストされているか」としてプログラムを作成する場合には，他者が決めたのように，プログラムのソースコードを見ながらテス

仕様通りに動くプログラムを作成することになる。作トを行う。ブラックボックステストでは，ソースコー

成したプログラムが内部設計の仕様を満たしているか

ドを見ずに仕様書の機能を満たしているかを考えながどうか，また正常に機能するかどうかを確かめるテス

らテストを行う。

トを単体テストという。単体テストを繰り返してプロ
グラムのバグを発見し，単体プログラムを修正していく。 （1）ホワイトボックステスト

216

ここでは代表的なテストの考え方として，ホワイト

単体テストでは，ホワイトボックステストの考え

ボックステストとブラックボックステストについて紹方を用いることが多い。ホワイトボックステストは，介する。ホワイトボックステストでは，「ソースコー

ソフトウェアの内部構造や関数の内容を参照して，

ドのこの条件はテストしているか」「ソースコードのプログラムの論理的な構造が正しいかを確認するテ

｜第４章｜

ストである。

情報システムとプログラミング

評価 gradeA

B

Cの命令を少なくとも1回は実行する」命令網羅や，「全

成績 score

100 ～ 8079 ～ 60

59 ～ 0ての条件分岐を少なくとも1回は通る」分岐網羅／

図表 4 成績判定プログラムの判定基準

ホワイトボックステストの考え方として，「全て条件網羅などの考え方がある。
次のような処理を行うプログラムについて考えてみよう。

この機能が正しく実装されているかどうかを調べるために，「全ての命令が必ず1回以上テストで実行され

例 え ば，100点 満 点 の 成 績 を 与 え た と き に，ているか」を確認する命令網羅の考え方からテストを

図表４ のような3段階の評価を返す機能を持つ単体行う場合は， 図表５ のようなテストが全て成功するこプログラムhyouka（ ）を作成する。

とを確認すればよい。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 成績判定のプログラム
def hyouka(score: int):
if score < 60 and score >= 0:
grade = 'C'elif score < 80 and score >= 60:
grade = 'B'
elif score <= 100 and score >= 80:
grade = 'A'
return grade# ここからは単体テストのためのコード
if hyouka(59) == 'C':
print("59 → C:success!")
else:
print("59 == 'C':failed!")if hyouka(79) == 'B':
print("79 → B:success!")
else:
print("79 → B:failed!")if hyouka(100) == 'A':
print("100 → A:success!")
else:
print("100 → A:failed!")

図表 5 成績判定プログラムのテストコード

テストはキーボードから条件を入力して結果を確認することも可能だが，プログラムの開発ではソース

ム作成時に検討していない条件についても確認することができる。

コードが変更されるたびに確認する必要があることから， 図表５ のようなテストプログラムを書いて残しておくことが重要である。

（2）ブラックボックステスト
ブラックボックステストでは，ソースコードを見ず

図表５ では，「全ての命令が必ず1回以上実行されに仕様書の機能を満たしているかを考えながらテスト

る」テストコードを作成した。テストの成績であるを行う。ここでは，同値分割と境界値分割の考え方をため，入力値は0から100までの数値が期待されるが， 紹介する。
負の値や100より大きい値が入力された場合は，どの❶同値分割条件判定にも当てはまらず，関数の最後まで到達して同値分割とは，入力データをいくつかの領域に分割しまうため，テストが行われないことになる。命令網

し，分割された領域にある値は，どれをテストしても羅に加えて分岐網羅の考え方を取り入れることで，「全同じという考え方である。分割された領域のことを同ての分岐を通らない場合」の戻り値を確認するテスト

値クラスという。例えば貸出期限の日付に関する処理も設計に入ることになり，仕様の曖昧な点やプログラ

を考える。
217

同値クラス

テストする値の候補

貸出の当日

6月1日

らか1つだけをテストすればよいことになる。
❷境界値分割

貸出から 2 週間以内である

6月7日

6 月 10 日

境界値とは，同値クラスの上限や下限，またそのす貸出から 2 週間を越えている

6 月 15 日

6 月 30 日

ぐ隣の値のことである。条件の値の範囲がある場合，

図表 6 図書館システムの貸出期限の例

その範囲の両端やそれぞれを越えた値が有効であるか
無効であるかをテストする。

図書館の貸出システムにおいて，貸し出した本は2週先ほどの貸出期限の例を取ると，境界値分割でテス間以内に返却するものとする。 図表６ に，6月１日にトするケースは，貸出日からちょうど2週間後（14日

図書館システムを実行したときの，貸出期限ごとの処

後）の日，とその翌日（15日後）のとき，それぞれの境理をテストするための値の例を示す。

界値の値で正しい処理が行われるかどうかをテストす

この例では，貸出から2週間以内の処理をテストすることになる。うるう年の日付の処理や，夏休みなどる日付として6月7日と6月10日の2つの候補があるが， の特例の長期貸出などについての例外処理も入る可能
これらは2週間以内と同値クラスにあたるため，どち

性がある。

演習 3

EXERCISE

図書館の貸出システムでは貸出希望の図書を 1 冊ずつ貸出判定していきます。貸出冊数の上限 5 冊に達した場合，または既に借りている書籍の延滞がある場合には，新しく借りることができないものとします。
この判定を行うプログラムを作成する場合，分岐を網羅するテストとしてどのような入力値の組み合わせを設定すればよいでしょうか。

4

デバッグ

テストを行っていくうちに，「仕様通りにプログラ

プログラム実行時のタイミングが原因で発生するエムが動作しないが，原因がすぐには分からない」といラーなどであれば挙動が変化してしまうケースもある。

うようなバグと呼ばれる不具合に遭遇することが多い。

後者では，デバッガでプログラム中の変数をトレー

このバグを取り除くことをデバッグという。

スしたり，プログラムの任意の箇所で一時停止させる

デバッグの工程は大きく次の2つに分けられる。

ブレークポイントと呼ばれる処理を追加したりできる・エラーの性質と場所を特定すること

が，変数の値の組み合わせなどによって正しく動作し・エラーを修正することないケースなどは，突き止めるために何度もデバッガ

エラーの場所を特定するためには，原始的な手法とを操作しなければならない。

して，次のようなものがある。
・プログラム中に表示命令を散りばめて，デバッグ用メッセージを出力する
・デバッガでの情報表示

ソースコードの構造とテストデータ，テスト結果によってエラーの性質とエラーが起きている場所を突き止めていくための手法として次のような手法が挙げられる。

前者の例は，分岐の処理でどの分岐をたどっているかを確認するために，ログやコンソール画面に分岐のどのルートを通った動作となっているかを表示させる
ように命令を追加するなどである。しかし，エラーを見つける前にソースコードに手を加えてしまうので，
218（1）帰納法
帰納的にエラーを見つけるためには，次のように調査を行う。
・プログラムの正常終了，異常終了の双方のデータ

｜第４章｜を集める。

情報システムとプログラミング

値は何で，実際にはどうなっているのかを推定しなが・エラーのパターン，プログラムの矛盾を見つける

らソースコードを読んでいく。

ためにデータを構造化する。
・エラーが発生する仮説を立てる。

（3）テストケースの利用
これまでのテストは仕様通りに動作するかどうかを調べるためのテストであったが，バグがある疑いが強（2）
逆戻りで考える
正しくない結果を返しているソースコードの箇所かくなった場合は，エラーがどこで発生しているかを突ら，逆順にプログラムをたどっていく。それぞれの箇

き止めるためのテストケースを設計するという手法も所で，プログラムの変数が持たなければならなかった

考えられる。

演習 4

EXERCISE

10 名の 10 点満点の成績について，平均と中央値，最大値を表示するロジックを作成しました。しかし，
統計モジュールで確認したところ値が異なります。元のプログラムのエラー箇所を特定するためには，どのように絞り込めばよいでしょうか。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

import statistics# 成績分析のプログラム
def def_mean(ary):sum=0
n=len(ary)for num in ary:
sum=num# sum+=num の間違い
return sum / n
def def_median(ary):
n=len(ary)index1=int(n/2)# index1=int(n/2)-1 の間違い
if n%2==0:
index2=index1+1
else:
index2=index1
return (ary[index1]+ary[index2])/2
def def_max(ary):
x=ary[0]for num in ary:
if x > num:
# if x < num: の間違い
x=num
return x# ここからは単体テストのためのコード
def test_mean(ary):
return def_mean(ary) == statistics.mean(ary)def test_median(ary):
return def_median(ary) == statistics.median(ary)def test_max(ary):
return def_max(ary) == max(ary)data = [2,3,3,5,6,6,7,8,8,9]
print(test_mean(data))
print(test_median(data))
print(test_max(data))【参考文献】●「はじめよう！ システム設計 要件定義のその後に」羽生章洋 著 技術評論社（2018）●「知識ゼロから学ぶ ソフトウェアテスト [ 改訂版 ] アジャイル・クラウド時代のソフトウェアテスト」高橋寿一 著●「ソフトウェア・テストの技法 第 2 版」Glenford J.Myers 著

長尾真 監訳

松尾正信 訳

近代科学社（2006）

翔泳社（2013）

219

学習活動と展開
学習活動の目的分割したシステムの一部である単体プログラムを作成し，作成したプログラムについて単体テストとデバッグを行えるようになる。

学習活動とそれを促す問い
問

展 開

1

い

学習活動

作成しようとするシステムについ単体プログラムに与える入力データは，どのようなて，単体プログラムの作成に必要データで，どのような形でプログラムに入力されるな情報は何か。

のかを設計から読み解く。
単体プログラムの結果として，どのようなデータをどのような形で出力すればよいかについて考える。

展 開2

図書館の図書管理システムの 1

単体テストの実施計画を考える。

つの機能について，単体プログラ

内部設計書から，テストで確認すべき項目とテスト

ムを作成してみよう。

に使用するテストデータを検討し，テスト計画として文書にまとめる。
テストプログラムを書いて，テストを実行し，実行
結果についてまとめる。

展 開

3

作成した単体プログラムに対し作成した単体プログラムが設計通りに作成されていて，入力に対する出力結果が正しるかを調べる単体テストを実施していく。

いか単体テストを行ってみよう。

展開 1
問

い

作成しようとするシステムについて，単体プログラムの作成に必要な情報は何か。
⃝単体プログラムに与える入力データは，どのようなデータで，どのような形でプログラム

学習活動に入力されるのかを設計から読み解く。
⃝単体プログラムの結果として，どのようなデータをどのような形で出力すればよいかについて考える。

指導上の
留意点

220

全員が同じ機能を持つ基本的なプログラムを作成するのか，チームに分かれて生徒一人一人が異なるプログラムを作成するのかは，生徒の技術レベルに応じて検討すること。

｜第４章｜

情報システムとプログラミング

展開 2
問

い

図書館の図書管理システムの 1 つの機能について，単体プログラムを作成してみよう。

⃝図書管理システムの機能を 1 つ選び，その処理を実装するプログラムを作成していく。
学習活動⃝入力データから適切な出力結果を得られるようにプログラムの処理を書いていく。
⃝入力における漏れがないか，正しい論理構造となっているかを意識しながらプログラムを作成する。

⃝全員が同じ機能を持つ基本的なプログラムを作成するのか，チームに分かれて生徒一人一
指導上の
留意点

人が異なるプログラムを作成するのかは，生徒の技術レベルに応じて検討する。
⃝データを扱うプログラムを作成する際は，生徒が入力に時間をかけないようにあらかじめ教員側で準備しておくことも考えられる。

展開 3
問

い

作成した単体プログラムに対して，入力に対する出力結果が正しいか単体テストを行ってみよう。

⃝単体テストの実施計画を考える。
学習活動⃝内部設計書から，テストで確認すべき項目とテストに使用するテストデータを検討し，テスト計画として文書にまとめる。
⃝テストプログラムを書いて，テストを実行し，実行結果についてまとめる。

指導上の
留意点

テスト項目について完全に網羅するテストを一度に設計することは難しいため，思い付きやすいテストから記述するように指導する。

まとめ⃝情報システムのような大きなシステムを制作する段階の 1 つである，単体プログラムの作成について，理解させる。
まとめ⃝設計の仕様通りに単体プログラムを作成できたことを検証するための単体テストについて理解させる。
⃝単体テストで発見された不具合やバグは，デバッグの考え方を利用して取り除いていく。

221

学習

24 分割したシステムの結合とテスト
研修内容
研修の目的

⃝分割して制作したプログラムを結合して確認する工程について理解する。
⃝モジュールの結合とテストについて理解する。
⃝結合テストの概念について理解する。
⃝総合テストで利用するシナリオ作成の技法について理解する。
⃝分割したシステムの結合とテストについて生徒に考えさせることができる。

1

この学習項目で使用するプログラミング言語は Python です。

結合テスト

学習23で学んだように，「点数から成績を判定す

JSON形式のデータを受け取り，見やすい形で画面にる」「特定の書籍を検索する」のような特定の処理を表示する。末尾の3行は全体を実行するメインの処理行う関数レベルのテストについては，単体テストを行である。これらの関数は個別に単体テストを行っておうことが有用であった。これらを組み合わせて「画面り，その後， 図表１ のように一つのモジュールとしてから書名を入力し，その書籍を検索し，表の形で表示利用できるように結合した。

する」といった複数の関数から構成される，まとまっ

なお，一般的に大規模なシステム開発では，モジューた処理を行うモジュールのテストについては結合テス

ルは単体テストの対象となり，複数のモジュールを組トを行う必要がある。

み合わせて結合テストが行われる。以下の一般的な説

結合テストを行うためには，モジュールを構成する

明ではこの位置付けでモジュールを扱っている。高等個々の関数のようなサブモジュールについて単体テス

学校の授業では小規模なシステムを扱うため，関数レトを行った後に，それらの関数を組み合わせて動作す

ベルのサブモジュールに単体テストを行い，それらをるモジュールの形に結合する。結合テストでは，プロ結合してモジュールを作り結合テストを行うと考えるグラムの構造によるテストではなく，仕様書にある通と分かりやすい。

りの動作をするかどうか仕様書に沿ったテストを設計して実行していく。

（1）結合テスト

図表１ に， 図 書 を 検 索 す る モ ジ ュ ー ル の 例 を 示

結合テストはモジュールを結合して動かし，全体とす。このモジュールには，あらかじめ本教材用に用して正しい機能を備えていることを検証するテストで意された関数get（ ）の他に，3個の関数がユーザーにある。ここで結合するモジュールは単体テストが終より定義されている。検索語を入力する関数「title_

わっていることが前提である。結合テストで明らかに

input（ ）」は，画面から検索語を入力し，その文字なる不具合は，主にモジュール間のインタフェースの列を返す。図書を検索する関数「title_search（ ）」は， 不備である。呼び出すときに引数の対応が間違っていWeb APIを使用して検索語に当てはまる図書を検索

る，渡す引数に正しい値がセットされていない，など

し，結果を返す。結果を表示する関数「disp（ ）」は， のエラーが想定される。
222

｜第４章｜

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

情報システムとプログラミング

import urllib.request, urllib.parse, json
def get(url,params):
p=urllib.parse.urlencode(params)
url=url+"?"+pwith urllib.request.urlopen(url) as res:return json.loads(res.read().decode("utf-8"))# 検索語入力関数
def title_input():
print(" 検索するタイトルを入力してください ")title=input()
return title# 図書検索関数
def title_search(title):
params = {"token": "test","table": "book","format":"json","column": "title","value": title}
url = "https://api.eplang.jp/mext2/search"data = get(url,params)
return data
# 結果表示関数
def disp(data):
for record in data:
print(record["title"]+"=>"+record["price"]+"円 ")# 全体の実行
title=title_input()
result=title_search(title)disp(result)

図表 1 図書を検索するモジュールの例

モジュールを分割するときに，各モジュールが持つい場合は，テストドライバと呼ばれるダミーの上位モ

機能とモジュール間のインタフェースを設計する。結ジュールを用意してテストを行う。スタブを利用する

合テストでは，その設計の不備や，単体プログラムのときには，呼び出しや受け取りのパラメータのチェッ

バグを明らかにできる。

クや正常値・異常値の判定など，呼び出し機能に関わ

ここで，他のモジュールを呼び出すものを上位モる必要項目だけのテストとなることが多い。

ジュール，他のモジュールから呼び出されるものを下位モジュールという。
上位モジュールから順に結合していく方法をトップ
ダウンテストといい，呼び出される下位モジュールが完成していない場合は，スタブと呼ばれるダミーの下位モジュールを用意してテストを行う。
下位モジュールから順に結合していく方法をボトム
アップテストといい，上位モジュールが完成していな
223

テスト対象の下位モジュールが返したリターンコード（2）
スタブとテストドライバ
スタブは，何も処理せずに特定の結果を呼び出したや引数の値を，表示・印刷する機能がある。これを検テスト対象の上位モジュールに返すことが多い。上位

証することで対象の下位モジュールのテストができる。

モジュールから渡された引数などの値を表示・印刷す

例えば， 図表１ では末尾の３行がテストドライバのる機能があると便利である。

役割を果たしている。この３行は，検索語の入力，検図表２ に，図書検索関数「title_search()」のスタブの例を示す。これは，どのようなタイトルを引数で索語による図書の検索，検索結果の表示という３つのモジュールを結合するテストを行うことができる。

受け取った場合でも，常に同じ図書のデータを返す。

スタブやテストドライバは個別に作成する場合もあ

実際の図書検索関数が完成していなくても，代わりにるが，汎用的なスタブ，テストドライバを生成できる

このスタブを上位モジュールから呼び出すことで，モパッケージも存在する。

ジュール全体の動作を確認することができる。
テストドライバは，適切な引数を設定してテスト対
象の下位モジュールを呼び出すことが多く，一般的に

1
2
3

def title_search(title):
data = json.loads('[{"title":"Python の 教 科 書 ","author":" ク ジ ラ 飛 行 机","publisher":"マイナビ出版 ","year":"2016","ISBN":"--","price":"2580"}]')
return data

図表 2 図書検索関数「title_search（ ）」のスタブの例（2 行目は長い 1 行）

演習 1

EXERCISE

蔵書検索で該当する書籍のうち，1 つを選んで貸し出し予約に追加する機能を実現します。関数（API）を利用した蔵書検索機能と予約管理機能を結合させてみましょう。

結合テストの方式

特徴

欠点

・インタフェースエラーなど重大な欠陥を早期に検出できる。
トップダウン
テスト・作業の分散が難しい。

・重 要度の高い上位モジュールを繰り返しテストすることになり，全体の信 ・スタブを作成する必要が
頼性があがる。

ある。

・テストドライバを作成する必要がない。
・分担しての並行作業が容易であり，早期に多くのモジュールをテストできる。 ・重要な欠陥が後になってボトムアップ
テスト

・欠陥の影響が大きい共通モジュールの品質を先行して高めることができる。
・スタブを作成する必要がない。

検出される。
・テストドライバを作成する必要がある。

図表 3 結合テストの方式

なお，実際のシステム開発においては， 図表３ のビッグバンテストと呼ばれる。

トップダウンテストとボトムアップテストを同時に進めていくことが一般的でありサンドイッチテストと呼224（3）ユースケーステストによる機能テスト

ばれる。また，比較的小規模なプログラムでは全てのシステムを，開発側からの視点の他に，利用する側

モジュールを一度に連結してテストすることも行われの視点でテストすることも有用である。利用者の使用

｜第４章｜

事例であるユースケースを列挙し，図書検索機能であれば「どの項目を（例えば書名）」「どのキーワードで予約機能

情報システムとプログラミング

図書検索機能

誰がどの項目をされたら多すぎるかどうか）」などを利用する視点か

どの書籍をどのキーワードでら想定しテストを行う。 図表４ にユースケースの検討

いつ

検索件数は

（例えばPython入門）」「検索件数は（例えば10件表示

例を示す。

何人待ちか
図表4 ユースケーステストの検討例

2

総合テスト

システムの制作では，プログラムの作成と単体テスシステム開発の機能テストでは，要求仕様に規定さ

ト，結合テストを経てから，システム全体として必要れている機能がシステムに盛り込まれているかどうかとされていた機能や仕様を満たすかどうかの総合テスを確認するテストである。しかし，総合テストでは，トを行うことになる。このためには，実際にシステム

実際にユーザーが利用するのと同じように，手作業でを利用する場面を想定した試験手順書を作成し，一連入力したり操作したりして試験するため，全ての機能の流れに沿ってシステムを操作したときのシステム全の動作を網羅するには作業工数が多くなってしまう。

体の動作を確認しなければならない。また，利用者の各機能の詳細については，単体テストでしっかりと確立場になって操作する場合でも，通常の利用ではなか

認し，機能テストの段階では利用シナリオに沿ったテ

なか出てこない場面の動作確認や異常時の動作確認なストを実施していく。

ども総合テストの中で行うことになる。

図表５ に，図書を登録するモジュールの例を示す。

システム開発では，単体テストと結合テストが終了

総合テストの機能テストでは，複数のモジュールを組した後は，総合テストと呼ばれる段階を経てシステム

み合わせたときのシステム全体の動作を確認する。こ

完成となる。総合テストは，機能テストと非機能テスの例では，既に登録されている図書データに加えて，

トに大きく分けられる。

図表５ のモジュールで登録された図書データが，図書検索モジュールから正しく検索できることを確認する
（1）
機能テスト

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

テストを行う必要がある。

import urllib.request, urllib.parse, json
def get(url,params):
p=urllib.parse.urlencode(params)
url=url+"?"+purllib.request.urlopen(url)# パラメータを設定して図書を登録する
params = {"token": "test","table": "book","title": "Python の教科書 ","author": "クジラ飛行机 ","publisher": "マイナビ出版 ","year": 2016}
url = "https://api.eplang.jp/mext2/write"
get(url,params)

図表 5 図書の登録モジュールの例
225

などに起因する停電等の障害から復旧してシステムの（2）
非機能テストシステム開発の非機能テストでは，要求仕様で決め稼働を再開できるかといったシステム回復テストなどられている場合には，性能や，ユーザーが操作をしても本番稼働させる前にテストしておかなければならなから結果が表示されるまでの処理時間や，負荷が高い。 図表６ に，無停電電源装置（UPS）を用意するこ

まったときでも正常に動作するかなど非機能要件と呼とで，停電などでシステムが停止することを防ぐ工夫

ばれる観点でのテストも行う。

の例を示す。

例えば，そのシステムが複数ユーザーで同時利用すま た， ネ ッ ト ワ ー ク 構 成 を 二 重 化 し て いるときる性質のシステムであれば，多数のユーザーからアク

図表７ なども，障害で通信に異常が発生した際，自動セスされて負荷が高くなったときでも正常に動作する的にバックアップ回線に切り替わって通信を継続するかどうかの性能テストは非常に重要になる。

仕組みが機能するかどうか，稼働前にテストしなけれ他にも，ハードウェアやソフトウェア，そして災害

主

電源
ケーブル

停電

ばならない。

情報システム

UPS

主回線

副

ユーザー

副回線

普段は主回線のネットワークを使用。
主情報システムサーバ

図表 6 UPS を接続したシステムの図

主回線

副

ユーザー

副回線

主回線が使えないときは自動的に副回線に切り替わる。

図表 7 ネットワークを二重化したシステムの図

演習 2

EXERCISE

これまで作成してきたシステムまたはプログラムで，動作中に強制終了などが起きてしまった場合，どのようなデータがバックアップされていれば，業務が再開できるかを考えましょう。
また，どのようなバックアップ先にどのようなやり方でバックアップを取ればよいか，考えましょう。

3226

セキュリティテスト

情報システムを実際に運用する際は，開発者以外の（1）ユーザ認証に対する攻撃

ユーザーが操作したり，他のコンピュータからアクセ❶ブルートフォース攻撃

スできる環境に置かれたりすることがある。そのため，あるユーザIDに対して連続して認証を試す攻撃でしっかりとしたセキュリティ対策が必要となる。シスある。パスワードを変えていき何度も認証を試みる特テムの利用が始まってしまうと，脆弱性の改修が難し徴があるため，一つのIDに対して一定時間内に認証くなってしまうことがある。セキュリティの脆弱性を

失敗が連続するときには一時的に該当IDをログイン利用した攻撃手法には、次のようなものがある。

不可とするなどの対処がある。

ユーザ ID：AAA0001

パスワード：012345

ログイン失敗（1 回目）

ユーザ ID：AAA0001

パスワード：123456

ログイン失敗（2 回目）

ユーザ ID：AAA0001

パスワード：abcdef

ログイン失敗（3 回目）

ユーザ ID：AAA0001

パスワード：password

ユーザ ID：AAA0001

パスワード：qwerty

ログイン失敗（4 回目）

ログイン失敗（5 回目） →一時的に凍結｜第４章｜❷リバースブルートフォース攻撃

情報システムとプログラミングとユーザIDを変えてログインを試す攻撃である。一

ブルートフォース攻撃に似ているが，典型的な弱つのIDに対しての失敗回数が少ないため，ブルート

いパスワードなどのパスワード一つに対して，次々

フォース攻撃への対策を回避する可能性が高くなる。

ユーザ ID：AAA0001

パスワード：password

ログイン失敗（1 回目）

ユーザ ID：AAA0002

パスワード：password

ログイン失敗（1 回目）

ユーザ ID：AAA0003

パスワード：password

ログイン失敗（1 回目）

ユーザ ID：AAA0004

パスワード：password

ログイン失敗（1 回目）

ユーザ ID：AAA0005

パスワード：password

ログイン失敗（1 回目）❸リスト型攻撃（3）CSRF（クロスサイトリクエストフォージェエリ）

他のサービスなどから入手したユーザIDやパス

Webブラウザからの情報を詐称して，Webサイト

ワードでログインできるかどうか試す攻撃である。 のプログラムに意図しない不正なリクエストを実行さ
ユーザIDにメールアドレスしか設定できない設計にせ，サーバの情報を取得したり，コードを実行させたなっていると，リスト型攻撃の対象となりやすい。

り，などの動作をさせる。他のサーバに書き込みなどをしたり，利用者が意図しない攻撃をしかけたりする
挙動をする攻撃もある。

（2）XSS（クロスサイトスクリプティング）
あ る サ イ ト か ら 送 ら れ るHTMLペ ー ジ に，<Script>（スクリプトタグ）を追加して，そのサイト

これら以外にも，通信を利用してメッセージのやりの範囲内で動的なページであるかのように振る舞う攻取りをしている場合には，通信方式が平文で暗号化さ撃である。偽情報を表示してしまったり，Cookieとれていない場合は盗聴や改ざんの可能性が考えられる。

して保存された情報を取られてしまったりする被害が重要な通信をする場合は，SSL/TLSなどのプロトコ起こる。これはシステムに対する攻撃ではなくクライルを利用して通信経路での暗号化を行う必要があるだ

アントに対する攻撃である。

ろう。

演習 3

EXERCISE

ブルートフォース攻撃とリバースブルートフォース攻撃のどちらも防ぐことができるログイン認証システ
ムには，
ログイン失敗回数での制限以外に，どのようなセキュリティ対策をすればよいか考えてみましょう。
攻撃の種類
ブルートフォースアタック

特徴

対策

一つのアカウントに対して連続で複数のパス

一定時間内に一つのアカウントで連続 5 回

ワードでログイン認証を突破しようとする

ログイン失敗した場合は，アカウントを一時凍結扱いにする

リバースブルートフォース

パスワードを固定して，連続で複数のアカウ

アタック

ントのログイン認証を突破しようとする

同一パスワードで 5 回以上の連続ログインが試みられたら脆弱なパスワードと判定して使用不可とする

演習 4

EXERCISE

システム構築に使用しているコンピュータと OS でどのようなポートを使用しているか，確認してみてください。その中に外部からのアクセスが不要なポートがあるかどうか確認しましょう。
Windows であればネットワークに接続している状況で，コマンドプロンプトから TCP の通信状態を調査する netstat コマンドを実行してみてください。
227

学習活動と展開
学習活動の目的

分割して作成されたプログラム同士を結合して，仕様として要求されている機能を実現できるようになる。

学習活動とそれを促す問い
問

展 開

1

展 開

2

い

学習活動

結合させたい単体プログラム同士

対象の単体プログラムをテストするためには，テスの仕様から，どのような結合テス

トドライバとスタブのどちらを準備すべきかを考トを計画すればよいか考えてみよ

え，単体プログラム間の仕様を確認しながら，結合う。

テストとして呼び出してみる。

あるプログラムから渡されるデー関係する 2 つの単体プログラムを結合して正常に動タを入力として，もう一つのプロ

作することを確認する。

グラムの処理が完了するかテスト
してみよう。

展 開

3

総合テストで実施する項目を選

総合テストのうち，実施できるテストについて検討

び，実際に実行してみよう。

してみる。
作成したシステムのセキュリティについて，脆弱性があるかどうかを検討してみる。

展開 1
問

い

学習活動

指導上の
留意点

228

結合させたい単体プログラム同士の仕様から，どのような結合テストを計画すればよいか考
えてみよう。
対象の単体プログラムをテストするためには，テストドライバとスタブのどちらを準備すべ
きかを考え，単体プログラム間の仕様を確認しながら，結合テストとして呼び出してみる。
⃝常にシステム全体を意識し，上位モジュールから結合する場合はスタブ，下位モジュールから結合する場合はテストドライバが必要なことを体験させる。
⃝一度に複数のモジュールを結合させず，一つずつ結合して動作を確かめるようにする。

｜第４章｜

情報システムとプログラミング

展開 2
問

い

学習活動

あるプログラムから渡されるデータを入力として，もう一つのプログラムの処理が完了する
かテストしてみよう。

関係する 2 つのプログラムを結合して正常に動作することを確認する。

⃝データの受け渡しが正常に行われるよう，プログラム間のインタフェースを確認させる。
指導上の
留意点

⃝プログラム間でどのようなデータが受け渡されたかを確認させる。
⃝受け取ったデータが正常に処理された際に期待される状態を考えさせる。
⃝実際に結合したプログラムの処理結果と上記を比較させる。

展開 3
問

い

学習活動

指導上の
留意点

総合テストで実施する項目を選び，実際に実行してみよう。

⃝総合テストのうち，実施できるテストについて検討してみる。
⃝作成したシステムのセキュリティについて，脆弱性があるかどうかを検討してみる。

⃝システムを実際に利用するシナリオを考えさせ，それに沿った機能テストを実施させる。
⃝機能以外にテストしなければいけないことを考えさせ，それをテストする方法を話し合わせ，テスト可能なものを実施させる。

まとめ
まとめ

単体プログラムを結合させ，必要な結合テスト，機能テスト，非機能テストなどを考えて実施することにより当初の仕様に沿ったシステムになっているかを確認することができる。

229

学習

25 情報システムの評価・改善
研修内容
研修の目的

⃝作成した情報システムについて，様々な視点から評価を行う方法について理解する。
⃝システムの作成において，プロジェクトマネジメントの視点から改善を行う方法について理解する。
⃝適切な規模の関数に分ける等のソースコードの改良や，テストを改善する方法について理解する。
⃝生徒が情報システムの評価・改善を理解し実施する授業ができるようになる。

1

この学習項目で使用するプログラミング言語は Python です。

情報システムの評価

情報システムを実際に稼働させる前に，要求定義を

機能を限定したシステムの作成と評価を行い，徐々にしっかりと満たしているかどうかの評価が必要となる。 機能を追加しながら繰り返してシステムを作り上げる
ウォーターフォール型のシステム開発では，開発工程

スパイラル型の開発も利用されている。

とテスト工程を対応させたＶ字モデルという考え方が要求定義を満たしているかどうかを総合テストやシある 図表１ 。ウォーターフォール型の開発は「時間をステムテストと呼ばれるテスト工程で確認していく。

かけて仕様を設計し，その仕様の通りに実装してテス

総合テストには，機能テストや非機能テストといったトする」方式であり，仕様を決めたら変更が難しい銀分類があり，機能テストでは要求定義で必要とされて行等のシステムなどの開発に従来から広く使われてきいる要求がプログラムの機能として盛り込まれているた。近年ではスマートフォンなどの普及により，「大かどうかをテストしていく。実際の利用場面に沿った

まかに動く試作品を短期間で作り，その動作を確認しテストケースを作成して，一連の機能が動作するかどながら仕様を修正する」形のプロトタイプ型の開発や， うかを確認する。
非機能テストと呼ばれるテストでは，プログラムの機能ではなく処理速度や反応速度など，ユーザーが操作する際に不満がないレベルのものであるかをテスト
要求定義

総合テスト

基本設計

結合テスト

詳細設計

単体テスト

実装
図表1 情報システム開発のＶ字モデル
230

していく。性能テストとは，情報システムを実際と同じように動かしてみて，要件を満たす性能が出るかどうかを確認するテストである。
総合テスト仕様書に記載すべき項目として，次のよ
うなものがある。

｜第４章｜

・テスト概要： どのようなテストなのか・テストの実施環境： ハードウェアやソフトウェアなどの環境

・テストケース： 機能テスト，性能テストなどのテストの種類

情報システムとプログラミング

どのような結果が得られればテスト合格なのか
・テスト手順： どんなテストデータを用いるかも含めて具体的に記述

・テスト実施担当者： テスト結果を確認する担当者が異なる場合は，それも記載

・テストスケジュール ： テスト環境の構築やテストデータの用意なども含む

演習 1

EXERCISE

総合テストにおける機能テストとして，「新着図書の登録機能」をテストするためのシナリオを考えてみましょう。

2

プログラムの改善・改良（1）
プログラムの構造化とを確認してから，プログラムの作成に入る。このあ

日常書く文章は，段落も見出しもなく何ページも続とは，プログラムの作成とテストを繰り返して，テス

くと，論理的な構造として表現することが難しく，そトに全て合格するようになった時点で単体プログラム

れを正しく読むことも困難になってしまうことがある。 が完成したと見なす 図表２ 。
プログラムも，「ここからここまでを繰り返す」「条件が成り立つときはこの処理とこの処理を実行する」な●テストツールの利用
これまでの学習では，テストを設計してテストコー

どのように，明確な構造を持たせることが重要である。 ドを記述して実行してきた。テストをより効率的・効更に，まとまった内容については，章や節の見出しの果的に行うためにはテストを補助してくれるテスト

ように関数を定義して，その処理の名前を付けておく

ツールを利用することも有用である。テストツールにことでプログラム全体を把握しやすくなる。

は，テストデータの生成を助けるものや，テストの網羅性を確認するためのカバレッジツール，テストを一（2）
テスト駆動開発
通常はプログラムを作成したあとにテストのためのプログラムを作成するが，テストを中心にプログラムを作成していくテスト駆動開発（TDD：Test
Driven Development）と呼ばれる手法も使われてい度にもれなく行うためのテストランナーなどがある。
また単体テストを助け，テスト駆動開発を行いやすくするテストのためのフレームワークがある。
Pythonにおいては，標準ライブラリに unittest モ
ジュールというテストユニットが用意されている。

る。TDDでは，従来の開発のように単体プログラミ

従来の開発順序

ングが完了してからテストを行うのではなく，顧客と相談して仕様を決定したあとに，まず入力に対して期待する結果や出力が得られるかどうかのテストの設計を行う。この時点ではプログラム本体をまだ作成して・内部設計書を作成
・単体プログラムを作成
・テストを設計・テストの実施（成功）いないのでテストには合格しない。このテストを全て実施できるようになり，テストで不合格が得られたこ

テスト駆動開発での開発順序
・仕様の確定・テストを設計・テストの実施（失敗）・単体プログラムを作成
・テストの実施（成功）

図表 2 開発順序の比較

演習 2

EXERCISE

次のテストプログラムを実行して結果を確認しましょう。
231

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

import unittest
import statistics# 成績分析のプログラム
def def_mean(ary):sum=0
n=len(ary)for num in ary:# sum+=num の間違い
sum=num
return sum / n
def def_median(ary):
n=len(ary)index1=int(n/2)# index1=int(n/2)-1 の間違い
if n%2==0:
index2=index1+1
else:
index2=index1
return (ary[index1]+ary[index2])/2
def def_max(ary):
x=ary[0]for num in ary:
if x > num:
# if x < num: の間違い
x=num
return x# ここからは単体テストのためのコード
data = [2,3,3,5,6,6,7,8,8,9]class Test(unittest.TestCase):
def test_mean(self):
self.assertEqual(statistics.mean(data), def_mean(data))
def test_madian(self):
self.assertEqual(statistics.median(data), def_median(data))
def test_max(self):
self.assertEqual(max(data), def_max(data))
if __name__ == '__main__':unittest.main(argv=['first-arg-is-ignored'], exit=False)

演習 3

EXERCISE

この unittest の仕組みを使って，作成したプログラムの関数について単体テストを行ってみましょう。

（3）
リファクタリング
情報システムについて，更なる機能の追加や改善がウェアの内部構造を変化させること」と定義される。
整理されたコードにするために，正常に動く状態のプ必要とされる場合もある。また，機能は変えないが， ログラムに変更を加えて書き直していく。変更を加え保守性を高めるためにプログラムを改善していくこと

るが，リファクタリング前の動作や出力をリファクタもある。このような場合の考え方に「リファクタリン

リング後も維持していなければならない。リファクタ

グ」が利用できる。

リングのパターンの例として次のようなものがある

リファクタリングは「外部から見たときの振る舞いを保ちつつ，理解や修正が簡単になるように，ソフト

232

図表３ 。

｜第４章｜

パターン

対象

情報システムとプログラミング

考え方

関数の抽出

・新たな関数を作る・抽出したいコードを元の関数から新しい関数へコピーする
ソースコード中に何度も現れる処理 ・抽 出したコードに含まれる変数を調べ，新しい関数ではアクセスなどを関数としてまとめる
できない変数を特定し，引数として新しい関数に渡すようにする・元 の関数に残っているコードの部分を抽出された関数への呼び出
しに変更する

変数のインライン化・代 入の右辺に副作用（出力や変数の変更など）がないことを確認する
戻り値として渡すためだけの一時的 ・代入が 1 度しか行われていないことを確認するな役割の変数などを使わなくする
・その変数への最初の参照を探し，代入の右辺と置き換える
・変数を参照している箇所の置き換えを繰り返す
・変数の宣言と代入を取り除く

変数名の変更現在の役割に対して良い名前ではな ・変数の宣言や変数の参照を探す
いと思われる変数の名前を付け直す ・それらの全ての箇所で変数名を変更する

図表 3 リファクタリングのパターンの例

例えば次のようなプログラムを見てみよう。これは図書館の本の情報について，貸し出し可能かどうかを判定する機能を持つプログラムである。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

import urllib.request, urllib.parse, json
def get(url,params):
p=urllib.parse.urlencode(params)
url=url+"?"+pwith urllib.request.urlopen(url) as res:return json.loads(res.read().decode("utf-8"))# 検索語入力関数
def title_input():
print(" 検索するタイトルを入力してください ")title=input()
return title# 図書検索関数
def title_search(title):
params = {"token": "test","table": "book","format":"json","column": "title","value": title}
url = "https://api.eplang.jp/mext2/search"data = get(url,params)
return data
# 貸出中判定関数
def disp(data):
for record in data:
if record['lent']=="true":
print(record["title"]+"=>"+"貸出中です ")else:
print(record["title"]+"=>"+"貸出可能です ")# 全体の実行
title=title_input()
result=title_search(title)disp(result)

233

演習 4

EXERCISE「関数名の変更」や「変数のインライン化」などのリファクタリングの考えに基づき，貸し出し可能かどうかを判定するプログラムにおいて，機能を変えないようにプログラムを改善しましょう。

3

チームでの開発の進め方（1）
コーディングスタイル

ば個人の手を離れたときに他のメンバーの作業効率を複数人のチームで開発する場合，コーディングスタ

下げてしまうことになる。仕様としては決められていイルを統一する必要がある。コーディングスタイルとないがPythonでは，次のようなルールが推奨されては，変数名や関数名の規則，コメントの書き方など考いる。

えなければいけないルールについて統一した基準を作成し，それに従うことである。また，言語には決めら・関数名や変数名は小文字のみとするれた規則が存在する。例えばPythonの構文規則では，・読 みやすくするために必要に応じて単語の間

変数名について次の制約が存在する。

を区切る・単 語 の 区 切 り は「_（ ア ン ダ ー ス コ ア ）」 で・変数名の1文字目は数字にはできない

表す

・予 約語になっている語句は変数名に使用できない

またそれ以外にも，演算子の前後にスペースを入れるかどうか，タブでインデントする場合に1つのタブ

コーディングスタイルとしては，変数名が長くなっがスペース何個か，などをチームで統一しておきたい。

たときに変数名に大文字を使うのか，「_（アンダース

Pythonで推奨されるコーディング基準を定めた規約

コア）」でつなぐのか，などいくつかの方法が考えらにPEP8（Python Enhancement Proposal 8: Style

れるが，これをプロジェクト内で統一しておかなけれ

Guide for Python Code）がある。

演習 5

EXERCISE

これまでに作成した Python のプログラムが，Python の標準的なコーディング規約に適合しているかど
うか，チェックツールで確認してみましょう。Python のソースコードをチェックするオンラインツール
として PEP8 Online Checker（http://pep8online.com/）などがあります。

（2）
プロジェクト・マネジメント
プロジェクトを成功させるために，プロジェクト・
マネジメントと呼ばれる様々な管理手法が提案されている。

る。プロジェクトに必要な全ての作業を細かくリスト
アップして，どのような作業にどれだけ時間がかかり，誰が担当するかを決定していく。
WBSを作成するにはプロジェクトのゴールを決定する。次に，ゴールに到達するために必要な作業を列❶WBS
WBS（Work Breakdown Structure）とは，作業を分解して構造化する手法であり，システム開発プロ
ジェクトにおける作業単位を決定するために有効であ234

挙していき，更には細分化していく。例えば，図書館システムの構築をWBSで表現すると次のようになる
図表４，５。

｜第４章｜

件名
トップ画面

図書検索画面

簡易
検索

詳細
検索

貸出・返却画面

貸出
メニュー

返却
メニュー

管理機能画面

書籍
管理

ユーザ
管理

図表4 図書館システムの機能分割の例❷ガントチャート
プロジェクトの進捗を管理するためのツールの一つにガントチャート（Gantt chart）がある。ガント情報システムとプログラミング

担当者 状態

開始日

終了日

期限

2020/2/10

2020/2/14

簡易検索
の
画面設計

A

完了

2020/2/1

詳細検索
の
画面設計

A

処理中

2020/2/12

2020/2/28

検索機能
モジュール
作成

C

処理中

2020/2/1

2020/3/31

図表 5 図書管理システムの WBS の例

作業

開始日

完了
予定日

先行
作業

達成率

作業A

4/1

4/2

なし

100%

作業B

4/1

4/3

なし

100%

作業C

4/3

4/4

作業A

100%

作業D

4/4

4/8

作業B

20%

作業E

4/5

4/8

作業C

0%

2020年4月
1

2

3

4

5

6

7

8

チャートとは，作業工程を分割して，作業に担当者を振り，時間軸で可視化したものである。先行作業との関係性などを確認しながら作業の進捗を確認できる
図表６ 。

ガントチャートの機能を含むプロジェクト管理ソフ
トウェアには，市販ソフト以外でもフリーソフトウェ
ア，Webブラウザで利用するタイプのものなどがあるが，まずは簡易なものを表計算ソフトウェアなどで作り，概念を理解するとよいだろう。

図表6 ガントチャートの例

本日❸コミュニケーションツールの利用
プロジェクト管理をしていく上で，対面でのコミュ

ただし，開発を行う環境においてセキュリティ上のニケーション以外にもビジネスチャットツールなどを問題や規約上の問題がないかどうかは事前に検討しな利用したコミュニケーションでプロジェクトを進めてければならない。

いくことが考えられる。
ビジネスチャットツールなどでは，具体的な作成物
やソースコードを共有しながらコミュニケーションを取ることが容易にできる。

【参考文献・参考サイト】●「Python プロフェッショナルプログラミング第 3 版」 株式会社ビープラウド 著 秀和システム（2018）●「リファクタリング 既存のコードを安全に改善する 第 2 版」 Martin Fowler 著 児玉公信，友野晶夫，平澤章，梅澤真史 共訳●「Python unittest ユニットテストフレームワーク」https://docs.python.org/ja/3.7/library/unittest.html●「PEP8 online check」http://pep8online.com/

オーム社（2019）●「WBS とは？作り方の基本とガントチャートとの違いを解説」
https://backlog.com/ja/blog/wbs-introduce-how-to-make-excel-template-and-useful-tools/

235

学習活動と展開
学習活動の目的⃝制作した情報システムを評価できるようになる。
⃝情報システムの制作過程を評価し，その過程を改善することができる。
⃝チームでの情報システム開発に利用される手法について理解する。

学習活動とそれを促す問い
問

展 開

1

い

学習活動

制作した情報システムを評価する

情報システムの総合テストについて，機能テスト，ためには，要求定義に基づいてど性能テストなどをどのように行うかを調べる。

のようなテストを行えばよいだろ
うか。

展 開

2

情報システムの制作過程で，よりグループで開発を効率的に進めるために必要なこと

効率的に開発を行うためにできると，それを実際に行う工夫について考える。

工夫について，考えてみよう。

展 開

3

チームでシステム開発を行う場合

グループで守らなければいけない開発ルールについに，守らなければいけない開発て開発者の行動，プログラム作成，依頼者への対応

ルールには，どのようなものが考など，様々な角度から開発ルールを考える。

えられるだろうか。

展開 1
問

い

学習活動

制作した情報システムを評価するためには，要求定義に基づいてどのようなテストを行えばよいだろうか。
情報システムの総合テストについて，機能テスト，性能テストなどをどのように行うかを調べる。
⃝要求定義を確認させ，テストすべき項目をリストアップする。

指導上の
留意点

⃝リストアップした項目について行う機能テストを考えさせる。
⃝機能以外の部分でチェックすべき項目をリストアップする。
⃝リストアップした項目について性能テストを考えさせる。

236

｜第４章｜

情報システムとプログラミング

展開 2
問

い

学習活動

情報システムの制作過程で，より効率的に開発を行うためできる工夫について，考えてみよう。

グループで開発を効率的に進めるために必要なことと，それを実際に行う工夫について考える。

⃝効率的に開発を行う方法を Web ページや書籍で調べさせる。
指導上の
留意点

⃝グループで話し合った工夫を全体で共有させる。
⃝開発を効率的に行う方法としてプロジェクト・マネジメントなどの手法を学ぶ。
⃝その一つとして開発工程を細かく分けて，ガントチャートなどで表現させる。

展開 3
問

い

学習活動

チームでシステム開発を行う場合に守らなければいけない開発ルールとしてどのようなものが考えられるだろうか。

グループで守らなければいけない開発ルールについて開発者の行動，プログラム作成，依頼者への対応など，様々な角度から開発ルールを考える。

⃝守るべきルールについて書籍や Web ページで調べさせる。
指導上の
留意点

⃝グループで話し合ったルールを共有し，守るべきルールを整理させる。
⃝複数の開発者が作成したソースコードを統合してシステムを作成する場合に必要なことを考えさせる。
⃝その一例としてソースコードのバージョン管理システムを調べ，実際に使用してみる。

まとめ⃝情報システムが当初の仕様に合っているかを試す方法として，機能テスト，機能以外を試す非機能テストがあることを理解する。
⃝情報システムを効率よく開発するためにガントチャートをはじめとしたプロジェクト・マ
まとめ

ネジメントの手法があることを理解する。
⃝情報システムを様々な視点から評価し，制作過程の改善としてプロジェクト・マネジメン
トの手法を用いたり，グループで守るべきルールについて考えたりすることが有用であり，ソースコードのバージョン管理システムなどが必要であることを理解する。

237

全体を通じた学習活動の進め方
全体を通じた学習活動の目的●情報システムの果たす社会的な役割や影響を理解し，情報システムを設計・制作・評価した上で開発することができる。

全体を通じた学習活動の流れ
情報社会で実際に稼働している情報システムの仕組みやセキュリティ対策などについて調査する活動や，限られた教育現場の環境で実現できる小規模の情報システムを制作する一連の活動をグループで行う。

❶複数人による情報システムの開発するにあたり，「情報Ⅰ」の「コンピュータとプログ❷プロジェクト・マネジメント

ラミング」と「情報Ⅱ」の「情報とデータサイエンス」❸情報システムの設計で学んだプログラミングの内容を参考に授業を計画す❹情報システムの制作る。その際留意しておくべきこととして❺情報システムの評価

情報システムの開発

情報システムの評価

情報システムの制作

情報システムの設計

情報システムの要件定義

問題の発見「情報システムとプログラミング」について授業をなどが挙げられる。

238

複数人による
情報システムの開発⃝実際の情報システムの開発は一人で行うものではないため，複数人で行うように

1⃝情報システムの開発の際には，担当ごとにそれぞれのモジュールのプログラムをする。
開発し，これを結合してシステムとして稼働させるようにする。
⃝情報システムの設計・制作・評価を踏まえた上で，開発するように留意する。

｜第４章｜

プロジェクト・
マネジメント情報システムとプログラミング⃝情報システムの開発には，適切なプロジェクト・マネジメントが必要である。毎回ポートフォリオなどの活動記録を蓄積し，計画的に情報システムの開発過程を振り返り評価する場面を作る。

2⃝情報システムの開発を通して，課題解決をするためにプロジェクトの企画・進捗

情報システムの設計⃝情報システムが社会に与える効果やトラブルが起こった時の影響，更にはセキュ

管理・コストの見積もり・グループメンバーへの作業の割り振りを体験させる。

リティ確保を意識した上で設計するようにする。

3⃝情報システムの設計においてその仕組みを表現する方法は DFD や UML など様々

情報システムの制作⃝既存のモジュールを再利用し，外部のリソースを効果的に活用した制作を行う。

4

だが，目的に応じて適切で分かりやすい図を取り入れるようにする。

⃝プログラムを制作しやすくするため，Web APIなどの組み込み関数やあらかじめ用意した関数を利用できるようにする。
⃝開発は最低限の情報システムの制作にとどめ，実際に使用した上で，サイクルをかけながら機能を拡張していくことを想定して行う。

情報システムの評価

5⃝情報システムの設計及び開発の一連の流れにおいて，システムの自己評価や相互評価を取り入れ，それに基づいて改善させる。
⃝可能であれば，実際に運用し活用する場面を設け，収集したデータをもとに評価を行う。
⃝必要に応じて，間違った要件の評価の事例なども取り入れ，どのような要件の評価が適切か考えさせる活動を取り入れる。

全体を通じた学習活動を行う上での注意点「情報システムとプログラミング」は，「情報Ⅰ」と「情握させるようにする。

報Ⅱ」のこれまでに学んできたプログラミングの内容

情報システムをただ開発するだけではなく，問題解を包括的に取り扱った単元である。教育現場の環境に決のための活用や，情報システムが果たす役割やセ合わせた情報システムとプログラミング言語を選定し， キュリティの確保についても考えられるように留意す
体験的に情報システムの開発が行えるようにする。

る。

しかしながら，プログラミングで情報システムを実

全ての生徒が情報システムの開発者側になるわけで装する場合は，プログラミングの習熟度の差など生徒はないが，情報システムの開発を通して，将来情報シが一人でプログラミングをしていたときには想定してステムを発注する，あるいは利用する上で役に立つ視いなかった様々な課題が発生する。その際には，プロ点を得られるように留意する。

ジェクト・マネジメントを意識し，適宜進捗状況を把

239

MEMO

240