シラバス
科目名 プロジェクト演習
英語科目 ナンバリング Ilab301
開講期 春学期 開講学部等 コンピュータ理工学部 配当年次 3年次 単位数 2単位
教員名 青木 淳,荻原 剛志,中島 伸介,宮森 恒
 ※履修条件,配当年次等の詳細は履修要項をご確認ください。
授業方法/Course type  
演習
授業概要/Course outline  
コンピュータ理工学の各種専門分野における基礎的知識の理解を深め応用力を養うために、長期的な課題を与えて
演習や実験を行う。本演習は、本学部のコンピュータサイエンス学科とネットワークメディア学科に共通する科目
であり、以下の課題に対し、数名のグループで協力して7〜8回ずつ取り組み、成果物を完成させる。
授業内容・授業計画/Course description・plan  
ソフトウェア開発手法(7〜8回)と画像・Webコンテンツの処理(7〜8回)に関する演習を前後半に分かれて行う。
==============================================================
・ソフトウェア開発手法【青木|荻原/7〜8回】
<青木担当分>
情報システムにおけるアプリケーション開発をグループワークにて行う。所与されたアプリケーションの要求仕様
から、オブジェクト指向技術をベースにしたデザインを起こして、オブジェクト指向プログラムを実装し、単体お
よび結合テストを施す。加えて、アプリケーション開発プロジェクトとして必要なドキュメントを仕上げ、成果物
としての体裁を整える。これらはすべてリポジトリ内に格納して版管理を行い、グループメンバの共有とする。か
かる開発工程を実践することにより、PMBOK(プロジェクトマネジメント)の技術を会得する。
各回の内容は以下の通りである。ただし、全8回の場合は、項目(5)(6)(7)を適宜延長し、項目(8)として充当させ
る。
(1) 要求仕様とリポジトリと開発計画
(2) プロジェクトマネジメント(スコープ/タイム/コスト)
(3) オブジェクト指向設計とデザインパターン
(4) オブジェクト指向プログラミング(スタブとスケルトンの作成)
(5) オブジェクト指向プログラミング(実装)
(6) オブジェクト指向テスティングとメトリクス
(7) オブジェクト指向ドキュメンテーション
  ■前もってどのような科目の履修が望ましいか:
   ・応用プログラミング (Java/Python/C)
   ・ソフトウェア工学I・II
   ・アルゴリズムとデータ構造
   ・グラフィックスI
   ・ヒューマンインタフェースI・II
  ■今後どのような科目を履修するのに役立つか:
   ・オペレーティングシステム
   ・プログラミング言語
   ・言語オートマトン
   ・分散処理システム
   ・グラフィックスII
   ・特別研究におけるプログラミングやデザインなど

<荻原担当分>
C言語を用いて、比較的規模の大きなソフトウェアの開発/機能拡張に取り組む。本演習では課題に対応する機能の
設計から、役割分担、スケジュール管理、成果物の管理までをチームで行う。毎回、進捗に応じたレポートの提出
を課す。具体的な開発内容は適宜指示するが、簡易プログラミング言語処理系、各種ユーティリティプログラムと
いったテーマを設定する。C言語の構文や標準ライブラリの使用方法に関する説明は教員側からは行わないので、
受講者(およびグループ)自身で不明点を解消しつつ課題に取り組んで欲しい(もちろん、質問には応じる)。各
回の内容は以下の通りである。ただし、全8回の場合は、項目(5)(6)(7)を適宜延長し、項目(8)として充当させる。

(1) 対象ソフトウェアの概要説明
(2) ソースコードの理解、コードレビュー
(3) 外部設計書の作成とレビュー
(4) 内部設計書の作成、コーディングとレビュー
(5) テスト計画の作成、コーディング、テスト
(6) コーディング、テスト
(7) 成果物のまとめと評価
  ■前もってどのような科目の履修が望ましいか:
   ・応用プログラミング(Java/Python/C)
   ・ソフトウェア工学I・II
   ・アルゴリズムとデータ構造
   ・グラフィックスI
   ・ヒューマンインタフェースI・II
  ■今後どのような科目を履修するのに役立つか:
   ・オペレーティングシステム
   ・プログラミング言語
   ・言語オートマトン
   ・分散処理システム
   ・グラフィックスII
   ・特別研究におけるプログラミングやデザインなど

