You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效构建SWRS-SWTS映射的Pandas DataFrame

软件需求-测试用例追踪矩阵高效构造方案

问题说明

  • 构建目标:生成SWRS(软件需求)-*SWTS(软件测试用例)*追踪矩阵,行索引为项目全量SWRS名称,列索引为项目全量SWTS名称;若某条SWRS被对应SWTS覆盖,在交叉单元格填入标记,后续需支持填入通过、失败、未执行等不同测试状态值
  • 现有方案缺陷:先创建空Pandas DataFrame再双层遍历mapping映射字典逐单元格填充值的方式运行效率低;尝试直接传入mapping字典构造DataFrame时,仅能得到全为NaN的空表,无法正确生成映射关系

原有实现代码

import pandas as pd
struct = {
            "swrslist":["swrs1","swrs2","swrs3","swrs4"],
            "swtslist":["swts1","swts2","swts3","swts4","swts5","swts6"],
            "mapping":
                {
                    "swrs1": ["swts1", "swts3", "swts4"],
                    "swrs2": ["swts2", "swts3", "swts5"],
                    "swrs4": ["swts1", "swts3", "swts5"]
                }
           }

if __name__ == "__main__":
    df = pd.DataFrame( index = pd.Index(pd.Series(struct["swrslist"])),
                      columns = pd.Index(struct["swtslist"]))
    print(df)
    for key in struct["mapping"].keys():
        for elem in struct["mapping"][key]:
            print(key, elem)
            df.at[key,elem] = "x"
    print(df)
    df.to_excel("mapping.xlsx")

预期正确输出

swts1 swts2 swts3 swts4 swts5 swts6
swrs1     x   NaN     x     x   NaN   NaN
swrs2   NaN     x     x   NaN     x   NaN
swrs3   NaN   NaN   NaN   NaN   NaN   NaN
swrs4     x   NaN     x   NaN     x   NaN

错误构造方式:直接执行df = pd.DataFrame(struct["mapping"], index = pd.Index(pd.Series(struct["swrslist"])),columns = pd.Index(struct["swtslist"]))会生成全为NaN的空DataFrame,无法得到正确结果。

高效实现方案

核心逻辑为将映射关系转换为长表结构后,通过Pandas内置的透视、重索引方法自动生成矩阵,全程无逐单元格双层遍历,使用向量化运算保证性能,同时天然支持多状态值填充。

实现代码

import pandas as pd

struct = {
            "swrslist":["swrs1","swrs2","swrs3","swrs4"],
            "swtslist":["swts1","swts2","swts3","swts4","swts5","swts6"],
            "mapping":
                {
                    "swrs1": ["swts1", "swts3", "swts4"],
                    "swrs2": ["swts2", "swts3", "swts5"],
                    "swrs4": ["swts1", "swts3", "swts5"]
                }
           }

if __name__ == "__main__":
    # 展开映射关系为(需求ID, 用例ID, 标记值)三元组,后续可直接替换标记值为pass/fail/not_run等状态
    map_tuples = []
    for swrs_id, covered_swts in struct["mapping"].items():
        map_tuples.extend([(swrs_id, swts_id, "x") for swts_id in covered_swts])
    
    # 长表转宽表自动生成映射矩阵
    long_df = pd.DataFrame(map_tuples, columns=["swrs", "swts", "mark"])
    df = long_df.pivot(index="swrs", columns="swts", values="mark")
    
    # 补全所有缺失的行、列,保证与全量需求、全量用例列表完全对齐
    df = df.reindex(index=struct["swrslist"], columns=struct["swtslist"])
    
    print(df)
    df.to_excel("rtm_matrix.xlsx")

方案优势

  • 无逐单元格循环操作,基于Pandas内置向量化逻辑实现,数据规模越大性能优势越明显
  • 支持多状态标记:生成三元组时可直接给每个需求-用例对传入对应的测试执行结果值,无需修改后续矩阵生成逻辑
  • 自动对齐全量索引:未关联任何用例的需求、未关联任何需求的用例都会自动补全到矩阵中,不会出现行列缺失

内容的提问来源于stack exchange,提问作者Catosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:15:49