软件测试论文范文

2022-05-13

今天小编给大家找来了《软件测试论文范文(精选3篇)》的相关内容,希望能给你带来帮助!摘要:为了培养创新能力强、适应社会经济发展需要的软件测试人才,本文结合常熟理工学院《软件测试与质量保证》课程建设经验,以中小企业对软件测试人才的需求为导向开展实验教学改革,分别从实验教学改革基本思路、教学内容组织等方面探讨应用技术大学建设背景下软件测试课程实验教学改革措施。

第一篇:软件测试论文范文

应用度量式测试提高软件测试效率

摘要:文章介绍了软件测试领域的发展现状,并将度量式测试应用在实际的医疗曝光系统中,验证了度量式测试对于发现系统隐患、提供系统可靠性及稳定性等的重要作用,并强调了在系统测试过程中需将检查式测试和度量式测试合理结合,提高系统测试效率。

关键词:检查式测试;度量式测试;软件性能;软件可靠性;测试效率

1简介

随着全球信息化趋势的不断加强,各国的软件产业都在以前所未有的矫健步伐不断向前迈进。而信息化为全球经济发展打开了一个崭新的市场,各软件公司越来越重视软件产品的最终交付质量以赢得更多的市场占有率。在软件开发的生命周期中,测试作为保证软件过程和产品质量的重要环节必不可少。

而今,虽然世界经济与信息已经全球化,但中国与欧美等发达国家的测试水平仍存在一定的差距。在国内的测试活动中,软件测试一般由专门的测试小组进行软件的单元测试、集成测试、系统测试及验收测试等。所有这些相关测试都将根据预先设定的测试流程及测试用例按步进行,不仅如此,测试用例一般都将给出预期测试结果,作为最终测试通过与否的判定标准。因此,软件测试曾被形容为“基于大量测试用例的程序行为的动态验证”。

2检查式测试与度量式测试

目前,在特定的软件项目中,测试人员将根据不同的系统特征及测试目标,选择不同的系统测试方法,如黑盒测试、白盒测试、单元测试、集成测试、功能测试、性能测试、回归测试、压力测试、负载测试、可靠性测试、安全性测试及兼容性测试等。对于上述的多种测试方法,本文将其总体的划分为两类测试情况:检查式测试和度量式测试。

2.1检查式测试

通常一个测试用例包含如下几个基本要素:需求追踪、测试目的、测试准备、测试数据等。在这种类型的测试中,测试用例一般直奔一个明确狭隘的目的——验证系统的某一项功能是否正确实现。因为这种测试用例对正确的结果有设定或者有一定的预知,因此测试是明确的,而且可控性也很高。测试结果的输出表现为通过或者不通过。在此把此类的测试称为检查式测试,它属于一种先验性的测试,通常所做的单元测试、集成测试、功能测试等都属于此类测试。

2.2度量式测试

度量式测试没有太多的先验性,结果一般基于某种量化的数字而产生。一般是为了针对软件某一特定功能周边的多项指标进行的量化度量。这种形式的测试往往出现在系统级测试和应用阶段的数据收集。度量式测试往往不会直接给出通过或者不通过的结果,而是需要通过进一步的分析和决策。然而这类“模糊”的量化数据比检查式测试更具有稳定性,对把握软件的总体质量或某一特定功能的具体细节更具有价值。这类测试多发生在系统测试、性能测试、可靠性测试等测试中。

2.3优缺点比较

在我们日常的测试活动中,检查式测试通常是测试活动的主要构成,其优点显而易见:直接、高效、易管理;缺点则是:随机性强、单薄、易陷入惯性思维等。而度量式测试是以定量的数据作为基础,经过分析,测评式的检验软件质量。其优点是:稳定、可靠、测试方式丰富灵活等;缺点是:耗费资源、测试设计复杂、对软件质量提高具有间接性等。参见表1:

表1检查式测试与度量式测试优缺点比较

测试类别 优点 缺点

检查式测试 直接、高效、易管理 随机性强、单薄、易陷入惯性思维

度量式测试 稳定、可靠、测试方式丰富灵活 耗费资源、测试设计复杂、对软件质量提高具有间接性

3重视度量式测试

在长期的测试活动中,我们发现,虽然检查式测试可以发现大部分的系统缺陷,但是在软件某一部分或者其整体已相对稳定和完备的阶段,我们需要更多的针对实际情况采取度量式测试以发现系统更多的潜藏隐患,提高系统的可靠性和稳定性。

