feat: 多轮运行 + GCOV 合并 + JSON 出力 + DesignDataGenerator
This commit is contained in:
+2
-2
@@ -14,8 +14,8 @@ class Config:
|
||||
project_name: str = ""
|
||||
copybook_paths: list = field(default_factory=lambda: ["./copybooks"])
|
||||
dialect: str = "ibm"
|
||||
llm_model: str = "gpt-4o-mini"
|
||||
llm_timeout: int = 15
|
||||
llm_model: str = "deepseek-v4-flash"
|
||||
llm_timeout: int = 120
|
||||
llm_cache_dir: str = ".cache/llm"
|
||||
coverage_default: str = "boundary"
|
||||
rounding_mode: str = "TRUNCATE"
|
||||
|
||||
@@ -24,6 +24,24 @@ class TableDef:
|
||||
sql_name: Optional[str] = None # COBOL SQL table name if different from YAML name
|
||||
|
||||
|
||||
@dataclass
|
||||
class SysinDef:
|
||||
"""SYSIN card configuration for a single run scenario.
|
||||
Each program defines its own sysin fields; period/modes are KIN08DBU specific.
|
||||
"""
|
||||
period: str | None = "202607"
|
||||
include_invalid_period: bool = False
|
||||
modes: list[str] = field(default_factory=lambda: ["NORMAL"])
|
||||
|
||||
|
||||
@dataclass
|
||||
class ScenarioDef:
|
||||
"""A single run scenario: one set of inputs for one COBOL execution."""
|
||||
id: str
|
||||
sysin: SysinDef = field(default_factory=SysinDef)
|
||||
inject_duplicate_pk: bool = False
|
||||
|
||||
|
||||
@dataclass
|
||||
class ProgramSchema:
|
||||
program_id: str
|
||||
@@ -31,6 +49,7 @@ class ProgramSchema:
|
||||
subprograms: list[str] = field(default_factory=list)
|
||||
db_type: str = "SQLite"
|
||||
db_name: str = "OVERTIME.DB"
|
||||
runs: list[ScenarioDef] = field(default_factory=list)
|
||||
|
||||
@classmethod
|
||||
def from_yaml(cls, path: str | Path) -> ProgramSchema:
|
||||
@@ -44,12 +63,22 @@ class ProgramSchema:
|
||||
name=t["name"], columns=cols,
|
||||
sql_name=t.get("sql_name"),
|
||||
))
|
||||
runs_raw = raw.get("runs", [])
|
||||
runs = []
|
||||
for r in runs_raw:
|
||||
sysin_raw = r.get("sysin", {})
|
||||
runs.append(ScenarioDef(
|
||||
id=r["id"],
|
||||
sysin=SysinDef(**sysin_raw),
|
||||
inject_duplicate_pk=r.get("inject_duplicate_pk", False),
|
||||
))
|
||||
return cls(
|
||||
program_id=raw["program_id"],
|
||||
db_tables=tables,
|
||||
subprograms=raw.get("subprograms", []),
|
||||
db_type=raw.get("db_type", "SQLite"),
|
||||
db_name=raw.get("db_name", "OVERTIME.DB"),
|
||||
runs=runs,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -52,3 +52,28 @@ db_tables:
|
||||
subprograms:
|
||||
- SUB02MSG
|
||||
- SUB03END
|
||||
|
||||
runs:
|
||||
- id: normal
|
||||
# 標準シナリオ:P 卡有効 + RESET → 大部分の分岐をカバー
|
||||
sysin:
|
||||
period: "202607"
|
||||
include_invalid_period: true
|
||||
modes: ["NORMAL", "RESET"]
|
||||
inject_duplicate_pk: false
|
||||
|
||||
- id: no_period
|
||||
# #1 T(NOT WRK-PERIOD-OK)をカバー:P 卡なし
|
||||
sysin:
|
||||
period: null
|
||||
include_invalid_period: false
|
||||
modes: ["NORMAL"]
|
||||
inject_duplicate_pk: false
|
||||
|
||||
- id: insert_error
|
||||
# #13 T / #28 T(INSERT SQL エラー)をカバー:PK 競合行注入
|
||||
sysin:
|
||||
period: "202607"
|
||||
include_invalid_period: true
|
||||
modes: ["NORMAL", "RESET"]
|
||||
inject_duplicate_pk: true
|
||||
|
||||
Reference in New Issue
Block a user