SDLC(ソフトウェア開発ライフサイクル)とは

アプリケーションのモダナイゼーション:ワークフローの3Dレンダリング

SDLC(ソフトウェア開発ライフサイクル)とは

SDLC(ソフトウェア開発ライフサイクル)とは、開発チームが高品質で費用対効果の高いソフトウェアシステムを構築、提供、維持するために用いる、体系的かつ反復的な手法です。

SDLCは、ソフトウェア開発を、明確で再現可能かつ相互に依存するフェーズに分割します。SDLCの各フェーズには、それぞれ次のフェーズを導く目的と成果物があります。SDLCの各フェーズを組み合わせることで、開発チームが利害関係者のニーズ、プロジェクト要件、顧客の期待に応えるソフトウェアを作成するためのロードマップが形成されます。

SDLCにはさまざまなモデルがあり、それぞれが独自の方法でSDLCの各フェーズに取り組みます。Waterfallモデルのように、フェーズを順番に完了していくモデルもあります。アジャイルのような、より反復的なプロセスでは、複数のフェーズを並行して進めることもできます。

ソフトウェア開発には、相反する利害関係者のニーズ、利用可能なリソース、ソフトウェアが適合するより大きなIT環境など、多くの要素のバランスを取ることが含まれます。SDLCは、これらの要素を管理し調整するためのフレームワークを提供し、より効率的な開発プロセスを促進します。

SDLCは、利害関係者がプロジェクトのコストや期間を見積もり、潜在的な課題を特定し、開発ライフサイクルの早期にリスク要因へ対処するのに役立ちます。また、開発の進捗を測定し、文書化と透明性を高め、ソフトウェアプロジェクトを組織の目標により適合させるのにも役立ちます。

The DX Leaders

AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。

ご登録いただきありがとうございます。

ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。

SDLCの7つのフェーズ

チームごとにSDLC手法の実装方法は異なる場合がありますが、実務者の間では、ソフトウェア開発ライフサイクルには7つの主要フェーズがあるという点で広く一致しています。

フェーズ

主な活動

成果物

1. 計画

プロジェクトの範囲、目標、要件の特定

当初のプロジェクト計画

2. 分析

プロジェクト要件に関するデータの収集とレビュー

完全に詳細な要件のドキュメンテーション

3. デザイン

プロジェクト・アーキテクチャーの明確化

ソフトウェア設計資料(SDD)

4. コーディング

初期コードを記述する

機能的なソフトウェア・プロトタイプ

5. テスト

コードをレビューしてバグを排除する

洗練された最適化されたソフトウェア

6. デプロイメント 

コードを本番環境にデプロイ

エンドユーザーが利用できるソフトウェア

7. 保守 

継続的な修正プログラムと改善

更新および最適化されたコード

SDLCの各フェーズは、それぞれ固有のタスクと目的で構成されます。全体として、これらのフェーズは標準化されたソフトウェア開発のロードマップを提供します。

1. 計画

プロジェクト計画フェーズでは、ソフトウェア開発プロジェクトの目標と範囲を確立します。

ソフトウェア開発チームは、プロジェクトの概要レベルの詳細についてブレインストーミングから始めます。チームは、ソフトウェアが解決する課題やユースケース、想定されるユーザー、ソフトウェアが他のアプリケーションやシステムとどのように連携するかといったアイデアに焦点を当てることがあります。

開発者は、ビジネスアナリスト、業務部門の管理者、社内外の顧客など、他の利害関係者から意見を求めることもあります。開発者は、要件の特定や新しい製品機能の試験に役立てるために、生成AI(gen AI)の調査やコーディングツールを利用することもできます。

全体として、計画フェーズの目的は、プロジェクトの目標を明確にすると同時に、プロジェクトに不要なものを特定することで、規模が不必要に膨らむのを防ぐことです。

計画フェーズでは、多くの場合、初期のソフトウェア要件仕様書(SRS)が作成されます。SRSには、ソフトウェアの機能、必要なリソース、想定されるリスク、プロジェクトのタイムラインが詳細に記載されます。

2. 分析

分析フェーズでは、開発チームがプロジェクトの要件に関する情報を収集・分析します。分析により、チームは計画フェーズで開始した作業を進め、概要レベルのアイデアから実践的な実装計画へと移行できます。

