アジャイルガイド · ソフトウェア以外のアジャイル
アジャイルソフトウェア開発の仕組み:プラクティスとベストプラクティス
アジャイルはソフトウェア開発から始まりました。チームは短いイテレーションで動くソフトウェアを提供し、要求が変化しても品質を高く保つエンジニアリングプラクティスがそれを支えます。
要点
- アジャイルなソフトウェアチームは、短いイテレーションで動くソフトウェアを提供します。
- TDD、CI/CD、コードレビュー、リファクタリングにより、変化の中でも品質を高く保ちます。
- DevOpsはアジャイルをリリースと運用にまで広げます。
開発サイクル
- プロダクトオーナーがユーザーストーリーのバックログを順序付けます。
- なお、 スプリントプランニングで、開発者はストーリーを選び、タスクに分解します。
- 開発者はコードと自動テストを一緒に書きます。
- コードはレビューされ、共有のメインブランチに頻繁にマージされます。
- 継続的インテグレーションは、すべての変更を自動的にビルドしてテストします。
- 完了したストーリーはスプリントレビューでデモされてリリースされます。1日に何度もリリースされることもあります。
より広いプロセスについては アジャイル開発ライフサイクル をご覧ください。
中核となるエンジニアリングプラクティス
| プラクティス | 内容 | 重要な理由 |
|---|---|---|
| テスト駆動開発(TDD) | 失敗するテストを書き、次にそれを通すコードを書き、その後リファクタリングする | 欠陥が少なく、より良い設計 |
| 継続的インテグレーション(CI) | 少なくとも毎日コードをマージしてテストする | 統合の問題を早期に発見 |
| 継続的デリバリー(CD) | ソフトウェアを常にリリース可能に保ち、デプロイを自動化する | 迅速で低リスクなリリース |
| ペアプログラミング | 2人の開発者が1つのタスクを共有する | 品質と知識の共有 |
| コードレビュー | 別の開発者が各変更を確認する | 品質と共同オーナーシップ |
| リファクタリング | 振る舞いを変えずにコードの構造を改善する | コードを変更しやすく保つ |
| トランクベース開発 | 短命なブランチを素早くマージする | 苦労の多いマージを避ける |
アジャイルとDevOps
DevOpsはアジャイルを開発から運用にまで広げます。チームは本番環境の自分たちのソフトウェアに責任を持ち、インフラを自動化し、実際の利用状況を監視し、障害から素早く復旧します。広く使われているDevOpsの指標には、デプロイ頻度、変更のリードタイム、変更失敗率、サービス復旧時間があります。
ベストプラクティス
- ストーリーは数日で完了できる程度に小さく保ちましょう。
- 必ず 完了の定義 に自動テストを含める。
- 技術的負債は継続的に返済し、毎スプリントそのためのキャパシティを確保しましょう。
- ビルド、テスト、デプロイを自動化する。
- フィーチャーフラグを使ってデプロイとリリースを切り離し、小さな変更を頻繁にリリースしましょう。
- 早い段階からユーザーを巻き込み、リリース後は実際の利用状況を測定しましょう。
- インシデント後に非難のないレビューを行う。
このトピックの無料テンプレート
よくある質問
アジャイルソフトウェア開発とDevOpsの違いは何ですか?
アジャイルはチームがソフトウェアを反復的に計画し構築する方法に焦点を当て、DevOpsはその協働と自動化をソフトウェアのリリースと運用にまで広げます。
アジャイルソフトウェア開発でもドキュメントは必要ですか?
はい。ユーザーと将来の開発者の役に立つ程度には必要です。たとえば、明快なコード、自動テスト、APIドキュメント、短い意思決定記録などです。
アジャイルソフトウェア開発とは?
小規模なクロスファンクショナルチームが、頻繁な統合、テスト、リリースとユーザーからの定期的なフィードバックを伴いながら、短いイテレーションでソフトウェアを構築すること。
アジャイルソフトウェア開発におけるテスト駆動開発とは?
最初に失敗する自動テストを書き、次にそれを通すコードを書き、その後リファクタリングすることです。欠陥が減り、より良い設計につながります。
アジャイルソフトウェア開発における継続的インテグレーションとは?
自動化されたビルドとテストにより、少なくとも毎日コードの変更をマージしてテストし、統合の問題を早期に発見することです。
アジャイルソフトウェア開発において、継続的インテグレーションと継続的デリバリーの違いは何ですか?
継続的インテグレーションは変更を頻繁にマージしてテストするもので、継続的デリバリーは自動化されたデプロイによりソフトウェアを常にリリース可能な状態に保つものです。
アジャイルソフトウェア開発におけるペアプログラミングとは?
2人の開発者が1つの画面で1つのタスクに取り組み、品質を高め知識を広めることです。
アジャイルソフトウェア開発におけるトランクベース開発とは?
開発者が短命なブランチを使ってメインブランチに頻繁にマージし、苦労の多いマージを避けるプラクティスです。
アジャイルソフトウェア開発におけるリファクタリングとは?
コードの振る舞いを変えずに構造を改善し、変更しやすい状態に保つことです。
アジャイルソフトウェア開発における技術的負債とは?
コードや設計における近道の将来的なコストです。管理せずに放置するとチームの速度を落とし、ベロシティの低下として現れることがあります。
アジャイルソフトウェア開発におけるユーザーストーリーの大きさはどのくらいにすべきですか?
数日で完了できる程度の小ささにして、1スプリント内で構築、テスト、統合できるようにします。参考: ユーザーストーリー.