0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于软件性质的自动化测试技术

上海控安 来源:上海控安 作者:上海控安 2023-10-09 16:29 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者 |熊一衡华东师范大学软件工程学院博士

苏亭 华东师范大学软件工程学院教授

版块 |鉴源论坛 · 观模

社群 |添加微信号TICPShanghai”加入“上海控安51fusa安全社区”

在软件开发的生命周期中,测试是至关重要的一环。为了确保软件产品的质量,开发团队需要进行全面的测试,以发现和修复软件中潜在的缺陷和问题。传统的人工测试虽然有效,但却耗时耗力,且成本较高。为了提高测试效率和准确性,自动化测试已经成为一个重要的研究领域。

wKgZomUjuSWAGoorAAKUoKYDP1Y516.png

图1 自动化测试技术

图1介绍了现有的几种自动化测试方法 [1]。X轴表示Feature compliance,即测试是否覆盖测试人员想要测试的功能,而Y轴表示 Input scope covered, 表示测试输入的覆盖程度。可以看出,在图的右上角缺了一块,即同时满足high feature compliance和full input scope covered 的测试技术。这个技术就是接下来要介绍的基于性质的测试技术(property-based testing)。

01

什么是基于软件性质的自动化测试技术

基于软件性质的测试(property-based testing)是一种很受欢迎的自动化测试技术,其原理是测试人员编写适用于待测软件的真实逻辑语句(即性质),然后使用自动化测试工具生成大量的测试输入,以充分测试待测软件,并验证测试人员编写的性质是否得以满足 [2]。如果性质被违反,则表明软件可能存在错误(bug)。例如,下图是一个待测程序`my_sort()`,其功能是对输入的序列进行排序,并返回排序后的序列。

wKgaomUjuU-AU6GoAAAUwtiQVa0937.png

图2 待测程序

为了测试`my_sort()`, 通常测试人员会编写单元测试用例。编写传统的单元测试需要人工指定测试输入和预期输出。如下图所示,有6个测试用例来测试待测程序。然而,这种方法的缺点在于它非常耗人力,因为对于每一个测试输入,我们都需要手动去指定相应的测试输出。此外,测试的输入有限,依赖于测试人员的知识,因此难以充分测试待测程序。

wKgaomUjuVyAbrcGAAClm10PBBw400.png

图3 单元测试用例

然而,如果使用property-based testing,我们仅仅编写一个测试方法就可以覆盖所有的测试输入。一开始,我们根据待测程序的理解,给出待测程序应该有的性质(property)。比如,my_sort()应该满足的一个性质为:返回list中的每一个元素都不应该大于它们之后的一个元素。根据这个性质,我们就可以编写出一个测试用例。注:我们以面向python语言的property-based testing 框架hypothesis为例来编写。

wKgZomUjuWyAHLxWAABDFaKNQWA376.png

图4 Property-based testing测试用例

如上图所示,代码的第一行 `@given(st.lists(st.integers())` 是一个装饰器,表示一旦测试开始,Hypothesis 将生成大量随机的list作为`test_prop_ordered()`函数的输入。每一个生成的list都将作为参数xs传递给`test_prop_ordered()`函数,并执行函数体,然后验证assert 语句是否为真。这样,我们就可以自动化生成足够多的list来验证待测程序是否满足我们设定的性质,而不用人为地去指定具体的测试输入和输出数据,大大提高了测试效率。

02

如何进行基于软件性质的自动化测试

上节介绍了Property-based testing的概念,这节介绍如何进行基于软件性质的自动化测试。我们用一个通用的模板来解释如何进行property-based testing:

wKgaomUjuYWAMRkUAABHdxmEhQI295.png

图5 property-based testing模板

第一步:确定你想要测试的程序性质。如图5中第三行所示,测试人员通过对待测程序的理解来确定想要测试的程序性质。例如,在图4中,该测试用例旨在验证以下程序性质:排好序的list中每一个元素都不应该大于其后的元素。如果在测试过程中违反了这个性质,那么表明待测程序可能出现了一个Bug。

第二步:确定测试输入类型及范围。在完成第一步后,测试人员应该确定将要传递给待测程序的测试输入的类型和范围,如图5中第一,二行所示。例如,在图4中,由于待测程序的功能是对list中的元素的大小进行排序,那么测试输入应该是list。同时,由于排序涉及到元素的大小比较,因此列表中的元素应该是数字。在这里,我们选择了整数(integer)作为元素类型。

第三步:编写并运行测试用例。目前,针对不同的软件或者程序语言,开发人员已经开发出了多种基于性质的测试框架(Java: QuickTheories, Python: Hypothesis, C++: RapidCheck, Scala: ScalaCheck, JavaScipt: fast-check, Ruby: Rantly, Swift: Swiftcheck等等)[3-9]。一旦选择了适合的测试框架,我们就可以利用测试框架编写出相应的测试用例并且运行它们。