分析には、多くの場合、ユーザー要件の収集、市場調査と実現可能性テスト、プロトタイプの評価、リソースの割り当てが含まれます。利害関係者は、組織の業績データや顧客データ、過去の開発から得られた知見、企業のコンプライアンスおよびサイバーセキュリティー要件、利用可能なITリソースなどを共有するかもしれません。

ソフトウェア開発者は、これらすべての情報を処理するために生成AIを活用する場合もあるでしょう。例えば、生成AIツールは、ユーザーからのフィードバックの傾向を特定したり、提案された機能に潜在的なコンプライアンス問題がないかを警告したりできます。

分析フェーズの終わりには、プロジェクトマネージャーと開発チームが、プロジェクトの範囲、機能的および技術的仕様、そしてプロジェクトのタスクやワークフローの構成方法を完全に把握しています。

3. デザイン

設計フェーズでは、プロジェクトのアーキテクチャーを定義します。主な手順には、ソフトウェアのナビゲーション、ユーザー・インターフェース、データベース設計などの概要策定が含まれます。

ソフトウェア・エンジニアは、要件を確認し、望ましいソフトウェアを構築する最適な方法を検討します。例えば、ソフトウェアが、組織の既存のアプリやサービスの環境において、上流および下流の両方でどのように適合し、また他にどのような依存関係を持つかを検討します。

開発チームは、設計フェーズにおいてサイバーセキュリティー上の懸念に対処し始める場合もあり、脅威モデリング演習を通じてソフトウェアの潜在的なリスクを特定します。例えば、ID盗難が重大なリスクであると判断された場合、チームは強力な認証対策を設計に組み込む必要があると認識します。

多くの新しいソフトウェア・アプリケーションは、マイクロサービス・アーキテクチャーを採用しています。これは、1つのアプリケーションを多数の小さく疎結合で独立してデプロイ可能なコンポーネントやサービスで構成するクラウドネイティブなアプローチです。

開発の流れを整理するために、ソフトウェア・デベロッパーはモジュール型設計を採用する場合があります。ソフトウェア・モジュールは、特定の機能を実行する自己完結型のコード単位です。これらのモジュールを接続して、より大きなソフトウェアを構築することがあります。モジュール型設計により、開発者は既存のモジュールを再利用し、ソフトウェアの複数部分を同時に開発できるため、ボトルネックの削減につながります。

設計フェーズの最終段階では、初期プロトタイプまたは複数のプロトタイプが作成され、利害関係者やエンドユーザーに提示してフィードバックを求めることがよくあります。生成AIは、プロトタイプの作成を加速できる可能性があります。例えば、開発者が詳細な機能設計や要件をAIツールに入力し、ソフトウェアのコードの初稿を生成させることができます。

設計フェーズの作業はソフトウェア設計書(SDD)にまとめられ、コーディング時に使用するロードマップとして開発者に引き継がれます。

4. コーディング

コーディングフェーズ、または開発フェーズでは、チームがSDD、SRS、およびこれまでのフェーズで作成されたその他のガイドラインに基づき、コードの記述とソフトウェアの構築を開始します。

これらの文書は、JavaTMやC++など、適切なプログラミング言語を選択する際にソフトウェア・デベロッパーを支援し、プロジェクト・マネージャーがプロジェクトをより小さく個別のコーディング作業に分割するのにも役立ちます。

このフェーズには、Webページやアプリケーション・プログラミング・インターフェース(API)など、ソフトウェアが正常に機能するために必要な追加のシステムやインターフェースの構築も含まれます。

採用しているSDLCモデルによっては、開発段階でコード・レビューやその他のテストを実施するチームもあります。これらのテストは、ソフトウェア開発ライフサイクルのより早い段階でバグやその他の脆弱性を特定するのに役立ちます。

現在では、一部の開発者が生成AIを利用してコード作成を支援し、開発時間を短縮しています。例えば、「バイブ・コーディング」では、開発者がソフトウェアに実行させたい内容を平易なテキストで記述し、AIツールが適切なコード・スニペットを生成します。開発者は、多くの場合、このコードを出発点としてさらに洗練させます。

5. テスト

テストフェーズは、開発チームが機能するソフトウェアを作成した後に開始されます。このフェーズでは、チームはバグを排除し、最終製品を改善する機会を探ります。

