2016年度 ソフトウェア工学演習I
学期始めに「JABEE対応コースの学習・教育目標」と「科目の学修目標」を周知します。スライド
- 77350-008 ソフトウェア工学演習I8(理工学部): シラバス
- この科目は、次の JABEE 対応コース「情報技術専修コース(システム数理学科・ソフトウェア工学科・機械電子制御工学科)」の学習・教育目標に対応する(小項目:E-1,2,3,4)。
- (E) 日本語での文章作成および口頭発表を通じて正確かつ論理的に情報を伝えることができ、グループの一員として指導や協力ができ、英語での基礎的なコミュニケーションができる
- E-1 コミュニケーションの能力: 適切なコミュニケーションを行うことができる
- E-2 文章作成の能力: 正確かつ論理的な文章を作成することができる
- E-3 プレゼンテーションの能力: 調査・研究の結果を正確にまとめ、的確にプレゼンテーションを行うことができる
- E-4 グループで仕事をするための能力: グループの一員として共同して課題に取り組むことができる
- (E) 日本語での文章作成および口頭発表を通じて正確かつ論理的に情報を伝えることができ、グループの一員として指導や協力ができ、英語での基礎的なコミュニケーションができる
- この科目は、次の JABEE 対応コース「情報技術専修コース(システム数理学科・ソフトウェア工学科・機械電子制御工学科)」の学習・教育目標に対応する(小項目:E-1,2,3,4)。
- 74101-009 ソフトウェア工学演習I9(情報理工学部): シラバス
- この科目は、次の JABEE 対応コース「情報技術専修コース(ソフトウェア工学科・システム創成工学科・情報システム数理学科)」の学習・教育目標に対応する(小項目:F-1,2,3,4)。
- (F)日本語での文章作成および口頭発表を通じて正確かつ論理的に情報を伝えることができ、グループの一員として指導や協力ができ、英語での基礎的なコミュニケーションができる
- F-1 コミュニケーションの能力: 適切なコミュニケーションを行うことができる
- F-2 文章作成の能力: 正確かつ論理的な文章を作成することができる
- F-3 プレゼンテーションの能力: 調査・研究の結果を正確にまとめ、的確にプレゼンテーションを行うことができる
- F-4 討論の能力: 発言者の主張を理解し、適切な応答ができる
- (F)日本語での文章作成および口頭発表を通じて正確かつ論理的に情報を伝えることができ、グループの一員として指導や協力ができ、英語での基礎的なコミュニケーションができる
- この科目は、次の JABEE 対応コース「情報技術専修コース(ソフトウェア工学科・システム創成工学科・情報システム数理学科)」の学習・教育目標に対応する(小項目:F-1,2,3,4)。
シラバスに書いてあるように評価方法は「レポート80点、プレゼンテーション20点で評価し、60点以上を合格とする。」です。
第1回 4/7 ガイダンスなど
- 横山研究室ガイダンス資料
- 大学はどんなところ? (陳先生)
- Google Apps for Education のパスワードの発行
- 研究室のメンバーの間でのみ、YouTube動画を公開したり、発表資料を共有したりできます。アップロードできるファイルの総容量はほぼ無限です。
- 個人情報について
- テキストの配布
- 情報処理学会 ジュニア会員について。会費無料でお得ですので,学会に登録することをおすすめします。
- 横山研究室の研究テーマについて
- 大きくいうと「科学」、もう少しいうと「コンピュータ科学」、さらにいうと「プログラミング言語理論」、直近のテーマは「可逆計算」
- コンピュータ科学(CS)のカリキュラム標準J07-CS
- 今期は特に以下の内容を復習しつつ利用していく。離散構造(関数,関係,集合,論理,グラフ,証明技法,オートマトンと正規表現,計算論),プログラミングの基礎,アルゴリズム,アーキテクチャと構成,プログラミング言語,ソフトウェア工学(ソフトウェア設計,APIの使用,ソフトウェアツール及び環境,ソフトウェア妥当性検査),ネットワークコンピューティング(ウェブアプリケーション),ヒューマンコンピュータインタラクション(Webサービスにおけるユーザインタフェースの構築)
- 過去の学生のテーマ
- 過去の卒論テーマと予稿, 過去の修論の予稿
- 卒論生が書いて学会の論文誌で発表した論文
- 可逆プログラミング言語の引数渡し機構の拡張(草稿, スライド)
- 引数渡し機構をもつ可逆プログラミング言語の可逆性(草稿)
- リストの可逆分割アルゴリズムを利用したゴミ情報が最適な可逆クイック整列法の生成(草稿)
- 過去のエンジニアリングデザインのテーマ
- 発表論文など
- 文部科学省系の科学研究費補助金におけるテーマ
- 開発したソフトウェア
- Janus インタープリタ, Janus オンラインインタープリタ
- Janusとは? Wikipedia
- R-WHILE インタープリタ, R-WHILE オンラインインタープリタ
- PISA オンラインインタープリタ
- こんにゃく
- kaesen(替銭)
- 大きくいうと「科学」、もう少しいうと「コンピュータ科学」、さらにいうと「プログラミング言語理論」、直近のテーマは「可逆計算」
- おすすめ
- 専門科目・ソフトウェア工学科選択科目のうち「プログラミング言語(野呂昌満先生)」「オブジェクト指向プログラミング(蜂巣吉成先生)」「数理論理学(佐々木克巳先生)」の内容をしっかり学習しましょう。なお「プログラミング言語」と「数理論理学」は情報技術専修コースを修了するのに3科目6単位以上修得しなければいけない単位に分類されています。
- 「情報技術専修コース」へ登録しよう
- 「情報技術専修コース」において修了に必要な「アルゴリズム論」、「プログラミング言語」、「計算機アーキテクチャとOS」、「ソフトウェア工学基礎」、「ソフトウェア開発技術I」、「情報通信セキュリティ」はいずれも横山研究室における研究のために必要な知識ですので、よく復習しましょう。
- ホームページ「理工学部(情報理工学部)・理工学研究科 [学内向け] 」について(2015年度までの旧ウェブページ「南山大学 瀬戸キャンパス 学内専用トップページ」)
- 2016年度の研究室配属について
- 「S棟学生研究室カードキー」の配布。
- S303とサブエントランスのみが開錠できる。
- S303 の座席配置について。横森研の学生の受け入れについて。
第2回 4/15
- ソフトウェア工学科 紹介ビデオ (横山研内でのみ公開)
- ソフトウェア工学科の3つのポリシー
- 入学者受入方針(アドミッションポリシー)、教育課程の編成・実施方針(カリキュラムポリシー)、学位授与方針(ディプロマポリシー)
- プログラミングコンテスト
- ACM-ICPC アジア地区つくば大会 2016: 登録締切2016/6/10
- U-22 プログラムミング・コンテスト 2016: 応募受付締切2016/8/25
- 可逆計算に関する余談
- 2007年度 プログラム逆変換と可逆計算(Programming Inversion and Reversible Computing)講義資料
第3回 4/22
以降は、各自、プロジェクトの進捗報告か情報科学の初歩的内容の輪講をします。
プロジェクト案
- 理論的研究
- 可逆変換を用いた高水準プログラミング言語のプログラム変換(cf. パッヘ研究奨励金申請書)
- 関数型の視点からの効率的可逆シミュレーションおよび可逆プログラミング方法論の拡張(cf. 日本学術振興会科学研究費助成金, 科学研究費助成事業 実施状況報告書(平成27年度))
- 事例研究
- 可逆アルゴリズムの事例研究
- APIを用いた情報収集と情報提供ウェブサイト
- 調査研究(サーベイ)
- 可逆言語、可逆計算モデル
- 圏論のプログラミング言語への応用(学生からの希望により)
- ハードウェア/ソフトウェアの制作
- 小さな万能可逆言語(R-COREの実装,R-WHILEのマクロの実装)
- 可逆言語の翻訳機
- アルゴリズム・トレーディングのライブラリの制作
- レゴ・マインドストーム上でのソフトウェアの制作
- 消費エネルギー最適化
- 授業評価アプリ
情報科学入門 スライド
解説(YouTube)
宿題
宿題を終えるのに必要だった時間を次週に教えてください。終わらなかった場合はどこまで出来たかを報告してください。
- 【必須】p.iiに説明のあるサポート情報を参考にisrbをインストールして下さい。
- 【必須】第1-2章について,テキストを良く読み,*の付いていないすべての「練習」を解いてください。
- 【できたら】面白いコンピュータサイエンスやソフトウェア工学の入門書を探し出して読書して感想をひとこと教えてください。
- おすすめ:坂村健『痛快!コンピュータ学』,川合慧『情報』,トム・デマルコの著作,石田 晴久,青山 幹雄,安達 淳,塩田 紳二,山田 伸一郎『コンピュータの名著・古典100冊』の中から1冊
- 南山大学図書館の蔵書の探し方
第3回 4/29
- 情報科学入門 スライド: 03.pdf, 04.pdf, 05.pdf, 06.pdf, 07.pdf, 08.pdf, 09.pdf, 10.pdf, 11.pdf, 12.pdf
- 「練習」の解答(一部): pdf, tex
第4-7回 5/12-6/2
第8回- 6/9-
- 輪読: 大堀 淳, ジャック ガリグ, 西村 進: コンピュータサイエンス入門〈1〉アルゴリズムとプログラミング言語, 岩波書店, 1999. Amazon
- Minimalの処理系
- 「問」の解答(一部):pdf, tex (新3年生には非公開)
レポート(6/30出題)
以下からひとつを選択してグループで取り組んで下さい。レポートには,各メンバーについて担当部分とかかった時間を記載して下さい。締切8月15日(月)。提出先:WebClass。★は多いほど時間がかかる問題です。ソフトウェア製作を報告するレポートの書き方は先輩のレポートも参考にしてください。
- 指導教員の許可を得たプロジェクトのレポート。(複数のグループでやって良いが,合計6名まで)
各自が面白いと思えるプロジェクトをやるのが一番良いでしょう。- ボット,木村君と矢澤くん?
- 消費エネルギー最適化,赤羽さん?
- 授業評価アプリ,柴田君と青木君?
- こんにゃく,家崎くん,安田君,,,?
- 圏論によるR-COREの特徴付け,R-WHILEからR-COREへのコンパイル,大久保君?
- 輪読をしたテキストの問題を解いて解説をする課題。各章を担当した人に答えを聞いても良いです。つまり,実質は,授業時間に解いていない問題や担当した人が解けなかった問題を解いていくことになります。
- 『情報科学入門』の練習の解答のレポート。ただし,*の付いている節と*のついている練習は除く。入門書で幅広く学んできた基礎的な内容を復習したい人向け。(★★★2名まで)
- 『コンピュータサイエンス入門』の問の解説を記載したレポート。第1部のすべての問。アルゴリズムについて興味を持った人向け。(★★★2名まで)
- 『コンピュータサイエンス入門〈1〉』で出題されている実装の問題。プログラミング言語の実装に興味がある人向け。実装に用いるプログラミング言語は,MLの一種であるOCamlをお薦めします。また開発にはGitHubを使うことをお薦めします。インタープリタよりコンパイラを作る方が難しいです。問11.7以外では,問11.7の成果物の代わりに LambdaParser を使っても良いです。
- 問11.7(p.150) (★★2名まで)
- 問13.5(p.197) (★★2名まで)
- 問14.14(p.213) ラムダ式からコンビネータ式へのコンパイラ(★★★3名まで)
- 問14.18(p.219), ラムダ式のインタープリタ(★2名)
- 問14.20(p.225), ラムダ式からSECD機械コードへのコンパイラ(★★★3名まで)
- SECD機械コードを解釈できるインタープリタ(抽象機械)(★★2名まで)
- 問15.4 と 問15.5, 型推論(★★★3名まで)
- 『コンピュータサイエンス入門〈2〉論理とプログラム意味論』のプログラミング言語petitのインタープリタ(★★)
大久保くんの解答例(大久保君は、これだけを提出しても良いです。しかし,これ以外の課題にもグループで挑戦して欲しいです。)
- 『コンピュータサイエンス入門〈1〉』で出題されている証明の問題。これらは締切前は人の力を借りずに自分の力で解くこと。(2016/07/21追加)
- p.211の問14.12と問14.13(★★1名まで)。
- p.225の問14.19(★1名まで)。
- P.228の問15.1(★1名まで)。
- P.237の問15.2(★1名まで)。
- P.238の問15.3(★1名まで)。
- 『コンピュータサイエンス入門〈2〉』で出題されている証明の問題。これらは締切前は人の力を借りずに自分の力で解くこと。(2016/07/21追加)
- p.53の問4.1(★×0の易しい問題.1名まで)
- p.55の問4.2(★×0.5.1名まで)
- p.58の問4.3(★×0の易しい問題.1名まで)
- p.67の問5.1, p.68の問5.2(★×0の易しい問題.1名まで)
- p.70の問5.3(★×0.5.1名まで)
- p.89の問6.1, p.90の問6.2(★×0.5.1名まで)
提出されたレポート
- 1 src 問14.14 ラムダ式からコンビネータ式への翻訳など
- 2 src Petit のインタプリタの実装
- 3 問11.7 構文解析
- 4 問4.2 (閉じた論理式の集合は極大無矛盾ならばセオリーであることを示せ)など
- 5 構文解析など
- 6 Rubyのプログラミング
- 7 南山大学シラバスのオープンデータ化
- 8 問題5.3
夏休みのリーディングアサインメント(レポートは課さない)
- 田辺 誠, 中島 玲二, 長谷川 真人: コンピュータサイエンス入門〈2〉論理とプログラム意味論, 岩波書店, 1999.
- 「問」の解答(一部):pdf (新3年生には非公開)
輪読をしたものの続きとなる書籍である.京都大学における主に理科系向きの一般教養科目で用いられる教科書であり,対象のレベルは1回生からの学部学生である.これは,情報系の学科に限らず文化系の学生も受講している科目の教科書ではあるが,この先,コンピュータ科学を詳しく学んでいく上で重要な内容を入門的に解説してある.範囲は,
- 第1章
- 第I部 数理論理学入門(第4章 完全性定理は,深く理解できずとも読み飛ばすだけで良い.)
- 第II部 プログラムの不動点意味論
- 第III部 プログラミング論理入門
とする.第IV部リアクティブ・システムのための時相論理は,興味がなければ,必ずしも読まなくても良い.高校までの勉強と同様に練習問題を解きながら読み進めると理解が進んででよい.解答は共有フォルダにアップして欲しい.
以下も候補であったが,輪読した書籍と重複があるので取りやめた.
- Tom Stuart 著、笹田 耕一 監訳、笹井 崇司 訳: アンダースタンディング コンピュテーション――単純な機械から不可能なプログラムまで,O'Reilly Japan,2014.
- 本書の次に読むものにあるものも候補
春学期末の講評
今学期はコンピュータ科学の入門的な内容を主に輪読形式で学んだ.当初やりたかった分野のうち,離散構造(関数,関係,集合,論理,グラフ,証明技法,オートマトンと正規表現,計算論),アルゴリズム,アーキテクチャと構成,プログラミング言語の入門的な内容を扱うことができた.プログラミングについては課題でソフトウェアの製作を各自行うようにした.ソフトウェア工学(ソフトウェア設計,APIの使用,ソフトウェアツール及び環境,ソフトウェア妥当性検査)の知識が必要であるが,時間の都合上,授業中に扱うことはできなかった.ソフトウェア妥当性検査はリーディングアサインメントの第III部プログラミング論理入門に初歩的な内容があるので学んで欲しい.秋学期のエンジニアリングデザインや卒業研究ではウェブアプリケーションの製作が必要となることがある.秋学期以降で,こうした内容に取り組めるようにしたい.
今学期のソフトウェア工学演習は,形式としては講義に近くなってしまったが,これは入門的な内容を扱ったことも理由である.来学期以降,より対話的に行いたい.各人のテーマもより専門的なものにしたい.
読書を勧めたい。今年の理工学概論のページの下の方にある課題図書も参考にして欲しい。
2017年7月現在の卒業論文のテーマと本授業の内容との関連を考えたい.
- 家崎雄太くん,水野竣太郎くん,可逆線形探索:『コンピュータサイエンス入門〈1〉』の第4章探索アルゴリズム 4.2節線形探索において線形探索について学んだ.『コンピュータサイエンス入門〈1〉』の第I部アルゴリズムに出てくる内容,特に第3章計算量とオーダー記法および『情報科学入門』の第5章アルゴリズムと計算量に出てくるような計算量の求め方は直接的に役に立っている.
- 大久保雄飛くん,安田拓也くん,二分木のランク計算のクリーン可逆シミュレーション:アルゴリズムについて学んだこと,特に木構造と再帰などが直接的に役に立っている.
- 廣瀬隼大くん,赤羽里帆さん,渡邉将匡くん,初学者の学習支援のためのPythonとRuby間の翻訳:『情報科学入門』で使われていたRubyに慣れていることが役立っている.『コンピュータサイエンス入門〈2〉』におけるプログラミング言語理論が関係する.
- 青木崚くん,柴田心太郎くん,増田大輝くん,可逆プログラミング言語R-WHILEによる万能可逆チューリング機械の構成:『コンピュータサイエンス入門〈2〉』におけるプログラミング言語理論が関係する.
- 矢澤拓海くん,木村孝大くん,1次元可逆セル・オートマトンのクリーン可逆シミュレーションの実現:他のテーマに比べると関連性は薄い.
リンク
- 野呂 昌満, プログラミング言語 (2015年度), シラバス
- 本演習でもやるアセンブリプログラミング言語、プログラミング言語の計算モデル(手続指向計算、関数指向、論理指向モデル)、正規表現、文法、字句解析および構文解析法、中間表現とコード生成系を扱います。
- 2016年度はコンパイラを製作する課題が出ていません。しかし、コンパイラ製作は一度やっておくと良いでしょう。本演習のレポート課題としてコンパイラ製作を選択することもできます。
- 佐々木 克巳, 情報数学・数理論理学
- コンピュータ科学における基礎として重要です。われわれの研究室では、情報数学や数理論理学を発展させるわけではなく利用するだけですが、これらの授業で扱う内容はしっかり復習して4年生で利用できるようにしましょう。
- 蜂巣吉成, オブジェクト指向プログラミング
- Javaを学んでいるという考えのみでは不十分です。オブジェクト指向プログラミングの重要概念(クラス・オブジェクト、カプセル化、継承、多相性)を身につけるようにしましょう。
- 沢田 篤史, ソフトウェア開発技術I, シラバス
- 開発プロセス、構造化・モジュール化・抽象化、構造化分析、オブジェクト指向分析・設計など、3年の秋学期以降ソフトウェア開発を行っていく上で必須の知識を身につけられます。UMLが読めないと、おそらく他の研究室の人が何をやっているかを短時間で読み取ることは不可能でしょう。
- 吉田, アルゴリズム論(2014年)
- 計算複雑度の解析をできるようになりましょう。