软件内部质量的一些思考

软件内部质量

 

  代码内部质量指的是代码的可读性, 可修改性, 复杂度(圈复杂度,函数深度),  可移植性等软性质量。 (像BUG率指的是外部质量)

  软件的内部质量只对开发者有直接影响, 对公司来说间接影响就是开发的维护成本。

 

  为什么程序会有这么多偶然复杂性呢? 

 

  基本都会有这个问题, 在传统公司,每半年会有个大版本,质量改进可以放到一个大版本中来完成(因为大版本有完全的回归测试)。

 

  互联网公司采用的快速开发,但没有完备的单元测试和自动化测试; 都是小版本发布, 很少大版本,也就很少有完全回归测试的机会;这些原因就导致互联网企业的代码质量往往是最差的。

 

原因分析

1. 快速开发周期,最初都是简单设计并实现功能。(设计欠账,但这很好,很经济)

   小版本发布(这也很好),  因为多是手工测试,导致的问题是没有完全回归测试的机会。

2. 后期修改逻辑时,大家也是快速修改。没有过多去考虑代码质量,很多可以改进的地方没有及时改进. (缺乏重构的意识)。

3. 很多人修改代码的原则是尽量少改代码,保持已有代码,通过添加新代码来实现目标。

   这样的做的原因是代码没有被测试覆盖, 好处是减少了出错率,并减少了BUG数(对应的绩效也更好)。

   但这样的缺点是,代码不断引入偶然复杂性,复杂度只增不减, 项目后期维护成本不断增加。(编码欠账, 本次经济,长期可能是亏本的)。

4. 代码所有者经常变换,最初A编写,后来B维护,再后来C维护。 这样代码对后续者(B,C)来说是缺少所有感的,也会缺少质量的责任感。

   后面的编写者在对老代码都是坚持谨慎原则,只改一定要改的部分,多次易手后,偶然复杂被累积。

5. 代码内部质量一般不会纳入公司绩效考核,所以关心的人也会相对较少。(投资回报率低,对个体而言).

 

影响分析

1. 对于新项目,代码质量可能不是最重要,快速反馈才是;

2. 对于已经存在较长,并且以后好长时间都会存在的项目,代码质量很重要,质量改进,可以带来更低的修改成本,新成员也更容易理解业务;

3. 对于老项目,后续很少修改的,或存活不会很久的项目,质量提高可能是没有必要的。

 

改进方法

1. 防止恶化,最有效的方法是引入单元测试和自动化测试,这样任何人的修改都可以被测试到, 代码也可以真正做到集体所有。 但在中国这个技术要求过高了。

    可以先只对公共代码和核心代码进行单元测试

2. 写代码的时候,坚持“低耦合,高内聚”,做到一个函数一个功能。这样可以在修改BUG和添加特性的时候做重构,这样就可以保证你修改的部分会在这次发布中被测试到。

3. 提交代码前进行code-review, 这样可以相互检查并相互提高。

4. 在小版本中安插大版本(比如半年一个),大版本的目的就是为重构,提高内部质量,并提供完全的回归测试(成本较高)。

5. 使用代码内部质量度量工具(sourcemonitor, simon), 并集成的持续集成环境中。

6. 把代码内部质量度量纳入绩效考核 (最本质的保证)。

 

 软件内部质量,不能产生立杆见影的效果,质量提高也需要成本,故以上只是个人的简单看法,投资回报未必是划算。

转载于:https://www.cnblogs.com/napoleon_liu/archive/2010/10/21/1857593.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值