走进社区客户端测试 | 得物技术

0.引言

社区 C 端质量体系建设思考?

询问一下 ChatGPT

1、关于社区客户端

1.1 社区端上功能

得物首页

搜索、发布、关注流、推荐流、沉浸式单列流、活动 tab、其他二级频道 tab

动态详情页

图文、视频、专栏、点评

私域

个人/他人主页、通讯录好友、微博好友、好友推荐

创作者

创作者体系、poizon+、种草分佣、视频分佣、成长任务、创作灵感、创作学院

活动

抽奖玩法、新人池、乐高页、年终总结、allstar全明星活动、潮流教父藤原浩活动

框架及创新

话题、圈子、ar、穿搭精选、晒单有礼、数字藏品、点评

 

 

 

1.2 客户端技术栈

移动端应用可以分为三大类:Web 应用(Web App)、原生应用(NativeApp)、混合应用(Hybrid App)。

  • Web 应用

这里的 web 应用指的是移动端的 web 浏览器,和 PC 端的差别就是在移动端依附的操作系统是 iOS 和 Android 系统。一般采用的技术栈就是传统的 HTML、JS、CSS 等,包括这些年流行的 H5,但本质上还是个 web 网页,所以自然支持了跨平台。在社区这边主要用的是 nextjs11。

  • 原生应用

原生应用指的是移动端的原生应用,对于 Android 是 apk,对于 iOS 就是 ipa。Native App 是一种基于手机操作系统(iOS 和 Android),并使用原生程序编写运行的第三方应用程序,补充一下还有鸿蒙系统。

原生应用的开发,Android 使用的语言通常是 Java、kotlin,iOS 使用的语言是 Objective-C、swift。通常来说,Native App 可以提供比较好的用户体验以及性能,而且可以方便地操作手机本地资源。

得物 App,安卓主要是用的 kotlin,iOS 用的是 swift。

  • 混合应用

混合应用是介于 Web 应用和原生应用两者之间的一种应用形式。

混合应用利用了 Web 应用和原生应用的优点,通过一个原生容器来展示 H5 页面。更通俗的讲法可以归结为,在原生移动应用中嵌入了 Webview,然后通过该 Webview 来访问网页。

混合应用具有维护更新简单,用户体验优异以及较好的跨平台特性,是目前主流的移动应用开发模式。

基本了解一下端上技术栈也能帮我们在测试过程中有针对性的测试,同时为后续参与客户端 cr 做好准备 ,下面的具体案例中也能体现出来。

1.3 端上相关数据

通过质量大盘,用例平台和夜航星平台拉取的 2022 年社区的用例数,线下 bug 数、线上问题反馈数,这些数据能给我们在建设端上质量体系带来一定的参考价值。根据图中用例的占比和 bug 占比的趋势看,服务端用例发现 bug 率略低于客户端,分析发现服务端 bug 偏重逻辑,客户端一大部分都是 UI 交互相关,在提 bug 的颗粒度上有所区别。安卓端的 bug 数明显高于了 iOS 端,是不是说明了安卓端的质量要略差于 iOS 呢,因为受限于整年数据的无法精准下钻,只能在后续的版本迭代中观察注意。从反馈的线上问题来看,除了功能性 bug 以外,还有一部分是体验和兼容性问题很值得我们关注。iOS 的反馈问题数高于安卓,分析下来应该是线上问题反馈有一部分是内部反馈,因为内部同学使用 iOS 居多。

2022 年用例数

2022 各端 bug 数

2022 夜航星记录线上问题

2.端上测试实践

2.1 功能测试

如图是一个产品质量模型,基于这些属性,结合用户、业务和产品特点等进行更深入的分析,以了解对质量的具体要求,哪些质量特性需要优先关注。例如社区的推荐流,属于内容消费类的功能,那么首先考虑的肯定是功能性可用,然后就是易用性(好不好用美不美观直接影响到了用户体验),接着就是要考虑兼容性、效率及性能等等。

最原始最有效的测试手段毋庸置疑到目前为止还是功能测试。作为专业的测试从业者都会有一套扎实的测试理论基础,也许会觉得这有啥可讲的呢~,但很多我们觉得理所应当的测试方法也恰恰是在一次又一次迭代中完善的。下面也是结合社区在端上测试实践及具体案例来总结一下端上的测试方法。

2.1.1 测试方法

这里引用一下朱少民老师在《全程软件测试》中对测试方法的总结:

在测试分析、设计、自动化测试中,会采用大量的测试方法和技术,但对于一个团队来说不一定掌握足够的测试方法和技术。另外,针对一个特定的项目或特定的功能,也不是把所有的测试方法都应用一遍,而是根据问题选择合适的方法。所以,针对测试方法和技术,也要做到知己知彼。

  • 团队或团队成员目前掌握了哪些测试方法和技术?

  • 当前项目采用什么样的测试方法和技术是更加合适的?

