feat: Phase 2 - HINA Agent + Strategy Agent + classifier
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
"""
|
||||
HINA 策略模板 — 根据程序分类定义必须的测试项和边界条件。
|
||||
|
||||
Task 2.2: 必须项模板 + supplement 函数
|
||||
"""
|
||||
|
||||
STRATEGY_TEMPLATES: dict[str, dict] = {
|
||||
"マッチング": {
|
||||
"required": [
|
||||
"COM-N001", "COM-N002", "COM-A002", "COM-A003",
|
||||
"MT-N001", "MT-N002", "MT-N004", "MT-N005", "MT-N006",
|
||||
],
|
||||
"boundary": ["MT-B001", "MT-B002"],
|
||||
},
|
||||
"キーブレイク": {
|
||||
"required": [
|
||||
"COM-N001", "COM-A002",
|
||||
"KB-N001", "KB-N004", "KB-N005", "KB-A001",
|
||||
],
|
||||
"boundary": ["KB-B001", "KB-B002"],
|
||||
},
|
||||
"条件分岐": {
|
||||
"required": [
|
||||
"B-N001", "B-N003", "B-N006", "B-N009",
|
||||
],
|
||||
},
|
||||
"内部表検索": {
|
||||
"required": [
|
||||
"T-N001", "T-N002", "T-A001", "T-A002",
|
||||
],
|
||||
},
|
||||
"項目チェック": {
|
||||
"required": [
|
||||
"VF-N001", "VF-N002", "VF-N004", "VF-A001",
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def get_strategy(hina_type: str) -> dict:
|
||||
"""返回对应 HINA 类型的策略模板。
|
||||
|
||||
Args:
|
||||
hina_type: HINA 程序分类名称(如 "マッチング")。
|
||||
|
||||
Returns:
|
||||
dict: required 列表及可选的 boundary 列表。
|
||||
未知类型返回空模板 {"required": [], "boundary": []}。
|
||||
"""
|
||||
return STRATEGY_TEMPLATES.get(hina_type, {"required": [], "boundary": []})
|
||||
|
||||
|
||||
def _make_marker(code: str, prefix: str = "REQ") -> dict:
|
||||
"""生成一条标记记录。"""
|
||||
return {
|
||||
"id": f"{prefix}-{code}",
|
||||
"coverage_targets": [code],
|
||||
"fields": {},
|
||||
}
|
||||
|
||||
|
||||
def supplement(base_tests: list[dict], hina_result: dict) -> list[dict]:
|
||||
"""根据 HINA 类型追加模板中的必须项标记记录。
|
||||
|
||||
从 ``hina_result["category"]`` 获取分类,查找对应的策略模板,
|
||||
将模板中所有的 required 和 boundary 项以标记记录形式追加到测试列表末尾。
|
||||
|
||||
Args:
|
||||
base_tests: 已有的测试数据列表(每个元素为 dict)。
|
||||
hina_result: HINA 分类结果,至少包含 ``{"category": str}``。
|
||||
|
||||
Returns:
|
||||
list[dict]: 追加必须项标记记录后的完整测试列表。
|
||||
"""
|
||||
hina_type = hina_result.get("category", "unknown")
|
||||
template = get_strategy(hina_type)
|
||||
result = list(base_tests)
|
||||
|
||||
for code in template.get("required", []):
|
||||
result.append(_make_marker(code))
|
||||
|
||||
for code in template.get("boundary", []):
|
||||
result.append(_make_marker(code, prefix="BND"))
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def supplement_only(base_tests: list[dict], hina_gaps: list[str]) -> list[dict]:
|
||||
"""增量补充指定必须项的标记记录。
|
||||
|
||||
根据传入的 code 列表(而不是从模板查找),只追加缺失的那些必须项标记。
|
||||
|
||||
Args:
|
||||
base_tests: 已有的测试数据列表(每个元素为 dict)。
|
||||
hina_gaps: 需要补充的 HINA 必须项 code 列表。
|
||||
|
||||
Returns:
|
||||
list[dict]: 追加标记记录后的完整测试列表。
|
||||
"""
|
||||
result = list(base_tests)
|
||||
for code in hina_gaps:
|
||||
result.append(_make_marker(code))
|
||||
return result
|
||||
Reference in New Issue
Block a user