Page 150 - 《软件学报》2020年第11期
P. 150
3466 Journal of Software 软件学报 Vol.31, No.11, November 2020
际的拆分代价决定拆分粒度,如果原代码的耦合度过高,可以考虑先以大粒度拆分服务、再逐步细化.
一般情况下的开销:SQL 拆分>方法拆分>方法移动(即类的拆分).
2.2.2 生成数据表权重图
从数据关联度和共享度这两个维度出发,将数据访问轨迹图转化成如图 4 所示的数据表图,图中每个顶点
表示数据库中的一张表,根据以下方法向图中添加边,并计算权重.
Fig.4 Database table graph
图 4 数据表图
(1) 基础定义
a) 定义数据访问轨迹图中共包含 N scenario 个场景、N Trace 条方法调用链、N SQL 条 SQL 语句和 n 张表.
b) 第 i 个场景 Scenario i 的权重定义为 W Scenarioi ,由设计人员根据业务场景的重要程度,于每个测试用例执
行之前进行设置,即为“输入准备”步骤中的“用例权重”.
c) 第 i 条方法调用链 Trace i 的权重定义为 W Tracei ,等于这条调用链所属的场景的权重.
d) 第 i 条 SQL 语句 SQL i 的权重定义为W SQL i ,等于每个场景的权重与其执行 SQL i 次数的乘积的累加和.
N Scenario
W SQL = W Scenario T ⋅ ∑ Scenario (SQL ) (1)
i
k = 1 k k i
其中, T Scenario k (SQL i ) 表示第 k 个场景执行 SQL i 的次数.
(2) 计算数据表关联度矩阵
对于两个数据表 T a ,T b ,从场景、方法调用链和 SQL 语句这 3 个级别分别计算它们之间的关联度.
a) 定义 Scenario(T i )为操作了数据表 T i 的场景的集合,T a ,T b 两个数据表关于场景级别的关联度表示为
C Scenario (T a ,T b ),等于同时操作 T a ,T b 这两张表的场景的累加权重与操作其中任意一张表的场景的累加
权重之比.
W Scenario Scenario∈ ∑ ( a T ) Scenario T∩ )
T T
C Scenario (, ) = ( b (2)
∈ ∑
a
b
W Scenario Scenario ( a T ∪ ) Scenario T )
( b
b) 定义 Trace(T i )为操作了数据表 T i 的方法调用链集合,T a ,T b 两个数据表关于调用链级别的关联度表示
为 C Trace (T a ,T b ),等于同时操作 T a ,T b 这两张表的调用链的累加权重与操作其中任意一张表的调用链的
累加权重之比.
W Trace Trace∈ ∑
C Trace (, ) = ( a T ) Trace T∩ ( b ) (3)
T T
∈ ∑
b
a
W Trace Trace ( a T ∪ ) Trace T )
( b
c) 定义 SQL(T i )为操作了数据表 T i 的 SQL 语句集合,T a ,T b 两个数据表关于 SQL 级别的关联度表示为
C SQL (T a ,T b ),等于同时操作 T a ,T b 这两张表的 SQL 语句的累加权重与操作其中任意一张表的 SQL 语句
的累加权重之比.
W SQL SQL∈ ∑ ) SQL T∩
C (, ) = ( a T ( b ) (4)
T T
∈ ∑
SQL a b
W SQL SQL ( a T ∪ ) SQL T )
( b
将 3 个级别的关联度按下式进行加权累加,得到表 T a ,T b 的总关联度 C Total (T a ,T b ).
C Total (T a ,T b )=α 1 ⋅C SQL (T a ,T b )+α 2 ⋅C Trace (T a ,T b )+α 3 ⋅C Scenario (T a ,T b ) (5)
其中,α 1 =0.6,α 2 =0.3α 3 =0.1.