断言架构
要主动判定架构变动是否恰当,实际上就是研究某特定包的耦合。事实上,通过对软件架构内关键包的传入和传出耦合进行监控,以及观察预期值的偏离,您能轻松地发现错误的修改。
举例而言,在图 2 所示的修改中, data 层的新传出耦合现在大于 0,因为该层目前要直接与 business 层通信。当然,这种耦合是通过 data 层中一个简单的 import (及对引用类的使用)而引入的。幸运的是,很容易通过 JUnit、JDepend 的优秀 API 发现此类问题,还有,构建时需要一些技巧。
事实证明,在构建(如 Ant 或 Maven)上下文中,您能够运行使用 JDepend API 的 JUnit 测试主动辨别耦合值的变化;此外,如果这些变化不正确,您就可以使构建失败。这就实现了主动性,不是吗?
第一步是创建一个 JUnit 测试并且对 JDepend 做相应配置,如清单 2 所示:
清单 2. 在 JUnit 中设置 JDepend
import junit.framework.TestCase;
import jdepend.framework.JavaPackage;
import jdepend.framework.JDepend;
public class ArchitecturalRulesTest extends TestCase {
private static final String DIRECTORY_TO_ANALYZE = "C:/dev/project-sandbox/brewery/classes";
private JDepend jdepend;
private String dataLayer = "com.beer.business.data";
private String businessLayer = "com.beer.business.service";
private Collection dataLayerViolations = new ArrayList<String>();
public ArchitecturalRulesTest(String name) {
super(name);
}
protected void setUp() throws IOException {
jdepend = new JDepend();
jdepend.addDirectory(DIRECTORY_TO_ANALYZE);
// Calling the businessLayer from the dataLayer is a violation
dataLayerViolations.add(businessLayer);
}
清单 2 很长,我们总结以下几个要点:
需要两个 JDepend 类:jdepend.framework.JavaPackage 和 jdepend.framework.JDepend。
待分析的源类位置由 DIRECTORY_TO_ANALYZE 常量定义。JDepend 通过调用 JDepend.addDirectory 扫描该目录,该操作通过一个 fixture 完成(即 setUp() 方法)。
文章来源于领测软件测试网 https://www.ltesting.net/