拡張性

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

拡張性は、将来の成長を可能にするソフトウェアエンジニアリングシステム設計の原則です。拡張性は、システムを拡張する能力と、拡張を実装するために必要な作業のレベルの尺度です。拡張は、新しい機能の追加または既存の機能の変更によるものです。この原則は、既存のシステム機能を損なうことなく拡張を提供します。

拡張可能なシステムとは、内部構造とデータフローが新しい機能や変更された機能の影響を最小限に抑えるか、影響を受けないシステムです。たとえば、作成者または他のプログラマーがシステムの動作を変更するときに、元のソースコードを再コンパイルまたは変更する必要がない場合があります。[1]ソフトウェアシステムは長寿命であり、ユーザーが要求する新機能や追加機能に合わせて変更されるため、拡張性により、開発者はソフトウェアの機能を拡張または追加でき、体系的な再利用が容易になります。そのアプローチのいくつかには、ユーザー自身のプログラムルーチンを挿入できるようにする機能、新しいデータ型を定義する機能、および新しいフォーマットマークアップタグを定義する機能が含まれています。[2]

拡張可能なデザイン

ソフトウェアエンジニアリングの拡張可能な設計は、すべてが事前に設計できるわけではないことを受け入れることです。代わりに、変更を可能にする軽量のソフトウェアフレームワークが提供されます。低凝集度や高結合度などの従来のソフトウェア開発の問題を回避するために、作業要素をわかりやすい単位に分離するという原則に従って、拡張性の要素が失われるのを防ぐための小さなコマンドが作成されます。継続的な開発を可能にします。変更を受け入れることは、追加が継続的に行われる拡張可能な設計に不可欠です。システムの各チャンクはどのような変更でも機能し、追加による変更のアイデアはシステム設計全体の中心です。拡張可能な設計は、頻繁な再優先順位付けをサポートし、アジャイル手法と反復型開発によって提唱されている原則である、要求に応じて機能を小さなステップで実装できるようにします。拡張性は、開発中の依存関係をより少なく、よりクリーンにし、結合を減らし、よりまとまりのある抽象化に加えて、明確に定義されたインターフェースを課します。[3]

重要性

ソフトウェアは人間によって開発および維持される「進化する実体」であり、ソフトウェアの仕様と実装において継続的なシステム変更をもたらすため、人間の現象のために、気まぐれはすべてのソフトウェアの基礎にあります。ソフトウェアのコンポーネントは、多くの場合、無関係の関係者によって独自に開発および展開されます。製造元以外のサードパーティユーザーを考慮に入れると、外部ベンダーのコンポーネントが特定の展開シナリオに適合しない可能性があるため、適応可能なソフトウェアコンポーネントが必要です。多くのソフトウェアシステムとソフトウェア製品ラインは、共通のソフトウェアアーキテクチャを共有するベースシステムから派生しています。または、機能と実装の大部分が含まれている場合もありますが、拡張可能な基本システムを必要とするさまざまなコンポーネントが装備されている可能性があります。[4]

独立して拡張可能なソフトウェアシステムを構築することは重要な課題です。独立して拡張可能なシステムでは、2人が独立してシステムの拡張機能を開発できるだけでなく、グローバルな整合性チェックなしで2つの拡張機能を組み合わせることができます。[5]

拡張メカニズムの分類

ソフトウェアの拡張性には、ホワイトボックスの拡張性、グレーボックスの拡張性、ブラックボックスの拡張性の3つの異なる形式があり、これらはアーティファクトとその変更方法に基づいています。

ホワイトボックス

この拡張性の形式では、ソースコードを変更することでソフトウェアシステムを拡張できます。これは、最も柔軟性があり、最も制限の少ない形式です。拡張性には、変更の適用方法に応じて、オープンボックス拡張性とガラスボックス拡張性の2つのサブフォームがあります。

オープンボックス

変更は、オープンボックスの拡張可能なシステムで侵襲的に実行されます。つまり、元のソースコードが直接ハッキングされています。利用可能なソースコードと変更が許可されたソースコードライセンスが必要です。オープンボックスの拡張性は、バグ修正、内部コードのリファクタリング、またはソフトウェア製品の次のバージョンの作成に最も関連しています。

Glass-Box

