feat: Phase 2 - HINA Agent + Strategy Agent + classifier

This commit is contained in:
hangshuo652
2026-06-18 16:10:38 +08:00
parent c021dfe01e
commit de506d9c31
4 changed files with 530 additions and 3 deletions
+103
View File
@@ -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