
ソフトウェアは、コンピュータの実行を指示するコンピュータプログラムで構成されています。[1]ソフトウェアは、設計文書、仕様、テストスイートを含むように広く定義できます。[2]
ソフトウェアの歴史は、20 世紀半ばのデジタル コンピュータの発展と密接に結びついています。初期のプログラムは、ハードウェア固有のマシン言語で書かれていました。1958 年に高級プログラミング言語が導入されたことで、人間が理解しやすい命令を記述できるようになり、ソフトウェア開発が容易になり、さまざまなコンピュータ アーキテクチャ間での移植性も高まりました。プログラミング言語で記述されたソフトウェアは、コンパイラまたはインタープリタを介してアーキテクチャのハードウェア上で実行されます。時間の経過とともに、ネットワーク、オペレーティング システム、データベースの発展により、ソフトウェアは複雑になってきました。
ソフトウェアは一般的に、次の 2 つの主なタイプに分類できます。
- オペレーティングシステムはハードウェアリソースを管理し、アプリケーションにサービスを提供する。
- ユーザーのために特定のタスクを実行するアプリケーションソフトウェア
クラウド コンピューティングの台頭により、新しいソフトウェア配信モデルであるSoftware as a Service (SaaS) が導入されました。SaaS では、アプリケーションはプロバイダーによってホストされ、インターネット経由でアクセスされます。
ソフトウェア開発のプロセスには、いくつかの段階があります。これらの段階には、ソフトウェアの設計、プログラミング、テスト、リリース、メンテナンスが含まれます。バグやセキュリティの脆弱性はシステム障害やセキュリティ侵害につながる可能性があるため、ソフトウェアの品質保証とセキュリティはソフトウェア開発の重要な側面です。さらに、ソフトウェア ライセンスや知的財産権などの法的問題も、ソフトウェア製品の配布において重要な役割を果たします。
歴史

ソフトウェアという言葉が最初に使われたのは、1958年の数学者ジョン・ワイルダー・テューキーです。[4] 1940年代末に登場した最初のプログラム可能なコンピュータ[5]は、機械語でプログラムされていました。機械語はデバッグが難しく、異なるコンピュータ間での移植性がありません。 [6]当初、ハードウェアリソースは人的リソースよりも高価でした。[7]プログラムが複雑になるにつれて、プログラマの生産性がボトルネックになりました。1958年に高水準プログラミング言語が導入され、ハードウェアの詳細が隠され、基礎となるアルゴリズムがコードに表現されました。[8] [9]初期の言語には、Fortran、Lisp、COBOLなどがあります。[9]
種類
.svg/500px-Operating_system_placement_(software).svg.png)
ソフトウェアには主に 2 つの種類があります。
- オペレーティングシステムは「ユーザーとアプリケーションのためにコンピュータのリソースを管理するソフトウェア層」です。[10]オペレーティングシステムが果たす主な目的は3つあります。[11]
- 異なるアプリケーション間でリソースを割り当て、中央処理装置(CPU)時間やメモリ内のスペースをいつ受け取るかを決定します。[11]
- ハードウェアの詳細(物理メモリなど)へのアクセスの詳細を抽象化するインターフェースを提供し、プログラマーの作業を容易にする。[11] [12]
- ネットワークやディスクデバイスにアクセスするためのインターフェースなどの共通サービスを提供する。これにより、アプリケーションを書き直すことなく、異なるハードウェア上で実行できるようになる。[13]
- アプリケーションソフトウェアはオペレーティングシステム上で動作し、タスクを実行するためにコンピュータのリソースを使用します。[14]現代のコンピュータで実行できるタスクの範囲が非常に広いため、アプリケーションソフトウェアにはさまざまな種類があります。[15]アプリケーションはソフトウェアの大部分を占めており[16] 、機能するためにはオペレーティングシステムによって提供される環境、および多くの場合他のアプリケーションが必要です。[17]