可以从不同层次、不同维度或角度去看。从高层次看,测试方法体现了方法论或流派。流派有基于逻辑分析的测试方法、基于上下文驱动的测试等;方法论有基于需求的方法,它涵盖了过去传统的黑盒方法(等价类划分、边界值分析等),而结构化方法涵盖了过去传统的白盒方法(语句覆盖、判定覆盖、条件覆盖等),但这样划分,在项目中没有多大的应用价值,而是根据方法的应用场景、技术特征来划分对应用者更有启发,例如以下划分。

  • 基于直觉和经验的方法。

  • 基于输入域的方法。

  • 组合测试方法。

  • 基于逻辑覆盖的方法。

  • 基本路径测试方法。

  • 基于故障模式的测试方法。

  • 基于模型的测试方法。

  • 模糊测试方法。

  • 基于场景的测试方法。

在移动端的测试过程中,我们会发现它的复杂性越来越高,测试效率要比服务端低的多。因为是直接面向用户操作,那么就会涉及到不同机型不同系统,甚至是各种不同的操作手势和无法预知的用户行为,都会难以避免的出现测试遗漏。在这个过程中我们通过积累经验丰富我们的测试场景,结合线上监控尽可能的去发现并解决无法预知的问题。

那么具体会怎么去做呢?比如你拿到一个需求。需求分析 -> 用例设计 -> 测试 -> 验收(只列测试行为相关的),具体的用例设计方法就不列了,学过软工的都清楚。下面通过两个案例来讲一下。

  • 案例 1

功能:优化负反馈选项,新增二三级类目

问题:返回三个标签时,第三个标签在 iOS 端无法点击。其余场景都正常。

拿到这个需求去测时,按照我们的经验,标签返回数 2、3、4 都会去测,然后大概率就是每个标签数中随机点击一两个测试一下接口传参及客户端功能。作为一个在原有功能基础上优化的小需求很容易忽视不会更详细的去测。很简单的一个全排列组合的算术,负反馈「不感兴趣」下全部点一遍就是(2+3+4)*2=18 次。那么当我们纯黑盒去测时,这个还属于有限可接受的数量级去全排列组合测,当遇到指数级的场景呢?这时候我们想到的是结合白盒,这个其实在去年的一篇博客中我也举过服务端的一个案例就是结合白盒去设计用例。可以看到下面 iOS 有问题的这段代码,就是行列的判断错误,导致在返回 3 个标签时,因为通过 column 字段去判断的话因为第二行第二列没数据,走到第一个判断条件 contentH=itemY,就会导致无法点击。

  • 案例 2

功能:社区用户私信

问题:消息列表露出的不是收到的最新消息,而是自己发的最新消息

排查下来发现是因为本地时间调快了 5 分钟,落本地数据库时,自己发出去的消息对于接收到的消息来说是晚于对方消息的,那么在消息中心露出最新一条消息时就不能按照时间戳了。一般在测试过程中时我们设计的各种 case 逻辑基本都是基于正常时间的状态下测试的。但遇到这种和时间有关联的功能时,我们是很有必要去考虑本地时间不准的场景。

  

  • 改进及后续 action

案例一,有限集的场景尽可能的多覆盖,可以像服务端一样去多了解客户端代码逻辑,尝试去 CR 客户端代码,同时更应该多体验多探索。这就是客户端和服务端比较大的一个区别,很多时候无法穷举所有的场景。

案例二,一些非平常用户习惯的场景很容易引发各种问题,对于我们排查问题也是带来了很大的困扰。通过这个案例也可以看出客户端的场景复杂度,或者在用例设计时比较依赖于测试、产品、开发的经验。

我们可以从三个大方向入手来补充我们的 case:

  1. 传统的用例设计方法,参考等价类划分法、边界值法、因果图法、正交实验法等等

  2. 结合白盒,通过熟悉了解客户端代码补充用例

  3. 积累了解不同的用户习惯,根据不同的业务特点考虑其他可能影响因素

2.2.2 兼容性测试

关于得物 App 的兼容性测试,主要测试软件(APK、IPA)。所谓兼容性测试就是保证 App 在各种不同的手机品牌型号和各种不同的操作系统上能正常运行使用。也同时包括屏幕的分辨率、不同的网络环境。一般需要覆盖以下这些场景:

  • 不同的操作系统,主流的 Android 和 ios 系统,包括华为的鸿蒙系统

  • 各种系统版本

  • 不同的手机品牌

  • 各种手机分辨率

  • 网络环境:WiFi、5G、4G、甚至是弱网环境

  • 更细节点还可以测试不同的系统语言、不同的系统字体大小、系统权限等

(1)社区实践

在我们日常测试过程中,大家肯定会有疑问就是市面上有这么多品牌机型和系统,我们怎么在这快节奏的迭代中去挑选覆盖。这里我们使用得物 App 的手机品牌占比、系统占比以 DPM 线上监控数据为依据。

比如在社区我们会在每个版本提供当前线上占比高的机型和系统,UI 改动大的需求都会要求去测兼容性,其余场景自己酌情考虑。

