要分析的包由 “Layer” String 定義。
dataLayerViolations Collection 添加了 businessLayer String(表示一個包)來指明這是對期望架構的違背。
按照這四個要點,我已經有效地設置了 JDepend,以針對特定代碼庫發揮其魔力,F在,我要設定一些精確的邏輯以說明耦合值的變化。
清單 3 中的 testDataLayer() 測試用例是架構斷言的核心。該方法可判定是否存在對 dataLayer 的任何違背 —— 如果 isLayeringValid() 方法(在下面的 清單 4 中定義)返回 false ,測試用例就被認為失敗,也意味著必然存在一處架構違背。
清單 3. 使用 JDepend 測試架構違背
public void testDataLayer() {
if (!isLayeringValid(dataLayer, dataLayerViolations)) {
fail("Dependency Constraint failed in Data Layer");
}
}
清單 3 中測試用例所調用的方法如清單 4 所示:
清單 4. 循環查找每個包的傳入耦合
private boolean isLayeringValid(String layer, Collection rules) {
boolean rulesCorrect = true;
Collection packages = jdepend.analyze();
Iterator itor = packages.iterator();
JavaPackage jPackage = null;
String analyzedPackageName = null;
while (itor.hasNext()) {
jPackage = (JavaPackage) itor.next();
analyzedPackageName = jPackage.getName();
Iterator afferentItor = jPackage.getAfferents().iterator();
String afferentPackageName = null;
while (afferentItor.hasNext()) {
JavaPackage afferentPackage = (JavaPackage) afferentItor.next();
afferentPackageName = afferentPackage.getName();
}
rulesCorrect = isEfferentsValid(layer, rules, rulesCorrect, jPackage, analyzedPackageName);
}
return rulesCorrect;
}
isLayeringValid() 方法的目的確定 清單 2 中 DIRECTORY_TO_ANALYZE 目錄內所有包的傳入耦合。您可以在清單 4 底部看到,該方法遵守 isEfferentsValid() 方法,如清單 5 所示。
這里,如果 isEfferentsValid() 方法發現某個包不符合指定的包依賴關系(由于從一個包到另一個包的傳出耦合大于 0),則使用 清單 2 中的 dataLayerViolations 集合將該包標記為一個架構違背。這將間接導致 testDataLayer() 測試用例(如 清單 3 所示)失敗。
文章來源于領測軟件測試網 http://www.kjueaiud.com/