- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经构建了一个程序,它接受提供的“.class”文件并使用 BCEL 解析它,我现在已经学会了如何计算 LCOM4 值。现在我想知道如何计算类文件的CBO(对象之间的耦合)值。我已经搜索了整个网络,试图找到关于它的正确教程,但到目前为止我还无法找到(我也阅读了有关 BCEL 的整个 javadoc,并且 stackoverflow 上有一个类似的问题,但它已被删除)。因此,我需要一些有关此问题的帮助,例如一些详细的教程或代码片段,它们将帮助我了解如何做到这一点。
最佳答案
好的,这里您必须计算整个类集中的类的 CBO。该集合可以是目录、jar 文件或类路径中所有类的内容。
我会用类名作为键填充 Map
private void addClassReferees(File file, Map<String, Set<String>> refMap)
throws IOException {
try (InputStream in = new FileInputStream(file)) {
ClassParser parser = new ClassParser(in, file.getName());
JavaClass clazz = parser.parse();
String className = clazz.getClassName();
Set<String> referees = new HashSet<>();
ConstantPoolGen cp = new ConstantPoolGen(clazz.getConstantPool());
for (Method method: clazz.getMethods()) {
Code code = method.getCode();
InstructionList instrs = new InstructionList(code.getCode());
for (InstructionHandle ih: instrs) {
Instruction instr = ih.getInstruction();
if (instr instanceof FieldOrMethod) {
FieldOrMethod ref = (FieldInstruction)instr;
String cn = ref.getClassName(cp);
if (!cn.equals(className)) {
referees.add(cn);
}
}
}
}
refMap.put(className, referees);
}
}
当您在 map 中添加了所有类别后,您需要过滤每个类别的推荐人以将其限制在所考虑的类别集合中,并添加反向链接:
Set<String> classes = new TreeSet<>(refMap.keySet());
for (String className: classes) {
Set<String> others = refMap.get(className);
others.retainAll(classes);
for (String other: others) {
refMap.get(other).add(className);
}
}
关于java - 使用 BCEL 生成的解析字节码确定对象之间的传出耦合(CBO 指标),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44061843/
在我们拥有的某些服务器上,哈希连接、分组依据和排序依据的成本与实际成本相比似乎太低了。 IE。通常,带有索引范围扫描的执行计划优于前者,但在解释计划中,成本显示得更高。 一些进一步的说明: 我已经将
我已经构建了一个程序,它接受提供的“.class”文件并使用 BCEL 解析它,我现在已经学会了如何计算 LCOM4 值。现在我想知道如何计算类文件的CBO(对象之间的耦合)值。我已经搜索了整个网络,
有时,Oracle 似乎更喜欢 MERGE JOIN CARTESIAN常规操作 MERGE JOIN .了解数据并查看具体的执行计划,我可以看到此操作通常不是问题,因为连接的实体之一只能返回手头查询
我正在尝试从另一个方法返回的 IDataReader 中填充一个集合...出于某种原因,它一直抛出“没有为此对象定义的无参数构造函数”。此行的错误: List names = CBO.FillColl
假设我想加入 3 个表 A、B、C,内部连接和 C 非常小。 #DUMMY EXAMPLE with IN-MEMORY table, but same issue if load table usi
以下错误对 hive 的影响是什么以及如何避免: 17/09/14 16:24:25 [main]: ERROR calcite.RelOptHiveTable: No Stats for user@
我是一名优秀的程序员,十分优秀!