システム開発の指導について

情報技術科の課題研究等では、生徒たちが自分自身のテーマで、プログラム開発を行うことが多い。本校の情報技術科では、3学年に卒業研究と称して全員の生徒が、プログラム開発に取り組むことになっている。

以下は平成11年度の指導内容の報告です。


卒業研究の概要

本校の情報技術科は、ソフトウェアに関係する技術の習得に重点をおきカリキュラムを編成している。卒業研究はその学習の総合的なまとめとして、指導にあたる。

卒業研究は、3年間で学んだ知識を生かし、自分たちでテーマを決め、グループでソフトウェア・システムを開発する。グループは、同じ目的を持つ(1つのテーマに向かって取り組むことができる)者たちが3人から5人で編成する。

授業時間は、3学年次のすべての必修専門科目(情報技術実習4単位、ソフトウェア技術2単位、課題研究2単位、コンピュータ応用2単位)を当てる。

卒業研究は、10月中旬からスタートする。


システム開発にあたって

卒業研究のシステム開発は、ユーザ、設計者、プログラマが同一人物である。ユーザ、設計者、プログラマの3つの役割を、すべて生徒が行う。

システム開発は、設計(ユーザと設計者の関係において行われる開発)と製造(ユーザとプログラマの関係において行われる開発)の、大きく2つの視点で行う。

必ずしも開発者が、システムに行わせる仕事に精通しているとはかぎらない。それぞれの立場に立つことは難しい。


システム開発の進め方

生徒だけに任せていては、システム開発は出来ないと考えた。

ほとんどの生徒は、自由なプログラムを作ったことがない(課題でプログラムを作成しているが)。また、複数人が協力して1つの課題に取り組んだこともない。システムの開発の未経験者が、今まで解決したことのない問題に取り組むのである。

ウォータフォールモデルを基本に、システム開発の工程を設定し、順番に従って開発をすすめる。各工程の作業内容を明確化(どうゆう視点で、なにをつくり上げるのか)し、確実に完成させる。

設計

ユーザと設計者の関係において行われるシステム開発の段階とする。システム開発のテーマを定め、システムへの要求を分析し、システム開発の目標を具体化し、コンピュータ化する。ここでは、システムの外部設計まで行う。

製造

設計者とプログラマの関係において行われるシステム開発の段階とする。プログラム言語でプログラムを作成し、システムを実現する。

最初にプログラム分割を行い、コンピュータに機能を割り当てる。個々のプログラムの機能を明確にし、製作に取りかかる順番、役割分担を決める。

プロトタイプは、システムの限定された部分のみを製作し、システムを実現するときの技術的な問題点を明らかにし、その解決方法を研究する。


DFDについて

卒業研究のシステム開発の設計段階の、最も重要な作業が、DFDの作成である。DFDを作成では、開発システムの机上モデルを構築し、このモデルをもとに開発システムを検討する。

DFDは、データの通り道を表すデータフロー(矢印線)、データの処理を表すプロセス(円)、データを一時的な貯蔵庫のデータストア(直線)、データがどこからくるか、あるいはデータがどこへ行くのか、データ源泉、データ吸収(四角)の4つの記号だけで図式表現する。

つぎのDFDは、あるグループが、うまいラーメン屋の情報をインターネットで公開するためのシステムを表したものである。サーバのラーメン屋情報データベースを中心に、データの登録、更新、削除、照会ができる。DFDで表現すると、データの流れがよく理解できる。なお、ネットワーク境界線は、サーバとクライアントを意識して、筆者が勝手に加えたもので、データの流れには関係ない。

あるグループは、人工知能を作りたいと考え、コンピュータと会話ができるシステムの製作を決めた。つぎのDFDは、彼らが考えたシステムを表したものである。知識を蓄積するファイルを基に、ユーザの問いかけに答えるソフトウェアの製造が具体的な目標である。

このDFDでは、プロセスがあまりに抽象的なので、このままではプログラムは書けない。さらにプロセスの内部を検討し、詳細に表現したものが、つぎのDFDである。

