InfoQ

InfoQ

News

マイブックマーク

ブックマークするためにログイン または 会員登録 する

ブックマークされました!

ブックマークがエラーになりました。もう一度お願いします。

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

作者 Abel Avram , 翻訳者 渡辺 裕之 投稿日 2008年11月26日

セクション
プロセス/プラクティス,
設計/アーキテクチャ
トピック
方法論 ,
Architecture ,
設計
タグ
Patterns and Practices ,
Emergent Architecture

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

特集コンテンツ一覧

GAE開発の落とし穴

Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します

イベントレポート:「Coqチュートリアル#1」

去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。

Javaの未来についてのNeal Gafter氏とのディスカッション

Choosing Options

Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。

Google Dartのエッセンス:アプリケーションの構築、スナップショット、Isolate

GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式

CSPベースのモデル検査ツール「Process Analysis Toolkit」

本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。

Jenkinsによる継続的インテグレーションのススメ(4) ~CloudBeesでJenkinsをサービスとして使う~

前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。

書籍『抽象によるソフトウェア設計-Alloyではじめる形式手法-』の紹介

Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。

Windows デバイスで開発するタッチユーザーインターフェイス

スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。