ソフトウェア開発とは
ソフトウェア開発の要点と、それが企業の改革と競争にどのように役立つかを説明します。
ソフトウェア開発ソリューションについての詳細はこちら
Side view portrait of contemporary African-American man looking at computer screen while working late at night writing code, copy space.
ソフトウェア開発とは

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

ソフトウェア自体は、コンピューターに何をすべきかを指示する一連の命令、あるいはプログラムです。 ハードウェアに依存せず、コンピューターをプログラム可能にします。 3つの基本タイプがあります:

システム・ソフトウェアは、オペレーティング・システム、ディスク管理、ユーティリティー、ハードウェア管理、その他の運用上の必需品などのコア機能を提供します。

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

アプリケーション・ソフトウェア(アプリケーションやアプリが)は、ユーザーがタスクを実行するのに役立ちます。 Officeの生産性スイート、データ管理ソフトウェア、メディア・プレーヤー、セキュリティー・プログラムなどがその例です。 アプリケーションには、Amazon.comでの買い物、Facebookとの交流、Instagramへの写真の投稿に使用されるようなWebやモバイルのアプリケーションもあります。1

4番目の可能性のあるタイプは、埋め込み式ソフトウェアです。 組み込みシステムソフトウェアは、通常はコンピューターとは見なされない機械やデバイス(通信ネットワーク、自動車、産業用ロボットなど)を制御するために使用されます。 これらのデバイスとそのソフトウェアは、モノのインターネット(IoT)の一部として接続できます。2

ソフトウェア開発は、主にプログラマー、ソフトウェア・エンジニア、ソフトウェア開発者によって行われます。 これらの役割は相互作用して重複し、それらの間のダイナミクスは開発部門やコミュニティーによって大きく異なります。

プログラマー、またはコーダーは、データベースのマージ、オンライン注文の処理、通信のルーティング、検索の実行、テキストやグラフィックの表示などの特定のタスクのためにコンピューターをプログラムするためのソースコードを記述します。 プログラマーは通常、ソフトウェア開発者やエンジニアからの指示を解釈し、C ++ や Java などのプログラミング言語を使用してそれらを実行します。

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

ソフトウェア開発者はエンジニアほど正式な役割を持たず、コードの記述など、特定のプロジェクト領域に密接に関与する可能性があります。 同時に、機能チーム全体で要件を機能に変換する作業、開発チームとプロセスの管理、ソフトウェアのテストとメンテナンスの実施など、ソフトウェア開発のライフサイクル全体を推進します。3

ソフトウェア開発の作業は、コーダーや開発チームに限定されていません。 科学者、デバイス製作者、ハードウェア・メーカーなどの専門家も、主にソフトウェア開発者ではありませんが、ソフトウェア・コードを作成します。 また、ソフトウェアや半導体ビジネスなどの従来の情報技術産業に限定されるものでもありません。 実際、ブルッキングス研究所(ibm.comの外部へのリンク)によれば、こうした企業が「ソフトウェア開発を行っている企業の半分未満を占めています」。

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


ソフトウェア開発プロセスの手順

開発ソフトウェアには、通常、次の手順が含まれます。

  • 方法論を選択して、ソフトウェア開発のステップが適用されるフレームワークを確立します。 また、プロジェクトの全体的な作業プロセスやロードマップについて説明します。 方法論には、アジャイル開発、DevOps、Rapid Application Development/迅速なアプリケーション開発(RAD)、Scaled Agile Framework/スケーリングされたアジャイル・フレームワーク(SAFe)、Waterfallなどがあります。 (用語集を参照してください。)
  • 要件を収集して、ユーザーやその他の利害関係者が何を必要としているかを理解して文書化します。
  • アーキテクチャーを選択または構築します。ソフトウェアが動作する基礎となる構造として使用するものです。
  • 設計を開発します。要件によって提示される問題の解決策を中心に開発し、多くの場合、プロセス・モデルとストーリー・ボードが関係します。
  • モデルを構築します。SysMLやUMLなどのモデリング言語を使用して、設計の早期検証、プロトタイピング、シミュレーションを実行するモデリング・ツールを使います。
  • コードを構築します。適切なプログラミング言語で構築します。 同僚やチームのレビューを含め、問題を早期に排除し、高品質のソフトウェアをより迅速に作成します。
  • テストします。ソフトウェアの設計とコーディングの一部として事前に計画されたシナリオでテストをし、さらに、アプリケーションの負荷テストをシミュレートするためのパフォーマンス・テストを実施します。
  • 構成と欠陥を管理して、すべてのソフトウェア成果物(要件、設計、コード、テスト)を理解し、ソフトウェアの個別のバージョンを構築します。 また、欠陥に対処して追跡するための品質保証の優先順位とリリース基準を確立します。
  • デプロイします。使用するソフトウェアをデプロイし、ユーザーの問題に対応して解決します。
  • データを移行します。必要に応じて、既存のアプリケーションやデータソースから、新しいソフトウェアや更新されたソフトウェアにデータを移行します。
  • プロジェクトを管理および測定して、アプリケーションのライフサイクル全体にわたって品質と配信を維持し、機能成熟度モデル(CMM)などのモデルを使用して開発プロセスを評価します。