ソフトウェアは、展開方法によっても分類できます。従来のアプリケーションは、特定のバージョンのソフトウェアの永久ライセンスを購入してダウンロードし、購入者が所有するハードウェア上で実行します。 [18]インターネットとクラウドコンピューティング の台頭により、新しいモデルであるサービスとしてのソフトウェア(SaaS)が可能になりました。[19]このモデルでは、プロバイダーがソフトウェア(通常はレンタルされたインフラストラクチャまたはプラットフォーム上に構築)をホストし、 [20]多くの場合、サブスクリプション料金と引き換えに顧客にソフトウェアの使用を提供します。[18] 2023年までに、通常はWebアプリケーション経由で配信されるSaaS製品は、企業がアプリケーションを配信する主な方法になりました。[21]
ソフトウェア開発と保守

ソフトウェア企業は、高品質の製品を期限内に予算内で提供することを目指しています。課題は、ソフトウェア開発の労力見積もりが不正確であることが多いことです。[22] ソフトウェア開発は、プロジェクトの構想、実現可能性の評価、ビジネス要件の分析、ソフトウェア設計の作成から始まります。[23] [24]ほとんどのソフトウェアプロジェクトでは、市販の既製ソフトウェア(COTS)またはオープンソースソフトウェアの形で既存のソフトウェアを再利用または組み込むことで、開発をスピードアップしています。[25] [26]ソフトウェアの品質保証は通常、他のエンジニアによる手動のコードレビュー[27]と自動ソフトウェアテストを組み合わせたものです。時間の制約により、テストではソフトウェアの意図された機能のすべての側面をカバーできないため、開発者は最も重要な機能に重点を置くことがよくあります。[ 28]一部のセーフティクリティカルなシステムでは、コードの正確性を証明するために形式手法が使用され[29]、ユーザー受け入れテストは製品が顧客の期待を満たしていることを確認するのに役立ちます。[30]ソフトウェア開発方法論には様々なものがあり、すべてのステップを順番に完了させるものから、並行して反復的に進めるモデルまで様々です。[31]ソフトウェア開発は、変更要求などのイベントによって推進される保守とは対照的に、潜在的なユーザーからの要件によって推進されます。 [32]
開発チームの時間や資金が不足すると、ソフトウェアが不完全な状態でリリースされることがよくある。 [33]テストと品質保証にもかかわらず、事実上すべてのソフトウェアには、システムが意図したとおりに動作しないバグが含まれている。バグが見つかったときに修正し、時間の経過とともに環境が変化してもソフトウェアが機能し続けるようにするには、リリース後のソフトウェアメンテナンスが必要である。 [34]リリース後には、新しい機能が追加されることが多い。時間の経過とともに、メンテナンスのレベルはますます制限され、製品が市場から撤退すると完全に打ち切られる。[35]ソフトウェアが古くなると、レガシーソフトウェアと呼ばれるようになり、修正方法を知っている人がいなくなっても、何十年も使用され続けることがある。[36]製品の寿命全体にわたって、ソフトウェアメンテナンスは総開発コストの75%以上を占めると推定されている。[37] [38]
ソフトウェアプロジェクトを完了するには、ソフトウェアプログラマーだけでなく、テスト、ドキュメント作成、プロジェクト管理、グラフィックデザイン、ユーザーエクスペリエンス、ユーザーサポート、マーケティング、資金調達など、さまざまな専門知識が必要です。 [39] [40] [24]
品質とセキュリティ
ソフトウェアの品質は、定められた要件と顧客の期待を満たすことと定義されます。[41]品質は、コードの正確で効率的な動作、再利用性と移植性、または変更の容易さを指す包括的な用語です。[42]通常、開発プロセスの後半で品質を追加するよりも、最初から製品に品質を組み込む方が費用対効果が高くなります。[43]高品質のコードは信頼性が高く、保守が容易であるため、サプライヤーと顧客の両方にとって生涯コストが削減されます。[44] [45]セーフティクリティカルなシステムにおけるソフトウェア障害は、死亡を含む非常に深刻な場合があります。[44]ある推定によると、低品質のソフトウェアのコストは、売上高の20〜40%にも達することがあります。[46] 開発者は完全に意図したとおりに動作する製品を提供することを目標としていますが、事実上すべてのソフトウェアにはバグが含まれています。[47]
インターネットの普及により、悪意のある者が遠隔からサイバー攻撃を行えるようになり、コンピュータセキュリティの必要性も大幅に高まった。 [48] [49]バグがセキュリティリスクを生み出す場合、それは脆弱性と呼ばれる。[50] [51]特定された脆弱性を修正するためにソフトウェアパッチがリリースされることが多いが、未知のままの脆弱性(ゼロデイ)やパッチが適用されていない脆弱性は、依然として悪用される可能性がある。[52]脆弱性は、悪意のある者によって悪用される可能性が異なり、 [50]実際のリスクは脆弱性の性質と周囲のシステムの価値に依存する。[53]脆弱性の中には、システムの可用性を危険にさらすサービス拒否攻撃 にのみ使用可能なものもあるが、他の脆弱性は、ユーザーが気付かないうちに攻撃者が独自のコード(マルウェアと呼ばれる)を挿入して実行することを可能にする。 [50]サイバー攻撃を阻止するには、システム内のすべてのソフトウェアが外部からの攻撃に耐え、回復できるように設計されている必要がある。[49]セキュリティを確保するための努力にもかかわらず、かなりの数のコンピュータがマルウェアに感染しています。[54]
エンコードと実行
プログラミング言語

