ホーム Topics ソフトウェア開発 ソフトウェア開発とは
IBMのソフトウェア開発ソリューションはこちら 登録してクラウドの最新情報を受け取る
作成、分析、セキュリティー保護から導入ソリューションまで、ソフトウェア開発のさまざまな要素を示すグラフィック
ソフトウェア開発とは

ソフトウェア開発は、ソフトウェアの作成、設計、導入、およびサポート・プロセスに特化した一連のコンピューター・サイエンスの活動です。

ソフトウェア自体は、コンピューターに何をすべきか伝える一連の指示またはプログラムであり、ハードウェアに依存せず、コンピューターをプログラムで制御できるようにします。3つの基本的なソフトウェアは次のとおりです。

システム・ソフトウェアは、オペレーティング・システム(OS)やディスク管理、ユーティリティー、ハードウェア管理、そのほか操作に必要な中核機能を提供します。

プログラミング・ソフトウェアは、プログラマーにツールを提供します。たとえばテキスト・エディター、コンパイラー、リンカー、デバッガー、そコードを作成するためのその他ツールなどです。

アプリケーション・ソフトウェア(アプリケーションまたはアプリ)はユーザーのタスク実行を支援します。職場の生産性を上げるスイート、データ管理ソフトウェア、メディア・プレーヤー、セキュリティー・プログラムがその例です。アプリケーションはAmazon.comでのお買い物、Facebookでの交流、Instagramへの写真投稿に使われるようなウェブおよびモバイル・アプリケーションも指します。1

4つ目として考えられるのは、組み込みソフトウェアです。組み込みソフトウェアは通信ネットワーク、車、工業用ロボットなど、一般的にコンピューターと見なされない機械やデバイスの制御に使われます。こうしたデバイスやソフトウェアはモノのインターネット(IoT)の一部として接続される場合があります。2

ソフトウェア開発を主に行うのはプログラマー、ソフトウェア・エンジニア、ソフトウェア・デベロッパーです。これらの役割は相互に関連しており、重複する部分もあります。3者間の関係性は、開発を担う部署やコミュニティーで大きく異なります。

プログラマーまたはコーダーはソースコードを書き、コンピューターがデータベースのマージやオンライン注文の処理、通信の送信、検索の実行、文章や図表の表示といった特定のタスクを行うようプログラムします。通常、プログラマーはソフトウェア・デベロッパーやエンジニアの指示を理解した上で、C++やJavaなどのプログラミング言語を使用して作業します。

ソフトウェア・エンジニア は、エンジニアリングの原則を用いて問題解決のためのソフトウェアとシステムを構築します。特定の事例やクライアントの問題をただ解決するのではなく、モデリング言語とその他ツールを使って、一般的な方法で幅広い問題に適用できるソリューションを考案します。ソフトウェア・エンジニアリングのソリューションには一貫して科学的手法が用いられており、橋やエレベーターのように現実世界で機能するものでなくてはなりません。マイクロプロセッサー、センサー、ソフトウェアの性能が上がり、製品の情報処理機能が向上するにつれて、ソフトウェア・エンジニアの責任も大きくなっています。市場での差別化を図るためソフトウェアに依存する製品が増えていますが、それだけでなく、ソフトウェア開発は製品の機械的および電気的な開発との調整が必要です。

ソフトウェア・デベロッパーの役割はエンジニアほど定型通りではなく、コード記述を含め、具体的なプロジェクト領域に密接に関わる場合があります。同時に、ソフトウェア開発のライフサイクル全般を動かします。複数のチームにまたがって要件を機能に作り変え、開発チームと工程を管理し、ソフトウェアのテストと保守を実施することも含まれます。3

ソフトウェア開発の仕事は、コーダーや開発チームだけで行うものではありません。科学者、デバイス製造業者、ハードウェア・メーカーといった専門家も、もともとはソフトウェア・デベロッパーではありませんが、ソフトウェアのコードを作成します。また、ソフトウェアや半導体事業といった従来型のIT業界にも限定されません。Brookings Instituteによると(ibm.com外部へのリンク)、こうした事業は「ソフトウェア開発を行う企業の半分以下」となっています。

カスタム・ソフトウェア開発と市販ソフトウェア開発には重要な違いがあります。カスタム・ソフトウェア開発とは特定のユーザー、部門または組織に対してソフトウェアを設計、作成、展開、保守するプロセスです。対照的に、既製の商用ソフトウェア(COTS)は幅広い要件に対して設計されているので、パッケージ化して市販・配布できます。

