ソフトウェアエンジニアリングの概要
まず、ソフトウェアエンジニアリングの意味を理解しましょう。この用語は、ソフトウェアとエンジニアリングの2つの単語で構成されています。
Software 単なるプログラムコードではありません。プログラムは実行可能コードであり、計算目的に役立ちます。ソフトウェアは、実行可能なプログラミングコード、関連するライブラリ、およびドキュメントのコレクションと見なされます。ソフトウェアは、特定の要件のために作成された場合、software product.
Engineering 一方、すべては、明確に定義された科学的原理と方法を使用して製品を開発することです。
Software engineeringは、明確に定義された科学的原理、方法、および手順を使用したソフトウェア製品の開発に関連するエンジニアリング部門です。ソフトウェアエンジニアリングの成果は、効率的で信頼性の高いソフトウェア製品です。
定義
IEEEは、ソフトウェアエンジニアリングを次のように定義しています。
(1)ソフトウェアの開発、運用、および保守に対する体系的で統制のとれた定量化可能なアプローチの適用。つまり、ソフトウェアへのエンジニアリングの適用です。
(2)上記のようなアプローチの研究。
ドイツのコンピューター科学者であるフリッツバウアーは、ソフトウェアエンジニアリングを次のように定義しています。
ソフトウェアエンジニアリングは、信頼性が高く、実際のマシンで効率的に動作するソフトウェアを経済的に取得するための、健全なエンジニアリングの原則の確立と使用です。
ソフトウェアの進化
ソフトウェアエンジニアリングの原則と方法を使用してソフトウェア製品を開発するプロセスは、 software evolution. これには、ソフトウェアの初期開発とその保守および更新が含まれ、期待される要件を満たす目的のソフトウェア製品が開発されるまで続きます。
進化は、要件収集プロセスから始まります。その後、開発者は目的のソフトウェアのプロトタイプを作成し、それをユーザーに見せて、ソフトウェア製品開発の初期段階でフィードバックを得ます。ユーザーは変更を提案し、その上でいくつかの連続した更新とメンテナンスも変更され続けます。このプロセスは、目的のソフトウェアが完成するまで、元のソフトウェアに変更されます。
ユーザーが手元にあるソフトウェアを希望した後でも、技術の進歩と要件の変化により、ソフトウェア製品はそれに応じて変更されます。ソフトウェアを最初から再作成し、要件に合わせて1対1で実行することは現実的ではありません。実行可能で経済的な唯一の解決策は、既存のソフトウェアを最新の要件に一致するように更新することです。
ソフトウェア進化法
リーマンはソフトウェアの進化に関する法律を制定しました。彼はソフトウェアを3つの異なるカテゴリに分類しました。
- S-type (static-type) - これは、定義された仕様とソリューションに厳密に従って機能するソフトウェアです。解決策とそれを達成する方法は、どちらもコーディング前にすぐに理解されます。sタイプのソフトウェアは変更の影響が最も少ないため、これが最も簡単です。たとえば、数学計算のための計算機プログラム。
- P-type (practical-type) - これは、一連の手順を備えたソフトウェアです。これは、プロシージャが実行できることによって正確に定義されます。このソフトウェアでは、仕様を説明することはできますが、解決策はすぐにはわかりません。たとえば、ゲームソフトウェア。
- E-type (embedded-type) - このソフトウェアは、実際の環境の要件として密接に機能します。このソフトウェアは、現実の状況で法律や税金などにさまざまな変更が加えられているため、高度な進化を遂げています。たとえば、オンライン取引ソフトウェア。
E-Typeソフトウェアの進化
Lehmanは、E-Typeソフトウェアの進化について8つの法則を定めています-
- Continuing change - Eタイプのソフトウェアシステムは、現実世界の変化に適応し続ける必要があります。そうしないと、次第に有用性が低下します。
- Increasing complexity - Eタイプのソフトウェアシステムが進化するにつれて、それを維持または削減するための作業が行われない限り、その複雑さは増す傾向があります。
- Conservation of familiarity - システムに変更を実装するには、ソフトウェアに精通していること、またはソフトウェアがどのように開発されたか、なぜその特定の方法で開発されたのかなどの知識を保持する必要があります。
- Continuing growth- あるビジネス上の問題を解決することを目的としたE型システムのために、ビジネスのライフスタイルの変化に応じて、変更を実装するサイズが大きくなります。
- Reducing quality - Eタイプのソフトウェアシステムは、変化する運用環境に厳密に維持および適応されない限り、品質が低下します。
- Feedback systems- Eタイプのソフトウェアシステムは、マルチループ、マルチレベルのフィードバックシステムを構成し、正常に変更または改善するには、そのように扱う必要があります。
- Self-regulation - E型システムの進化プロセスは、製品の分布とプロセスの測定値が通常に近い状態で自己調整しています。
- Organizational stability - 進化するE型システムの平均実効グローバル活動率は、製品の寿命を通じて不変です。
ソフトウェアパラダイム
ソフトウェアパラダイムとは、ソフトウェアの設計時に実行される方法と手順を指します。多くの方法が提案され、現在機能していますが、ソフトウェアエンジニアリングのどこにこれらのパラダイムが存在するかを確認する必要があります。これらはさまざまなカテゴリに組み合わせることができますが、それぞれが互いに含まれています。
プログラミングパラダイムは、ソフトウェア設計パラダイムのサブセットであり、さらにソフトウェア開発パラダイムのサブセットです。
ソフトウェア開発パラダイム
このパラダイムは、ソフトウェアの開発に関連するすべてのエンジニアリングの概念が適用されるソフトウェアエンジニアリングパラダイムとして知られています。これには、ソフトウェア製品の構築に役立つさまざまな調査と要件の収集が含まれます。構成されています–
- 要件の収集
- ソフトウェア設計
- Programming
ソフトウェア設計パラダイム
このパラダイムはソフトウェア開発の一部であり、以下が含まれます–
- Design
- Maintenance
- Programming
プログラミングパラダイム
このパラダイムは、ソフトウェア開発のプログラミングの側面と密接に関連しています。これも -
- Coding
- Testing
- Integration
ソフトウェアエンジニアリングの必要性
ソフトウェアエンジニアリングの必要性は、ソフトウェアが動作しているユーザー要件と環境の変化率が高いために発生します。
- Large software - 同様に、ソフトウェアのサイズが大きくなるにつれて、エンジニアリングはそれに科学的プロセスを与えるために一歩踏み出さなければならないので、家や建物よりも壁を構築する方が簡単です。
- Scalability- ソフトウェアプロセスが科学的および工学的概念に基づいていない場合、既存のソフトウェアを拡張するよりも、新しいソフトウェアを再作成する方が簡単です。
- Cost- ハードウェア業界がそのスキルを示し、巨大な製造業がコンピューターと電子ハードウェアの価格を下げているように。しかし、適切なプロセスが採用されていない場合、ソフトウェアのコストは高いままです。
- Dynamic Nature- ソフトウェアの常に成長し適応する性質は、ユーザーが作業する環境に大きく依存します。ソフトウェアの性質が常に変化している場合は、既存のソフトウェアで新しい拡張を行う必要があります。これは、ソフトウェアエンジニアリングが良い役割を果たす場所です。
- Quality Management- ソフトウェア開発のより良いプロセスは、より良い高品質のソフトウェア製品を提供します。
良いソフトウェアの特徴
ソフトウェア製品は、それが提供するものとそれがどれだけうまく使用できるかによって判断することができます。このソフトウェアは、次の理由で満たす必要があります。
- Operational
- Transitional
- Maintenance
適切に設計および作成されたソフトウェアには、次の特性が期待されます。
運用
これは、ソフトウェアが運用においてどれだけうまく機能するかを示しています。それはで測定することができます:
- Budget
- Usability
- Efficiency
- Correctness
- Functionality
- Dependability
- Security
- Safety
過渡期
この側面は、ソフトウェアをあるプラットフォームから別のプラットフォームに移動するときに重要です。
- Portability
- Interoperability
- Reusability
- Adaptability
メンテナンス
この側面では、ソフトウェアが絶えず変化する環境でそれ自体を維持する機能をどれだけ備えているかについて簡単に説明します。
- Modularity
- Maintainability
- Flexibility
- Scalability
要するに、ソフトウェアエンジニアリングはコンピュータサイエンスの一分野であり、効率的で耐久性があり、スケーラブルで、予算内で時間通りのソフトウェア製品を作成するために必要な、明確に定義されたエンジニアリングの概念を使用しています。