虽然“尽可能多的测试”一直为业内所认同,然而同其他的软件相关活动一样,进度和成本控制往往是软件测试中最直观的压力。检查式的测试作为测试的主体方式,往往会受到测试人员的青睐,其测试力度也不言而喻;度量式测试则只是在最后阶段被简单的运行几次,甚至只是用来验证一下之前的检查式测试结果而已,但用户长期的实际使用会让很多潜藏的问题冒出来,也会使一些小问题变成严重问题。因此越是重视软件质量,越是应该花足够的时间做一些度量性测试。在测试时,当碰到进度急任务重的情况下,我们应该尽早地进行度量式测试,重视度量式测试的重要性。

4度量式测试的主要应用场景

下面列举两种情况,概述度量式测试有别于检查式测试的几个主要应用:

4.1 度量式测试可以发现潜藏隐患,而检查一般只能找出显现的问题

检查式测试有着明确的标准,正常或出错显而易见,而且一项功能在一个版本一般只测一次。度量式测试不会简单的一次性做出正常或则出错的结论,而是客观的持续记录软件相关部分的状况,比如内存使用情况、数据库的操作、网络流量、关键操作的时序等。比如软件的“死机”问题是一个必然存在的事件,大部分情况下都是严重影响软件使用的问题,甚至造成无可挽回的损失。有一种数据专门采集的是各种死机的情况;包括死锁、非正常操作、软件外部影响、底层操作系统出错等,根据死机原因分析提取需要关注的关键数据,确定隐患的所在,作出系统改进的办法。这一类的可靠性或者失效性分析在其他工业测试中运用较多,而软件中较少。

4.2 度量式测试能够获取软件的使用细节,用以改进设计模型并专注于测试的重点

有一类度量式测试并不是针对于找出一般性的问题,而是专门用于了解软件在正常使用过程中的具体应用状况,用于对系统下一版本的改进。这种度量式测试多出现在β测试阶段,在找出问题的同时也会根据实际的应用重新调整开发设计。比如互联网的上的应用软件,多数都是互动操作,通过度量式测试用户登陆后对软件的操作方式、习惯、各模块实际运行频度差异等,可以对系统之前的设计模型加以改进,甚至发现新的需求。

此外,由于度量式测试的前期,数据的采集一般不需要太多主观灵活的判断和分析,因此更利于自动化的介入,这样可以充分的调集正常工作时间和人力外的其他资源(如设备,网络等),使资源利用最大化。所以在一定的基础上,及早的在项目过程中引入合适的度量式测试,可以使得项目的测试效率更高。

5度量式测试在医疗曝光系统中的应用

在日常的测试活动中,我们经常会接触度量式的测试类型,特别是性能测试中;同时在自动化测试中也会接触到此类相关的数据采集和分析的实例。下面我们将简单介绍在医疗曝光系统可靠性测试中应用度量式测试为了解系统性能、提高系统安全性和发现系统隐藏缺陷所带来的巨大价值。

医疗曝光系统是病人在进行医疗曝光时,医院放射科所使用的数字拍片系统,其可靠性测试需要对系统在实际使用中最常用和关键的流程进行可靠性评估,发现并解决这一过程中出现的错误以及可能出现的隐患。下面是它一次完整操作的基本步骤:

5.1完成准备工作

从病人信息系统中提取指定病人记录:

在本地目录中找到该病人;

在曝光系统上进行曝光;

当预览图像出现时,在图像查看窗口接受并打开图像;

返回主菜單。

我们希望系统对这一组核心操作的可靠性达到连续3000次正常处理,这里包括系统能完成3000次以上连续的处理,保证每一次的结果正常,每一次的各分步结果正常,同时也能达到一定的处理性能。这样我们要对每一次的结果和过程进行记录,它既有利于了解系统的运行状况,也能在出错的时候提供更具体的重现环境。

5.2记录系统每一次运行的基本数据

包括每一次运行的具体时间及其各部分运行所用时间:

运行时刻;

病人编号;

本地查找病人记录所用时间;

从曝光到图像预览所用时间;

从曝光到完成所用时间;

整个流程所用时间。

以下是系统运行时产生的一组基本纪录(单位:秒):

8/11/2009 4:37:26 PM 53 3.953 12.031 22.375 52.047

8/11/2009 4:38:18 PM 54 4.106 12.032 25.844 52.031

8/11/2009 4:39:10 PM 55 4.001 11.985 22.328 52.032