==============================================================
・画像・Webコンテンツの処理【宮森&中島/7〜8回】
インターネットにおいて画像とWebコンテンツは重要な情報源である。本演習では、Webコンテンツからの情報取得、
自然言語処理/画像処理を用いた情報抽出/特徴抽出、それらに基づく検索・分類・表示に関わる基本手法を取り入
れたアプリケーション開発を課題として設定する。具体的な開発内容は適宜指示するが、例えば、さまざまな場面
の人物写真を検索するシステムの開発といった親しみやすいテーマを設定する。各チームで開発した成果をプレゼ
ンし、互いのシステムを相互に評価することで、自分たちのアプローチの利点・欠点を把握する。レポートとして、
システムの目的、各処理手順の説明、プログラムの構成、処理結果、考察、プログラムコードなどを課す。
各回の内容は以下の通りである。ただし、全8回の場合は、項目(5)(6)(7)を適宜延長し、項目(8)として充当させ
る。
(1) 概要説明、HTML文書の解析
(2) テキストの分析処理
(3) 画像の分析処理
(4) 検索のためのデータ生成
(5) 検索のためのインタフェース作成
(6) 改良およびプレゼン準備
(7) 発表会(プレゼンテーション)
  ■前もってどのような科目の履修が望ましいか:
   ・応用プログラミング(Java/Web/C)
   ・グラフィックスI
   ・ヒューマンインタフェースI・II
   ・アルゴリズムとデータ構造
  ■今後どのような科目を履修するのに役立つか:
   ・実践Webアプリケーション
   ・画像処理
   ・特別研究におけるプログラミングやメディア処理、システムデザインなど
準備学習等(事前・事後学習)/Preparation and assignments  
・ソフトウェア開発手法【青木|荻原/7〜8回】
<青木担当分>
(1) 要求仕様とリポジトリと開発計画
[事前学習]ソフトウェア工学系の授業で解題されているソフトウェアプロセス(ソフトウェア開発過程)につい
て復習し授業(演習)に臨むこと。特に、要求仕様(SOW)からプロジェクト計画を立てるためのWBSやPERTなどの
方法(手法)について調査しておくことが望ましい。各自が約1時間ほどの学修(予習:演習活動)を必要とする。

[事後学習]プロジェクトマネージャを中心にして、適宜、グループで日時を調整し、場所を決めて、活動するこ
と。実現可能なプロジェクト計画の策定に果敢に取り組み、リポジトリにコミットすること。各自およそ3時間ほ
どの学修(復習:演習活動)を必要とする。
(2) プロジェクトマネジメント(スコープ/タイム/コスト)
[事前学習]プロジェクトマネジメントのおけるタイムマネジメントにしたがって、当該活動の準備をして授業(
演習)に臨むこと。プロジェクトメンバの各々に対して役割分担を打診していることが肝要である。各自が約1時
間ほどの学修(予習:演習活動)を必要とする。
[事後学習]プロジェクトメンバ同士の連絡網を使って、演習時間の不足を補うため、授業時間外にも活動するこ
と。プロジェクトマネージャからの指示にしたがって、各自のプロジェクトの作業を着々と行うこと。各自およそ
3時間ほどの学修(復習:演習活動)を必要とする。
(3) オブジェクト指向設計とデザインパターン
[事前学習]役割分担された各自のプロジェクト作業を行って授業(演習)に臨む(持ち寄る)こと。また、オブ
ジェクト指向の分析方法と設計方法について調べておくこと。各自が約1時間ほどの学修(予習:演習活動)を必
要とする。
[事後学習]オブジェクト指向の分析方法と設計方法にしたがって、基本設計(外部設計)および詳細設計(内部
設計)に果敢に取り組み、それらの設計結果をリポジトリにコミットすること。各自およそ3時間ほどの学修(復
習:演習活動)を必要とする。
(4) オブジェクト指向プログラミング(スタブとスケルトンの作成)
[事前学習]詳細設計(内部設計)の進捗を鑑みながら、オブジェクト指向プログラミングの開始に備えること。
特に、プロジェクトマネージャはメンバの役割分担の負荷分散に気を配って授業(演習)に臨むこと。各自が約1
時間ほどの学修(予習:演習活動)を必要とする。
[事後学習]オブジェクト指向の詳細設計から全モジュール(各クラスおよび各メソッドと各フィールド)のスタ
ブとスケルトンの作成を行い、それらをリポジトリにコミットすること。各自およそ3時間ほどの学修(復習:演
習活動)を必要とする。
(5) オブジェクト指向プログラミング(実装)
[事前学習]プロジェクトマネージャはメンバのプログラミングのスキルとセンスを考慮しながら、実装(プログ
ラミング)の役割分担を行って授業(演習)に臨むこと。各自が約1時間ほどの学修(予習:演習活動)を必要と
する。
[事後学習]オブジェクト指向の詳細設計を反映したスタブとスケルトンを基にして実装(プログラミング)した
ものを順次リポジトリにコミットすること。各自およそ3時間ほどの学修(復習:演習活動)を必要とする。
(6) オブジェクト指向テスティングとメトリクス
[事前学習]テスト仕様を策定する準備をして授業(演習)に臨むこと。単体テストツールや結合テストツールの
調査も大切である。各自が約1時間ほどの学修(予習:演習活動)を必要とする。
[事後学習]テスト仕様書にしたがって各モジュール(各クラスおよび各メソッドと各フィールド)の試験を行い、
その結果をきちんとリポジトリにコミットすること。各自およそ3時間ほどの学修(復習:演習活動)を必要とす
る。
(7) オブジェクト指向ドキュメンテーション
[事前学習]最後の授業(演習)に向けて、プロジェクトの不足活動や不足成果を、できうるかぎり補う活動をし
て臨むこと。加えて、プロジェクトの成果報告(プレゼンテーション)の準備を行うこと。各自が約1時間ほどの
学修(予習:演習活動)を必要とする。
[事後学習]成果報告(プレゼンテーション)で指摘されたことを補うための作業を確と遂行し、すべての成果物
をリポジトリにコミットすること。各自およそ3時間ほどの学修(復習:演習活動)を必要とする。