DaaSで柔軟な職場を実現

サービスとしてのデスクトップ(Desktop as a Service、DaaS)をつかって企業がどのようにアプリケーションをオンプレミスに展開するのと同じレベルのパフォーマンスとセキュリティを達成できるかをご覧ください。

関連コンテンツ

ハイブリッドクラウドのためのガイドに登録する

ソフトウェア開発プロセスの各ステップ

ソフトウェアの開発には、一般的に以下のステップがあります。

  • 開発手法を選択して、ソフトウェア開発の各ステップに用いるフレームワークを確立します。プロジェクトの全体的な作業工程あるいはロードマップを描きます。開発手法にはアジャイル開発、DevOps、高速アプリケーション開発(RAD)、大規模アジャイル・フレームワーク(SAFe)、ウォーターフォールなどがあります。
  • 要件を収集して、ユーザーやその他の利害関係者が求めていることを理解し、記録します。
  • アーキテクチャーを選択または構築します。ソフトウェアはこの基礎構造の中で動作することになります。
  • 諸要件が提示する問題に対するソリューションを中心にデザイン開発を行います。プロセス・モデルやストーリーボードを作る場合が多いです。
  • SysMLやUMLなどのモデリング言語を利用したモデリング・ツールでモデルを構築し、初期の検証、試作、設計のシミュレーションを行います。
  • 適切なプログラミング言語でコードを作成します。ピアレビューやチームレビューを実施し、早期に問題を排除して、より迅速に質の高いソフトウェアを作成します。
  • テストはソフトウェアの設計とコーディングの一環として、事前に用意されたシナリオを使って行います。またアプリケーション上の負荷テストをシミュレーションするため、パフォーマンス・テストを実施します。
  • 設定と欠陥を管理してソフトウェアのあらゆるアーティファクト(要件、設計、コード、テスト)を理解し、別バージョンのソフトウェアを作成します。欠陥に対処し追跡するため、品質保証の優先順位とリリース基準を決めます。
  • ソフトウェアを導入して利用してもらい、ユーザーの課題への対応と解決を図ります。
  • 必要に応じて、既存のアプリケーションまたはデータから新規または更新版ソフトウェアにデータを移行します。
  • アプリケーションのライフサイクル全体における品質およびデリバリーの維持と、能力成熟度モデル(CMM)などのモデルによる開発プロセスの評価を目的として、プロジェクトを管理・測定します。

ソフトウェア開発プロセスの各ステップは、アプリケーション・ライフサイクル管理(ALM)に該当します。IBM® Engineering Managementソリューションは、機械、電気、ソフトウェアの開発を同時に管理できる、複数のALMを組み合わせたものです。

  • 要件分析と仕様
  • 設計と開発
  • テスト
  • デプロイメント
  • 保守とサポート

ソフトウェア開発プロセスの各ステップはライフサイクルのフェーズごとにグループ分けできますが、ライフサイクルで重要なのは、継続的な改善を可能にするために再循環する点です。たとえば、保守とサポートの段階で表面化したユーザーの課題は次のサイクルの始めに要件となり得ます。

ソフトウェア開発が重要である理由

ソフトウェア開発は広く浸透していることからも重要です。IBMのバイス・プレジデントでブロガーのDibbe Edwardsはこう指摘しています。「車から食器洗浄機、サーモスタットまで、IoTに接続する多くの製品において、ソフトウェアがカギとなる差別化要因として浮上しました」

