ZACKY's Laboratory 強み x 教育 研究室 Page Topへ

ソフトウェア設計・同演習

この授業ではオブジェクト指向ソフトウェア開発の基礎をモデリング/プログラミング両面から学習します。旧科目のソフトウェア設計論/オブジェクト指向プログラミング演習から長年取り組んできた授業実践の研究成果を投入しています。

ソフトウェア開発スキルは個人差がとても大きく,従来の一斉講義・演習形式では学習進度を学生一人ひとりに適切に合わせることが不可能でした。そこで,学生が自分のペースで授業を進められるようにすべく,2015年度から個別化教授システム(PSI: personalized system of instruction)を採用して全面的にリニューアルしました。これにより完全習得学習(mastery learning)の理想状態にすることを目指しています。

もう1つの特徴は,研究室に所属する先輩学生であるティーチング・アシスタントが個別にモデルやプログラムをレビュー指導することです。モデリングやプログラミングの能力を向上させる最も効果的な方法はレビューだと私は考えています。そこで,研究室のプログラマ志望の学生をプロフェッショナルのエンジニアの協力を得ながら徹底的に鍛え,その学生をティーチング・アシスタントとして採用しきめ細やかなレビュー指導をするようにしました。また毎回の授業の終了後にふりかえりを行い,指導レベルの向上と均質化を図っています。これにより,実践的な個別指導を行き渡らせることを目指しています。

さらに,モデリングの学習のために kintone ベースの個別学習管理システム株式会社 AISIC と共同開発しました。これにより前述の個別化教授システムとレビュー指導を効果的・効率的に実現することを目指しています。ITシステムの新規開発には長い期間と巨額の費用がかかるものですが,kintone の採用により,驚くほどの短期間でかつ安価に開発できます。

関連記事

この授業のねらい

みなさんが「アプリ」という言葉を耳にした時に,たとえば Office,ウェブブラウザなどを連想するかもしれません。携帯のiアプリや,iPhone や Android などのスマートフォンで動作するアプリをイメージした人もいるかもしれません。このようなアプリを GUI アプリケーションと言います。この授業では,GUI アプリケーションのようなソフトウェアの実践的な開発方法(オブジェクト指向開発)を学びます。

とくに次のような人は全力でこの授業の修得に励んでください。

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

単なる座学ではなく,身の回りの製品やサービスをUMLで記述するような演習課題をたくさん行ったり,実際にソフトウェアを開発してコードレビューなどの個別指導を受けたりします。学生が行う作業量は多いですが,その分,実践的なソフトウェア開発の能力を身につけることができます。教え方をいろいろ工夫していますので,確実に,しかも楽しく学べるでしょう。

各回の授業の前半について

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

UML によるソフトウェアモデルの実例を示しましょう。たとえば次の図は簡単な e-learning による試験を実施する IT システムの UML モデルを表しています。表記方法の詳細は分からないと思いますが,このシステム全体がどのようなものなのかが何となくつかめるのではないでしょうか。

UMLの例〜e-learningテストシステム

この授業の到達目標に定められた合格基準をクリアすると,上図と同程度のUMLモデルを参考資料なしにスラスラと読んだり書いたりできるようになります。今までこの授業を履修して最後までがんばった学生のほとんどが,この合格基準をクリアできました。きっとみなさんも最後までがんばればできるようになるでしょう!

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

各回の授業の後半について

各回の授業の後半では,GUIアプリケーションを開発することを通して,オブジェクト指向開発を体験します。オブジェクト指向開発の中のプログラミングということで,とくにオブジェクト指向プログラミング (Object-Oriented Programming: OOP)と言います。

OOPとはどのようなものなのか,全容を理解することはなかなか難しいのですが,「GUIアプリケーションを作るためには,OOPを習得することが必須だ!」といえば,みなさんは少なくともOOPの必要性について充分理解できるでしょう。実際,みなさんがこの演習をすべて終えると,簡単なGUIアプリケーションが作れるようになれます。もちろんOOPなしでもGUIアプリケーションを作れないことはないですが,けっこう大変です。

オブジェクト指向プログラミングを学び,簡単なGUIアプリケーションが作れるようになろう!

OOPとGUI

OOP と GUI (Graphical User Interface) は歴史的に密接な関係にあります。

GUIでは,ウィンドウやアイコン,ボタンなどの ウィジェット(Widget) を,マウスやタッチパネルなどで直観的に操作します。1つ1つのウィジェットが,あたかも独立した部品のように振る舞います。

