Files
cobol-java-v3/docs/test-plan.md
T

12 KiB
Raw Blame History

增强测试系统 — 全面测试计划 v1.0

日期: 2026-06-17 | 対象: feat/enhanced-test-phase1 測試范围: cobol_testgen API / HINA分类 / 质量门禁 / 分层重试 / 增强报告


测试策略

测试层次

L1: ユニットテスト ─ 各関数の単体動作 (pytest, ~50 tests)
    ├── cobol_testgen API
    ├── HINA classifier
    ├── HINA strategy
    ├── quality gate
    ├── retry handler
    └── report generator

L2: 結合テスト ─ モジュール間連携 (pytest, ~20 tests)
    ├── extract_structure → generate_data の一貫性
    ├── generate_data → DataWriter の型整合
    ├── HINA 分類 → 戦略テンプレート のマッピング
    └── quality gate → orchestrator のループ制御

L3: 統合テスト ─ パイプライン全体 (test-data/ 10 programs, ~10 tests)
    ├── HINA001: 1:1 マッチング
    ├── HINA005: IF条件分岐
    ├── HINA025: CALL
    └── HINA101: EXEC SQL

L4: 実COBOLプログラム (jcl-cobol-git/ 4 programs, ~4 tests)
    ├── CRDVAL / CRDCALC / CRDRPT / GENDATA
    └── 実際の金銭計算との一致確認

L5: レグレッションテスト ─ 既存42テストの完全通過

テスト手法

手法 適用レベル 説明
TDD (レッド・グリーン) L1 テストを先に書き、実装で通す
ゴールデンテスト L3-L4 既知の正解値との一致確認
ファジング L2 不正なCOBOL入力に対する耐性
境界値分析 L1-L2 PIC 桁数境界、空値、極大値
エラー注入 L2 LLM timeout/malformed response の動作確認
デグレードテスト L2 gcov failure/absence 時の降格確認
静的カバレッジ L1-L2 cobol_testgen の静的パス網羅率

L1: ユニットテスト

1.1 cobol_testgen API

# テスト名 内容 入力 期待出力
UT-01 extract_structure: 空プログラム 空文字列 {"total_branches": 0}
UT-02 extract_structure: IF 1個 IF A > B ... ELSE ... branches=2, decisions=1
UT-03 extract_structure: EVALUATE EVALUATE X WHEN 1 ... WHEN OTHER decisions=1, WHEN数確認
UT-04 extract_structure: 複数ファイル 3ファイルのプログラム file_count=3 open_directions確認
UT-05 extract_structure: CALL文 CALL 'SUBPGM' has_call=True
UT-06 extract_structure: SEARCH ALL OCCURS+SEARCH ALL has_search_all=True
UT-07 extract_structure: 固定形式 7桁目からコードの固定形式 正常解析(段落数>0)
UT-08 generate_data: 正常生成 IFプログラム 2件以上のデータ
UT-09 generate_data: 空プログラム 分岐なし 0件または1件
UT-10 incremental_supplement: 差分生成 未カバーID指定 IDに対応するデータのみ
UT-11 incremental_supplement: 存在しないID [-1] 空リスト
UT-12 check_coverage: 静的報告 structureのみ "note"に静的限界の記述
UT-13 _cobol_testgen_to_testcases: 型変換 list[dict] list[TestCase]

1.2 HINA Classifier

# テスト名 内容 入力 期待出力
HC-01 L1: DB操作 EXEC SQL SELECT category="DB操作" ≥90%
HC-02 L1: 子程序调用 CALL 'SUBPGM' ... LINKAGE SECTION category="子程序调用" ≥90%
HC-03 L1: SORT SORT WORK-FILE ON KEY category="SORT" ≥90%
HC-04 L1: IS INITIAL PROGRAM-ID. X IS INITIAL. category="IS INITIAL" ≥90%
HC-05 L1: 编辑输出 WRITE AFTER ADVANCING category="编辑输出" ≥80%
HC-06 L1: 文件编成 ORGANIZATION IS category="文件编成" ≥90%
HC-07 L1: キーワード重複 DB操作+CALL両方 最大確信度のキーワード勝ち
HC-08 compute_confidence: L1≥90% L1のみ method="keyword"
HC-09 compute_confidence: LLM結果 LLM result method="hybrid"
HC-10 compute_confidence: 両方なし キーワード無し+LLM無し category="unknown" confidence=0

