软件测试技术分析与探讨
2023-12-17
来源:步旅网
软件测试技术分析与探讨 司晓梅 (武汉理工大学华夏学院信息工程系湖北武汉430223) 【摘要】:本文从软件测试的介入时机入手,阐述了软件测试的基本方法,详细探讨了黑盒测试和 白盒测试的基本技术,并对软件测试技术的未来前景进行了展望。 【关键字】:软件测试;黑盒测试;白盒测试 0引言 随着我国软件产业的高速发展,软件测试的重要 性己被软件企业关注,近91%的国内软件企业已组建 测试队伍,但现阶段软件测试的发展存在严重问题一 人才紧缺。在大多数软件企业中,测试人员的数量不 足开发人员数量的五分之一,平均比在1:8左右,远远 落后于国外先进水平。造成这种稀缺局面的主要原因 是我国相关人才的培养尚未形成规模,测试人才数量 无法满足企业的实际需求。本文试图从软件测试的介 入时机入手,对软件测试的相关知识进行分析和讨 论。 1软件测试的介入时机 目前,国内的软件开发普遍存在“重开发,轻测 试”的现象。而在实际工作中,一目 经过测试后发现与 用户需求不符合,将会导致大范围的返工和不可预估 的项目延伸。原因是软件质量不仅取决于程序本身, 它和编码以前所完成的需求分析以及软件设计工作 密切相关。很显然,表现在程序中的错误,并不一定是 编码引起的,很可能是详细设计、概要设计阶段,甚至 是需求分析阶段的问题引起的。无数的实践经验也表 明,需求分析阶段带来的缺陷占总缺陷的百分比为 54%,设计阶段带来的缺陷占25%,编码阶段带来的 缺陷仪占15%。如果早期开发中出现的错误不能及时 发现和解决,将带到设计、编码、测试等各阶段,影响 会逐步扩大,软件缺陷的修复费用将会指数级增长。 因此我们可以得出结论,软件测试一定要尽早地开始 介入,不断地进行测试,才能尽可能地保证软件的成 本及进度在计划范围内。 2软件测试基本技术 软件测试技术可以归结为两大类:白盒测试和黑 盒测试。其中,白盒测试又可分为静态测试和动态测 试:静态测试主要包括代码检查法、静态结构分析法 ・104・ 福建电脑l 2叭4年第1期 等;动态测试技术主要包括逻辑覆盖、程序插桩、基本 路径测试等。黑盒测试一般可分为功能测试和非功能 测试:功能测试主要包括等价类划分、边界值分析、因 果图法、错误推测、功能图法等,主要用于软件确认测 试;非功能测试主要包括使用性能测试、性能测试、强 度测试、兼容性测试、配置测试、安全测试等。I1I 2.1白盒测试 白盒测试是把测试对象看作一个透明的盒子。测 试人员可以很清晰地看到盒子的内部结构。利用白盒 测试法进行动态测试时,需要测试软件产品的内部结 构和处理过程。测试人员利用程序的内部逻辑结构和 相关信息,对程序的内部结构和路径进行测试,检验 其是否达到了预期的设计要求。 2.1.1静态测试 静态测试是一种不通过执行程序而进行测试的 技术,其关键功能是检查软件的表示和描述是否一 致,有没有冲突。它瞄准的是纠正软件系统在描述、表 示和规格上的错误。 源代码的语法错误,一般可以由我们的集成开发 环境来做;非语法方面的错误,只有通过人工检测来 判断。人工检测的方法有代码检查法、静态结构分析 法等。 代码检查法主要是通过桌面检查,代码审查和走 查方式对以下内容进行检查:变量检查、命名和类型 审查、代码逻辑审查、代码的可读性检查和代码结构 检查等。 静态结构分析法是指以图形的方式表现程序的 内部结构,如函数调用关系图、函数内部控制流图。通 过分析这些图表,包括控制流分析、数据流分析、接口 分析、表达式分析等,使其便于阅读与理解,然后可以 通过分析这些图表,检查软件有没有存在缺陷或错 误。 雯i 复合条件)。控制流线由带箭头的弧或线表示。它代表 第二步:计算流图G的环路复杂性vfG),可用如 a.给定控制流图G的环形复杂度一VfG),定义为 V(G、=E—N+2 2.1.2动态测试 或真实的环境中执行之前、之中和之后,对软件系统 统在检查状态下是正确还是不正确。常用的方法有逻 辑覆盖、程序插桩、基本路径测试法等。[31 动态测试需要软件的执行,当软件系统在模拟的 程序中的控制流。 行为的分析是动态测试的主要特点。它显示了一个系 下三种方法之一来计算环形复杂度。 (1)逻辑覆盖是以程序内部的逻辑结构为基础的 覆盖,这一方法要求测试人员对程序的逻辑结构有清 其中,E是控制流图中边的数量,N是控制流图中 b.给定控制流图G的环形复杂度一V(G),也可定 测试技术,是通过对程序逻辑结构的遍历实现程序的 的节点数量。楚的了解。包括语句覆盖、判定覆盖、条件覆盖、判定/ 条件覆盖、条件组合覆盖和路径覆盖。 语句覆盖:设计足够的测试用例,使得程序中的 每个语句至少执行一次。 判定覆盖:设计足够的测试用例,使得在语句覆 盖的基础上,程序中每个判定的取“真”分支和取“假” 分支至少都执行一次。 条个覆盖:设计足够的测试用例,在语句覆盖的 基础上使得程序判定中的每个条件能获得各种可能 的结果。 判定/条件覆盖:设计足够的测试用例,使得判定 中的每个条件都取到各种可能的值,而且每个判定表 达式也都取到各种可能的结果。 条件组合覆盖:设计足够的测试用例,使得每个 判定中的条件的各种可能组合都至少出现一次。 路径覆盖:设计足够的测试用例,使得每条可能 的路径都至少执行一次。 (2)程序插桩方法是借助往被测程序中插入操 作,来实现测试目的的方法,即向源程序中添加一些 语句,实现对程序语句的执行、变量的变化等情况进 行检查。 (3)基本路径测试法是在程序控制流图的基础 上,通过分析控制构造的环路复杂性,导出基本可执 行路径集合,从而设计测试用例的方法。设计出的测 试用例要保证在测试中程序的每一条可执行语句至 少执行一次。 基本路径测试法的步骤如下: 第一步:导出程序流程图的拓扑结构一流图(控制 流程图1 控制流图是对程序流程图进行简化后得到的,它 更加突出的表示了程序控制流的结构。控制流图中包 括两种图形符号:结点和控制流线。 结点由带标号的圆圈表示,可代表一个或多个语 句、一个处理框序列和一个条件判定框(假设不包含 义为V(G')=P+1 其中,P是控制流图G中判定节点的数量。 c.控制流图中区域的数量对应于环形复杂度。 当在控制流图中计算区域的数目时,控制流图外 的区域也应记为一个区域。 第三步:确定只包含独立路径的基本路径集 独立路径是指程序中至少引入了一个新的处理 语句集合或一个新条件的程序通路。采用流图的术 语,即独立路径必须至少包含一条在本次定义路径之 前不曾用过的边。 我们计算环路复杂性的目的主要是为了得出基 本路径集的条数。比如:环路复杂性是5,那么程序基 本集的独立路径就有5条。 第四步:设计测试用例 选择适当的数据,保证每一条路径可以被测试 到。 2.2黑盒测试 黑盒测试也称数据驱动测试,在测试时,把程序 看作一个不能打开的黑盒子,在完全不考虑程序内部 结构和内部特性的情况下,测试者在程序接口进行测 试。 在黑盒测试过程中,只是通过输入数据、进行操 作、观察输出结果,来检查软件系统是否按照需求规 格说明书的规定正常使用,软件是否能适当地接收输 入数据而产生正确的输出信息,并保持外部信息的完 整性。 2.2.1功能测试 功能测试的方法主要有:等价类划分、边界值分 析、因果图法、错误推测法、功能图法等。[41 (1)等价类划分 等价类划分法是把所有可能的输入数据,即程序 的输入域划分为若干部分(子集),然后从每一个子集 中选取少数具有代表性的数据作为测试用例。在该子 集合中,各个输入数据对于揭露程序中的错误都是等 2014,I ̄1期I福建电脑 ・105・ { l l碜 隗 《 8 曙 |孽 鞋 效的,它们具有等价特性,即每一类的代表性数据在 形式如表1所示。, 测试中的作用都等价于这一类中的其它数据。因此, 测试数据范围,大大减少了测试的工作量。 采用等价类划分法设计测试用例通常分两步进 行。 因果图法的定义:是一种利用图解法分析输入的 等价类划分法在很大程度上首先缩小了测试人员的 各种组合情况,从而设计测试用例的方法,它适合于 检查程序输入条件的各种组合情况。 采用因果图法设计测试用例的步骤如下。 第一步:根据程序规格说明书描述,分析并确定 出因果图。 第一一步:确定等价类(包括有效等价类和无效等 因(输入条件)和果(输出结果或程序状态的改变),画 价类),列出等价类表。 第二步:确定测试用例。具体过程如下: 第二步:将得到的因果图转换为判定表。 第三步:为判定表中每一列所表示的情况设计一 首先为等价类表中的每一个等价类分别规定一 个唯一的编号;然后设计一个新的测试用例,使它能 够尽量覆盖尚未覆盖的有效等价类。重复这个步骤, 直到所有的有效等价类均被测试用例所覆盖;设计一 个新的测试用例,使它仅覆盖一个尚未覆盖的无效等 价类。重复这一步骤,直到所有的无效等价类均被测 试用例所覆盖。 (2)边界值分析 无数的测试实践表明,大量的故障往往发生在输 入定义域或输出值域的边界上,而不是在其内部。因 此,针对各种边界情况设计测试用例,通常会取得很 好的测试效果。 那么,如何用边界值分析法设计测试用例呢?首 先,确定边界情况;然后,选取正好等于、刚刚大于或 刚刚小于边界的值作为测试数据。但当边界情况很复 杂的时候,要找出适当的测试用例还需针对问题的输 入域、输出域边界,耐心细致地逐个考虑。 (3)因果图法 等价类划分法和边界值分析方法都是着重考虑 输入条件,但没有考虑输入条件的各种组合、输入条 件之间的相互制约关系。这样虽然各种输入条件可能 出错的情况已经测试到了,但多个输入条件组合起来 可能出错的情况却被忽视了。 如果在测试时必须考虑输入条件的各种组合,则 可能的组合数目将是天文数字,因此必须考虑采用一 种适合于描述多种条件的组合、相应产生多个动作的 形式来进行测试用例的设计,这就需要利用因果图 (逻辑模型)。 表1判定表的基本格式 条件桩 条件项 动作桩 动作项 因果图法是基于这样的一种思想:一些程序的功 能可以用判定表(或称决策表)的形式来表示,并根据 输入条件的组合情况规定相应的操作。判定表的基本 ・106・ 福建电脑l 2014年第1期 个测试用例。 (4)错误推测法 依靠经验和直觉猜测程序中可能存在的各种错 误,从而有针对性地编写检查这些故障的测试用例。 该方法一般会让那些很有测试经验的人来做,可以从 类似系统的出错点、前期测试阶段的结果、典型的产 生错误的情况以及有关软件的开发方法和实现技术 等方面入手去设计测试用例。 在实际测试中,往往是综合使用各种方法才能有 效地提高测试效率和测试覆盖率。 2.2.2非功能测试 非功能测试主要有:性能测试、兼容性测试、配置 测试、安全测试等。Ill (1)性能测试通常是验证软件的性能在正常环境 和系统条件下重复使用时是否还能满足性能指标,软 件的性能测试是系统测试中难度较大的测试。 软件系统的性能测试包括:系统反应时间、用户 反应时间、软件界面反应时间、中央处理器的利用率、 检查系统记忆容量在运行程序时有没有流失现象(或 称内存泄露)等。 (2)兼容性测试的目的就是检验被测应用对其他 应用或者系统的兼容性,比如在对一个共享资源(数 据、数据文件或者内存)进行操作时,检测两个或多个 系统需求能否正常工作以及相互交互使用。 在做兼容性测试时,主要关注当前系统可能运行 在哪些不同的操作系统环境下,可能与哪些数据库进 行数据交换,可能需要哪些软件协同工作,它们可能 的版本有哪些,是否需要在综合条件下做测试? (3)配置测试主要注意三个方面:一是软件安装 与卸装过程中系统配置的变化;(修改系统配置,使其 支持该软件的启动和运行);二是软件完成安装后,人 为改变配置;(对软件的内部配置数据进行修改);三 是硬件的不同组合是否与软件兼容。(下转第113页) 。 , , 软计算方法是包含了遗传算法、神经网络和模糊 三、要建立全面的入侵检测系统评价体系,可以从系 算法等技术的检测方法,多种智能技术的应用将会提 统资源占用情况、检测范围、自身的可靠性等方面建 高检测的效率和准确性。神经网络结构是决定神经网 立评价体系,评价指标有能否保证自身的安全、报警 络的非线性映射的关键所在,近几年来还有人运用遗 准确率、运行与维护系统的开销、可支持的网络类型、 传算法、遗传免疫和遗传编程等技术对网络系统进行 入侵特征数、负载能力、IP碎片重建能力、TCP流量重 入侵检测,对神经网络的不确定因素还可以运用模糊 建能力等,从而设计通用的入侵检测与评估方法平 技术进行确定,模糊技术主要用于确定神经网络的权 台,实现对多种入侵检测系统的检测。 重,加快神经网络的训练时间,提高神经网络的容错 力和外拓能力。 5总结 总之,随着网络技术的发展,对网络的安全性要 4入侵检测技术的发展方向 随着网络技术的发展,网络入侵技术也在发展, 求也越来越高,为了提高网络系统安全性,能为用户 提供一个安全、放心使用的网络环境,就必须要发展 近些年来,无论从入侵方法还是规模都发生了很大的 网络入侵检测技术,入侵检测技术已经成为网络系统 变化,主要体现在入侵与攻击的复杂化和综合化、入 安全策略中的核心技术,它作为一种主动防御技术, 侵主体对象的间接化、入侵和攻击技术的分布化等方 能提供对网络的内部攻击、外部攻击和非法操作活动 面,为了适应网络技术的发展,入侵检测技术与水平 的保护,入侵检测技术将会在网络系统的安全性方面 也要向前发展与提高,今后的入侵检测技术可以朝向 起到很关键的最用。 以下几个方面发展:其一、传统的入侵检测与分布式 参考文献: 杨智君,田地,马骏骁,等.入侵检测技术研究综述[J].计算机 入侵检测相结合,传统的入侵检测一般局限于单个主 [1]2006,27(12):2119—2123. 机,对异构系统和大规模的网络检测则显得不足,另 工程与设计,一J].电脑知识与技术, 方面,不同的入侵检测系统之间不能很好地进行协 [2]高苗粉.入侵检测方法的研究现状[2013。09(33):7402~7404. 同工作,为了解决这些问题,就需要将分布式入侵检 测技术与传统的通用技术相结合;其二、采用智能化 的入侵检测技术,智能化的入侵检测技术就是使用智 能化的方法与手段对网络进行入侵检测,可以采用类 [3]徐兴元,傅和平,熊中朝基于数据挖掘的入侵检测技术研究 [1].微计算机信息,2007,23(3):74-75. [4]陈莹莹.网络信息管理中入侵检测技术的研究[I].信息通 .信.2013 ̄):99. 似于神经网络、模糊技术、遗传算法等原理的方法对入 [5]唐正军,李建华.入侵检测技术[M].北京:清华大学出版社, 侵特征进行辨识,入侵检测智能化后能使入侵检测系 2008 统的防范能力会不断增强,具有广泛的应用前景 ;其 石 石 石 、_ 石 'l、 石 ;-、 \! 石 石 -l、 石 l、 石\! _'、 .、 石\! 努 \! 石 (上接第106页) (内存、硬盘、CPU、网卡等添加或修改带来的影响) 个新兴的产业。重点体现在以下几个方面:软件测试 (4)安全性测试检验在系统中已经存在的系统安 理论和技术将更加完善,测试效率将逐渐提高,更实 全性、保密性措施是否发挥作用,有无漏洞,以检查系 用的软件测试工具将大量出现,测试工程师将得到充 统对非法侵入的防范能力。由于攻击者没有闯入的标 分的尊重。随着软件规模的逐步扩大,功能将越来越 准方法,因而也没有实施安全性测试的标准方法。在 复杂,如何进行充分而有效的测试仍然是软件工程领 测试过程中,测试人员扮演非法入侵者,逐一验证所 域需要积极探索的问题。 设立对策的有效性。系统安全设计的准则是:使非法 侵入的代价超过被保护信息的价值。 参考文献: [1]佟伟光.软件测试.北京:人民邮电出版社,2008.5。 3软件测试的发展前景 全程软件测试.北京:电子工业出版社,2014.1。 中国的软件测试技术起步较晚,与国际先进水平 [2]朱少民.软件测试.北京:清华大学出版社,2008.4。 相比差距较大,仍处于起步阶段。但是,随着我国软件 [3]曹薇.产业的蓬勃发展以及对软件质量的重视,软件测试也 越来越被软件企业所重视,软件测试正在逐步成为一 [4]邓武.软件测试技术与实践.北京:清华大学出版社,2012.1。 2014年第1期f福建电脑 ‘1 13‘