ソフトウェア開発のすべてに関する包括的なガイド
公開: 2020-08-13工場の生産現場とソフトウェア開発者のオフィスはどのくらい似ていますか?
コンピューターにコードを入力するプログラマーでいっぱいの部屋を想像してみてください。 彼らの出力を、工場の組み立てラインから組み立てられたウィジェットのように扱ったらどうなるでしょうか? 生産を最大化するものはここでも機能しますか? それとも、開発プロセスは他の工学分野に似ていますか?
ソフトウェア開発が始まって以来、プロジェクト マネージャーはこの問題を解決しようとしてきました。 これらの疑問から、ソフトウェア開発ライフ サイクルの定義が生まれました。
ソフトウェア開発とは?
ソフトウェアをゼロから作成するプロセスです。 コードを書くことは中心的な活動ですが、それだけではありません。
開発プロセスには、コードを書く前の構想と設計が含まれます。 計画は見落としがちです。 コードを書くのと同じように開発しているとは思えません。 しかし、重要な質問に最初に答えることが、完成した製品を強化します。 プロジェクトは追求する価値がありますか? もしそうなら、それについて最善の方法は何ですか? どのような機能が必要で、どのような機能があると便利ですか? 答えは、プロジェクトが成功する可能性を高めます。
手順は一定ですが、その適用はさまざまです。 その理由は、ソフトウェア開発が新しい分野であるからです。 エンジニアリング分野は、何百年もの歴史を経て成熟しています。 ソフトウェア開発は 1940 年代後半までさかのぼります。 まだまだ新しい学問です。 アジャイル手法はまだ 20 年しか経っていません。 それでも、それはソフトウェア作成の理論において最も影響力のある出来事の 1 つです。 とにかく、6 つのソフトウェア開発ライフ サイクル フェーズはすべてのシステムに共通です。
ソフトウェア開発ライフ サイクル (SDLC) の 6 つの段階
開発チームは、プロジェクト全体または 1 つの機能に対してソフトウェア開発ライフ サイクルを使用できます。 SDLC の使用の進化は、各ステップの長さを短縮することによってリスクを軽減することでした。 すぐに、さまざまな方法論について詳しく見ていきます。 まず、手順自体を調べてみましょう。
また、ステップ数またはその名前に関してバリアントが表示されることにも注意してください。 開発とテストのように、ステップがマージされることもあります。 また、計画が計画と分析になるなど、1 つのステップが 2 つに分かれている場合もあります。 私たちの場合、フェーズを明確に定義するこれらの 6 つに固執します。

