服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

云原生引擎单元测试实践

日期: 来源:OSC开源社区收集编辑:

来源 | OSCHINA 社区

作者 | 京东云开发者-京东零售 王雷

原文链接:https://my.oschina.net/u/4090830/blog/8589764

单元测试

概念

单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。单元测试是一种白盒测试技术,一般都是由开发人员在编码阶段完成,目的就是验证软件代码中的每个单元(方法或类等)是否符合预期,即尽早在尽量小的范围内暴露问题。
快速迭代的开发工作中如何提高代码质量一直是团队痛点,特别是没有测试支持的开发团队。合理的使用单元测试,并关注单元测试通过率、代码覆盖率可以有效提高代码质量。
云原生引擎服务,实践了单元测试,并在研发自测、预发、上线等阶段实施了相应的策略。在一定程度上提高了代码的质量。

单元测试的目的

单元测试的目的在于发现各模块内部可能存在的各种错误,主要包括以下几个方面:
(1) 验证代码是与设计相符合的。
(2) 发现设计和需求中存在的错误。
(3) 发现在编码过程中引入的错误。
在开发阶段尽可能发现代码中的问题;在预发集成阶段尽可能发现各个业务代码之间的问题;在上线阶段做最后的确认保证上线代码质量。
单元测试除了能够在较早阶段识别软件中的错误,它还有如下价值。
・反馈速度快:单元测试通常以自动化形式运行,执行速度非常快,可以快速反馈结果,跟持续集成结合起来,形成有效的反馈环。
・重构的有力保障:系统需要大规模重构时,单测可以确保对已有逻辑的兼容,如果单元测试都通过,基本上可以保证重构没有破坏原来代码逻辑的正确性。
・使更熟悉代码:写单元测试的过程本身就是一个审视代码的过程,可以发现一些设计上的问题(代码设计的不可测试)、代码编写方面的问题(边界条件的处理不当)等。

云原生引擎单测实践

整体单测率

引擎在进行开发过程中,会重点关注核心模块代码和底层代码,针对重要的业务逻辑代码,通用组件类等,涉及到重要的功能开发,对应的每一个方法我们都要编写对应的单元测试代码。在提交代码之前,在本地进行单测回归,跑通单测之后,提交代码,分支合并。

单元测试重点

引擎的单测重点主要体现在以下五个方面

1、输入输出测试

这里主要是针对数据的输入和输出进行测试。
  1. 调用所测模块时的输入参数与模块的形式参数在个数、属性、顺序上是否匹配。
  2. 所测模块调用子模块时,它输入给子模块的参数与子模块中的形式参数在个数、属性、顺序上是否匹配。
  3. 是否修改了只用作输入的形式参数。

2、路径测试

在单元测试中,最主要的测试是针对路径的测试;测试用例必须能够发现由于计算错误、不正确的判定或不正常的控制流而产生的错误。
常见的错误有:误解的或不正确的算术优先级,混合模式的运算,错误的初始化,精确度不够精确和表达式的不正确符号表示。

3、出错处理

比较完善的单元设计要求能预见出错的条件,并设置适当的出错处理,以便在程序出错时,能对出错程序重新做安排,保证其逻辑上的正确性。

4、边界条件

主要测试方法对循环条件,控制条件,数据流等临界值的处理情况
比如针对一个方法中的不同分支进行单测的编写

5、局部数据结构

在模块工作过程中,必须测试模块内部的数据能否保持完整性,包括内部数据的内容、形式及相互关系不发生错误。
对于局部数据结构,应该在单元测试中注意发现以下几类错误:
1) 不正确的或不一致的类型说明
2) 错误的初始化或默认值
3) 错误的变量名,如拼写错误或书写错误
4) 下溢、上溢或者地址错误

最佳实践

如何写好单测

