斷言架構
要主動判定架構變動是否恰當,實際上就是研究某特定包的耦合。事實上,通過對軟件架構內關鍵包的傳入和傳出耦合進行監控,以及觀察預期值的偏離,您能輕松地發現錯誤的修改。
舉例而言,在圖 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() 方法)。
文章來源于領測軟件測試網 http://www.kjueaiud.com/