2013年2月21日木曜日

ランチョンセミナー発表


3月1日(金)12時からランチョンセミナーで発表します。

タイトルは次のとおりです。
授業構想:MSQGPアプローチ 〜反転授業の応用

2013年度にリニューアルする大学院科目「ソフトウェア工学概論」の授業設計を発表します。
(シラバスはこちら)

次のようなことをしている方々にオススメです。
1. ソフトウェア工学教育の新しい学習スタイルを模索している
2. 反転授業をどう取り入れるか考えている
3. 能動的・自律的に深く学べる能力を習得させたい
4. 「MSQGPアプローチって何よ?」と疑問を持っている
5. 山崎を応援している

ランチョンセミナーは,オンラインで参加できる無料の教育に関する発表の場です。
ぜひよろしくお願いします。

http://cvs.ield.kumamoto-u.ac.jp/wpk/

2013年2月16日土曜日

シラバスに込められた思い〜組込みソフトウェア(2013)

シリーズの最後は大学院博士前期課程前期集中講義の組込みソフトウェアです。この科目の基本コンセプトは「技術の学び方を学ぶこと」です。

舘伸幸さんを特別講師として招いています。以前は森孝夫さんとも組んでいました。


もし,ご意見・ご感想などあれば,ぜひ右下の MessageLeaf にお寄せください。授業改善に役立てたいと思っています。


授業の概要(ねらい,テーマなど)

本授業では主に簡単な組込みソフトウェアの開発方法を学習します。開発対象のシステムは LED や押しボタンなどがついたシンプルなマイコンボードです。組込みソフトウェア開発のエッセンスはこのような単純なシステムの開発の中に詰まっています。
この授業でとくに重視しているのが,実開発でも用いられるハードウェアに関する資料を読みながら自律的に問題を解決していくプロセスです。技術は急速に進化するので知識は陳腐化していく運命にありますが,だからこそ,技術ではなく技術の学び方を学ぶことが強く求められます。

到達目標


  1. 与えられた関連資料を参照し,指定されたマイコンボードと1〜3種類程度のハードウェア部品からなる組込みシステムに,指定された1〜3機能程度の要求仕様を満たすソフトウェアをペアで設計・実装することによって,問題解決に必要なルールや手順を自ら編み出せる。

  2. 組込みシステムの定義を説明できる。
  3. Koopman の提唱する組込みシステムの応用領域の分類例について例と説明を考えられる。

  4. ISO/IEC9126の品質特性の中から,指定された組込みシステムに最も求められる品質特性がどれか,選択する理由とともに自分の言葉で主張できる。

学位授与方針との関連
  1. 知識・理解
    1. 組込みソフトウェアに関連する概念・用語を自分の言葉で説明できる。(到達目標1-4)
  2. 技能
    1. 開発に必要なモデリング・プログラミングの技能を身に付ける。(到達目標1)

  3. 思考・判断・表現
    1. 関連資料を参照しペアで議論しながら問題を自律的に解決できる。(到達目標1)

    2. 与えられた製品について,どのような品質が求められるか判断できる。(到達目標4)
  4. 関心・意欲・態度
    1. 開発するときにわからないことがあった場合に,人に尋ねるのではなく資料を自力で調べることを選択する。(到達目標1)

    2. 開発中の製品に求められる品質は何かを常に考える習慣を身につける。(到達目標4)

教科書
講義中に配布します。

参考書
B.P. Douglass “Design Patterns for Embedded Systems in C: An Embedded Software Engineering Toolkit”. Newnes, 2010. ISBN 978-1856177078

授業計画・内容
2013年度も引き続き授業改善を行うため,授業計画を変更する可能性が高いです。第1回のガイダンスでのアナウンスに注意してください。
  1. ガイダンス,概論 (1) 
  2. 組込みシステムのモデリング 
  3. 組込みシステムのモデリング 例題分析演習 
  4. 使用するハードウェアの説明,開発環境の構築 

  5. 簡単なプログラミング (1)
  6. 簡単なプログラミング (2)
  7. 設計演習 (1) 
  8. タイマーと割り込み 
  9. 設計演習 (2) 
  10. 開発演習 (1)
  11. 開発演習 (2)
  12. 開発演習 (3)
  13. 開発演習 (4)
  14. 概論 (2)
  15. 振り返り
成績評価の方法
到達目標ごとの成績評価
到達目標1: 演習課題: 40%
到達目標2: 試験: 10%
到達目標3: 試験: 10%
到達目標4: 試験: 10%
その他の評価項目
積極的な授業への参加: 30%

