テスト管理 — ファイルで置いた要件・テストケース・結果を見る
要件、テストケース、実行結果をファイルとしてフォルダに置いておけば、drawtonomy で開いて、どのバージョンがどこで PASS / FAIL するかを確かめ、どの実行でもその場で再生できます。中身はすべて普通のファイルです(Markdown の要件、testcase.yaml、OpenSCENARIO、テストケースごと・バージョンごとの JSON)。コードと同じようにレビューとバージョン管理ができ、drawtonomy はそれを読むだけです。アップロードもサーバーの用意もいりません。

サンプルを開く
Section titled “サンプルを開く”サンプルは、自動緊急ブレーキ(AEB)の見本実装を対象にしたテストスイートです。要件 4 件、テストケース 5 件、具体シナリオ 454 件と、3 つのバージョン(v1.0・v1.1・v1.2)の実行結果が入っています。
スイートはファイルの入ったフォルダなので、置き場所は選びません。いま対応しているのは次の 2 つです。
-
GitHub の公開リポジトリ — フォルダの URL を
?tests=の後ろに付けます。https://www.drawtonomy.com/?tests=https://github.com/<owner>/<repo>/tree/<branch>/<folder> -
手元のフォルダ — メニューの Open tests… から開きます。ファイルはブラウザの外に出ません。
ほかの置き場所にも順に対応していきます。
フォルダの構成
Section titled “フォルダの構成”requirements/ REQ-*.mdtestcases/ <group>/<variant>/testcase.yaml + .xosc, .pvd.xosc, .drawtonomy.svgresults/ <sut>@<version>/<TC-ID>.json + logs/- 要件は
id・title・任意のparentを持つ Markdown ファイルです。テストケースとは多対多でつながります。 - テストケースは
testcase.yamlを置いたフォルダです。論理シナリオ(.xoscと、パラメータの範囲を書いた.pvd.xosc)、合否基準、説明文、図をまとめます。 - テスト実行は
results/の下の 1 フォルダで、テスト対象ソフトウェア(SUT)の 1 つのバージョンでスイート全体を回した結果です。runsの 1 件が 1 つの具体シナリオで、判定・KPI と、再生用の走行ログ(任意)を持ちます。
形式の詳細は FORMAT.md に、サンプルの結果を esmini でどう作ったかは README にあります。自分のソフトウェアを試すときは、同じシナリオとパラメータを手元のシミュレータで回し、同じ形式の結果ファイルを書き出してください。
Overview の画面
Section titled “Overview の画面”
上端の帯は、表示中のバージョンを 1 つ前のバージョンと比べた結果です。Regressed は PASS から FAIL に落ちた実行、Gap drop は PASS のままでも最小車間がはっきり縮んだ実行、Fixed は FAIL から PASS に直った実行です。件数をクリックすると該当する実行が一覧で出ます。その下に、テスト実行ごとの結果、相手の種類別の PASS 率(By actor)、各要件がテストケースで満たされているかが並びます。
左の Navigator には同じ要件の木が、行ごとの状態の点と PASS 率付きで出ます。上の actor / maneuver のタグで画面全体を絞り込めます。どの要件からも参照されていないテストケースは Unlinked に集まります。
要件のページ
Section titled “要件のページ”
要件をクリックすると、本文と、その要件を検証するテストケースのカードが並びます。カードには図・説明・PASS 率・ヒートマップの縮小版があり、どのテストケースがどこで落ちているかがひと目で分かります。
テストケースのページ
Section titled “テストケースのページ”
上半分はテストケースそのものです。Description と図(機能シナリオ)、続いて範囲付きの Parameters と Pass criteria が並びます。要件のチップの横にはバージョンごとの PASS 率の推移があります。
ヒートマップは論理シナリオのパラメータ空間で、1 マスが 1 つの具体シナリオです。X 軸・Y 軸と、横に並べて分割する Split by のパラメータを選べます。
- Boundary — 判定が異なるマスの間に引かれた細い線。SUT が対処しきれなくなる境目です。
- Unavoidable(斜線) — 最初から理想的なブレーキをかけても衝突する実行。ここでの FAIL は SUT ではなくシナリオ側の限界です。
- Color by — Verdict(PASS / FAIL)のほか、Min gap や Min TTC の値で塗り分けて、PASS したマスがどれだけ際どかったかを見られます。
実行を再生する
Section titled “実行を再生する”
マスをクリックすると、その実行が右側で再生されます。PASS の実行は最初から、FAIL の実行は失敗の 1 秒前から再生が始まり、衝突した時点で止まってキャンバスに印(Collision · 4.12 s)が付きます。下の要約には判定・理由・パラメータ値が出ます。再生バーにはいつもの Follow・Ghost・Trajectory(ego の計画経路)・Plot があり、キャンバスは隅のボタンでズームできます。Open in editor を押すと、その実行を通常のシナリオエディタで開きます。
バージョンを比較する
Section titled “バージョンを比較する”
上端バーの Compare をクリックします。表示中のバージョンが 1 つ前のバージョンと比べられます。チップのクリックで表示するバージョンを、Alt+クリックで比較元のバージョンを切り替えられます。ヒートマップは Δ v1.1 → v1.2 の差分表示になり、Regressed・Fixed・Still FAIL・Still PASS で塗り分けられ、横に件数が出ます。マスを再生すると、比較元のバージョンの ego がバージョンラベル付きの Ghost として並んで走り、要約には 2 つの実行が分かれ始めた時点(例: From 4.68 s: harder braking than v1.1)が出ます。
用語は ISO 34501 / 34505 と ISTQB に合わせています。
| 用語 | ファイルでは |
|---|---|
| 機能シナリオ(Functional scenario) | 説明文と図(.drawtonomy.svg) |
| 論理シナリオ(Logical scenario) | .xosc とパラメータの範囲(.pvd.xosc) |
| 具体シナリオ(Concrete scenario) | パラメータ値の 1 組。ヒートマップの 1 マス、1 回の実行 |
| テストケース(Test case) | testcase.yaml: 論理シナリオ + 合否基準 + SUT |
| テストスイート(Test suite) | フォルダ全体 |
| テスト実行(Test run) | SUT の 1 つのバージョンでスイート全体を回したもの: results/<sut>@<version>/ |
| 要件(Requirement) | requirements/*.md。テストケースと多対多でつながる |
あわせて機能・論理・具体シナリオもご覧ください。
- GitHub では公開リポジトリだけに対応しています。private リポジトリにはまだ対応していません。
- サインインなしの GitHub API は 1 時間に 60 リクエストまでです。1 回開くのに数リクエスト使うので、何度も再読み込みすると上限に達することがあります。
- サンプルの実行数は数百件です。数千件を超える実行や非常に大きなログを持つスイートは、まだ想定していません。