03

如何选择合适的软件性质

前两节介绍了property-based testing的概念以及如何进行property-basedtesting,我们可以看出property-based testing是一个非常高效的测试技术。然而,当测试人员真正开始编写测试用例的时候,他们经常会碰见一个问题:应该选择什么样的性质来进行测试?因此,在本节中,我们将介绍一下比较通用的性质 [10],希望可以启发到测试人员如何选择合适的软件性质。

性质1:对称性(Symmetry)。如下图所示。如果能够将某些值转换成其他值,然后再转换回来,那么它应该和原值保持一致。例如,序列化(Serialization)就是一个典型的例子。将文本转化成一个对象,然后将该对象转换回来,则文本应该保持不变。

wKgaomUjuZaAORzkAADeLKYA_ls667.png

图 6 对称性

性质2:交换性(Commutativity)。该性质指的是改变执行操作的顺序,但是最终结果不会变化。例如,如下图所示,将一个list头部加入一个元素,再将其尾部加入一个元素,如果将这两个操作的顺序交换,最终得到的list应该是相同的。

wKgaomUjuaeAKCobAAAemNZEly4838.png

图 7 交换性

性质3:不变性(Invariants)。该性质指的是执行某些操作后,并不会改变测试对象的某些性质。例如,如下图所示,将一个数组排序后,该数组的长度应该保持不变。

wKgaomUjubaATzQ5AAAMb5ZJBrk629.png

图 8 不变性

性质4:幂等性(Idempotence)。该性质一般指多次执行某种操作和执行一次某种操作带来的效果应该是一样的。例如,如下图所示,对于一个列表,对其进行一次排序和多次排序,最终结果应该是相同的。

wKgZomUjucWABdMnAABFhQK62CU626.png

图 9 幂等性

性质5:推导性(induction)。该性质通常指的是,如果一个大的对象可以分成更小的对象,并且对于某些性质来说在这些小的对象上成立,那么可以证明这些性质在大的对象上也成立。例如,如下图所示。如果黑色集合中含有某个元素,那么红色、蓝色、绿色、黑色的大集合中也应该有某个元素。

wKgaomUjudOAUO06AAAL5CmtWoM932.png

图 10 推导性

04

总结