授業に対する準備事項
授業ではUMLによるモデリングとC言語によるプログラミングの能力が必要です。UMLモデリングとC言語プログラミングをよく復習しておいてください。

履修上の注意
授業ではUMLによるモデリングとC言語によるプログラミングの能力が必要です。UMLモデリング能力については学部3年生のソフトウェア設計論を,C言語プログラミング能力については学部1年生の計算機演習Iを受講していることが望ましいです。これらの科目を受講していない場合には,授業開始前に補習を行うので,担当教員に連絡してください。

担当者からのメッセージ
この授業では特別講師として組込みシステム開発経験が豊富な技術者を招聘しています。特別講師を通して,実社会で組込みシステムを開発するとはどういうことなのかを学んでいきましょう。

キーワード
組込みシステム,組込みソフトウェア,ソフトウェア・モデル,品質,設計,実装,プログラミング,UML
embedded system, embedded software, software modeling, software quality, software design, 
software implementation, programming, UML

2013年2月15日金曜日

シラバスに込められた思い〜ソフトウェア工学概論(2013)

ソフトウェア工学概論は,大学院博士前期課程の授業です。
新カリキュラムとなる2013年度に大幅リニューアルします。リニューアルの方針として,能動的・自律的に深く学べる能力の育成という目標を掲げました。そのためのアプローチとして,反転授業の考え方を取り入れ,独自のアレンジを加えています。


もし,ご意見・ご感想などあれば,ぜひ右下の MessageLeaf にお寄せください。授業改善に役立てたいと思っています。


授業の進め方

Part I では,到達目標1,2に対する内容を学習します。Part I の各トピックは次のように構成されます。

  1. メタファー: 教員が各トピックの概要と,ガイドとなる「たとえ(メタファー)」を紹介します。このたとえは,たとえ学生がソフトウェア開発経験が浅くとも,ソフトウェア工学上の重要なトピックを身近でわかりやすいように設計されています。
  2. 要約: 学生は教科書を予習して各トピックの要約もしくはトピック中のキーワードに関する紹介記事を記述します。要約はできるだけ短く,紹介記事は少し長くてもいいです。これにより学生の意識を「教師から教わる」から「自分で学ぶ」ように変えることを狙っています。学生は毎週,要約・解説記事を提出します。
  3. クエッション: また学生は調査の過程で生じた疑問点(リサーチクエッション)も記述します。リサーチクエッションは必ずしも高度でなくともいいです。むしろ素朴な疑問のほうが本質を捉えているものです。Part II でリサーチクエッションについて学習を進めます。それにより学生が深く学ぶことを狙っています。学生は毎週リサーチクエッションを提出します。
  4. ガイド: 教員が学生によって提出されたリサーチクエッションについて,学生がさらなる調査をする上でのヒントを提示します。Part II ではこのヒントを活用して学習を進めます。


Part II では,到達目標3に対する内容を学習します。

  1. 振り返り(1) : 学生は Part I で提出したリサーチクエッションの中から2つに絞り,表明します(学生はあとで選んだリサーチクエッションをそれぞれ発表します)。教員が各リサーチクエッションの発表日を割り当てます。
  2. 予習: 学生はリサーチクエッションについてポスターを作成します。
  3. プレゼンテーション: 学生は Part II の期間中に2回ポスター発表を行います。教員と発表当番ではない学生は,ポスターについて議論をします。
  4. 復習: 発表をした学生は2つのレポートを提出します。(1) 発表内容や質問,議論を総括したレポートと(2)リサーチクエッションについて解説する記事を書いたレポートです。
  5. 振り返り(2): 授業全体を総括します。



授業の概要(ねらい,テーマなど)



ソフトウェア工学は,ソフトウェア開発の理論と実践の両面の知恵を結集した知識体系です。実際のソフトウェア開発ではプログラミングだけでなく様々な作業を行います。この授業では,ソフトウェア開発がどのように行われているか概観します。
大学院生ともなれば,能動的・自律的に深く学べる能力を身につけることが欠かせません。この授業では,ソフトウェア工学を学ぶことを通して,能動的・自律的な深い学びかたを習得します。技術は急速に進化するので知識は陳腐化していく運命にありますが,だからこそ,技術ではなく技術の学び方を学ぶことが強く求められます。この経験は,大学院での研究活動におおいに役立つことでしょう。

