連載次世代開発基盤技術“Software Factories”詳解第1回 ソフトウェア工業化を目指してマイクロソフト株式会社 萩原 正義2005/03/16 |
|
Page1
Page2
|
◆Software Factoriesの理念
Software Factories(ソフトウェア・ファクトリ)は複数のソフトウェア工学の研究成果や実践経験から構成される開発基盤技術である。今後、本連載ではSoftware Factoriesを構成する要素技術や手法を順次解説していく予定である。以下はその概略である。
●アーキテクチャ構築のための開発プロセス
Software Factoriesは、アーキテクチャ構築を強制するための開発プロセスであるプロダクトライン・アーキテクチャを採用し、従来のユースケース駆動でアーキテクチャを開発フェイズの初期で開発していくUPの開発プロセスとの差別化を与える。短期のプロジェクト開発プロセスと長期のアーキテクチャ開発プロセスを分けることで両者の要件の違いに厳格に対応し、アーキテクチャ構築の強制力を与えてソフトウェアの品質を改善する。
また、ソフトウェア資産の管理は従来のドキュメント・ベースからIDEツールを使った開発環境による制約の提供と自動化を基準と考える。
●アーキテクチャ構築のためのドメイン工学
アーキテクチャの構築では、長期的に必要となる複数プロジェクトにまたがる機能要件と非機能要件に対して適切な分析を行い、変わらない要求と変わる要求を分離するモデリングが必要である。そのうえで変わる要求に対しては適切な柔軟性を持つ可変性(Variability)の実現技術を導入する必要がある。
企業システムや、ソフトウェア・パッケージとサービスの提供では長期的な保守が重要な問題となるが、既存のUMLによるクラス図やシーケンス図だけでは要件の変更可能性の明示的な定義や変更の影響波及範囲の可視化ができない。そのためにドメイン工学ではUMLに加えて別のモデル表現が必要となる。フィーチャ・モデル(図4)はドメイン分析では代表的なモデル表現である。
図4 フィーチャ・モデル |
アーキテクチャの提供する長期的なフィーチャ(機能要件と非機能要件)を木構造として表現する。フィーチャは段階的に詳細化され、提供が必須なフィーチャと選択的なフィーチャに分類される。また、どちらか一方が選択される相互排他的フィーチャの関係も図示する。 |
可変性の実現技術としては、設計時、コンパイル時、リンク時、実行時などのバインド(結合)のタイミング要求に応じて、継承、インターフェイスを介した委譲などの間接参照、実行時のリフレクション、Webサービス技術などを導入する。Software Factoriesは可変性の実現技術に依存しない拡張性、仕様の可視化とその管理機構を提供する。
●アーキテクチャ・パターンとパターン言語
ソフトウェア開発で繰り返し発生する問題に対して、再利用性の高い解決方法のベストプラクティスをシステム構築の知識(ドメイン)に依存したパターンとして発見し、共通性の高い概念として抽象化していく。このパターンあるいはパターンの組み合わせであるパターン言語でアーキテクチャを構築しプラットフォームに対する抽象化を進める。
例えば、画面制御のためのフレームワークとして著名なアーキテクチャ・パターンであるMVC(Model-View-Controller)はこのベストプラクティスの代表である。また、この抽象化レベルで新たなベストプラクティスを発見し再帰的に抽象化を進めていく。すなわち、既存のMVCパターンのフレームワークをベースにして新たな共通パターンの抽象化を行う、といったことがその例である。
オブジェクト指向をはじめ、抽象化による複雑さの隠ぺいと管理こそがソフトウェア発展の方向性を与える。一方で、パターンを無秩序に発見し採用することは発展の方向性には寄与しない。パターンは標準化と共有を進めることで品質の確保と生産性の改善に寄与することができる。パターンの発見だけが目的で標準化が重視されずフレームワークが乱立する現在の技術トレンドは誤りであり、冗長な開発努力は業界発展の観点では逆に経済的損失になるだろう。
●コンポーネント・ベース開発
アーキテクチャをコンポーネント・ベース開発(CBD:Component Based Development)するうえで、「アーキテクチャの構造と振る舞いを仕様化するためのコンポーネント単位の管理」と、「C#やJavaなどで書かれた実装コンポーネントの開発と利用」を分離して考える開発手法を導入する。これは「論理コンポーネントによる仕様化」と「実装コンポーネントによる実現」といってもよい。業務要件の可視化と保守可能な仕様であり業務実行単位となる「論理コンポーネント」と、テスト駆動開発でテスト実行が容易な高品質、再利用性の高い「実装コンポーネント」がソフトウェア資産として管理される。
●モデル駆動型アーキテクチャとドメイン依存言語
フレームワークのクラス構造やAPIを使った従来の開発に代えて、特定ドメインで共通性の高い概念のモデルを用意してそのモデルによるシステムの分析設計を行う。そして、そのモデルを開発環境が解釈してアーキテクチャが提供する既存の実装コンポーネントを再利用したり、あるいは新規のカスタム実装コード追加用のスケルトン・コードを生成したりするのが、ドメイン依存言語(DSL:Domain Specific Language)の役割である。DSLにより従来のAPIベースの開発は激減すると思われる。
一方、モデルによる分析設計から100%実装コードを生成する理念を持つ(つまりカスタム実装コードの追加を行わない)モデル駆動型アーキテクチャ(MDA:Model Driven Architecture)があるが、Software Factoriesはそれを目指すものではない。Software Factoriesは現実的な有効性を考慮し、アーキテクチャの共通概念の実装の再利用と可変性の実現技術の選択においてコード生成機構を適用する。
●ソフトウェア開発のビジネスモデル
Software Factoriesは、ドメイン依存アーキテクチャ開発、例えば、業種別フレームワークや特定の非機能要件のレイヤー・アーキテクチャ、とプロジェクト開発の2つの開発を開発サプライチェーンとして連鎖させる新たなビジネスモデルにより、既存の開発基盤を再構築する産業モデルを提案する。ソフトウェア工業化は技術の発展だけでは解決不可能であり、家内制手工業による前近代的な産業構造の改革が必要である。ここで、IT産業構造発展のメタファーに関して、マイクロソフト社のアーキテクトによる“Metroplis”が参考となる。
◆参考文献
Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools Jack Greenfield(著)、Keith Short(著) 【翻訳書籍】2005年11月発売(予定) New! Software Factories: パターン、モデル、フレームワーク、ツールによるアプリケーションの組み立て マイクロソフト株式会社(監訳) |
◆ OOPSLA 2004
◆ Software Product Lines
◆ Metroplis
萩原 正義
Software Architect
1993年マイクロソフト入社。北海道大学、早稲田大学非常勤講師。.NET開発、アーキテクチャの調査研究と技術啓蒙に従事。アスペクト指向、フレームワーク実装技術、開発方法論、データ中心アプローチとオブジェクト指向分析/設計との融合、モデル駆動型アーキテクチャ、サービス指向アーキテクチャなどが現在の興味対象。趣味は、IT業界の著名人との雑談とウインタースポーツ。ソフトウェア技術の発展に貢献することが夢。
INDEX | ||
次世代開発基盤技術“Software Factories”詳解 | ||
第1回 ソフトウェア工業化を目指して | ||
1.ソフトウェア開発における意思決定戦略 | ||
2.Software Factoriesの理念 | ||
「次世代開発基盤技術“Software Factories”詳解」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|