• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
“寻找圣杯的任务”——度量软件之美
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
“寻找圣杯的任务”——度量软件之美
软件发布 “寻找圣杯的任务”——度量软件之美
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 认证考试 >> 系统工程师 >> “寻找圣杯的任务”——度量软件之美

“寻找圣杯的任务”——度量软件之美

添加时间: 2007-4-9 3:59:14  作者: 系统工程师认证参考  阅读次数:52   来源: http://www.d9soft.com

       

  “当你能够测度你所说的并将其用数字表达出来,你就对它有了一些了解;但当你不能测度,不能用数字表达它时,你对它的了解就很贫乏.你在 思想 上还远没有进入科学的阶段” ——load kelvin

  软件质量判定遇到的问题

  判断和衡量代码质量一直是开发过程中令人苦恼的问题,在同样完成功能的情况下,如何判别一种写法比另一种写法好呢?在代码重构的过程中,如何确定代码质量是在不断的改进当中呢?引入一种设计模式以后,代码真的变的比以前好了吗?

  大部分时候我们凭感觉和经验做这些事情,我们使用很多模糊的词语来描述我们的判断,比如这样做以后,代码的可维护性更好,可扩展性提高等等。在越来越注重代码设计的今天,很多人开始使用更感性化,更形而上学的词语来形容软件质量,我们会听到评价软件结构
很优雅,带来美的享受,甚至一些设计原则被提升到了哲学高度,:)。

  不得不承认这些词语的描述确实很符合我们看到一段高质量代码的心境,但是这些新词语的出现并没有帮助我们解决软件质量判定中遇到的问题,因为这些感性的判定,由于每个人的经验不同,经历不同,所得出的结论也不尽相同。

  软件度量能解决的问题

  众所周知,度量对任意一个工程产品研制都是很重要的,度量让人们更加 了解产品,可以评价产品,衡量产品质量从而进行改进。对于软件产品也一样,只有定性的评估是不够的,只有通过定量的评估才可以根本的解决评估软件产品质量这样的问题。然而,软件产品的度量却非常困难,对它的测量可能永远无法做到和物理产品一样的完美,但是,软件测量仍然具有重要的意义。

  要度量软件质量,首先需要定义软件质量要素,比如,软件的功能性(functionality)、可用性(usability)、可靠性(reliability)、性能(performance)和支持度(supportability)都衡量软件质量的要素。不过,要真正定量的从技术上度量这些要素,就是非常困难的了。

  软件度量工作首先需要确定能够表示软件质量的各种属性和指标;然后,分析软件,收集数据;接着运用公式换算代码的各种指标值;最后,通过这些指标就可以分析代码的质量。确定哪些属性和指标可以表示软件质量,收集哪些数据,如何用公式推导指标,都是软件度量这门科学的研究重点。它所确定的各种软件度量指标为我们了解软件属性,衡量软件质量提供了科学的依据。

  软件度量经历了几十年的发展,在软件的各个方面和领域都开发出了各种度量套件。有针对分析模型的度量,体系结构设计的度量,构件级设计的度量,界面设计的度量,以及源代码级的度量等等,要了解这些度量套件如何进行质量测量可以参考相关的资料。不过,这些度
量套件并不是都具备实际的操作意义,有些度量就太复杂不可操作,或者脱离实际很难理解。但是也有一些度量套件具备很实际的指导意义。本文打算介绍的构件级度量套件和源码级度量套件都是很有意义的。

  软件度量可以帮助我们理解软件属性,衡量软件质量,但是,软件度量并没有真正的去测量软件质量,而是测量软件质量的表现,因此,仍然需要我们去分析确定所测量的指标和软件质量的准确关系。

  构件级和源码级的度量

  构件级的软件度量集中评价软件构件的特性,它主要包括3c测量,既:内聚度(coheion),耦合度(coupling),和复杂度(complexity),这组测量指标贴切的描述了构件设计质量,我们也能看出各种设计模式和设计原则都在想办法平衡这些元素。

  内聚度和耦合度可以通过考察构件的输入,输出参数的性质和个数,全局变量,被调用模块的个数(扇出),调用的外部模块数(扇入),得出测量数据。分析公式就不列举在这里了,公式的大概含义是如果一个模块有少的输入参数,且都是数据型的参数,没有访问全局数