プログラミング言語は、ソフトウェアが記述される形式です。1950 年代以降、何千もの異なるプログラミング言語が発明されてきました。何十年も使用されているものもあれば、使われなくなったものもあります。[55]一部の定義では、マシン コード(ハードウェアによって直接実装される正確な命令) とアセンブリ言語(マシン コードよりも人間が読みやすく、ステートメントを 1 対 1 でマシン コードに翻訳できる言語) をプログラミング言語として分類しています。[56]ソフトウェアの作成に使用される高水準プログラミング言語で記述されたプログラムには、いくつかの共通する主な特徴があります。マシン コードの知識がなくても記述でき、他のコンピューター システムに移植でき、マシン コードよりも簡潔で人間が読みやすいことです。[57]人間が読みやすく、コンピューター ハードウェアの明確な命令に変換できる必要があります。[58]
コンパイル、解釈、実行
高水準プログラミング言語の発明は、それを自動的に機械語に変換するのに必要なコンパイラーと同時期に行われました。 [59]ほとんどのプログラムには、実行に必要なすべてのリソースが含まれていないため、外部ライブラリに依存しています。コンパイラーの機能の一部は、これらのファイルをリンクして、プログラムをハードウェアで実行できるようにすることです。コンパイルされたプログラムはオブジェクトファイルとして保存でき、ローダー(オペレーティングシステムの一部)はこの保存されたファイルを取得して、コンピューターハードウェア上のプロセスとして実行できます。 [60]一部のプログラミング言語では、コンパイラーの代わりにインタープリターを使用します。インタープリターは実行時にプログラムを機械語に変換するため、コンパイルされたプログラミング言語よりも10〜100倍遅くなります。[61] [62]
法的問題
責任
ソフトウェアは、不完全であったりバグがあったりすることを承知の上でリリースされることが多い。購入者はそれを承知の上で購入しており、その結果、ソフトウェア製品に対する責任は他の製品に比べて大幅に軽減されるという法的制度が生まれている。[63]
ライセンス

