演習ガイド
コンピュータ・サイエンス,ソフトウェア工学における問題解決
ソフトウェア工学では,実際の世界での問題(やりたいこと,調べたいこと)を,
- モデル化し,
- 計算手順を考え,
- プログラム化し,
計算機を用いて表現したり, 解を求めることを行います.
次のような観点で,問題を見直してみることが重要です.
- モデル化を行うために,もともとの問題から,「本質的なことだけ」を取り出す
- コンピュータとプログラムによる「実現しやすさ」や「適切性」を考える
家の設計とソフトウェアの設計
ソフトウェアの設計
ソフトウェアを設計する際に行うこと
- 実際の世界や頭の中にある問題をいかに計算機で実現するか?を考える.
- モデルを考えるのは人間の頭であり,頭の中で考えたことを問題やモデルとして詳細化し,プログラム化していく.
- 代表的な方法としては以下のものがある.
- トップダウン設計
- 実現へ向けて大きな問題を,分割設計していく.
- オブジェクト指向設計
- 問題の中の部品(モジュール)を独立設計していく.
- 問題によって適切な設計方法がある.
- トップダウン設計
- 問題の構造を理解し,より小さな問題へ分割し,
- 処理の流れを考え
- 設計案,実現案,モジュール毎のインタフェースなどを決める
- 分割された仕事(モジュール)間の取り決め(インタフェース)を行う
- 仕事量の見積と実現可能性を検討し, 再設計.
プログラミングによる実現
プログラムは実現のための手段.
- 与えられた計算機環境で,「手順(アルゴリズム)」と「表現方法(データ構造)」を具体的に考える.
- プログラミングと設計の見直し,部品毎のデバッグ,改良.
- 部品を結合し,全体を完成させる.
いわゆるプログラミングだけでなく,下記についてもよく考える.
- 開発言語
- 開発環境
- ライブラリやツールキット
- バージョン管理
- 実行環境
演習
演習の目的
ソフトウェアの開発プロセスを経験する!
- 自分たちが興味を持てて,実現可能な問題の設定を行う.
- ソフトウェアの設計を行う(どうやって実現するか? できそうか?)
- 仕様,インタフェースと部品(モジュール)分けの大切さを学ぶ.
- 設計したものを実際に作る(プログラム化).
- グループでの作業に慣れる.
ソフトウェア開発ってどんなことなのかを体験する(プログラミングはソフトウェア開発のごく一部でしかない).
演習の方針
- 学生がやりたいこと(半年程度でできること)を決め,先生の承認を得ること.
簡単すぎるものはNG
です!
- グループでのソフトウェア設計および製作(班長,副班長を決めて)
- テーマ,やり方等,班の中で合意を得て取り組んで下さい.
- スケジュールは概ね演習スケジュールにしたがってください.
- 100%完成しなくてもいいから,自分達なりに考え,体験してください.
- 失敗して,反省して,成長することが本講義の目的です.
講義する(予定の)こと
- 演習時間中は,プログラム開発の方法や,そのために必要な知識,プログラミングについて講義します.
- HTML(CSS),JavaScriptなどの基本プログラミング
- 画像やスプライトなどの表示,アニメーション
- 時間やイベントを扱うプログラム
- デバッガ
- 時間は圧倒的に足りないので,プログラム作りは授業以外の空いている時間を利用しましょう!
プログラミングに関して
- モジュール化とインタフェースを積極的に使うこと.
- 言語,ライブラリ,システムコールについて理解すること.
- Ubuntu の 作業環境をよくすること
- プログラミングのための道具を積極的に理解・活用すること.
- 期待通りに動いているかどうか,デバッグやテストの方法を考え,慣れること.
- 「より良くする」ことを厭わないこと.プログラミングの経験から計画変更できるように.
- HTML と JavaScript に慣れること.
提出物
- 簡易企画書
- テーマ(タイトル,キャッチコピー)
- 概要
- 対象者
- 画面イメージなど
- 要求仕様書
- 外部仕様書(使う側から見た,概観)
- 外部仕様に含まれる「もの」と「操作」
- 部品(モジュール)分けと処理の流れ
- モジュール毎の仕様(使い方,インタフェース)
- モジュール内部の仕様も(モジュールの実現方法)
- 班のWikiページ
- 作成したプログラム,ドキュメント,WEBページ