SA.08:継続的開発とテスト・デプロイ

SA.08.1 テストの設計と効率化

重要度:☆☆☆(3)

概要

  • 非機能要件を含めてシステムの構成要素からサービス全体までをそれぞれテストするための観点を理解し、テストの計画と実施、評価ができる。
  • テストの継続的実施を効率化する仕組みを導入できる。

詳細

  • システムの構成要素の振る舞いを確認するテストについて、実施方法の設計や結果の評価を行う。
    • パラメータ設定確認
    • コンポーネントごとに設定した要件 (レスポンスタイムなど) の達成確認
    • コンポーネント間の疎通確認
  • システム全体の振る舞いを確認するテストについて、実施方法の設計や結果の評価を行う。
    • 入力: 異常値・特異値、過負荷、スパイク、長時間
    • 障害: 電源断、接続断、コンポーネントの部分停止
    • シナリオ: フェイルオーバー、バックアップ・リストア
  • 修正や設計変更の対象・内容に応じて適切に影響範囲を把握し、差分テスト・回帰テストを計画する。
    • サブシステム、コンポーネントの依存関係
    • 既存機能 (既存リクエスト) と追加機能の同時実行
    • 各非機能要件への影響
  • 非機能要件に関わるテストを容易化するツールについて、それぞれの目的や動作概要を理解している。
    • 負荷試験: Apache JMeter、分散負荷試験ツール
    • 障害注入試験: Chaos Toolkit
  • 再現性や再試行容易性の向上を目的としたテストの自動化を計画・実装する。
    • 設定値確認や正常性確認の自働化: InSpec、serverspec、Ansible
    • UI 操作の自動化: Selenium、Cypress
    • 構成ドリフトの検出や差分追跡
    • エビデンスの取得

SA.08.2 機能変更時の設計

重要度:☆☆(2)

概要

  • 機能変更の際に、どのような後方互換が必要かを判断し、互換インターフェースの提供方法やサポート方法を設計できる。
  • 機能変更後の不具合を予防・早期発見・対策できるようにするための手順や環境を導入できる。

詳細

  • 個々の変更が互換性にどう影響するかを判定する。
    • フロントエンド – バックエンド間の API 変更
    • データベースのスキーマ変更
  • 過去バージョンのフロントエンドからのアクセスに対して後方互換を提供し、またサポート終了を計画する。
    • エンドポイント分岐や Reverse Proxy による従来動作の維持
    • アクセスログ取得によるサポート期限やライフサイクルの判断
  • 予定された機能変更において、ヒューマンエラーを含めた不具合発生の予防や対策を行う。
    • バージョン管理されたデータベーススキーマ変更スクリプトの活用
    • データベース更新とアプリケーション更新の分離
  • 変更を原則凍結した過去バージョンに対し、バグやセキュリティのバックポートを管理する。
    • バックポート対象のトリアージ
    • git を活用しての変更履歴管理
    • 修正結果のナンバリング、ネーミング

SA.08.3 継続的な統合とデプロイ

重要度:☆☆☆(3)

概要

  • 稼働中システムの変更を想定したテスト手法、デプロイ方式を理解している。
  • ビルド・テスト・デプロイを自動化するパイプラインの概念を理解し、具体的な CI/CD ツールにより環境構築できる。

詳細

  • 実データ、実リクエストを活用するテスト手法を理解している。
    • カナリアテスト (カナリアリリース)
    • シャドーテスト
  • 各種デプロイ方式について、手順やデータ移行の必要性、不具合発生時の切り戻し手順などの観点で比較し、適切な方式を選択する。
    • インプレースアップグレード
    • ローリングアップデート
    • ブルーグリーンデプロイ
  • イミュータブルなインフラストラクチャを構成する。
    • システム構成のコード化による冪等性の確保
    • 環境設定 (認証情報、ネットワーク設定、ランタイムオプションなど) の外部化
    • コードのバージョン管理によるロールバックの容易化
  • OpenTofu、Ansible、cloud-init などのシステム構成ツールを用いて具体的な IaC 環境を構成する。
    • クラウド基盤の各種リソースの自動構築
    • 物理サーバーや仮想マシン、ネットワークデバイス等のセットアップ
  • Jenkins や GitLab CI/CD を用いて標準的な CI/CD パイプラインを設計する。
    • 各ステップを自動実行するスクリプトの作成: アプリケーションやコンテナのビルド、テストツールの実行やカバレッジ等の取得、IaC ツールの実行、デプロイ、など
    • パイプライン自体のコード化と履歴管理: Jenkinsfile、.gitlab-ci.yml
    • リポジトリコミットをトリガーとするパイプラインの起動
    • エラーハンドリングとパイプラインの中断
    • 柔軟なデプロイのための設定: リリースゲート、自動ロールバック