こんにちは。しゃっくです。
今回は今までなんとなく行っていたソフトウェアテストについて
掘り下げて考えてみました。
アジャイル開発が主流となってきている昨今のテストについて
どのようにしていくべきか
僕個人として検討してみました。
参考書籍
一応以下の書籍を読んだ上で僕なりに考えてみました。
ソフトウェアテストの目的
- 品質を上げる
- バグの抽出、修正
品質を上げる
QCDの一つでもある「品質」(Quality)。
「そもそも品質ってなんですか?」というのがあります。
「バグがなければ高品質だ!」とか
「設計書通りに作成されていれば高品質だ!」とか
ありますが、品質の良いソフトウェアとは
「ユーザの要求を満たし、ユーザに価値を提供するソフトウェアである」
つまりユーザの視点に立っての「品質」ということです。
ウォーターフォールでの開発の場合、上流工程の決定を覆すのは大変です。
とはいえ、工程が進むことで出てくる問題もあるわけで
その中で顧客やベンダが気づくこともあります。
しかし、上流工程の決定を覆すのは大変です。
覆す場合、変更管理や再見積もり、設計書の修正もあり現場はアタフタしてしまいます。
そうなるとアジャイル開発は「品質」の考えとマッチしている開発手法のように思います。
イテレーションやスプリントのタイミングで舵を切りなおすこともできるし
顧客と2人3脚で作成していくため
「どこにどれほどの要求があるのか」
というのをウォーターフォール開発より感じ取りやすいのかなと思います。
動いているプログラムベースで話ができるというのも要求をヒアリングしやすくなるように思います。
まー僕はアジャイル開発なんてしたことないんですが・・・
バグの抽出、修正
これが開発者から見た場合の「テスト」って感じです。
バグかどうかの判断基準は「設計書」になります。
しかし、上記の「設計書」だけでは前段で上げた「品質を上げる」ことができません。
プラスで
「設計書上ではバグにならなくても、ユーザが不満に感じると考えられるものはバグとして拾い上げる」
ことも重要です。
開発者としては、テストしていて「これ使いづらい!!」とかって思ったものは
エスカレーションしてバグかどうかの判断をしてもらいましょう。
これからのソフトウェアテストについて
昨今はユーザのITリテラシーの向上、プログラムの目まぐるしい進化により
ユーザの要求も変わってきています。
そしてそれに対応できるように開発側のプロジェクトの進め方も変わってきています。
- 短納期
- 複雑な要求
短納期、複雑な要求に対応するためにアジャイル開発なるものが登場しました。
イテレーションやスプリントを繰り返し、出来上がったモノを実際に見ながら
顧客と要求を詰めていけるため、「品質」の部分を上げることができます。
しかし、アジャイルのイテレーションやスプリントはそれほど長い期間ではありません。(2週間とか)
その中で「動くモノ」を作成することは開発側としては結構大変です。
設計書⇒プログラム作成⇒テスト実施 の工程を実施するためには
どこかを効率化したり無駄な作業を排除することが必要となります。
- テスト自動化ツールの導入
- テスト駆動型開発(TDD)の導入
- 包括的なドキュメントを減らす
テスト自動化ツールはアジャイル開発の中では必須です。
イテレーションの度にプログラムが大きくなっていくアジャイル開発では
回帰テストの範囲がどんどん広がっていきます。
そこで、テスト自動化ツールの登場です。
一度作成したプログラム部分は、自動化することで何度でも回帰テストすることができます。
それによりプログラマーは新しく作成したプログラム部分にのみ注力することができます。
そして包括的なドキュメントを減らすことです。
このドキュメントに当たるものは、設計書やテスト仕様書、障害管理票になります。
設計書については、必要な部分に絞って記載する。
テスト仕様書についても、すべてをドキュメント化することはしない。
ただし、テスト設計は行うことで、ランダムにテストはしないようにしておくことが必要です。
障害管理票については、詳細な不具合報告は不要です。
ただし、分析のために不具合内容は残しておく必要があります。
昨今のウォーターフォール開発では、品質管理の徹底による膨大なチェックリストの消化や
度重なるドキュメントレビューなど「動くモノ」を作るのに不要な作業が多いように思います。
膨大な規定やルールの確認についやす時間もあります。
これをアジャイル開発で全て行うことは不可能すぎます!!
「動くモノ」を作るゴールに向けて必要なことのみに注力しましょう。
まとめ
今回はこれからのソフトウェアテストについて考えてみました。
僕はまだアジャイル開発に携わったことがないので
今後、新しい業務携わる際には、ここで記載したことを思い出して開発していきたいと思います。
みなさんのお役にも立てていれば幸いです。