1.3 HINA Strategy

# テスト名 内容 期待出力
HS-01 get_strategy: マッチング 9 required items
HS-02 get_strategy: キーブレイク 6 required items
HS-03 get_strategy: 条件分岐 4 required items
HS-04 get_strategy: 未知のタイプ 空テンプレート
HS-05 supplement: マーカー追加 マーカーレコード含むlist
HS-06 supplement_only: 特定ギャップ 指定IDのみのマーカー

1.4 Quality Gate

# テスト名 内容 入力 期待
QG-01 全通過 branch≥95%, paragraph=100% passed=True
QG-02 分岐不足 branch=80% passed=False, decision_gaps有
QG-03 段落不足 paragraph=0.5 passed=False
QG-04 データ無し empty list passed=False, no_data=True
QG-05 スコア計算 branch=0.92, para=1.0 score=0.976 例: (1.0×0.5+0.92×0.5)×0.6+1.0×0.4=0.976

1.5 Retry Handler

# テスト名 内容 期待
RH-01 即時PASS 1回目でPASS heal=0, simple=0
RH-02 heal回復 BLOCKED→環境修正→PASS heal=1, simple=0
RH-03 simple回復 BLOCKED→リトライ→PASS heal=0, simple=1
RH-04 上限超過 全てFAIL status=FATAL
RH-05 QUALITY_WARNはリトライ不要 QUALITY_WARN→即戻り heal=0, simple=0

1.6 Report Generator

# テスト名 内容 期待
RG-01 generate_json: 新フィールド VerificationRun全フィールド JSONに全フィールド含む
RG-02 generate_html: カバレッジ表示 paragraph_rate>0 "段落覆盖率"表示
RG-03 generate_html: HINA表示 hina_type設定 "判定类型"表示
RG-04 generate_html: HINA非表示 hina_type="" HINAセクション無し
RG-05 generate_html: 品質スコア表示 quality_score>0 "质量评分"表示
RG-06 generate_html: 品質スコア非表示 quality_score=0 品質セクション無し
RG-07 generate_html: 警告表示 quality_warn設定 警告バナー表示
RG-08 generate_machine_json: 全フィールド VerificationRun branch_rate等を含む
RG-09 generate_json: 後方互換 新フィールド未設定 既存JSONと同じ構造

L2: 結合テスト

# テスト名 シナリオ 期待
CT-01 extract→generate 一貫性 同一ソースでextract→generate generate_dataがデータ生成可能
CT-02 HINA→Strategy マッピング マッチング分類→全マーカー生成 9個のマーカー
CT-03 QG→incremental ループ制御 分岐不足→supplement→再検査 passed=Trueになる
CT-04 strategy→TestCase 型整合 supplement出力→TestCase変換 TestCaseオブジェクトとして利用可
CT-05 orchestrator: 正常系 cobol_testgen→HINA→QG→DataWriter complete_testsがDataWriterに渡る
CT-06 orchestrator: LLM例外 HINA Agentが例外発生 エラーログ出力、パイプライン継続
CT-07 orchestrator: gcov無効 gcov_enabled=False 動的カバレッジスキップ
CT-08 gcov_collector: 非インストール gcovコマンド不在 available=False
CT-09 gcov_collector: 正常 .gcda/.gcno存在 available=True, line_rate計算
CT-10 Config: 品質ゲート設定 aurak.toml変更→from_toml quality_gate_mode=warn

L3: HINA 統合テスト

test-data/cobol/HINA*.cbl の10プログラムを使用:

# プログラム 検証項目 期待
IT-01 HINA001 マッチング構造解析 段落≥8, ファイル≥2
IT-02 HINA005 IF分岐カバレッジ 分岐≥6, 決定点≥3
IT-03 HINA006 EVALUATEカバレッジ 分岐≥6, 決定点≥3
IT-04 HINA007 キーブレイク解析 段落≥3, ファイル≥2
IT-05 HINA013 項目チェック解析 分岐≥6, 決定点≥3
IT-06 HINA025 L1分類+CALL解析 HINA="子程序调用", confidence≥90%
IT-07 HINA101 L1分類+SQL解析 HINA="DB操作", confidence≥95%
IT-08 run_validation.py全実行 全HINAプログラム 8/10 pass (既知制限2件)

