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

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

3天内不再提示

一文浅谈软件测试

上海控安 来源:上海控安 作者:上海控安 2023-01-30 17:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

版块 |鉴源论坛 · 观模

01软件测试的“起源”和发展

从狭义的角度说,软件测试是软件开发中的一个流程,即通过把程序实际运行起来并试图找出其中可能存在的错误。软件错误一般被大家通俗地称为“bug”。事实上,“bug”这个词最早起源于Grace Hopper(她是美国海军准将、计算机科学家,也是世界上最早的一批程序员之一)的一个真实故事。1947年9月9日,Grace和同事们在检查哈佛二号电脑(Harvard Mark II)总是出错的原因,大家仔细检查程序仍找不出错误,最后才发现原来是一只飞蛾意外飞入电脑内部的继电器而造成短路,他们把这只飞蛾移除后便成功让电脑正常运作[1](下图就是当时事故的记录和那只飞蛾)。从此以后,“bug”一词就被拿来指称软件错误,“debug”一词被拿来指称调试查找软件错误。

poYBAGPXh36AEkUPAAO-oi33GI0475.png

图1事故记录

后来,随着人们对软件错误的认识逐步加深,软件测试也经历了多个阶段的发展。最初Grace所在的年代,人们只是为了找出软件错误的原因(Debugging Period);后来1957年开始,人们强调需要设计软件测试集来验证/确保软件符合设计时提出的需求规范和软件功能(Demonstration Period);从1979年开始,人们开始主动地去寻找能触发软件错误的测试集(Destruction Period);再后来,软件测试成为了保障软件质量的重要手段,成为软件开发流程中一个必不可少的阶段[2]。比如,下图是经典的软件开发生命周期模型(SDLC)之一的瀑布模型(Waterfall Method),软件测试是其中的重要一环。

pYYBAGPXh6SALvuMAABA7zL-9JM748.png

图2瀑布模型

值得注意的是,在经典的软件开发生命周期模型中,如上图的瀑布模型中,软件测试是处于比较“靠右”的阶段。现如今,软件测试越来越强调“左移”测试(Shift-Left Testing,最早由Larry Smith在2001年提出[3]),其主要目的是为了让软件测试尽早地介入到软件需求分析、设计等阶段,能尽早地在这些阶段就能发现软件缺陷(而不是在软件实现结束后才介入测试),以期望进一步降低软件错误的修复成本。下图(引用于[4])形象地给出了这种变化趋势(下方左边的图给出了传统开发生命周期模型中,软件测试所在的位置和比重比较靠右;下方右边的图逐步演化为把测试阶段左移,让软件测试阶段更早地接入到软件开发的早期阶段,如需求、设计和开发)。

poYBAGPXh8SAV8PRAAChCkSciWE747.png

图3软件测试变化趋势

02软件测试能做什么?不能做什么?

软件测试是业界使用最普遍的质量保障手段。因为,软件测试在适应性和可扩展性方面比较强,在特定的领域场景下,如果软件测试方法和技术设计得当,能够有效地找到潜在的软件错误。但是,我们也需要注意,它也有其局限性,即软件测试没法保证找到被测对象程序中所有的软件错误(“Testing shows the presence, not the absence of bugs.” By Edsger W. Dijkstra)。与之相对应的,软件形式化验证技术能够严格地证明某个软件程序没有软件错误的存在(当然,这句话也是在一些特定的假设下才成立)。

03找到软件测试错误需要满足什么条件?关键要素在哪里?

据统计,软件测试占所有软件开发时间 40~50%,占所有研发费用 50%以上。软件测试作为一种有效的软件质量保障手段,其主要缺点在于测试成本很高(主要原因在于,一方面很多情况下测试过程离不开手工参与;在另外一方面,测试讲究“大力出奇迹”,因为需要依靠大量的测试执行去碰运气)。因此,如何实现高效、自动化的软件测试技术成为了业界和学界普遍关心的问题。然而,无论软件测试应用场景是什么,实现软件测试的关键要素有两个:(1)测试输入;(2)测试预言(Test Oracle)。下面以一个具体的代码片段例子(该代码片段选自于[5])来解释下。

