コンポーネントベースのソフトウェアエンジニアリング

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
UML2.0で表現された2つのコンポーネントの例顧客の注文を容易にするためのチェックアウトコンポーネントで、カード処理コンポーネントが顧客のクレジット/デビットカード(後者が提供する機能)に請求する必要があります。

コンポーネントベースのソフトウェアエンジニアリングCBSE )は、コンポーネントベースの開発CBD )とも呼ばれ、特定のソフトウェアシステム全体で利用可能な幅広い機能に関する関心の分離を強調するソフトウェアエンジニアリングの分野ですこれは、緩く結合された独立したコンポーネントをシステムに定義、実装、および構成するための再利用ベースのアプローチです。このプラクティスは、ソフトウェア自体とそのようなソフトウェアを後援する組織に、短期的および長期的に同じように幅広い利益をもたらすことを目的としています。

ソフトウェアエンジニアリングの実践者は、コンポーネントをサービス指向の開始プラットフォームの一部と見なしています。コンポーネントは、たとえばWebサービスで、そして最近ではサービス指向アーキテクチャー(SOA)でこの役割を果たします。これにより、コンポーネントはWebサービスによってサービスに変換され、その後、通常のコンポーネントの特性を超える特性を継承します。

コンポーネントはイベントを生成または消費でき、イベント駆動型アーキテクチャ(EDA)に使用できます。

コンポーネントの定義と特性

個々のソフトウェアコンポーネントは、ソフトウェアパッケージWebサービスWebリソース、または関連する機能(またはデータ) のセットをカプセル化するモジュールです。

すべてのシステムプロセスは別々のコンポーネントに配置されるため、各コンポーネント内のすべてのデータと関数は意味的に関連しています(クラスのコンテンツと同様)。この原理により、コンポーネントはモジュール式まとまりがあるとよく言われます

システム全体の調整に関しては、コンポーネントはインターフェースを介して相互に通信します。コンポーネントがシステムの残りの部分にサービスを提供するとき、他のコンポーネントが利用できるサービスとその方法を指定する提供されたインターフェースを採用します。このインターフェースは、コンポーネントの署名と見なすことができます。クライアントは、コンポーネントを使用するために、コンポーネントの内部動作(実装)について知る必要はありません。この原則により、カプセル化と呼ばれるコンポーネントが作成されます。この記事内のUMLの図は、コンポーネントの外縁に取り付けられたロリポップ記号によって提供されるインターフェースを表しています。

ただし、コンポーネントが機能するために別のコンポーネントを使用する必要がある場合は、必要なサービスを指定する使用済みインターフェースを採用します。この記事のUMLの図では、使用されるインターフェースは、コンポーネントの外縁に取り付けられたオープンソケット記号で表されています。

いくつかのソフトウェアコンポーネントの簡単な例-UML2.0で表される架空の休日予約システム内に描かれています

コンポーネントのもう1つの重要な属性は、コンポーネントが代替可能であるため、後続のコンポーネントが最初のコンポーネントの要件(インターフェイスを介して表現される)を満たしている場合に、コンポーネントを別のコンポーネントに置き換えることができることです(設計時または実行時)。その結果、コンポーネントは、コンポーネントが動作するシステムを壊すことなく、更新されたバージョンまたは代替バージョンのいずれかに置き換えることができます。

コンポーネントを置き換えるエンジニアの経験則として、コンポーネントBが少なくともコンポーネントAが提供したものを提供し、使用したコンポーネントAを超えない場合、コンポーネントBはコンポーネントAをすぐに置き換えることができます。

ソフトウェアコンポーネントは、多くの場合、オブジェクト(クラスではない)またはオブジェクトのコレクション(オブジェクト指向プログラミングから)の形式を取り、バイナリまたはテキスト形式で、コンポーネントが他のコンポーネントから自律的に存在できるように、インターフェイス記述言語(IDL)に準拠しています。コンピューターつまり、コンポーネントはソースコードを変更せずに動作します。コンポーネントのソースコードの動作は、アプリケーションの拡張性に基づいて変更される可能性がありますが、その作成者によって提供されます。

コンポーネントが実行コンテキストまたはネットワークリンク間でアクセスまたは共有される場合、コンポーネントを宛先に配信するために、 シリアル化マーシャリングなどの手法がよく使用されます。

再利用性は、高品質のソフトウェアコンポーネントの重要な特性です。プログラマーは、多くの異なるプログラムがそれらを再利用できるようにソフトウェアコンポーネントを設計および実装する必要があります。さらに、ソフトウェアコンポーネントがユーザーと直接対話する場合は 、コンポーネントベースのユーザビリティテストを検討する必要があります。