到達目標


  1. 与えられたソフトウェア工学関連トピックについて,教員と教科書の助けを得ながら,自分の言葉で要約や解説を記述できる。

  2. 与えられたソフトウェア工学関連トピックについて,自分の言葉でリサーチクエッションを記述できる。

  3. 到達目標 2 のリサーチクエッションについて,教員の助けを得ながら,独自に調査してプレゼンテーションと解説記事を記述できる。
学位授与方針との関連
  1. 知識・理解
    1. ソフトウェア工学関連の概念・用語等の基礎知識を自分の言葉で説明できる。(到達目標1, 3)
  2. 技能
    1. ソフトウェア工学関連トピックについて,体系立てた方法で調査できる。(到達目標1, 3)

  3. 思考・判断・表現
    1. ソフトウェア工学関連のリサーチクエッションを独自に立てられる。(到達目標2)

    2. ソフトウェア工学関連トピックを調査する適切な方法を判断できる。(到達目標1, 3)

    3. ソフトウェア工学関連トピックを自分の言葉で表現できる。(到達目標1, 3)

  4. 関心・意欲・態度 
    1. 自らの関心・意欲に基づいて課題を設定し調査する態度を身につける。(到達目標2, 3)

教科書
ソフトウェア工学〜理論と実践 シャリ・ローレンス・プリーガー著 堀内泰輔訳 ピアソン・エデュケーション
Software Engineering: Theory and Practice, Shari Lawrence Pfleeger, Pearson Education.

参考書
主要な参考書を掲載します。学生の興味に応じて授業中にも紹介します。

実践ソフトウェアエンジニアリング〜ソフトウェアプロフェッショナルのための基本知識 ロジャー・プレスマン著 西康晴ほか監訳 日科技連出版社
Software Engineering: A Practitioner’s Approach. Roger Pressman. McGraw-Hill.

ソフトウェアエンジニアリング基礎知識体系-SWEBOK2004 松本吉弘訳 オーム社
SWBOK. IEEE Computer Society. available at http://www.computer.org/portal/web/swebok/home 

ソフトウェア開発201の鉄則 アラン・デービス著 松原友夫訳 日経BP社
201 Principles of Software Development. Alan M. Davis. IEEE Computer Society.

The Essence of Software Engineering: Applying the SEMAT Kernel. Ivar Jacobson et al. Addison-Wesley.

授業計画・内容 
私たちは,ソフトウェア開発経験の浅い学生の能動的・自律的な深い学びを促進することを狙って,この授業を設計しました。
授業は2部構成です。

Part I (概要の学習)
1.ガイダンス
2. 概論
3. プログラミング (1)
4. システム設計 (1)
5. 要求開発 (1) 
6. ソフトウェアテスト (1) 
7. プロセスのモデル化とライフサイクル (1)
8. プロジェクトの計画と管理 (1)  

Part II (ポスター発表)
9. 振り返り (1) 
10. 要求開発 (2)
11. システム設計 (2)
12. プログラミング (2),ソフトウェアテスト (2)
13.  プロセスのモデル化とライフサイクル (2) 
14. プロジェクトの計画と管理 (2) 
15. 振り返り (2)

2013年度は大幅な授業改善を行う予定です。Part I 第1回のガイダンスと Part II 第9回の振り返り(1)でのアナウンスに注意してください。

成績評価の方法
到達目標ごとの成績評価
到達目標1: 各トピックの要約もしくはトピック中のキーワードの解説を記述したレポート(Part I の毎週): 30%
到達目標2: 各トピックのリサーチクエッションとその動機を記述したレポート(Part I の毎週): 20%
到達目標3: リサーチクエッションについて調査したポスター発表(2回): 20%
     ポスター発表での議論の総括を記述したレポート(2回): 10%
     リサーチクエッションの研究成果の解説を記述したレポート(2回): 20%

授業に対する準備事項
学生は授業時間中の学習だけでなく予習・復習を多く行う必要があります。ただし,最低限どのような予習・復習をすべきかについては,教員がガイダンスならびに授業中に明示します。


少なくとも次のような予習を行う必要があります。
Part I
-トピックの要約,もしくはトピック中のキーワードの解説 (毎週)
-トピックのリサーチクエッションとその動機 (毎週)
Part II
- ポスター (2回)

少なくとも次のような復習を行う必要があります。
Part II
- ポスター発表での議論の総括 (2回)
- リサーチクエッションの解説 (2回)