poYBAGPXiByAR3_9AABHxWXZDNs833.png

图4 代码片段

上面这个程序是为了统计一个数组arr中元素0的个数。仔细看就会发现,这里隐藏着一个软件错误:for循环中的迭代起始条件(int i=1)是错误的,应该是(int i=0)。这就是一个具体的软件错误(英文中称为Software Fault)。

针对这样一段软件代码,一个可能的测试用例(Test Case)可以是:{arr=[2,7,0],expected_output=1}(这里arr=[2,7,0]称为测试输入,expected_output=1称为预期输出或测试预言)。软件测试中,判断一个测试输入是否找到了一个软件错误,最简单的办法就是判断测试输入在执行后的实际输出是否符合预期输出。显然,这个测试用例是无法找到该软件错误的,因为实际输出就是等于1,与预期输出是一样的。相反,一个能找到该错误的测试用例可以是:{arr=[0,2,7],expected_output=1}。因为这个测试用例的执行后的实际输出是0,与预期输出是不相等的。

这里,我们可以理解下为什么后一个测试用例能找到这个软件错误,而前一个测试用例却不能找到错误。因为软件测试找到一个软件错误必须满足的四个条件:

(1)Reachability:测试输入受限必须到达Software Fault所在的代码位置(如,这里的int i=1);

(2)Infection:这个测试输入必须使得软件程序的状态出错(如,这里i的值在第一次循环迭代的时候被错误地赋值为了1);

(3)Propagation:这个错误的程序状态必须导致程序的最后输出结果错误,或者最终的程序状态错误(如,这里Count这个返回值为0,其实是错误的);

(4)Reveal:测试预言必须能否观察到程序的最后输出或者最终的程序状态是错误的(如,这里通过对比Count的值和预期输出值1是能判定程序出错了)。

根据上面的这四个条件,我们很容易发现,前一个测试用例只满足了(1)和(2),没有满足(3)和(4);而后一个测试用例满足了上述四个条件。因此,通过上面一个例子,可以看到,为了实现高效的软件测试,最需要解决的是生成有效的测试输入、以及写出(甚至是自动生成)有效的测试预言。这也构成了设计开发自动化软件测试方法和技术的主要挑战。

参考资料:

[1] Grace Hopper - Wikipedia. https://en.wikipedia.org/wiki/Grace_Hopper.

[2] History of software testing. https://davidmoremad.medium.com/history-of-software-testing-cfa461c4ae0a.

[3] Shift-Left Testing By Larry Smith. https://www.drdobbs.com/shift-left-testing/184404768.

[4] Shift Left Testing: What, Why & How To Shift Left. https://www.bmc.com/blogs/what-is-shift-left-shift-left-testing-explained.

[5] "Introduction to Software Testing", Paul Ammann and Jeff Offutt.