品質保証チームは、単体テスト、統合テスト、システムテスト、受け入れテスト、その他の各種テストを実施し、ソフトウェアのすべての部分が意図したとおりに動作することを確認します。これらのテストは、ソフトウェアがユーザーおよびビジネス要件を満たし、組織のより広範なIT環境内で確実に動作するようにします。

テスターはまた、ソフトウェアにセキュリティー上の脆弱性がないかを精査し、その発生時期と方法を特定し、結果を文書化します。

開発者はテスト結果を基にバグを修正し、改善を実施したうえで、再度テストのためにソフトウェアを戻します。

ソフトウェア開発チームは、多くの場合、手動テストと自動ソフトウェア・テストの両方を使用します。AIツールは、テスト・ケースの生成や、テスト失敗のパターン分析による根本原因の特定など、多くのテスト・プロセスを効率化できます。

多くのSDLCモデルでは、継続的テストが採用されています。この手法では、テストはSDLCの単一のフェーズに限定されません。むしろ、コードはソフトウェア開発プロセス全体を通してテストされます。

6. デプロイメント

展開フェーズでは、完成度の高いソフトウェアが本番環境に展開され、ユーザーが利用できるようになります。

このフェーズの目的は、単にソフトウェアをユーザーの手に届けることだけではありません。開発者は、ユーザーが新しいソフトウェアの使い方を理解できること、そしてユーザー・エクスペリエンスワークフローへの影響を最小限に抑えて導入できることを確認したいと考えます。

開発者は、ソフトウェアを段階的に展開することがあります。例えば、限定的なユーザーグループに初期バージョンをテストしてもらうベータ版リリースを行ったうえで、一般公開に移行します。この方法により、ソフトウェアが一般提供(GA)に至る前に、実際の環境でどのように動作するかを確認できます。ソフトウェア・チームは、マニュアルを作成したり、トレーニングを実施したり、ユーザー向けにオンサイト・サポートを提供したりすることもあります。

7. 保守

ソフトウェアがリリースされた後も、SDLCは継続します。保守フェーズは、ソフトウェアチームがリリース後に行う作業を指し、ソフトウェアの継続的な運用を確保します。具体的には、アップデートや最適化の提供、予期しない変更への対応、パッチのテスト、新しいユースケースへの対応、ユーザーが発見したバグの修正などが含まれます。

継続的な保守とサポートは、ソフトウェアの長期的な運用を維持するために不可欠です。家の維持管理のようなものだと考えるとよいでしょう。時間が経つと、小さな部分が誤使用されたり、故障したりします。それらは順次交換され、場合によっては改良されることもあります。

一部の開発モデル、例えばDevOpsモデルでは、開発(Dev)チームとIT運用(Ops)チームが継続的インテグレーションおよび継続的デプロイ(CI/CD)を活用します。コードは作成されると同時にコードベースに継続的に追加され、継続的にテストされ、自動的に本番環境へデプロイされます。DevOpsでは、保守は明確なフェーズではなく、継続的に行われる活動です。

アプリケーション開発

さあ、クラウドでエンタープライズ・アプリケーション開発を始めましょう

この動画では、Peter Haumer博士が、IBM Z Open Editor、IBM Wazi、Zoweなどのさまざまなコンポーネントとプラクティスを実演しながら、ハイブリッドクラウドでの最新エンタープライズ・アプリケーション開発について説明します。

一般的なSDLCモデル

SDLCにはさまざまな種類があります。代表的なSDLCモデルには以下のものがあります。

  • Waterfall
  • Vモデル
  • アジャイル
  • Lean
  • 反復型
  • Spiral
  • Big Bang
  • ラピッド・アプリケーション開発(RAD)

適切なSDLCモデルの選択は、さまざまな要素によって決まります。プロジェクトの要件は明確に定義されていますか、それとも開発プロセス中に変更される可能性がありますか。プロジェクトの複雑さはどの程度ですか。開発チームの経験値はどのくらいですか。これらの質問に答えることで、関係者はプロジェクトに最も適したモデルを選ぶ手助けができます。

Waterfall

Waterfallモデルは、1つの工程を完了してから次の工程に進む、線形かつ順序的なソフトウェア開発モデルです。このモデルは構造化され予測可能なプロセスを提供し、利害関係者が主要なマイルストーンのレビュー時のみ関与したい、要件が明確で安定したプロジェクトに適しています。