このようにDFDで、まずシステムのかたちの検討を行う。DFDで表現できなければ、当然プログラムは製作できないし、無理に製作をはじめても、目標がはっきりしていない。DFDをグループで検討し、出来たDFDから個人の役割を決める。グループ全員が、システム全体の構成と、個々の部分の役割を明確に把握できる。

DFDは、システム製作の早い段階から、システムのかたちが明確になり、システムの製作の目標や問題を早期に発見できる強力なツールである。

DFDの階層化

DFDの階層化の例は、すでに前のコンピュータ会話システムであげた。1つのプロセスがさらに細かいプロセスに分割され、抽象的なものから具体的なものへ進む。大切なことは、1つのプロセスと、複数に分割されたプロセスとは、実質的に同じものだ。

階層化の例として、つぎのDFDは生年月日から満年齢を求める。

プロセスの分割にあたり、生年月日が、元号+年+月+日で送られてくることが分かった。つぎのDFDは、プロセスだけでなく、データフローも分割されている。

プロセスやデータを大まかな分類でとらえ、システムのかたちが定まった後に、1つ1つのプロセスやデータが、さらに細かい単位で何を含んでいるのか分析する設計方法が、構造化設計である。DFDの階層化は、構造化設計にならったものである。

名前付け

入力、出力、データ、情報、処理する、入力する、出力するなどの言葉は意味をもたない。それらの言葉は目的が明確でないので、何を意味しているのか分からない。つぎのDFDはどんなものにも当てはまる何でもありのものである。

DFDの要素につけられる名前は、その要素の目的を定義している。

参考文献

構造化分析とシステム仕様
トム・デマルコ著、高梨智弘、黒田順一郎監訳
日経BP出版センター


モジュールについて

作成したDFDから、サブシステムの境界を設定し、グループのなかで個人の役割を決める。ウォータフォールモデルでは内部設計と呼ばれる工程で行われるもので、卒業研究のシステム開発では、製造工程の一番先頭で行う。

システムはつぎのようなソフトウェアの単位で分割するものとした。個人の製作するものが、どの単位に当るかプログラミングの前に検討する。

バッチ/トランザクションは処理の単位で、1つ以上の実行プログラムから構成される一連のデータ操作をまとめたものである。バッチ/トランザクション内の処理は全体として完了する必要がある。

バッチはバッチ処理の単位である。ファイルに処理するデータを蓄えた後に、まとめてコンピュータで処理し結果をもとめる。集計や統計、バックアップなどはバッチ処理である。

トランザクションはトランザクション処理の単位である。データが発生したとき、即時にコンピュータで処理し結果をもとめる。オンラインによるデータ照会などはトランザクション処理である。

1つのバッチ/トランザクションは、1つ以上の実行プログラムで構成される。また、1つの実行プログラムは、1つ以上のモジュールで構成される。完成したDFDをもとに、機能分割されたものを、どのプログラム単位で実現するか検討する。

たとえば、先のうまいラーメン屋システムは、複数のバッチ/トランザクションが存在する。従って複数の実行プログラムを製造しなければならない。また、コンピュータ会話システムは、1つの実行プログラムで実現するのが望ましい。従って1つ1つの機能はモジュールで製造する。


プログラム言語について

生徒たちが使ったプログラム言語は、つぎの通りである。

言語は自由に選択させるが、プログラムの目的や機能に応じて必然的に決まってしまう。ただし、いくつか選択できるようであれば、得意なものを選択させている。

授業では、これらの言語は紹介程度しか学習していない。Ruby、スクリプト言語などは、授業では取り扱わない。これらの言語は進められないのだが、たとえば、Rubyを使うとネットワークプログラムが簡単に書けたりする。そこで、データ受信だけのサーバ機能をRubyで書き、集計や統計はなどの処理は、もっと得意な言語で書く。

G|Cg|C@Amazon Yahoo yV

z[y[W yVoC[UNLIMIT1~] COiq COsI