圈复杂度

选中文字可对指定文章内容进行评论啦,→和←可快速切换按钮,绿色背景文字可以点击查看评论额。

圈复杂度

圈复杂度是表示代码中独立现行路径的数量。举个例子:

function sum(a, b) {
	if (typeof(a) !== typeof(b)) {
	    throw new Error('Cannot sum different types');
    } else {
 	    return a + b;
    }
}

这个方法的圈复杂度就是2,也就是说需要测试两个分支,以获取100%的代码覆盖率。因此需要编写两个单元测试。

计算圈复杂度可以使用的工具一般有jsmeter,感兴趣的可以看看。

一般来说,一个方法的圈复杂度越大,那么这个方法需要的测试代码就越多,这个道理很简单,需要测试的分支越多,那么单元测试自然就多嘛。有一个经验的法则就是:一般一个方法的复杂度保持在7以下就好,更好的就是保持在4以下。

造成方法的圈复杂度高的原因常常是方法里面的分支太多。举个例子

function doSomething(a) {
	if (a === 'x') {
		doX();
	}else if (a === 'y') {
		doY();
	}else {
 		doZ();
 	}
}

看到了没,这个方法的圈复杂度为3,显然如果判断增多的话,这个函数的圈复杂度会明显提高。解决这个问题的办法如下:

function doSomething(x) {
	var lookup = {x: doX, y: doY},def = doZ;
	lookup[a]? lookup[a]: def();
}

这个方法使用lookup表重构后,无论增加多少分支,这个方法的圈复杂度就是2。而且每个小的方法都是可以单独测试的,起到了隔离代码的作用。

对了,还有一个计算圈复杂度的工具是jscheckstyle,感兴趣的可以去了解它的用法。

 

软件重用

这一节,我们来谈谈另一个话题,那就是代码重用。根据研究表明:

软件一般有三个种类:程序特定(application-specific)、领域特定(domain-specific)、领域独立(domain-independent)。一般来说,第一类是程序员需要编写的,剩下的两类都是可以重用的。

比如nodejs就是独立领域的原件,而第三方模块就属于特定领域的软件,程序员编写的就是程序特定的软件

对于程序特定软件,一般占整个代码比例的15%,剩下的两类占到了85%。因此如果我们自己编写的程序代码如果能提高重用率,那么我们的整个项目的质量将得到一定程度的提高。至于提高多少,感兴趣的可以研究研究。

 

 

 

 

版权声明:著作权归作者所有。

相关推荐

iOS11固定UISearchBar在导航栏的高度

iOS 11重新设计了UISearchBar,四个角改为圆角,高度变大。在导航栏添加搜索框可能会导致导航栏高度变大,所以有必要固定UISearchBar的高度。固定搜索栏的高度为44let searchBar = UISearchBar()  //配置searchBar相关代码 navigationItem.titleView =&nbs

使用pace.js在页面顶部添加加载进度条

很多网站(如Github,Stackoverflow)在加载页面时,页面的顶部会看到页面加载进度条。使用pace.js可以很简单的实现此功能。下载pace.jspace官网下载:http://github.hubspot.com/pace/docs/welcome/(包含主题介绍)Github下载:https://github.com/HubSpot/pace完整zip包:http://githu

Android保存及恢复Activity的状态

Android保存Activity状态有两种方式:activity保存以及持久化保存。这里主要介绍activity保存。保存Activity状态基于Activity保存状态需要重写onSaveInstanceState(Bundle savedInstanceState)方法。示例:@Override public void onSaveInstanceState(B

JavaScript删除数组里重复的元素

JavaScript里有多种方法可以用来对数组元素去重。ES6 SetES6提供了一个Set对象,用它可以很简单便可以对数组元素去重。function uniq(arr) {    return Array.from(new Set(arr)); } filter另外也可以通过filter来对数组元素去重。functi

Spark DataFrame join后移除重复的列

在Spark,两个DataFrame做join操作后,会出现重复的列。有两种方法可以用来移除重复的列。方法一:join表达式使用字符串数组(用于join的列)df1.join(df2, Seq("id","name"),"left") 这里DataFrame df1和df2使用了id和name两列来做join,返回的结

pandas 统计重复值

pandas统计数据项重复值次数和删除 https://blog.csdn.net/qq_35203425/article/details/80830911?utm_source=blogxgwz0

CKEditor 5设置编辑器高度

CKEditor 5提供的几种编辑器,它们的高度是随着内容变化的,官方没有提供设置编辑器高度的参数配置。如果要给编辑器固定高度有以下两种做法。对于经典版(classic editor build),可以通过CSS:.ck-editor__editable_inline {  height: 200px;}对于所有版本,可以通过js来设置:editor.editing.view.chang