このモデルは各フェーズを完了してから次のフェーズに進む必要があるため、柔軟性に乏しいです。そのため、完了した前のフェーズの作業を修正するのは難しく、時間がかかる場合があります。

Waterfallモデルは現在では過去ほど一般的ではありませんが、多くの後続のSDLCモデルはこれを土台として開発されました。

Vモデル

VモデルV字型モデル)は、Waterfallモデルの変種であり、「検証・妥当性確認モデル」と呼ばれることもあります。Vモデルでは、SDLCの各フェーズに対応するテストフェーズが設けられています。

頻繁なテストによりバグを早期に排除できますが、線形構造のため、Vモデル(Waterfallモデル同様)は他の手法に比べて柔軟性が低くなります。しかし、要件が安定しており、頻繁なテストが必要なソフトウェアには適しています。

アジャイル

アジャイル・モデルは、継続的な改善と開発サイクル(しばしば「スプリント」と呼ばれる)に基づいており、開発者は定期的に小さな段階的な変更を行い、リリースします。これは、顧客が頻繁に進捗の議論やレビューに参加する意欲と能力があるプロジェクトに適しています。

アジャイル開発は、変化する要求や要件に柔軟に対応できるため、開発プロセスの途中で問題をより容易に特定できます。この柔軟性は、アジャイル開発の大きなひとつのメリットをもたらします。つまり、開発チームは、問題が大きくなる前に対処することができます。

アジャイル手法の派生型は、「フレームワーク」と呼ばれることもあり、開発チーム内の役割を定めてプロセスをさらに効率化します。アジャイル手法で最も一般的なフレームワークの2つは、スクラムとカンバンです。(詳細については、「SDLC、アジャイル、スクラム」を参照してください)。

Lean

Lean(またはリーン)モデルは、製造業の原則と手法をソフトウェア開発に適用し、SDLCのあらゆる段階で無駄を削減します。

リーンは、開発の過程でビジネスプロセスを継続的に改善することを目的とします。チームは開発の各段階で高い品質基準を維持しつつ、短期的な目標を定期的に設定します。

余分な作業を削減し、プロセスを迅速化するために、リーンは反復と迅速なフィードバック・ループを重視します。このモデルは、意思決定における官僚的なプロセスを排除し、正確なデータが揃うまで意思決定の実行を遅らせます。

反復型

反復モデルでは、ソフトウェアの初期バージョン、つまり最小限の実用的製品(MVP)を素早く作成し、その後、連続するバージョンで迅速に改善していきます。このモデルは、小さな目標から始め、そこからソフトウェアを徐々に拡張して構築していくことに重点を置きます。

Spiral

Spiralモデルでは、「目的の設定」「リソースとリスクの分析」「開発とテスト」「次の反復に向けた計画」の4つのフェーズが繰り返し行われるため、「Spiral(スパイラル)」という名前が付いています。

これら4つのフェーズが定期的に繰り返されることで、修正の機会が何度も生まれます。そのため、頻繁な変更が予想される高リスクまたは複雑なプロジェクトに、このモデルは最適です。

Big bang

Big Bangは、ソフトウェア開発の非公式で構造化されていない手法であり、通常のSDLCに関連する厳密なモデル定義がありません。

ビッグバン理論のように、このモデルは何もない状態から始まります。計画や要件分析は行いません。高リスクと考えられていますが、パラメーターが自明で詳細な計画や管理が不要な小規模プロジェクトでは、Big Bangモデルがうまく機能します。代わりに、Big Bangモデルでは、開発中の臨時のソフトウェア更新に対して、テスターやユーザーからのフィードバックに依存します。

ラピッド・アプリケーション開発(RAD)

モデル名が示すように、ラピッド・アプリケーション開発(RAD)は、長期的な計画期間ではなく、迅速なプロトタイピングとユーザーのフィードバックに依存します。この構造により、ラピッドアプリケーション開発のチームは、新しいユーザーのニーズや要望に素早く対応することができます。

Big Bangモデルと似ていますが、RADでは進捗をより定期的に追跡し、ユーザーや顧客が意見を反映できる機会も定期的に設けられます。この追加の構造により、RADは、より大規模で複雑なプロジェクトにも適用可能となります。