1. 計画
計画フェーズは最も重要なステップです。 利害関係者は、プロジェクト自体の実現可能性を含むすべてを考慮する必要があります。 ここでプロジェクト全体を強制終了しても問題ありません。 健全な組織は、必要に応じて利害関係者に権限を与えます。 企業環境では、この段階でプログラマーが関与することは少なくなります。 製品所有者、ビジネス アナリスト、およびその他の利害関係者は、このステップでニーズを表明します。
2. 設計
計画フェーズは最も重要なステップです。 利害関係者は、プロジェクト自体の実現可能性を含むすべてを考慮する必要があります。 ここでプロジェクト全体を強制終了しても問題ありません。 健全な組織は、必要に応じて利害関係者に権限を与えます。 企業環境では、この段階でプログラマーが関与することは少なくなります。 製品所有者、ビジネス アナリスト、およびその他の利害関係者は、このステップでニーズを表明します。
3.開発
設計段階には、ユーザー エクスペリエンス (UX) の設計も含まれます。 アプリケーションにユーザー向けのコンポーネントがある場合、UX デザインは必須です。 これには、実在の人々が製品のモックアップと対話するのを見ることによるユーザー調査が含まれます。 これが開発フェーズではなく設計フェーズで発生する理由は、タイミングです。 ユーザー セッションには時間がかかります。 多くの場合、ビジネス関係者との議論は、収集されたデータからも行われます。
4. テスト
次に、開発チームはコードをテストします。 コード作成者とテスターは別の人でなければなりません。 さらに良いのは、非開発者の品質保証テスターです。 開発者は、ハッピー パス シナリオのみを考える傾向があります。 熱心な QA テストの専門家は、どうすればソフトウェアを壊すことができるかを考えるのが得意な傾向があります。 この方法で展開する前に、バグを見つける可能性が高くなります。 その結果、リリース時のソフトウェアがより安定します。
自動テストと手動テスト
多くの場合、単体テストと統合テストは自動化されています。 多くの場合、DevOps プラットフォームは、マスター ブランチにマージする前に、新しいコードに対してこれらのテストを実行します。
手動テストは時代遅れではありません。 自動テストは同じことを何度も繰り返します。 しかし、手動テストを行っている人は、テスト中に偶然バグを見つけることがあります。 その強みは手動テストのばらつきです。
単体テスト
単体テストはメソッドのみを検証し、それ以上は検証しません。 テスト対象の関数が境界です。 開発者は単体テストを作成し、一部の SDLC フレームワークでは単体テストが義務付けられています。 エクストリームプログラミングにはそれらが必要です。 また、テスト駆動開発についても規定しています。 これは、最初に単体テストを作成する方法です。 次に、実際のプログラム コードを記述します。
統合テスト
統合テストは、コードベースのセクションまたは機能をチェックします。 これらは通常、DevOps プラットフォームによって自動化され、実行されます。 彼らが検証するものは、複数の方法にまたがっています。 例として、API 呼び出しがデータベース内の新しいレコードを保持していることを確認しています。 これを、API メソッドも検証する単体テストと比較してください。 単体テストでは、データベースへの呼び出しが発生することのみを確認できます。 統合テストは、データが期待どおりにアプリケーションを通過したことを証明できます。
システムテスト
テストの最終的な形式は、完全なシステム テストです。 要約すると、単体テストは機能のみを検証します。 統合テストは機能を検証します。 しかし、システム テストでは、アプリケーション全体を 1 つのユニットとして扱います。 スモーク テストは、システム テストの簡単な形式です。 その中で、テスターは自然なユーザーと同じようにシステムとやり取りし、システムが期待どおりに動作することを確認します。 より厳密な完全なエンド ツー エンド システム テストとは対照的です。 フル システム テストでは、システムのすべての部分を 1 つのエンティティとしてチェックします。 また、一連の統合テストは、完全なシステム テストとして機能する場合があります。
5. 展開
デプロイ フェーズでは、テスト済みのコードを本番環境にプッシュします。 展開を自動化すると、信頼性が向上します。 また、本番環境へのデプロイを実践することで、スムーズなデプロイの可能性も高まります。 開発チームは、ステージング環境と呼ばれるテスト環境で練習します。 これは、製品版と同じである必要があります。 2 つの環境が類似しているほど、実践的な展開の価値が高くなります。
6. メンテナンス
SDLC のこの時点までのすべては、総所有コストの約 4 分の 1 にすぎません。 ソフトウェアの初期開発コストは、ビジネスが費やす金額の 25% です。 メンテナンス フェーズでは、総所有コストの約 75% がビジネスにかかります。 維持費の膨れ上がりを防ぐには、初期段階に注意を払う必要があります。 これは、より優れた技術設計、開発、およびより徹底的なテストを意味します。 代替案は技術的負債です。 実際の負債と同様に、時間の経過とともに高くなります。
5 つの主要なソフトウェア開発方法論
SDLC の手順は変更されていませんが、その実装と実行順序はさまざまです。 組織がソフトウェア開発プロセスを行う最も一般的な方法を見てみましょう。
1.アジャイル
アジャイルのユニークな点は、人に焦点を当てていることです。 アジャイル手法は、業界の注目を再び集めました。 以前は、製品、ソフトウェアに焦点が当てられていました。 アジャイルはそれに挑戦し、プロセスを実行する個人に焦点を当てました。 また、アジャイル マニフェスト以前は、エクストリーム プログラミング (XP) とスクラムにはつながりがありませんでした。 しかしその後、彼らの実践者はアジャイルの旗印の下で団結しました。
アジャイルはフレームワークそのものではありません。 フレームワークのためのフレームワークです。 その核心は、人に焦点を当て、迅速な反復を行うことです。 まさにその名の通り、アジャイルです。 うまくやれば、結果を達成する柔軟性があります。 プロセスが人を犠牲にして行われることは決してありません。
アジャイルのもう 1 つの重要なテナントは、反復的なアプローチです。 アイデアは、より短い時間で一連の作業を行うことです。 そうすれば、ビジネスは市場の変化により速く適応できます。 開発の方向性をすばやく変更できることが、アジャイルな理由です。 同時に、開発チームは各反復で行ったことから学び、改善することができます。 アジャイル チームは、反復のたびに回顧会議でこれを行います。

