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

article/2025/6/13 20:04:58

遗留系统之殇

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

测试金字塔

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

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

破窗效应

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

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

童子军原则

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

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

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

代码所有权集体化

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

是什么在阻挡我们的步伐

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

恶性循环

恶性循环

如何改善

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

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


http://chatgpt.dhexx.cn/article/km6yI7GV.shtml

相关文章

C#代码整洁之道:代码重构与性能提升

C#语言曾主要用于开发Windows桌面应用和游戏程序,而现在已经在多个领域得到了广泛应用,如Web应用程序和云应用程序。C#在移动开发领域的影响力也与日俱增。尽管C#拥有大量的编程特性,但专业人士还是会在工作中遇到由糟糕的代码导致的效率、伸…

c++代码整洁之道pdf_别再问如何用Python提取PDF内容了!

公众号后台回复 “图书“ ,了解更多号主新书内容 作者:陈熹 来源:早起Python 导读 大家好,在之前的办公自动化系列文章中我们已经详细介绍了👉如何使用Python批量处理PDF文件,包括合并、拆分、水印、加密等…

Python好书推荐《Python代码整洁之道》——编写优雅的代码

前言 Python是当今最流行的语言之一。相对较新的领域如数据科学、人工智能、机器人和数据分析,以及传统的专业如Web开发和科学研究等,都在拥抱Python。随着时间的推移,Python有可能会发展成一门基础学科,所以,学好Pyt…

读《代码整洁之道》

与《代码大全》类似关注命名,如函数(方法的) 还讨论了,注释,格式,错误处理,边界,单元测试,类,系统,并发编程等 本书讲的编程语言是以 JAVA 为基础…

C++17代码整洁之道

C17代码整洁之道 C代码整洁的基本规范 良好的命名 名称应该自解释使用域中的名称避免使用匈牙利命名法(即名称前加类型)不要通过注释禁用代码 函数 只做一件事情 函数体量要小 当你为函数找到一个富有表现力的名称时,名称中没有连词 圈复杂度低 函数的参数要少 函数尽…

C++代码整洁之道

整洁的代码在团队中无疑是很受欢迎的,可以高效的被其它成员理解和维护,本文参考《C代码整洁之道》和《Google C编码规范》,结合自己的一些想法整理如下: C本身作为面向对象语言,首先介绍下面向对象一般涉及到的开发原…

C++ 代码整洁之道

NOTICE: 这篇文章的框架条目来自《C代码整洁之道:C17可持续软件开发模式实践》,作者: [德] 斯提芬罗特。书籍原名"Clean C: Sustainable Software Development Patterns and Best Practices with C 17"。 NOTICE:未经作者允许禁止转载! 文章目…

SQL中的左连接与右连接,内连接有什么区别

例子,相信你一看就明白,不需要多说 A表(a1,b1,c1) B表(a2,b2) 左连接: select A.,B. from A left outer join B on(A.a1B.a2) 结果是: 右连接: select A.,B. from A right outer join B on(A.a1B.a2) 结果是: 内连接&#xff1a…

sql左连接、右连接结果总结

班级team 表 班级和教师连接表team_teacher – 左连接: – 对于左连接,查询结果中,left左边表格的记录会全部包含 – 再到left右边表格查,如果匹配结果是0或1,对结果总数没影响 – 如果匹配条数大于1,那么结果就增加…

内连接,左连接和右连接作用

在数据库查询中,经常会遇到多表连接来查询数据,下面来说一下他们的连接方法和作用 内连接:内连接是很常用的一个连接方法,用来查询两个表或者多个表之间相同的数据,例如: 查询的是他们之间相同的数据 内…

SQL中的连接(左、右、内连接)

目录 左连接(LEFT JOIN或LEFT OUTER JOIN): 右连接(RIGHT JOIN或RIGHT OUTER JOIN): 内连接(INNER JOIN也叫等值连接): 全连接(FULL JOIN)&…

SQL内连接,左连接,右连接区别及联系

目录 数据库建表及其内容 内连接(默认连接) 左连接 右连接 总结: 数据库建表及其内容 stu表 班级表(class) 内连接(默认连接) SELECT stu.stuname , classname FROM class INNER JOIN stu…

SQL中左连接和右连接的理解误区

SQL中左连接和右连接的理解误区: 1.左右外连接中,怎么区分哪个表当左表,哪个表当右表? 2.什么时候用左连接,什么时候用右连接? 首先,重新捋一遍二者概念: 左连接的语法&#xff…

SQL语句什么是左连接、右连接、内连接?

1、左连接 以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。 左表(table1)全部保留,右表(table2)关联不上用n…

sql的左连接,右连接,内连接

环境: SQL工具(如Navicat,SQLyog) MySQL驱动 全局总结: 左连接:关注左边,右边没有就为空。右连接:关注右边,左边没有就为空。内连接:返回交集 必备: 两张或多张表格 一&#x…

Linux系统之iostat命令的基本使用

Linux系统之iostat命令的基本使用 一、iostat命令介绍二、iostat命令帮助1.1 iostat的帮助信息1.2 iostat的选项解释 三、iostat命令的基本使用3.1 查看iostat工具版本3.2 直接使用iostat命令3.3 间隔5秒查看3次信息3.4 只查看磁盘状态3.5 以k或M为单位显示信息 四、查看磁盘I/…

Linux实时监控iostat命令详解

概述&#xff1a; iostat 主要用于输出CPU和磁盘I/O相关的统计信息。 格式&#xff1a; iostat [选项] [<时间间隔>] [<次数>] 如图 参数&#xff1a; -c 显示CPU使用情况 -d 显示磁盘使用情况 -N 显示磁盘阵列(LVM) 信息 -n 显示NFS 使用情况 -k 以 KB 为单位显…

服务器 iostat命令详解

iostat是I/O statistics&#xff08;输入/输出统计&#xff09;的缩写&#xff0c;iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况&#xff0c;同时也会汇报出CPU使用情况。iostat也有一个弱点&#xff0c;就是它不能对某个进程进行深入分析&#…

Linux中iostat命令参数详解

iostat主要用于监控系统设备的IO负载情况&#xff0c;iostat首次运行时显示自系统启动开始的各项统计信息&#xff0c;之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以根据需求指定相应的次数和时间。 一、使用iostat 1命令&#xff1a; 各参数含义 Device:部…

转:linux iostat命令详解

转过来学习学习。 Linux系统中的 iostat是I/O statistics&#xff08;输入/输出统计&#xff09;的缩写&#xff0c;iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况&#xff0c;同时也会汇报出CPU使用情况。同vmstat一样&#xff0c;iostat也有一个…