试错-原型-持续集成

前几天,我和一位写博士论文的朋友聊天 David Wheeler 作为他的顾问,这让我感觉自己很年轻,因为惠勒是这个子程序的发明者。

不,不是‘子程序’,而是‘子程序’。

在20世纪80年代,就在我刚开始从事IT行业的时候,出现了一种新时尚:“原型制作”。

它到处都是,在1983年的数据传输中,你可以大约 "Data driven prototyping" ,到1990年,它已经膨胀到管理和信息和软件技术可以出版 "Organization and Management of Systems Prototyping" 等等。

我工作场所的灰胡子简洁地说 "We already do that, only we call it Trial&Error."

编程一直都是试错,很可能永远都是。

所有早期的先驱,如惠勒,都抱怨机器资源的批处理调度如何消除了与正在运行的程序的“亲密”联系,并辩称它延长了调试过程。

从那时起,几乎所有的口述历史都是关于人们潜入大学或晚上工作,为自己买电脑。

但如果这听起来更好的话,我们可以称其为“原型”,既然有历史缺陷的互联网一代已经“发明”了它,我们可以称之为“持续整合”。

我不在乎--对我来说,这仍然是试错。

和我聊天的那个人告诉我,在他的博士论文发表后,他 "swore to never again attempt to solve a problem with inadequate tools"

这是一个合理的建议,但我们总是容易忘记它,所以提醒我,我在回家的火车上做了一个心理盘点:我应该使用哪些工具,即使我发现它们不够用。

然后我决定对他们做点什么。

第一件事是我的实验室有-呃...进化?-在过去的15年里。

最初的一些假设是完全错误的,很多“作为临时解决方案我可以……”黑客变成了永久性的黑客,等等。

我花了两天时间清理、移动、移动和整理我的实验室(还有其他发现:由Rod Grimes建造的第一台“freefall.frebsd.org”机器上的两个原始的SCSI盘)。这些天来,我所做的工作让我感到愉快多了。

第二件事是我们在Varnish项目中用于Tria^H^持续集成的Jenkins和Travis。

Jenkins和Travis都是通用的程序-测试-框架-云计算工具,它们在某种程度上还不错,但在很多方面对我来说都不是合适的工具。

Jenkins是用Java编写的,这不是我想要强加在计算机上的东西,特别是不是在人们借给我们测试Varnish的计算机上。

Travis只运行Linux,如果您只运行Linux,这是很好的,但我不能。

但最糟糕的是:他们两人都不完全理解我们的Varnish工具,因此他们的失败报告使用起来既乏味又繁琐。

因此,我听从了朋友的建议,坐下来编写了VTEST,它由两小段代码组成:Tester和Reporter。

测试仪是一个小的,173条线, portable and simple shell script 它在计算机上运行,无论是物理的还是虚拟的,我们想在那里测试Varnish。

它显然需要我们编译Varnish所需的编译器和工具(AutoCrap、Shinx、graph viz),但除此之外,它不需要任何东西,特别是它不需要Java运行时、图形用户界面或防火墙漏洞。

测试人员使用ssh(1)将报告发送到项目服务器,而报告器(只有750行Python代码)接收和消化该报告,并输出一些 pidgin HTML 带着我真正想看的信息。

就像之前的varnishest程序一样,一旦我完成了,我的第一个想法是 "Why didn't I do that long time ago?"

因此,将VTEST献给与我聊天的朋友才是公平的:

../_images/bjarne.jpeg

Bjarne 尝试建模如何最好地在网络上分发操作系统内核,为这项工作编写了一个适当的编程语言工具,这也是许多其他编程工作的适当工具。

谢谢比昂!

保尔-亨宁,2016-11-21