104 lines
3.1 KiB
Python
104 lines
3.1 KiB
Python
"""
|
|
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
|