兔子运送胡萝卜_一次运送一个重构并提供一个小片段,以降低风险

兔子运送胡萝卜

您不需要完成一项功能,您的用户也不需要看到它就可以发布并开始对其进行战斗测试。 尽可能对其切片,并尽快释放块以缩短反馈循环并降低风险。

我的同事们一直在努力进行我们网店中的一项重大更改-用新的旧购物车和结帐流程代替我们的旧购物车和结帐流程,并实现此更改所能实现的一些新的,高度期望的功能。 我们决定通过仅对产品配件进行更改来降低更改的风险。 但是,企业希望包含新功能,并且需要更改UI。 但是UI必须在所有部分中保持一致,因此我们在上线之前也需要对主要产品实现它-这将有必要也实现主要产品所使用的更复杂的过程(尚未得到新后端的支持) 。 突然之间,我们的工作量很大,需要数周才能完成,并且会在大规模的部署中发布。

如此大规模且耗时的更改没有任何来自现实的反馈,然后立即将其全部发布,对我们的所有销售都产生了影响–我发现这确实很可怕( 并且之前也曾为此奋斗过 )。 从本质上讲,这是数周的风险,然后将其释放到一个大爆炸中。 我们如何分解它,将其切成小块,而又不会使商人感到不高兴?

然后我们意识到,我们不需要同时进行“重构” 1 (引入新的客户端购物车并切换到新的后端)和新功能。 而且,我们可以像应用程序一样,首先让新购物车与旧后端通信,然后,也许并行地,也开始与新后端通信( 请参阅并行更改 )。 我们不需要更改UI,用户也不需要注意有任何更改。 因此,这成为了我们的新战斗计划:

  1. 实施新的客户端购物车,即UI存储用户选择的对象的对象,然后最终将其发送到旧的后端; 保持结帐流程不变。 最初仅对配件执行此操作
  2. 以后也将其扩展到主要产品
  3. 逐步集成新的后端,同时与使用旧的后端进行对话; 逐步切换到新的
  4. 随处实施新的用户界面
  5. 实施新功能

(某些步骤可能会交织在一起,因此我们有一定的试验和发现自由权。)每个步骤,甚至其中的一部分,都将尽快发布到生产中,以便在下一个块到达时进行实战测试。 风险和不确定性被最小化,我们几乎总是在生产代码上工作。

PS:非常感谢Alex York和我的其他同事的帮助

1可以说这不是(仅仅是)重构,因为我们不仅仅更改内部结构。

翻译自: https://www.javacodegeeks.com/2015/09/shipping-a-refactoring-feature-one-tiny-slice-at-a-time-to-reduce-risk.html

兔子运送胡萝卜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个比较复杂的问题,需要根据具体的情境来确定最优解。一般来说,需要先定义各个变量和约束条件,然后使用相应的优化工具箱进行求解。以下是一个简单的示例代码: 假设有三个仓库(W1,W2,W3)和三个客户(C1,C2,C3),需要确定最优的存储和运送方案,以最小化总成本。 首先定义变量: ``` x_ij:从仓库i到客户j的运送量 y_i:在仓库i存储的货物量 ``` 然后定义约束条件: ``` 1. 运送量不能超过仓库i存储的货物量 2. 运送量不能超过客户j的需求量 3. 每个仓库的存储量不能超过其容量限制 4. 所有运输量必须满足客户需求 ``` 最终目标是最小化总成本,包括存储成本和运输成本。 根据以上定义,可以使用MATLAB中的优化工具箱进行求解,代码如下: ```matlab % 定义参数 demand = [200, 300, 400]; % 客户需求量 capacity = [500, 700, 600]; % 仓库容量 storage_cost = [5, 6, 7]; % 存储成本 transport_cost = [10, 12, 15; 8, 9, 11; 7, 10, 12]; % 运输成本 % 定义目标函数 f = @(x,y) sum(storage_cost*y) + sum(sum(transport_cost.*x)); % 定义约束条件 Aeq = [1, 1, 1, 0, 0, 0, 0, 0, 0; 0, 0, 0, 1, 1, 1, 0, 0, 0; 0, 0, 0, 0, 0, 0, 1, 1, 1; 1, 0, 0, 1, 0, 0, 1, 0, 0; 0, 1, 0, 0, 1, 0, 0, 1, 0; 0, 0, 1, 0, 0, 1, 0, 0, 1]; beq = [demand, capacity]; lb = zeros(1,9); ub = [inf, inf, inf, inf, inf, inf, capacity]; intcon = [1, 2, 3, 4, 5, 6]; % 求解 [x, fval] = intlinprog(f, intcon, [], [], Aeq, beq, lb, ub); ``` 上述代码中,使用了`intlinprog`函数进行整数规划求解。其中,`intcon`参数指定了哪些变量需要整数解,`Aeq`和`beq`分别为等式约束条件的系数矩阵和常数向量,`lb`和`ub`分别为变量的下界和上界。最终结果保存在`x`和`fval`中,其中`x`为求解的变量值,`fval`为目标函数的最小值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值