据,被单一的模块调用,可以预计这个模块将有低的耦合度。关于复杂度还有一个著名的测量指标——环复杂度,它基于构件控制流图进行分析。

  源码级的软件度量主要评价代码复杂度,halstead测量套件被称为“最著名和研究最完全的软件复杂度复合度量之一”。它通过研究源代码中的操作符和操作数,开发出了一系列指标,可以描述代码的实际体积,开发工作量,开发时间,甚至软件中被预测的错误数。 很多软件测量工具都提供象耦合度,环复杂度,halstead测量套件,扇入扇出数,等指标的自动统计,透过这些指标,我们可以掌握代码的内部特性,分析每次代码改动对代码质量的影响。一些停留在定性描述上的质量改进,完全可以通过数据得到印证。比如某部分代码采用设计模式以后提高了内聚力,降低了耦合度,某块职责众多,特别复杂的代码被拆散,所拆出的各个模块的复杂度都很低,易于维护。那么通过度量数据一定可以反应出这些特性,比如,源码级的复杂度指标降低,构件级的耦合度指标降低等等。

  代码实践

  下图展示了两段相同功能的代码,在重构前后的结构示意图。

  profileconf直接使用了第三方snmp协议包,而profileconfnew则使用了封装后的snmp协议软件包。进行协议封装的目的一是为了隔离第三方软件包,另一个目的是为了简化客户端使用snmp协议栈的操作。改造完成后,我们使用together自带的软件测量工具进行了数据测量。选择together菜单中tools——>metrics,里面提供了大量的测量指标。

我们选择了几个比较关注的指标,对新旧代码进行了测量,下面是测量结果。

 下表对测量指标做简单说明。

  通过数据可以看出,改进以后,编写的代码有所减少,大约节省三分之一的代码;耦合度有所降低,但并不是特别明显,因为我们把对第三方协议包的依赖转为对自己编织的协议包的依赖了;代码复杂度大大降低,这是因为我们自己编写的协议包更符合实际使用情况,因而使代码编写难度大大降低,非常容易学习,修改和维护。数据说明了一切。

  总结

  软件度量最终的目标是要提供统一衡量软件质量的标准,并促使软件质量的不断提高,这项任务被人称为是“寻找圣杯的任务”。但是,无数的科学事实都说明,如果因为目标太难达到就不作任何工作,就不可能有任何进步。在达到最终目标之前的过程中,会有很多有益的
小发现,这些发现又在不断促进新的发现,最后使不可能变成可能。

  软件度量科学的发展同样在追求最终目标的过程中为我们带来了众多的有益发现,让我们用更加科学和严谨的态度来看待软件质量问题;让我们对代码的认识从定性描述阶段,进入到定量描述阶段;让我们感受到科学和美学的统一所展现出的巨大魅力。

 

上下文章:

 

上一篇文章: 完美的软件项目开发团队结构 下一篇文章: 如何用正确的方法来写出质量好的软件的75条体会

相关文章:

  • 卡巴斯基全功能安全软件2009白皮书
  • Linux之父:最烦安全人士大肆宣扬软件漏洞
  • 趋势科技:杀毒软件不可能永远免费
  • 金山软件7.28毒报:匿名下载器下载木马
  • 金山软件7.15毒报:脚本下载器下载远程病毒

相关软件:

  • 光华反手机病毒软件 S60智能手机(英文版) E60
  • 光华反手机病毒软件 S80/90智能手机 C80
  • 光华反手机病毒软件 S80智能手机(英文版) E80
  • LSC企业监控软件 3.0
  • 佳宜采购管理软件 2.08 SQL网络版
  • 佳宜采购管理软件 2.08 企业版

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

认证考试分类导航

  • 微软认证
  • 计算机等级考试
  • 软件水平考试
  • 思科认证
  • Oracle认证
  • Linux认证
  • JAVA认证
  • 网络工程师
  • 系统工程师
  • 程序员

本类经典文章推荐

  • SQLServer的安全检查
  • 系统设计师资格与水平考纲 (原高级...
  • 系统分析员备考之ISO9000系列基础...
  • 开发数据库的WEB查询
  • 在builder中向Excel传递数据
  • 用Powerbuilder开发WEB数据库
  • PowerBuilder制作IE风格的图标按钮
  • PowerBuilder编程技巧四则
  • 小议数据库主键选取策略
  • 跨数据库文献检索统一平台的实现

系统工程师阅读排行

  • 数据库原理各章节简答题总结
  • 利用C++Builder6.0开发简单的车辆...
  • 跨数据库文献检索统一平台的实现
  • 用Powerbuilder开发WEB数据库
  • 系统设计师资格与水平考纲 (原高级...
  • 项目进度的黑洞——已完成90%
  • 系统分析员备考之ISO9000系列基础...
  • 小议数据库主键选取策略
  • 数据库系统工程师全真预测试卷(一...
  • 2005年上半年数据库系统工程师上午...

认证考试阅读总排行

  • 全国计算机等级考试一级模拟试题01
  • 全国计算机等级考试一级模拟试题10
  • 全国计算机等级考试一级模拟试题08
  • MCSD简介
  • 全国计算机等级考试一级考试最新模...
  • 全国计算机等级考试一级模拟试题07
  • 全国计算机等级考试一级模拟试题02
  • 全国计算机等级考试一级模拟试题06
  • 全国计算机等级考试一级模拟试题03
  • 一级(WINDOWS)试题解析-Word篇

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有