增强测试系统 — 全面测试计划 v1.0
日期: 2026-06-17 | 対象: feat/enhanced-test-phase1
測試范围: cobol_testgen API / HINA分类 / 质量门禁 / 分层重试 / 增强报告
测试策略
测试层次
テスト手法
| 手法 |
適用レベル |
説明 |
| 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のプログラム |
空リスト返却 |
カバレッジ計測
テスト実行計画
Phase A: ユニットテスト (並列実行可、~5分)
Phase B: HINA統合テスト (~2分)
Phase C: レグレッション (~1分)
Phase D: 実COBOLテスト (~5分、WSL + GnuCOBOL必要)
期待結果サマリー
| テスト種別 |
予定数 |
最低合格数 |
合格率目標 |
| 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% |