How to Implement Hypothesis-Driven Development
原文:https://www.thoughtworks.com/insights/articles/how-implement-hypothesis-driven-development
翻译:祝坤荣(时序)
让我们回忆下高中的自然课。老师有一套方法来帮助我们学习 - 一套基于手头证据的实验方法。我们被要求观察我们身边的世界,然后尝试形成一套对我们观察所得的解释或假设。我们在可控的实验环境通过预测我们理论的输出来测试这个假设 - 如果输出达到了,我们就证明了我们的理论是正确的。
我们通过构造更多成熟的实验来将学到的知识去形成和测试其他假设,调教,改进或摒弃任何我们获得更多从结果观察出的假设。
实验室自然科学的基础,是探索我们周围世界的系统方法。尽管一些实验是在实验室做的,但在任何时间和地点进行实验都没有问题,甚至在软件开发领域也可以。
实践假设驱动开发就是将开发一个新点子,产品和服务 - 甚至是组织变更 都作为一系列的实验来对待,用来决定期望的输出是否已达到。这个过程不断进行指导一个期望的结果达到了或主意已经被证明是可行的。
我们要改变自己的想法,当对一个问题做假设提供解决方案时,尤其是在新产品或服务开发时 - 我们瞄准的市场,业务模型是如何运作的,代码是如何执行的,甚至消费者是如何使用的。
我们不再做项目,而是做实验。用户发现和精益启动测试就是被设计成测试关于用户的假设。质量保证是按规格定义说明书测试系统行为。实验理论也在测试驱动开发中应用 - 我们先写测试,然后用测试来验证我们的代码是否正确,当代码通过测试后就是成功的。最终,产品或服务开发变成了一个流程,用来测试一个假定环境或市场上的开发的系统行为。
实验核心的输出是测量证据和学到的知识。
学到的知识就是我们在实验中得到的东西。我们期望的是不是已经发生了?如果没有,这些信息如何指导我们下次实验?
为了学习知识我们需要使用科学的方法来研究问题现象,获得新的知识,更正和整合之前的知识到我们的思考中。
随着软件开发行业的持续成熟,我们现在有机会应用持续设计和交付来最大化我们学到的来进行持续改进。通过使用实验方式来进行信息发现,我们可以更快速的对我们在创建产品或服务时识别问题来测试我们的方案。优化我们解决正确问题的效率是目标,而不是通过不断构建方案成为一个特性的工厂。
科学方法的步骤是:
- 进行观察
- 形成一个假设
- 设计一个实验来测试假设
- 定量分析实验是否成功。
- 进行实验
- 评估实验结果
- 接受或推翻假设
- 如果有必要,做个新假设并测试
用试验方法进行软件开发
我们要挑战对于产品或服务的固定需求的方式。当团队进行一个熟知的或确定的计划阶段时需求是有价值的,并能让我们使用熟知的实践来获得收入。而当你在摸索复杂和不确定阶段时你需要假设。
让团队处理一系列业务需求会让团队形成不正确的接单观念。
业务方来思考并‘知道’什么是真缺德。开发团队的活就是开发来实现被告知的东西。但当在一个不确定和复杂的领域,所有的开发团队成员都应该被鼓励思考和分享对于问题的想法,以及潜在解决方案。一个只是接单的团队并不能发挥跨职能多学科团队的全部潜力,经验和能力。
形成假设
传统用户故事框架聚焦在捕获我们想要做的和为谁做的需求,让用户能从系统中得到特定的收益。
作为... <角色>
我要... <目标/期望>
所以... <获得收益>
行为驱动开发
为了... <获得收益>
作为... <角色>
我要... <目标/期望>
当将工作视为一种实验,传统的用户故事是不好用的。在我们的高中实验课,我们要为达到期望的结果定义步骤。我们需要定出要观察的指标(或信号)来提供我们假设是合理的证据。为了减少对结果的干扰这些需要在测试前就要决定。
如果我们观察到假设是对的信号,我们可以对我们在正确的路径上有更多信心并将其反映到用户故事框架里。
这样,一个能支持假设驱动开发的用户故事结构会是:
本文来自祝坤荣(时序)的微信公众号「麦芽面包,id「darkjune_think」
转载请注明。微信扫一扫关注公众号。
交流Email: zhukunrong@yeah.net