如何评价代码质量

   如何评价代码质量
我们平时买东西的时候,要看一看东西的质量怎么样,如颜色好看否、样式时尚否、经久耐用否,然 后再决定买不买。
软件作为一种商品,也存在质量高低之分,从哪些方面来评价软件的质量状况呢? 
代码是软件的元素,软件是产品的灵魂,所以评价代码质量的标准源于评价产品质量的标准。 产品服务于用户,用户的评价体现了代码的质量,用户在使用软件产品时的三种不同倾向或观点:产 品运行、产品修改和产品转移。

由图可见,评价代码质量的主要指标:
 1. 正确性(Correctness) 系统满足规格说明和用户目标的程度,即在预定环境下能正确地完成预期功能的程度。 如软件有没有按照需求规格来完成,计算出的结果是否正确,计算结果是否精确。
 2.健壮性/鲁棒性(Robustness)    健壮性是指在异常情况下如硬件发生故障、输入的数据无效或操作错误等软件能够正常运行的能 力。 健壮性有两层含义:一是容错能力,二是恢复能力。 容错是指发生异常情况时系统不出错误的能力,对于应用于航空航天、武器、金融等领域的这类高风险 系统,容错设计非常重要。 而恢复则是指软件发生错误后(不论死活)重新运行时,能否恢复到没有发生错误前的状态的能力。 例如:因输入数据不正确,引起系统异常,这是容错能力不高引起的健壮性问题;操作系统死机了,重 启后能够正常使用,说明具有一定恢复能力,具有一定的健壮性;数据库发生故障后,再次启动时一般能 够恢复到正常的状态,恢复能力比较好。
 3. 可靠性(Reliability) 软件系统在一定的时间内无故障运行的能力。 可靠性是一个与时间相关的属性,指的是在一定环境下,在一定的时间段内,程序不出现故障的概率, 因此是一个统计量,通常用平均无故障时间(MTTF, mean-time to fault)来衡量。 可靠性不同于正确性和健壮性,软件可靠性问题通常是由于设计中没有料到的异常和测试中没有暴露的 代码缺陷引起的。 例:由于某个地方数据库连接没有释放,在长时间运行的时候,出现活动的数据库连接数过多,造成系 健壮性/鲁棒性(Robustness) 健壮性是指在异常情况下(如硬件发生故障、输入的数据无效或操作错误等),软件能够正常运行的能统越来越慢,甚至系统停止服务。 
4. 性能(Performance) 性能是指软件及时提供相应服务的能力。 具体而言, 性能包括速度、 吞吐量和持续高速性三方面的要求: 速度往往通过平均响应时间来度量; 吞吐量通过单位时间处理的交易数来度量; 持续高速性是指保持高度处理速度的能力。 效率(Efficiency)指软件对 CPU 处理能力和存储能力这两大类计算机资源的使用效率。效率和性能反 映了同一问题的“表”、“里”,性能为“表”,效率为“里”。 如系统运算一个报表,需要很长时间,这就是性能问题。
 5. 安全性(Security) 指软件同时兼顾向合法用户提供服务,以及阻止非授权使用软件及资源的能力。 安全性既属于技术问题又属于管理问题。一般地,如果黑客为非法入侵花费的代价(考虑时间、费用、 风险等多种因素)高于得到的好处,那么这样的系统就可以认为是安全的。 例:有人可以访问非授权的资源,这就是安全性问题。
 6. 易用性(Usability) 易用性是指用户使用软件的容易程度。 软件的易用性要让用户来评价。 例:对于一般用户而言,Windows 的易用性比 Linux 的高。
 7. 可用性(Availability) 指的是产品对用户来说有效、易学、高效、好记、少错和令人满意的程度,即用户能否用软件完成他的 任务,效率如何,主观感受怎样。 ISO 9241-11 国际标准对可用性作了如下定义:产品在特定使用环境下为特定用户用于特定用途时所具 有的有效性(effectiveness)、效率(efficiency)和用户主观满意度(satisfaction)。其中: 有效性:用户完成特定任务和达到特定目标时所具有的正确和完整程度; 效率:用户完成任务的正确和完整程度与所使用资源(如时间)之间的比率; 满意度:用户在使用产品过程中所感受到的主观满意和接受程度。 
8. 互操作性(Interoperability) 指本软件与其他系统交换数据和相互调用服务用以协同运作的难易程度。 例:利用 Web Service 增加软件的互操作性。 
9. 易理解性(Understandability) 理解和使用系统的难易程度。
 10. 可扩展性(Extensibility)/灵活性(Flexibility)/适应性(Adaptability)/可伸缩性(Scalability) 反映软件适应“变化”的能力。调整、修改或改进正在运行的软件系统以适应新需求、变化了的需求 的难易程度。 例:如报销系统原来不需要总经理审批,现在要改为总经理审批,可扩展性强的系统不需要作太多 调整;如用户和数据量增加时,通过增加服务器来提高系统性能,这样可伸缩性比较强。
 11. 可重用性(Resuability) 重用软件或其中一部分的难易程度。
 12. 可测试性(Testability) 对软件测试以证明其满足需求规约的难易程度。 
13. 可维护性(Maintainability) 为修改 Bug、增加功能、提高质量而诊断并修改软件的难易程度。
 14. 可移植性(Portability) 软件不经修改或稍加修改就可以运行于不同软硬件环境的难易程度,主要体现为代码的可移植性。
例:Java 程序可以在 Windows 系统和 Linux 上运行,具有较好的可移植性。
 软件有这么多质量属性,对他们分类似乎更容易理解一些。McCall 等人于 1977 年将软件质量属性 分为三大类,即产品运行、产品修改、产品转移时的质量属性。温昱著《软件架构设计》把软件质量 属性分为运行期的软件质量属性和开发期的软件质量属性。 
就像商品一样,不同的人关注的质量角度也不相同。我们可以把软件的各种用户找出来,然后看看 他们分别关注软件质量的哪些方面,这样在开发软件的时候,就可以找出比较重要的软件质量属性, 就可以做到有的放矢,让用户在使用软件时更加满意。由于软件也分成很多类型,如操作系统、游戏、 应用软件、中间件、框架等等,每种软件对应的用户也不一样,本文作为一个探讨,以普通应用软件 为例,给出软件质量的不同视角: 
利用图形界面完成业务的用户:正确性、健壮性、可靠性、性能、易用性、可用性、互操作性、 可扩展性 
进行系统监控、备份与恢复等操作的管理员:健壮性、可靠性、安全性、易用性、可用性、可扩 展性、可维护性、可移植性 
利用软件提供的接口(API)进行其他系统开发的高级用户:正确性、健壮性、可靠性、性能、 可用性、互操作性、易理解性、可扩展性 
进行代码级维护的开发/维护人员:易理解性、可扩展性、可重用性、可测试性、可维护性、可移 植性 
由于软件面对的用户是千差万别的,从用户的角度来对软件质量属性进行分类,更容易把握软件在 不同用户眼中的质量怎么样,从而利于从正确的方面来提高软件质量。
 参考资料:  
软件架构设计/温昱 电子工业出版社 2007.5
 软件工程/张海藩 清华大学出版社 1998 
高质量程序设计指南:C++/C 语言(第三版)
出自:http://wenku.baidu.com/view/e8cb9d73f46527d3240ce02b.html
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值