履修上の注意
プログラミングなどのソフトウェア開発をした経験があるか,卒業研究などのプロジェクト活動を行った経験があることを前提としています。どちらも経験ない場合には補習をしますので,学期が始まる前に担当教員に相談してください。
授業中に日本語によるプレゼンテーションを行います。必要な日本語能力がない場合には,学期が始まる前に担当教員に相談してください。

担当者からのメッセージ
2013年度には「反転授業」という新しい授業スタイルを取り入れる,大きなリニューアルを予定しています。
反転授業でいう「反転」は,授業と課外学習の役割を反転させることを指します。普通の授業では,授業時間中に知識を吸収し,課外学習で応用問題の宿題を行います。しかし,反転授業では,知識吸収を自習教材で予習時間中に済ませてしまいます。代わりに教員と学生が一堂に会する授業時間を有効活用して,応用問題を扱うグループワークや質問に対するフォローアップなどを行います。こうすることで,さらなる授業の学習効果の向上を狙っています。
この授業では,担当教員の長年のソフトウェア工学の教育実践研究の成果を踏まえ,反転授業を独自にアレンジして取り入れています。この授業の設計にあたって最も重要な点は,くり返しになりますが,ソフトウェア工学に対する学生の自発的な問いに沿った深い学びのプロセスを促進することです。これを強化することで学生が卒業した後も自分の力で新たな知識を習得できることを狙っています。ソフトウェア分野は技術の多くが急速に陳腐化してしまうので,単に知識を習得できるだけでは不十分です。知識の習得のしかたそのものを学ぶ必要があるのです。

キーワード
ソフトウェア工学,ソフトウェア開発,プログラミング,設計,要求開発,ソフトウェアテスト,ソフトウェアプロセスモデル,ソフトウェアライフサイクル,プロジェクト計画,プロジェクト管理
Software engineering,  software development, programming, software design, requirements engineering, software testing, software process model, software life cycle, software project planning, software project management 



2013年2月13日水曜日

シラバスに込められた思い〜オブジェクト指向プログラミング演習(2013)

オブジェクト指向プログラミング演習(OOP演習)は学部3年次第2学期の科目です。私がインストラクショナル・デザインに基づいて新規開発した授業としては2作目にあたります。

近代的なソフトウェア開発を実践的に学ぶというコンセプトで始めました。ただ単に開発環境の使い方で終始するのではなく,ソフトウェア工学上重要な概念を強調することで,陳腐化しない知識も身につけられるように設計しました。強調しているポイントは,たとえばテスト駆動開発,Model-View-Controller アーキテクチャ,状態機械モデリングといった概念です。

2011年度までは開発環境と言語は Eclipse + Java でしたが,2012年度からは Xcode + Objective-C に変更しました。Objective-C は Smalltalk 由来の文法のため,メジャーな C++ や Java に見慣れた身からすると違和感を覚えるものですが,Xcode による支援もよくできていることもあって,慣れればスラスラと読み書きできるものです。

開発環境の変更にともなって授業内容についても2012年度に大幅なリニューアルをしました。2013年度は基本路線を踏襲しつつ教育内容を充実していく方向での改善を考えています。


もし,ご意見・ご感想などあれば,ぜひ右下の MessageLeaf にお寄せください。授業改善に役立てたいと思っています。


関連する教育実践研究の発表・論文


スパイラルカリキュラムという教育手法を取り入れています。詳細は下記を参照ください。まだまだスパイラルカリキュラムとしては未完成だと認識しています。


ランチョンセミナー
スパイラルカリキュラムによるソフトウェア工学教育
http://cvs.ield.kumamoto-u.ac.jp/wpk/?p=908

スパイラルカリキュラムによる
ソフトウェア工学 e-learning 教材の開発
http://cvs.ield.kumamoto-u.ac.jp/wpk/?p=1176

組込みシステム研究発表会
【中間報告】スパイラルカリキュラムによるソフトウェア工学教育
http://ci.nii.ac.jp/naid/110007993246

授業の概要(ねらい,テーマなど)

みなさんが「アプリ」という言葉を耳にした時に,たとえば Office, ウェブブラウザなどを連想するかもしれません。携帯のiアプリや, iPhone や Android などのスマートフォンで動作するアプリをイメージした人もいるかもしれません。このようなアプリを GUI アプリケーションと言います。