DevOpsとSDLC

DevOpsは、ソフトウェア開発チームとIT運用チームの作業を統合・自動化するソフトウェア開発手法です。DevOpsのライフサイクルには独自のステップがあり、SDLCのステップと類似しています。しかし、DevOpsではSDLCのステップを再構成し、ソフトウェア開発と改善のための継続的なサイクルを作り出します。

DevOpsアプローチの基本原則は、共同作業、自動化、および継続的インテグレーション継続的デリバリー(CI/CD)です。DevOpsはソフトウェア開発プロセス全体に対応しているため、それ自体が独自のソフトウェア開発ライフサイクルとみなされることもあります。

しかし、DevOpsはそれだけにとどまらず、共有責任と協力を重視する文化的・組織的な変革も含んでいます。重要なのは、 DevOpsは単一のモデル ではなく、プラクティス、ツール、文化的哲学の組み合わせであることです。

DevOpsは、ソフトウェア開発プロセスの各フェーズをプロジェクト全体で継続的に行うことで、SDLCの硬直性に対応します。個別のステップに限定されるのではなく、計画、コーディング、テスト、デプロイ、保守、監視のすべてが、製品のライフサイクル全体で継続して行われます。その結果、ソフトウェアが頻繁な更新によって改善される、継続的デリバリーのパイプラインが実現します。

DevSecOpsとSDLC

DevSecOps(「セキュアDevOps」とも呼ばれることがあります)は、DevOpsモデルに自動化されたセキュリティー・テストやセキュリティー実践を統合した手法です。従来のソフトウェア開発ではセキュリティー・テストを独立したフェーズとして扱いますが、DevSecOpsではSDLCのすべてのフェーズにセキュリティーの検討事項を組み込みます。

コード・レビューやペネトレーション・テストなどのセキュリティー・テストを開発ライフサイクル全体に組み込むことで、プロセスの後半で発見される脆弱性などによる遅延を回避できます。リスク・マネジメントの課題に早期に対応し、よりセキュアなプログラムを作成し、脆弱性の修正を加速させ、コスト効率の高いソフトウェアを提供できます。

SDLC、アジャイル、スクラム、カンバン

アジャイル・モデル

 

アジャイル・モデルは、協力、継続的なデリバリー、顧客からのフィードバックを重視するため、最も人気のあるSDLCモデルの1つです。この反復型手法では、大規模なプロジェクトをタイムボックス化された「スプリント」に分割します。スプリントとは、短期間で完了することを目的とした、明確な目標を持つ小さなタスクのことです。この手法の目的は、開発プロセス中にチームを機能重視で進めさせ、問題を素早く特定し、変化するユーザーの要件に迅速に対応できるようにすることです。

スクラム

 

スクラムは、一部の開発チームがソフトウェア開発プロセスに適用するアジャイル・プロジェクト管理フレームワークです。その名前はラグビーというスポーツに由来しています。ラグビーでは、ボールを持った後にプレーを再開する方法であり、選手同士が団結して取り組むことが求められます。アジャイル・フレームワークでは、スクラムはチームメンバーに対し、チームワークとオープンな協力を優先する統合的なユニットとして行動することを求めます。

スクラム・フレームワークでは、開発チームは小さなユニットに分割され、それぞれに「スクラム・リーダー」が率います。スクラム・リーダーはプロダクト・オーナーに報告します。プロダクト・オーナーは、スクラムチーム間の連絡窓口としても機能します。各小規模チームは、各スプリントで割り当てられたタスクに対して完全な責任を負います。この責任範囲の明確化により、スクラム・チームは他の利害関係者からのフィードバックを待つことなく、柔軟かつ創造的に対応できるようになります。

カンバン

 

カンバン(日本語で「看板」の意)は、もう1つの一般的なアジャイル・フレームワークです。スクラムがタイムボックス化された期間で作業するのに対し、カンバンは継続的なワークフローで進めます。必要なタスクはすべてカンバン・ボード上に視覚的に表示され、チームメンバー全員が残作業を把握し、次のステップの優先順位を決められるようになっています。ボードにより、各タスクが完了するたびにチームメンバーがすぐに次のステップに移ることが容易になります。

SDLC のメリット