(2)兼容提效

手工的兼容性测试方案基本没有更多的提效空间,通过工具平台能力来提效的思路有以下几个方向。

  • 智能推荐

占比高的设备及系统可以接入 DPM 平台做智能推荐达到支持实时更新(目前社区算是实现了第一版,直接给出 top10 的,后续可以结合云真机平台使用)。

  • 得物云真机 - 效能组实现

可以搭建 top5 的设备及系统支持同步执行同一套 UI 自动化脚本,同时可以引入支持图像算法来判断不同机型不同系统相同页面的 UI 是否一致。

得物云真机可以支持测试使用,同时可以考虑支持同步操作多态机器来测试兼容性。

  • 引入 AI 测试,简单了解了下市面上的 AI 测试框架,目前看来真要落地使用还是有段距离。

(3)第三方平台

使用 testin 平台去测试我们没有的机型 or 系统,提供 testin 兼容性测试用例,让第三方测试团队帮忙覆盖更多的机型系统。

2.2.3 探索性测试

探索性测试(Exploratory Testing)是软件测试方法的一种,它的特点为在进行测试时,同时探索开发更多不同型态的测试方式,以便改善测试流程。当软件开始测试流程后,一般测试者会使用预先设立好的测试案例来进行程式测试,而探索性测试就是为了弥补传统的案例测试的缺点而产生。

探索性测试这个词是由 Cem Kaner 在 1983 年提出。他将探索性测试定义为:一种强调个人自由与责任的测试方法,让独立的测试者可以借由不断的学习来改善测试的规划与测试的执行,而在测试的过程中也会同时的改善专案达到相辅相成的效果。

(1)社区实践

探索性测试主张学习,强调同时展开测试设计、执行、并从结果中获得反馈,从而持续优化测试。这里在社区实践过程中更是结合了集思广益,大家扮演不同的用户角色去体验探索自己不熟悉的功能。功能的负责人会简单介绍一下功能的特性,下面就是靠大家快速学习该功能、即兴发挥、动态调整测试策略,去发现一些因被思维固化或者数据差别等各种原因出现的遗漏。在过去一年的实践中,我们也发现了很多有效 bug,在去年也是因此避免了一个线上资损问题的扩大。

2.2.4 用户体验

在社区是会鼓励大家多体验得物 App,包括在 OKR 中也是会制定对应的目标,白冰冰的凝视也会每天提醒大家前一天的社区使用时长。体验问题我们在 RDC 上有专门的任务看板来记录跟进优化进度,可以看到 Q1 提了 46 个体验问题。

2.2.5 测试工具

端上测试也会用到很多辅助工具来帮助我们更有效的去测试,比如常用的抓包工具,adb 命令,ideviceinstaller 命令,安卓调试工具 Flipper,iOS 视图工具 Lookin 等。这节不介绍 UI 自动化和性能工具,只介绍一些社区在功能测试中使用到的工具。

(1)内部开发者工具

常用的

  • 环境切换

  • ab 值修改,这里介绍下 ab 一键改为所有实验或者对照组的功能,可以一定程度上的测试到遗漏的实验或者交叉实验的功能影响

  • 缓存修改,这个功能可以方便大家不用一直去卸载重装去测缓存类的功能

    1. 安卓,开发者工具 -> 交易 go -> MMKV

    2. iOS,开发者工具 -> 沙盒 -> Library -> Preferences -> com.siwuai.duapp.plist

(2)开源主流工具

  • 抓包代理类:Charles、fiddler、wireshark 等

    1. 可以查看接口请求参数

    2. mock 接口

    3. 弱网模拟等

  • 安卓 adb  官方文档->>

Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令可用于执行各种设备操作,例如安装和调试应用。

  • ideviceinstaller 官方文档->>

    1. 常用于 iOS 的快速装包 ideviceinstaller --install <file>

  • 安卓调试工具 Filpper

    1. 涉及到客户端数据库相关的可以使用该工具来辅助验证。

    2. 还有缓存修改、日志查看、路由跳转、图像等详细功能查看之前写的博客。

  • iOS 视图工具 Lookin 官方文档->>

Lookin 可以查看与修改 iOS App 里的 UI 对象,类似于 Xcode 自带的 UI Inspector 工具,或另一款叫做 Reveal 的软件。

2.2.6 问题排查

客户端出现了问题,排查的思路和服务端有所区别。因为考虑到一些交互场景会和手机型号、系统等影响,一般都需要清晰了解到反馈问题用户的客户端版本、手机设备及系统相关信息。这里一般的排查思路:首先是按照用户描述的问题,查看该功能是否是必现问题,如果不是然后再去尽可能的使用和用户一样的手机及系统去操作。无法复现的问题,这时候我们也可以通过 DPM 去查看用户的行为路径(有点类似于服务端的 trace2.0)。

这里举个通过用户行为路径定位到问题的案例

问题:收到关注的人更新内容 push,点进去后 landing 到了推荐流。(功能应该是 landing 关注流并且把更新的动态内容强插到第一位)

