オブジェクト指向開発とは何か

オブジェクト指向概論
第5講
オブジェクト指向開発とは何か
立命館大学
情報理工学部
黄 宏軒
1
5.1 なぜオブジェクト指向開発か
ソフトウェア開発に対する様々な課題
=ソフトウェア危機(Software Crisis)
n  危機をどう乗り越えていったらよいか
⇒その解の1つがオブジェクト指向開発
n 
2
ソフトウェア危機(1960年代~)
1. 
2. 
3. 
4. 
5. 
6. 
ソフトウェア規模の増大
ソフトウェアコストの増大
バックログ(開発の積み残し)の増大
ソフトウェア生産性の低下
ソフトウェア品質の低下
ソフトウェア技術者の不足
ソフトウェア工学の誕生(1968年)
3
新たなソフトウェア危機
ライフサイクルの短期化
1. 
競争の激化によりシステムの開発サイクル,
バージョンアップの間隔が短くなっている
n 
n 
例:Webサイトの立ち上げ:2~4ヶ月,携帯電話:3~6ヶ月
⇒ 一から作っていられない=再利用,部分開発
オープンシステム化
2. 
ソフトウェア実行のためのハードウェアやOS・ミドルウェア
が多様化
n 
n 
例:ハードウェア:メインフレーム,PC,携帯,OS:Unix,Windows
⇒いろいろなものを組み合わせる技術
4
新たなソフトウェア危機(続き)
インターネットの発展
3. 
インターネットでeビジネスが現実に
n 
n 
例:ネットショッピング,オークション,宿泊予約,…
⇒ いつでも,誰にでも使え,信頼できるシステムが求められ
る
大規模・分散システム化
4. 
ネットワークを使っていろいろなシステムを連携
n 
n 
例:ショッピングサイトとクレジット決済
⇒複数個のシステムを連携させて1つのサービスを構築する
5
ソフトウェア危機への対応
オブジェクト指向開発で乗り切ろう
n 
・・・大規模で複雑なものを分解,整理して考えると
1. 
コンポーネント開発
q 
コンポーネント単位で開発するので,分散システムを作りやすい
部品化
2. 
q 
部品を組み合わせていくので,短期にできる
要求変更に強い
3. 
q 
部分的な変更がしやすい
リスクの限定
4. 
q 
コンポーネント内にリスクを限定できる
6
5.2 開発プロセス
n 
開発プロセスとは,システム開発の
ライフサイクル(開発を開始してから終了する
までの手順)を示したもの
q 
n 
分析,設計,実装,テストなどの進め方
代表的な開発プロセスのモデル
ウォーターフォールモデル
q  スパイラルモデル
q  オブジェクト指向モデル
q 
7
ウォーターフォールモデル
n 
システム開発を幾つかの段階に分けて,滝
(ウォーターフォール)のように上流工程から
下流工程へと順番に開発を進めていく方法
システム要件
要求定義
の定義
基本仕様書
機能仕様の作成 外部設計
機能仕様書
プログラム構造の設計 内部設計
管理がしやすい
構成仕様書
コーディング,単体テスト コーディング
結合テスト,システムテスト
プログラム
テスト
8
ウォーターフォールモデルの問題点
システム要件
要求定義
の定義
完璧にできている
ことが前提
基本仕様書
機能仕様の作成 外部設計
機能仕様書
プログラム構造の設計 内部設計
構成仕様書
コーディング,単体テスト コーディング
やり直し
結合テスト,システムテスト
プログラム
テスト
しかし得てして
このころに
問題発覚!
9
ウォーターフォールモデルの問題点(続き)
n 
システムが要求どおりに出来ているかどうか,最後
にならないとわからない
要求定義
受入テスト
外部設計
内部設計
コーディング
システムテスト
結合テスト
単体テスト
10
ウォーターフォールモデルのリスク
リスクがなかなか
減らない
リスク
要求定義 外部設計 内部設計
実装
テスト
11
人月の神話
=
?
4人×6ヶ月=24人月
8人×3ヶ月=24人月
・ 問題が発生する
↓
・ 遅れを取り戻そうと人を投入しても
新規要員への知識移転のために
遅れは逆に増加する
12
ウォーターフォールモデルの
メリット・デメリット
n 
メリット
q 
n 
開発の進捗状況がわかり易いので,管理しやすい
デメリット
問題への気づきが遅れがち
q  結合テストの頃に発見される問題が多い
q  後になればなるほど手戻りが大きい
q  開発リスクがなかなか減らない
q 
13
スパイラルモデル
n 
システム全体を一度に作るのではなく,分析/設計
/実装/テストという工程を何回も繰り返しながらシ
ステムを成長させていく
分析
テスト
設計
実装
14
スパイラルモデルのメリット・デメリット
n 
メリット
サイクル毎に検証をすることで,リスクを早く
減少させることができる
q  前のサイクルの検証結果を反映させることで,
仕様の変更に対応しやすい
q  新しいシステムに適用しやすい
q 
n 
デメリット
q 
システムがうまく分割できない場合には
適用しにくい
15
オブジェクト指向モデル
n 
n 
n 
システムをいくつかのコンポーネントに分割し,分割
した部分の組み合わせを単位として,分析・設計・実
装・テストを繰り返して開発を進める方法
スパイラルモデルの一種
オブジェクト指向の考え方と相性が良い
16
オブジェクト指向モデル(続き)
分析
設計
分析
設計
分析
設計
テスト
実装
テスト
実装
テスト
実装
反復1回目
反復2回目
反復3回目
サービス
A
サービス サービス
A
B
サービス サービス サービス
B
C
A
ベースコンポーネント
ベースコンポーネント
ベースコンポーネント
17
オブジェクト指向モデルのリスク
反復するたびに
リスクを軽減できる
リスク
反復1回目 反復2回目
反復3回目
反復4回目
18
オブジェクト指向モデルの
メリット・デメリット
n 
メリット
q 
q 
q 
n 
サイクル毎に検証をすることで,リスクを
早く減少させることができる
前のサイクルの検証結果を反映させることで,
仕様の変更に対応しやすい
出来上がった機能からリリースできるので,短期でサービス
を稼動しやすい
デメリット
q 
q 
プロジェクト管理が難しい
品質管理や構成管理(バージョン管理)が難しく,
コストが増加しがち
19
5.3 開発手法
n 
開発手法とは
q 
開発プロセスを具体化し,開発の進め方を定義し
たもの
n 
n 
n 
作業工程の順序・関係
各作業工程の内容,手順と入出力成果物
利用する成果物(モデル,文書)の構造,記述法
20
オブジェクト指向開発手法のいろいろ
Booch
OMT
OOSE
Coad/
Yourdan
Martin/
Odell
・・・
Coad
Martin/
Odell
・・・
Booch,OMT,
OOSEは
UPに統合された
Unified Process
UML
ノーテーション
(記述法)は
UMLに統合された
21
Unified Process(UP)とは
n 
n 
n 
n 
n 
さまざまなオブジェクト指向型開発手法を統合して作成された
ため,「統一プロセス」と呼ばれている
作者はGrady Booch(Booch法),Jim Rambaugh(OMT),
Ivar Jacobson(OOSE).この三人はスリーアミーゴス(three
amigos)と呼ばれる
記述法としてUMLを用いる
オブジェクト指向型開発手法として,標準になりつつある
より具体的に定義したものとして,IBMのRUP(Rational UP)
がある.
22
UPの特徴
n 
管理されたインクリメンタルな反復型開発
q 
n 
ユースケース駆動
q 
n 
ユースケース(ユーザの要求仕様をシステムの利用法と
いう形で記述したもの)を出発点にして開発
アーキテクチャセントリック
q 
n 
要求,成果物,人,リスクなどを管理しながら,マイルス
トーンを設定した計画のもとで反復開発を実施する
アーキテクチャ(システムのベースとなる骨組み)を中心に
開発を進める
カスタマイズ可能
q 
システムによって柔軟にカスタマイズして使える
23
インクリメンタルな反復型開発
イテレーション
要求
分析
設計
実装
テスト
フェーズ
方向づけ
バージョン1
推敲
作成
バージョン2
移行
バージョン3
24
反復型開発のフェーズ
n 
インセプション(方向づけ)フェーズ
q 
n 
エラボレーション(推敲)フェーズ
q 
n 
システム構築のための核となるアーキテクチャベースライ
ンを作る.骨組みと黄金ルート(必ず通る基本のルート)を
作る.
コンストラクション(作成)フェーズ
q 
n 
アイデアのプロトタイプの開発と評価.開発を進めるべき
か,止めるべきかを判断する.
システムとして仕上げる.β版のリリースが目標.
トランジション(移行)フェーズ
q 
β版のリリースとフィールドでの評価結果の反映.
25
ユースケース駆動
要求
分析
設計
実装
テスト
ユースケース
モデル
分析モデル
設計モデル
デプロイメント
モデル
実装モデル
仕様書
設計書
テストモデル
配備図
プログラム
テスト仕様書
26
ユースケースの視点
開発者の視点
ユースケース1
モジュールA1とD1
の開発優先度
が高い
モジュールA1
モジュールD1
ー
ユースケース2 モジュールA2
モジュールB1
視
点
ユースケース3
モジュールA3
モジュールB2
モジュールC1
ユースケース4
モジュールA4
モジュールB3
モジュールC2
モジュールD2
モジュールD3
モジュールB4
27
アーキテクチャセントリック
n 
システムのベースとなる骨組み(アーキテクチャ)を
優先して開発する
クライアント
Webサーバ
DB
サーバ
基本
DB
アーキテクチャベースラインを確立
28
アーキテクチャセントリックの考え方
開発者の視点
ユースケース1
モジュールA1
モジュールD1
ー
ユースケース2 モジュールA2
モジュールB1
視
点
ユースケース3
モジュールA3
モジュールB2
モジュールC1
ユースケース4
モジュールA4
モジュールB3
モジュールC2
モジュールD2
モジュールD3
モジュールB4
モジュールA3~D3を
優先して開発
29
アジャイルプロセス(Agile Process)
n 
重厚長大な開発手法(UP)に対するアンチテーゼ
q 
n 
Agile Manifesto
q 
q 
n 
小さいシステムはもっと簡単に作ってもいいだろう
2001年2月 Kent Beckを始めとする軽量プロセスの
提唱者による宣言
http://www.agilemanifesto.org
状況に対して柔軟にかつ迅速に対応する
q 
スキルのある開発者が10名以下で作れる開発規模
30
アジャイルプロセスの特徴
n 
プロセスやツールよりも
q 
n 
大量の詳細なドキュメントやモデルよりも
q 
n 
検証可能な動くソフトウェアに基づくことが大事
契約上の駆け引きよりも
q 
n 
開発者個人の能力や相互コミュニケーションが大事
顧客とのコラボレーションが大事
計画を硬直的に守ることよりも
q 
変化に柔軟に対応することが大事
31
いろいろなAgile Process
n 
n 
n 
n 
n 
n 
XP: eXtreme Programming
SCRUM
ASD: Adaptive Software Development
FDD: Feature Driven Development
DSDM: Dynamic Systems Development Method
LD: Lean Development
32
XP (eXtreme Programming)
n 
n 
Agile Processの草分け
オブジェクト指向によるインクリメンタルな反復型開発
(UPと同じ)
q 
q 
q 
n 
ただし軽量かつ柔軟で俊敏(Agile)を旨とする
短期間(1~2週間単位)でのイテレーション
形式的な完璧さよりも動くことを重視
少数のメンバによる小規模開発
33
XPの追求する4つの価値
n 
コミュニケーション(Communication)
q 
q 
q 
n 
開発メンバ,顧客と常に対面による的確な情報伝達を
心掛ける
毎朝ミーティング,常に議論,すぐ顧客に確認
(オンサイトカスタマ)
ペアプログラミング(デザイン・コーディングとレビュー・テス
トの同時進行)
単純さ(Simplicity)
q 
q 
必要以上に設計に凝らない.いつでも壊せるつもりでいる.
大掛かりな事前設計の排除(シンプルな設計,リファクタリ
ング)
34
XPの追求する4つの価値(続き)
n 
フィードバック(Feedback)
q 
q 
n 
推測はやめてプログラムに聞け!(こまめにリリース)
テストファースト(まずテストプログラムを書き,成功するよ
うに実装)
勇気(Courage)
q 
q 
要求や仕様,設計の変更を恐れるな!
小さな絶え間なき改善=こまめにリリース,リファクタリン
グ重視
35
XPの12のプラクティス
n 
n 
n 
n 
n 
n 
n 
n 
n 
n 
計画ゲーム→Planninng Game
ペアプログラミング→Pair Programming
こまめにリリース→Small Releases
コードの共同所有→Collective Ownership
メタファ→Metaphor
継続的インテグレーション→Continuous Integration
シンプルな設計→Simple Design
週40時間労働→40-Hour Week
テスティング→Testing
オンサイト顧客→On-site Customer
36
XPの12のプラクティス(続き)
n 
n 
n 
n 
リファクタリング→Refactoring
コーディング規約→Coding Standard
オープンな開発スペース→Open Workspace
日ごとのスキーマ進化→Daily Schema Migration
37
XPのメリットデメリット
n 
メリット
短期間の開発が可能
q  顧客とともに仕様を検証していくことで,顧客の要
求にあったシステムが作りやすい
q 
n 
デメリット
大規模開発には使えない
q  開発メンバのスキル(能力)がある程度そろってい
ないと難しい
q  管理がしにくい
q 
38
第5回のまとめ
n 
n 
n 
n 
n 
新たなソフトウェア危機に対して,オブジェクト指向は解決の
ベースとなりうる
「開発プロセス」とは,システム開発のライフサイクル(開発を
開始してから終了するまでの手順)を示したもの
ウォータフォールモデルは分析/設計/実装/テストを段階
的に行う.管理しやすいが,リスクが後工程まで残りがち
スパイラルモデルは,4つの工程を繰り返しながら開発する.
リスクを早く減らせる
オブジェクト指向モデルは,スパイラルモデルの一種で,コン
ポーネント単位に段階的に開発する
39
第5回のまとめ(続き)
n 
n 
n 
n 
代表的なオブジェクト指向開発手法=Unified Process.管
理された反復型開発,ユースケース駆動,アーキテクチャセ
ントリック,カスタマイズ可能という特徴を持つ
オブジェクト指向開発手法では,記述法としてUML(Unified
Modeling Language)を使う
UPのような重厚長大な開発手法のアンチテーゼがAgile
Process
Agile Processの代表であるXPでは,少人数で短期間の反
復開発を行う.4つの価値(コミュニケーション,単純さ,
フィードバック,勇気)を追求する
40