SDLCは開発チームに標準化された構造と再現可能なプロセスを提供することで、高品質なソフトウェアを安定して作成しやすくします。SDLCのメリットは次のとおりです。

  • より良いソフトウェア
  • 生産性の向上
  • リスクの最小化
  • プロジェクトの透明性の向上
  • コラボレーションの強化
  • より効率的な参考情報管理
  • 顧客満足度の向上

より良いソフトウェア

SDLCは、チームが複雑なソフトウェア開発プロジェクトを、予定された期間とコスト見積もりの範囲内で完了させるための指針を提供します。さらに、SDLCはプロセスの一環としてテストと品質保証を重視しており、製品全体およびコードの品質を向上させます。

生産性の向上

SDLCの構造は、プロジェクトを効率化し、推測に頼る作業を排除するのに役立ちます。各フェーズ間の進行を指示する明確なドキュメントがあることで、SDLCはソフトウェアの開発期間を短縮し、開発生産性を向上させる可能性があります。

リスクの最小化

SDLCは、組織がプロジェクトのリスクを予測し、管理するのに役立ちます。一部のSDLCモデルでは、リスク評価が開発プロセス全体を通じて継続的に行われます。開発チームは、ソフトウェア開発ライフサイクルの早い段階でリスクを特定し、小さな問題が大きくなる前に軽減することができます。

プロジェクトの透明性の向上

SDLCは、標準化されたドキュメントとオープンなコミュニケーションを通じて透明性を促進します。

ほとんどのSDLCモデルには、利害関係者に対して、既に達成されたこと、これから達成すべきこと、および自身の担当範囲を伝えるための定義されたプロセスがあります。この情報をもとに、利害関係者はこれまでの作業内容を理解し、自身のタスクをより効果的に完了させることができます。

コラボレーションの強化

SDLCの透明性は、より高いレベルでの協力を促進することにもつながります。利害関係者は、目標や課題について合意し、オープンにコミュニケーションを図ることができます。一部のモデルや手法では、チーム・メンバーが小規模で高度に協力的なグループを形成し、開発上の課題に対する創造的な解決策を見つけることが奨励されます。

リソース管理の効率化

開発全体のコストを見積もることは、SDLCプロセスの重要な部分です。利害関係者は、開発開始前にプロジェクト完了に必要なリソースを把握できます。事前にリソースの要件を計画することで、無駄を減らし、プロジェクトを予定どおり、予算内で進めやすくなります。

顧客満足度の向上

SDLCは、ソフトウェアを厳密に計画・構築・テストするためのロードマップとして機能します。このロードマップにより、より焦点を絞った開発ライフサイクルが可能になり、機能の肥大化を抑え、ソフトウェアの使いやすさを向上させ、組織の既存のIT環境にソフトウェアが適合することを支援できます。

十分にテストされたソフトウェアは、導入時のバグも少なくなるはずです。

SDLCの一般的な課題

以下は、SDLCプロジェクトの成功を複雑化させたり、場合によっては危険にさらしたりする可能性のある課題のいくつかです。

  • プロジェクトの範囲内に限定
  • 要件の定義が不十分
  • テストの最適なレベルの決定
  • ソフトウェアの更新と保守プロセスの保護

プロジェクトの範囲内に限定

スコープの膨張—プロジェクトの要件が当初の計画を超えて拡大すること—は、ソフトウェア開発チームが予算を超過したり、実質的なメリットの少ない追加作業を強いられたりする原因になります。こうした追加要件は、多くの場合ソフトウェアの本来の目的に寄与せず、開発の最適な方向性を逸らす可能性さえあります。

完璧を追い求めるあまり、プロジェクトの範囲が歪められることもあります。非常に重要なソフトウェアアプリケーションではほぼ完璧であることが求められる場合もありますが、ほとんどのソフトウェア開発ライフサイクルにおいては、完璧を追い求めることが「十分に良い」を妨げる要因となります。完全ではなくても機能するリリースであれば、市場投入をより迅速に行え、その後の運用保守での反復的な改善を通じて向上させることができます。

要件の定義が不十分

チームがプロジェクト要件を事前に十分に分析・理解できない場合、ソフトウェアの実際のニーズを把握するまでに、多くの無駄な作業サイクルを繰り返すことになりかねません。これにより、リリースが大幅に遅れ、プロジェクトのコストが増加する可能性があります。

