Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于进行大量A/B测试的代码库来说,什么是好的模式?

我是在这样一个环境中开发的,我们往往会做大量的A/B测试。我很想向其他人学习如何在您的代码库中管理A/B测试代码?

您是否将A/B测试代码与控制代码(现有功能)混合使用。如果这样做,如何确保代码库不会变得不可维护?

是否有一种特定的设计模式在“分叉”的控制和测试代码中很有用?

我目前的位置基本上是要求前端工程师为每个实验保留“整个”前端文件夹,并对其进行修改。

Pros:

  1. 分离前端控制代码和测试。如果测试代码有错误,则控制代码不受影响。您可以在不进行代码发布的情况下关闭A/B测试。
  2. 可以用此模式进行雄心勃勃的布局更改。

Cons:

  1. 变更管理变得更加困难。如果您正在运行5个并发的A/B测试,并对控制代码进行修改,则必须确保所有A/B测试都得到对控制代码所做的更改。
EN

回答 2

Software Engineering用户

发布于 2019-09-12 19:08:31

依赖注入装饰图案是你做A/B测试的最好朋友。我的团队在任何时候都有几个实验在运行,我们为所有这些实验维护一个代码库。

总的思想是为您想要进行A/B测试的每一个逻辑定义一个接口,并创建:

  • 具有现有逻辑的生产(控制)实现
  • 使用要测试的新逻辑的一个或多个处理实现
  • 一种交换层(修饰器),它构成上述实现,并为传入请求选择使用哪一种实现。

结合依赖注入,在不触及控件实现的情况下添加和删除实验就变得非常简单。

票数 6
EN

Software Engineering用户

发布于 2019-09-12 17:10:05

在每个版本部署许多特性并在生产中测试它们时,有四件事对我有很大帮助:

  • 特征标志。
  • 白种人。
  • 路由控制。
  • 详细记录。

特征标志允许我们在控制的时间内启用一个特征,例如一天中的特定部分,或者仅在一个区域。它允许我们快速地“撤销”一个不适用于客户的更改。

白名单允许我们只为一组特定的、定义良好的客户启用一个功能。它允许我们有明确的“测试版测试人员”的一个功能,并迅速扩大或缩小他们的名单。

路由控制允许我们例如将2%的流量定向到具有特征集A的服务器,将3%的流量定向到具有特征集B的服务器,而将其余的流量引导到最新的稳定服务器。

详细的日志记录使我们能够判断哪一行属于哪个服务器,哪个版本等等。每一行包含足够的信息,可以轻松地分组启用/禁用特定功能的行,并进行分析/比较(使用Splunk)。

希望这能有所帮助。

票数 5
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/398346

