システム開発にはさまざまな開発手法があり、プロジェクトに応じて適切に使い分けて業務効率化を図ります。開発手法の中でも、現在よく使われている手法の1つが「アジャイル開発」です。
今回は、アジャイル開発についての概要やテスト方法、コストカットのポイントを中心にご紹介します。
アジャイル開発とは?
アジャイル開発とは設計や仕様に変更が発生する前提で動く開発手法で、機能単位で「実装→テスト」を繰り返して開発を進めていきます。
昨今、システム開発まわりの環境は競争も変化も激しく、いかにユーザーに継続してもらえるシステムを作るかが重要となってきています。そのために、一度決めた仕様を状況に応じて変更せざるを得ないケースも少なくありません。
アジャイル開発はその性質上、急な仕様変更やフィードバックに柔軟に対応できるため、ユーザビリティの高いシステムを開発できるのが特徴です。
従来の開発手法との違いとは?
従来の開発手法としては、主に「ウォーターフォール開発」という手法が取り入れられていました。
ウォーターフォール開発とは、システム開発における作業工程である要件定義、基本設計、詳細設計、実装、テストを上流工程から順に行っていく開発手法です。
何を作るか、仕様を明確にしてから作業にあたるため、スケジュールも組みやすいですが、手戻りが発生した場合は大きくスケジュールが崩れる可能性があります。
また、設計の段階で見えていなかった不満点などが出てきてもそのまま開発を続行するため、ユーザビリティに欠けたシステムとなってしまいます。この問題を解消するために、臨機応変な対応が可能なアジャイル開発を取り入れるケースが増えてきました。
システム開発手法については、こちらの記事でも詳しく紹介しているのでぜひご確認ください。
アジャイル開発におけるテスト方法は?
アジャイル開発では「企画→設計→実装→テスト」までの1サイクルを「イテレーション」と呼びます。
また、アジャイル開発の中でも代表的な手法であるスクラム開発ではこの1サイクルを「スプリント」とも呼びます。
従来のウォーターフォール開発では、プロジェクトの終盤にテスト工程に入りますが、アジャイル開発では、スプリント毎に開発が行われるため、テストもその都度実施するのです。
テストが完了すれば次のスプリントへ移り、企画→設計→実装→テストのサイクルを繰り返します。
アジャイル開発におけるテストの自動化・コストカットのためのポイント
アジャイル開発は性質上、テストを実施する回数も増えてくるため、効率性を上げるためにテスト自動化ツールを導入するケースが多くなっています。
テストを自動化する場合や、コストカットのためには何に注意してテストを実施すればよいか、ポイントをご紹介します。
スプリントごとに全ての機能のテストを行う
アジャイル開発では、機能単位毎にスプリントを設定し開発作業を回していきます。そのため、開発後のテストはスプリント内でその都度実施しなければなりません。
ただし、基本的にスプリント内で起きた不具合が他のスプリントに影響を及ぼすことはないため、ひとつのスプリント内のテストは入念に実施し、不具合をなくした状態で次のスプリントへ進めることが重要です。
それによって、リリース後の不具合発生リスクも軽減されて、コストカットにつながります。
テストスピードを速める
アジャイル開発では機能単位でスプリントを設定します。
そのため、従来のウォーターフォール開発と比べて、トラブル発生箇所の修正にかかるコストも少なく、開発スピードが速くなる特徴があります。アジャイル開発の特徴をより活かすのであれば、テストスピードも速めなければなりません。
アジャイル開発では「テスト駆動開発」という手法を用いる場合があります。
テスト駆動開発とは、テスト用のプログラムであるテストコードを初めに作成して、そのテストコードがテストを通過するように修正、再実装を繰り返していき、コードを最適化していく開発手法です。
「コーディング→テスト→リファクタリング」の工程を繰り返すことで、細かいバグを発見し、大きな手戻りが発生するリスクを軽減できます。
テスト駆動開発は、テストコードの作成にある程度の技術や経験が求められるため、初期段階では時間が掛かりますが、慣れてくるとテストスピードを効率よく上げられます。
テスト駆動開発については、こちらの記事でも詳しく紹介しているのでぜひご確認ください。
探索的テストを導入する
探索的テストはソフトウェアテストの一種であり、事前にテストケースを設計せず、実行過程や結果に応じて、テストケースを都度作成、改善していく方法を指します。
テスト前の設計や仕様書の用意が必要ないため、柔軟性の高いテストが実施できて、開発時間の短縮も図れます。探索的テストについては、こちらの記事でも詳しく紹介しているのでぜひご確認ください。
適切なテスト設計を行う
適切なテスト設計は品質向上はもちろん、コストカットにもつながります。そのために、まずはテストの対象箇所を絞り込みましょう。
テストの対象範囲が広範囲にわたると、テストケースの作成やテスト実施に多くの時間が掛かってしまいます。機能の重要度を考えた上で広範囲になってしまうのであれば仕方ありませんが、意味もなく広範囲のテストを実施するのはおすすめできません。
機能としての重要度が高いところ、過去に類似した機能を実装した際に障害が発生した箇所などを重点的に絞り込んでテストを行いましょう。また、デグレードが発生しないよう、リグレッションテストを実施することも重要です。
リグレッションテストは同じテストを何度も実施することになるため、テスト自動化を検討しましょう。適切なテスト設計については、テスト担当のエンジニアだけではなく、プロジェクトメンバー全体で話し合い、どの範囲で絞り込むのが妥当かを決める必要があります。
ユーザーストーリーをテストベースに活用する
テストベースはテスト実施の際に参照するデータのことで、主にテストの実施方法や手順などがまとめられています。テストベースに沿ってテストを実施することで、テスト基準を満たしているかの確認を行います。
そして、ユーザーストーリーとはユーザーが実際にシステムを利用してやりたいこと、実施する作業をまとめたものです。例えば、部品の在庫を検索できる画面に対しては「部品の情報を検索欄に入力したら、該当する部品の在庫を一覧で表示してほしい」といった内容がユーザーストーリーにあたります。
ユーザーの要求仕様を満たす、品質の高いシステムを開発することが一番の目標であるため、ユーザーストーリーをテストベースに落とし込んで、効率的なテストを実施しましょう。
【まとめ】アジャイルテストを正しく理解して、自動化やコストカットをしよう
アジャイル開発は、仕様変更に柔軟に対応でき開発スピードも速いため、採用されるケースは増えています。
スプリント単位でテストを実施するため、テストの回数は従来の開発手法よりも多くなっています。
アジャイル開発におけるテスト方法について理解して、自動化やコストカットを意識したテストを実施しましょう。