ソースコードは著作権法によって保護されており、所有者にはコードをコピーする排他的権利が与えられている。根底にあるアイデアやアルゴリズムは著作権法では保護されていないが、多くの場合、企業秘密として扱われ、秘密保持契約などの方法で隠蔽されている。[64] ソフトウェアの著作権は1970年代半ばから認められており、ソフトウェアを作成した従業員や請負業者ではなく、ソフトウェアを作成した会社に帰属する。[65]ほとんどのソフトウェアの使用は、著作権者とユーザーの間の契約(ソフトウェアライセンス)によって管理されている。プロプライエタリソフトウェアは通常、コピーと再利用を制限する制限付きライセンスの下で販売されている(多くの場合、デジタル著作権管理(DRM)などのツールによって強制される)。[66] 対照的に、オープンソースライセンスは、いくつかの条件でソフトウェアの自由な使用と再配布を許可している。 [65]ソフトウェアに使用されるほとんどのオープンソースライセンスでは、変更は同じライセンスの下でリリースされる必要があるため、オープンソースソフトウェアがプロプライエタリプロジェクトで再利用されるときに複雑になる可能性がある。[67]
特許
特許は、発明者に新しい製品またはプロセスに対する独占的かつ期間限定のライセンスを与える。[68]ソフトウェアで何が達成できるかというアイデアは法律で保護されておらず、具体的な実装は著作権法で保護されている。一部の国では、請求された発明が物理的世界に影響を与えるという要件も、ソフトウェア特許が有効とみなされるための要件の一部である可能性がある。[69] ソフトウェア特許は歴史的に議論の的となっている。1998年のState Street Bank & Trust Co. v. Signature Financial Group, Inc. の訴訟以前は、ソフトウェア特許は米国では一般に認められていなかった。その訴訟で、最高裁判所はビジネスプロセスは特許を受けることができると判断した。[70]特許申請は複雑で費用がかかり、特許に関わる訴訟は製品のコストを押し上げる可能性がある。[71]著作権とは異なり、特許は通常、発行された管轄区域でのみ適用される。[72]
インパクト