これからみなさんはオブジェクト指向プログラミング (Object-Oriented Programming: OOP) について演習を通じて学習します。OOPとはどのようなものなのか,全容を理解することはなかなか難しいのですが,「GUIアプリケーションを作るためには,OOPを習得することが必須だ!」といえば,みなさんは少なくともOOPの必要性について充分理解できるでしょう。実際,みなさんが本演習をすべて終えると,簡単なGUIアプリケーションが作れるようになれます。

実践的なソフトウェア開発ができる人材は,産業界からも強く求められています。単にプログラミングができるだけでは不十分です。ソフトウェア工学 (Software Engineering) の体系的な知見を実践に生かせる人材が求められています。また,最近は開発ツールの進歩も著しく,それらにある程度馴染んでおくことも,即戦力としては求められています。

このような要請を踏まえ,OOP演習では,最近の開発ツールを駆使したソフトウェア開発の全体像を体験すること,要所要所でソフトウェア工学との関連について触れることを重視しました。とくに品質の高いソフトウェアを開発するために必要な品質保証技術を重視するため,品質保証を重視した開発方法の一つであるテスト駆動開発 (Test-Driven Development: TDD) を取り入れることにしました。

次のような人はOOP演習を学習することを強く推奨します。

  1. 将来,ソフトウェア開発の仕事に携わりたい人
  2. 大学院に進学してソフトウェア工学を学びたい人

到達目標
  1. GUIアプリケーションをオブジェクト指向,Model-View-Controller,テスト駆動開発に基づいて開発できる。
  2. UMLのクラス図,アクティビティ図,状態機械図を Objective-C,Java, C++で実装できる。
  3. 他の学習者が開発した成果物(UML図,プログラムコード)に対してレビューやテストを行い,問題点を指摘できる。
  4. OOP演習に必要な概念(オブジェクト,クラス,継承,カプセル化,ポリモーフィズム,Model-View-Controller アーキテクチャ,テスト駆動開発,状態機械モデリング,パターン,リファクタリング) を,プログラムなどの実例を元に説明できる。
教科書
講義資料を Moodle で配布します。

参考書
E.ガンマ他著「デザインパターン」ソフトバンククリエイティブ
M.ファウラー著「リファクタリング 」ピアソンエデュケーション

授業計画・内容
2013年度も授業改善のため授業計画・内容を大きく変更する予定です。第1回のガイダンスでのアナウンスに注意してください。なお,下記の箇条書きの番号は必ずしも授業の回と対応していません。実際には学生の進捗に合わせて調整しています。
  1. ガイダンス
  2. はじめてのGUIアプリ開発〜Model-View-Controller アーキテクチャと状態機械モデル
  3. UMLモデルとプログラミング
  4. リファクタリング〜入門
  5. リファクタリング〜モデルとコントローラーの分離
  6. ソフトウェアテスト〜同値クラス
  7. ソフトウェアテスト〜モック
  8. ソフトウェアテスト〜状態機械モデルのテスト
  9. テスト駆動開発
  10. 状態機械モデリング〜電卓
  11. リファクタリング〜電卓
  12. ソフトウェアテスト〜電卓
  13. 電卓開発実践
  14. 電卓開発仕上げ
  15. 振り返り
成績評価の方法
到達目標ごとの成績評価
到達目標1: 演習課題: 70%
到達目標2: 演習課題: 10%
到達目標3: 演習課題: 10%
到達目標4: レポート:   10%

授業に対する準備事項
  • UMLのうちとくにクラス図,状態機械図,コミュニケーション図を読み書きできる必要があります。3年次第1学期のソフトウェア設計論をよく復習しておいてください。
  • UML のクラス図と状態機械図を基にオブジェクト指向プログラミング言語で実装できる必要があります。3年次第1学期のソフトウェア設計論をよく復習しておいてください。
  • C言語で関数内部を実装できる必要があります。1年次第1学期の計算機演習IのC言語プログラミングをよく復習しておいてください。
  • 上記の準備事項で挙げた能力の習得が不十分である場合には補習をします。授業開始前に担当教員に相談してください。
履修上の注意
3年次第1学期のソフトウェア設計論を必ず履修しておいてください。オブジェクト指向プログラミング演習では,ソフトウェア設計論の内容を理解していることを前提とします。教務システムの都合上,ソフトウェア設計論を履修していなくてもオブジェクト指向プログラミング演習を履修できますが,その場合はソフトウェア設計論の内容を補習してもらいます。

キーワード
オブジェクト指向プログラミング,ソフトウェア開発,ソフトウェア工学,ソフトウェア・モデリング,テスト駆動開発,リファクタリング, UML
object-oriented programming, software development, software engineering, software modeling, test-drived development, refactoring, UML