8/11/2009 4:40:02 PM 56 3.985 12.125 22.407 52.031

……

8/12/2009 8:08:24 AM 997 0.937 13.891 21.828 62.766

8/12/2009 8:09:27 AM 998 0.906 13.891 21.688 62.718

8/12/2009 8:10:38 AM 999 1.266 13.891 29.469 70.735

8/12/2009 8:11:41 AM 1000 1.109 13.828 21.891 62.625

从记录中我们可以比较清楚地了解当前的运行次数,了解一次完整的基本操作的所用的时间。可以看到随着时间的增长,系统运行一次完整流程的时间会增大,这表明其中可能出现了内存泄漏等问题。

5.3对系统部分进程的内存使用情况进行监控

图1显示了CC Application Coordinator 进程的内存泄漏情况,当然内存泄漏具体起因需要更多的分析。

5.4得出测试结论

下面是在这次可靠性测试中发现的问题:

5.4.1ID000542350 在系统曝光状态为已准备就绪时,有时曝光可能不发生这是平时测试中一般不会遇到的问题,在大量的循环中我们可以通过数据了解曝光失效的存在以及它的频度,从而给开发一个直观的认识并最终消除,最后的验证也是通过多次的可靠性测试验证(3000多次未发现)。

5.4.2ID000542351 在系统曝光2000次后,系统性能下降这也是一个典型的可靠性测试中碰到的问题,性能下降的问题往往是一个缓慢的趋势,通过对每次循环的时间记录,我们可以直观地了解到出现性能下降的负荷和它的缓急等。

从上述的应用可以了解到,度量式测试在测试系统性能、提高系统安全性和发现系统隐藏缺陷上具有很大的使用价值,特别是在系统的性能测试及自动化测试中,通过对数据的搜集分析,可以深入了解系统性能瓶颈,进而构建提高系统性能的解决方案。

6结论与展望

总的来说,检查式测试和度量式测试都有着各自的优缺点和差异性的测试偏向点,在实际的测试过程中,针对项目中不同阶段、不同类型的测试需要,测试人员可以选择相应的测试方法进行测试。在测试过程中,将检查式测试与度量式测试相结合,协同发现系统潜在的各类缺陷及隐患,必将大大提高软件测试的高效性。

在实际的度量式测试过程中,有效的数据采集对测试过程和结果的分析都能提供相当大的帮助。特别是用采集的各种现场数据来代替测试人员的人工记录和判断,对于提高自动化测试的有效性也必不可少。在测试活动中如何设计合理高效的收集数据种类和方式,如何将检查式测试与度量式测试恰当结合起来,以提高测试效率将是未来研究的重点。

参考文献

[1] Khaled M.Mustafa,Rafa E.Al-Qutaish and Mohammad I. Muhairat.Classification of Software Testing Tools Based on the Software Testing Methods[C].Second International Conference on Computer and Electrical Engineering.Dubai,UAE:ICCEE.2009.

[2] Michael R. Lyu. Handbook of Software Reliability Engineering[M].NJ.USA:McGraw-Hill.Inc,Hightstown.1995.

[3] Victor R.Basia and Richard W.Selby. Comparing the Effectiveness of Software Testing Strategies[J].IEEE Transactions on Software Engineering.Piscataway,NJ,USA:IEEE Press,1987,13(12).

[4] Mamun,A. AL.,Wang,L. F. and Tan, K. C. elt.An automated methodology for the tracking of electrical performance for memory test systems[J].IEEE Transactions on Instrumentation and Measurement,2006,55(3).

作者简介:刘琴(1976-),女,上海人,中国计算機学会软件工程专业委员会委员、ISTQB大中华地区首席代表、CSTQB专家、同济大学软件学院常务副院长,博士,研究方向:软件工程、软件测试、软件度量等;王玉立(1984-),女,上海人,同济大学软件学院工学硕士,研究方向:计算机应用科学。

作者:刘 琴,王玉立

第二篇:面向软件测试工程师培养的《软件测试与质量保证》实验教学改革

摘要:为了培养创新能力强、适应社会经济发展需要的软件测试人才,本文结合常熟理工学院《软件测试与质量保证》课程建设经验,以中小企业对软件测试人才的需求为导向开展实验教学改革,分别从实验教学改革基本思路、教学内容组织等方面探讨应用技术大学建设背景下软件测试课程实验教学改革措施。

关键词:软件测试;软件质量保证;教学改革;软件测评师;实验教学

一、引言