L4: 実COBOLプログラム統合

jcl-cobol-git/ の4プログラムを使用:

# プログラム 検証項目 期待
RT-01 CRDVAL COPYBOOK展開+全パイプライン エラー無し
RT-02 CRDCALC 同上 同上
RT-03 CRDRPT 同上 同上
RT-04 GENDATA 同上 同上

L5: レグレッションテスト

# テスト コマンド 期待
RG-01 comparator 全テスト pytest tests/comparator/ -v 22 passed
RG-02 report 全テスト pytest tests/report/ -v 3 passed
RG-03 golden 全テスト pytest tests/test_golden.py -v 11 passed
RG-04 e2e imports pytest tests/test_e2e.py -v 1 passed
RG-05 全ユニット pytest tests/ --ignore=e2e/ --ignore=test_web_e2e.py --ignore=test_biz_e2e.py -v 42 passed

エッジケーステスト

# シナリオ 入力 期待
EC-01 空COBOL IDENTIFICATION DIVISION. PROGRAM-ID. X. エラー無し
EC-02 巨大プログラム 1万行レベル タイムアウト無し(30秒以内)
EC-03 日本語文字列 PIC N 全角データ extract正常
EC-04 REDEFINES REDEFINES使用プログラム 正常解析
EC-05 OCCURS DEPENDING ODO使用 正常解析
EC-06 88-level値 88-level多数 is_88=Trueで認識
EC-07 コメントのみ 全行コメント エラー無し
EC-08 不正PIC PIC Xの代わりにPIC XXX 正常
EC-09 空ファイルパス --cobol-srcで存在しないファイル BLOCKED
EC-10 Lark文法エラー 予期しない文字列 空構造、エラーログ出力

エラー注入テスト

# シナリオ 注入方法 期待
EI-01 LLMタイムアウト LLMClient.call でtimeout フォールバック実行、ログ出力
EI-02 LLM不正JSON 応答が無効JSON _fallback_classification 使用
EI-03 LLM空文字 応答が空文字 同上
EI-04 gcovコマンド不在 gcov利用不可 available=False reason=gcov_not_installed
EI-05 gcov出力異常 不正な.gcovファイル available=False reason=gcov_failed
EI-06 extract_structure 解析失敗 Larkがパースできない入力 空構造返却、ログ出力
EI-07 generate_data 空結果 分岐0のプログラム 空リスト返却

カバレッジ計測

目標カバレッジ (pytest --cov):
  cobol_testgen API:    ≥ 80% (主要3関数)
  hina/classifier.py:   ≥ 90% (L1ルール全カバー)
  hina/gate.py:         ≥ 95% (全分岐)
  hina/retry.py:        ≥ 90% (全リトライパス)
  report/generator.py:  ≥ 70% (HTMLテンプレート網羅)

テスト実行計画

Phase A: ユニットテスト (並列実行可、~5分)

# 1. 全ユニット
pytest tests/ -v --ignore=tests/e2e/ --ignore=tests/test_web_e2e.py --ignore=tests/test_biz_e2e.py

# 2. カバレッジ計測
pytest --cov=cobol_testgen --cov=hina --cov=report --cov=data tests/ -v

Phase B: HINA統合テスト (~2分)

python test-data/run_validation.py

Phase C: レグレッション (~1分)

python -m pytest tests/comparator/ tests/report/ tests/test_golden.py tests/test_e2e.py -v

Phase D: 実COBOLテスト (~5分、WSL + GnuCOBOL必要)

# WSL側で実行
python3 -m pytest tests/test_golden.py -v

期待結果サマリー

テスト種別 予定数 最低合格数 合格率目標
L1 ユニット ~45 45 100%
L2 結合 ~10 10 100%
L3 HINA統合 8 8 100%
L4 実COBOL 4 4 100%
L5 レグレッション 42 42 100%
エッジケース 10 10 100%
エラー注入 7 7 100%
総計 ~126 126 100%