有没有办法在 QC 中跟踪错误的历史记录?我想要得到的是在一个版本中重新打开了多少错误以及重新打开了多少次。从 QC 来看,我只能看到“状态”为“关闭”,但它不会给我关于它多次从“关闭”变为“重新打开”然后“修复”然后“重新打开”然后“关闭”的信息”。
提前致谢!
有没有办法在 QC 中跟踪错误的历史记录?我想要得到的是在一个版本中重新打开了多少错误以及重新打开了多少次。从 QC 来看,我只能看到“状态”为“关闭”,但它不会给我关于它多次从“关闭”变为“重新打开”然后“修复”然后“重新打开”然后“关闭”的信息”。
提前致谢!
QC 的审计历史表存储了 QC 元素中每次更改的信息(此处为 Bug)。因此,您可以编写一个检索重新打开缺陷的 SQL 查询。我称它们为第一次修复失败,它们提供了很好的证据,说明为什么当你得到更多的测试时会发生更多的测试
以下是包含此信息的博客链接,并通过 SQL 查询示例说明如何提取
历史记录表不会自动跟踪所有内容,因此请首先确保尽可能在自定义字段模块中对其进行标记以跟踪历史记录。如果您通过 Saas 使用 QC 并且无法访问 Sql Server,您始终可以通过 OTA (QC Api) 进行操作并在那里使用 sql。其他替代方法,使用工作流程并写入文件,可能是有关 QC 模块的 onchanged 事件或更确切地说是 onsaved 事件的 xml 文件(使用 vbscript)。
您可以创建一个 SQL 查询(直接查询数据库,或使用 QC 的“出色”仪表板和那里的 Excel 查询)查看历史记录表中该字段和缺陷编号的行。
文档应该有足够的示例来处理这样的查询,您应该能够提出一个可用的查询,如果您发布它,它可以工作或可以在此处讨论。
这里的关键是我们在工作流中有一个明确的“重新打开”状态,我们可以对此进行测试。不是当前状态,而是我们通过该状态的次数。这可以作为自定义 Excel 报告轻松完成。
正如 Anthony Hilyard 所示,它本质上是 Bug 表和审计日志/属性表之间的连接。要获得版本,您还需要加入 Releases 表。我们同时使用检测到的版本和目标版本。对于任何未解决的缺陷,目标版本将移至当前版本,因此我们将它们合并在一起,因此如果没有目标版本,它将使用当前版本。与 Anthony 的解决方案不同,我们只想计算重新打开的次数,而不是列出它们。
要在 Release 中查看的 SQL '@RelNam@' 如下所示:
SELECT
BG.BG_BUG_ID As 'Defect ID',
BG.BG_STATUS As 'Status',
COUNT(AU.AU_ACTION_ID) As 'Reopens',
BG.BG_DETECTED_BY AS 'Detected By',
BG.BG_SUMMARY As 'Summary'
FROM BUG BG
LEFT JOIN AUDIT_LOG AU ON BG.BG_BUG_ID = AU.AU_ENTITY_ID
INNER JOIN AUDIT_PROPERTIES AP ON AU.AU_ACTION_ID = AP.AP_ACTION_ID
INNER JOIN RELEASES RLS ON RLS.REL_ID = COALESCE(BG.BG_TARGET_REL,BG.BG_DETECTED_IN_REL)
WHERE 1=1
AND RLS.REL_NAME = '@RelNam@'
AND (AU.AU_ENTITY_TYPE = 'BUG' OR AU.AU_ENTITY_TYPE IS NULL)
AND AU.AU_ACTION = 'UPDATE'
AND (AP.AP_PROPERTY_NAME = 'Status' AND AP.AP_NEW_VALUE = 'Reopen')
GROUP BY
BG.BG_BUG_ID,
BG.BG_STATUS,
BG.BG_DETECTED_BY,
BG.BG_SUMMARY
按 BG.BG_BUG_ID 订购
如果您想改用日期,请删除与发布和相关联的 WHERE 子句的连接,而只使用 BG_DETECTION_DATE 测试。
如果您没有明确的“重新打开”状态,但您的工作流有“重新测试”和“修复”,则可以改为查找涉及旧状态=重新测试和新状态=“修复”的转换事件的数量。这将排除第一次通过,仅在重新打开缺陷的情况下。
请记住,如果要在输出中添加列,请确保它们也在底部的“分组依据”子句中。
这是我使用的 Excel SQL 提取:
SELECT
"defect"."BG_BUG_ID" AS "Defect",
"defect"."BG_STATUS" AS "Status",
"defect"."BG_SEVERITY" AS "Severity",
"defect"."BG_PRIORITY" AS "Priority",
"defect"."BG_USER_03" AS "Category",
"defect"."BG_USER_01" AS "Modules",
"defect"."BG_USER_08" AS "EFD",
"defect"."BG_USER_02" AS "Region",
"defect"."BG_SUMMARY" AS "Summary",
"defect"."BG_DETECTED_BY" AS "Detected By",
"audit_log"."AU_ACTION" AS "Action",
"audit_log"."AU_USER" AS "User",
"audit_property"."AP_OLD_VALUE" AS "Old Value",
"audit_property"."AP_NEW_VALUE" AS "New Value",
"audit_log"."AU_TIME" AS "Change Time",
"audit_property"."AP_PROPERTY_NAME" AS "Change Area"
FROM
BUG "defect"
INNER JOIN AUDIT_LOG "audit_log" ON "defect"."BG_BUG_ID" = "audit_log"."AU_ENTITY_ID"
INNER JOIN AUDIT_PROPERTIES "audit_property" ON "audit_log"."AU_ACTION_ID" = "audit_property"."AP_ACTION_ID"
WHERE
"audit_log"."AU_ENTITY_TYPE" = 'BUG'