2008年12月10日水曜日

オブジェクト開発の神髄


最先端のソフトウェア開発
最先端のソフトウェア開発として以下について概説している。
!最新の開発技術
以下の技術について長所と短所を評価している。
*オブジェクト指向
*XML
*RDB
*Webサービス

!最新の開発手法
*アジャイルソフトウェア開発
ウォーターフォールモデル、オブジェクト指向ソフトウェアプロセス(object-oriented software process:OOSP)、ラショナル統一プロセス(Rational unified process:RUP)の問題を経て、Agile Allianceはソフトウェアを成功させるための拠り所となる基本的な常識を形成する4つの価値と12の原則を定義。
本書では、アジャイルモデル駆動開発(agile model-driven development:AMDD)アプローチとそれをサポートするテスト駆動開発(test-driven development:TDD)について説明している。

*UML
広く普及して一貫したモデリング記法を提供しているが、UI表記などUMLの範囲を超える場合がある。

*統一プロセス(unified process:UP)
具体的なソフトウェア開発プロセスを作り出すためのプロセスフレームワーク。例としてラショナル統一プロセス(Rational unified process:RUP)がある。RUPは方向づけ、推敲、作成、移行の4つのフェーズからなる。

*モデル駆動型アーキテクチャ(model-driven architecture:MDA)
OMG(Object Management Group)が定義したソフトウェア開発フレームワークで、モデリングを中心に開発作業を進める。1→2→3に変換していく。
1.プラットフォーム独立モデル(platform-independent model:PIM)
2.プラットフォーム特化モデル(platform-specific model:PSM)
3.コード
非常に精巧で複雑なため、本書ではアジャイル駆動開発(agile model-driven development:AMDD)で、UMLと組み合わせて適用することを勧めている。

!!オブジェクト指向概念の基本

!!フルライフサイクルオブジェクト指向テスト(FLOOT)
エクストリーム・プログラミング(XP)はフィードバックループが短縮されるのでプロジェクト後期でも変更コストが大きくならない。そのひとつがテスト駆動開発(TDD)による。

""
フルライフサイクルオブジェクト指向テスト(full lifecycle object-oriented testing:FOOT)方法論とは、オブジェクト指向ソフトウェアの検証および妥当性確認を行うためのテストおよび検証手法を集めたものです。
逐次的に行う必要はなくアジャイルのプロセスに適用可。


!回帰テスト
アプリケーションに対する変更が既存の機能に悪影響を及ぼさないことを確認する作業

!品質保証(quality assurance:QA)
プロジェクトの納品物や作業が、組織で採用している適切な標準やガイドラインやプロセスに準拠していることを検査および監査する作業。

!モデルのテスト
*利用シナリオテスト シナリオをレビューしてモデルをその場で更新
*プロトタイプレビュー/ウォークスルー ユーザが一連の利用シナリオに沿ってユーザプロトタイプがニーズを満たしていることをテスト
*ユーザインターフェーステスト 
*モデルレビュー 同僚同士でモデリング作業を批判的に検査する確認手法

!コードのテスト
*ブラックボックステスト 内部の動きを知らないまま期待される機能についてテストケースを作成する
*ホワイトボックステスト プログラムコードをもとにテストコードを作成
*境界値テスト 異常な状況や極端な状況を処理できることを確認
*単体テスト ここまでが単体テスト
*結合テスト 
*カバレッジテスト コード内のすべてのコードパスをテストする一連のテストケースを設計する手法。ホワイトボックステストケースを集めたもの。
*パステスト コードすべてのカバレッジテストに加え、ロジックのすべてのパスもクリアする

オブジェクト指向のテスト手法
*メソッドテスト
*クラステスト
*クラス結合テスト(コンポーネントテスト)
*継承回帰テスト 新しいサブクラスによってエラーが持ち込まれないことを確認

コードインスペクション(コードレビュー)

!システム全体のテスト
*機能テスト
*インストールテスト
*運用テスト
*ストレステスト
*サポートテスト サポート担当者を対象

!ユーザによるテスト
*アルファテスト まだ広く配布するレベルに達していないソフトウェアを小数の顧客に渡して問題を報告してもらう
*ベータテスト
*パイロットテスト アルファテストの「社内」版
*ユーザ受け入れテスト(user-acceptance testing:UAT)

!テスト駆動開発(TDD)
テストファーストプログラミングあるいはテストファースト開発のこと。

!!アジャイルモデル駆動開発(agile model-driven development:AMDD)
コーディング前にアジャイルモデルを作成して構築対象のものを理解する発展型アプローチ。

モデリングはUMLだけでなくユーザインターフェースフロー図やデータモデル図などさまざまなモデルがある。ビジュアル化できないモデルもある。

AMDDはモデル駆動開発(MDD)のアジャイル版。MDDは逐次的な開発アプローチだが、RUPなど反復的な方法でMDDを行うこともできる。AMDDはソースコードを書く前に詳しくモデルを作りこむのではなく、かろうじて役に立つ程度のアジャイルなモデルを作成する点が異なる。設計モデルとコーディングを交互に行う。

最初の一定期間で、サイクル0の「初期モデリング」を行う。初期モデリングは、大雑把な要求とリリースの対象範囲を明らかにする「初期要求モデリング」と動く可能性の高いアーキテクチャを見つける「初期アーキテクチャモデリング」を行う。その後、サイクル1から反復的に、要求について調査し細部まで設計を進める「詳細モデリング」と「実装」を行う。

!情報収集スキル
*インタビュー
*観察
*ブレーンストーミング

!アジャイルなドキュメント
ホワイトボードの活用。加工して見やすくする。95%は消してよい。残りはモデリングツールに書き写す。



!!利用モデリング
システムをどう使うか調査するためのユースケース、ユーザストーリー、ユーザ機能という利用モデリング(usage modeling)手法

!!ユーザインターフェース開発

!!補足要求事項
補足的なモデリング手法について。

!!概念ドメインモデリング
エンティティとその関係を調査する手法

!!プロセスモデリング
利用モデリングを補足するプロセス検討の手法。

!!アジャイルなアーキテクチャ
アーキテクチャをアジャイルに作成する方法。

!!動的オブジェクトモデリング
オブジェクトの振る舞いの側面を検討するモデリング手法。

!!構造設計モデリング
ソフトウェアの構造を定義するための手法。

!!アジャイルなオブジェクトプログラミング手法
TDDやリファクタリングなどアジャイルプログラミング手法。

!TDD
4つの基本ステップ
*簡単なテストを追加
*テストを実行(コードがないから失敗する)
*テストが成功するようにコードを書く
*テストが成功する

TDDとAMDDはどちらもコーディングの前にじっくり設計を考えるが、違いはTDDはテストを行うがAMDDは図やカードなどモデルを作成すること。テキストと図の違いはチームによってどちらが効率的か変わる。筆者はモデリングと組み合わせるはTDDはより有効。

!!アジャイルデータベース開発手法
データベース開発アプローチ。

!!今後の進み方
最新のソフトウェア開発についてさらに学ぶには。
*ゼネラリスト化したスペシャリストになる
*学習を継続する

0 件のコメント:

コメントを投稿