DevOpsのテキスト研修
DevOps組織になぜテスト自動化が必要か
ソフトウェアデリバリー部門に十分なテスト自動化がまだなければ、開発とテストは明らかに分断されているはずです。開発者が仕事の品質についてフィードバックを受けるころには、すでに別のタスクで手いっぱいです。書いたコードや、書かなかったコードと、不具合の因果関係を見落としがちです。不具合を混入させた時点までさかのぼるためにコンテキストを切り替えると、生産性は下がります。フィードバックが遅れると、システムと不具合の関係は複雑で不明瞭になります。場当たり的な回避策ではない質の高い修正を期待するのは現実的ではありません。
テスト自動化がなければ、DevOps組織が質の高い製品やサービスを届けるには、さらに時間と費用がかかります。21世紀のテクノロジー組織にとって、事業分野を問わず、これでは規模の拡大に対応できません。
テストは自動化できる。
品質を生み出すことには人の判断が必要です。
DevOpsチームは、できるだけ多くのテストケースを自動化します。テストは自動化できますが、品質を作り込むためにチームが考え、判断する力は自動化できません。ソフトウェアが代行できる繰り返し作業に、貴重な人材を使わないようにします。
効果的なテスト自動化のためのDevOpsの原則
- テスト自動化は、作業品質に関するフィードバックを早い段階ですばやく返すべきである。
- 同じ条件でテストを繰り返した場合、一貫性、決定性、再現性のある結果が得られるべきである。
- テストは誤検知を出さないようにします。
- 少数でも、自動化されて信頼性の高いテストケースのほうが、同じ条件で実行しても結果がばらつく、信頼性の低い手動テストを数多く用意するより効果的です。
- テスト自動化では、まずシステムが社内外の顧客に提供する主な機能と便益を検証します。この範囲だけでも、自動化がない場合よりはるかに有効です。
- 次に、DevOpsチームの人材を最大限に生かすため、できる限り多くのテストケースを自動化します。
- テスト自動化では、遅く定期的なフィードバックを避ける。自分や開発者がトランクにコードをチェックインしようとするたびに、すばやいフィードバックが必要である。
- 自動テストが十分に速くなければ、テスト、ソフトウェア、またはその両方を高速化する方法を探します。信頼できる継続的デリバリー基盤とデプロイメントパイプラインを実現するうえでも、顧客に高品質のサービスを提供するうえでも重要です。さらに速くするには、自動テストを並列に実行します。
- テスト駆動開発を検討しましょう。自動テストを先に書き、その後にソフトウェアを作ります。
テスト自動化は継続的デリバリーとデプロイメントパイプラインを支える
これまで説明したように、DevOpsでは、開発者が本番システムにコードをデプロイできるようになります。しかし、導入初期のDevOpsチームを観察すると、開発者はすばやくコードをトランクにチェックインし、タスクやチケットを閉じても、本番リリースのボタンを押すことには消極的でした。本番環境を壊して責任を問われるのを恐れているからです。
DevOpsチームがテストを自動化して、網羅的で信頼できるテスト範囲を確保して初めて、開発者はこの不安を乗り越えられました。
たとえばGoogleでは、開発者がコードをトランクにチェックインすると、まず静的コード解析、重複解析、テストカバレッジ分析などを行い、次に100万件近い自動テストケースでコードを検証します。すべてのチェックとテストに合格すると、トランクからビルドを生成して本番に投入し、他の全本番サーバーにも複製します。こうして5,000の小規模で独立したチームが生産性を保ち、毎日数万回の本番デプロイを行います。テスト自動化なしには実現できません。
デプロイメントパイプラインの安全と整合性を保つには、迅速で信頼できるフィードバックが欠かせません。自動テストケースの失敗でパイプラインが壊れた場合、DevOpsチームは他の作業をトランクにチェックインする前に、誤りのあるコードと設定を修正します。また、自動テストケースで事前に見つけて防げたはずのエラーをパイプラインで発見したときは、そのテストケースも作成し、自動テストのリポジトリに追加します。
自動化できるテストの種類
- 単体テスト アプリケーション内の個々の関数、クラス、モジュールを検証します。
- 受け入れテスト アプリケーションが顧客に提供する機能と便益を検証します。
- 統合(サービス)テスト アプリケーション同士の連携と、サービス全体の流れを検証します。
- 性能テストとストレステスト 予想どおりの負荷と予想外の負荷に対して、サービスがどのようにスケールできるか、またはできないかを検証します。特に、最もよく使われるサービスで重要です。
- 非機能テスト セキュリティ、可用性、容量、拡張性を検証します。
単体テストと受け入れテストの自動化が難しく、統合(サービス)テストの自動化に大きく依存している場合は、アーキテクチャが密結合になっている可能性があります。構成要素の結合を緩める方法を見つけましょう。
まとめ
この章では、DevOpsにおけるテスト自動化の重要性を解説しました。テスト自動化は、安全かつ迅速なデリバリーの鍵です。
DevOpsを導入するかどうかにかかわらず、テスト自動化なしに、社内外の顧客に質の高いサービスを提供できる、世界水準で生産性と収益性の高いIT組織を作ることはできません。