Glass-boxの拡張性(アーキテクチャ駆動型フレームワークとも呼ばれます)を使用すると、ソフトウェアシステムを利用可能なソースコードで拡張できますが、コードを変更できない場合があります。元のシステムが影響を受けないように、拡張機能を元のシステムから分離する必要があります。この形式の拡張性の一例は、オブジェクト指向のアプリケーションフレームワークであり、通常、継承と動的バインディングを使用して拡張性を実現します。

ブラックボックス

ブラックボックスの拡張性(データ駆動型フレームワークとも呼ばれます)では、システムの実装に関する詳細は、展開または拡張機能の実装に使用されません。インターフェイス仕様のみが提供されます。このタイプのアプローチは、さまざまなホワイトボックスアプローチよりも制限されています。ブラックボックス拡張は通常、システム構成アプリケーション、またはコンポーネントインターフェイスを定義することによるアプリケーション固有のスクリプト言語の使用によって実現されます。

グレーボックス

グレーボックスの拡張性は、純粋なホワイトボックスと純粋なブラックボックスのアプローチの間の妥協点であり、ソースコードの公開に完全には依存していません。プログラマーには、拡張機能の開発方法に関する改良と仕様のために利用可能なすべての抽象化をリストするシステムの特殊化インターフェースを与えることができます。[6]

拡張性と再利用性

拡張性と再利用性には、多くの異なるソフトウェアシステムを構築するための低結合、モジュール性、高リスク要素の能力など、多くの共通の強調された特性があります。これは、共通の要素を共有することが多いソフトウェアシステムの観察によって動機付けられます。再利用性と拡張性により、開発と保守の時間が短縮され、信頼性と一貫性が向上したテクノロジーを別のプロジェクトに移行できます。[7]

セキュリティ

最新のオペレーティングシステムは、デバイスドライバーロード可能なカーネルモジュールを介して拡張性をサポートしています。最新のアプリケーションの多くは、プラグイン拡張言語アプレットなどを介して拡張性をサポートしています。拡張性が向上する傾向は、ソフトウェアのセキュリティに悪影響を及ぼします。[8]

CGIは、Webサーバーが拡張性を提供する主要な手段の1つです。一部の人々は、CGIスクリプトを「巨大なセキュリティホール」と見なしています。[9]

も参照してください

参考文献

  1. ^ Johansson、Niklas、およびAntonLöfgren。拡張性のための設計:設計原理による拡張性の最大化に関するアクションリサーチ研究。Np:np、イェーテボリ大学応用情報技術学部、2009年5月29日。Web。2014年4月26日。< https://gupea.ub.gu.se/bitstream/2077/20561/1/gupea_2077_20561_1.pdf >。
  2. ^ ラウズ、マーガレット。「拡張可能」SearchSAO。Np、2007年3月。Web。2014年4月27日。< http://searchsoa.techtarget.com/definition/extensible >。
  3. ^ ケリー、アラン。「拡張可能なソフトウェアの哲学」。ACCU-プログラミングのプロフェッショナリズム(2002):Web。2014年4月27日。< http://accu.org/index.php/journals/391 >。
  4. ^ ツェンガー、マティアス。「1.2拡張メカニズムの特性」。拡張可能なソフトウェアコンポーネントのプログラミング言語の抽象化。ローザンヌ:スイス連邦工科大学、2004年。N。ページ。ウェブ。2014年4月26日。< http://zenger.org/papers/thesis.pdf >。
  5. ^ MartinRytterとBoNørregaardJørgensen。「独立して拡張可能なコンテキスト」。「ソフトウェアアーキテクチャ:第4回欧州会議、ECSA 2010 、デンマーク、コペンハーゲン、2010年8月23〜26日、議事録」に掲載されました。2010.p。327。
  6. ^ ツェンガー、マティアス。「1.3拡張メカニズムの分類」。拡張可能なソフトウェアコンポーネントのプログラミング言語の抽象化。ローザンヌ:スイス連邦工科大学、2004年。N。ページ。ウェブ。2014年4月26日。
  7. ^ ツェンガー、マティアス。「1.1.1再利用性」。拡張可能なソフトウェアコンポーネントのプログラミング言語の抽象化。ローザンヌ:スイス連邦工科大学、2004年。N。ページ。ウェブ。2014年4月26日。
  8. ^ ゲイリー・マグロー。「ソフトウェアセキュリティ:セキュリティの構築」 .2006.p。9.9。
  9. ^ レン・バス、ポール・クレメンツ、リック・カズマン。「実際のソフトウェアアーキテクチャ」2003.p。339。

外部リンク

ウィクショナリー での拡張性の辞書定義