効果的に再利用可能なソフトウェアコンポーネントを作成するには、多大な労力と認識が必要です。コンポーネントは次のようにする必要があります。

  • 完全に文書化
  • 徹底的にテスト
    • 堅牢-包括的な入力有効性チェックを備えています
    • 適切なエラーメッセージまたはリターンコードを返すことができます
  • 予期せぬ用途に使用されること意識して設計されています

1960年代に、プログラマーは、幅広いエンジニアリングおよび科学アプリケーションで再利用可能な科学サブルーチンライブラリを構築しました。これらのサブルーチンライブラリは、明確に定義されたアルゴリズムを効果的に再利用しましたが、適用範囲は限られていました。商用サイトは、システムとユーザーの両方のアプリケーションライブラリ を使用して、アセンブリ言語COBOLPL / 1、およびその他の第2世代と第3世代の言語で記述された再利用可能なモジュールからアプリケーションプログラムを日常的に作成しました。

2010年の時点で、最新の再利用可能なコンポーネントは、データ構造とデータ構造に適用されるアルゴリズムの両方をカプセル化します。コンポーネントベースのソフトウェアエンジニアリングは、ソフトウェアオブジェクトソフトウェアアーキテクチャソフトウェアフレームワークソフトウェアデザインパターンの以前の理論、およびオブジェクト指向プログラミングとこれらすべてのオブジェクト指向設計の広範な理論に基づいていますハードウェアコンポーネントのアイデアのようなソフトウェアコンポーネントは、たとえば電気通信で使用されていると主張しています[1]。最終的には互換性と信頼性を高めることができます。一方、フレームワークではなく、独立したコンポーネントに焦点を当てるのは間違いであると主張されています(フレームワークがなければ、それらは存在しません)。[2]

歴史

ソフトウェアをコンポーネント化する必要があるという考え(プレハブコンポーネントから構築)は、1968年にドイツのガルミッシュで開催されたソフトウェアエンジニアリングに関するNATO会議でのダグラスマキルロイの演説で最初に顕著になりました[3]この会議は、いわゆるソフトウェア危機に対抗するために開始されました。その後、マキロイがパイプとフィルターUnixオペレーティングシステムに組み込んだのは、このアイデアのインフラストラクチャの最初の実装でした。

StepstoneのBradCox、ソフトウェアコンポーネントの最新の概念を主に定義しました。[4]彼はそれらをソフトウェアICと呼び、 Objective-Cプログラミング言語を発明することによってこれらのコンポーネントのインフラストラクチャと市場の​​構築に着手しました。(彼はこの見解を彼の著書「オブジェクト指向プログラミング-進化論的アプローチ1986」に要約しています。)

ソフトウェアコンポーネントは、2つの異なるコンテキストと2種類で使用されます。i)コンポーネントをパーツとして使用して単一の実行可能ファイルを構築する、またはii)各実行可能ファイルは、インターネットまたはイントラネットを使用してコンポーネントが相互に連携する分散環境ではコンポーネントとして扱われます。 IPC(プロセス間通信)の通信プロトコル。上記は前者の種類に属し、以下は後の種類に属します。

IBMは、 1990年代初頭にシステムオブジェクトモデル(SOM)で道を切り開きました。その反動として、Microsoftは、オブジェクトのリンクと埋め込み(OLE)およびコンポーネントオブジェクトモデル(COM)を備えたコンポーネントソフトウェアの実際の展開への道を開きました。[5] 2010年の時点で、多くの成功したソフトウェアコンポーネントモデルが存在します。

アーキテクチャ

複数のソフトウェアコンポーネントを実行しているコンピューターは、多くの場合、アプリケーションサーバーと呼ばれます。このアプリケーションサーバーとソフトウェアコンポーネントの組み合わせは、通常、分散コンピューティングと呼ばれます。これの典型的な実際のアプリケーションは、例えば、金融アプリケーションまたはビジネスソフトウェアにあります。

コンポーネントモデル

コンポーネントモデルは、コンポーネントが満たさなければならないプロパティ、コンポーネントの構成のためのメソッドとメカニズムの定義です[6]

過去数十年の間に、研究者と実践者は、異なる特性を持ついくつかのコンポーネントモデルを提案してきました。既存のコンポーネントモデルの分類は次のとおりです。[6] [7]コンポーネントモデルの例:Enterprise JavaBeans(EJB)モデル、Component Object Model(COM)モデル、.NETモデル、X-MANコンポーネントモデル、[8 ]およびCommonObject Request Broker Architecture (CORBA)コンポーネントモデル。

テクノロジー

も参照してください