<荻原担当分>
(1) 対象ソフトウェアの概要説明
[事前学習]C言語によるプログラミングについて復習をしておくこと。特に構造体、ポインタを用いた動的なデー
タ構造に関する知識は必須である。なお、初学者向けのC言語の教科書では情報が不十分であるため、中級〜上級
向けのテキストの購入を強く推奨する。あらかじめmoodleに情報を掲載するので、演習時までに用意しておくこと
が望ましい。
[事後学習]自分が担当する部分を中心に、与えられたソースプログラムを読み、C言語の文法などで疑問点があ
ればまとめる。また、与えられた課題についてレポートを提出する。
(2) ソースコードの理解、コードレビュー
[事前学習]与えられたソースプログラムを読んで理解を進める。
[事後学習]自分が担当する部分のソースプログラムの役割をまとめた文書を作成し、レポートとして提出する。
(3) 外部設計書の作成とレビュー
[事前学習]グループ内の他の部分の担当者の報告を読み、ソフトウェア全体の働きを理解する。
[事後学習]拡張後のソフトウェアの機能を説明する文書を作成し、レポートとして提出する。
(4) 内部設計書の作成、コーディングとレビュー
[事前学習]実現すべき機能について、実装の方針を検討する。
[事後学習]自分の担当箇所の拡張、変更について理解し、行った作業内容をレポートとして提出する。
(5) テスト計画の作成、コーディング、テスト
[事前学習]自分の行うべき作業の内容について、問題点、疑問点があればまとめておく。
[事後学習]引き続き担当した機能の実装を進め、作業内容をレポートとして提出する。
(6) コーディング、テスト
[事前学習]自分の行うべき作業の内容について、問題点、疑問点があればまとめておく。
[事後学習]実装が済んでいない部分やテストが不十分な部分は補っておくこと。
(7) 成果物のまとめと評価
[事前学習]グループ全体の進捗について把握しておく。
[事後学習]ソフトウェアの実装方法について振り返る。疑問があれば質問に来ること。