随着我国软件产业迅速发展,企业面临着开发高质量软件系统的巨大压力,软件测试、软件质量保证受到越来越多的重视。软件企业对承担软件测试、质量保证工作的软件测试人才需要剧增,软件测试工程师的职业价值、发展前景得到前所未有的提升。为此,国内高校开设了软件测试相关课程。但是,由于其重理论、轻实践的教学模式使得培养出的学生软件测试实战能力差,导致大量毕业生应聘软件测试相关职位时受到冷遇。

为培养创新能力强、适应社会经济发展需要的软件测试人才,《软件测试与质量保证》实验教学亟需改变传统的教学理念,改进教学方法,更新教学内容。笔者结合自身教学科研和工程实践经验,分别从改革思路、实验教学内容设计等方面,论述常熟理工学院《软件测试与质量保证》实验教学改革的措施和体会。

二、实验教学面临诸多挑战

笔者调研国内高校软件测试课程的建设情况,发现普遍存在重理论、轻实践的教学倾向,实验教学环节存在诸多问题:

1.企业对软件测试工程师的能力要求是综合性的,要求软件测试人员具有软件项目经验,具备软件测试、软件质量保证知识,能够独立开展软件测试工作。但是,国内高校教学计划制定时片面强调软件测试的作用,对软件测试与软件质量保证之间的天然联系缺乏理解,对软件质量保证相关实验的重视程度,课时安排存在严重不足。

2.目前,《软件测试与质量保证》实验教材选择面临无书可选的尴尬局面。课程实验设计只能全凭任课教师把握,使得实验教学过程中存在较多风险。

3.国内高校在实验设计方面,多以基础性实验为主。这种单一的实验设计方式,难以适应软件测试工程实践能力培养的需要。

三、实验教学改革措施

在应用技术大学建设驱动下,以中小企业对软件测试人才的需求和软件测试工程师认证大纲为导向,我们整合已有的校企合作课程资源,按照Daniel Galan软件质量保证框架组织实验教学内容,采用项目驱动的案例教学法开展实验教学,让学生在实验实践中加深对软件测试与质量保证专业知识的理解,培养学生软件测试实践能力。

(一)教学改革基本思路

软件企业对软件测试人才的需求是软件测试课程改革的源动力和驱动力,软件测试相关的从业资格认证是学生入职的敲门砖。为此,在应用技术大学建设背景下,我们以切合中小企业对软件测试人才的需求为导向,结合全国计算机等级考试软件测试工程师认证、全国计算机技术与软件专业技术资格考试软件评测师认证的考试大纲要求,选择朱少民老师编写的《全程软件测试》[1]和NIIT培训教程《Software Testing and Quality Assurance:Student Guide》[2]作为课程教材,按照Daniel Galin软件质量保证框架组织教学内容。Daniel Galin软件质量保证框架[3]指出软件质量保证是建立企业软件质量文化所需的一些列活动的集合,认为软件测试是一种典型的软件质量保证措施,软件测试的目的是为了发现潜在的软件缺陷,软件测试工作贯穿软件项目的始终。按照Daniel Galin软件质量保证框架组织课程内容有助于保持软件测试与软件质量保证之间的内在联系,符合软件企业软件测试与质量保证的最新经验。

(二)实验设计

如何在有限的实验课时内,最大限度地加深学生对软件测试、软件质量保证的理解,增强其软件测试实践能力,是实验教学的主要任务。我们设计了导入性实验、基础性实验、创新项目实践三种类型的课程实验。导入性实验要求学生应用已修课程(包括程序设计、数据库设计、软件工程等)知识进行软件调试,在软件调试过程中理解软件调试与软件测试、软件质量保证之间的关系,实现到本课程学习的过渡;基础性实验目的在于强化课程基础理论、原理的理解,让学生在实验中理解所学知识,掌握软件测试工具的使用;创新项目实践以课程实训项目为载体,为学生运行所学知识解决软件测试实践过程中涌现的各类问题,锻炼学生的动手实践能力、自主学习能力,从而提高学生的工程实践素养。

1.导入性实验。软件测试的目的是发现软件系统中潜在缺陷,而缺陷的解决则通过软件调试手段实现。为此,设计导入性实验“软件调试”。本次实验以员工工资核算软件Employee作为实验对象,要求学生发现Employee中人为注入的软件缺陷,然后应用Java调试器的断点调试功能,结合回归测试手段修订所发现的缺陷。

