
ソフトウェアにおける保守性と拡張性の定義
page1|page2
日立ソフトウェアエンジニアリング 野村佳弘
日本IBM 玉川憲
2005/12/16
◆ いま求められているシステム開発とは?
- - PR -
現在、企業においてビジネスを実現し成功するために、ビジネスそのものと、ネットワークとコンピュータをベースとしたITシステムは、切り離せないものになっていることは皆さんもよくお分かりのことだと思います。一方で、最近のキーワードとしてオンデマンド・ビジネスという言葉も出ているように、いかにビジネスを素早く変化させることができるかが、企業の競争力の源として注目されています。しかし、ここで問題になるのが、ビジネスとITシステムが密接に結び付いているため、ビジネスを変化させようと思ったときにネックとなるのがITシステムであるという事実です。ビジネスを素早く変化させるためには、素早く変更することができるITシステムを作らねばなりません。
また、変化するのはビジネスだけではありません。技術の進歩に伴いITシステムに使われる技術も進化していきます。既存のシステムをできるだけ新技術に対応させる観点も必要になってきます。
さらに、企業の競争力を落とさないために、ITシステムに対するコスト削減の動きはより一層強くなっていくでしょう。そんな中では、既存の資産をできるだけ長く使いながら、かつ、ビジネスと技術の変化に対応するため拡張しながら使い続けなければなりません。
まとめると、ビジネスの変化に迅速に低コストで対応でき、技術の進歩に追随できるシステムを開発することが望まれています。システムを最低限の費用で維持し利用すること、時代に取り残されず絶えず進化するシステムが必要です。オブジェクト指向技術は、そのような保守性・拡張性を実現するために利用できる技術です。
◆ 保守性・拡張性とは?
さて、オブジェクト指向では、保守性・拡張性とはどのように実現されるのでしょうか。一般的に、システム開発において、「保守」というと、障害対応、バックアップ、パッチ適用が考えられ、「拡張」というと、新規の機能追加、既存機能への修正、などが考えられます。今回の連載では、オブジェクト指向開発における分析・設計作業で、意識すべき保守性・拡張性という観点から、次のように定義しました。
- 保守性とは:予想できなかった機能変更・追加を、最低限のコストで実施できること
[例] バグ修正、ミドルウェアの変更、新規機能の追加(修正個所の極少化、修正の影響範囲の限定、修正個所特定の容易さ[=トレーサビリティ])
- 拡張性とは:事前に想定することができる機能変更・追加を、最低限のコストで実施できること
[例] ビジネスルールの変更(料金計算など。拡張する個所を、プログラムを修正することなく拡張する仕組み)
今回の連載では、上記の保守性・拡張性の観点を重視して、オブジェクト指向分析設計の要件定義から実装の中で、重要なポイントをピックアップしてお話ししたいと思います。連載の内容は次のものを予定しています。
・オブジェクト指向の基本的概念
オブジェクト指向は、変更性・拡張性に寄与する概念をたくさん持っています。クラス、継承、ポリモーフィズムなどの基本的な考え方について概要を説明していきます。
・概念モデリングとユースケース
概念モデリング(ドメインモデリング)とユースケース分析を通して、システムに普遍的な構造と固有な構造を構築します。共通的に利用されるクラスは普遍的な変化に強い構造として保守性を高め、「注文する」などの個々のサービスに依存するクラスは固有な構造として構築します。固有な構造のクラスは普遍な構造のクラスを利用します。この固有な構造と普遍的な構造を、うまく作ることにより保守性をシステムに持たせることができます。
・ホットスポット(ビジネスロジックの拡張性)
普遍的な構造のクラスが持つビジネスロジックは、共通的に利用されるロジックなので、頻繁に変更をするようでは困ります。ただ、ビジネスロジックは臨機応変に変更したいときもあります。例えば、「料金を計算する」でも料金の計算式は簡単に変更できれば便利です。このようなときに簡単に変更できる仕組みがホットスポットです。
・コンポーネント化
コンポーネントは、ソフトウェアの部品です。パッケージやサブシステムを使用して、関連するクラスをまとめて部品化します。特にサブシステムはファサードパターンを利用し、外部とのアクセスをインターフェイス経由で行うことにより部品の交換可能性を高めています。例えば、データアクセスコンポーネントを交換することにより、OracleからDB2へデータベースの変更が可能となります。
・アーキテクチャ設計
アーキテクチャはソフトウェアの構造や構成を定義します。複雑なものを単純なものの組み合わせで整理整頓することにより、理解しやすく、保守性・拡張性が高いシステムを実現します。例えば、階層化アーキテクチャや、最近注目されているサービス指向アーキテクチャ(SOA:Service Oriented Architecture)もアーキテクチャの1つです。
◆
以上、今回は、現状のシステム開発の問題点と、保守性・拡張性の大切さとその定義を説明してきました。そして、保守性・拡張性という観点から、本連載で紹介していくオブジェクト指向の重要なポイントをピックアップしました。次回からは、個々の内容を掘り下げていきたいと思います。まず次回は、オブジェクト指向の基本的概念を説明したいと思います。どうぞお楽しみに。
| 参考文献: (1)UMLに基づくオブジェクト指向分析設計実践(IBM Rational) (2)UMLモデリングの本質(日経BP社、児玉公信) (3)オブジェクト指向でなぜつくるのか(日経BP社、平澤章) |
|
2/2 |
|
INDEX |
||
| 保守性・拡張性に優れたシステムを作る(1) ソフトウェアにおける保守性と拡張性の定義 |
||
| Page1 ◆ 現状のシステム開発における問題点 |
||
| Page2 ◆ いま求められているシステム開発とは? |
||
| IT Architect 連載記事一覧 |
保守性・拡張性に優れたシステムを作る バックナンバー
- 第1回 ソフトウェアにおける保守性と拡張性の定義
- 第2回 オブジェクト指向で実現できる保守性・拡張性
- 第3回 変更に耐えるシステム構造とモデルの関係(上)
- 第4回 変更に耐えるシステム構造とモデルの関係(下)
- 第5回 コンポーネント化でクラスをすっきり整理
- 第6回 使いやすくて、変化に強いコンポーネント
- 第7回 階層アーキテクチャの利点は、複雑さの減少
- 第8回 ドメイン層に最適なアーキテクチャを考える
- 第9回 「データの永続性」に配慮した設計
- 第10回 ドメイン層をシンプルに作るためのO-Rマッピング
- 第11回 キミの設計に「トレーサビリティ」はあるか
- 最終回 システム開発はなぜ楽にならないか?
ホワイトペーパー(TechTargetジャパン)
|
|