===================================
・画像・Webコンテンツの処理【宮森&中島/7〜8回】
(1) 概要説明、HTML文書の解析
[事前学習]Java, HTMLについて復習をしておくこと。
[事後学習]演習全体の課題と各回の内容を再度確認し、与えられたソースプログラム、および、課題を振り返り、
疑問点があればまとめておくこと。
(2) テキストの分析処理
[事前学習]形態素解析について下調べしておくこと。
[事後学習]与えられたソースプログラム、および、課題を振り返り、疑問点があればまとめておくこと。
(3) 画像の分析処理
[事前学習]C言語, OpenCVについて復習をしておくこと。
[事後学習]与えられたソースプログラム、および、課題を振り返り、疑問点があればまとめておくこと。また、
ヒントや発展課題に対して、適宜動作確認や実装をしてみること。
(4) 検索のためのデータ生成
[事前学習]Javaでのファイル入出力、Mapの使い方について復讐をしておくこと
[事後学習]与えられたソースプログラム、および、課題を振り返り、疑問点があればまとめておくこと。ヒント
に対する自分の考えやグループとして統合する際のアイデアなどをまとめておくこと。
(5) 検索のためのインタフェース作成
[事前学習]PHP、および、第1回〜第4回について復讐しておくこと。
[事後学習]グループとしての統合案の具体的な仕様と自分の役割分担を再確認し、試作が不十分な箇所を補って
おくこと。
(6) 改良およびプレゼン準備
[事前学習]自分の役割とグループの作業予定を踏まえ、実装やテストが不十分な部分を適宜補っておくこと
[事後学習]グループ全体での統合作業において、実装やテストが不十分な部分は適宜補っておくこと
(7) 発表会(プレゼンテーション)
[事前学習]グループ全体での統合作業において不十分な作業は適宜補っておくこと。また、プレゼンテーション
の準備をしておくこと。
[事後学習]他のグループの発表も参考にしながら、グループとしてのプロジェクトへの取り組み方、アイデアと
実装、進捗管理、プレゼンテーションなどを再度振り返ること。
授業の到達目標/Expected outcome  
実用的なソフトウェア開発手法の理解と習得、画像やWebコンテンツの基本処理の理解と習得を目指す。プロジェ
クトの特徴である「有期性」と「独自性」を、このプロジェクト演習を通して学ぶと共に、高度情報化社会におけ
る実際のプロジェクトの状況を想定しながら、果たすべき役割を自覚し、積極的に行動できる資質を養う。
身に付く力/Special abilities to be attained  
基礎技術の理解力、設計・開発能力、実践力(働きかけ力、実行力、主体性)、コミュニケーションスキル(傾聴力)
履修上の注意/Special notes, cautions  
グループに分かれて演習を行うので、各自、自分の演習スケジュール(特に場所など)をよく確認しておくこと。詳
細は履修ガイダンスの時に説明する。また、C言語、Java言語によるプログラミングは一通りこなせるように準備
しておくこと。
評価方法/Evaluation  
・ソフトウェア開発手法(全体の半分)
<青木担当分>
毎回のように設計図やプログラムなどをリポジトリにコミットすることを課す。それらを鑑みながら、グループ
(プロジェクト)への参画の度合い50%、グループの最終成果物の出来具合50%で評価する。
<荻原担当分>
ほぼ毎回、グループとしての作業報告に加え、個人の作業内容をレポートとして提出してもらう。最終回にはグルー
プとしての最終成果物(ドキュメントとコード)を提出する。成果物に対する理解の度合いと完成度(50%)と、作業
への取り組み(毎回の作業報告、グループへの貢献)を平常点(50%)として評価の対象とする。

・画像・Webコンテンツの処理(全体の半分)
<宮森・中島担当分>
授業への参加、作業への取り組み度合を平常点(50%)とし、システム実装、プレゼンテーション、グループへの貢
献(50%)を加味して、総合的に評価する。
教 材/Text and materials  
適宜指示する。
<青木担当分>参考書:広兼修/著,さぬきやん/作画,トレンド・プロ/制作『マンガでわかるプロジェクトマネジメ
ント』(オーム社,2011)
<荻原担当分>C言語の記法や機能には、これまでの演習で扱っていないものが多く残されている。特定の書籍は指
定しないが、中級、上級者向けで、リファレンスとして使える書籍を購入することを強く推奨する。
その他/Others  
オフィスアワー
青木:毎週木曜日 3時限目 13:15-14:45 第2実験室棟 3階 65実験室
荻原:毎週金曜日 3時限目 13:15-14:45 第2実験室棟 2階 60研究室
宮森:毎週月曜日・火曜日・水曜日 昼休み 12:15-13:15 14号館 2階 14224研究室
中島:毎週月曜日・火曜日 昼休み 12:15-13:15 14号館 3階 14325研究室
Copyright (C) 2019 Kyoto Sangyo University. All rights reserved.