InfoQ

News

アプリケーション・アーキテクチャにおけるアジャイルの実践

作者 Abel Avram , 翻訳者 渡辺 裕之 投稿日 2008年11月26日 午前12時38分

コミュニティ
Architecture
トピック
設計,
方法論
タグ
Emergent Architecture,
Patterns and Practices

Microsoft社はパターンや実践方法を元にしたHow-To Design Using Agile Architecture(リンク)(アジャイルなアーキテクチャを使った設計方法)というガイドを発表した。これにはアジャイルにアプリケーションを構築する際に従うべき詳細なガイドラインが示されている。
 

ガイドでは以下の入力情報を元に作業を開始することを推奨している。

  • ユース・ケースとユーザ・シナリオ
  • 機能要求
  • 非機能要求(パフォーマンス、セキュリティ、信頼性といった品質特性)
  • 技術的要求
  • ターゲットとなる運用環境
  • 制約条件

そして、以下を成果物とする。

  • アーキテクチャ上重要なユース・ケース
  • アーキテクチャ上困難な部分
  • アーキテクチャ候補
  • アーキテクチャの要の部分

このガイドではアーキテクチャを一つのステップで構築するのではなく、反復的な五つのステップで構築するという方法でアジャイルさを導入することを推奨している。

  • ステップ1.アーキテクチャの目標を明確にする。 目標を明確にすることでアーキテクチャがはっきりしてきて、設計における本当の問題を解決することに集中できるようになる。良い目標は、(このフェーズの)完了と次のフェーズへの移行の判断を助けます。
  • ステップ2.重要なシナリオ。 重要なシナリオを使って設計が主にどのような問題に注力すればいいのかを判断し、候補となるアーキテクチャが決まった際にはその評価をする。
  • ステップ3.アプリケーションを概観する。 どのような種類のアプリケーションなのか、運用環境のアーキテクチャがどうなっているのか、アーキテクチャのスタイル、そしてアプリケーションが扱う実世界と設計とをつなぐための技術要素について理解すること。
  • ステップ4.重要かつ困難な部分。 品質特性とアーキテクチャのフレームから重要かつ困難な部分を見極める。それはアプリケーションの設計において最もミスを犯しやすい領域である。
  • ステップ5.解決策の候補。 アーキテクチャの候補かアーキテクチャ上の要の部分を作成し、重要なシナリオと重要かつ困難な部分、そして運用上の制約を使ってそれを評価する。
archsteps

ステップ1.アーキテクチャの目標を明確にする

Microsoft社でPrincipal Program Manager on patterns & practices(パターンと実践に関する主幹プログラム・マネージャ)を務めるJ.D. Meier氏によると、このステップでは“全体の労力を知ることと同様に、これ以降のステップでどれだけの時間とエネルギーを費やせばいいのかを明確にすること”が目標であるとのことである(リンク)。ステップ1.の成果物は以下のようになる。

  • プロトタイプの作成
  • 重要な技術的リスクを明確化する
  • 仮の方針をテストしてみる
  • モデルと知識を共有する

ステップ2.重要なシナリオ

同じくJ.D. Meier氏によると最良のシナリオは以下の判断基準から導かれるユースケースである。

  1. (プロジェクトの)成功と完成したアプリケーションの受け入れに欠かせない。
  2. アーキテクチャを評価するのに十分なくらいに設計の訓練となること。
     

ステップ3.アプリケーションを概観する

実世界の詳細と具象性を設計に取り込むためにはアプリケーションを概観することが必要不可欠である。そして、それは以下のような手順で成し遂げられる。
 

  • アプリケーションの種類を明らかにする。 まず、どのようなアプリケーションを構築しようとしているのかを明らかにする。モバイル・アプリケーションなのか、リッチ・クライアントなのか、リッチ・インターネット・アプリケーションなのか、Webアプリケーションなのか、あるいはそれらの組み合わせなのか?
  • 運用上の制約を理解する。 次に、ターゲットとなる運用環境について理解しそれがアーキテクチャに与える影響について確認する。
  • 重要なアーキテクチャのスタイルを見分ける。 設計上どのようなアーキテクチャのスタイルを採用するつもりなのか明らかにする。。サービス指向アーキテクチャで構築するのか、クライアント/サーバ型か、レイヤ化するのか、メッセージ・バスを使うのかあるいはそれらの組み合わせなのか?
  • 関連する技術を明らかにする。 最後に、選択したアプリケーションの種類とその他の制約に基づいて関連する技術を明確にし、アーキテクチャに影響を与えるのがどの技術要素なのかを明らかにする。
     

