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

コンピュータプログラムを説明するのに「ソフトウェア」という言葉を初めて使ったのは、1958年の数学者ジョン・ワイルダー・テューキーです。 [ 3 ] [ 4 ] 1940年代末に登場した最初のプログラム可能なコンピュータは、[ 5 ]機械語でプログラムされていました。機械語はデバッグが難しく、異なるコンピュータ間での移植性がありません。 [ 6 ]当初、ハードウェアリソースは人的リソースよりも高価でした。[ 7 ]プログラムが複雑になるにつれて、プログラマの生産性がボトルネックになりました。1958年に導入された高水準プログラミング言語によって、ハードウェアの詳細は隠され、基礎となるアルゴリズムがコードに表現されました。[ 8 ] [ 9 ]初期の言語には、Fortran、Lisp、COBOLなどがあります。[ 9 ]
種類

ソフトウェアには主に 2 つの種類があります。
- オペレーティングシステムとは、「ユーザーとアプリケーションのためにコンピュータのリソースを管理するソフトウェア層」です。[ 10 ]オペレーティングシステムが果たす主な目的は3つあります。[ 11 ]
- アプリケーションソフトウェアはオペレーティングシステム上で動作し、コンピュータのリソースを使用してタスクを実行します。[ 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 ]
ライセンス

