ソフトウェアテストライフサイクル(STLC)とは?

STLCは、ソフトウェアテストライフサイクル(Software Testing Life Cycle)の頭文字をとったもので、ソフトウェアが品質基準を満たすか確認するテストの戦略のことです。STLCとSDLC(ソフトウェア開発ライフサイクル)は混同されがちですが、SDLCはソフトウェア開発の全フェーズを包含するのに対して、STLCはテストフェーズだけを指します。

Gehtsoft社のCEOであるイワン・ゲクト氏は、次のように述べています。「STLCは、テストをステップごとに行うアプローチです。すなわち、あらかじめ定義された一連のステップを踏んでQAを行うことで、製品の品質を保証するのです。」easyDITA社のCTO兼共同創業者のケーシー・ジョーダン氏は「成功している組織は、市場投入までの時間短縮、品質向上、顧客のニーズを満たす機能の提供を実現するために、テストを開発に組み込んでいる」と説明しています。

今回の記事では、ソフトウェアテストライフサイクル(STLC)とは何か、STLCとSDLCはどのように違うのか、そして業界のプロたちはSTLCをどのように実践しているかを解説し生産性を高めるソフトウェアテスト自動化ツールについて紹介します。


STLCとSDLCの違い

STLCとSDLCは、似て非なるもの。主な違いは、ソフトウェアテストライフサイクルは、ソフトウェア開発ライフサイクルの一部であるのに対して、SDLCはコンセプトから完成まで、ソフトウェア開発プロセス全体を指します。ソフトウェアの検証は開発に欠かせないため、STLCはソフトウェア開発においてテスト可能な一連のプロセスであるとも言えます。「STLCで最も注目するのは、機能がどのように作られているかではなく、どのように動作するかです」とeasyDITA社のケーシー・ジョーダン氏は話します。

SDLCとSTLCの違い

ScienceSoft社のソフトウェアテスト責任者、アンドレイ・ミハイロウ氏は次のように説明しています。「ソフトウェアの品質に注目するSTLCは、SDLCと切っても切れないもの。STLCの各ステージでSDLCプロセスにとって価値のある成果を生み出さなければなりません。STLCの目的は、開発されたソフトウェアが高品質であり、要求仕様を完全に満たすと確かめることで、QAとテスト作業から成り立っています(テスト計画、機能・統合・互換性・パフォーマンス・セキュリティ・ユーザビリティ・回帰テストケースの作成と実行、探索的テストの実行)。」

STLCのフェーズ

ソフトウェアテストライフサイクル(STLCモデル)には、大きく分けて6つのフェーズがあります。

  1. 要件分析
  2. テスト計画の作成
  3. テストケースの開発
  4. テスト環境の作成
  5. テストの実行
  6. テストサイクルの完結

STLCのフェーズ

要件分析

Surfky/Bidwise社のCEOであるナオミ・ビショップ氏は、要件分析フェーズについて次のように説明しています。「STLCの要件分析フェーズでは、ソフトウェアが満たすべき基準を分析・調査します。他部門とブレーンストーミングし、その基準をテストできるか判断するほか、調査の範囲も決定します。テストできない機能がある場合、対応策を策定できるようこの段階で担当チームに知らせます。」この段階では、QAチームがさまざまな関係者とやり取りすることが極めて重要です。

QAチームの担当者は関係者と協力し、不明点がある場合は解決しておきます。また、テスト自動化を検討するのもおすすめです。Autifyなどのテスト自動化ツールを導入すると良いでしょう。弊社の場合、自社が提供しているテスト自動化ツールをこのフェーズに利用しプロダクトのテスト自動化を行っています。

テスト計画

要件分析フェーズが完了したら、QAチームはテスト計画フェーズに進みます。戦略的にテストを行うために、詳しいテスト計画書を作成するフェーズです。テスト計画書には、テストに必要な時間やコスト、リソース、責任分担、テスト環境などが詳細に書かれています。

ナオミ・ビショップ氏は、次のように説明しています。「調査はテストの準備から始まることがほとんどです。テスト計画段階では、調査目標の達成の助けとなる作業やサービス、達成度を把握するのに注目すべき指標、その指標の収集・監視方法などを定義します。」

テストケースの開発

このフェーズでは、ソフトウェアが意図通りに動作するかを確認するために、ソフトウェアのすべての部分を検証するテストケースを作成していきます。

テストケースには、テストステップ、テストデータ(ログイン情報など)、実行が成功した場合に期待される結果、失敗した場合の予期せぬ結果などが含まれます。QAチームは、できるだけ効率良くテストケースを作成することを目指す必要があります。「テストケースはスプレッドシートに文章化する」というやり方が定着していますが、特に大規模なプロジェクトだとかなり工数がかかってしまいます。

100%カバレッジを達成するには、手動テストと自動シナリオを併用し、できる限り自動シナリオを中心にしていく必要があります。手動テストが大半を占めてしまうと、カバレッジが伸び悩むだけでなく、手動テストにどんどん時間がかかってしまい、コスト的に非効率です。また、人為的ミスにより、本番にバグが忍び込んでしまう可能性も高くなります。