排查过程:

  • 查看是否是必现的普遍性问题及功能 bug - 不是

  • 查看是否为兼容性问题,使用对应的客户端版本及手机系统 - 未复现

  • 查看日志,确认实验组和对应时间的 push 记录,确保用户反馈问题的真实性,结果发现实验是对的,push 记录也有,但从日志分析的确是没有调用关注流接口  - 未复现

  • 查看用户在该时间段内的操作路径,试着按照同样的操作去复现 - 成功复现

如截图从行为路径可以看出,用户先是冷启 app,在 lauch 页面直接压后台,然后过了段时间后通过 push 唤起 app。试着复现,经过反复测试验证,发现在冷启后出现广告页时马上压后台,然后再点击收到的个性化推荐 push,就能稳定复现该问题。排查下来因为这时候 app 需要把上次未执行完的冷启动代码执行完,导致推送的跳转逻辑不执行。

因为客户端的多样性,给开发测试排查问题造成了很大的困难,当遇到难以复现的问题时,尽可能的还原用户一样的环境和用户行为,因为大家都明白所谓的非必现 bug 其实只是我们没有找到必现路径而已。比如之前还有遇到过因为用户开启了省电模式而引发的 h5 渲染加载问题,这个问题我们在各种设备上怎么也复现不出来,但只要打开了省电模式就很容易复现出来。

2.2 UI 自动化

说到 UI 自动化框架,大家多多少少都了解使用过一些,这里简单列几个相对比较流行的开源框架,做简单的对比介绍。同时也介绍一下社区现在使用的和目前在社区 UI 自动化的开展情况。

(1)自动化框架

介绍

IDE

特点

Appium

Android 最底层实际上是基于 uiautomator2

iOS 基于 facebook-wda

https://github.com/openatx/facebook-wda

https://github.com/appium/appium

  • 支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用

  • 跨平台跨语言,支持 MacOS、Linux 和 Windows,也支持 Java、Python、Ruby 和 PHP 等

使用 c/s 架构模式,脚本可跑在服务,方便的远程控制本地机器

  • 不支持跨应用

  • 本地机器需要起服务端,中文输入支持不佳

  • 对控件获取较为麻烦(需要使用第三方工具)

uiautomator2

支持使用 Python 编写脚本,直接在电脑上运行控制手机。原理是在手机上运行了一个 http rpc 服务,将 uiautomator 中的功能开放出来,然后再将这些 http 接口封装成 Python 库。uiautomator2 官方文档->>

weditor

编辑器能够提供辅助编写脚本,查看组件信息,调试代码等功能。

官方文档:https://github.com/alibaba/web-editor

移动设备安装 atx server2

https://github.com/openatx/atxserver2

  • 跨 app

  • 仅针对原生 Android 应用

  • 无法录制

Airtest

OpenCV(图像识别)+ uiautomator 实现

https://github.com/AirtestProject/Airtest

网易官方提供 AirtestIDE

是一个强大的 GUI 工具,可以帮助你录制和调试测试脚本。AirtestIDE 提供了完整的自动化工作流程支持:录制脚本->真机回放->生成报告。

  • 网易团队开源,有独立的 ide 支持

  • 最突出的特点是图像识别

  • 支持 Android、iOS、Windows、Unity、Cocos2dx、白鹭引擎、微信小程序等平台

poco

https://poco-chinese.readthedocs.io/zh_CN/latest/

  • 网易团队开源,有独立的 ide 支持

  • 基于 app 控件进行自动化操作的。与上面的 appium 和 uiautomator2 类似

     

(2)社区实践

社区也是从一开始的 appiumn 、airtest到如今统一使用内部自研的UI自动化平台 Teslalab 平台。

在社区,目前会按照各自负责的业务模块划分去编写 UI 自动化脚本,并绑定对应的 BVT case。每个版本绑定转测单,会统一在提测后+预发线上回归两个时间段去执行。目前使用下来的效果,通过自动化发现的bug主要集中在提测后的冒烟阶段,相当于代替手工提前做了核心功能的回归。

2.3 性能测试

客户端的性能和服务端的性能还是有很大的区别,从性能指标出发就有很大的不同。服务端基础指标:QPS、RT、CPU、内存等;客户端性能基础指标通常会关注:CPU、内存、FPS、秒开、视频卡帧率、耗电、耗流等。因为现在手机的配置越来越高,性能一般都是过剩的,大家也许会慢慢的不太关注这些指标。但在我们使用的过程中,是不是出现过在使用某个 app 时出现手机发烫、滑动某个页面不流畅等问题?其实这些都是性能问题,CPU 占用过高会使手机发烫卡顿,缓存数据不及时释放导致内存占用升高,FPS 过低导致页面滑动流畅度低等都会极大影响用户体验。性能测试一般都在功能测试验证完成后进行,不然过早的介入性能测试意义不大。

(1)常用的性能测试工具

工具

介绍

特点

Xcode Instrument

