实验是为了支持、反驳或验证一个假设而开展的一些列操作或活动。实验演示了当一个特定的因素被操纵时会发生什么结果,从而提供了对因果关系的深刻理解。
科学及其核心的实验实践,是将我们现代高科技社会与我们之前的农业社会区分开来的最重要的因素。
如果我们想要证明Clojure比C#好,为什么不做一些实验,并度量结果的稳定性和吞吐量呢?
四个特征将实验性定义为一种方法。
1、反馈。我们需要了解如何收集为我们提供明确信号的结果,并高效地将这些结果传递回我们正在思考的那一点。提高反馈的效率和质量是很重要的。
2、假设。我们需要有一个想法,我们的目标是评估。如果你的猜测与实验不一致,那么你的猜测是错误的。我们需要能够测试我们的假设。
3、度量。我们需要清楚滴知道如何评估我们在假设中要检验的预测。一个例子,没有断言的测试覆盖率是没有意义的。我们需要持续学习提升度量的质量和准确性。
4、控制变量。我们需要消除尽可能多的变量。持续交付背后的原理是,让变更本身称为唯一的变量。
自动化测试是重要最灵活的实验。实验假设是:我预测我的代码将在没有任何警告的情况下编译,我预测我的用户界面代码不会访问数据库。
如果你在编写代码之后再编写自动化测试,那么实验的价值就会降低。围绕一系列实验进行开发,这些实验对我们代码的行为做出微小预测,这将允许我们增量式地增加软件的功能。这样的实验最清晰的形式是由测试指导的软件开发,或称为测试驱动开发。
我们可以在不同的粒度上使用这种测试驱动开发。可以以用户为中心的规范开始,使用验收测试驱动开发或行为驱动开发。
测试驱动开发减少了缺陷,进而通过减少缺陷修复时间来提升效率。这样的团队生产力高出普遍水平,同时生产成果质量也更高,鱼与熊掌可以兼得。
将软件视为一个工程过程,而不是单纯基于工艺的过程,通过测试实现想法在系统中的有效性和一致性。
实验的步骤总结如下:
1、我思考并描绘了一个问题的特征,例如,我已经思考了我想要的系统行为。
2、我形成一个假设,我预测我的测试会失败。
3、我做了一个预测,当它失败时,会发出这样的错误信息。
4、我进行了实验,运行了测试。
实验的方法对工作质量,即内在一致性和有效性,产生了显著的积极的影响。
在工作中采用更规范的、实验性的方法,不需要是复杂的和费力的。如果我们要成为软件工程师,我们需要采用这样的行为准则,并始终如一地将他们应用到我们的工作中。
实验使我们的软件更加有确定性、高质量、可预测、使用起来更可靠。实验性方法使工作更高效和高质量。