密钥接口

2020年4月29日

188比分直播完整手机版软件开发团队发现,如果他们尽可能多地集成工作,生活会更轻松。他们还发现频繁发布到生产中也很有价值。但是团队不想向用户公开半开发的特性。处理这种紧张局势的一个有用技术是构建所有后端代码,集成,但不要构建用户界面。该功能可以集成和测试,但是UI会一直保留到最终,直到像密钥库一样,它被添加来完成功能,并向用户展示它。

这种技术的一个简单例子可能是给客户提供紧急订单的选择。这样的订单需要定价,这取决于客户住在哪里以及送货公司在那里经营什么。所涉及货物的性质影响仓库中使用的提货方法。某些客户可能有资格获得紧急订单,这也可能取决于交货地点、一年中的时间和订购的货物种类。

总而言之,这是一个相当大的业务逻辑,特别是因为它将涉及与各种仓储、目录和客户服务系统的复杂集成。这样做可能需要几周时间,而其他功能则需要每隔几天发布一次。但就用户而言,紧急订单只是订单上的一个复选框。

为了使用复选框作为重点来构建它,团队在几个生产版本的过程中对底层业务逻辑和与内部系统的接口进行开发工作。用户不知道所有这些潜在的代码。只有在最后一步中,keystone复选框才需要变得可见,这可以在相对较短的时间内完成。通过这种方式,所有潜在代码都可以集成并成为系统的一部分投入生产,从而减少了长期存在的特性分支带来的问题。

潜在代码确实需要以与活动代码相同的置信度进行测试。这可以通过设置系统的体系结构来完成,这样大多数测试就不会通过用户界面来完成。188比分直播网 坚持原创单元测试以及其他较低层次的测试金字塔这样跑应该很容易。即使广义叠加试验可以运行,只要有一个机制,使他们皮下试验. 在某些情况下,UI本身会有大量的行为,但是如果设计允许可视UI成为卑微的物体.

并非所有应用程序都是以这样的方式构建的,以至于可以以皮下方式进行广泛的测试——但是,即使没有使用密钥库的能力,也需要进行这样的工作。通过UI运行的测试总是安装上更麻烦的,即使是使用最好的工具来自动化流程。将更多的测试转移到皮下和低水平测试,特别是单元测试,可以显著加快速度部署管道并启用连续交货.

当然,大多数ui将不仅仅是一个复选框,尽管它们通常不是keystone要做的更多工作。在一个web应用程序中,一个复杂的特性通常是一个独立的web页面,可以完整地构建和测试,而keystone仅仅是一个链接。桌面可能有几个屏幕,其中keystone是使它们可见的菜单项。

也就是说,有些情况下UI不能打包成一个简单的keystone。如果是这样的话,就应该使用功能切换. 然而,即使在这种情况下,通过确保特性切换只应用于UI,考虑keystone也是有用的。这避免了通过后端代码分散大量切换点,降低了应用切换的复杂性,允许使用简单的拨动机构,并且在时机成熟时更容易移除。

最后开发UI有一个普遍的危险,即后端代码的设计方式可能在UI构建之后就无法与之协同工作,或者直到后期才给予UI所需的关注,从而导致缺乏迭代和糟糕的用户体验。基于这些原因,keystone方法在鼓励通过薄的垂直切片构建产品的总体方法中最有效,这样可以快速发布小但完全工作的特性。

我在这里使用了一个用户界面的例子,但是当然同样的方法也可以用于任何其他界面,比如API。通过最后构建消费者的界面,并保持简单,我们甚至可以在小块中构建和集成大型功能。

暗发射是一种变体,在这种变体中,新特性一经构建就被调用,但不会向用户显示任何结果。这样做是为了测量对后端系统的影响,这对于某些更改很有用。一旦一切就绪,我们就可以添加关键点。

致谢

我在肯特贝克的第二版中第一次遇到了这种技术的基石的比喻极限编程说明. 皮特·霍奇森、布兰登·达夫和斯蒂芬·史密斯提醒我,我忘了这件事。

戴夫·法利、保罗·哈曼和皮特·霍奇森对这篇文章的草稿发表了评论。