程序员修炼之道-从小工到专家(摘录三)无处不在的自动化

2018/01 08 22:01

文明通过增加我们不加思索就能完成的重要操作的数目而取得进步。
–阿尔弗雷德.诺斯.怀特海
在汽车时代的破晓时分,启动一辆T型福特汽车的操作说明有两页还不止。而驾驶现代汽车,你只需要转动钥匙–启动过程是自动的,十分简单。遵循一串指令进行操作的人可能会撑掉引擎,而自动启动器却不会。
尽管计算机行业仍处在T型福特车的阶段,我们无法承受为一些常用操作而反复阅读两页长的操作说明。无论是构建和发布流程、是书面的代码复查工作、还是其它任何在项目中反复出现的任务, 都必须是自动的。我们也许必须在一开始就构建启动器和喷油器,但它们一旦完成,我们从此只需转动钥匙就可以了。
此外,我们想要确保项目的一致性和可重复性。人工流程不能唯一致性,也无法保证可重复性,特别是在不同的人对流程的各个方面有不同的解释时。

一切都要自动化

在某个客户的开发现场,我们曾经看到所有开发者在使用同一种IDE。他们的系统管理员给了每个开发者一套说明,告诉他们怎样把附加软件包安装到IDE中。说明有许多页–到处都写着点击这里,卷动那里、拖这个、双击那个、以及再做一遍。
并不奇怪,每个开发者的机器里的内容有着轻微的不同。当不同的开发者运行相同的代码时,应用的行为会出现微妙的差异。bug会在一台机器上出现,在其它机器上却不出现。追踪任何一个组件的版本差异会揭示出一种让人意想不到的情况。
Don’t Use Manual Procedures
不要使用手工流程
人的可重复性并不像计算机那么好。我们也不应期望他们能那么。shell脚本或批处理文件能以相同的次序、反复地执行同样的命令。它们能被置于源码控制之下,你因而也可以检查流程的修改历史(“但它本来能工作…”)。
另一个特别受欢迎的自动化工具是cron(或Windows NT上的at)。它允许我们安排无人照管的任务周期性地运行–通常是在午夜。

项目编译

项目编译是一件应该可靠、可重复地进行琐碎工作。我们通常通过makefile编译项目,即使是在使用IDE环境时。使用makefile有若干好处。它是脚本化、自动化的流程。我们可以增加挂钩,让其为我们生成代码,并自动运行回归测试。IDE有自身的优势,但只用IDE,可能很难获得我们寻求的自动化程序。

生成代在码

在“重复的危害”中,我们提倡生成代码,以根据公共来源派生知识。

回归测试

你还可以让makefile为你运行回归测试,或是针对单个模块,或是针对整个子系统。

构建自动化
最终构建
自动化管理