ガイドには上記の各段階に関するアドバイスが記載されている。例えばいくつかのアーキテクチャ・スタイルから選択をする際のオプションは以下のように示されている。

  • クライアント/サーバ。 クライアントがサーバへリクエストを送信する形式にシステムを分離する。
  • コンポーネント・ベース。アプリケーションを再利用可能で良く定義されたインタフェースを持つコンポーネントへと分解する。
  • レイヤ化。同じような機能を持つ単位でグループ化してそれぞれ別のレイヤへと分離する。
  • メッセージ・バス。 接続する全てのシステムが利用する既知の(メッセージ)形式を定義して実際の受信者ごとの違いを意識しなくてよいようにする。
  • オブジェクト指向。責務をデータと振る舞いを持つ再利用可能なオブジェクトに分割するプログラミング・スタイル。
  • サービス指向(SOA)。契約とメッセージを使って機能をサービスとして公開したり利用したりするアプリケーション。
     

ステップ4.重要かつ困難な部分

このステップでは以下のことをすべきであるとしている。"どのような部分でミスが起こりやすいのかを理解するためにアプリケーション・アーキテクチャ上の困難な部分を明確化します。重要かつ困難な部分は品質特性や横断的な関心事に関連する部分に存在することがあります。"
ガイドに示されている困難な部分の長いリストには以下のようなものが含まれている。可用性、相互運用性、保守性、信頼性、セキュリティなど。
 

ステップ5.解決策の候補

重要かつ困難な部分を明確化した後、アーキテクチャの最初のドラフト版が提供される。その後、ステップ2に戻ってアーキテクチャ候補を検証し、さらにステップ3から5と続けて新しい候補を生成する。このプロセスは反復的に繰り返され反復ごとに改良されていく。
 

 

原文はこちらです:http://www.infoq.com/news/2008/11/Agile-Architecture

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
slashdot+
Hatena

特集コンテンツ一覧

Flex 4の新機能トップ10

今週(2009年6月1日)AdobeはFlex 4の正式な初ベータ版をリリースしました。Flex 4はGumbo(オクラ)というコードネームで開発されています。今回のリリースには大きな変更が多数含まれています。このRIAフレームワークの最新バージョンにおいて変更された事柄についての概要を以下のリストで見ていきましょう。

Domain Driven Design(ドメイン駆動設計) Quickly 日本語版

ビジネス領域の深い理解を反映したドメインモデルを設計するための、ヴィジョンとアプローチです。この本は、Eric Evans氏の「Domain Driven Design」の主要点を短く読みやすく要約しました。

JavaプログラマがFlexとBlazeDSを学んだ方がいい13の理由

この記事ではJavaプログラマがなぜFlexとBlazeDSを学ぶべきなのかについて13の理由を述べています。なぜ高度にインタラクティブなWeb サイトからJavaで開発されたバックエンドをもつエンタープライズ・アプリケーションまでを含む、リッチ・インターネット・アプリケーション(RIA)の開発にFlexとBlazeDSの組み合わせが最適な選択肢となるのかについて述べています。

仮想パネル: バックログは重要な成果物とプラクティスか、それとも無駄か?

Mary Poppendieck氏、Ron Jeffries氏、Jeff Patton氏、David West氏、Steve Freeman氏、Jason Yip氏が、バックログに関する彼らの意見とアジャイルチームを成功させるために必要な事を語った。

Perf4Jを使ったパフォーマンス解析とモニタリング

この記事ではAlex Devine氏が、Java開発者がPerf4Jをどのように利用できるかと、タイミングステートメントにコードを追加し、ロギング、結果の解析とモニタリングを行うオープンソースツールセットの説明をします。

複雑な外部DSLを開発する

本稿では、Vaughn Vernon氏が内部DSLと外部DSLの違いを説明し、複雑な外部DSLを開発する際のステップを示します。

J2EEアプリケーションにおけるAOPを使ったフェッチ戦略の実装

この記事では低レベルのサービス・レイヤやリポジトリ・レイヤを肥大化させることなく、フェッチング・ストラテジによってモジュール化された方法でバックエンドにあるシステムからデータを取得する処理を最適化する方法について説明します。

実証済みのアイデアの融合: S#arp Architectureの裏側

この記事では、Web開発における多数の成熟傾向と、クライアントに価値を提供することに対するそれらのメリット、およびS#arp Architecture(最善の手法と技術を活用しようとするASP.NET MVCをベースとしたフレームワーク)内でのそれらの使用について取り上げます。