苹果自带的性能测试工具

参考文档:Xcode Instruments usage to improve app performance,Instrument 工具使用

只支持 iOS

Emmagee

Emmagee 是一款实用、方便的性能测试工具,适用于指定的 Android 应用程序,可以监控 CPU、内存、流量和电池状态。

参考文档:Emmagee github->>

只支持 Android

SoloPi

SoloPi 是一个无线化、非侵入式的 Android 自动化工具,公测版拥有录制回放、性能测试、一机多控三项主要功能,能为测试开发人员节省宝贵时间。

参考文档:SoloPi github->>

只支持 Android

PerfDog

支持所有 Android、iOS、H5、小程序、小游戏等应用性能数据采集,收费。

支持 iOS 和 Android

apm

客户端性能监控平台,包括:内存泄漏,卡顿监控,ANR 监控,FPS 监控,启动监控,CPU 监控,内存监控,IO 监控等 10 余项性能监控指标。

通过 iOS 和安卓的埋点数据收集

TeslaLab 性能监测

得物自研工具,支持 CPU、FPS、内存等基础性能数据

支持 iOS 和 Android

(2)社区实践

按照统一要求 iOS 和 Android 分别使用了中端手机作为基线测试机,使用 TeslaLab 作为性能测试工具,每个版本迭代都会去执行 PV 较高的功能性能指标,确保性能数据没有劣化。如图516版本的安卓端性能数据,通过和历史版本性能数据对比发现性能没有明显的下降,但发现了两个内存泄漏问题,也是规避了这两问题带到线上影响用户体验。

2.4 稳定性测试

一款软件的好不好用,最基本的要求应该就属于稳定性。试想一下,当你在一款 app 上操作时,某些有流程性的用户行为,比如你要下单买东西,或者实名认证操作,进行到一半, app 突然 crash 了,这时候你的心情。根据业界的统计,app 闪退率越高,活跃用户下降趋势越明显,所以对于 app 进行稳定性测试至关重要。

说到稳定性测试,大家比较熟悉的就是 Monkey,常被用来做安卓端的随机压力测试。但考虑它不支持 iOS,还有就是会出现意想不到的跳出 app 的问题,在实践中放弃。在社区我们通过深度遍历的方式来测试稳定性,目前也是在实践过程中遇到了比如各种弹窗的干扰等,也是不断的优化改进中,包括在未来我们希望能做成一套通用的工具,支持在平常的业务测试过程中,只针对于自己负责的模块业务相关的页面去做一些随机性的交互测试。

(1)常用的稳定性测试工具

工具

介绍

特点

Monkey

Monkey 就是 SDK 中附带的一个工具。Monkey 是 Android 中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey 测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。

只支持 Android

Maxim

An efficient Android Monkey Tester, available for emulators and real devices 基于遍历规则的高性能 Android Monkey,适用于真机/模拟器的 APP UI 压力测试

参考文档:Maxim

只支持 Android

AppCrawler

Appcrawler 是一个基于自动遍历的 App 爬虫工具,支持 Android 和 IOS,支持真机和模拟器。最大的特点是灵活性高,可通过配置来设定遍历的规则。

参考文档:AppCrawler

支持 IOS 和 Android

fastbot

fastbot 是字节团队基于 monkey 的二次开发的 app 稳定性测试工具,目前已经开源,此工具有比较深入的算法探索,目前已经更新了多个版本,相对稳定的支持了移动端 app、H5 页面的自动化遍历,支持定制测试、当发生 crash、anr 时会有比较全的 log 可导出供分析

参考文档:Fastbot_Android,Fastbot_iOS

支持 IOS 和 Android

2.5 安全性测试

在移动互联网时代,智能机的普及使得 app 被广泛使用,应用的安全问题直接关系到公司和用户的切身利益。列举一些 App 容易出现的安全问题:

  • 接口的明文通信,通过抓包工具可以直接获取到接口返回的敏感信息

  • 没有接口验签或者验签被破解,造成接口拦截后数据篡改

  • 用户隐私,登录密码,支付密码等敏感信息的明文保存或者展示

  • app 所在的文件权限是否允许被其他 app 的读取

  • apk 的逆向破解等

3.总结于思考

对于端上的质量体系建设,我们整个团队包括开发产品一起在做不断的努力。我们在满足于基础功能的测试同时,也是在不断的探索实践,通过各种工具手段,不同的测试思路来尽可能的保障 app 质量,并且也是不断的注重用户体验。有些已经起步做起来了,也是有了明显的收益比如兼容性测试、探索性测试、端上体验等;也有些做起来了,但目前还没有很明显的收益比如稳定性测试、UI 自动化;还有没有开始的安全性测试也是未来的考虑方向。

端上的测试远远不止于此,该篇文章也是结合社区现在端上测试现状做的经验总结分享,上述无论是哪一块内容都可以单独拎出来做一个专题去讨论,也是欢迎大家一起交流学习,可以直接在评论区留言,促进互相学习。