基于性质的测试在近些年已经成为了一个非常受欢迎的测试技术,并且开发者们已经开发出了多种基于性质的测试框架。这种技术有非常多的优点,例如,理论上它可以覆盖所有的可能的测试输入,更充分地测试用户关心的功能,以及降低测试成本。然而,由于其特性,也存在一些挑战。例如,由于其只关心想要测试的性质,那么就导致对于某个性质测试得很充分,对于其他性质就根本没有测试到。此外,测试人员需要足够了解待测软件,以抽象出应该保持的性质,这对测试人员的要求比较高。另外,开发一个高效的基于性质的测试框架对于开发人员来说也是一个大的挑战。开发人员需要思考如何使测试人员更轻松地编写性质,以及如何才能开发出更好的数据生成器等。最重要的是,基于性质的自动化测试技术并不意味着取代其他测试技术(例如,单元测试),而是可以与其他测试技术共存。测试人员应该根据测试的需求,选择合适的测试技术,使其更好地服务于软件测试。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 自动化测试
    +关注

    关注

    0

    文章

    272

    浏览量

    27842
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    通用自动化测试系统:FCT、ATE、ICT、PCBA功能测试

    在现代制造业中,自动化测试已经成为提高生产效率、降低错误率、提升产品质量的关键环节。尤其是在电子产品的测试过程中,FCT(功能测试)、ATE(自动测
    发表于 04-13 14:54

    电测行业中都有哪些射频器件自动化测试软件

    ",已成为射频产线和大规模研发验证的标配。本文系统梳理当前主流射频自动化测试软件方案,并重点解析新兴平台的技术价值。    一、射频测试
    的头像 发表于 03-31 17:44 1322次阅读
    电测行业中都有哪些射频器件<b class='flag-5'>自动化</b><b class='flag-5'>测试</b><b class='flag-5'>软件</b>?

    ATE测试是什么?电源企业为什么必须上自动化测试

    在电源行业快速发展的年代,产品质量、生产效率与成本控制成为企业竞争的关键。很多电源厂家都在关注ATE 测试,但不少人仍不清楚 ATE测试是什么,也不明白自动化测试对于电源生产的重要意义
    的头像 发表于 03-24 14:37 344次阅读
    ATE<b class='flag-5'>测试</b>是什么?电源企业为什么必须上<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>?

    自动化测试的「千里眼」:当RTSM远程控制遇上自动化测试效率直接拉满!

    自动化痛点】自动化测试的“黑箱困境”:你真的敢说“完全放心”? 凌晨2点,测试工程师小李盯着电脑屏幕上的自动化脚本进度条——第17步卡住了
    的头像 发表于 12-11 11:26 493次阅读
    <b class='flag-5'>自动化</b><b class='flag-5'>测试</b>的「千里眼」:当RTSM远程控制遇上<b class='flag-5'>自动化</b>,<b class='flag-5'>测试</b>效率直接拉满!

    CI/CT自动化测试解决方案

    北汇信息可以提供Jenkins、Gitlab Runner CI和自研平台等的CI/CT整体解决方案,通过CI/CT自动化测试执行、测试策略定制、测试任务
    的头像 发表于 11-12 16:01 1602次阅读
    CI/CT<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>解决方案

    测试小白3分钟上手,零代码自动化测试平台,15分钟搭建自动化测试方案

    还在为不懂代码、搭建测试方案耗时久而发愁?ATECLOUD 零代码自动化测试平台,专为自动化测试量身打造,小白3 分钟就能轻松上手,15 分
    的头像 发表于 09-22 17:52 1014次阅读
    <b class='flag-5'>测试</b>小白3分钟上手,零代码<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>平台,15分钟搭建<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>方案

    电源模块的短路保护如何通过自动化测试软件完成测试

    在当今电力电子领域,电源模块的可靠性至关重要,短路保护作为其关键特性,需通过精确的自动化测试软件进行验证。本文将整理如何借助自动化测试
    的头像 发表于 09-03 19:10 1011次阅读
    电源模块的短路保护如何通过<b class='flag-5'>自动化</b><b class='flag-5'>测试</b><b class='flag-5'>软件</b>完成<b class='flag-5'>测试</b>

    EasyGo TestSim:新能源电力系统自动化测试的利器

    现代电力系统对测试精度和效率的高要求。EasyGo TestSim 仿真自动化测试软件的出现,为这一难题提供了一个完美的解决方案。 什么是 EasyGo TestSim? EasyGo
    发表于 09-03 18:35

    新能源电力系统自动化测试利器——EasyGo TestSim

    时,仍需手动提取波形、计算关键参数并反复调试。为此,我们推出EasyGoTestSim仿真自动化测试软件,助力高效测试。一、EasyGoTestSim仿真
    的头像 发表于 09-03 17:05 1657次阅读
    新能源电力系统<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>利器——EasyGo TestSim

    除了LabVIEW还有哪些自动化测试软件

    NI 开发的 LabVIEW 软件在工业控制领域中一直占有举足轻重的地位,其市场占有率在一众平台中也是领先的,那么除了 LabVIEW 拿有哪些自动化测试软件?本文将介绍一些
    的头像 发表于 07-30 17:18 1241次阅读
    除了LabVIEW还有哪些<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>的<b class='flag-5'>软件</b>?

    自动化测试平台中TestCenter和ATECLOUD有哪些差异?

    TestCenter和ATECLOUD虽然都是自动化测试平台,但两者在试用领域、技术架构、功能特性等方面具有很大的差异性,两者的面向客户也有所不同。本文将简单分析两个平台的特点和差异
    的头像 发表于 07-25 09:54 874次阅读
    <b class='flag-5'>自动化</b><b class='flag-5'>测试</b>平台中TestCenter和ATECLOUD有哪些差异?

    自动化测试平台ATECLOUD推出AI算法功能

    作为纳米软件自主研发的自动化测试平台,ATECLOUD 始终致力于为用户提供高效优质的测试解决方案。面对5G、AI等前沿技术的迭代发展,平台
    的头像 发表于 07-22 16:10 1002次阅读
    <b class='flag-5'>自动化</b><b class='flag-5'>测试</b>平台ATECLOUD推出AI算法功能

    车机交互测试自动化实现路径与案例分析

    测试设备是车机交互测试自动化实现的核心支撑,通过合理选型、部署和应用北京沃华慧通测控技术有限公司汽车测试设备,结合科学的实现路径和丰富的案例
    的头像 发表于 07-10 09:24 1557次阅读
    车机交互<b class='flag-5'>测试</b><b class='flag-5'>自动化</b>实现路径与案例分析

    UTP系统通过ModBus协议对温度传感器的自动化测试介绍

    、4G/5G)、显示识别(设备屏幕、按钮、LED等)、设备操控、软件功能等各方面进行自动化测试,能够进行各种复杂时序的自动化测试。 接下来,
    的头像 发表于 06-07 15:12 978次阅读
    UTP系统通过ModBus协议对温度传感器的<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>介绍

    APP自动化测试框架

    APP自动化测试框架是一套结合工具链、设计模式和技术规范的集成解决方案。以下是基于主流技术实践的核心要点总结: 一、核心模块构成 环境管理‌ 支持物理机/虚拟机/容器
    的头像 发表于 05-07 07:35 824次阅读
    APP<b class='flag-5'>自动化</b><b class='flag-5'>测试</b>框架