- 浏览: 7853494 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
今天学习了软件度量中的圈复杂度的概念,下面小结下:
一种代码复杂度的衡量标准,中文名称叫做圈复杂度。 在软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度 大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的可能错误和高的圈复杂度有着很大关系。
控制流图是McCabe复杂度计算的基础,McCabe度量标准是将软件的流程图转化为有向图,然后以图论的知识和计算方法来衡量软件的质量。 McCabe复杂度包括圈复杂度(Cyclomatic complexity)、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中
有以下三种方法计算圈复杂度:
1,流图中区域的数量对应于环型的复杂性;
2,给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;
3,给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。
没有流程图的算法:
碰到以下项加 1:
分支数(如 if、while 和 do while)
switch 中的 case 语句数
如果条件是2个复合条件的话 不是加1 是加2
面这个实例中,单元测试的覆盖率可以达到100%,但是很容易发现这其中已经漏掉了一个NPE的测试用例。case1方法的圈复杂度为2,因此至少需要2个用例才能完全覆盖到其所有的可能情况。
//程序原代码,圈复杂度为 2
public String case1(int num) {
String string = null;
if (num == 1) {
string = "String";
}
return string.substring(0);
}
//上面代码的单元测试代码
public void testCase1(){
String test1 = case1(1);
}
e = 3 ; n = 3;那么全复杂度V(G) = 3 - 3 + 2 = 2,既case1的圈复杂度为2。
看更复杂的例子
public String case2(int index, String string) {
String returnString = null;
if (index < 0) {
throw new IndexOutOfBoundsException("exception <0 ");
}
if (index == 1) {
if (string.length() < 2) {
return string;
}
returnString = "returnString1";
} else if (index == 2) {
if (string.length() < 5) {
return string;
}
returnString = "returnString2";
} else {
throw new IndexOutOfBoundsException("exception >2 ");
}
return returnString;
}
根据公式 V(G) = e – n + 2 = 12 – 8 + 2 = 6 。case2的圈复杂段为6。说明一下为什么n = 8,虽然图上的真正节点有12个,但是其中有5个节点为throw、return,这样的节点为end节点,只能记做一个。
一种代码复杂度的衡量标准,中文名称叫做圈复杂度。 在软件测试的概念里,圈复杂度“用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,即合理的预防错误所需测试的最少路径条数,圈复杂度 大说明程序代码可能质量低且难于测试和维护,根据经验,程序的可能错误和高的圈复杂度有着很大关系”。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的可能错误和高的圈复杂度有着很大关系。
控制流图是McCabe复杂度计算的基础,McCabe度量标准是将软件的流程图转化为有向图,然后以图论的知识和计算方法来衡量软件的质量。 McCabe复杂度包括圈复杂度(Cyclomatic complexity)、基本复杂度、模块涉及复杂度、设计复杂度和集成复杂度等。控制流程图分析是一个静态的分析过程,它提供静态的度量标准技术,一般主要运用在白盒测试的方法中
有以下三种方法计算圈复杂度:
1,流图中区域的数量对应于环型的复杂性;
2,给定流图G的圈复杂度V(G),定义为V(G)=E-N+2,E是流图中边的数量,N是流图中结点的数量;
3,给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定结点的数量。
没有流程图的算法:
碰到以下项加 1:
分支数(如 if、while 和 do while)
switch 中的 case 语句数
如果条件是2个复合条件的话 不是加1 是加2
面这个实例中,单元测试的覆盖率可以达到100%,但是很容易发现这其中已经漏掉了一个NPE的测试用例。case1方法的圈复杂度为2,因此至少需要2个用例才能完全覆盖到其所有的可能情况。
//程序原代码,圈复杂度为 2
public String case1(int num) {
String string = null;
if (num == 1) {
string = "String";
}
return string.substring(0);
}
//上面代码的单元测试代码
public void testCase1(){
String test1 = case1(1);
}
e = 3 ; n = 3;那么全复杂度V(G) = 3 - 3 + 2 = 2,既case1的圈复杂度为2。
看更复杂的例子
public String case2(int index, String string) {
String returnString = null;
if (index < 0) {
throw new IndexOutOfBoundsException("exception <0 ");
}
if (index == 1) {
if (string.length() < 2) {
return string;
}
returnString = "returnString1";
} else if (index == 2) {
if (string.length() < 5) {
return string;
}
returnString = "returnString2";
} else {
throw new IndexOutOfBoundsException("exception >2 ");
}
return returnString;
}
根据公式 V(G) = e – n + 2 = 12 – 8 + 2 = 6 。case2的圈复杂段为6。说明一下为什么n = 8,虽然图上的真正节点有12个,但是其中有5个节点为throw、return,这样的节点为end节点,只能记做一个。
发表评论
-
ISO/IEC9126中软件质量品质小结
2019-02-03 08:00 1408ISO9126软件质量模型,是评价软件质量的国际标准。6个特性 ... -
管理学中的瓜子理论
2018-11-06 16:58 1446管理学中有一个“瓜子 ... -
起点学院的产品经理资料合集
2018-09-04 16:38 3579链接:https://pan.baidu.com/s/1dvM ... -
每日站会的注意点
2018-06-22 21:00 439https://www.uperform.cn/what-to ... -
敏捷中开发中的承诺解析
2018-06-16 10:05 556敏捷中的 promise 和 从com ... -
一页纸项目管理图书和简单模板
2018-06-13 08:27 2725之前听了个讲座,是提到老美的一页纸项目管理,看了下简单易懂,用 ... -
精益画布和商业模式画布
2018-05-16 22:05 29851 商业模式画布,关心的: 1) 重要伙伴 2)关 ... -
(转载)公开,公正,公平,区块链的试金石
2018-02-03 23:39 576https://mp.weixin.qq.com/s/VFz4 ... -
(转)Kano模型:一种产品经理适用的方法论
2017-10-31 23:02 628Kano 模型是狩野纪昭教授发明的对用户需求分类和优先排序的一 ... -
来自腾讯设计师的一篇不错的文章
2017-10-11 11:15 419来自腾讯设计师的一篇不错的文章 《服务设计思维》 https: ... -
走近比特币:一个故事看懂“区块链”
2017-07-08 09:20 497(转),不错的科普文 http://www.4hou.com/ ... -
来自美团的测试模版
2016-05-01 08:44 1101来自美团的测试模版,从各个方面给了不错的范例, 适合中小团队快 ... -
如何对待用户的意见
2014-12-20 19:36 853如何对待用户的意见? 1 根据目标用户考虑,提出要求的用户 ... -
sonarqube笔记之--代码注释行的量度
2014-02-13 14:25 8004在sonarqube中,关于文档方面的度量有以下方面: ... -
sonarqube 笔记1
2014-02-08 14:49 1361sonarqube 笔记1 sonarqube中,对于代码 ... -
高内聚中的LCOM4指标衡量
2013-12-15 11:13 2285经常说的软件“低耦合,高内聚”,哪么如何衡量高内聚呢?其实原来 ... -
一个不错的网络白板工具
2013-05-24 18:46 5856一个不错的网络白板工具http://t.cn/zHqoPT4, ... -
电梯演讲展示产品优势特点
2012-12-29 09:31 1704电梯演讲,其实核心是在短短的时间中,向风险投资人或客户介 ... -
搞IT的就要多交流,国内技术大会小结
2012-06-15 12:40 2搞IT的就要多交流,这个应该成为大家的共同认识,比如国内目前有 ... -
收藏一个结队编程的好工具
2012-05-05 21:06 1309http://xpairtise.sourceforge.ne ...
相关推荐
§5.5 程序复杂度的定量度量 61 §5.6 小结 63 §5.7 补充实例 63 第六章 编码 67 §6.1 编码的目的 67 §6.2 编码的风格 67 §6.3 程序设计语言 69 §6.4 小结 70 §6.5 补充实例 70 第七章 测试 71 第八章 维护 75...
目录 第一章 软件工程概述 4 §1.1 软件的概念、特点及分类 4...软件设计方法(面向数据结构的设计方法) 60 §5.5 程序复杂度的定量度量 61 §5.6 小结 63 §5.7 补充实例 63 第六章 编码 67...
LabVIEW评估代码复杂度 项目规划的主要任务之一是估计项目需要多长时间才能完成,需要多少开发人员...VI度量工具可以计算任何VI或VI层次结构中使用的LabVIEW节点数量。节点几乎是框图上的任何对象,包括功能、VI和结
1.6本章小结 全书各章概要 文献和历史评述 参考文献 ------------------------- 第二章贝叶斯决策论 2.1引言 2.2贝叶斯决策论连续特征 2.3最小误差率分类 2.4分类器判别函数及判定面 2.5正态函数 2.6正态...
1.6本章小结 全书各章概要 文献和历史评述 参考文献 ------------------------- 第二章贝叶斯决策论 2.1引言 2.2贝叶斯决策论连续特征 2.3最小误差率分类 2.4分类器判别函数及判定面 2.5正态函数 2.6正态...
在满二叉树中,每一层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点,且深度为m的满二叉树有2m-1个结点。 完全二叉树是指这样的二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只...
!!注意:全文有99M,由于上传文件不得超过60M,所以分成两个压缩文件,这是part1.part2在以下网页: ... 在本书中,作者给出设计,实现和...25.7 小结 483 25.8 参考文献注释 483 25.9 习题 483 参考文献 486 索引 512
针对细粒度图像分类方法中存在模型复杂度较高、难以利用较深模型等问题,提出深度模型迁移( DMT)分类方法。首先,在粗粒度图像数据集上进行深度模型预训练;然后,使用细粒度图像数据集对预训练模型logits层进行不...
运营式系统阶段 数据库的出现使得数据管理的复杂度大大降低 ,数据往往伴 随着一定的运营活动而产生并记录在数据库中的 ,这种数据 的产生方式是被动的 用户原创内容阶段 数据爆发产生于Web 2.0 时代,而Web 2.0 的...
4.8 小结 4.9 书目评注 习题 第5章 并行程序的解析建模 5.1 并行程序中的开销来源 5.2 并行系统的性能度量 5.2.1 执行时间 5.2.2 总并行开销 5.2.3 加速比 5.2.4 效率 5.2.5 成本 5.3 粒度对性能的影响 ...