0
点赞
收藏
分享

微信扫一扫

原型工具开发:基于代码变更的过时需求识别


1 捕获代码变更

Jdiff可以捕获代码中新增或删除的代码元素,旧版本中的一个代码元素在新版本中没有同名元素则被认为是删除的元素,同理可得新增的元素。

原型工具开发:基于代码变更的过时需求识别_xml

2 构建变更组 

首先根据新增和删除的类型提出了17种变更场景;紧接着通过一组制品属性定义了特定的变更场景;然后根据启发式规则识别出符合特定变更场景的变更,而因这些变更产生的代码元素被认为是需求相关元素;最后按类对需求相关元素进行分组,形成变更组。

2.1 变更场景

原型工具开发:基于代码变更的过时需求识别_新版本_02

原型工具开发:基于代码变更的过时需求识别_新版本_03

 2.2 制品属性定义特定的变更场景

原型工具开发:基于代码变更的过时需求识别_新版本_04

  2.3 利用启发式规则检测需求相关元素

原型工具开发:基于代码变更的过时需求识别_启发式规则_05

2.4 实现 

(1)通过Retro获取制品间相似度,并求得每个需求的候选追踪链

原型工具开发:基于代码变更的过时需求识别_新版本_06

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)根据规则判断是否是需求相关元素


(3)提取关键词后使用Retro匹配关键词集合和需求

 

举报

相关推荐

0 条评论