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

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

测试

Test Early. Test Ofen. Test Automatically.

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

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

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

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

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

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

不留破窗

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

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

正交性

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

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

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

自动化

能自动化的,都自动化!

好文档,好注释

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


更多文章
  • 自己动手写一个反向代理
  • 读《债务危机》
  • 从XMonad迁移到i3
  • 服务器IP被ban学到的经验
  • socks5 协议详解
  • 开启HSTS(HTTP Strict Transport Security)
  • 网络乞讨之合并支付宝和微信的收款二维码
  • 从Chrome切换到Firefox
  • nomad简明教程
  • Linux下当笔记本合上盖子之后只使用扩展显示器
  • Ubuntu 18.04 dhcp更换新IP
  • Python中的新式类(new style class)和老式类(old style class)
  • Python Requests 简明教程
  • 密码技术简明教程(三):证书和TLS
  • 密码技术简明教程(二):散列、消息认证码和数字签名