シラバス検索システム
シラバス
科目名
ソフトウェア工学Ⅱ
英語科目
ナンバリング
開講期
春学期
開講学部等
コンピュータ理工学部
配当年次
3年次
単位数
2単位
教員名
青木 淳
※履修条件,配当年次等の詳細は履修要項をご確認ください。
授業概要/Course outline
ソフトウェアの開発・運用・保守に対して、理工学(科学と工学)的な手法や技法の応用を促す講義である。科学(サイエンス)で得られている知見をベースにして、実用的な手法や技法を発見し、工業的な生産活動や製品開発に応用する工学(エンジニアリング)の持ち味を、ソフトウェアに当てはめて解題してゆく。
常にソフトウェアの品質を測定する(メトリクスを施す)ことを意識しながら、要求を分析し、要求仕様を作り、開発すべきシステムの基本設計と詳細設計のやり方、プログラミングとテストの仕方の手解きを行う。そして、開発・運用・保守に介在している現状の問題点を明らかにする。また、プログラミング言語に関する考現学としての側面も有する。
本科目を受講することで、実社会におけるソフトウェアの開発・運用・保守の活動に必要な事柄を一通りバランス良く習得することが講義の目的である。また、将来の職務(技術職・企画職・営業職・事務職などの職種を問わず)において、コンピュータを活用しながら業務の効率化や改善の役割を担う人になるための知識と技能を授けることも目的である。
■前もってどのような科目の履修が望ましいか:
・応用プログラミング(Java/Python/C)
・ソフトウェア工学I
・プロジェクト演習
・アルゴリズムとデータ構造
・グラフィックスI
・ヒューマン・インタフェースI・II
・オペレーティングシステム
■今後どのような科目を履修するのに役立つか:
・プログラミング言語
・言語オートマトン
・分散処理システム
・グラフィックスII
・特別研究におけるプログラミングやデザインなど
授業内容・授業計画/Course description・plan
この授業では「まず、やってみる、それから、学ぶ」をライトモチーフにしながら、以下のようなテーマに沿って進めてゆく。ただし授業の進行状況に応じて変更することがある。
[第01回]
テーマ:開講にあたって(授業目的・授業内容・評価方法・教材など)
テーマ:14本の柱(コンピュータ科学のための教科課程)
授業を始めるにあたって、授業目的・授業内容・評価方法・教材などを説明した後、コンピュータ科学のための教科課程「cc2005」を援用し、受講生たちの前に学域の地図(マップ)を広げ、ソフトウェア工学やプログラミング言語の学域における位置を示して、授業の動機づけを行う。
[第02回]
テーマ:ひとりじゃないって(分割コンパイルとバージョン管理)
テーマ:情報処理技術者(IT人材の卵として:コンピュータ理工学部の出身者として)
現代のソフトウェアが独りで作成できるものではなく、複数人が協行して開発されていること、また、一つのプログラミング言語だけで構成されているのではなく、複数のプログラミング言語で記述されたプログラムが融合して、大規模なアプリケーションになっていることを説明する。キーワードである「ひとりじゃないって」を臓腑に落とすために、ソフトウェアのビルドツールと構成管理ツールを解題し、分割コンパイルとバージョン管理の方法を学習する。加えて、IT人材の卵であるコンピュータ理工学部の出身者が備えなければならない技術を国家資格試験と絡めて明らかにする。
[第03回]
テーマ:プロジェクトマネジメント
テーマ:学期を通して行うソフトウェア開発
プロジェクトとは何であるのか、マネジメントとは何であるのか、それらをきちんとした後、プロジェクトをマネジメントする手法を解題する。おもにスコープ・タイム・コスト・品質における管理手法を詳しく取り上げる。また、学期を通して行うソフトウェア開発の試験を開示し説明し、学んだばかりのプロジェクトマネジメントを実践させる。
[第04回]
テーマ:コードリーディング(プログラムを読む:どれくらいJavaプログラムを読めるのか)
テーマ:プログラムを読む力(読解力)
ソフトウェアを開発(作成)する力の源であるプログラミング能力は、プログラムを書くことよりも、プログラムを読むことによって養われることを説く。名作と称される良いプログラムを読み砕くためのコードリーディングを解題する。Javaプログラミングの際の雛形を示し、面白いプログラムとデザインパターンを用いたプログラムを開示する。
[第05回]
テーマ:スクリプト
脚本や台本としてのプログラミングスタイル、ソフトウェアをプロトタイピングする方法を、デモンストレーションを実際に一緒に行うことによって体験する。1年次と2年次に学んだプログラミング言語との相違、ライトウエイトとヘビーウエイトの相異を会得する。また、今まで使用してきたターミナル(シェル)がスクリプト言語処理系であることを明らかにする。
[第06回〜第07回]
テーマ:オブジェクト指向
現代のソフトウェア開発の指導原理(パラダイム)となっているオブジェクト指向を、プログラミング言語を抜きにして解説する。2年次に学んだJavaプログラミングにおけるオブジェクト指向を確固たるものにし、クラス・インスタンス、インヘリタンス、ポリモーフィズム、メッセージパッシングなど、プログラミング言語から理解し行解することに加えて、デザイン(設計)やアナリシス(要求分析)の過程でも使えるように、受講生の技量を引き上げる。
[第08回]
テーマ:構造化と抽象化
テーマ:様々なアプリケーション
テーマ:データの安全性
プログラミングにおけるソフトウェア工学的な視点として構造化と抽象化に焦点を当てる。並行して行われているプロジェクト演習で開発するものたちを紹介しながら、ソフトウェアを開発する際に必要となる構造化と抽象化を解説する。また、データの安全性についても解題する。
[第09回]
テーマ:ソフトウェアの構造
テーマ:クラス図を用いた分析
UMLのクラス図(Class Diagram)による分析と設計を解説する。汎化と特化の関係、集約と分解の関係など、ソフトウェアの構造、特に静的な構造の側面から分析したり設計したりするときの勘所を学ぶ。これらの構造はオブジェクト指向にとって極めて大切である。
[第10回]
テーマ:ソフトウェアの事態
テーマ:状態遷移図を用いた分析
UMLの状態遷移図(State Transition Diagram)による分析と設計を解説する。システムに関する事象と状態に着目して段階的な詳細化を行うときの勘所を学ぶ。オブジェクト間のメッセージのやり取りを時系列で表すシーケンス図についても説明する。
[第11回]
テーマ:ソフトウェアの機能
テーマ:データフロー図を用いた分析
UMLのユースケース図(Use Case Diagram)などによる分析と設計を解説する。システムから見て、システムがそのように機能するのかを表すユースケース図の勘所を学ぶ。同時にデータの入出力に着目して機能を割り出す際に用いるデータフロー図についても説明する。
[第12回]
テーマ:モデリング図法の出現
テーマ:オブジェクト指向分析設計
テーマ:デザインパターン
ソフトウェアの構造・事態・機能の授業で登場した各種ダイアグラムを、UML誕生の歴史と絡めて解説する。そして、それらすべてをオブジェクト指向分析設計というソフトウェア開発手法としてまとめる。また、言語学や建築学からの提言してのデザインパターンを、言語学者フェルディナン・ド・ソシュール、建築家クリストファー・アレクザンダー、という二人からの発生という視点で解題する。
[第13回]
テーマ:テスティング(V&V:Verification and Validation)
テーマ:プロファイル(メトリクスへの足掛かり)
まず、ソフトウェアシステムのテストの概要を説明し、テスト技法と評価、信頼度成長曲線などを解題してゆく。さらに、システムの性能を測るプロファイラの存在を示し、メモリ消費の面、メッセージ送受信の面、これら二面のプロファイルの見方を解説する。
[第14回]
テーマ:メトリクス
テーマ:ソフトウェアの発生
品質を測定するための物差しや尺度としてのメトリクスに焦点を当てる。計測できなければ評価できないゆえに、オブジェクト指向らしい作りになっているかを計測し評価する手法を紹介する。また、メトリクスを時を流して行うことにより、ソフトウェアの開発過程や進化過程を見えるようになることへ誘う。
[第15回]
テーマ:メタモデリング
テーマ:閉講にあたって
オブジェクト指向をオブジェクト指向で分析する。これを行うことによって、メタ開発過程の視点を得る。ちょうど、様々なソフトウェアシステムを開発する際の俯瞰や鳥瞰が手中に納まる。最後に、このセメスタを振り返って、学んできたことをまとめる。
準備学習等(事前・事後学習)/Preparation and assignments
授業内容が実際のソフトウェアの開発・運用・保守の現場(ソフトウェアの企業)を想定している。そのため、学問的なことばかりではなく、人・物・金の絡みなども範疇に入り、たいへん多くのことに気を配らなければならない。事前に関係するところを調べて授業に臨み、その後、講義で学んだ知識を整理し、さらに理解を深めるために宿題レポートを真剣に行い、理解(りげ)から行解(ぎょうげ)に変えてほしい。また、数々の宿題には複数の配付資料が関連する。したがって、配付資料の整頓も大切である。予習と復習を合わせて4時間ほどの学修をしなければ、授業に追随することが難しくなる。
[第01回]
テーマ:開講にあたって(授業目的・授業内容・評価方法・教材など)
テーマ:14本の柱(コンピュータ科学のための教科課程)
[事前学習]必ずシラバスを読んで初回の授業に臨むこと。配付資料を教員ページ(リポジトリ)またはmoodleページからダウンロード(チェックアウト)し、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第02回]
テーマ:ひとりじゃないって(分割コンパイルとバージョン管理)
テーマ:情報処理技術者(IT人材の卵として:コンピュータ理工学部の出身者として)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第03回]
テーマ:プロジェクトマネジメント
テーマ:学期を通して行うソフトウェア開発
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第04回]
テーマ:コードリーディング(プログラムを読む:どれくらいJavaプログラムを読めるのか)
テーマ:プログラムを読む力(読解力)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第05回]
テーマ:スクリプト
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第06回〜第07回]
テーマ:オブジェクト指向
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第08回]
テーマ:構造化と抽象化
テーマ:様々なアプリケーション
テーマ:データの安全性
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第09回]
テーマ:ソフトウェアの構造
テーマ:クラス図を用いた分析
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第10回]
テーマ:ソフトウェアの事態
テーマ:状態遷移図を用いた分析
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第11回]
テーマ:ソフトウェアの機能
テーマ:データフロー図を用いた分析
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第12回]
テーマ:モデリング図法の出現
テーマ:オブジェクト指向分析設計
テーマ:デザインパターン
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第13回]
テーマ:テスティング(V&V:Verification and Validation)
テーマ:プロファイル(メトリクスへの足掛かり)
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第14回]
テーマ:メトリクス
テーマ:ソフトウェアの発生
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
[第15回]
テーマ:メタモデリング
テーマ:閉講にあたって
[事前学習]配付資料を教員ページまたはmoodleページからダウンロードし、それを良く読み、事前に関係するところを調べて、疑問点を明らかにして授業に臨むこと。前回の内容を問う授業冒頭の短時間の小テストに備えること。約1時間ほどの学修(予習)を必要とする。
[事後学習]授業で学んだ知識内容と配布資料にメモした事柄を整理し、ノートに書き写して復習すること。さらに理解を深めるため、授業中に指示される宿題レポートに果敢に取り組み、〆切までにmoodleを介して提出すること。およそ3時間ほどの学修(復習)を必要とする。
授業の到達目標/Expected outcome
産業界で行われているソフトウェアの開発がプログラミングの工程だけで成立していないこと、その前後に分析・設計・テスト・運用・保守などの工程が存在し、プログラミングの工程よりも長く、さらに重要であることを知って、それらに対処できる知識と技能の獲得を到達目標とする。動くプログラム(ソフトウェア)と正しいプログラム(ソフトウェア)の相異を知ることも重要である。
少なくとも、オブジェクト指向分析設計法を科学と工学の両面から会得し、UML(Unified Modeling Language)やデザインパターンを実際に駆使できるところをめざす。特別研究(卒業研究)やプロジェクト演習などで、ソフトウェア(プログラム)を実際に作成しなければならないときに役立つであろう。
すなわち、学位授与の方針(ディプロマ・ポリシー)の一環である「当該専門科目を充分に理解し、プログラム作成などの技術力を身につけて、情報化社会に寄与できる応用力を養うこと」が到達目標である。
身に付く力/Special abilities to be attained
論理的思考力(課題発見力、計画力、論理的分析力、総合的判断力)、実践力(働きかけ力、実行力、主体性)、そして、実社会の開発現場で役立つコンピュータ理工学「ソフトウェアの科学と工学の双方」の知識と技術を身につけることができる。
履修上の注意/Special notes, cautions
システムエンジニア(SE)などの情報系の職種を希望している者の履修を強く勧める。2年次の秋学期の「ソフトウェア工学I」を引き継ぐ授業であるが、その取得(未取得)に関わらず、良いソフトウェアをめざしたい、効率的にコストをかけずに高品質のソフトウェアを開発したい・運用したい・保守したいと望む者の履修を勧める。
毎回、各自のコンピュータを持参し、必ずネットワークに接続して、授業が始まる前までに稼働状態にしておくこと。講義中に援用するプログラムはネットワークを介して取得する。リポジトリ(SCM: Software Configuration Management、たとえばSubversionやGitなどのソフトウェア構成管理)もアクセスするので、その作法(マナー)に慣れること。
評価方法/Evaluation
毎回の授業の初めに課す小テストを30%、毎回の授業の終わりに課す宿題レポートを40%、長期的な課題を30%、合計100%として、それらの出来具合を総合的に評価する。法令に「1単位45時間(2単位90時間)の学修」が宣われている。授業の終わりに課される宿題レポートは、当該時間(1回すなわち1限分の授業を受けたら約4時間の学修)を確保するものであるから、その時間に見合うレポート内容(質と量:A4版で数ページ以上)を必要とする。また、授業の初めに課される短時間の小テストは、当該学修時間の成果を見極めるために実施し、授業への取り組みや姿勢を(出欠および遅刻などを含めて)つまびらかにするものでもある。小テストの実施と宿題レポート(長期的な課題を含む)の提出およびフィードバックは、都度moodleを介して行うので、必ず目を通して振り返りをすること。
教 材/Text and materials
教科書:配付資料
参考書:玉井哲雄『ソフトウェア工学の基礎』(岩波書店,2004)
参考書:青木淳,浅岡浩子,澤本依里『Smalltalkで学ぶオブジェクト指向プログラミングの本質』(日経BP社,2008)
参照URL:http://www.cc.kyoto-su.ac.jp/~atsushi/
その他/Others
研究室:第2実験室棟3階65実験室
オフィスアワー:木曜日3限(13:15-14:45)
連絡先:配付資料の表紙に記載されているメールアドレス
授業に関する質問やホウレンソウ(報告・連絡・相談)がある場合には、オフィスアワーの時間に研究室へ訪問するか、メールで問い合わせること。メールアドレスは配付資料の表紙に記載されている。
Copyright (C) 2018 Kyoto Sangyo University. All rights reserved.