How to Implement Hypothesis-Driven Development

原文:https://www.thoughtworks.com/insights/articles/how-implement-hypothesis-driven-development

翻译:祝坤荣(时序)

让我们回忆下高中的自然课。老师有一套方法来帮助我们学习 - 一套基于手头证据的实验方法。我们被要求观察我们身边的世界,然后尝试形成一套对我们观察所得的解释或假设。我们在可控的实验环境通过预测我们理论的输出来测试这个假设 - 如果输出达到了,我们就证明了我们的理论是正确的。

我们通过构造更多成熟的实验来将学到的知识去形成和测试其他假设,调教,改进或摒弃任何我们获得更多从结果观察出的假设。

实验室自然科学的基础,是探索我们周围世界的系统方法。尽管一些实验是在实验室做的,但在任何时间和地点进行实验都没有问题,甚至在软件开发领域也可以。

实践假设驱动开发就是将开发一个新点子,产品和服务 - 甚至是组织变更 都作为一系列的实验来对待,用来决定期望的输出是否已达到。这个过程不断进行指导一个期望的结果达到了或主意已经被证明是可行的。

我们要改变自己的想法,当对一个问题做假设提供解决方案时,尤其是在新产品或服务开发时 - 我们瞄准的市场,业务模型是如何运作的,代码是如何执行的,甚至消费者是如何使用的。

我们不再做项目,而是做实验。用户发现和精益启动测试就是被设计成测试关于用户的假设。质量保证是按规格定义说明书测试系统行为。实验理论也在测试驱动开发中应用 - 我们先写测试,然后用测试来验证我们的代码是否正确,当代码通过测试后就是成功的。最终,产品或服务开发变成了一个流程,用来测试一个假定环境或市场上的开发的系统行为。

实验核心的输出是测量证据和学到的知识。

学到的知识就是我们在实验中得到的东西。我们期望的是不是已经发生了?如果没有,这些信息如何指导我们下次实验?

为了学习知识我们需要使用科学的方法来研究问题现象,获得新的知识,更正和整合之前的知识到我们的思考中。

随着软件开发行业的持续成熟,我们现在有机会应用持续设计和交付来最大化我们学到的来进行持续改进。通过使用实验方式来进行信息发现,我们可以更快速的对我们在创建产品或服务时识别问题来测试我们的方案。优化我们解决正确问题的效率是目标,而不是通过不断构建方案成为一个特性的工厂。

科学方法的步骤是:

  • 进行观察
  • 形成一个假设
  • 设计一个实验来测试假设
  • 定量分析实验是否成功。
  • 进行实验
  • 评估实验结果
  • 接受或推翻假设
  • 如果有必要,做个新假设并测试

用试验方法进行软件开发

我们要挑战对于产品或服务的固定需求的方式。当团队进行一个熟知的或确定的计划阶段时需求是有价值的,并能让我们使用熟知的实践来获得收入。而当你在摸索复杂和不确定阶段时你需要假设。

让团队处理一系列业务需求会让团队形成不正确的接单观念。

业务方来思考并‘知道’什么是真缺德。开发团队的活就是开发来实现被告知的东西。但当在一个不确定和复杂的领域,所有的开发团队成员都应该被鼓励思考和分享对于问题的想法,以及潜在解决方案。一个只是接单的团队并不能发挥跨职能多学科团队的全部潜力,经验和能力。

形成假设

传统用户故事框架聚焦在捕获我们想要做的和为谁做的需求,让用户能从系统中得到特定的收益。

作为... <角色>
我要... <目标/期望>
所以... <获得收益>

行为驱动开发与特性注入 旨在为软件项目支持开发测试与非技术人员的沟通协作框架提供改进。

为了... <获得收益>
作为... <角色>
我要... <目标/期望>

当将工作视为一种实验,传统的用户故事是不好用的。在我们的高中实验课,我们要为达到期望的结果定义步骤。我们需要定出要观察的指标(或信号)来提供我们假设是合理的证据。为了减少对结果的干扰这些需要在测试前就要决定。

如果我们观察到假设是对的信号,我们可以对我们在正确的路径上有更多信心并将其反映到用户故事框架里。