ソフトウェア開発プロセスのステップは、 アプリケーションのライフサイクル管理 (ALM)に適合します。 IBM Engineering Managementソリューションは、ALMのスーパーセットであり、機械、電気、およびソフトウェアの並行開発の管理を可能にします。

  • 要件分析および規格
  • デザインと開発
  • テスト
  • デプロイメント
  • メンテナンスとサポート

ソフトウェア開発プロセスのステップは、ライフサイクルのフェーズにグループ化できますが、ライフサイクルの重要性は、リサイクルして継続的な改善を可能にすることです。 例えば、メンテナンスとサポートのフェーズで表面化するユーザーの問題は、次のサイクルの開始時に要件になる可能性があります。


ソフトウェア開発が重要な理由

ソフトウェア開発は、広く行き渡っているからという意味でも重要です。 IBMの副社長でありブロガーでもあるDibbe Edwards氏は、次のように指摘しています:「ソフトウェアは、自動車から洗濯機、サーモスタットに至るまで、多くの製品の主要な差別化要因として浮上してきました。モノのインターネットがそれらを接続するようになりました。」

いくつかの例:

  • Soul Machines(ibm.comの外部へのリンク) は、ソフトウェアを使用して、顧客サービスと効率を向上させる人工的なオンライン・アドバイザーを作成します。 アドバイザーは、お客様の質問やニーズに対して、インテリジェントに、共感を示し、効率的に反応する人間の顔、表情、声を持っています。 彼らは、人間の介入なしに顧客からの問い合わせの40%以上に答えることができ、時間の経過とともに改善するために彼らの相互作用から学びます。 IBM Watson Assistantを使用して人工知能(AI)機能を開発プロセスに組み込むと、Soul Machinesは、約8〜12週間で人工知能アドバイザーを作成して展開できます。
  • 「これはレースです」とErik Bak-Mikkelsen氏は言います。 「私たちは市場で起こっていることに遅れずについていく必要があります。」 Bak-Mikkelsenは、car2go(ibm.comの外部へのリンク)のクラウド運用責任者です。 彼は、car2goのライドシェアリング・アプリと車両に新しい機能を提供することが、先を行き、前進するための鍵であることを理解しています。 そのために、car2goは開発オペレーションをマネージド・サービス・クラウドに移行し、DevOps開発モデルを採用しました。 その結果、開発サイクルが加速し、市場投入までの時間が短縮され、将来の成長に合わせて拡張できるようになります。
  • 電力線での作業は致命的となる可能性があります。 安全を確保するために、エンジニアは物理的なタグと南京錠を使用して電気的な「ロックアウト」を設定し、作業場所から電力を迂回させます。 フランスのエネルギー会社EnedisEnedis(ibm.comの外部へのリンク) は、IBM Garage for Cloudと協力して、これらのロックとタグを計測し、それらを共有ネットワークに結び付けるソフトウェアを開発しました。 タグとロックは、エンジニアのバンから取り外されるたびに検出し、時間と地理的位置を伝えます。 エンジニアが錠を取り付けると、その位置がデジタル地図に記録されます。 すべての利害関係者は、安全性を確保し、ダウンタイムを削減し、修理を容易にするために、マップのビューを共有します。 Enedisは、IBM Cloud Garageの共同開発アプローチによって3か月でフィールド対応のプロトタイプを開発することができました。

効果的なソフトウェア開発の主な特徴

