ブラインドテストスイート
このスイートは、契約から導かれた独立した証拠であり、適合性の定義ではありません。したがって、テストが不合格であれば、実装またはテストが間違っているのであって、契約が間違っているわけではありません。
test-writerが各テストの形状を決定し、test-oracle-reviewerが独立した値とみなすものを決定します。このスキルはそれらを隔離するためのものです。
作成者が見るもの
契約ファイル、それが記述されているインターフェース(契約のクレートまたはモジュール、その型とドキュメント)、および公開ソース(仕様、ベンダリングされたベクター、キャプチャ)。 実装、以前の実装、または契約を生み出したプルリクエストは見ません。これらは契約の解釈を内包しており、スイートがテストするのではなく確認することになるからです。 実装が存在する場合、作成者はそのコミットを含まないワークツリーの新しいコンテキストです。「読んではいけないリスト」はそれを補完するものであり、置き換えるものではありません。なぜなら、実装を見たコンテキストはそれを見なかったことにできないからです。
期待値
テストで引用された公開ソース、契約が述べる特性、または契約または引用された標準が方法を固定する導出値から得られ、ベクターとともに記録され、レビューアーが再現できるようにします。契約の実装のみが実行できる計算から得られる値は決して使用しません。そのような値をチェックすることは、契約を再実装することを意味するからです。 導出ベクターは、変更が触れるすべての結合フィールド(長さ、チェックサム、署名)を考慮するか、その結果は導出が主張するものではありません。 公開された回答が存在しない場合、実装間の出力を比較します。差分チェックは単独では決して成立しません。なぜなら、両方に存在するバグはそれを通過させるからです。 手書きの負の入力は、対象とする次元においてのみ独立して有効な制御と異なるため、テストはその名前の理由でのみ失敗できます。拒否された入力を指定するルールは、そのような入力を受け取ります。なぜなら、受け入れによってのみテストされるルールは、すべてを受け入れることによって満たされるからです。 ベンダリングされたソースは、元のソース、バージョン、チェックサムを記録し、全体または独自のセクション境界で切り取られ、編集されることはありません。編集またはスライスされたベクターは、それをオラクルにする出所を失うからです。 スイートの横にカバレッジ記録を保持します。各テストがどの条項をチェックするか、どの条項がレビューのみで検証されるか、および意図的にチェックされない境界を記録し、沈黙がカバレッジと誤解されないようにします。
レビューとマージ
レビューアーはtest-reviewerを実行し、契約とカバレッジ記録を相互にチェックします。すべての条項にテストまたは記録されたギャップがあり、すべてのテストがその条項を引用しています。
実装の前にスイートを作成します。1つの実装がグリーンで実行されたらマージします。これにより、適合しない実装が通過できないテストが、後のすべての実装を拘束する前に発見されます。
実装中の読み取り専用
実装のプルリクエストは、スイートまたは契約を決して編集しません。 間違っているように見えるテスト、またはテストのない条項は、ベクターまたは条項、期待値と観測値、および引用されたソースとともにエスカレーションされます。 修正はスイートを所有するプルリクエスト(開かれているものはそのリーダーを通じて、マージされた後は新しいもの)に、同じ入力を与えられた新しい作成者によって行われ、その作成者は実装の出力ではなく決定を受け取るため、スイートはブラインドのまま維持されます。