通过导入性实验,学生体验了改正软件缺陷的艰辛,在教师引导下思考如何发现软件缺陷、如何提高软件质量。教师适时点拨学生,指出发现软件缺陷是软件测试工程师的职责,软件测试工程师需运行软件测试方法、技术和工具才能发现潜在的软件缺陷。教师进一步启发学生:提高软件质量需要开展包括软件测试在内的各项软件质量保证工作。

2.基础性实验。基础性实验旨在加深学生对课程基本概念、原理的理解,让学生在动手实践中加深对基础概念、原理的理解。课程安排8次基础性实验,实验2、3、4和5属于软件质量保证实验,6、7、8和9是软件测试实验。

(1)实验2:软件度量实践。实验2关注软件度量问题,介绍软件规模、项目工作量和软件成本之间的关系,要求学生掌握软件规模估算、工作量估算和成本估算的方法和过程。通过本次实验,学生可以应用USC CoCoMo II进行软件成本估算。(2)实验3:基于Microsoft Project的软件项目管理。软件项目计划及进度管理,是软件质量保证中重要的管理部件,也是开展软件测试活动的前提。实验3要求学生使用Microsoft Project建立软件项目计划、运用跟踪甘特图追踪项目进度,等等。(3)实验4:版本控制软件CVSNT。CVSNT是当前最流行的版本控制系统,是中小企业进行版本控制的利器。实验4讲解CVSNT的安装和使用,要求学生掌握CVSNT的操作技巧。(4)实验5:BugFree软件缺陷管理。软件缺陷管理贯穿软件测试项目的始终,记录软件缺陷从发现、修复直至关闭软件缺陷的全过程。实验5介绍开源缺陷管理软件BugFree的软件缺陷管理思想,要求学生掌握BugFree安装与配置、软件缺陷管理等技能。(5)实验6:软件静态测试。软件静态测试是软件测试技术中发现软件缺陷效率最高的技术。我们安排“软件静态测试”专题讲座,讲解软件制品阅读、静态分析的技巧,还介绍如何运用CheckStyle、FindBugs等静态测试工具分析程序源代码、目标程序中潜在缺陷。本次实验有学生利用课后时间,自主实践。(6)实验7:JUnit单元测试。实验7介绍单元测试工具JUnit的使用,要求理解JUnit单元测试框架,掌握单元测试脚本的编写技巧。本次实验还推荐学有余力的学生自学JMock,综合应用JUnit和JMock进行对Java应用系统进行集成测试。(7)实验8:软件功能测试。软件功能测试是检验目标软件是否正确实现了客户需求,是软件测试执行的重要内容。实验8要求学生使用QuickTest Professional(简称QTP)对机票预订系统进行功能测试。本次实验要求学生能够独立完成功能测试脚本的录制和编辑,掌握QTP检查点设计的方法及技巧。(8)实验9:软件性能测试。实验9介绍软件性能的概念和原理,讲述如何运用HP Mercury LoadRunner对Web系统进行性能测试,让学生在实验过程中理解虚拟用户技术,掌握基于LoadRunner的性能测试技术的过程及技巧。此外,本次实验要求学生利用课余时间使用开源的性能测试工具JMeter进行软件性能测试。

3.创新项目实践。为了培养学生的工程实践能力,我们从学生课程项目、毕业设计、大学生创新项目、开源软件项目等中筛选出软件规模适中的软件系统作为课程实训项目,让学生对课程实训项目进行系统化的软件测试,要到学生主动动手实践,在软件测试项目实践中培养工程素养。

在课程教学过程中,我们还加强对基础扎实、动手能力强、思维活跃的学生的培养,推荐这些学生参与到教师科研项目中,为学生在科研项目中积累软件评测经验。

四、结束语

《软件测试与质量保证》通过十余年的建设已形成了较完善的课程体系,十多轮的授课实践积累了丰富的教学经验,课程实验教学体系也日趋完善。

当前,我校正转型应用技术大学,这将对本课程的教学内容、教学方法、教学手段等提出更多、更高的要求。鉴于此,本课程教学团队正尝试通过校企合作模式开展课程教学活动,编写校本教材,多措并举提升学生软件测试能力。

参考文献:

[1]朱少民.全程软件测试[M].北京:电子工业出版社,2007.

[2]NIIT.Software testing and quality assurance[M].上海:NIIT(中国),2011.

[3]Daniel Galin.软件质量保证(英文版)[M].北京:机械工业出版社,2005.

作者:董瑞志