そこで,独立した部品同士がメッセージをやりとりする様子をそのままプログラミングできるようにすれば GUI アプリケーションをスマートにプログラミングできるのではないかと考えた人が現れました。そのような要求に適合したのが OOP です。 OOP (Object-Oriented Programming) はオブジェクト(object)を単位としてプログラムを構成し,オブジェクト同士でメッセージを送受信し合うことで計算を行おうというパラダイム (paradigm: 考え方,ものの見方)です。 GUIでいうウィジェットをOOPでいうオブジェクトに当てはめて考えれば,OOPはGUIを実現するために理想的な考え方であることがわかってもらえると思います。

後に「パソコンの父」と呼ばれるアラン・ケイ (Alan Kay) が1973年に開発した Alto は,Smalltalk というオブジェクト指向プログラミング言語で開発されました。Altoは世界で最初の,マウスで操作するGUIを備えたコンピューター試作機でした。それを見て強烈な影響を受けたスティーブ・ジョブズ(Steve Jobs)が Macintosh を開発し,またビル・ゲイツ(Bill Gates)が Windows を開発することになります。Smalltalkはこれらには直接的に引き継がれませんでしたが,GUIを実現するためのオブジェクト指向プログラミング言語の開発が進み,C++, Objective-C, Java,C#などが誕生します。現在用いられるGUIはほぼすべて,OOPを前提として設計されています。

到達目標と成績評価

この授業の到達目標は全部で8つあります。成績評価は各到達目標に適した方法で行います。

  1. UML読解: 与えられた1〜5機能程度の簡単な製品やサービスについて書かれたUMLモデルを読み取って,自然言語で説明できる。
  2. UML記述: 与えられた1〜5機能程度の簡単な製品やサービスについて自然言語で書かれた記述を元に UML モデルを記述できる。​​​​​​​​
  3. UML図の不備の指摘: 与えられた1〜5機能程度の簡単な製品やサービスについて書かれたUMLモデルの誤りや曖昧な点,不明な点を指摘できる。​​​​​​​​​​
  4. アプリ開発: 簡単なGUIアプリケーションをオブジェクト指向,Model-View-Controller に基づいて開発できる。​​​

到達目標 1 UML読解

与えられた1〜5機能程度の簡単な製品やサービスについて書かれたUMLモデルを読み取って,自然言語で説明できる。

到達目標1,2,3は各回の授業の前半に関連する到達目標です。このうち到達目標1はUML図を読むことができるかを問います。

この到達目標の最低要件は次の通りです。これらを全て満たせなければ合格できません。

  • よく使う7種類のUML図それぞれについて,与えられたUML図を自然言語で説明できる

さらに次の発展的要件ができれば,より深く理解していると判断します。

  • 与えられた1〜5機能程度の簡単な製品やサービスについて書かれたUMLモデルを読み取って,自然言語で説明できる

最低要件と発展的要件を満たしているか評価するために試験を実施します。参考資料を参照しないでできることが求められます。

到達目標 2 UML記述

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

到達目標2はUML図を書くことができるかを問います。

この到達目標の最低要件は次の通りです。これらを全て満たせなければ合格できません。

  • よく使う7種類のUML図それぞれについて,与えられた自然言語の記述を元にUML図を記述できる

さらに次の発展的要件ができれば,より深く理解していると判断します。

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

最低要件と発展的要件を満たしているか評価するために試験を実施します。参考資料を参照しないでできることが求められます。

到達目標 3 UML図の不備の指摘

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

一度記述したUMLモデルには,もしかしたら問題点を含んでいるかもしれません。実際のソフトウェア開発では,1人が記述した成果物を必ず誰か他の人がレビューする(見直す)ことを行います。そうすることで,開発するソフトウェアをきちんと機能を果たす品質の高いものに改善していきます。

この到達目標は知識を総動員してUMLモデルをレビューすることを求めています。この到達目標の最低要件は次の通りです。これらを全て満たせなければ合格できません。

  • 与えられた誤りを含むUML図の問題点を指摘できる

さらに次の発展的要件ができれば,より深く理解していると判断します。

  • 与えられた1〜5機能程度の簡単な製品やサービスについて書かれたUMLモデルの問題点を指摘できる
  • 指摘した問題点を修正するUMLモデルを提案できる

最低要件と発展的要件を満たしているか評価するために試験を実施します。参考資料を参照しないでできることが求められます。

到達目標 4 アプリ開発

簡単なGUIアプリケーションをオブジェクト指向,Model-View-Controller に基づいて開発できる。