2.エクストリームプログラミング
エクストリーム プログラミング (しばしば XP と略される) は、1990 年代初頭に始まりました。 Martin Fowler は、アジャイル マニフェストの最初の署名者の 1 人です。 彼は、アジャイルが人気を得たのは XP フレームワークのおかげだと考えています。 さらに、アジャイル ソフトウェア開発を開始するには、これが最善の方法であると彼は主張しています。
XP は、そのアプローチからその名前を取得します。 それは、一般的な優れたソフトウェア プラクティスを採用し、それらを必要とします。 それが「エクストリーム」なのです。 XP では、単体テスト、ペア プログラミング、より頻繁なリリースなどが必要です。
XP がユニークな方法である理由は次のとおりです。
- 短い反復サイクル (一般的に 1 ~ 2 週間)
- 現在のイテレーションで作業項目を置き換えることへのオープン性 (スクラムでは許可されていないこと)
- 自動テストとペアプログラミングの重視
3.リーン
リーンは技術的にはアジャイルではありませんでしたが、実際にはリーンと似た感覚を持っています。 現在では、アジャイルの一部としてほとんどの人に受け入れられています。 その焦点は、従来のアジャイルとは異なります。 アジャイルマニフェストによると、「プロセスとツールに対する個人と相互作用」。 リーンは、メーカーよりもソフトウェアに重点を置いています。
そのルーツは、トヨタのリーン生産方式です。 これを定義する 7 つの部分を次に示します。 リーンの製造に精通している場合、これらは似ているように聞こえます。 彼らです:
- ムダをなくす
- 学習を増幅する
- 決定はできるだけ遅くする
- できるだけ早くお届け
- チームに力を与える
- 整合性を構築する
- 全体を最適化
4. スクラム
スクラムは最も人気のあるアジャイル手法です。 第 14 回 State of Agile レポートによると、ソフトウェア企業の 58% がスクラムを使用しています。 スカム ハイブリッドを含めると、パーセンテージは 84% に跳ね上がります。 なぜ最も人気があるのでしょうか。
答えは、スクラムとは、より短い時間でより多くの作業を完了することです。 それは企業にとって魅力的です。 スクラムの各反復は「スプリント」です。 名前はスピードの概念を強化します。 通常、スプリントの長さは 2 ~ 3 週間です。 スクラム チームがスプリントを計画したら、誰もそれを変更してはなりません。 新しい作業は、次のスプリントの開始まで待たなければなりません。 これには、ビジネス関係者の規律が必要です。 実際には、このスクラム ルールはしばしば違反されます。 チームが頻繁にスクラム ハイブリッドを行っていると報告するのはそのためです。
スクラムのもう 1 つの特徴は、スクラム マスターです。 これは、スプリントを目標どおりに進める責任者として指名されたチーム メンバーの 1 人です。 多くの場合、スクラム マスターは開発チームの開発者です。
スクラムの最も一般的な変種は、スクラムとカンバンのマッシュアップであるスクラムバンです。 かんばんは、リーンのような日本のトヨタの製造プロセスにルーツがあります。 ジャストインタイムで働けるシステムです。
作業の各項目は、それ自体が反復のようなものです。 開発者は、一度に 1 つのことにしか取り組みません。 ルールは、開発者ごとに 1 つの「進行中」のアイテムです。 この厳格な進行中の制限により、ボトルネックが明らかになります。 開発者はかんばんボードを介して進行中の作業項目を追跡します。 余談ですが、名前の由来です。 日本語でかんばんは「看板」を意味します。
5.滝
ウォーターフォール方式は、すべてのソフトウェア開発手法の中で最も初期のものです。 少なくとも数十年はアジャイルよりも先行しています。 この方法もその名前より古いです。
これは、企業が常に仕事をしてきた自然な方法です。 これは直線的なプロセスであり、最初から始めます。 まず、利害関係者が要件をまとめます。 彼らは機能のためにこれを行っていません。 いいえ、ビジネス関係者はプロジェクト全体を一度に調査します。 その後、作業が始まります。 開発者は、完了するまで反復せずにすべての作業を行います。
概念的に理解しやすいのはウォーターフォール方式です。 人は一度に 1 つのことを行います。 とはいえ、それはビジネスの成功にとって最もリスクが高いものです。 何かが目標から外れている場合、利害関係者はプロジェクトが完了するまでそれを修正できません。 その理由は、プロジェクトが完了するまで気付かれないからです。
ソフトウェアの 3 つのコア サブタイプ
完成したソフトウェアは、3 つのタイプのうちの 1 つです。 これらのタイプは、システム、プログラミング、およびアプリケーション ソフトウェアです。 例として、ケーキを焼く例を挙げてみましょう。 ミキサーまたはスパチュラは、プログラミング ソフトウェアです。 このアナロジーで、より多くのケーキやより多くのソフトウェア アプリケーションを作成できます。 ケーキを組み立てるとき、最下層はシステム ソフトウェアです。 それは基礎です。 これがないと、レイヤードケーキは作れません。 最上位層は、アプリケーション ソフトウェアになります。 それは、ほとんどのカジュアルな観察者に見えるものです。
システムソフトウェア
コンピュータのオペレーティング システムはシステム ソフトウェアです。 それはそれの有用性にとって重要です。 オペレーティング システムのないコンピュータを想像してみてください。 機械語を介してのみ対話することができます。 これは純粋な 2 進数で、1 と 0 だけです。 どのレベルのスケールでも作業するのは不可能であることがわかります。 システム ソフトウェアは、コンピュータの有用性を開きます。
Windows、macOS、および Linux は、システム ソフトウェアの最も一般的な例です。 デバイス ドライバーもシステム ソフトウェアです。 これらは、オペレーティング システムの基本機能を拡張します。 オペレーティング システムのないスマート デバイスは、ファームウェアを使用して機能を有効にします。 システムソフトウェアでもあります。
プログラミングソフトウェア
プログラミング ソフトウェアは、アプリケーション ソフトウェアのサブセットです。 開発者が新しいプログラムを作成するために使用するプログラムはすべて分類されます。 それらは、単純なテキスト エディターから複雑な統合開発環境 (IDE) にまで及びます。 ほとんどの開発者は、より複雑なプログラミング ソフトウェア ツールを好みます。 Microsoft の Visual Studio のようなプログラムは、開発のスピードアップに役立ちます。

