热门标签 | 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期)


推荐阅读
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 神经元研究动态:城市大脑标准化体系及评估指标综合框架分析
    神经元研究动态:城市大脑标准化体系及评估指标综合框架分析 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 从运维繁忙到屡获殊荣:一位CIO的辉煌转型之路
    企业首席信息官(CIO)常常面临一个棘手的问题:如何有效推动公司的数字化转型?尽管数字化转型已成为企业未来发展的重要共识,但如何具体实施依然是许多CIO面临的重大挑战。在日常运营中,企业需要处理大量的业务问题和制定各种发展规划,这使得数字化转型往往被排在较低的优先级。此外,不断涌现的新问题和新规划也常常打乱原有的计划,进一步增加了转型的难度。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 手指触控|Android电容屏幕驱动调试指南
    手指触控|Android电容屏幕驱动调试指南 ... [详细]
  • 汽车电子架构与CAN网络基础解析——鉴源实验室专业解读 ... [详细]
  • TypeScript ESLint: 避免使用隐式 any 类型,建议指定更具体的类型以提高代码可维护性
    在使用 Vue 引入 SVGSpriteLoader 时遇到了问题。具体表现为在 `shims-vue.d.ts` 文件中进行相关配置后,WebStorm 报错。为了解决这一问题,建议避免使用隐式 `any` 类型,而是指定更具体的类型,以提高代码的可维护性和类型安全性。可以通过在 ESLint 配置中禁用隐式 `any` 类型来实现这一目标。 ... [详细]
  • Web前端开发工程师薪资状况分析及当前学习Web前端技术是否过时探讨
    近年来,Web前端开发领域展现出广阔的发展前景,吸引了大量人才涌入。随着郑州经济的快速发展和众多企业的入驻,该地区对Web前端工程师的需求显著增加。本文分析了当前Web前端开发工程师的薪资状况,并探讨了在当前技术环境下学习Web前端技术是否仍然具有前景。 ... [详细]
  • Kafka 是由 Apache 软件基金会开发的高性能分布式消息系统,支持高吞吐量的发布和订阅功能,主要使用 Scala 和 Java 编写。本文将深入解析 Kafka 的安装与配置过程,为程序员提供详尽的操作指南,涵盖从环境准备到集群搭建的每一个关键步骤。 ... [详细]
  • 掌握这些技巧,轻松获取超过90%的资源信息
    在数字时代,高效获取所需资源是每个人必备的技能。本文将分享一系列实用技巧,帮助读者轻松获取超过90%的网络资源信息,无论是学术资料、技术文档还是最新资讯,都能迅速找到。通过优化搜索引擎使用、利用专业数据库和社群资源等方法,读者将能够在信息海洋中游刃有余。 ... [详细]
  • 深入解析HTTP网络请求API:从基础到进阶的全面指南
    本文全面解析了HTTP网络请求API,从基础到进阶,详细介绍了Android平台上的两种原生API——HttpUrlConnection和HttpClient。这两种API通过对底层Socket的封装,提供了高效、灵活的网络通信功能。文章不仅涵盖了基本的使用方法,还深入探讨了性能优化、错误处理和安全性等方面的高级主题,帮助开发者更好地理解和应用这些工具。 ... [详细]
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社区 版权所有