UMLモデルを書くだけではソフトウェア開発は完結しません。UMLモデルを元にプログラミングする必要があります。到達目標4ではオブジェクト指向に基づいてGUIアプリケーションを開発できることを求めています。到達目標4は各回の授業の後半に関連する到達目標です。

この到達目標の最低要件は次の通りです。これらをすべて満たせなければ合格できません。

  • 指定された要求仕様を満たす電卓を開発できる

さらに次の発展的要件ができれば,より深く理解していると判断します。

  • 自由課題として電卓と機能数・工数が同程度以上のアプリケーションを開発できる

最低要件と発展的要件を満たしているか評価するためにプログラミングの演習課題を課します。本授業のテキスト,ウェブ上の資料を参照して構いません。また,Model-View-Controller アーキテクチャに沿って設計・実装されることと,教員・TAによるコードレビューをパスしていることを合格要件とします。

教科書と参考書

教科書

授業中に必要な資料を配布します。詳しくは第1回オリエンテーションでアナウンスします。

参考書 (図書館蔵書には◯)

◯牛尾 剛「オブジェクト脳のつくり方」翔泳社 ISBN: 978-4798104188

オブジェクト脳のつくり方

◯平沢 章「オブジェクト指向でなぜつくるのか」(第2版) 日経BP社 ISBN: 978-4822284657

オブジェクト指向でなぜつくるのか

◯E.ガンマ他 「デザインパターン」ソフトバンククリエイティブ,ISBN: 978-4797311129

デザインパターン

◯M.ファウラー 「リファクタリング」オーム社 ISBN: 978-4274050190 (新装版): 図書館蔵書は旧版

授業計画・内容

本科目は2部構成です。各回の授業の前半で第I部を後半で第II部を扱います。授​業​改​善​の​た​め​変​更​す​る​可​能​性​が​あ​り​ま​す​。​オリエンテーションで​の​ア​ナ​ウ​ン​ス​に​注​意​し​て​く​だ​さ​い​。​な​お​,​下​記​の​箇​条​書​き​の​番​号​は​必​ず​し​も​授​業​の​回​と​対​応​し​て​い​ま​せ​ん​。​実​際​に​は​学​生​の​進​捗​に​合​わ​せ​て​調​整​し​て​い​ま​す​。

1.​ ​第I部オリエンテーション,​概論

  1. クラス図: 記法,記法の組み合わせ
  2. ユースケース図: 記法,記法の組み合わせ
  3. コミュニケーション図とシーケンス図,アクティビティ図
  4. パッケージ図
  5. 図の組み合わせ​​​​​​​​​​​​​​​​​​​
  6. 第I部ふりかえり
  7. 第II部オリエンテーション ​9. GUIアプリケーション開発概論 ​10.​ ​U​M​L​モ​デ​ル​と​プ​ロ​グ​ラ​ミ​ン​グ​ 11.​ ​電​卓​の​開​発​(​ビ​ュ​ー​)​ ​12. ​電​卓​の​開​発​(​コ​ン​ト​ロ​ー​ラ​ー​)​ ​13. ​電​卓​の​開​発​(​状​態​機​械​モ​デ​リ​ン​グ​)​ ​14. ​電​卓​の​開​発​(​総​合​演​習​)​ ​15. ​電​卓​の​開​発​(​コ​ー​ド​レ​ビ​ュ​ー​)​,全体ふりかえり

成績評価の方法

オリエンテーション​で​詳細を説明します。

  • 到達目標1: 試験(Examination): 10%
  • 到達目標2: 試験(Examination): 20%
  • 到達目標3: 試験(Examination): 10%
  • 到達目標4: 演習課題(Exercise): 40%
  • 積極的な授業への参加 (Class Participation): 20%

履修上の注意

  • 身の回りにある製品やサービスを題材にモデリングを行うことが,前半のモデリングの中心的活動です。そのため,家電製品やウェブサービスなどに親しんでいると,この授業の役に立ちます。
  • 何らかの設計図を見た経験があると理解の助けになるでしょう。
  • C言語の文法を一通り理解していること,C言語で演習レベルの簡単な問題をプログラミングした経験があることが前提です。
具体的には次の項目を復習するといいでしょう。
    • 計算機演習I : 表示,キー入力,変数,条件分岐,配列,繰り返し,関数
    • 計算機演習II: ポインタ,構造体
    • アルゴリズム入門/データ構造とアルゴリズム・同演習: 配列,リンクリスト,2分木,スタック,キュー

担当者からのメッセージ

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

キーワード

ソフトウェア・モデリング,UML,ソフトウェア工学,ソフトウェア開発,オブジェクト指向開発,リファクタリング,コードレビュー