第三篇:基于模糊测试的自动化软件测试方法

摘要:为了解决在大规模软件测试中,人工的软件测试费时费力而且测试效果差的问题,该文提出了一种基于模糊测试技术和路径覆盖分析方法的软件测试方法。该测试方法可以自动完成用例生成、用例运行、收集目标程序信息和计算可疑语句的可疑度。通过实验,该方法在不降低代码覆盖率和错误发现率的情况下,缩短了软件测试的时间。

关键词:自动化软件测试;模糊测试;错误定位

计算机的应用越来越多地深入到人们的日常生活中,然而计算机软件还远没有达到零错误的要求。提高软件质量已经成为软件工程领域亟待解决的重要问题。软件测试,作为一种提高软件质量的重要手段而备受重视。在软件的开发生命周期中,软件测试是一个耗时耗力的过程,已成为软件开发的瓶颈之一[1]。据统计,软件测试约占软件开发和维护成本的50%~75%[2],因此,改进和改善软件测试技术变得十分迫切与重要。模糊测试[3]是一种通过提供非预期的输入并监视异常结果来发现软件漏洞的技术。模糊测试一般是一个自动或半自动的过程,这个过程包括反复操纵目标软件并为其提供处理数据。近年来,有很多学者在不同类型软件的软件测试中都证实了模糊测试技术的有效性和自动化的特点。模糊测试技术针对不同类型的测试环境有不同的测试策略。例如,张等人[4]提出了一种针对网络协议及模糊测试框架。沈等人[5]提出了一种基于文件规范描述的文件模糊测试算法,有效避免“无效”测试用例的生成,提高效率同时也增加了测试的全面性。

上面提到的模糊测试的研究重点主要集中在模糊器的设计与实现上,几乎没有涉及到错误定位的技术。基于频谱的错误定位方法是基于实际执行的动态错误定位技术的具体应用。Harrold等人证实了程序频谱与程序行为之间的关系,论证了通过研究运行失败测试用例得到的频谱信息与运行成功测试用例得到的频谱信息之间的差异性可为定位出错语句提供帮助[6]。该文调研了模糊测试技术和自动化错误定位技术的研究进展;第2节论述了自动化错误挖掘与定位技术可行性,并解释本文技术的动机;第3节介绍自动化错误挖掘与定位技术的实现方法;模型的实现将在第4节给出;第5节总结并展望未来的研究方向。

1 研究动机

在软件的生命周期中,软件的维护成本所占比例特别大,所以一个好的软件测试方法是非常必要的。一种优秀的测试方法可以发现软件中存在的大部分漏洞,从而可以降低软件的维护成本,提高软件的质量。模糊测试是1989年由Bartoon Miller教授首先提出的,并通过模糊测试在UNIX存在的大量漏洞。在1999年Oulu大学开发PROTOS测试集,这标志着模糊测试发展历程的一个重要里程碑。2002年PROTOS开始成熟,在2004年文件模糊测试开始兴起,AxtiveX模糊测试在2006年开始流行。到目前为止模糊测试取得了一定的发展,已经是软件漏洞挖掘中不可或缺的技术,但是这项技术仍然不是特别成熟[3]。图1给出了模糊测试的过程。

软件错误定位技术是通过运行测试用例得到程序的各条语句被测试用例覆盖的信息,然后利用覆盖信息计算出程序中语句的出错可疑度[7]。在实际的测试过程中,有很多情况是测试用例导致程序的崩溃,程序崩溃时寄存器中的信息也是非常重要的。所以利用程序的覆盖信息与程序崩溃是寄存器存储的信息共同来定位程序的出错信息可以提高定位的精度和速度。利用GCC中的GCOV命令可以收集C程序的运行的详细信息,包括覆盖率、代码的执行路径、程序的执行结果等信息。利用GDB调试器可以查看程序运行时CPU寄存器的状态。

随着计算机的不断发展,程序的代码越来越庞大,基于源代码审核的白盒测试需要大量的人力和时间,这会大大增加软件开发的成本。软件测试的自动化是未来软件测试发展的主要方向,通过把模糊测试技术和软件错误定位技术结合起来,可以实现软件测试的自动化,提高软件维护的效率。

2 自动化错误挖掘与定位技术

在这一节将介绍自动化错误挖掘与定位技术的总体结构,以及对结构中各主要模块的功能与实现。

2.1 自动化错误挖掘与定位技术的总体结构

