DevOpsとは、プラン、コード、ビルド、テスト、リリース、デプロイ、運用、監視というサイクルを継続的に回していくものと頭に叩き込まれている方は多いのではないでしょうか。DevOpsサイクルの目標は、高品質ソフトウェアを迅速にリリースすること。ソフトウェアテストライフサイクル(STLC)は、無限に続くこの方法論のサブセットであり、DevOpsにおけるSTLCは、開発者、運用者、そしてテスターのサイロ化を防ぐことを目的としています。関係者間のコミュニケーションとコラボレーションも促進され、ライフサイクルの早い段階で頻繁にテストを行うことで、工数・コストの削減も期待できます。では、DevOpsにおいて、理想的なSTLCを実現するにはどうすればよいのでしょうか?


テスト計画段階でテストを準備する

テストは、QA段階だけでなく、すべての開発フェーズで行うべきです。

テスト計画段階で、早めにテストを準備することはとても大切です。開発の終盤でテストするだけでは運用を高速化できません。Gadget ReviewのCEO、クリステン・コスタ氏は、「本当に素晴らしいソフトウェアを開発できるのは、イテレーションがあるから。QAは開発プロセスを通して行われるべきです」と話します。テストはコーディング段階から始める必要があるのです。

計画段階にテストをシフトレフトすることをおすすめします。つまり、「コーディングを始める前に、どのようにテストするか考えよう」とチーム全体に意識させるのです。また、コードベースにコミットする前に検証方法をじっくり考えましょう。テスト計画を立てて、ビルドして、テストする…という流れです。

Spreadsheet PlanetのCTO、スティーブ・スコット氏は、シフトレフトについて次のように説明しています。「継続的テスト(CT)は、ソフトウェア開発の比較的新しい考え方で、継続的に開発を行い、常にフィードバックし続けるというDevOpsで重要な2つの側面に合致します。継続的テストは、テスト自動化と早期・継続的テスト(シフトレフト)を軸にしたものなのです。」

RoverPassのCEOであるラヴィ・パリク氏は、同社のプロセスについて次のように話します。「弊社では、テスト駆動開発モデルを採用しています。テストで得られる情報を開発の初期段階で活用しているわけです。ソフトウェアを構築してからテストするのではなく、テストケースをもとにコードの方向性を決め、後で障害が起きないようにしているのです。結果的にチームの作業効率が大きく改善されたと思います。」当初、このようなアプローチは開発者に歓迎されなかったそうです。「最初、開発者たちは乗り気ではありませんでしたが、今では標準プロセスになっています。」

Force by Mojioの運用部長のダイヴァット・ドラキア氏はこのように話します。「QA段階を1回経たらソフトウェアは完成、という時代は過ぎました。旧来のQAモデルは、企業と消費者にとって非常に効率が悪いと見なされています。継続的テストがなければ、1回しかないQAフェーズを急いでしまったり(全員がスケジュール通りに進めようとするので)、逆にQAが長引いてしまってスケジュールが台無しになったりする恐れがあります(早期に発見していればすぐに修正できたはずのコードや設計の問題の解決に長時間かかるので)。」

従来的なウォーターフォール型開発モデルの場合、開発ライフサイクルの終盤に大急ぎでコードや機能を検証しなければなりません。これではワークフローにボトルネックができてしまいます。コードに欠陥があっても、開発者は説明責任をほとんど問われません。ユニットテストを導入すれば、開発者に説明責任を取らせることができます。ユニットテストは、第一にテストを行い、第二にコーディングするように設計されます。小さなバグを早めにキャッチできるわけです。開発者のローカルマシンでバグが発見されなくても、コードベースにコミットしようとしたときに見つかります。

バグ発見が遅れると、どのようなコストがかかるか - DevOpsにおけるSTLC

この段階で大半のバグを発見したい理由は、バグ発見が遅れると多額のコストがかかってしまうからです。調査によると、本番環境でバグを発見するのと比べ、バグを早めに発見することで平均7,600ドルものコスト削減が期待できるそうです。何倍ものコストを削減できるケースもあります。

Minted Empireを運営するキース・ミント氏は、継続的テストを行わなかった事例をいくつか紹介しています。「日産は100万台の自動車をリコールしたことがあるのですが、その原因はエアバックのセンサーを展開させるソフトウェアの不具合でした。この不具合により、2件の事故が報告されています。また、スターバックス社は、アメリカとカナダの店舗の60%を閉店したことがあります。POSレジのソフトウェアの故障が原因でした。支払いを受け取れなかったため、しばらくの間、お客さんに無料でコーヒーを渡す対応をしました。」

本番環境に移行後の継続的テスト

本番以降も継続的にテストする

さて、テストは早めに、頻繁に行うべきという話をしましたが、DevOpsにおけるSTCLは「QAが通ったら終わり」ではいけません。本番環境でも継続的にテストすることが大切です。

シフトライトとは、ソフトウェア開発ライフサイクルの後半でテストを行うことを指します。バグを発見するために、本番環境でも継続的テストを行うべきなのです。バグが発見された場合、以前のバージョンに容易にロールバックでき、悪影響も軽減できます。ソフトウェアや機能のQAが通っても、本番環境での厳しい検証は欠かせません。その理由について、VMwareでアクセシビリティ・アーキテクトを務めるシェリ・バーン=ハーバー氏は次のように語っています。「テスト環境でソフトウェアテストを行っても、テスト環境で行ったにすぎません。ライブデータを使ったわけではありませんし、実際のユーザーが使うほうがシステムにはるかに負荷がかかります。厳重にセキュリティ対策せずに(そしてデータの所有者の許可を得ずに)本番環境をテスト環境にコピーすることはできません。できたとしても、トラブルは発生します。」

