実装優先時の考慮点 その2 - 継続的統合とテスト自動化 -
プロトタイピングは前の記事で書いたように、ある程度実装してみないとわからないリスクを低減します。
特に進化的プロトタイピングは、アジャイル開発のように最終的なコードを漸増的(インクリメンタル/スパイラル)に開発していく方法で、リスクを低減しながら着実に開発を進めていきます。
特徴
その特徴はドキュメントの調査によってではなく、「実際に動かして確認する」ことです。
実装 => 確認 => フィードバック
を繰り返す事で、確実に動作する部分を増やしていきます。
その場しのぎのコードを実装するのではなく、きちんと考えられた使えるコードを実装して増やしていきます。また、機能の一部を作るのではなく、動作が確認できる単位で作り、ソフトウェアを進化させます。
継続的統合
使えるコードを増やすには、実装・確認・フィードバックの時間を確保しないといけません。実装した後のビルド、テスト、デプロイなど、動作させて確認できるまでに時間がかかるなら、使い捨てのプロトタイプで確認するか、繰り返しの回数を減らす方が効率的です。
しかし、それではソフトウェアを効率よく進化させられないので、実装以外の作業を自動化する必要が出てきます。実装・確認・フィードバックに関係ない作業にかかる時間やミスによる手戻りを減らして、本来必要な作業の時間を確保します。
継続的統合は作業を効率化するという側面で見られる事もあります。しかし、漸増的な実装で開発のリスクを減らするなら、確認までにかかる作業を継続的統合で自動化して、常に動作可能にすることは必然といえるでしょう。
テスト自動化
プロトタイピングの注意点の一つは、すでに実装した部分に引きずられる事です。アーキテクチャの見直しを避けていてもいつかは限界がきてしまいます。早めにあるべき姿を実現しておくべきです。
しかし、リファクタリングしてより良い構造を実現する際に、既存部分が動かなくなっては意味がありません。既存の機能を常に確認できるようにテストを自動化しておく方が良いでしょう。
また、漸増的な開発は、動作確認されたモジュールを積み上げていく作業です。信頼性の低いモジュールが混在していたなら、砂上の楼閣のようにいつか破綻します。
継続的に漸増的開発するなら、テストの自動化は必須であると言えるでしょう。
まとめ
アジャイル開発では継続的統合や自動テストが、あたり前のように行われています。これは先進的な技術者がアジャイル開発をしているという側面もあるかもしれません。
しかし、リスクを低減する目的で実装を優先しているなら、常に動作が確認できる継続的統合や、信頼性を常に確保してはリファクタリングを容易にするテストの自動化は必然です。
もちろん、継続的統合による生産性の向上や、テスト自動化による信頼性の向上は、アジャイル開発のような漸増的開発でなくても効果があります。
しかし、それらがなぜ必要になったかを考えれば、ラピッドプロトタイピングを取り入れる事や、漸増的に開発すべきところを切り出す事、さらには、全面的にアジャイル開発をする事、をきちんと検討しないといけない事がおわかりいただけるでしょう。
ソフトウェア開発のトラブルを減らす効果的な方法の一つは、リスクを低減する事です。開発中に生じる可能性のある問題を明確にし、適切なプロセスを構築する事が大切なのです。
« 実装優先時の考慮点 その1 - プロトタイピングとスパイクソリューション - | トップページ | 実装優先時の考慮点 その3 - 言語と環境の選択 - »
「私のアジャイル」カテゴリの記事
- One fact in one placeとチケット駆動開発 - Software Processes are Software, Too -(2021.12.21)
- マルチスレッド処理と進捗管理・配員・作業分割/割り当て- Software Processes are Software, Too -(2021.12.20)
- カプセル化と組織パターン - Software Processes are Software, Too -(2021.12.20)
- Greedy algorithmと2割8割の法則 - Software Processes are Software, Too -(2021.12.12)
- 「任せて、任せず」「魚を与えるのではなく"釣り"を教えよ」(2021.08.16)
« 実装優先時の考慮点 その1 - プロトタイピングとスパイクソリューション - | トップページ | 実装優先時の考慮点 その3 - 言語と環境の選択 - »
コメント