[レポート] DevOps your Alexa skill: テストと自動化が重要な理由 #ALX318 #reinvent 2019

ラスベガスで開催されたre:Invent2019のセッション「ALX318 - DevOps your Alexa skill: Why testing and automation matter」のレポートです。
2019.12.18

本エントリはAWS re:Invent 2019「ALX318 - DevOps your Alexa skill: Why testing and automation matter」セッションについてのレポートです。

セッション概要

Developing an Alexa skill can be a lot of fun, but you don’t want to wait for one-star reviews to start identifying and fixing bugs. Professional skill developers use testing and automation to minimize these risks. In this session, we talk about unit testing and end-to-end testing best practices for Alexa skills. Then we show you how to automate your deployment workflow, from committing your source code to skill deployment. Finally, we walk you through setting up some proactive alarms so you can act quickly on errors in your skill.

Presented by

  • German Viscuso - Technical Evangelist, Amazon Web Services
  • Andrea Muttoni - Sr Tech Evangelist, Amazon Web Services
  • Benoit Nachawati - Technical Evangelist, Amazon Web Services

レポート

  • スキルをテストするのは、優れたカスタマーエクスペリエンスを得るため
  • スキル公開後にフィードバックを受け、スキルを変更する場合
    • テストが不十分なスキルは、その変更によって別のバグを引き起こす可能性がある

  • スキルの不和はどこから来るのか?
    • シンタックスエラー
    • 非同期の言語モデル
    • NLUのダイアログエラー
    • エラーハンドリング
    • 外部API接続の問題
    • 紛らわしいプロンプトや応答
    • 過度に冗長なプロンプトや応答

  • イノベーションvs安定性
    • ビジネス - 開発 - 運用間で対立が発生しがち
    • 一方または両方やりすぎるのも良くない。リグレッションしないようにバランスを保つことが大事

  • DevOpsの実践
    • IaC
    • アプリとインフラのバージョン管理
    • CI/CD
    • ビルド/テスト/リリースの自動化
    • 可観測性 - モニタリングとロギング

  • スキル開発を始めたばかりの開発者は、開発者コンソールやテストシミュレータに頼りがち
  • 経験豊富なスキル開発者であれば、DevOpsのためにASK CLIASK SMAPIを習得することをオススメする

  • 発話重複の検出
    • 重複した発話やスロットがないか識別
    • モデルがフルビルドされた後にトリガー
    • 非同期のジョブ

  • 発話プロファイラー
    • 発話のリゾリューションをテストする
    • マルチターンのサポート
    • コードは必要なし

  • NLU評価ツール
    • NLUの精度を評価(回帰テスト)
    • 事前定義された発話とインテントのマッピングに基づく
    • 非同期のジョブ

  • インテント履歴
    • 匿名化および集約された発話(解決済みインテント付き)
    • 信頼度によるカテゴライズ
    • モデルを改善するフィードバックループ

  • スキルのLambdaをテストする
    • Alexaリクエストのユニットテスト
      • $ ask api invoke-skill -s <skill-id> -f <file> -e <endpoint-region>
    • ワンターンでのNLUとLambdaのシミュレート
      • $ ask simulate -text "hello there" -l <locale>
    • マルチターンダイアログのシミュレート
      • $ ask dialog -l <locale>

  • Unit Testing with Bespoken
    • 開発中、バグを素早く特定する
    • 依存関係やデプロイなしでテストできる
    • コードカバレッジと継続的インテグレーションを可能に

  • End-to-end testing with bespoken
    • 音声認識とAIテストが可能
    • フロントエンドから外部サービスまで、システム全体をテスト
    • インタラクションモデルが適切に構築されていることを確認

  • 継続的インテグレーション
    • GitリポジトリをCodeCommitにホスティング
    • CodeBuildを使ったテストの実行やビルド
    • ASK CLIやSMAPI, あるいはサードパーティのライブラリを使ったテスト

  • 継続的デリバリー
    • LambdaやIAMの設定が記述されたCFnを使ったプロビジョニング
    • CodePipelineを使った自動デプロイ

  • Infrastructure as Code
    • ひとつのCFnスタックですべてのスキルアーティファクトをプロビジョニング
    • 秩序正しく予測可能なプロビジョニング、デコミッション、リソースアップデートを許可
    • Skill Package APIに基づく

  • 継続的テスティング
    • 公開されたスキルを定期的に監視する
    • 問題が発生したときにいつでもアラートを受け取れるようにしておく
    • スキルが正しく機能していることに自信を持つ

おわりに

Alexaスキル開発における、テストの重要性やCI/CDを適用したDevOpsについてのセッションでした。
実際に業務などでスキルを開発していると、開発者コンソールやテストシミュレータだけで開発をすすめるのは厳しく、テストの自動化やCI/CDの導入が必要となってくるケースがあります。

セッションでは

  • どのようなツールを使ってテストの自動化を行うのか
  • AWSのサービスを使ってどのようにCI/CDを導入するのか

といったことが具体例やデモを交えて紹介されていたので、スキルを開発する上で非常に参考になるセッションでした。