テストデータと本番データは区別すべきです。そのため、両方のデータセットをテストしなければなりません。バーン=ハーバー氏は「本番環境でテストデータを使うべきでないのは、とんでもないことが起きてしまうからです」と言います。彼女が言う「とんでもないこと」とは、奇妙なテスト記事がニューヨーク・タイムズ紙に誤って掲載された事故のことです。また、ユーザーはソフトウェアを思いがけないユースケースのために使うことがあります。「ユーザーは、デザイナーや開発者、プロダクトオーナーが考えもしない方法でソフトウェアを使います。予期せぬ方法でソフトが使われると、データは永久に残りますから、対応策を考えなければなりません。」

弊社のノーコードテスト自動化ツールをご利用いただいているZOZOテクノロジーズは、本番環境のアプリを1時間に1回テストしています。Autifyなどの使いやすいツールを活用すれば、QAチームメンバーは誰でもテスト自動化に取り組めます。高度なスキルを持つテスト自動化エンジニアに頼る必要がなくなり、エンジニアたちはソフトウェア開発に集中できるわけです。

テスト自動化は必須

DevOpsのもう1つの重要な側面は、自動テストです。手動テストから自動テストに移行することで、より高品質のソフトウェアをより迅速に提供できるようになります。ただ、手動テストにもメリットはありますから、すべて自動化すべきというわけではありません。大半のテストケースを自動化ツールでテストし、手動テストを少数派にしていくべきなのです。手動テストに比べ、自動テストには次のようなメリットがあります。

  • コスト、工数、リソースを削減できる
  • 手作業の繰り返しを避けられる
  • 多数のテストケースを一括実行し、テストカバレッジを向上できる

従来的なQA段階より早めに自動テストを導入すべき理由は?そして、どのように自動テストを導入すれば良いのでしょう?自動テストを導入するには、テスト自動化に資金を投じることです。統計によると、自動テストに投資していないソフトウェア開発チームは、競合他社と比べて後れをとっているそうです。また、同調査で、QA予算の10%~49%をテスト自動化に充てている企業が大半を占めていることも分かっています。投資対効果があることの表れでしょう。

テスト自動化は安くも簡単でもありませんが、今や開発の現場に欠かせないものとなっています。ある調査によると、年に数回、新しい自動テストツールを探す回答者は71%の上り、現状の自動テストツールに対する不満として多いのが、テスト自動化を進めていくにつれて、メンテナンスが手に負えなくなることだそうです。この問題を解決すれば、品質保証にかかる工数増大に歯止めをかけることができます。

テスト自動化に資金を投じることで、より良いソフトウェアを開発でき、お客さまの満足度もアップします。前述の調査によると、リリースサイクルの高速化も顧客満足度アップにつながるそうです。顧客満足度が高ければ、顧客維持率も上がり、収益の伸びも加速化します。

関係者全員とコミュニケーションをとり、協力し合う

DevOpsにおけるSTLCは、サイロ化を解消し、チーム間でのコミュニケーションとコラボレーションを改善します。

良好な関係を築くポイントは、効果的にコミュニケーションを取ること。そのためには、開発者、テスター、運用者のサイロ化を解消することが大切です。プロダクトマネージャーからプロジェクトマネージャー、デベロッパー、手動テスターまで、パイプラインに関わる全員が、テストの目的について共通の認識を持たなければなりません。

ソフトウェアを成功させるには、フィードバックが重要です。

Solitairedの創業者・CEOのダーシャン・ソマシェカー氏は、次のように話しています。「ソフトウェア開発ライフサイクルに継続的テストを組み込むことで、開発チームは既存の機能に悪影響を与える可能性のあるコードについて早めに知ることができます。継続的テストを行えば、開発の各段階で頻繁に実用的なフィードバックを受けることができ、欠陥数を抑えつつ、迅速にソフトウェアアプリケーションを本番環境にデプロイできるようになります。早期フィードバックは、担保すべきビジネスリスクの分析、市場投入までの時間短縮のためにも有効です。」

次のステップは?

DevOpsのモダン化のカギを握るのは、テストです。早期に、頻繁に、開発の各段階でテストを行い、本番環境に移行しても検証を続ける必要があります

一方で、設計について話し合う段階でテストの導入を検討することもおすすめします。開発サイクルの終盤でテスターが孤立しないように心がけてください。テスト計画の中心はテストであるべきですから、チームメンバー全員との意思疎通は欠かせません。うまくテスト自動化すれば、アジャイルチームは前進していきます。一歩進んだテスト自動化ツールをお探しの方は、ぜひAutifyをお試しください。

テスト自動化で、工数とコストを削減し、より高品質なソフトウェア製品を開発しましょう。優れたソフトウェアを使い、レビューするのはお客さまです。お客さまにご満足いただくことができれば、口コミでおのずと顧客基盤が拡大します。最終的に収益が上がり、選ばれるソフトウェア開発企業になれるのです。
 
Autifyではこの他にも品質保証やテスト、アジャイル開発に役立つ資料を無料で公開していますので、ぜひこちらからご覧ください。