参考文献

  1. ^ Foukalas etal「コンポーネントベースの設計を使用したプロトコルの再構成」
  2. ^ ウォレス、ブルース(2010年5月19日)。「すべてのコンポーネント用の穴、およびその穴内のすべてのコンポーネント」実存的プログラミング。コンポーネントのようなものはありません
  3. ^ マキロイ、マルコム・ダグラス(1969年1月)。「大量生産されたソフトウェアコンポーネント」(PDF)ソフトウェアエンジニアリング:1968年10月7日から11日まで、ドイツのガルミッシュで開催されたNATO科学委員会が主催した会議の報告NATO科学部。p。79。
  4. ^ RainerNiekamp。「ソフトウェアコンポーネントアーキテクチャ」(PDF)GestióndeCongresos-CIMNE/ Institute for Scientific Computing、TUブラウンシュヴァイク。p。4 2011年7月29日取得StepstoneのBradCoxによって主に定義されたソフトウェアコンポーネントの最新の概念、=> Objective-Cプログラミング言語
  5. ^ Raphael Gfeller(2008年12月9日)。「コンポーネントベースのアプリケーションのアップグレード」HSR-HochschulefürTechnikRapperswill。p。4 2011年7月29日取得1990年、IBMはシステムオブジェクトモデルを発明しました。1990年、反応として、マイクロソフトはOLE 1.0 OLEカスタムコントロール(OCX)をリリースしました[永久リンク切れ]
  6. ^ a b Crnkovic、I。; センティレス、S。; Vulgarakis、A。; Chaudron、MRV(2011)。「ソフトウェアコンポーネントモデルの分類フレームワーク」。ソフトウェアエンジニアリングに関するIEEEトランザクション37(5):593–615。土井10.1109 /TSE.2010.83S2CID15449138_ 
  7. ^ ラウ、カンキウ; 王、鄭(2007)。「ソフトウェアコンポーネントモデル」。ソフトウェアエンジニアリングに関するIEEEトランザクション33(10):709–724。土井10.1109 /TSE.2007.70726ISSN0098-5589_ 
  8. ^ ラウ、カンキウ; Velasco Elizondo、Perla; 王、鄭(2005)。ハイネマン、ジョージT。; Crnkovic、Ivica; シュミット、ハインツW。; スタッフォード、ジュディスA。; Szyperski、クレメンス; ヴァルナウ、カート(編)。「ソフトウェアコンポーネント用の外因性コネクタ」。コンポーネントベースのソフトウェアエンジニアリングコンピュータサイエンスの講義ノート。シュプリンガーベルリンハイデルベルク。3489:90–106。土井10.1007 / 11424529_7ISBN 9783540320494S2CID17971442 _
  9. ^ MASHは、資産を人、資産、情報として定義し、管理を監視、制御、構成として定義します。マウンテンビューで開催された2013IEEE IoT会議で発表されたMASHには、完全なIDE、Androidクライアント、およびランタイムが含まれています。「MASHYouTubeチャンネル」
  10. ^ コンポーネント指向のアプローチは、家庭用電化製品のソフトウェアの多様性を処理するための理想的な方法です。TVセットの組み込みソフトウェアに使用されるコアラモデルは、追加のオーバーヘッドなしで再利用可能なコンポーネントの遅延バインディングを可能にします。[1]
  11. ^ van Ommering、R。による論文に基づいてPhilipsが開発したTVなどの組み込みデバイスのコンポーネントモデル:Koala、家電製品ソフトウェアのコンポーネントモデル[2] WaybackMachine2014年8月9日にアーカイブ
  12. ^ アラド、コスミン(2013年4月)。再構成可能な分散システムのプログラミングモデルとプロトコル(PDF)博士論文スウェーデン、ストックホルム:KTH王立工科大学。ISBN  978-91-7501-694-8
  13. ^ アレラン、ダミアン; ラウ、カンキウ(2017)。「階層型サービス構成のための外因性コネクタ」(PDF)2017 IEEE 10th Conference on Service-Oriented Computing and Applications(SOCA)金沢:IEEE:125–132。土井10.1109 /SOCA.2017.25ISBN  9781538613269S2CID31211787 _

さらに読む

  • ブラッド・J・コックス、アンドリュー・J・ノボビルスキー(1991)。オブジェクト指向プログラミング:進化的アプローチ第2版 Addison-Wesley、ISBN0-201-54834-8を読む 
  • バートランドメイヤー(1997)。オブジェクト指向ソフトウェア構築第2版 プレンティスホール。
  • ジョージT.ハイネマン、ウィリアムT.カウンシル(2001)。コンポーネントベースのソフトウェアエンジニアリング:ピースをまとめるAddison-Wesley Professional、Reading 2001 ISBN 0-201-70485-4 
  • リチャードベリヤード(2001)。コンポーネントベースのビジネス:プラグアンドプレイロンドン:スプリンガー。ISBN 1-85233-361-8 
  • Clemens Szyperski、Dominik Gruntz、Stephan Murer(2002)。コンポーネントソフトウェア:オブジェクト指向プログラミングを超えて第2版 ACM Press-Pearson Educational、ロンドン2002 ISBN 0-201-74572-0 

外部リンク