その例を一部ご紹介します。

  • Soul Machines社(ibm.com外部へのリンク)では、カスタマー・サービスと効率を高める人工オンライン・アドバイザーを開発するために、ソフトウェアを活用しています。アドバイザーは人の顔、表情、声を持ち、顧客からの質問とニーズに対して賢く、親身になって、効率よく反応します。人の介入なしで顧客の問い合わせに答えられる割合は40%を超え、やり取りから学習して時間と共に改善されます。Soul Machines社は、IBM® Watson Assistantを活用して開発プロセスに人工知能(AI)機能を取り入れているので、約8~12週間で人工アドバイザーを開発し、展開できます。
  • 「これはレースです」とErik Bak-Mikkelsen氏は言います。「市場の状況に遅れを取らないようにする必要があります」Bak-Mikkelsen氏はcar2go(ibm.com外部へのリンク)のクラウド運用責任者で、自社のライドシェア・アプリと車両に新しい特徴や機能を追加することが、他社の先を走り続ける上で重要だということを理解しています。そのためcar2goは、開発業務をマネージドサービス・クラウドに移してDevOps開発モデルを採用しました。結果として開発サイクルが加速し、市場投入までの時間が短縮され、将来の成長に向けた拡張機能を獲得しました。
  • 送電線を扱う作業は命に関わる場合があります。作業員は安全を保つため、物理的なタグと南京錠で電気の「ロックアウト」を設定し、作業箇所に電力が入らないようにします。フランスの電力会社Enedis社(ibm.com外部へのリンク)は、IBM® Garage for Cloudを活用して、鍵とタグを取り付けて共有ネットワークにひも付けるソフトウェアを開発しました。タグと鍵は作業員の車から取り外されたことを毎回検知し、時間と地理的位置を伝えます。作業員が鍵を取り付けると、その位置をデジタル地図に記録します。安全確保とダウンタイムの短縮、修理の負担軽減のため、関係者は全員地図を共有します。IBM Cloud Garageの共同開発アプローチにより、Enedis社は3か月で現場使用に耐え得るプロトタイプを開発することができました。
効果的なソフトウェア開発の主な特徴

ソフトウェア開発をブランドの差別化や競争力の獲得に活用するには、ソフトウェアの展開、品質、効率を向上できる手法とテクノロジーに精通していることが求められます。

  • 人工知能(AI):AIを活用することで、ソフトウェアは人間の意思決定と学習を真似ることができます。ニューラル・ネットワーク、機械学習、自然言語処理、認識能力により、デベロッパーと企業はマーケットプレイスを破壊し、競争で大きく差をつける製品やサービスを提供する機会を得ます。IBM Watsonは、アプリケーション・プログラミング・インターフェース(API)を通じたアプリケーションの一部として、デベロッパーが人工知能サービスに接続し、活用できるようにします。IBM Watsonを利用して曖昧さ、不明なアクター、複合要件または否定要件、単位または許容範囲の欠落、不完全要件、具体化されていない数量を確認することで、製品要件を改善することもできます。
  • クラウドネイティブ開発: クラウドネイティブ開発はクラウド環境を利用するアプリケーションの構築方法です。クラウドネイティブ・アプリケーションは、あらゆるクラウド環境に統合できるよう設計された、マイクロサービスとして知られる個別の再利用可能なコンポーネントで構成されています。マイクロサービスは構成要素として機能し、多くの場合コンテナにパッケージ化されています。このアーキテクチャーにより、クラウドネイティブ・アプリケーションはクラウド環境を活用してアプリケーションの性能、柔軟性、拡張性を改善 することができます。
  • クラウドベース開発:IT組織がクラウドを利用してリソース管理の改善とコスト削減を試みているように、ソフトウェア開発組織もクラウドを活用しています。このように、クラウドは迅速かつ柔軟で費用対効果の高い統合開発環境(IDE)あるいはサービスとしてのプラットフォーム(PaaS)として利用できます。クラウドベース開発環境はコーディング、設計、統合、テスト、その他の開発機能をサポートできます。またAPI、マイクロサービス、DevOps、そのほか開発ツールやサービス、専門知識も利用できます。
  • ブロックチェーン: ブロックチェーンはデジタル上でリンクされた安全な台帳で、銀行、規制当局、そのほか仲介機関などの関係者からもたらされる脆弱性、そしてコストを取り除くものです。資本を自由に使えるようにし、プロセスを迅速化し、取引コストを削減するなどして、ビジネスを変革しつつあります。ブロックチェーンはソフトウェア開発に大きな機会をもたらします。デベロッパーは分散型台帳やオープンソースのHyperledger(ibm.com外部へのリンク)テクノロジーと連携し、ビジネスの運用方法を変革しようとしています。
  • ローコード:Forrester社はローコードを「プログラミングの代わりに視覚的で宣言的な技術を使用するアプリケーション開発のための製品やクラウド・サービスで、顧客はお金やトレーニングをあまり、あるいは全くかけずに利用できる...」と定義しています。4つまりコーディングの必要性を軽減し、ノンコーダーまたはシチズン・デベロッパーによる迅速でより低コストなアプリケーション構築、またはその支援を可能にする開発手法です。
  • 分析:データ・サイエンティスト、データ・デベロッパー、データ・エンジニアの年間求人数は、2020年までに70万件近くに上ると見られます。この需要が示すのは、企業にとって急増するデータからインサイトと価値を得ることがいかに重要かということです。そのため、ソフトウェア・デベロッパーはアプリケーションに高度な分析機能を統合しようとしています。クラウドベースのサービスとAPIにより、データ探索のガイド、予測分析の自動化、新たなインサイトを引き出し意思決定を向上させるダッシュボードの作成が容易になります。
  • モデルベース・システムズ・エンジニアリング(MBSE):MBSEではソフトウェア・モデリング言語を用いて、早期検証のためにソフトウェアの早期プロトタイプ作成、シミュレーション、分析を行います。MBSEで設計すると、プロジェクト要件を分析・詳細化して設計から実装まで迅速に進めることができます。
  • モバイル:ソフトウェア・デベロッパーにとって重要な能力は、ユーザー・エクスペリエンスを豊かにし、質を高めるデータと深くつながったモバイル・アプリを創出することです。Forrester社によると、「デジタル/モバイル顧客データを深く統合すると、顧客とブランドの関わり方に強い影響を及ぼす」ということが分かっています。

 