为了实现软件测试的自动化,所提出的解决方案由一下几个模块组成:模糊器模块,测试结果记录模块,错误位置分析模块。图2为自动化错误挖掘与定位技术的流程图。

图2 自动化错误挖掘与定位技术的流程图

2.2 模糊器模块

模糊器模块的主要作用是生成测试用例,并把测试用例提交给被测软件,是模糊测试的核心结构。模糊测试可分为两类[8]:基于变异的模糊测试和基于生成的模糊测试。对于不同的测试目标有不同的模糊器,其中主要的分类有:

1) 环境变量和参数。测试对象主要是命令行参数和环境变量,主要的模糊器是iFuzz。

2) Web应用程序和服务器。针对Web服务器的存在漏洞的模糊器有Dave Aitel开发的SPIKE和WebScarab。

3) 文件格式。针对特定的文件格式,用于挖掘客户端文件解析漏洞,主要的模糊器有notSPIKEfile、SPIKEfile和FileFuzz。

4) 网络协议。通过特定的Socket形式将变异或者含有错误的数据包发送给目标程序,相应的模糊器有SPIKE和ProtoFuzz。

此外对于特定的测试目标,我们也可以手动构造模糊器,在构造模糊器时要充分考虑程序中可能存在的问题,例如:拒绝服务、整数处理问题、简单的栈和堆溢出、格式化字符串和目录遍历等。对于不同的问题确定模糊器不同的用例生成规约。例如,对于整数处理问题,我们可以设计这样的用例规约:生成边界值附近的测试用例0,-1,1,2,3,0XFFFFFFFF-1,0XFFFFFFFF-2等测试用例。此外,我们还可以直接在网上下载有用的工具和库,具体请查看文献[12]。

2.3 测试结果记录模块

我们的目标是实现软件测试的自动化,所以就不能依赖人工识别错误。为了实现这个目标,我们需要一种可靠的,可编程的方法。有一种方法是检查程序的返回代码[9],在现在的UNIX和Linux系统中,如果一个应用程序因为一个为处理的信号而中止,那么Shell的返回代码将等于128加上该信号数字。可以利用这个值来判断不同的错误。还有就是把应用程序连接到调试器,错误处理机制将阻止由模糊测试所导致的许多错误的明显标记,但是这些错误一般可以通过使用一个调试器来发现。在Linux操作系统中,GDB就是一个特别好的调试器,一般来说,GDB主要帮助你完成下面四个方面的功能:1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序;2)可让被调试的程序在你所指定的调置的断点处停住;3)当程序被停住时,可以检查此时你的程序中所发生的事;4)动态的改变你程序的执行环境。对于有些应用程序,我们也可以通过见识其运行日志带识别程序的运行结果。

测试用例执行路径是用于错误定位分析的主要数据,检测程序的主要方法是在程序的源代码中进行插桩,根据程序的执行结果来得到一个测试用例的执行路径。但是这种方法是基于语句的,在前期对源代码的处理中费时费力,效率低下。在这里提出了一种新的插桩策略,在程序运行的时候,有很多语句块只要语句块的第一条指令被执行,其后面的所有语句都会被执行,把这样的代码块称为基本块。在插桩时以基本块为单位,这样可以减少前期的准备工作,又可以提高程序的运行效率。

对于每个测试用例的结果都进行保存,用于最后的定位分析。我们把用例执行的相关信息保存到数据库中,其中数据库有三个标,分别用为:

1) 代码表(codes),用来存储程序的源代码;

2) 用例执行信息表(info),用来存储用例执行的各种信息,主要用,测试用例、执行路径、执行结果等;

3) 异常表(abnormal),存储导致程序出现异常时CUP各寄存器以及堆栈中的信息。

下面是记录模块的结构图。

图3 记录模块结构图

2.4 错误位置分析模块

错误位置分析模块的功能是根据数据库中的测试数据计算可能出错或存在漏洞的语句。因为数据库中记录了每条测试用例的执行路径和执行结果。可以利用数据库强大的数据处理能力,计算出错路径中每条语句的可疑度,其计算公式如公式(1):

[RESULTi(s)=TFi(s)TFi(s)+TP(s)] (1)

其中,TFi(S)经过语句S出错(错误类型为i)的测试用例个数,TP(S)是正常经过语句S的测试用例数。最后得到的结果为一系列语句可疑度的列表,其中可疑度最大的,出错的可能性也最大。

3 模型实现与实验