テストの最適なレベルの決定

ソフトウェアのテストは、システム開発費用のほぼ33%を占める場合があります。アウトプットを早めコストを削減するために、組織がテストを制限すると、未発見のバグや性能における問題がエンドユーザーに大きな問題を引き起こす際に、その代償を払うことになります。

逆に、発売前に必要以上のテストを行うことも問題となるでしょう。すべてのバグを取り除こうとするあまり、開発チームが不要なテストを繰り返してソフトウェアのリリースを遅らせてしまうことがあります。

ソフトウェアの更新と保守プロセスの保護

IBM® X-Force脅威インテリジェンス・インデックスによると、サプライチェーン攻撃、つまりサイバー犯罪者が複数の組織に影響を与えるために第三者ベンダーを戦略的に狙う攻撃が増加しています。

ソフトウェアベンダーにおける一般的な攻撃手法の一つは、正規のアップデートの代わりにマルウェアを拡散させるためにソフトウェアの更新プロセスを乗っ取ることです。例えば、2020年にソフトウェア・ベンダーであるSolarWinds社がハッキングされ、悪意のある攻撃者がソフトウェア・アップデートを装って顧客にマルウェアを配布しました。このマルウェアにより、SolarWinds社のサービスを利用して、財務省、司法省、国務省を含むさまざまな米国政府機関の機密データにアクセスすることができました。

開発チームは、運用後の保守やアップデートの際に、アプリケーション・セキュリティーの対策を考慮する必要があります。誤った手に渡ると、これらのプロセスは甚大な被害をもたらす武器となりえます。

SDLCにおけるAI

米国電気電子学会(IEEE)の報告によると、産業を問わず35%の組織が、ソフトウェア開発を支援または加速するために人工知能(AI)を活用しています。しかし、AIをSDLCに組み込むことには、いくつかの課題も伴います。

多くの開発チームは、単なる自動化以上の効果を得るため、生成AIツールをSDLCのすべての段階に統合しています。例えば、生成AIのコーディングツールは、ソフトウェアのプロトタイプを作成したり、再利用可能なコードスニペットを生成したり、開発者が自分のコードを洗練させる手助けをしたりできます。また、コード内のエラーを検出・解説したり、テストデータを分析してソフトウェアのパフォーマンスや不具合の傾向・パターンを特定したりすることも可能です。

しかし、AIツールには多くの可能性がある一方で、リスクも存在します。AIツールは誤りを犯したり、最適化されていないコードを書いたりする可能性があります。開発者がAIツールによって生成されたすべてのコードを慎重に確認しない場合、ソフトウェア開発ライフサイクルの後半になってようやく発覚する、コストのかかるバグを生む可能性があります。

品質と速度のバランスを取ることも課題となりえます。開発者はAIツールを使うことでコードをより速く書けるようになり、SDLCのスピード向上につながる可能性があります。しかし、これらのアウトプットの品質を確保するには、多大な人的監視や検証が必要となり、場合によっては時間短縮の効果が相殺されることもあります。ここでの課題は、AIによるスピードとソフトウェア品質の高い基準を維持することの間で、適切なバランスを見つけることです。

注文管理に関連する各種チャートやグラフが表示されたダッシュボードの製品画面。
関連ソリューション
IBMのエンタープライズ向けJavaアプリケーション・サービス

Javaアプリケーションを開発および配信するためのフルマネージドのシングルテナント・サービス。

Javaアプリの詳細はこちら
DevOpsソリューション

DevOpsソフトウェアとツールを使用して、複数のデバイスや環境でクラウドネイティブ・アプリケーションを構築、デプロイ、管理します。

DevOpsソリューションの詳細はこちら
エンタープライズ・アプリケーション開発サービス

クラウド・アプリケーション開発は、一度構築すれば、迅速に反復し、どこにでもデプロイできます。

アプリケーション開発サービス
次のステップ

IBM Cloudアプリケーション開発コンサルティング・サービスは、クラウド戦略を合理化するための専門家のガイダンスと革新的なソリューションを提供します。IBMのクラウドおよび開発のエキスパートと提携して、アプリケーションをモダナイズ、拡張、高速化し、ビジネスに変革をもたらします。

アプリケーション開発サービスの詳細はこちら IBM Cloudを無料で構築開始