簡単な用語集
  • アジャイル開発は、要件を消費可能な機能に分割し、その機能を漸進型開発で迅速にデリバリーします。機能を継続的に展開するにあたって、フィードバックの循環が欠陥の発見と修正に役立ちます。
  • 能力成熟度モデル(CMM)は、ソフトウェア開発プロセスの習熟度を評価します。アドホック・アクションから定義済みのステップ、測定結果、最適化されたプロセスまでの進捗を追跡します。
  • 開発と運用を組み合わせたDevOpsは、ソフトウェアの設計、開発、デプロイメント、サポートにソフトウェア開発とIT運用を統合するアジャイルベースの手法です。
  • 高速アプリケーション開発(RAD)とは、設計とコード構築を1つの相互接続されたステップに凝縮する非線形な手法です。
  • 大規模アジャイル・フレームワーク(SAFe)は、アジャイル方法論をより規模の大きいソフトウェア開発チームや組織に広げる手段となります。
  • しばしば従来型のソフトウェア開発方法論とされるウォーターフォールは、設計、要件収集からデプロイメント、保守まで順に段階を踏む一連のステップです。
ソフトウェア開発のツールとソリューション
IBM® Cloud Pak for Applications

デプロイメントであれ、新しいクラウドネイティブ・アプリケーションの構築であれ、既存アプリケーションのリファクタリングや再プラットフォーム化などであれ、Cloud Pak for Applications(CP4Apps)がすべてをカバーします。

IBM Cloud Pak for Applicationsはこちら
IBM DevOps Automation

ソフトウェア配信プロセスを自動化して、生産性と運用効率を向上させます。

IBM DevOps Automationの詳細はこちら
IBM Engineering Lifecycle Management 

複雑なシステム開発を強化するためのライフサイクル管理ツールの機能を拡張することで、要件からシステム設計、ワークフロー、テスト管理にシームレスに移行できます。

IBM Engineering Lifecycle Managementの詳細はこちら
ソフトウェア開発の参考情報 IBMデベロッパーのソフトウェア開発

コード、コンテンツ、コミュニティーなど。

IBMデベロッパー・ニュースレター

サインアップして最も重要なトピックをお読みください。

ソフトウェア・デリバリーを成功させるための5つの重要なステップ

ソフトウェア開発ツールを通じて、複雑なビジネス・ニーズにスピードとアジリティーを提供します。

IBM Researchの出版物を読む

私たちのコンピューター・サイエンス研究は、オートメーション、情報処理、コンピューテーションを大きく進歩させる発見に重点を置いています。

詳細情報はこちら

IBM Engineering Lifecycle Management(ELM)は、システムとソフトウェア開発に対するエンドツーエンドの管理アプローチを採用するのに役立ちます。設計から実行までの複雑さを克服し、デジタル・スレッドを通じてチームを団結させ、モデリングと再利用を活用し、自動レポートからのインサイトを活用し、自信を持って大規模に運用できます。

ELMの詳細はこちら デモの予約