ソフトウェア開発は、ソフトウェアの作成、設計、導入、およびサポート・プロセスに特化した一連のコンピューター・サイエンスの活動です。
ソフトウェア自体は、コンピューターに何をすべきか伝える一連の指示またはプログラムであり、ハードウェアに依存せず、コンピューターをプログラムで制御できるようにします。3つの基本的なソフトウェアは次のとおりです。
システム・ソフトウェアは、オペレーティング・システム(OS)やディスク管理、ユーティリティー、ハードウェア管理、そのほか操作に必要な中核機能を提供します。
プログラミング・ソフトウェアは、プログラマーにツールを提供します。たとえばテキスト・エディター、コンパイラー、リンカー、デバッガー、そコードを作成するためのその他ツールなどです。
アプリケーション・ソフトウェア(アプリケーションまたはアプリ)はユーザーのタスク実行を支援します。職場の生産性を上げるスイート、データ管理ソフトウェア、メディア・プレーヤー、セキュリティー・プログラムがその例です。アプリケーションはAmazon.comでのお買い物、Facebookでの交流、Instagramへの写真投稿に使われるようなウェブおよびモバイル・アプリケーションも指します。1
4つ目として考えられるのは、組み込みソフトウェアです。組み込みソフトウェアは通信ネットワーク、車、工業用ロボットなど、一般的にコンピューターと見なされない機械やデバイスの制御に使われます。こうしたデバイスやソフトウェアはモノのインターネット(IoT)の一部として接続される場合があります。2
ソフトウェア開発を主に行うのはプログラマー、ソフトウェア・エンジニア、ソフトウェア・デベロッパーです。これらの役割は相互に関連しており、重複する部分もあります。3者間の関係性は、開発を担う部署やコミュニティーで大きく異なります。
プログラマーまたはコーダーはソースコードを書き、コンピューターがデータベースのマージやオンライン注文の処理、通信の送信、検索の実行、文章や図表の表示といった特定のタスクを行うようプログラムします。通常、プログラマーはソフトウェア・デベロッパーやエンジニアの指示を理解した上で、C++やJavaなどのプログラミング言語を使用して作業します。
ソフトウェア・エンジニア は、エンジニアリングの原則を用いて問題解決のためのソフトウェアとシステムを構築します。特定の事例やクライアントの問題をただ解決するのではなく、モデリング言語とその他ツールを使って、一般的な方法で幅広い問題に適用できるソリューションを考案します。ソフトウェア・エンジニアリングのソリューションには一貫して科学的手法が用いられており、橋やエレベーターのように現実世界で機能するものでなくてはなりません。マイクロプロセッサー、センサー、ソフトウェアの性能が上がり、製品の情報処理機能が向上するにつれて、ソフトウェア・エンジニアの責任も大きくなっています。市場での差別化を図るためソフトウェアに依存する製品が増えていますが、それだけでなく、ソフトウェア開発は製品の機械的および電気的な開発との調整が必要です。
ソフトウェア・デベロッパーの役割はエンジニアほど定型通りではなく、コード記述を含め、具体的なプロジェクト領域に密接に関わる場合があります。同時に、ソフトウェア開発のライフサイクル全般を動かします。複数のチームにまたがって要件を機能に作り変え、開発チームと工程を管理し、ソフトウェアのテストと保守を実施することも含まれます。3
ソフトウェア開発の仕事は、コーダーや開発チームだけで行うものではありません。科学者、デバイス製造業者、ハードウェア・メーカーといった専門家も、もともとはソフトウェア・デベロッパーではありませんが、ソフトウェアのコードを作成します。また、ソフトウェアや半導体事業といった従来型のIT業界にも限定されません。Brookings Instituteによると(ibm.com外部へのリンク)、こうした事業は「ソフトウェア開発を行う企業の半分以下」となっています。
カスタム・ソフトウェア開発と市販ソフトウェア開発には重要な違いがあります。カスタム・ソフトウェア開発とは特定のユーザー、部門または組織に対してソフトウェアを設計、作成、展開、保守するプロセスです。対照的に、既製の商用ソフトウェア(COTS)は幅広い要件に対して設計されているので、パッケージ化して市販・配布できます。
サービスとしてのデスクトップ(Desktop as a Service、DaaS)をつかって企業がどのようにアプリケーションをオンプレミスに展開するのと同じレベルのパフォーマンスとセキュリティを達成できるかをご覧ください。
ハイブリッドクラウドのためのガイドに登録する
ソフトウェアの開発には、一般的に以下のステップがあります。
ソフトウェア開発プロセスの各ステップは、アプリケーション・ライフサイクル管理(ALM)に該当します。IBM® Engineering Managementソリューションは、機械、電気、ソフトウェアの開発を同時に管理できる、複数のALMを組み合わせたものです。
ソフトウェア開発プロセスの各ステップはライフサイクルのフェーズごとにグループ分けできますが、ライフサイクルで重要なのは、継続的な改善を可能にするために再循環する点です。たとえば、保守とサポートの段階で表面化したユーザーの課題は次のサイクルの始めに要件となり得ます。
ソフトウェア開発は広く浸透していることからも重要です。IBMのバイス・プレジデントでブロガーのDibbe Edwardsはこう指摘しています。「車から食器洗浄機、サーモスタットまで、IoTに接続する多くの製品において、ソフトウェアがカギとなる差別化要因として浮上しました」
その例を一部ご紹介します。
ソフトウェア開発をブランドの差別化や競争力の獲得に活用するには、ソフトウェアの展開、品質、効率を向上できる手法とテクノロジーに精通していることが求められます。
デプロイメントであれ、新しいクラウドネイティブ・アプリケーションの構築であれ、既存アプリケーションのリファクタリングや再プラットフォーム化などであれ、Cloud Pak for Applications(CP4Apps)がすべてをカバーします。
ソフトウェア配信プロセスを自動化して、生産性と運用効率を向上させます。
複雑なシステム開発を強化するためのライフサイクル管理ツールの機能を拡張することで、要件からシステム設計、ワークフロー、テスト管理にシームレスに移行できます。
1ソフトウェア、Techopedia社(ibm.com外部へのリンク)
2組み込みソフトウェア、Wikipedia(ibm.com外部へのリンク)
3ソフトウェア・エンジニアとソフトウェア・デベロッパーの違い、Fullstack Academy(ibm.com外部へのリンク)
4 The Forrester Wave『2017年第4四半期のAD&Dプロフェッショナル向けローコード開発プラットフォーム』、John R. Rymer氏、Forrester Research, Inc.社、2017年10月23日(ibm.com外部へのリンク)