2013年2月11日月曜日

シラバスに込められた思い〜ソフトウェア設計論(2013)

ソフトウェア設計論は,私が担当する授業の中で最も教え方が洗練されている,いわば自信作です。これは根拠のない自信ではなく,学生から「とても楽しい授業でした!」というような声が多数寄せられるような実績も伴っています。

この授業で行なっている教え方は,インストラクショナル・デザイン(Instructional Design) に基づいています。教え方に興味を持った人はぜひ調べてみてください。このブログでもたびたび紹介しています。


もし,ご意見・ご感想などあれば,ぜひ右下の MessageLeaf にお寄せください。授業改善に役立てたいと思っています。


授業名について
ソフトウェア設計論 (Software Design) は,私としては本当は「UMLソフトウェアモデリング (UML Software Modeling)」と名付けたいところです。なぜならば,この授業で扱っている内容は,ソフトウェアの設計にとどまらないからです。そもそもUMLやその基盤となっているオブジェクト指向という考え方は設計に特化した考え方ではなく,ソフトウェアライフサイクル全体に渡って使われるものなのです。そう考えると,「ソフトウェア設計論」という名前とのギャップはわかってもらえますかね?

授業範囲について
一口にソフトウェアモデリングといっても学習対象はとても広く,何を学ぶべきかの取捨選択はとても難しい判断となります。この授業ではソフトウェアモデリングの中でも基礎中の基礎である「UMLの読み書き」に徹しています。これがが自由自在にできることが,ソフトウェアモデリングを習得する上で最も大切なことだと私は考えています。

授業設計について
前項に掲げた大目標である UML の読み書きを習得させるために,この授業ではさまざまな工夫をしています。興味のある人は,次項目のランチョンセミナーでの発表を参照してください。

2013年度では今まで2年分の授業を行った経験を振り返ってシラバスを見直し,とくに到達目標,授業計画・内容,成績評価の方法の3点について,緻密に計画を練り直しました。

関連する教育実践研究の発表・論文

ランチョンセミナー
ソフトウェアモデリング教育の開発 ~初心者のC(自信)を重視した授業づくり〜


e-CASE 2013
Instructional Design of a Highly Effective Blended Learning Course with Group Discussion on UML Software Modeling


授業の概要(ねらい,テーマなど)

この授業では,最近のソフトウェア設計で用いられる UML (Unified Modeling Language) によるソフトウェアモデリングの手法の基礎を学びます。UML は設計段階だけでなくソフトウェアライフサイクル全体にわたって使われます。最近のソフトウェア開発では,いきなりプログラミングするのではなく,UMLなどを使って分析したり設計したりすることから始めます。現在ではUMLはソフトウェア開発における「読み書き」の基礎能力だといってもいいでしょう。

この授業で扱う UML を用いたソフトウェア・モデリングの考え方は,「ソフトウェア」と銘打ってはいますが,他の分野でも応用できます。たとえば力学シミュレーションや制御,ビジネス・プロセスなどの応用事例があります。

単なる座学ではなく,身の回りの製品やサービスをUMLで記述するような演習課題をたくさん行います。学生が行う作業量は多いですが,その分,実践的なソフトウェア・モデリングの能力を身につけることができます。教え方をいろいろ工夫していますので,確実に,しかも楽しく学べるでしょう。

到達目標
  1. モデリングに関連する概念を説明できる。
  2. 代表的なモデリング手法であるUML(Unified Modeling Language)の図の種類や表記法を説明できる。
  3. 与えられた1〜5機能程度の簡単な製品やサービスについて書かれたUMLモデルを読み取って,自然言語で説明できる。

  4. 与えられた1〜5機能程度の簡単な製品やサービスについて自然言語で書かれた記述を元に UMLモデルを記述できる。

  5. 与えられた1〜5機能程度の簡単な製品やサービスについて書かれたUMLモデルの誤りや曖昧な点,不明な点を指摘できる。

  6. 与えられたクラス図,アクティビティ図,状態機械図を元にJavaなどのオブジェクト指向言語でプログラミングできる。
  7. 世の中のあらゆる物をモデリングしようとする態度を身につける。
教科書
講義資料を Moodle で配布します。

参考書
牛尾 剛「オブジェクト脳のつくり方」翔泳社 ISBN: 978-4798104188 
第13回 でこの本の一部を用います。

