1 捕获代码变更
Jdiff可以捕获代码中新增或删除的代码元素,旧版本中的一个代码元素在新版本中没有同名元素则被认为是删除的元素,同理可得新增的元素。
2 构建变更组
首先根据新增和删除的类型提出了17种变更场景;紧接着通过一组制品属性定义了特定的变更场景;然后根据启发式规则识别出符合特定变更场景的变更,而因这些变更产生的代码元素被认为是需求相关元素;最后按类对需求相关元素进行分组,形成变更组。
2.1 变更场景
2.2 制品属性定义特定的变更场景
2.3 利用启发式规则检测需求相关元素
2.4 实现
(1)通过Retro获取制品间相似度,并求得每个需求的候选追踪链
import xml.etree.cElementTree as ET
import xlwt
from xlwt import Workbook
root = ET.parse("trace.xml")
high_node = root.getiterator("high")
print("收集开始...")
#train_book = xlwt.Workbook()
#train_sheet=train_book.add_sheet('sheet', cell_overwrite_ok=True)
for node in high_node:
book = xlwt.Workbook()
sheet1 = book.add_sheet('sheet1', cell_overwrite_ok=True)
train_book = xlwt.Workbook()
train_sheet = train_book.add_sheet('sheet1', cell_overwrite_ok=True)
print(node.attrib['id'])
high_node_child=[]
high_node_child = node.getchildren()
sourceName=node.attrib['id']
# print(sourceName)
row=0
train_row = 0
for child in high_node_child:
print(child.attrib['id'])
grandson=child.getchildren()[0];
sheet1.write(row, 0, sourceName)
sheet1.write(row, 1, child.attrib['id'])
#train_sheet.write(train_row, 0, sourceName)
train_sheet.write(train_row, 1, child.attrib['id'])
train_sheet.write(train_row, 0, grandson.text)
train_row = train_row + 1
row=row+1
#book.save("links/" + sourceName + '.xls')
train_book.save("links/"+sourceName + '.xls')
print("收集结束")
(2)根据规则判断是否是需求相关元素
代码:https://download.csdn.net/download/A1342772/12322633
(3)提取关键词后使用Retro匹配关键词集合和需求