連載
» 2021年04月28日 05時00分 公開

技術的負債の放置、リリース直前に炎上――アジャイル開発で陥りがちな問題とその原因とはアジャイル開発における品質管理(1)(1/2 ページ)

少人数、短期間の開発を繰り返すアジャイル開発では、どのようにすれば品質を保つことができるのだろうか。本連載では、アジャイル開発における品質管理の手法を解説する。初回は、アジャイルテストの基本的な考え方と戦略について、2回に分けて解説する。前編となる今回はアジャイル開発において発生しがちな問題とその原因について。

[江添智之, 畠田健一朗,バルテス株式会社]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 2021年2月、新型コロナウイルス接触確認アプリ(通称「COCOA」)にて、約4カ月もの間正しく動作していなかったというニュースが話題となりました。ここでは詳述を控えますが、社会的に重要で、人々の関心も高いアプリケーションでの問題ということもあり、テスト体制や環境構築の不備、品質管理に関する問題などに注目が集まりました。

 COCOAに限らず、昨今のソフトウェア開発では短納期でのサービスリリースや、ニーズに合わせた頻繁なアップデートなど、継続的で不断のサポートが要求されています。そしてその中で十分な品質を確保できず、トラブルに発展してしまう例も枚挙にいとまがありません。こういった状況に対応するため、アジャイル開発を用いてソフトウェアを開発する事例が増えてきました。もちろん、アジャイル開発をただ導入するだけでは、テストや品質に関する問題が全て解決するわけではありません。アジャイル開発の特性に応じたテストの考え方を、開発プロジェクトにうまく取り入れることが必要となります。むしろ、ウオーターフォール型開発に代表される従来の開発手法とは表面上異なるアプローチが有効になることもあるでしょう。

 本稿では、アジャイル開発におけるテストについて、基本的な考え方を解説するとともに、ソフトウェアテストを専門としている弊社のプロジェクトの中でアジャイル開発を導入する際の体制、環境構築についての事例を紹介します。

アジャイル開発に必要な工夫、ノウハウとは

 アジャイル開発には、XP(エクストリームプログラミング)やスクラムといった幾つかの開発フレームワークがあります。誤解を恐れず言うと、アジャイル開発の特徴として、大きくは下の2つの共通点が挙げられるでしょう。

  • 少人数のチームによる開発
  • 短期間で繰り返して行う開発

 もちろんアジャイル開発を効果的に推進するためには、この2つだけではなくさまざまな工夫やノウハウが必要となります。しかし、テストや品質へのアプローチに大きく影響するのは上記の2点です。このような開発形態がプロジェクトの進め方にどう影響するか、そしてどのような問題が発生するのかを解説していきます。

アジャイル開発を「ミニウオーターフォール」にしてはいけない

 先ほども述べた通り、アジャイル開発では開発期間を短く分割し、それを重ねていくことによってソフトウェアを作り上げていきます。スクラムフレームワークでは、その分割した開発期間のことを「スプリント」と呼び、1回のスプリントは1週間から4週間の間で固定の期間となります。例えば、1週間と決められている場合、その期間の中で実装する機能の設計や実装、テストを実施します。そして、それらの作業を完了させ、動くソフトウェアをスプリントごとに作り上げていきます。動くソフトウェアを作る、ということは作成している機能がきちんと動作するかどうかを確認する、つまりテストまで終わらせることが原則となります。

アジャイル開発のプロジェクトとプロダクト

 ここで気を付けなければならないことがあります。それは「ミニウオーターフォールになってはいけない」ということです。設計、開発、テストのそれぞれの作業をフェーズに分割し、フェーズ内の作業が全て終了してから次のフェーズを進める、といったやり方は避けましょう。一般的にウオーターフォール型開発では次の図のようにフェーズを分割します。そしてフェーズごとにクリアすべき終了判定基準を設定して、その基準を達成した段階で次のフェーズに進む、というようなやり方をします。そうすることで各フェーズにおける品質を確保しつつ、開発を進めていきます。

ウオーターフォール開発におけるフェーズの分割

 しかし、開発期間の短いアジャイル開発でこれをそのまま導入してしまうと、テストが全て終了せず、機能が完成しないまま開発期間が終了してしまうことが頻発してしまいます。開発期間ごとに機能を作り上げていくのがアジャイル開発の原則なので、完成しなかったものについては次のスプリントでやり直しとなってしまいます。

 なぜ、そうなってしまうのでしょうか。それは、「作業の手待ち」が発生してしまうからです。「作業の手待ち」とは、実装する機能ごとに先の作業が進められるにもかかわらず、それを進めることを中断させてしまっている状態のことです。長期間のプロジェクトに比べると、少人数、短期間で実施するアジャイル開発における「作業の手待ち」は、時間に占める割合が大きくなってしまうため、問題が大きくなりがちです。従って、アジャイル開発ではフェーズという考え方をせず、可能な限り前倒しでタスクをこなしていくことが求められます。

アジャイル開発における「作業の手待ち」
ウオーターフォール開発における「作業の手待ち」

 「といっても、設計が終わらないとコーディングはできないし、コーディングが完了しないとテストはできないじゃないか」と思われるかもしれません。確かにその通りですが、だからといって全ての機能の設計が終わるまで待つ必要はありません。

 「作業の手待ち」を増やさないためには、機能ごとにどのような作業が必要になるのか、詳細にタスクを分割することが重要になります。例えば、「テスト」のタスクを「テスト実行」「テスト設計」「テスト自動化のためのコーディング」などに分割しておけば、テスト設計やテスト自動化のためのコーディングについては、実装が完了しなくとも実施できます。

 ここまで、ミニウオーターフォール化に関する問題を解説しました。アジャイル開発は、単純に開発サイクルを短くしたものではないということがお分かりいただけたと思います。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。