热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

TomJ.McCabe:寻找度量软件的本源

作者:McCabe&Associates公司创始人、CEO及董事会主席、McCabe圈复杂度的始创者TomJ.McCabe数学思维和软件工程思维的结合并非偶然。对于圈

作者:McCabe & Associates 公司创始人、CEO及董事会主席、McCabe 圈复杂度的始创者Tom J. McCabeMcCabe 数学思维和软件工程思维的结合并非偶然。对于圈复杂度测试方法,我认为其属于数学范畴,这一方法创立的灵感来自于数学中的图论。对一切可操作的事物都要先进行量化才能进行管理的思想,正是数学带给我们的礼物。 在软件工程的理论体系中,结构测试过程相当严格,要求每个判定输出都被独立地测试到,这使我想到这一过程与数学定有必然联系。白盒测试全周期的基本理念是要在测试时考虑全体软件的测试执行,尤其是在软件的规格说明书含糊、不完整时更要依赖上述理念。结构测试和基于功能的测试在有效测试阶段的作用是相当的,对软件质量的提高都有助益。 软件度量是对软件开发周期中的开发对象、过程及最终产品进行数据定义、收集及分析的持续性量化过程,目的在于对软件进行理解、预测、评估、控制和改善。可以这样认为,不经过度量,就无法将软件开发从暗箱中挑出来。软件复杂度是软件度量分支中直接关注软件的方法,与项目节点状态和报告系统缺陷等软件度量形成对比。 选取度量的一个重要标准就是应用的一致性,业内通常采用“open reengineering”正基于此。恰如“open system”被广泛应用于商业软件,其原因就是提供给用户一定程度的互用性——应用程序几乎可以在所有的通用平台上工作,并且在硬件平台上交互也并非难事。“open reengineering”的理念是:用于表现软件系统的抽象模块应该具有独立性。一个理想的度量值,不管源代码使用Ada,C,FORTAIN还是其他语言,都应该能显示一致的内部实现。大部分基本复杂度度量,例如代码行数虽然对程序语言,代码风格,和代码格式高度敏感,但却不符合“open reengineering”规范;对于圈复杂度度量, 其度量对象是函数判定逻辑的总和, 符合“open reengineer ing”的理念,它完全独立于代码格式, 并且与所使用的程序语言基本无关, 即使部分判定结构相同也可以使用。按照理想的状态, 复杂度应该同时具备描述性和规范性。描述性度量会将软件认为是易于出错的,难于理解、修改和测试的。规范性度量则认为改进操作步骤将有助于控制软件。我们说的软件复杂度和测试之间有着千丝万缕的联系,结构测试方法使得这种联系更加明显。首先,过于复杂是软件错误的根源,无论是以抽象或者具体的思维角度来看,都可以得出上述结论。抽象来说,复杂性超出一定程度将会严重影响人类的精确处理能力并导致错误;具体的讲,大量研究和经验表明圈复杂度与软件模块中的错误紧密相关,假如一个模块比较复杂,那么它也就比较容易出错:超出了度量的阈值,模块中的错误数量也会随着急剧增长。基于上述结论,无论在欧美还是亚洲,重视软件质量和对产品负责的企业部门都开始应用圈复杂度,以提高软件整体的可靠性。其次,复杂度也能用于衡量测试的工作量。通过复杂度和软件出错之间的联系来加强在那些容易出错部分的测试投入。为加深对复杂度的理解,可以采用自动化的工具,比如我们公司在中国的合作伙伴,北京旋极信息技术股份有限公司所推广的产品McCabe IQ等。 圈复杂度,能够帮助你对软件的质量进行深入判断、剖析、组织和反复的运用,进一步通过圈复杂度方法去认识软件,了解软件和架构软件。 (本文来自《程序员》杂志0908期)


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Principle for Mac(交互式屏幕设计软件)免激活版
    Mac上好用的交互式屏幕设计软件,PrincipleforMac是一款交互式屏幕设计软件,principle mac让您的设计将以原则出现,随时为您注入新的活力。如果您进行更改,再 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • 35岁程序员连续被2家公司裁掉,网友酸了,成功入职成事业编晒出福利
    这篇文章讲述了一个35岁程序员连续被两家公司裁掉的故事,他在遭遇中年危机后成功入职事业单位,并分享了入职后的福利。文章探讨了程序员在互联网行业中的竞争力下降的原因。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • SAP羞辱国产软件商:技术停在10年前
    SAP中国研究院总裁芮祥麟表示,国产软件厂商过于热衷概念炒作,技术水平停留在10年前的客户端架构水平。他认为,国内厂商推出基于SOA的产品或转型SAAS模式是不可能的,研发新架构需要时间。当前最热门的概念是云计算,芮祥麟呼吁国产厂商应该潜心研发底层架构。 ... [详细]
  • GAMETECH腾讯云游戏行业技术沙龙成都站圆满落幕
    11月13日,由腾讯云主办、游戏茶馆协办的2020年首场GAME-TECH腾讯云游戏行业技术沙龙在成都圆满落幕。本次沙龙邀请了腾讯云游戏行业解决方案总监宋永周、腾讯云游戏行业高级解决方案架构师曾梓恩、腾讯云游戏行业高级产品架构师郑晓曦、腾讯云游戏行业高级解决方案架构师温球良和天美L1(王者荣耀)服务器技术副总监杨光,为参会同行们带来了干货满满的技术建议。本文介绍了腾讯云游戏云的优势和为不同游戏研运场景提供的服务。腾讯云在中国游戏云服务市场领跑,成为众多游戏开发者的合作伙伴。 ... [详细]
author-avatar
手机用户2502854043
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有