平沢 章「オブジェクト指向でなぜつくるのか」(第2版) 日経BP社 ISBN: 978-4822284657
オブジェクト指向についての背景知識や意義を知りたい場合に参照してください。

授業計画・内容
授業改善のため変更する可能性があります。第1回のガイダンスでのアナウンスに注意してください。
  1. ガイダンス,モデリングの概念と特徴,モデリングの態度,機能・構造・振る舞い,目的論的モデリング
  2. UML 概論,初心者が最低限覚えるべき UML の図と記法 10 パターン
  3. 初心者が最低限覚えるべき UML の図と記法 10 パターン 強化演習
  4. 組み合わせパターン(クラス図)
  5. 組み合わせパターン(クラス図) レビュー演習
  6. 組み合わせパターン(クラス図) 強化演習・グループワーク 
  7. 組み合わせパターン(ユースケース図,ユースケース記述)
  8. 組み合わせパターン(状態機械図)
  9. 組み合わせパターン(状態機械図) 強化演習
  10. 複数種類の UML 図を用いたモデリング
  11. 複数種類の UML 図を用いたモデリング レビュー演習 ・グループワーク
  12. 複数種類の UML 図を用いたモデリング 強化演習・グループワーク
  13. オブジェクト指向プログラミング
  14. UMLモデルからのプログラミング
  15. 振り返り グループワーク (モデリングの概念と特徴,機能・構造・振る舞い)
成績評価の方法
到達目標ごとの成績評価
到達目標1: レポート: 10%
到達目標2: 小テスト: 10%
到達目標3: 期末試験:10%
到達目標4: 期末試験:20%
到達目標5: 期末試験:10%
到達目標6: 演習課題: 10%
到達目標7: レポート: 20%
その他の評価項目
積極的な授業への参加: 10%

授業に対する準備事項
  • 身の回りにある製品やサービスを題材にモデリングを行うことが,この授業の中心的活動です。そのため,家電製品やウェブサービスなどに親しんでいると,この授業の役に立ちます。
  • 第1回「モデリングの概念と特徴」「機能・構造・振る舞い」で,何らかの設計図を見た経験があると理解の助けになるでしょう。
  • 第13回「オブジェクト指向」第14回「UMLモデルからのプログラミング」で,オブジェクト指向プログラミングを行います。そのため,C言語の文法を一通り理解していること,C言語で演習レベルの簡単な問題をプログラミングした経験があることが前提です。
具体的には次の項目を復習するといいでしょう。
    • 計算機演習I : 表示,キー入力,変数,条件分岐,配列,繰り返し,関数
    • 計算機演習II: ポインタ,構造体
    • アルゴリズムとデータ構造: 配列,リンクリスト,2分木,スタック,キュー
履修上の注意 
3年次第2学期のオブジェクト指向プログラミング演習の履修を希望する学生は,必ずソフトウェア設計論を履修してください。オブジェクト指向プログラミング演習では,ソフトウェア設計論の内容を理解していることを前提とします。教務システムの都合上,ソフトウェア設計論を履修していなくてもオブジェクト指向プログラミング演習を履修できますが,その場合はソフトウェア設計論の内容を補習してもらいます。

担当者からのメッセージ
授業方法にこだわりさまざまな工夫をした結果,学生から「楽しかった!」「ためになった!」という声が多数寄せられました。私の授業を受講した先輩たちに感想を聞いてみてください。

キーワード
ソフトウェア・モデリング,UML,ソフトウェア工学,ソフトウェア開発,オブジェクト指向
software modeling, UML, software engineering, software development, object-orientation

シラバスに込められた思い〜プログラミング言語処理系(2013)

シリーズ「シラバスに込められた思い」として,私の担当授業のシラバスを紹介しながら,書ききれなかった思いをつづります。

もし,ご意見・ご感想などあれば,ぜひ右下の MessageLeaf にお寄せください。授業改善に役立てたいと思っています。

第1弾は学部2年生向け科目「プログラミング言語処理系」です。この授業では主にコンパイラの原理について学習します。大きく2部構成になっています。前半ではプログラムを読み取る「解析部」について,後半では解析部の情報を元にアセンブリ言語を生成する「合成部」について扱います。解析部と合成部では用いる原理が大きく異なっているので,授業や応用分野にも大きな違いがあります。

そのため,2013年度から始まる新カリキュラムでは,「解析部」と「合成部」で分割し,それぞれ別の科目と吸収・統合しています。この科目は学部2年次科目なので,2014年から新カリキュラムの科目としてリニューアルします。

