如果合并到开发中的功能被管理层推迟,该怎么办?


53

最近,我们遇到了一个问题,管理层推迟了webapp(自动注册)的功能,因为他们觉得开始太“冷”了,但是他们希望我们一直在努力的所有其他功能都可以上线。

问题在于该功能在完成时已与我们期望在下一个版本中发布的所有其他功能一起合并到开发中,因此我们不能像往常一样将dev-> test-> master合并。

我们如何避免这个问题?


如果您不寻求技术解决方案,则根据您对解决方案的观点,此问题更适合工作场所。
马拉沃斯2015年

Answers:


74

一种方法是对其进行特征标记。它可以存在于代码库中,但可以通过配置禁用。

另一种选择是进行还原提交,以还原功能合并,从而使其不再处于开发状态。可以创建一个新分支来还原该还原,并留待以后合并。如果您使用的是Github提取请求,则可以通过合并的提取请求上的“还原合并”按钮轻松完成此操作。


9
配置标记是否意味着该代码的测试工作量增加了一倍?您必须测试两条路径。

16
在这种情况下,由于您将不会在生产中打开该标志,因此可以立即测试发布的关闭情况,然后在准备进行生产时测试打开情况。这应该与测试还原和重新提交大致相同。
艾伦·舒特科

4
常用术语是Feature Toggle。如果有一个小的“功能入口点”,则可以在做出管理决定后完成。如果没有,那么使用此方法以及任何方法都会遇到问题。
布朗

3
Feature Toggling正如Doc Brown所说的那样,我们有6个月以上处于开发阶段的功能被隐藏。这也使我们能够在非生产环境中测试功能(或不存在功能)。有时,这些功能会添加到现有功能上,在这种情况下,我们应该对新旧功能集都进行单元测试。每个单元测试只会将标志设置为执行当前测试所需的任何内容。
ps2goat's

25

我们如何避免这个问题?

从过程的角度来看,找出:

  • 谁是开始这项工作的决策者?
  • 为什么发布此功能的决定发生了变化?
    • 错过期望?
    • 沟通不畅?
    • 商业支持不足?
    • 没有客户参与吗?

在此过程中,沟通下降的可能性更大。这一点很重要,因为当它不起作用时,您的开发过程将基于对业务需求的错误和错误理解。


9
+10。管理层一开始怀疑功能的发布,他们就应该通知开发人员,以便在决定将功能合并到开发中时可以考虑可能的删除。
Bart van Ingen Schenau

14
这不是一个非常有建设性的答案-有时出于各种原因,事情会横盘整理。当然,发现不应早于合并是很重要的,但这并不意味着最终会在最后一分钟将其合并。也许是合同变更,也许您的客户没有付款,也许出现了法律问题..您仍然必须管理问题而不是指责
gbjbaanb

11
如果您的组织中有些人足够强大,可以拒绝承认错误,并且还很幼稚,不希望避免出现错误,那么您仍然应该对问题进行事后调查,以供自己参考。您只是不想告诉他们(或太明确地写下来)。就是说,enderland不使用“责备”一词,如果组织将此建议解释为“找出应归咎于谁”,那么这本身就是组织要继续努力的问题。这一切都是“了解问题发生的原因”,这对于将来避免问题至关重要。
史蒂夫·杰索普

2
我完全同意,这是管理上的麻烦,不是开发人员。
durron597

3
@enderland我的观点是,您无法避免一些问题,因此您必须考虑如何解决这种情况。希望您不会经常遇到这种情况,但是它迟早会发生,因此请相应地计划。
gbjbaanb 2015年

19

暂时忘掉与管理人员有关的问题,想象一下您的最新产品版本中已经具有“自动注册功能”,并且已与代码库深度集成。现在,您获得了为“自动注册”添加“关闭”的新要求。您将如何在Git工作流程中处理此问题?

我猜您会简单地声明“通过配置禁用自动注册”作为一项附加功能(这只是Feature Toggle的一种形式),因此这应该可以平稳地集成到您的工作流程中。您可以估计工作量,如果您愿意,可以使用功能分支(或者如果不使用功能分支来解决此类问题,则可以不使用)。您绝对可以使用您描述的常规“合并开发->测试->主”流程。

这实际上是您在当前情况下可以解决此问题的方式。从git工作流的角度来看,变更请求是否来自1.0版的管理人员,或者变更请求是否是2.0版的新客户,都没关系。


Fowler确实有一些不错的输出,但是我不能支持此方法进行功能介绍。此类开关的协调工作似乎是不必要的负担。我可以支持添加功能切换以在合并后删除功能,但是作为要求的一部分来构建开关会使我感到不舒服。
古斯多

@Gusdor:看我的编辑。
布朗

1

这是我在gitflow和GitHub流上遇到的确切问题,而且似乎在Web应用程序中经常发生-或更像是正常现象。看来您可以追溯解决此问题(上述),也可以主动解决此问题(以下示例)。

除了标准的gitflow分支之外,我还创建了“捆绑分支”。该捆绑软件包含可用于uat / qa的所有功能。创建了uat / qa功能列表。这些被合并到临时捆绑包中,并且该捆绑包被部署到uat / qa。任何错误修复都发生在原始功能分支上,然后重新合并到捆绑软件中并进行了部署。这将即将发布的版本分开,并允许在找到进入开发分支的方式之前一起测试这些功能。那些批准的分支会在gitflow过程之后向开发请求请求。可以将测试就绪功能添加到临时捆绑包分支中或从中删除,然后重新部署。

  • 这样可使母版始终反映出生产就绪状态(可以通过钩子自动执行)
  • 开发始终反映最新交付(和经过测试)的下一个发布候选版本

缺点包括管理分发包列表和添加其他分支类型。但是,除了追溯修复(我认为为时已晚)之外,这似乎是更可行的解决方案。

使用GUI插件时,最好在每个捆绑包部署中都选中功能分支-考虑到自动化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.