这样,一个能支持假设驱动开发的用户故事结构会是:
file

本文来自祝坤荣(时序)的微信公众号「麦芽面包,id「darkjune_think」
转载请注明。微信扫一扫关注公众号。
交流Email: zhukunrong@yeah.net

posted @ 2020-02-10 00:12 祝坤荣 阅读(361) 评论(1) 推荐(0) 编辑
摘要: 原文链接 "https://codefresh.io/docker tutorial/how to test microservice integration with pact/" 挑战:微服务集成测试 迁移到微服务对测试我们的系统产生了新的挑战。理论上每个微服务都应该是隔离的并可以独立操作。但在 阅读全文
posted @ 2019-12-20 20:45 祝坤荣 阅读(612) 评论(0) 推荐(1) 编辑
摘要: 原文: https://medium.com/netflix techblog/re architecting the video gatekeeper f7b0ac2f6b00 想法 我们决定部署一个全高密度近场缓存(Hollow)来解决我们的IO瓶颈。对于我们的每个上游系统,我们要建一个能让Ga 阅读全文
posted @ 2019-08-18 21:52 祝坤荣 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 原文 https://medium.com/netflix techblog/re architecting the video gatekeeper f7b0ac2f6b00 本文介绍了了内容配置工程团队使用Hollow,一个Netflix OSS技术,重新架构与简化我们内容管道上的基础组件 在流 阅读全文
posted @ 2019-08-11 23:29 祝坤荣 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 9月24日阿里在深圳做专场技术招聘, 同时9月23日进行技术分享,有兴趣的联系我kunrong.zkr@alibaba inc.com 以下是岗位JD: 阿里集团客户体验事业群旨在建立更高的客户服务标准,让客户在阿里享受到最“爽”的服务,让“客户第一”成为阿里的百年口碑。CRM产品技术部作为支撑全网 阅读全文
posted @ 2017-09-14 23:36 祝坤荣 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 原文: http://timperrett.com/2017/05/13/nomad with envoy and consul 在过去的许多年我的职业生涯一直是围绕着数据中心和平台基础设施。工作范围包括一些乏味的事情像搬运日志,也有一些令人兴奋的领域比如集群调度和动态流量路由。可以说在过去的多年里 阅读全文
posted @ 2017-05-30 11:27 祝坤荣 阅读(511) 评论(0) 推荐(0) 编辑
摘要: 原文https://martinfowler.com/bliki/InfrastructureAsCode.html 基础设施即代码是一种像其他软件系统一样通过源代码定义计算资源和网络基础设施的方法。代码可以被用来进行评审和反复构建(https://martinfowler.com/bliki/Re 阅读全文
posted @ 2017-05-01 20:09 祝坤荣 阅读(901) 评论(0) 推荐(0) 编辑
摘要: 原文: https://martinfowler.com/articles/serverless.html 消息驱动型应用 后台数据处理服务是一个不同的例子。 你要写一个需要快速响应UI请求的以用户为中心的应用, 但是你又想捕捉发生的各种不同类型的活动。让我们想一下在线广告系统 当一个用户点击时你想 阅读全文
posted @ 2017-03-12 23:47 祝坤荣 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 什么是Eureka? Eureka是一个基于REST的服务,主要用在AWS云环境作为服务发现,负载均衡和失败转移。我们叫这个服务,Eureka服务。 Eureka也有一个JAVA客户端组件, Eureka Client,帮助与服务端更简单的交互。 客户端也有一个内置的负载均衡做简单的round ro 阅读全文
posted @ 2017-01-13 20:38 祝坤荣 阅读(721) 评论(0) 推荐(0) 编辑
摘要: 1月6号,像往常一样,在工作的间隙,我打开手机上的今日头条。点开了其中一个新闻,发现进去后页面提示网络不给力,请稍后重试。前两天我的4G网络上不去,折腾了半天正要打联通客服咒骂,在IVR语音提示时才发现已经欠费了。但现在话费可是本月刚充的啊,何况现在连的是公司的WIFI,难道公司网络有问题?这时通知 阅读全文
posted @ 2017-01-07 11:15 祝坤荣 阅读(1100) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示