JAVA 静态代码分析--圈复杂度检查-javancss

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/magic_wz/article/details/16880643

简介

javancss是用于圈复杂度检查的,例如一个方法里有很多很多的for if else,则圈复杂度就会很多,也就是说这个方法的分支太多了,最大问题就是导致代码非常丑陋,有可能情况也会导致效率问题。

安装

下载:http://download.csdn.net/detail/magic_wz/6591913

官网:http://www.kclee.de/clemens/java/javancss/

以windows为例,解压缩到c盘下即可。

运行

JAVA基本的设置还是要设置的,如PATH的设置,这里就不在多说了
我这里运行的时候一直报错 系统找不到指定路径,后来查明,原来是我没有设置JAVA_HOME
这个也是必须的,计算机--》属性--》高级系统设置--》环境变量,设置JAVA_HOME C:\jdk1.7.0_21
还要设置CLASSPATH C:\javancss-32.53\lib
运行:
C:\javancss-32.53\bin>javancss -gui  C:\Users\git\web\code\nksweb\src\
运行即可
如果运行不起来,还有可能是JAVA PATH中有空格,注意一下
运行效果:

解释

NCSS Non Commenting Source Statements   类似于 java 的有效代码行。
CCNCyclomatic Complexity Number),用于评价类方法的圈复杂度。

如何降低CCN圈复杂度

例如我的某个方法中有很多IF用来判断
if (this.PostgreSQL != null && !PostgreSQL.equals("")) {
			nkseServiceItemList.add(new NkseServiceItem(PostgreSQL,
					PostgreSQL_Paras, this.hasGraph(PostgreSQL)));
		}

		if (this.Oracle != null && !Oracle.equals("")) {
			nkseServiceItemList.add(new NkseServiceItem(Oracle, Oracle_Paras,
					this.hasGraph(Oracle)));
		}

		if (this.Informix != null && !Informix.equals("")) {
			nkseServiceItemList.add(new NkseServiceItem(Informix,
					Informix_Paras, this.hasGraph(Informix)));
		}...
大概就是如此,一共就几十个,最好查出来这个方法的CCN是四五十,代码虽然看起来没什么问题,但是确实是不太好看,看上去全是IF。
于是我思考用MAP来解决问题
HashMap<String, String> map = new HashMap<String, String>();
		map.put(this.MySQL, this.MySQL_Paras);
		map.put(this.PostgreSQL, this.PostgreSQL_Paras);
		map.put(this.Oracle, this.Oracle_Paras);...
先把所有要验证的都装进MAP中,然后循环一次验证并做处理
for(String key : map.keySet()){
		    if(key != null && !key.equals("")){
		        nkseServiceItemList.add(new NkseServiceItem(key, map.get(key),
	                    this.hasGraph(key)));
		    }
		}
这样,复杂度就从原来的50变成了5了。





猜你喜欢

转载自blog.csdn.net/magic_wz/article/details/16880643