1. 代码设计:代码设计上要低耦合、可测试
2. 度量指标:合理的单元测试用例数量以及合理的覆盖率
3. 使用场景:要融入软件开发中,在开发过程中经常运行
4. 测试目标:要专注于代码中重要的逻辑
5. 保证独立性:使用 mock 方式放置依赖系统对单元测试结果的影响
6. 用例粒度:单元测试用例应该是对单独的功能的有意义的描述,通过用例可以了解改功能的逻辑

持续集成、持续卡点

代码自测通过后提交 MR 让团队成员进行 review,当 review 通过时我们会通过 webhook 触发预发部署流水线执行单元测试和部署

上线前检查

当代码验收通过后,进行线上部署时再次跑单元测试确保上线代码质量,不达标将不能部署
    


往期推荐



微软开源Visual ChatGPT,7天斩获2.2万stars

Linux内核、LLVM、GCC均已支持龙芯LoongArch架构

相关阅读

  • 开启 eBPF 魔法,零代码修改实现可观测性

  • 云原生架构下,由于应用的服务数量多、访问关系复杂、访问路径长,使得可观测性变得越来越重要。然而传统的可观测性实现方法大多依赖于服务主动暴露指标、主动输出追踪 Span,这
  • 20 个非常有用的 Python 单行代码!

  • 编辑丨数据STUDIO来源丨https://python.plainenglish.io/20-extremely-useful-python-one-liners-you-must-know在本文中,给大家分享20 个 Python 一行代码,你可以在 30 秒或
  • 选择 .NET 的 n 个理由

  • 点击上方蓝字关注我们(本文阅读时间:20分钟)自从我们启动快速发展的 .NET 开源和跨平台项目以来,.NET 发生了很大变化。我们重新思考并完善了该平台,添加了专为性能和安全性而设
  • 难以置信,已经有人用 ChatGPT 做 Excel 报表了?

  • 点击上方蓝字关注我们(本文阅读时间:6分钟)要问2023年初科技领域什么最火,那自然是 ChatGPT。ChatGPT 由人工智能研究实验室 OpenAI 于2022年11月30日推出。上线短短5天,用户数
  • 网盘的快乐,只有技术宅知道

  • "网络云盘成为大众储存工具的同时,一群程序员已经开始在那里修筑秘密乐园。他们以代码为砖,以生活中冒出的星星火火的创意为蓝图,在云盘修造一个个满足现实需求的程序。“码代

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 伪装成Chrome,Yandex浏览器稳定性大幅提升

  • 出品 | OSC开源社区(ID:oschina2013)用户熟知的 Chrome、Edge、Brave、Vivaldi 和 Opera 都是基于 Chromium 的浏览器,在大家的认知中,这些浏览器的性能应该都差不太多,各个浏览
  • 云原生引擎单元测试实践

  • 来源 | OSCHINA 社区作者 | 京东云开发者-京东零售 王雷原文链接:https://my.oschina.net/u/4090830/blog/8589764单元测试概念单元测试是用来对一个模块、一个函数或者一个
  • 株洲:国家卫生城市巩固提升在行动

  • 3月22日,国家卫生城市巩固提升工作电视电话会议暨2023年全市爱卫工作全会召开,对相关工作进行全面动员部署。市委副书记、市长陈恢清强调,要强化问题意识,抓好工作统筹,创造性抓
  • 微软Bing上线AI绘画功能

  • 出品 | OSC开源社区(ID:oschina2013)微软上线了 Bing Image Creator,这是一项采用 AI 技术的基于文字生成图像服务,底层采用了 OpenAI 提供的高级版 DALL∙E 模型。用户只需要使
  • 开启 eBPF 魔法,零代码修改实现可观测性

  • 云原生架构下,由于应用的服务数量多、访问关系复杂、访问路径长,使得可观测性变得越来越重要。然而传统的可观测性实现方法大多依赖于服务主动暴露指标、主动输出追踪 Span,这
  • 5个改变世界的方程

  • 本文经授权转载自微信公众号「新原理研究所」(ID:newprincipia) 作者:原原数学,是一个充满方程的世界。一个方程能将大量信息浓缩成一个简单的式子。数学家的使命不