复制
相关文章
Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]
Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]
一个风轻云淡
2023/10/15
1K0
Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]
Elasticsearch报错:exception [type=search_phase_execution_exception, reason=all shards failed]
Exception in thread "main" ElasticsearchStatusException[Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]]; nested: ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=Fielddata is
陈哈哈
2020/07/06
11.9K0
Elasticsearch报错:exception [type=search_phase_execution_exception, reason=all shards failed]
Exception 类
Throwable / Exception 类是有状态的(因此 Throwable 是接口而不能是类),记录了四个信息:
Qwe7
2022/08/05
4560
Andriod基础——Adapter类
Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View,因为layout五花八门,很多数据都不能直接绑定上去,所以Android引入了Adapte
mukekeheart
2018/02/27
1.7K0
Andriod基础——Adapter类
Oracle_Exception_01_The Network Adapter could not establish the connection
端口号错误:一般不会错误但可能使用多个oracle版本,导致端口号为1521的情况。  修改为正确的端口号,执行下面第2步。   
shirayner
2018/08/10
4100
Elasticsearch - cluster_block_exception [FORBIDDEN/12/index read-only / allow delete (api)]
6.4版本的 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.4/disk-allocator.html
小小工匠
2021/08/17
1.5K0
Elasticsearch - cluster_block_exception   [FORBIDDEN/12/index read-only / allow delete (api)]
magento soap api
step 2: 添加一个资源信息(模块名,不要加namespace) 注意:在etc 下的XML文件中,不要使用namespace, 否则会报错,会把当前模块下的helper 去Mage下查找。 在 resource 下添加 method,method 中的元素有 list ,create,update,delete.info. 如下:
全栈程序员站长
2022/09/14
1.8K0
magento soap api
中间件的数据抽取各种运行状态 ,weblogic的 , tomcat 类似 ---朋友的代码
package com.agent.opt.type.weblogic.data; import java.io.File; import java.io.IOException; import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.MalformedURLException; import java.ne
allsmallpig
2021/02/25
5680
如何快速快速地将MAGENTO 1迁移到MAGENTO 2
要迁移还是不迁移? 自Magento 2问世以来,这个问题无疑已经引起您的注意。 Magento 2迁移并不是一个神奇的一键式过程,因此也就不足为奇了,尤其是考虑到您的Magento 1商店运作良好并产生了利润。 如果没有损坏,请不要修复,对吗? 尽管现实情况是Magento 2征服了市场,但企业主正在逐渐将其商店迁移到新版本,以获得更多收益。 如果您仍然有疑问,让我们立即澄清两个更棘手的问题,以便我们继续讨论如何以合理的价格轻松升级Magento。
Alisa_Porter
2020/09/14
2.7K0
JMX in action第二篇
其实一看到Dynamic这个词就基本上确定了,就是反射那一套,不外乎属性获取,设定,方法调用等等,但是这个在使用中是至关重要的,因为现有系统如果都想把接口改造成符合Standard MBean方式的,不太现实,而利用DynamicMBean,通过反射将需要管理的Bean动态生成,对现有系统减少侵入性,也减少了问题产生的可能。来看看DynamicMBean接口
Dylan Liu
2019/07/01
3780
Elasticsearch-circuit_breaking_exception [parent] Data too large, data for [<http_request>]
之前用的6.4 ,后来升级到7.6以后,测试环境 es内存 4G , 时不时地来一下…
小小工匠
2021/08/17
2.5K0
Exception Processing Message 0xc000007b Parameters
What’s causing the ‘Exception Processing Message 0xc000007b Parameters’ error? 先看下https://cloud.tenc
Windows技术交流
2020/04/17
3.9K0
30个类手写Spring核心原理之自定义ORM(上)(6)
说到ResultSet,有Java开发经验的“小伙伴”自然最熟悉不过了,不过我相信对于大多数人来说也算是“最熟悉的陌生人”。从ResultSet取值操作大家都会,比如:
Tom弹架构
2021/12/16
5520
PHP实现elasticsearch/elasticsearchy实例
ElasticSearchModel::getInstance('sports_search_blog')->addDoc('blog', $data);
OwenZhang
2021/12/08
5660
Qt Model View 简便类(一)
表格、列表和树型窗口部件是 GUI 开发中经常会用到的窗口部件。传统的方式是窗口部件本身包含用于存储数据的内置容器。这种方式非常符合直观感受,然而,在许多复杂的应用中,这将导致数据的同步问题。早期Qt使用的就是上述的方式。第二种方式是模型/视图编程,窗口部件无需维护内部的数据容器。它们通过标准的接口获取外部数据,也因此避免了数据的重复。
用户5908113
2019/09/18
1.4K0
Qt Model View 简便类(一)
Django:model类的objects属性
A model class's objects attribute is an instance of django.db.models.manager.Manager. A manager has the following methods, all of which return a QuerySet instance.
一朵灼灼华
2022/08/05
8200
iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
  在上篇博客《iOS开发之使用Runtime给Model类赋值》中介绍了如何使用运行时在实体类的基类中添加给实体类的属性赋值的方法,这个方法的前提是字典的Key必须和实体类的Property Name相同,然后通过运行时来生成和执行Setter方法给Model类的属性赋值。   通过Runtime来给Model类属性赋值的好处是多多的,它便于代码的后期维护,并且提高了开发效率。当你拿到解析后的字典时你不用一个一个的通过key去把字典的值赋值给相应的Model类的属性,本篇博客中会给出如何去遍历Model中
lizelu
2018/01/11
2.2K0
iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
在CentOS 7上安装Magento(Install Magento on CentOS 7 译文)
原文作者:null 原文地址:https://www.linode.com/docs/websites/ecommerce/install-magento-on-centos-7/ 译者微博:@从流域到海域 译者博客:blog.csdn.net/solo95
Steve Wang
2019/05/28
9.8K1
Django model,baseModel基类, migrate移行
比如,create_user. create_datetime, update_user, update_datetime, delete_flag etc
刀枪不入de王二花
2022/08/07
1.2K0
Django model,baseModel基类, migrate移行
java.lang.BootstrapMethodError: Exception from call site #0 bootstrap method
解决方案:https://github.com/JakeWharton/butterknife/issues/1468
仰止
2019/09/04
2.9K1

相似问题

ReflectionException,类不存在。

12

Magento错误(ReflectionException):类Unirgy\DropshipMicrosite\Helper\ProtectedCode不存在

134

ReflectionException:类不存在

10

ReflectionException -类不存在

10

Magento 2: 1异常:异常#0 (ReflectionException)

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档