【C++代码整洁之道】遗留系统之殇

遗留系统之殇

本系列文章均整理自《C++代码整洁之道——C++17可持续软件开发模式实践》

测试金字塔

在软件开发项目中有不同级别的质量保证措施, 这些不同级别的质量保证措施通常使用金字塔的形式形象的表达, 也就是所谓的测试金字塔.
测试金字塔
因为实践表明, 关于测试实施和维护的总成本是朝着金字塔顶端增长的. 大型系统的测试和手动的用户验收测试通常是很复杂的, 并且一般需要大规模的组织又难以实施自动化.

但是不幸的是, 在一些软件开发项目中, 你会发现退化的测试金字塔. 这些项目中人们把更多的精力投入到高层的测试中, 忽略甚至没有单元测试.
测试金字塔反模式

破窗效应

此理论认为环境中的不良现象如果被放任存在, 会诱使人们仿效, 甚至变本加厉.

一幢有少许破窗的建筑为例, 如果那些窗不被修理好, 可能将会有破坏者破坏更多的窗户. 最终他们甚至会闯入建筑内, 如果发现无人居住, 也许就在那里定居或者纵火. 一面墙, 如果出现一些涂鸦没有被清洗掉, 很快的, 墙上就布满了乱七八糟的东西. 一条人行道有些许纸屑, 不久后就会有更多垃圾, 最终人们会视若理所当然地将垃圾顺手丢弃在地上. 这个现象, 就是犯罪心理学中的破窗效应.

童子军原则

在离开露营地的时候, 应该让露营地比你来之前还要干净.

改善代码并不一定要大刀阔斧的去做, 也可能只是一次小小的清理. 例如:

  • 重命名命名不佳的类, 变量, 函数或方法
  • 将大型函数分解为更小的函数
  • 让需要注释的代码不言自明, 以避免注释
  • 清理复杂而令人费解的 if-else 组合
  • 删除一小部分重复的代码

代码所有权集体化

代码所有权集体化意味着我们应该真正的融入团队. 每个团队成员在任何时候都可以对任何代码进行更改或扩展, 不应该有这样的态度 “这是 A 的代码, 这是 B 的模块, 我不会碰他们!”. 其他人可以接管我们写的代码, 这应该被当做一种很高的衡量标准, 团队中的任何人都不应该害怕, 或者必须获得许可才能整理代码或添加新功能. 代码所有权集体化这种文化将使童子军原则很好的执行.

是什么在阻挡我们的步伐

  1. 不健全的测试体系. 没有测试的 “重构” 不能称之为重构, 它仅仅是到处移动垃圾代码! 这一点我们心知肚明, 所以我们信奉只要他还能正常工作, 就不要动他. 没有坚实的基础设施支持我们进行哪怕是小范围的重构.
  2. 难以添加的单元测试. 图形项目难以添加单元测试是客观事实. 再有就是设计风格极差的代码本身就难以为其设计单元测试.
  3. 费时费力的 code review 与代码格式检查.
  4. 重构其他代码与自身工作安排的冲突.

恶性循环

恶性循环

如何改善

我们首先开启了为遗留代码补充单元测试的工作, 新需求按照 TDD 的方法进行开发, 期望通过建立更加完善的测试体系来打破上述的恶性循环

但是为遗留系统补充单元测试确实非常困难, 任重道远, 方向方法都还需要不断的摸索改进.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值