1970 年代半ば以来、ソフトウェアとそのソース コードは著作権法によって保護されており、所有者には排他的にコードをコピーする権利が与えられています。根本的なアイデアやアルゴリズムは著作権法では保護されていませんが、企業秘密として扱われ、秘密保持契約などの方法で隠蔽されることがあります。[ 64 ]ソフトウェアの著作権は、多くの場合、ソフトウェアに資金を提供または作成した個人または会社が所有します (ソフトウェアの作成に協力した従業員または請負業者との契約によって異なります)。 [ 65 ]一部のソフトウェアはパブリック ドメインになっており、使用、コピー、共有、変更に関して制限はありません。注目すべき例としては、米国政府によって作成されたソフトウェアがあります。フリー ソフトウェアやオープン ソース ソフトウェアも、おそらくいくつかの指定された条件で、自由な使用、共有、変更を許可しています。[ 65 ]一部のソフトウェアの使用は、著作権者が作成しユーザーに課す 契約 (ソフトウェア ライセンス) によって規定されています。プロプライエタリ ソフトウェアは通常、使用と共有を制限する制限付きライセンスの下で販売されます。[ 66 ]一部のフリーソフトウェアライセンスでは、改変版は同じライセンスの下でリリースされることが義務付けられており、これによりソフトウェアが独占的制約の下で販売または配布されることが防止されています。[ 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ソフトウェアは、
コンピュータの動作を制御するコンピュータ プログラムで構成されています。
- ^ジョーンズ 2014、19、22頁。
- ^トレイシー 2021、2ページ。
- ^ 「ソフトウェア (n.), 意味2.a」 .オックスフォード英語辞典. オックスフォード大学出版局. 2024. doi : 10.1093/OED/3803978366 . 2025年7月15日閲覧。
- ^ガッブリエリ&マルティーニ 2023、p. 519.
- ^ガッブリエリ&マルティーニ 2023、520–521 ページ。
- ^ガッブリエリ&マルティーニ 2023、p. 522.
- ^ガッブリエリ&マルティーニ 2023、p. 521.
- ^ a bトレイシー 2021、p.1。
- ^アンダーソンとダーリン、2014、p. 6.
- ^ a b cアンダーソン&ダーリン 2014、p.7。
- ^ Tanenbaum & Bos 2023、5ページ。
- ^アンダーソン & ダーリン 2014、7、9、13 ページ。
- ^アンダーソン & ダーリン 2014、6–7 ページ。
- ^ジョーンズ 2014、121ページ。
- ^トレイシー2021、66頁。
- ^トレイシー2021、72頁。
- ^ a bオレガン 2022、386頁。
- ^キャンベル・ケリー&ガルシア・シュワルツ 2015年、156~157頁。
- ^ロザティ&リン 2020、23頁。
- ^ワット 2023、4ページ。
- ^オレガン 2022、7ページ。
- ^オレガン 2022、5ページ。
- ^ a bドゥーリー 2017、p. 1。
- ^ O'Regan 2022、18、110–111 ページ。
- ^トレイシー2021、43、76頁。
- ^ O'Regan 2022、117–118 ページ。
- ^オレガン 2022、54頁。
- ^オレガン 2022、267頁。
- ^オレガン 2022、20頁。
- ^オレガン 2022、9ページ。
- ^トリパシーとナイク 2014、p. 26.
- ^ライファー 2012、22ページ。
- ^ Tripathy & Naik 2014、4、27ページ。
- ^トリパシーとナイク 2014、p. 89.
- ^トレイシー 2021、3ページ。
- ^ Varga 2018、6ページ。
- ^ウルジットら。 2015 年、p. 764。
- ^タッカー、モレリ、デ・シルバ、2011、p. 7.
- ^スタル 2018、24~25頁。
- ^ガリン 2018、3ページ。
- ^ガリン2018、26頁。
- ^オレガン 2022、68、117頁。
- ^ a bオレガン 2022、3頁、268頁。
- ^ Varga 2018、12ページ。
- ^オレガン 2022、119頁。
- ^アブロン&ボガート 2017、1ページ。
- ^キャンベル・ケリー&ガルシア・シュワルツ 2015年、164ページ。
- ^ a bオレガン 2022、266頁。
- ^ a b cアブロン&ボガート 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頁。
- ^ O'Regan 2022、394–396 ページ。
- ^ a bオレガン 2022、403頁。
- ^ O'Regan 2022、394、404 ページ。
- ^ランガー 2016、44~45頁。
- ^オレガン 2022、395頁。
- ^ジェラルド・コン・ディアス、「機械の中のテキスト:アメリカの著作権法とソフトウェアの多様な性質、1974-1978」、テクノロジー・アンド・カルチャー57(2016年10月)、753-79ページ。
- ^ジョーンズ 2014、19ページ。
- ^オレガン 2022、398頁。
- ^オレガン 2022、399頁。
- ^ a bマノビッチ 2013、333ページ。
- ^ジョーンズ 2014、32ページ。
- ^キッチン&ダッジ 2011、p. iv.
- ^ a bキッチン&ダッジ 2011、5ページ。
- ^ a b cジョーンズ 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。
- ドゥーリー、ジョン・F. (2017). 『ソフトウェア開発、設計、コーディング:パターン、デバッグ、ユニットテスト、リファクタリング付き』 Apress. ISBN 978-1-4842-3153-1。
- ガブリエリ, マウリツィオ; マルティーニ, シモーネ (2023). 『プログラミング言語:原理とパラダイム』(第2版). シュプリンガー. ISBN 978-3-031-34144-1。
- ガリン、ダニエル(2018年)『ソフトウェア品質:概念と実践』ジョン・ワイリー・アンド・サンズ社、ISBN 978-1-119-13449-7。
- ハーバー、モリー・J.; ヒバート、ブラッド (2018). 『資産攻撃ベクトル:組織を守るための効果的な脆弱性管理戦略の構築』 Apress. ISBN 978-1-4842-3627-7。
- ジョーンズ、ケイパーズ(2014年)『ソフトウェア工学の技術的・社会的歴史』ピアソン・エデュケーション、ISBN 978-0-321-90342-6。
- キッチン、ロブ、ドッジ、マーティン (2011).コード/スペース:ソフトウェアと日常生活. MIT Press. ISBN 978-0-262-04248-2。
- ランガー、アーサー・M. (2016).ソフトウェア開発ガイド:ライフサイクルの設計と管理. シュプリンガー. ISBN 978-1-4471-6799-0。
- マノヴィッチ、レフ(2013)『ソフトウェアが指揮権を握る』ブルームズベリー・アカデミック、ISBN 978-1-62356-745-3。
- オレガン、ジェラード(2022年)『ソフトウェアエンジニアリング簡潔ガイド:基礎から応用方法まで』シュプリンガー・ネイチャー、ISBN 978-3-031-07816-3。
- オスターヴァイル、レオン・J. (2013). 「ソフトウェアとは何か? 問いへの答えにおける実証的手法の役割」.ソフトウェア工学の未来への展望:ディーター・ロンバッハに捧ぐエッセイ集. シュプリンガー. pp. 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 Press. ISBN 978-1-4398-5167-8。
- Rosati, Pierangelo; Lynn, Theo (2020). 「クラウドへのインフラ移行のビジネス価値の測定」.クラウドコンピューティングのビジネス価値の測定. Springer International Publishing. pp. 19– 37. ISBN 978-3-030-43198-3。
- セベスタ, ロバート W. (2012). 『プログラミング言語の概念』(第10版). アディソン・ウェスレー. ISBN 978-0-13-139531-2。
- スタル、エドワード (2018). 『UXの基礎:非UXプロフェッショナル向け:マネージャー、ライター、デザイナー、開発者のためのユーザーエクスペリエンスの原則』 Apress. ISBN 978-1-4842-3811-0。
- Tanenbaum, Andrew S. ; Bos, Herbert (2023). Modern Operating Systems, Global Edition . Pearson Higher Ed. ISBN 978-1-292-72789-9。
- トレイシー、キム・W. (2021). 『ソフトウェア:技術史』モーガン&クレイプール出版社. ISBN 978-1-4503-8724-8。
- トリパシー、プリヤダルシ。ナイク、クシラサーガル (2014)。ソフトウェアの進化とメンテナンス: 実践者のアプローチ。ジョン・ワイリー&サンズ。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。