1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeに書かせたpytest 237本、AIの判断を見ているテストが何本か数えられなかった

1
Last updated at Posted at 2026-09-27

「テストは237本、全部通っています」

Claude Code に実装を任せて、機能を1つ足すたびにテストも書かせてきました。完了条件は「pytest が全部通ること」です。その結果が237本です。

そのうち、AIの判断が妥当かを見ているテストが何本あるか。数えようとして、数えられませんでした。

手が遅いからではありません。数える対象を間違えていました。

前提:どういう構成か

  • Python / FastAPI / Alembic のバックエンド(ビル管理の業務システム)
  • テストは pytest。収集対象は tests/integration/ 以下
  • tests/ 直下には run() 型の手動スクリプトが別にあり、こちらは pytest に収集されない
  • フルスイートは1回4〜5分

237という数字は、この収集範囲の内側を数えたものです。

marker で分類しようとして、止まった

最初に考えたのは、pytest の marker で印をつけることでした。

@pytest.mark.ai_judgment
def test_xxx():
    ...

こうしておけば pytest -m ai_judgment で絞り込めます。問題は、その印をつける作業です。

いまの分類の軸はディレクトリしかありません。タグも命名規則も無いので、「AIが関与する処理かどうか」で絞り込む手段がない。いまは ai_ で始まるモジュール名を手がかりに、人が目で拾っています。

marker を付けるには、237本を1本ずつ読んで判断することになります。1本1分でも4時間。途中で判断の基準がぶれたら、最初からやり直しです。

そして、100本に印をつけ終えた時点でも、残り137本に「AIの判断を見ているテスト」があるかどうかは確定しません。途中経過に意味がない。止まったら全部が無駄になります。

ここで止まりました。

数え切れる側は、反対にあった

止まったまま反対側を数えたら、こちらは終わりました。

このシステムでAIが判断している工程は、12個です。

# 工程
1 点検欠落の検知
2 巡回超過の検知
3 修繕放置の検知
4 契約期限の検知
5 SSOT陳腐化の検知
6 提出期限の検知
7 管轄未解決の検知
8 有資格者欠如の検知
9 優先順位の算出
10 リスクスコアの算出
11 放置リスクの言語化
12 故障の予測

全部に名前が付いています。数えるのに5分もかかりません。

237本は分類できない。12個は数え切れる。同じことを確かめようとしていたのに、片方だけが終わりました。

テストの外に、1枚の表を置く

やることが1つに決まります。テストの側に marker を足すのではなく、テストの外に表を1枚置きます。

  • 行:AIが判断している工程(12行)
  • 列:「動作の検証」と「判断の検証」の2つだけ
  • マス:テストのノードIDを書く

ノードIDの一覧は、pytest の収集だけで取れます。

pytest --collect-only -q tests/integration

tests/integration/test_xxx.py::test_yyy の形で1行ずつ出るので、それを該当するマスに貼るだけです。テストのコードは1行も変えません。

表の形はこうなります。

工程 動作の検証 判断の検証
点検欠落の検知
巡回超過の検知
修繕放置の検知
…
故障の予測

この形にすると、埋める作業は12回で終わります。237回ではありません。

そして埋め終わったとき、空欄が答えになります。テストが1本も当たっていない工程が、そのまま見える。全部埋め終わる前でも、1行目から空欄は見えます。

なぜ、少ない側から数えると終わるのか

数が多い側から数えると、全部を触るまで何も確定しません。

数が少ない側から数えると、1行目で1つ確定します。「点検欠落の検知に、判断を見ているテストがあるか」は、その1行を調べた時点で決まる。残りの11行は関係ありません。

分類の作業は、多い側からは終わらない。少ない側からしか終わりません。

テストに限らず、ログの分類でも、問い合わせの分類でも同じ形でした。分類しようとして止まるときは、たいてい多い側から手をつけています。

237は、何を確かめた数字だったか

237本が通っていることには価値があります。仕様どおりに動くことも、前に動いていたものが壊れていないことも、それで確かめられます。

ただし 237 は「テストが何本あるか」の数字であって、「AIが判断している工程のうち、いくつが守られているか」の数字ではありません。この2つは別物です。

237冊の本に索引を付けようとしていました。棚は、12本です。


この記事で扱ったのは「どこから数えるか」までです。

では、237本が通っていることは何を保証していて、何を保証していないのか。保証していないものは3つありました ── AIの判断そのものの妥当性、実データでの正しさ、係数と確信度の値。この3つを1つずつ分解した記録を note に書いています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?