アプリケーションソフトウェア
アプリケーション ソフトウェアが最も一般的なタイプです。 パソコンでいろいろなことができるソフトウェアです。 それはコンピュータを便利にします。 一般的な例は、Microsoft Word や Excel などのプログラムです。
クラウド ソフトウェアもこのカテゴリに分類されます。 Google Docs、Dropbox、さらには Instagram もアプリケーション ソフトウェアです。 何かがアプリケーション ソフトウェアであるかどうかについて混乱したことがある場合は、ここで簡単なテストを行います。 プログラムを実行するために何か他のものが必要ですか? Windows または Android にはありません。 それらはシステムソフトウェアです。 PowerPoint や Call of Duty のようなゲームでさえ、機能するために実行中の他のものを必要とします。つまり、それらはアプリケーション ソフトウェアです。 デバイス ドライバーとオペレーティング システムがなければ、実行できません。
結論
ソフトウェア開発の方法はまだ成熟しています。 ただし、使用する方法に関係なく、手順は同じです。 アジャイル チームはそれらをより迅速に反復することができ、ウォーターフォールの実践者は次から次へとゆっくりと移動します。 それでも、より優れたソフトウェアを構築するには、各ステップのプロセスを強化する必要があります。 それらは互いに構築されます。 ソフトウェア開発のライフ サイクルは、そのステップの 1 つがないわけではありません。 部分が全体を作る。
一歩でも抜けたらどうなるか考えてみてください。 あなたが作っているものを計画せずに? 設計がなければ、開発プロセスはでたらめになります。 開発ステップを除外することは不可能です。 テストを実施しないと、製品が期待どおりに機能しないことが保証されます。 配置がない場合、誰も製品を使用するためのアクセス権を持ちません。 メンテナンスされていないアプリケーションは使用されなくなります。 ソフトウェア製品の成功には、各ステップが重要です。