更多精彩文章请关注得物技术官网:得物技术 

 

相关推荐

从中心调度到自驱协作多 Agent 架构的三次反转|得物技术

本文探讨多Agent系统中的控制权分配问题,提出三大协作架构:Master Agent(中心调度)、任务看板(共享状态)与Advisor(轻量咨询)。通过划清上下文边界与模型边界,强调应以信息相关性而非职业标签划分Agent。三种模式分别将决策权集中于中心、下放至共享状态、再下沉至执行者,形成控制权逐步下沉的演进路径。案例显示,合理设计可提升复杂任务的并行性、弹性与可维护性。

SmartCodeTech的博客 397

Jev 实战:为AI工作流引入轻量决策层 x10倍提速|得物技术

完成这三个场景后,我对适用边界有了更明确的认识:它们都可以先定义答案范围,再根据判断结果驱动下一步操作。接入时,我会优先明确输入、选项、采纳条件和兜底路径,再评估Jev是否适合承担这一环节。结合这些实践,我更容易理解Jev(TypeSafe System One)作为专用结构化决策模型不生成自然语言,而是返回带概率的判断结果。后续接入时,我会继续从脚本中边界明确的判断任务开始,分别验证准确性、耗时和费用,再决定是否扩大使用范围。下面整理了相关能力、限制和接入要点,便于查阅。

SmartCodeTech的博客 342

国产算力·昇腾 910C 大模型推理优化(下):源码修改与算子优化,提速30%|得物技术

本文延续上篇,深入vllm-ascend源码优化:通过多流重叠实现MoE共享专家并行计算,消除冗余事件开销,并解除与FUSED_MC2的互斥限制,实现c=1下TPOT从8.2ms降至8.0ms;优化decode阶段host侧开销,引入状态跟踪跳过冗余拷贝;设计Block Table CPU快路径,规避小batch下NPU kernel启动延迟;针对GDN层融合L2Norm至recurrent kernel,减少算子调用与内存往返。综合优化后推理性能显著提升,形成可复用的昇腾910C大模型推理优化方法论。

SmartCodeTech的博客 227

国产算力·昇腾 910C 大模型推理优化(上):镜像更新与参数调优,提速 40%|得物技术

文中详细给出每一项优化的动机、实现(含具体源码改动路径与关键代码片段)、验证数据与踩坑记录(包括十余项实测无效或负向的尝试),希望为同样在国产算力上做推理优化的团队提供一份可直接复用的工程参考。

SmartCodeTech的博客 214

动态规则的 Agent 实践:用确定性工程驾驭 LLM 的资产智能验收

面对财务验收中规则多变、材料非结构化、核对复杂等痛点,传统规则引擎难以应对。系统采用“规则即配置”思路,由大语言模型(LLM)负责理解合同、扫描件等非结构化材料并执行语义比对,工程系统则保障流程编排与可追溯性。通过异步处理、幂等设计、三类流量隔离及双通道(文本/图像)处理,实现高效稳定运行。结合用户反馈构建自动标准答案,辅以试跑、回测与发布门禁机制,形成闭环质量体系。底层采用确定性工作流架构,确保行为可预期、可测试,真正实现灵活规则的快速迭代与安全上线。

SmartCodeTech的博客 342

发一张图,它居然“跃“出屏幕了?一文读懂得物 3D 空间图片技术实践

3D 空间图片功能的落地,涉及模型生成、内容分发、客户端渲染之间的一系列取舍。本文重点分享如何生产出高质量、小体积的模型,以及如何在手机上流畅运行。

SmartCodeTech的博客 555

别再只卷向量检索了,得物交易搜索如何用“生成式”实现召回范式跃迁?

你搜"af1",它得给你"空军一号"。这一年,得物交易搜索把召回从"做选择题"改成了"写答案"——不再从商品池里"找"最像的,而是让模型自己"生成"你真正想要的。从 LLM 语义索引到 HLLM、语义 ID,搜索是怎么从"检索"走向"生成"的?

SmartCodeTech的博客 593

指标平台:从语义底座到智能消费的实践路径|得物技术

这篇文章想做的,不是在本体化的宏大叙事上再叠加一层理论,而是把我们在真实落地中验证过的路径讲清楚:语义底座怎么从零建立起来、怎么保证质量不失控、怎么支撑 Text2SQL 和 AI Coding 两条消费主线,以及沿着这条路径往前走,下一步该往哪个方向发力。

SmartCodeTech的博客 314

企业级 MultiAgent 落地:Plan 模式与主子 Agent 协作|得物技术

基于 AgentScope Java 的企业级 MultiAgent 平台,为研发、数据分析和知识问答等场景提供统一的模型调用、工具接入、任务编排、流式输出与运行追踪能力。

SmartCodeTech的博客 299

得物小摊 AI Native 演进实录:用 Harness 构建可控 AI 交付

