选自neilkakkar
本文是彭博社的一位开发者所写的文章,介绍了从一位资深工程师同事的身上学到的一些开发经验。
在计算机科学里有两个难题: 内存不足、命名、以及差一(off-by-one)错误。 ——Leon Bambrick
记录如何使用测试时用到的类/函数/系统。
记录我所想到的会出错的地方。
我在 #2 中遗漏了一些东西,那里是 bug 出现的地方;
所以每当发现 bug 时,确保修复 bug 的代码也有相应的测试(称为回归测试),用于记录信息:这里可能出现另一种错误。
有一台你用于开发的机器;
有一台你用于测试的机器;
最后,有一台你部署的机器(请不要用与开发程序使用同一台)。
我们先有本地开发环境,在我的机器上是 docker;
然后有服务器上的开发环境,机器上安装了一系列的库(和开发工具),我们在安装了代码的机器上进行开发。其他相关依赖的测试都可以在这里进行;
接下来是 beta/stage 环境,它与生产环境完全一样;
最后是生产环境,它是代码运行和服务于实际客户的机器上的环境。
使用编号是多少?
有多少用户?预期增长是多少?(即需要使用多少数据行)
未来可能出现的问题是什么?
本地开发如何运作?
怎么打包和部署?
如何进行端对端的测试?
怎么对新的服务进行压力测试?
怎么管理机密信息?
CI/CD 集成?
你不能将这些信息存到代码中,因为这样任何人都能看得到。
把它们作为环境变量?这是一个好主意。但你怎么把它们放在那里?(每次机器启动时访问 PROD 机器来填充环境变量是一件痛苦的事情)
部署为机密文件?文件从哪里来呢?怎么进行填充呢?
将业务逻辑和基础设施分开:通常是对基础设施降级——当使用量增加、框架过时、出现零日漏洞等情况下;
围绕系统维护建立流程。对旧的和新的组件都使用相同的更新。这可以防止组件之间出现差异,保持整个代码「现代化」;
确保一直修剪你不想要的/旧的东西。
部署是否花费过多时间?
代码审查是否容易进行?
如果一个功能中有 bug,将妨碍另一个功能执行;
增加整体出错的风险。
机器启动了吗?
是否安装了正确的代码?
配置是否正确?
<代码特定配置>,像代码中的路由是否正确?
模式版本是否正确?
然后进入代码。
总结