ソフトウェア開発を使用してブランドを差別化し、  競争上の優位性を獲得するには、ソフトウェアの展開、品質、および有効性を加速できる技術とテクノロジーに習熟している必要があります。

  • 人工知能(AI): AIは、ソフトウェアが人間の意思決定と学習をエミュレートできるようにします。 ニューラル・ネットワーク、機械学習、自然言語処理、コグニティブ機能は、開発者や企業に、市場を混乱させ、競争に勝つための製品やサービスを提供する機会を提供します。 IBM Watsonは、アプリケーション・プログラミング・インターフェースまたはAPIを介して、アプリケーションの一部として人工知能サービスに接続して使用する方法を開発者に提供します。 また、IBM Watsonを使用して、あいまいさ、不明確なアクター、複合または負の要件、不足している単位または許容範囲、不完全な要件、および不特定の数量をチェックすることにより、製品要件を改善することもできます。
  • クラウドネイティブの開発:クラウドネイティブの開発は、クラウド環境を活用したアプリケーション構築方法です。 クラウドネイティブ・アプリケーションは、任意のクラウド環境に統合できるよう設計された、マイクロサービスと呼ばれる個別に再利用可能なコンポーネントで構成されます。 これらのマイクロサービスは、ビルディング・ブロックとして機能し、多くの場合、コンテナ内でパッケージ化されます。 このアーキテクチャーにより、クラウドネイティブ・アプリケーションはクラウド環境を使用して、アプリケーションのパフォーマンス、柔軟性、および拡張性を向上させることができます
  • クラウドベースの開発:IT組織がリソース管理を改善し、コストを削減するためにクラウドに目を向けるのと同様、ソフトウェア開発組織も同じことをしています。 このように、クラウドは、高速で柔軟性があり、コスト効率の高い統合開発環境(IDE)またはサービスとしての開発プラットフォーム(Platform as a Service:PaaS)として使用できます。 クラウドベースの開発環境は、コーディング、設計、統合、テスト、およびその他の開発機能をサポートできます。 また、API、マイクロサービス、DevOps、その他の開発ツール、サービス、専門知識へのアクセスを提供することもできます。 
  • ブロックチェーン: ブロックチェーンは、銀行、規制機関、その他の仲介業者などの関係者によってもたらされる、コストと脆弱性を排除する、安全な、デジタルにリンクされた台帳です。 これは、資本の解放、プロセスの加速、取引コストの削減などにより、ビジネスを変革しています。  ブロックチェーンは、ソフトウェア開発に大きなチャンスをもたらします。 開発者は、分散型台帳とオープンソースのHyperledger(ibm.comの外部へのリンク) テクノロジーを使用して、ビジネスの運営方法を変更しています。
  • ローコード: Forrester社はローコードを、「アプリケーション開発用の製品やクラウド・サービスで、プログラミングの代わりに視覚的で宣言的な手法を採用し、顧客は低コストまたは無料でトレーニングを利用できる...」と定義しています。 4つまり、コーディングの必要性を減らし、コーダーでない人や市民開発者がアプリケーションを迅速かつ低コストで構築、あるいは構築できるようにする開発手法です。
  • 分析: データサイエンティスト、データ開発者、およびデータエンジニアの年間需要は、2020年までに約70万に達するでしょう。 この需要は、企業がデータの急増から洞察と価値を獲得することがいかに重要であるかを示しています。 したがって、ソフトウェア開発者は高度な分析機能をアプリケーションに統合しています。 クラウドベースのサービスとAPIにより、データ探索のガイド、予測分析の自動化、新しい洞察を提供し、意思決定を改善するダッシュボードの作成が簡単になります。
  • モデル・ベース・システム・エンジニアリング(MBSE) :MBSEでは、ソフトウェアのモデリング言語を使用して、ソフトウェア設計の初期のプロトタイピング、シミュレーション、および分析を実行し、初期の検証を行います。 MBSEで設計を構築すると、プロジェクト要件を分析および詳細化し、設計から実装に迅速に移行するのに役立ちます。  
  • モバイル: これらのエクスペリエンスの多くは、モバイル環境で発生します。 ソフトウェア開発者にとっての重要な機能は、ユーザー・エクスペリエンスを充実させ、向上させるデータへの深い接続を備えたモバイル・アプリを作成することです。 Forrester社は、「デジタル/モバイルの顧客データを深く統合することは、顧客がブランドとやり取りする方法に大きな影響を与える」ことを発見しました。

 


クイック用語集
  • アジャイル開発は、要件を消費可能な機能に分割し、段階的な開発を通じてそれらの機能を迅速に提供します。 フィードバック・ループは、機能が展開し続けるときに欠陥を見つけて修正するのに役立ちます。
  • 機能成熟度モデル(CMM)は、ソフトウェア開発プロセスの習熟度を評価します。 アドホック・アクションから定義されたステップ、測定結果および最適化されたプロセスまでの進行状況を追跡します。
  • DevOpsは、開発と運用を組み合わせたもので、ソフトウェア開発とIT運用をソフトウェアの設計、開発、展開、サポートに統合するアジャイル・ベースのアプローチです。

  • Rapid application development(RAD) は、設計とコード構築を1つの相互接続されたステップに凝縮する非線形アプローチです。

  • Scaled Agile Framework(SAFe)は、アジャイル手法をより大規模なソフトウェア開発チームまたは組織に拡張する方法を提供します。

  • Waterfall は、しばしば従来のソフトウェア開発方法論と見なされる、計画と要件の収集から導入と保守までの一連のカスケード線形ステップです。

ソフトウェア開発ツールとソリューション

IBM Engineering Systems Design Rhapsody

より高品質のソフトウェアとシステムをより迅速に提供するのに役立つ、モデリングと設計活動のための実証済みのソリューションです。


IBM Engineering Workflow Management

ソフトウェア・バージョン管理、ワークスペース管理、分散ソース管理、個人とチームを対象とする並列開発サポートは、成果物への変更を自動的に追跡することによって生産性を向上させます。 このソフトウェアは、ほぼ無制限の中断/再開機能を使用して、作業の中断に対処します。


IBM Engineering Lifecycle Optimization – 統合アダプター

ソフトウェアのバージョン管理を管理するために、IBM Engineering Lifecycle ManagementツールとGit、GitLib、GitHubなどのサードパーティー・ツールとの間の接続を提供します。