再读《程序员修炼之道-从小工到专家》

我单独拎出几个觉得很重要的点,作为笔记。

测试

Test Early. Test Ofen. Test Automatically.

软件质量保证是一个非常重要的事情,其中测试就是主要手段。测试包括手动测试和自动化测试。

手动测试,是指人工操作软件,检查软件的功能是否正常。这种测试效率低,容易出错,可控性相对较低。但是很多场景还是 非常有必要的,比如变动非常快的UI界面,或者一些复杂的交互逻辑。这种场景使用自动化测试,那么测试覆盖和维护的成本 都会非常高。

自动化测试,就是机器来跑,现在的工作中,主要在这么几个场景下,配合CI/CD使用:

  • 代码提交时,PR中跑单元测试和集成测试
  • 代码合并时,跑单元测试和集成测试
  • 部署前,拉分支时,跑单元测试和集成测试
  • 定时触发 e2e 测试
  • 定时触发性能测试
  • 定时触发安全测试(很少见)

单元测试和集成测试的区别,单元测试是对一个模块的测试,集成测试是对多个模块的测试,主要在于一个颗粒度的不同。 e2e 测试是端到端测试,是对整个系统的测试,主要是测试系统的功能是否正常,是以用户视角来看的,一般就是模拟用户的操作, 来调用API,甚至有些场景还会模拟用户的行为,比如点击,输入等。

不仅要测试,要早测试,要多测试,而且要自动化测试(当然并不是说不要手动测试)!

不留破窗

有问题就要修复,越等到后面修复的成本越高。

不要温水煮青蛙,一旦习惯了破窗,就会变成习惯,最后就会变成了一种文化。

正交性

正交性是指,系统中的各个部分之间是独立的,互不影响。这样的系统更容易维护,更容易扩展。我们常说的解耦,其实就是 为了提高正交性。

想象一下,如果你在驾驶一辆新的汽车,汽车没有正交性。转动方向盘的时候,可能会提升车速,换挡的时候,方向盘会打转, 刹车的时候,可能会加速。这样的汽车,你敢开吗?

软件也是一样的。UNIX文化常说的 KISS 和 DRY,也是为了提高正交性。

自动化

能自动化的,都自动化!

好文档,好注释

首先要有一个好的代码,如果代码本身命名清晰,逻辑清晰,其实是不需要注释的。如果代码比较复杂,或者有一些历史逻辑或者 特殊处理,那么则需要配备对应的注释和文档。


更多文章
  • Golang不那么蛋疼的sort
  • Flutter给Android应用签名
  • 使用Gitea+Drone打造自己的CI/CD系统
  • 2019年就要结束啦!
  • 为什么要使用gRPC?
  • Matebook X Pro 2019安装Debian 10
  • ArchLinux忽略某个包的升级
  • SQLAlchemy使用主从与数据库autocommit
  • Blackbox禁用IPv6
  • 预防缓存击穿
  • Go 1.13的errors挺香
  • flutter开发体验汇报
  • 自己封装一个好用的Dart HTTP库
  • Flutter应用启动后检查更新
  • Grafana Gravatar头像显示bug修复