DEV Community 日本語
フォロー
絶対に失敗しない検証ルール
著者のスタジオは、言語モデル、テキスト読み上げ、レンダリングを伴う自動化されたパイプラインを通じて、子供向けのアニメーションカートゥーンを制作しています。このプロセスの重要な部分は、コンテンツの正確性を保証するバリデーションゲートです。そのようなゲートの一つは、話された単語が教えられている文字と正しく一致しているかを確認し、幼い視聴者にとって事実誤認を防ぎます。この文字チェックゲートを既存のエピソードすべてでテストしたところ、ほとんどのエピソードで問題が報告され、その有用性が実証されました。しかし、文字と単語のペアリングをチェックする特定のルールでは問題は報告されませんでした。調査の結果、著者はバリデーションに使用された正規表現に重大なバグを発見しました。単語の境界をチェックすることを意図した正規表現パターンは、文字列処理のために '\b' をリテラルのバックスペース文字として誤って解釈していました。これにより、パターンは実際のテキストに一致することが不可能になり、バリデーションルールは完全に無効になりました。この問題は、無効なパターンがエラーなくコンパイルされ、出力も生成されず、正しく機能しているように見えたため、微妙でした。この沈黙は重大な問題を隠蔽しており、ゲートは事実誤認を含むエピソードを通過させていたでしょう。著者は、コードを直接読むのではなく、既知の不正な入力に対して新しいゲートをテストするというルールに従うことで、このバグを発見しました。この実践は、一度も失敗したことのないゲートの信頼性の低さを明らかにしました。著者は、誤った入力を貴重なテストケースとして保持すること、および肯定的な結果をアサートすることを提唱しており、「クリーンな入力では問題なし」というテストと「ダーティな入力ではまさにこの問題」というテストを組み合わせています。また、ソースではなくコンパイルされたパターンを印刷して、不一致を検出することを強調しています。バックスペースのバグは、何も報告しないインジケータの典型的な例であり、正常な状態と誤解される可能性があります。正規表現が修正された後、ゲートは2つの異なるエピソードで、花が 'P' で始まるという不正確な主張を正常に特定しました。この冗長性は、特定のファイル形式ではなく、世界についてのステートメントとしてルールを記述することから生じ、有益であることが証明されました。この経験は、厳格なテストの重要性と、自動化されたシステムにおけるサイレントフェイラーの欺瞞的な性質を浮き彫りにしています。