再读《程序员修炼之道-从小工到专家》
我单独拎出几个觉得很重要的点,作为笔记。
测试
Test Early. Test Ofen. Test Automatically.
软件质量保证是一个非常重要的事情,其中测试就是主要手段。测试包括手动测试和自动化测试。
手动测试,是指人工操作软件,检查软件的功能是否正常。这种测试效率低,容易出错,可控性相对较低。但是很多场景还是 非常有必要的,比如变动非常快的UI界面,或者一些复杂的交互逻辑。这种场景使用自动化测试,那么测试覆盖和维护的成本 都会非常高。
自动化测试,就是机器来跑,现在的工作中,主要在这么几个场景下,配合CI/CD使用:
- 代码提交时,PR中跑单元测试和集成测试
- 代码合并时,跑单元测试和集成测试
- 部署前,拉分支时,跑单元测试和集成测试
- 定时触发 e2e 测试
- 定时触发性能测试
- 定时触发安全测试(很少见)
单元测试和集成测试的区别,单元测试是对一个模块的测试,集成测试是对多个模块的测试,主要在于一个颗粒度的不同。 e2e 测试是端到端测试,是对整个系统的测试,主要是测试系统的功能是否正常,是以用户视角来看的,一般就是模拟用户的操作, 来调用API,甚至有些场景还会模拟用户的行为,比如点击,输入等。
不仅要测试,要早测试,要多测试,而且要自动化测试(当然并不是说不要手动测试)!
不留破窗
有问题就要修复,越等到后面修复的成本越高。
不要温水煮青蛙,一旦习惯了破窗,就会变成习惯,最后就会变成了一种文化。
正交性
正交性是指,系统中的各个部分之间是独立的,互不影响。这样的系统更容易维护,更容易扩展。我们常说的解耦,其实就是 为了提高正交性。
想象一下,如果你在驾驶一辆新的汽车,汽车没有正交性。转动方向盘的时候,可能会提升车速,换挡的时候,方向盘会打转, 刹车的时候,可能会加速。这样的汽车,你敢开吗?
软件也是一样的。UNIX文化常说的 KISS 和 DRY,也是为了提高正交性。
自动化
能自动化的,都自动化!
好文档,好注释
首先要有一个好的代码,如果代码本身命名清晰,逻辑清晰,其实是不需要注释的。如果代码比较复杂,或者有一些历史逻辑或者 特殊处理,那么则需要配备对应的注释和文档。
更多文章
- socks5 协议详解
- zerotier简明教程
- 搞定面试中的系统设计题
- frp 源码阅读与分析(一):流程和概念
- 用peewee代替SQLAlchemy
- Golang(Go语言)中实现典型的fork调用
- DNSCrypt简明教程
- 一个Gunicorn worker数量引发的血案
- Golang validator使用教程
- Docker组件介绍(一):runc和containerd
- Docker组件介绍(二):shim, docker-init和docker-proxy
- 使用Go语言实现一个异步任务框架
- 协程(coroutine)简介 - 什么是协程?
- SQLAlchemy简明教程
- Go Module 简明教程