2014年に大幅リニューアルすることから,2013年度は基本的に今までのシラバスのままです。しかしながら小規模な授業改善は随時行なってきています。たとえば2012年度には大福帳を取り入れることで,学生に対するきめ細やかなフォローアップを行いました。2013年度には新カリキュラムを見据えて,主に合成部の部分について新教材を投入する予定です。

ちなみに学生時代は今の専門のソフトウェア工学と違ってプログラミング言語処理系の合成部に関連する研究を行なっていました。ソフトウェア工学とプログラミング言語処理系の両方を修めた経歴が,今の大学教員ポストの獲得にあたって,とても役だちました。

この授業「プログラミング言語処理系」での授業方法の特徴は,まず講義を聞く従来型のスタイルではなく,自習が中心であることです。もう1つの特徴は,学ぶ内容の特性を考慮して学び方が設計されていることです。このような学び方の設計のことをインストラクショナル・デザインと言います。私の授業はすべてインストラクショナル・デザインに基いて開発されています。この科目は私が大学教員になってから初めて15週分の講義資料を開発した科目なのですが,教材設計マニュアルを参考にインストラクショナル・デザインに基づいて開発した私にとって初めての科目でもあります。

シラバスは次のとおりです。先にも書きましたが,2014年度に大幅リニューアルが予定されているので,シラバスとしては2012年度までのものをそのまま踏襲しています。今となっては改修すべき部分が多くあります。

授業の概要(ねらい・テーマなど)
プログラミング言語は人間の指示をコンピュータに伝える重要な1手段である。また,それを確立するためにプログラミング言語処理系は数多くの計算機科学の理論的成果を用いている。本授業では字句解析,構文解析,意味解析,コード生成,コード最適化の各原理と,スクリプト言語や言語処理系の開発ツールを用いた実践の両面から学習する。

教科書
配付資料,コンパイラ 中井 央著 コロナ社

参考書
プログラミング言語処理系 佐々政孝著 岩波書店
コンパイラ〜原理・技法・ツール(I,II)A.V.エイホ他著

授業計画・内容
授業改善のため変更する可能性がある。
第1回のガイダンスでのアナウンスに注意すること。
1. ガイダンス,概論
2. 字句解析(理論編1: 正規表現からNFAへ)
3. 字句解析(理論編2: NFAからDFAへ)
4. 字句解析(実践編: flex を使った字句解析器の実装) 
5. 構文解析(導入編)
6. 構文解析(実践編: yacc を使った構文解析器の実装) 
7. 構文解析(理論編1: 下向き構文解析器)
8. 構文解析(理論編2: 上向き構文解析器)
9. 意味解析
10. 前半の講義のふりかえり,確認テスト
11. 実行時環境
12. 仮想計算機とコード生成
13. 最適化
14. 応用編
15. まとめ

成績評価の方法
小テスト,中間試験,期末試験 80%  基本的な内容を理解しているかを確認する。
レポート 20% 深く内容を理解しているかを確認する。

授業に対する準備事項
各自が自習できるように教材を構成している。多くの回で小テストを課す。

履修上の注意
計算機演習I,計算機演習II,アルゴリズムとデータ構造を十分に理解しておくこと。
形式言語とオートマトンの履修を推奨する。

担当者からのメッセージ
プログラミング言語処理系の知識は,一見マイナーな印象を受けるかもしれませんが,実は色々と応用がききます。第1回授業で応用分野も含めて概説します。演習を取り入れた学習量の多い講義ですが,頑張って実のある講義にしていきましょう!

2013年2月8日金曜日

2012年度卒業研究タイトル


私の研究室での2011年度の卒業研究の発表者とタイトルは次のとおりです。

上篭 翔太 ETロボコンプロジェクトへのPMBOKの時間管理となぜなぜ分析の適用
岡村 典明 初学者による開発に伴うデザインパターンとリファクタリングの学習プロセスと教訓
小山 哲之 要求変化に対するアジャイル型開発手法の有効性の事例研究
森 龍志  アジャイルソフトウェア開発のイテレーションでの失敗と対策の事例研究
中野 麻美 ソフトウェア開発初心者によるチケット駆動開発の問題点と教訓の考察
安永 岳史 自然言語の文法に基づいたObjective-Cの命名ガイドラインの作成

発表会は2月15日(金) N410-4 で行われます。私の研究室は13:45〜15:15です。