遗留系统之殇

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

测试金字塔

在软件开发项目中有不同级别的质量保证措施, 这些不同级别的质量保证措施通常使用金字塔的形式形象的表达, 也就是所谓的测试金字塔.

因为实践表明, 关于测试实施和维护的总成本是朝着金字塔顶端增长的. 大型系统的测试和手动的用户验收测试通常是很复杂的, 并且一般需要大规模的组织又难以实施自动化.

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

破窗效应

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

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

童子军原则

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

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

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

代码所有权集体化

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

是什么在阻挡我们的步伐

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

恶性循环

如何改善

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

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

【C++代码整洁之道】遗留系统之殇相关推荐

  1. 重读【代码整洁之道】

    一.前言 [代码整洁之道]很经典,但也有些过时,翻译上也有些啰嗦,但总体上是好书.通过对本书核心内容的摘抄,结合自己的经验,整理了一些精简的点,这样你就省的去啃那本400多页的书了. 软件质量 = 架 ...

  2. 代码整洁之道(一)最佳实践小结

    摘要: Any fool can write code that a computer can understand. Good programmers write code that humans ...

  3. 2015年第11本:代码整洁之道Clean Code

    前一段时间一直在看英文小说,在读到<Before I fall>这本书时,读了40%多实在看不下去了,受不了美国人啰啰嗦嗦的写作风格,还是读IT专业书吧. 从5月9日开始看<代码整洁 ...

  4. 《代码整洁之道 Clean Architecture》-读书笔记

    大家好,我是烤鸭: 关于<代码整洁之道>,记录一下读书笔记. 代码整洁之道 第一章 整洁代码 整洁代码的艺术 第二章 有意义的命名 避免误导 有意义的区分 使用读得出来和可搜索的名字 避免 ...

  5. 代码整洁之道(一)最佳实践小结 1

    摘要: Any fool can write code that a computer can understand. Good programmers write code that humans ...

  6. [读书笔记] 代码整洁之道

    书的示例是Java语言编写的,虽说不会影响阅读,但是后面几章讲应用这套方法论的时候,大篇幅的Java代码分析还是挺难受的,而且连java测试框架Junit都要细讲,对于非Java系的开发者来说,一些内 ...

  7. 《代码整洁之道》—第1章1.1节要有代码

    本节书摘来自异步社区<代码整洁之道>一书中的第1章1.1节要有代码,作者[美]Robert C. Martin,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第 ...

  8. 【苦练基本功】代码整洁之道 pt1(第1章-第3章)

    代码整洁之道 pt1(第1章-第3章) 1 整洁代码 1.1 要有代码 1.2 糟糕的代码 1.3 混乱的代价 1.3.1 什么是整洁代码? 2 有意义的命名 2.1 名副其实 2.2 避免误导 2. ...

  9. 【苦练基本功】代码整洁之道 pt4(第10章-第12章)

    代码整洁之道 pt4(第10章-第12章) 10 类 10.1 类的组织 10.2 类应该短小 10.2.1 单一权责原则 10.2.2 内聚 10.2.3 保持内聚性就会得到许多短小的类 10.3 ...

  10. 【苦练基本功】代码整洁之道 pt3(第7章-第9章)

    代码整洁之道 pt3(第7章-第9章) 7 错误处理 7.1 使用异常而非返回码 7.2 先写try-catch-finally 7.3 使用未检异常 7.4 给出异常发生的环境说明 7.5 依调用者 ...

最新文章

  1. 今日头条的面试题(部分)
  2. 201671010128 2017-11-05《Java程序设计》之集合
  3. html判断表单是否为空,layui判断表单是否为空
  4. python3.8.5依赖的urllib版本_Python(pip)-请求依赖警告:urllib3(1.9.1)或chardet(2.3.0)与受支持的版本不匹配...
  5. C语言高级编程:i++与++i区别
  6. 小米摄像头有onvif协议_监控摄像头完好但图像不行,肯定逃不过这10个问题
  7. 【渝粤教育】国家开放大学2018年秋季 2238T个案工作 参考试题
  8. Android工具HierarchyViewer 代码导读(3) -- 后台代码
  9. 记录——《C Primer Plus (第五版)》第九章编程练习第八题
  10. 2018,程序员要搭配这40条编程箴言!!!条条都是干货
  11. LESSON 10.3 Halving网格搜索
  12. VMware vSphere7 with Tanzu 安装方案
  13. 从删库到跑路再到权限管理
  14. oracle中sql关键字,Oracle常用的sql语句
  15. Java提取身份证照片数据,so easy
  16. PCIe系列专题之二:2.5 Flow Control缓存架构及信用积分
  17. 洞悉人性的职场沟通技术
  18. ISO-5055: Automated Source Code Security Measure Element Descriptions
  19. linux需要GPT初始化磁盘吗,PVE里面使用GPT初始化磁盘选项为灰色的解决办法
  20. oracle 版本演进,【比较】Oracle不同版本中关于ALTER TABLESPACE的功能演进

热门文章

  1. 设计一个递归算法由二叉树BT复制产生另一棵二叉树BT1(假设二叉树采用二叉链存储结构)
  2. photoshop CS6 注册码文件 amtlib.dll
  3. Nachos操作系统实习-lab1
  4. Lucene和Solr原理初探
  5. 怎么把音频转换文字?三个步骤解决它
  6. 即时通讯源码|IM源码PHP
  7. vivado 开发教程(一) 创建新硬件工程
  8. fpga与海思BT1120调试问题记录
  9. Appium下载和配置
  10. Appium基础 — APPium安装(二)