审核编辑黄宇

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

    关注

    8

    文章

    6025

    浏览量

    130695
  • 软件
    +关注

    关注

    69

    文章

    5296

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入软件单元测试的全面研究与实践

    引言 嵌入软件单元测试是确保嵌入式系统质量和可靠性的关键环节。嵌入式系统广泛应用于汽车电子、工业控制、医疗设备等关键领域,其软件直接操控硬件,任何微小的错误都可能导致严重后果。单元测试
    的头像 发表于 12-01 14:31 150次阅读

    NVMe高速传输之摆脱XDMA设计46:选择测试环境软件平台

    。 为方便测试激励控制和测试过程分析, 使用与 Vivado2019.1软件版本配套的SDK开发套件进行软件测试平台的搭建。 执行主要功
    发表于 11-17 07:57

    分享个用LabVIEW开发的声学测试软件

    分享个声学测试软件,采用声卡作硬件采集设备。纯LabVIEW开发,内置频响/失真等曲线分析算法、中科蓝讯ANC混合降噪、序号输入、数据显示、图形显示、信息提示等基本步骤都有, PPL架构支持自定义
    发表于 10-22 13:38

    复杂电磁环境构建与测试软件系统解析(精简版)

    复杂电磁环境构建与测试软件系统解析(精简版)
    的头像 发表于 09-15 21:05 443次阅读
    复杂电磁环境构建与<b class='flag-5'>测试</b><b class='flag-5'>软件</b>系统解析(精简版)

    边聊安全 | 软件单元测试的设计方法

    上海磐时PANSHI“磐时,做汽车企业的安全智库”软件单元测试的设计方法写在前面:软件单元测试的设计是个系统化的过程,旨在验证代码的最小可
    的头像 发表于 09-05 16:18 4224次阅读
    边聊安全 | <b class='flag-5'>软件</b>单元<b class='flag-5'>测试</b>的设计方法

    汽车软件安全测试中的痛点与Bugspot解决方案

    上海磐时PANSHI“磐时,做汽车企业的安全智库”汽车软件安全测试中的痛点与Bugspot解决方案日前在汽车行业,软件正在重新定义驾驶体验。从自动驾驶到智能座舱,软件的复杂性和重要性日
    的头像 发表于 09-05 16:17 426次阅读
    汽车<b class='flag-5'>软件</b>安全<b class='flag-5'>测试</b>中的痛点与Bugspot解决方案

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

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

    国产电源模块测试软件功能应用全面解析

    电源模块作为电子设备的核心器件,其性能的优劣关系着整个设备的质量。为了确保电源产品能够满足不断提升的技术要求,稳定、高效的电源测试系统成为了电源行业的关键需求。本文将对纳米软件电源模块测试系统从功能
    的头像 发表于 08-01 11:51 697次阅读
    国产电源模块<b class='flag-5'>测试</b><b class='flag-5'>软件</b>功能应用全面解析

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

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

    电磁兼容与信息安全测试系统平台软件

    电磁兼容与信息安全测试系统平台软件
    的头像 发表于 05-06 14:50 521次阅读
    电磁兼容与信息安全<b class='flag-5'>测试</b>系统平台<b class='flag-5'>软件</b>

    复杂电磁环境构建与测试软件系统

    复杂电磁环境构建与测试软件系统
    的头像 发表于 04-29 20:47 473次阅读
    复杂电磁环境构建与<b class='flag-5'>测试</b><b class='flag-5'>软件</b>系统

    电磁兼容与信息安全测试系统软件

    电磁兼容与信息安全测试系统软件
    的头像 发表于 04-28 22:58 514次阅读
    电磁兼容与信息安全<b class='flag-5'>测试</b>系统<b class='flag-5'>软件</b>

    浅谈驱动板的软件测试

    综上所述,驱动板的软件测试是确保驱动板产品质量和可靠性的重要环节。通过对驱动板进行全面、系统的软件测试,可以发现并修复潜在的问题和缺陷,提高驱动板的性能、兼容性和安全性,从而满足不同应
    的头像 发表于 03-24 16:12 774次阅读

    带你了解什么是灯具检测测试

    在灯具制造业中,技术检验是确保产品符合安全和质量标准的基石。本文将深入探讨灯具产品在技术检验中需遵循的各项测试要求和行业标准,以保障其在市场上的可靠性和竞争力。两种规格的高压测试1.UL/cUL普通
    的头像 发表于 01-15 15:34 2041次阅读
    带你<b class='flag-5'>一</b><b class='flag-5'>文</b>了解什么是灯具检测<b class='flag-5'>测试</b>

    润和软件荣获IDC测试自动化领域唯推荐厂商

    近日,国际知名市场研究机构IDC发布《中国生成式人工智能技术与品牌推荐》报告,推荐了人工智能领域中表现突出的厂商。江苏润和软件股份有限公司(简称“润和软件”)凭借在AI技术和金融测试领域的深厚积累,成为
    的头像 发表于 12-24 10:47 858次阅读