AI Coding 一个人用很顺手,进了团队就漏:指令没人审、经验难沉淀、过程看不见、链路不闭环。作者团队基于 Multica 做了 EP-Harness,把 Agent 当成员管,给它套一层可执行、可观察、可治理的 Harness,并让反馈闭环。成果:可追溯决策、多 Agent 协作,高频异常从每 4 小时 2400 多条降到个位数,对得物技术补上团队级 AI 协作关键一环。

SmartCodeTech的博客 539

企业级 MultiAgent 的记忆系统:短期上下文与四层记忆架构实现|得物技术

在 MultiAgent 平台中,Agent 的"记忆"能力是实现智能对话和个性化服务的核心资产。本文深入剖析 Agent 记忆系统的设计理念与实现细节,重点解析长期记忆架构的写入与加载流程,涵盖 LLM 智能判断、语义检索、Token 预算控制、冲突处理等关键技术,为开发者提供完整的技术实现参考。

SmartCodeTech的博客 502

EP-Harness:从个人 AI Coding 到团队级 Agent 工作流|得物技术

AI Coding 个人用得爽,一到团队就崩。EP-Harness 把 Agent 从聊天工具变成团队协作成员——可管理、可追溯、可闭环。落地后高频异常从 2400+/4h 收敛到个位数。

SmartCodeTech的博客 688

得物知识问答:复合检索 Agent 的系统设计实践

从"搜到什么用什么"到"搜→筛→挖→验"自主决策闭环——我们造了一个有判断力的 RAG Agent,不是套壳。

SmartCodeTech的博客 732

实战从零开始构建一个Coding Agent:Violin |得物技术

理解了 coding agent 的构建原理,也就掌握了理解其他 agent 的一把钥匙。笔者对每天都在使用的 agent 原理很感兴趣,于是决定自己写一个:violin。

SmartCodeTech的博客 926

AI Native 交易核心系统的研发范式|得物技术

如何改造旧研发流程适配 AI 编码?本文提出五道标准化关口治理思路,依托 Claude Code Spec-Driven 插件打通需求澄清、方案设计、TDD 落地、门禁管控与埋点监控,构建带人工确认门控的完整工作流,以五层自底向上架构实现 AI 编码规范化落地。

SmartCodeTech的博客 971

推荐系统体验的数字化突破:得物自动化评测平台的技术实践|AICon 文章整理

「得物推荐 AI Harness 工程化实践系列」的末篇内容,本系列共三篇连载。本篇(末篇)详解得物推荐评测平台的完整技术体系:从主观体验量化到大模型自动化评测流水线,涵盖多维度指标设计、人机协作提示词校验闭环、分布式任务调度与成本精控等核心工程实现,以及单周百万级审计需求下实现 91% 资源成本优化的工业级落地实战细节。

SmartCodeTech的博客 1492

RAG 核心概念与原理:Chunking、Embedding、相似度、HNSW 与多路召回|得物技术

决定 RAG 效果的关键不在大模型,而是文本切块、查询改写、多路召回与精排。合理切块存好知识库内容,向量匹配抓语义、BM25 匹配关键词互补。先优化用户提问,快速召回一批相关文档,再用精排模型精细筛选,整套检索流程配合到位,问答准确度才会明显提升。

SmartCodeTech的博客 1079

从“机械应答“到“服务伙伴“:得物高可控智能客服的 Agent 工程实践|AICon 演讲整理

本次分享围绕以下核心技术展开:客服 Agent 挑战与架构设计(Single-Agent→Multi-Agent→Harness);高可控性数据飞轮(PE 自动化 + DPO 训练);RL 策略训练和人工经验对齐;多轮半双工消息流控制。

SmartCodeTech的博客 743

得物推荐系统诊断 Agent:从 “调接口” 到 “会思考”|AICon 演讲整理

本文是得物技术专家在 AICon 上海演讲整理的技术实录。AICon上海2026_全球人工智能开发与应用大会暨大模型应用生态展_InfoQ技术大会「得物推荐 AI Harness 工程化实践系列」的中篇内容,本系列共三篇连载。本篇(中篇)进一步详解得物推荐复杂业务场景下,AI代码从生成、防护校验到安全上线的完整技术体系、自研AI Harness整体架构框架、全流程安全防护机制、混合智能体核心算法实现,以及工业级工程落地的实战细节。

SmartCodeTech的博客 1361

得物 OceanBase 落地实践

得物选型OceanBase多模数据库应对业务挑战,通过验证其高可用架构、存储压缩技术及混合负载处理能力。测试显示OceanBase在复杂查询场景性能较MySQL提升130-200倍,在高并发TP/AP混合场景表现优异,存储成本降低40%+。通过DBA内部报表业务试点验证其稳定性后,逐步推广至核心业务场景,优化数据库技术栈,实现性能与成本的双重收益。

SmartCodeTech的博客 1380

AI UITester:AI Native 的 UI 自动化测试新范式|得物技术

ai_uitester 代表了 AI Native 的 UI 自动化测试新范式:这不仅是工具的升级,而是测试范式的转变 ------ 从 "代码驱动" 转向 "视觉驱动",从 "人工调试" 转向 "AI 自愈",从 "三端分离" 转向 "统一抽象"。