实验模型是建立在ubuntu 13.04 操作系统上,应用的开发语言是Python 2.7.4,数据库是Mysql Server 5.5.31。在实验模型中主要用到的软件有GCov 4.7.3和GNU gdb (GDB) 7.5.91.20130417-cvs-ubuntu。GCov用于收集用例执行路径,Gdb用于查看测试软件的执行细节。实验用的目标程序是从SIR[10](http://sir.unl.edu)网站上下载的grep。实验中数据库表结构如下表。

表1 目标程序代码表

表2 用例执行路径表

表3 用例执行路径表

通过简单的模拟实验,验证了该方法在软件测试中代码覆盖率、漏洞定位准确性有明显的提高,并且为发现的漏洞提供了相应的信息。并且在整个软件测试过程中,需要人干预的地方很少,基本实现了从用例生成、错误检测和错误定位的自动化。

4 总结与展望

本文中提到的软件测试方法实现了软件测试中用例生成、测试与错误定位分析的自动化,提高了软件测试的效率,加快了软件开发的周期,降低了软件维护的成本。同时该方法也存在一定的局限性,不能测试出软件中存在的逻辑错误,也不能能验证软件功能的完整,只对软件中存在其他错误(非法引用、堆栈溢出、格式化字符串等)有效。

在以后的研究中,应探索新的软件错误定位的方法和技术。可以从一下几个方面展开研究:

1) 利用动态的二进制插桩。在软件测试中,有很多错误不能直接被发现,例如:函数的堆栈溢出,如果溢出只是覆盖了函数中的一些变量,没有覆盖函数的返回地址,即EIP的值。这种情况程序是不会报错的,根据程序的运行结果很难定位错误。所以利用动态二进制插桩来实时监控程序的运行状态是一个不错的研究方向。

2) 利用人工只能,实现软件错误定位与自动修复。随着计算机技术的发展,软件规模越来越大,Binkley 估计到 2025 年人们开发的代码将达到万亿行[11]。面对数量庞大的代码,数据挖掘、机器学习等人工智能技术将会在故障定位方面得到很好的应用。

参考文献:

[1] Zhang Yu-Qian,Zheng Zheng,Ji Xiao-Hui. Markov Mpdel-Based Effectiveness Predicting for Software Fault Location[J].Chinese Journal of Computer, 2013,36(2):445-448.

[2] Yu Kai,Lin Meng-Xiang.Advances in automatic fault localization techniques.Chinese Journal of Computer,2011,34(8):1411-1422.

[3] Sutton M,Amini A G P.Fuzzing: Brute Force Vulnerability Discovery[M]. 黄陇,于莉莉,李虎,译.北京:机械工业出版社,2009:13-20.

[4] 张宝峰,张翀斌,许源.基于模糊测试的网络协议漏洞挖掘[J].清华大学学报:自然科学版,2009,49(S2):2113-2118.

[5] 沈亚楠,赵荣彩,王小芹,等.基于规范生成的文件模糊测试[J].计算机工程与设计,2010,31(16):3591-3594.

[6] Harrol M J,Rothermel G,Wu R,Yi L.An empirical investigation of program spectra[C].Proceedings of the ACM SIGPLAN/SIGSOFT Workshop Program Analysis for Software Tools and Eng (PASTE' 98). Montreal, Quebec,Canada,1998:83-90.

[7] 谭德贵,陈林,王子元,等.通过增大边际权重提高基于频谱的错误定位效率[J]. 计算机学报,2010,33(12):2335-2338.

[8] 陈衍铃,王正.模糊测试研究进展[J].计算机应用与软件,2011,28(7):291-293.

[9] Sutton M,Amini A G P.Fuzzing:Brute Force Vulnerability Discovery[M].黄陇,于莉莉,李虎,译.北京:机械工业出版社,2009:65-66.

[10] Do H,Elbaum S G,Rothermel G.Supporting controlled experimentation with testing techniques: an infrastructure and its potential impact[J]. Empirical Software Engineering,2005,10(4):405-435.

[11] Binkley D.Source code analysis: a road map[C].Proceeding of Future of Software Engineering (FOST' 07),Minneapolis, USA, May 23-25,2997. Washington,DC,USA:IEEE Computer Society,2007:104-119.

[12] Sutton M, Amini A G P Fuzzing: Brute Force Vulnerability Discovery[M]. 黄陇,于莉莉,李虎,译.北京:机械工业出版社,2009:48-50.

作者:毛立强

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:运营模式论文范文下一篇:物理化学论文范文