エンジニアのケイパーズ・ジョーンズは、「コンピュータとソフトウェアは、教育、仕事、戦争、娯楽、医療、法律など、人間生活のあらゆる側面に大きな変化をもたらしている」と書いている。[74]先進国では、日常生活のいたるところにコンピュータとソフトウェアが普及している。[75]多くの場合、ソフトウェアは家電製品やエレベーターなどの既存の技術の機能を拡張する。[76]ソフトウェアはまた、インターネット、ビデオゲーム、携帯電話、GPSなどのまったく新しい技術を生み出した。[ 76] [77]電子メール、フォーラム、ブログ、マイクロブログ、ウィキ、ソーシャルメディアなどの新しいコミュニケーション方法は、インターネットによって可能になった。[78]紙ベースの図書館を凌ぐ膨大な量の知識が、今では簡単なウェブ検索で入手できる。[77]ほとんどのクリエイティブプロフェッショナルは、コンピュータ支援設計、3Dモデリング、デジタル画像編集、コンピュータアニメーションなどのソフトウェアベースのツールに切り替えている。[73]ほぼすべての複雑なデバイスはソフトウェアによって制御されています。[77]
参考文献
- ^ ステア、ラルフ・M. (2003)。情報システムの原則、第6版。トムソン。p. 16。ISBN 0-619-06489-7
ソフトウェアは、コンピュータの動作を制御するコンピュータ プログラムで構成されています
。 - ^ オスターワイル 2013、61ページ。
- ^ ジョーンズ2014、19、22頁。
- ^ トレイシー2021、2頁。
- ^ ガッブリエリ&マルティーニ 2023、p. 519.
- ^ Gabbrielli & Martini 2023、520–521 ページ。
- ^ ガッブリエリ&マルティーニ 2023、p. 522.
- ^ ガッブリエリ&マルティーニ 2023、p. 521。
- ^ ab Tracy 2021、p. 1を参照。
- ^ アンダーソンとダーリン、2014、p. 6.
- ^ abc アンダーソン&ダーリン2014、p.7。
- ^ Tanenbaum & Bos 2023、5ページ。
- ^ アンダーソンとダーリン、2014、7、9、13 ページ。
- ^ アンダーソンとダーリン、2014、6–7 ページ。
- ^ ジョーンズ2014、121ページ。
- ^ トレイシー2021、66頁。
- ^ トレイシー2021、72頁。
- ^ ab O'Regan 2022、386ページ。
- ^ キャンベル・ケリー&ガルシア・シュワルツ 2015年、156~157頁。
- ^ ロザティ&リン 2020、23頁。
- ^ ワット2023、4ページ。
- ^ オレガン2022、7頁。
- ^ オレガン2022年、5頁。
- ^ ab Dooley 2017、p. 1を参照。
- ^ オレガン2022年、18、110-111頁。
- ^ トレイシー2021、43、76頁。
- ^ オレガン2022年、117-118頁。
- ^ オレガン2022年、54頁。
- ^ オレガン2022、267頁。
- ^ オレガン2022、20頁。
- ^ オレガン2022、9頁。
- ^ Tripathy & Naik 2014、p. 26.
- ^ ライファー2012、22ページ。
- ^ Tripathy & Naik 2014、pp. 4、27。
- ^ Tripathy & Naik 2014、p. 89.
- ^ トレイシー2021、3ページ。
- ^ ヴァルガ2018、6ページ。
- ^ Ulziit et al. 2015、764ページ。
- ^ タッカー、モレリ、デ・シルバ、2011、p. 7.
- ^ スタル2018、24-25頁。
- ^ ガリン2018、3ページ。
- ^ ガリン2018、26頁。
- ^ オレガン2022、68、117頁。
- ^ ab O'Regan 2022、pp.3、268より。
- ^ ヴァルガ2018、12ページ。
- ^ オレガン2022、119頁。
- ^ アブロン&ボガート 2017、p.1。
- ^ キャンベル・ケリー&ガルシア・シュワルツ 2015年、164ページ。
- ^ ab O'Regan 2022、p.266より。
- ^ abc Ablon & Bogart 2017、p.2。
- ^ ダスワニとエルバヤディ 2021、p. 25.
- ^ ダスワニ & エルバヤディ 2021、26–27 ページ。
- ^ ハーバー&ヒバート 2018、5-6頁。
- ^ キッチン&ダッジ 2011、37ページ。
- ^ トレイシー2021、117頁。
- ^ トレイシー2021、118-120頁。
- ^ トレイシー2021、118-119頁。
- ^ キッチン&ダッジ 2011、26ページ。
- ^ トレイシー2021、121頁。
- ^ トレイシー2021、122-123頁。
- ^ オレガン2022、375頁。
- ^ セベスタ 2012、28ページ。
- ^ キッチン&ダッジ 2011、36-37ページ。
- ^ オレガン2022年、394-396頁。
- ^ ab O'Regan 2022、p.403より。
- ^ オレガン2022、394、404頁。
- ^ ランガー2016、44-45頁。
- ^ オレガン2022、395頁。
- ^ ジェラルド・コン・ディアス、「機械の中のテキスト:アメリカの著作権法とソフトウェアの多様な性質、1974~1978年」、テクノロジー・アンド・カルチャー57(2016年10月)、753~779ページ。
- ^ ジョーンズ2014、19ページ。
- ^ オレガン2022、398頁。
- ^ オレガン2022、399頁。
- ^ マノビッチ2013、333ページ。
- ^ ジョーンズ2014、32ページ。
- ^ キッチン&ダッジ 2011、p. iv.
- ^ Kitchin & Dodge 2011、5ページより。
- ^ abc Jones 2014、p. xxviii.
- ^ マノヴィッチ2013、329頁。
出典
- アブロン、リリアン、ボガート、アンディ (2017)。ゼロデイ、千の夜: ゼロデイ脆弱性とそのエクスプロイトの生涯と時代(PDF)。ランドコーポレーション。ISBN 978-0-8330-9761-3。
- アンダーソン、トーマス、ダーリン、マイケル (2014)。オペレーティングシステム: 原理と実践(第 2 版)。Recursive Books。ISBN 978-0-9856735-2-9。
- キャンベル・ケリー、マーティン、ガルシア・シュワルツ、ダニエル・D. (2015)。『メインフレームからスマートフォンへ: 国際コンピュータ産業の歴史』ハーバード大学出版局。ISBN 978-0-674-28655-9。
- ダスワニ、ニール、エルバヤディ、ムーディ(2021)。大規模侵害:すべての人のためのサイバーセキュリティの教訓。Apress。ISBN 978-1-4842-6654-0。
- Dooley, John F. (2017)。ソフトウェア開発、設計、コーディング: パターン、デバッグ、単体テスト、リファクタリング付き。Apress。ISBN 978-1-4842-3153-1。
- Gabbrielli, Maurizio; Martini, Simone (2023).プログラミング言語: 原則とパラダイム(第 2 版). Springer. ISBN 978-3-031-34144-1。
- Galin, Daniel (2018)。ソフトウェア品質: 概念と実践。John Wiley & Sons。ISBN 978-1-119-13449-7。
- Haber, Morey J.; Hibbert, Brad (2018).資産攻撃ベクトル: 組織を保護するための効果的な脆弱性管理戦略の構築。Apress。ISBN 978-1-4842-3627-7。
- ジョーンズ、ケイパーズ (2014)。ソフトウェアエンジニアリングの技術的および社会的歴史。ピアソン教育。ISBN 978-0-321-90342-6。
- キッチン、ロブ、ドッジ、マーティン (2011)。コード/スペース: ソフトウェアと日常生活。MIT プレス。ISBN 978-0-262-04248-2。
- ランガー、アーサー M. (2016)。ソフトウェア開発ガイド: ライフサイクルの設計と管理。シュプリンガー。ISBN 978-1-4471-6799-0。
- マノビッチ、レフ(2013)。『ソフトウェアが指揮をとる』ブルームズベリー・アカデミック。ISBN 978-1-62356-745-3。
- O'Regan, Gerard (2022).ソフトウェアエンジニアリングの簡潔ガイド: 基礎から応用方法まで. Springer Nature. ISBN 978-3-031-07816-3。
- Osterweil, Leon J. (2013)。「ソフトウェアとは何か? 質問に答える経験的手法の役割」。ソフトウェア エンジニアリングの将来に関する展望: Dieter Rombach に敬意を表したエッセイ。Springer。237 ~ 254 ページ。ISBN 978-3-642-37395-4。
- Rahman, Hanif Ur; da Silva, Alberto Rodrigues; Alzayed, Asaad; Raza, Mushtaq (2024). 「ソフトウェア保守のオフショアリング決定に関する体系的な文献レビュー」。情報およびソフトウェア技術。172 : 107475。doi :10.1016/ j.infsof.2024.107475。
- レイファー、ドナルド J. (2012)。ソフトウェアメンテナンス成功レシピ。CRC プレス。ISBN 978-1-4398-5167-8。
- Rosati, Pierangelo、Lynn, Theo (2020)。「クラウドへのインフラストラクチャ移行のビジネス価値の測定」。クラウド コンピューティングのビジネス価値の測定。Springer International Publishing。pp. 19–37。ISBN 978-3-030-43198-3。
- Sebesta, Robert W. (2012).プログラミング言語の概念(第 10 版). Addison-Wesley. ISBN 978-0-13-139531-2。
- Stull, Edward (2018)。『 UX プロフェッショナル以外の人のための UX の基礎: マネージャー、ライター、デザイナー、開発者のためのユーザー エクスペリエンスの原則』 Apress。ISBN 978-1-4842-3811-0。
- Tanenbaum, Andrew S. ; Bos, Herbert (2023).現代のオペレーティングシステム、グローバル版。Pearson Higher Ed. ISBN 978-1-292-72789-9。
- Tracy, Kim W. (2021).ソフトウェア: 技術史. Morgan & Claypool Publishers. ISBN 978-1-4503-8724-8。
- Tripathy, Priyadarshi; Naik, Kshirasagar (2014)。ソフトウェアの進化とメンテナンス:実践者のアプローチ。John Wiley & Sons。ISBN 978-0-470-60341-3。
- タッカー、アレン、モレリ、ラルフ、デ・シルバ、チャミンドラ (2011)。 『ソフトウェア開発:オープンソースアプローチ』CRC Press。ISBN 978-1-4398-8460-7。
- Ulziit, Bayarbuyan; Warraich, Zeeshan Akhtar; Gencel, Cigdem; Petersen, Kai ( 2015). 「グローバルソフトウェアメンテナンスを管理するための課題とソリューションの概念的フレームワーク」。Journal of Software: Evolution and Process。27 ( 10): 763–792。doi : 10.1002/smr.1720。
- Watt, Andy (2023)。C # と .NET を使用した最新の SaaS アプリケーションの構築: プロフェッショナルな SaaS アプリケーションの構築、展開、保守。Packt。ISBN 978-1-80461-087-9。
- Varga, Ervin (2018)。ソフトウェア保守と進化を解明する:枠にとらわれない思考。Springer。ISBN 978-3-319-71303-8。