いままでは、テストスクリプトは熟練した開発者がプログラミング言語で書かなければなりませんでした。QAチームメンバー全員がスクリプトを書けるわけではありませんので、ハードルが高い作業だったのです。しかし、Autifyを使えばコーディングは不要。GUIを直接操作するだけでテストを作成できます。プログラミング言語でテストスクリプトを書くのではなく、ノーコード型テスト自動化ツールのAutifyがコード化されたステップを作成していきます。そのため、テスターはブラウザを操作に、エンジニアは新機能の開発に力を入れられるわけです。また、メンテナンス作業にはAutifyの機械学習アルゴリズムが活躍します。

テスト環境の作成

このフェーズでは、テスト環境の構築とデプロイを行います。テストデータの決定、ハードウェアとソフトウェアの実装などの作業が含まれ、テスト自動化を行うためにAutifyやSeleniumなどの主要ソフトウェアテストツールが活用されます。ここで重要なのは、デプロイ後のソフトウェアがテスト環境で忠実に再現されるようにすることです。例えば、会員制のウェブアプリを顧客のサーバー上で実行する場合、テスト環境はそのサーバーとほぼ同じでなければなりません。この段階ではスモークテストがよく行われます。

テストの実行

テスト実行フェーズでは、テスト計画に沿ってテストケースを実行していきます。予想される結果と実際の結果を比べ、開発チームに報告します。十分なバグ追跡、不具合レポート、テスト実行レポートの実践がポイントです。Autifyのような自動テストツールを使用すると、AIが自動的に成功・失敗したテストシナリオをレポートにまとめてくれます。UIの変化も検出されるため、大幅な時間短縮(ソフトウェア開発のコスト削減)が期待できます。

テストサイクルの完結

テストサイクルの完結フェーズは、テスト実行の締めくくりです。テスト結果をまとめ、チームメンバー間で発表と話し合いし、分析していきます。

ナオミ・ビショップ氏は、テストサイクルの完結フェーズの実体験についてこのように話しています。「まず、評価が行われたことを確認します。すべてのテストケースが実行されたか、あるいは意図的に対策したか重要度1の不具合が報告されなかったかチェックします。次に、教訓会議を開き、教訓報告書を作成します(何がうまく行ったか、どのように変更すべきか、何を改善すべきかをまとめます)。」

早期テストの重要性

早い段階で頻繁にテストを行うことで、ソフトウェア開発におけるコスト削減が可能になります。早期テストはシフトレフトとも呼ばれています。テストをソフトウェア開発ライフサイクルの終盤に行うのではなく、序盤に行おうという考え方です。

ソフトウェア開発におけるバグの修正コスト

Ponemon Instituteは、開発ライフサイクルの各段階で発見されたバグの修正コストを算出しました。これにより、コーディング段階では80ドル、ビルド段階では240ドルのバグ修正コストがかかるそうです。ウォーターフォールテスト手法を採用しているソフトウェア企業はQA・セキュリティ段階までバグ修正しないことが一般的ですが、この場合、修正コストは平均960ドルに上ります。さらに、バグが本番に入り込んでしまうと、1バグあたり7,600ドルもの修正コストがかかってしまいます。

シフトレフトは理論的には良さそうですが、実践は困難なこともあります。従来的なやり方を続けている技術者はうなずくのではないでしょうか。シフトレフトするおすすめの方法として、自動テストが挙げられます。コーディング段階にテストをまとめ、ビルド・QA段階で自動テストを実行し、セキュリティ段階で行うテストを最小限に抑えることを目指せば、本番にバグが忍び込まないようにすることができます。

まとめ

できるだけ早い段階でSTLCの原則を実施するのが大切です。そうすることで、ソフトウェアをいち早くリリースでき、開発コストを削減し、ウォーターフォール型開発サイクルで見られるボトルネックを避けられます。

Gehtsoft社のイワン・ゲクト氏は、ウォーターフォール型開発から移行した体験と、それがどのように市場投入までの時間を改善したか語っています。「STLC・SDLCのアプローチはサイロ化を誘発してしまいます。各フェーズで共同作業が行われますが、チームごとに担当範囲が決まっていますから、プロダクトの品質がQAチームの責任になってしまうと、開発者にコードの品質に対して説明責任を持ってもらうことは非常に難しいのです。」ゲクト氏は、この手法は非効率であると話します。「STLCは、ウォーターフォール手法にあるアジャイルの課題を解決するために生み出されたものですが、ウォーターフォール手法のすべての欠点をSTLCで解決できているわけではありません。」

STLCの原則は、ソフトウェアの品質を向上させ、市場投入にかかる時間を短縮することを目的としています。サイロ化が進み、説明責任を逃れるようになってしまっては、作業効率は上がりません。イワン・ゲクト氏は、このように説明します。「アジャイル開発にTDD(テスト駆動開発)の原則を取り入れると、ユニットテストは開発者の責任になります。テストを書いてから、コードを書くわけです。QAがユニットテストを作ろうとしている間にコードに取り組むのではなく、最初から品質を考えるようになります。」

開発企業がシフトレフトを通して進化していくためには、SDLCの早い段階でテストしていく必要があります。弊社のテスト自動化ツールを使って、新機能の開発初期に自動テストを行っているお客さまはたくさんいらっしゃいます。
 
Autifyではこの他にも品質保証やテスト、アジャイル開発に役立つ資料を無料で公開していますので、ぜひこちらからご覧ください。