SmartCodeTech的博客 773

从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理

本文是得物技术专家在 AICon 上海演讲整理的技术实录。「得物推荐 AI Harness 工程化实践系列」的开篇内容,本系列共三篇连载。将系统拆解得物推荐复杂业务场景下,AI 代码从生成、防护校验到安全上线的完整技术体系,逐一详解自研 AI Harness 整体架构框架、全流程安全防护机制、混合智能体核心算法实现,以及工业级工程落地的实战细节。本篇(上篇):将整体介绍团队自研的 AI Harness 体系,包括建设思路、全生命周期防护机制、混合智能体架构及落地效果。

SmartCodeTech的博客 1079

从表单到 Agent:得物社区活动搭建的 AI 实践之路

一场营销活动从策划到上线,运营要在三个系统间跳转 10 + 次、填写 40 + 个字段。我们用 AI 重新设计了这条链路 —— 从 “AI 帮你填表单” 到 “两阶段 Agent + 聚合工作台”。这篇文章记录的不是技术细节,而是这条路上的选择和反思。

SmartCodeTech的博客 740

从埋点需求到规则资产:Hermes Agent 重构得物数仓工作流

埋点和指标需求中,消耗数据承接方的不是生成答案,而是补齐证据链、对齐历史口径、识别下游影响,并在生产写入前留下可追溯的确认记录。本文数据承接方指承接业务需求的数据同学或业务合作伙伴;后文讨论内部研发、元数据、查询和门禁能力在流程中的角色。

SmartCodeTech的博客 655

让 Claude Code 拥有自我进化和记忆系统|得物技术

本文记录了为 Claude Code 构建的一套持久化记忆与自我学习系统的设计思路与实现细节。这套系统让 AI 助手能够跨越会话边界记住用户习惯,并在每次对话结束后自动提炼行为规律和系统信息,通过向量检索快速提取关键信息,下一次对话时主动应用,逐步进化为更懂你的编程伙伴。

SmartCodeTech的博客 993

用 LLM Agent 重构告警排查流程|得物技术

告警排查需频繁切换日志、APM、链路追踪等多个平台,耗时 10~30 分钟,且高度依赖个人经验。我们做了 Troubleshooter——用 LLM Agent 自动完成数据采集、根因分析和处置建议生成。上线后中位数排查耗时从 20 分钟降到 4.4 分钟,覆盖 11 个服务和 10+ 种告警类型。

SmartCodeTech的博客 1002

HorizonVault 技术深潜:如何在 HDD 上做出 100GB/s+ 级大吞吐分布式存储|得物技术

HorizonVault是一款面向Kafka远程存储的高吞吐分布式存储引擎,通过分布式并行写入和状态感知调度解决冷数据存储的三大核心问题:吞吐瓶颈、性能抖动和恢复能力。系统采用分层架构,Meta负责全局资源调度,Broker处理请求路由,Store实现本地磁盘管理,形成完整的写入治理链路。通过将HDD磁盘提升为一等资源,实现顺序追加写入、多盘并行和慢盘隔离,在保证高吞吐的同时控制延迟。存储结构采用DiskStore组织磁盘资源,LogSegment顺序写入数据,IndexSegment定位读取,Change

SmartCodeTech的博客 889

Claude Code Harness 工程:数仓侧落地方案|得物技术

Harness 工程通过职责分层实现研发流水线可靠性提升。Claude 负责需求理解与代码生成等语义层工作;hooks 负责规范检查等确定性执行;Subagents 隔离血缘查询、自测等高 token 操作;Memory 承载跨会话状态持久化。四层协同使数仓 AI 开发从"对话式辅助"转变为"规则驱动的自动化流程"。

SmartCodeTech的博客 1089

BP Claw 破解 AI 编码输入难题 ——FlinkSpec 需求智能化实践|得物技术

本文为 FlinkSpec 系列之开篇,亦是这场工程化变革的序章。BP Claw 所立之处,不过链路之源。FlinkSpec 所图,乃以 AI 之力,将实时数仓从需求落地至验收上线的全程工序,熔铸为一套精密自洽、生生不息的智能工程体系。宏图未竟,后续系列将逐章揭幕,敬请期待!

SmartCodeTech的博客 1034

基于 Harness + SDD + 多仓管理模式的 AI 全栈开发实践|得物技术

Harness(约束)思维的本质是:给 AI 一个已有的实现作为参照,让它照着复刻一份,而不是凭空创造。就像给一个新入职的工程师说 "你照着这个模块的风格,写一个类似的",而不是 "你自由发挥"------ 前者往往能更快产出符合团队规范的代码。

SmartCodeTech的博客 1181
上一篇: 重构这件“小”事儿 | 得物技术
下一篇: 下单稳定性治理 | 得物技术
得物技术
得物技术 得物技术官方账号 得物技术官方账号
博客等级 码龄6年 2492粉丝 407原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值