时间:2022-03-24 09:28:07
导言:作为写作爱好者,不可错过为您精心挑选的10篇测试计划,它们将为您的写作提供全新的视角,我们衷心期待您的阅读,并希望这些内容能为您提供灵感和参考。
一、测试范围
1.尚未参加普通话水平测试或已参加普通话水平测试尚未达到规定级别的国家公务员、机关工作人员、各级各类学校的教师、教学管理人员、教学辅助工作人员、播音员、节目主持人、出镜记者、节目主持人、影视剧演员、话剧演员、导游员、讲解员、话务员、广播员及其他直接面向公众服务的相关服务部门(如:税务、工商、商贸、交通、金融等行业)窗口服务人员。
根据国家有关规定,上述范围内在年6月15日以前测试并取得等级证书的有关人员,均需要重新参加测试。
2.按照市教育局《关于加强学校语言文字工作的基础地位全面推进学校语言文字工作规范发展的通知》要求,年龄在35岁以下、应参加升级测试的教师。
3.按照《省实施〈国家通用语言文字法〉办法》和省人民政府办公厅《关于进一步加强语言文字工作的意见》的有关规定,师范类、中等职业学校、高校的应届毕业生应参加测试并达到二级乙等以上水平。
二、计划提报
1.区教体局负责提报所属各中小学、民办学校的教职员工的测试计划。
2.区人力资源和社会保障局负责提报区内国家公务员、机关工作人员、媒体工作人员、窗口服务人员及社会其他人员的测试计划。
三、有关要求
1.市语委办根据各单位计划提报情况,统筹安排测试时间。
2.未提报计划的单位,原则上年不予安排测试。
1.1 自动化关键技术简介
自动化测试的核心就是对象识别技术。脚本录制的主要目的是采集对象信息并生成相应的脚本。回放的过程就是根据这些信息进行对象的识别和执行相应的脚本。
对象识别本质是根据关键属性来确认对象,然后在该对象上执行相应的操作。如下图所示:
1.2 自动化测试框架的作用
减少冗余代码、提高代码生产率、提高代码重用性和可维护性。提高开发速度,提升测试代码的执行效率。
提高软件代码质量,同时引入重构概念,让代码更干净和富有弹性。
1.3 自动化测试框架的主要类型
数据驱动测试框架
数据驱动测试是测试脚本从数据文件(数据池,CVS文件,Excel文件等)中读取输入和输出数值并载入到录制的或手工编写的脚本变量中的一种框架。在这种框架里,输入数值和输出数值都使用变量。测试数据包含在数据文件里而不是在脚本中被硬编码。不同的数据文件对应不同的测试用例。在这种模式下数据和脚本分离,脚本的利用率、可维护性大大提高。
关键字驱动或表格驱动测试测试框架
关键字驱动和表格驱动测试在是数据驱动基础之上,进一步提高自动化测试的灵活性和扩展性的框架解决方案。在关键字驱动框架下,除了要设计应用程序的测试数据表,还要生成一个关键字数据表。这个关键字包含了程序的特性,或者是有关程序的操作。
基于UI功能的自动化测试
图形用户界面(Graphical User InterFace, GUI)就是使用图像,输入的文字,带有图标的计算机界面。GUI可以让用户通过图标和鼠标与计算机进行交互,而不是在命令行中输入文本。 一般来说,应用程序(包括桌面程序和web应用)有一些基本的界面控件, 如窗口, 消息对话框, 菜单, 按钮, 复选框, 组合框, 列表框, 文本输入框, 组选框, 树形视图, 浏览器, 日期选择控件等。它们有些是属于Windows桌面应用程序, 有些是属于Web DOM对象。
所有软件的指令都通过这些控件以事件或消息的形式传递给后台处理程序。自动化测试脚本的开发过程就是一个工具模拟人工操作的过程。人员要通过工具去操作(录制), 工具要能“学习”并掌握这个过程(对界面控件的识别能力),最终能够独立完成测试(回放)。
2.1 利用HTML DOM编程接口实现UI自动化测试
HTML DOM(HTML Document Object Model)文档对象模型定义了访问和处理HTML文档的标准方法。所有的WEB浏览器都内嵌了DOM解析技术,包括IE和FireFox等。要改变页面的某个元素或节点,浏览器中的JavaScript就需要获得文档中所有元素进行访问来获得每个对象的入口。这个入口,连同对HTML元素进行添加, 移动, 改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)。
我们来看下,如何用HTML DOM接口来实现在百度的首页(见下图)上完成自动搜索。
“文本输入框”源码:
“百度一下按钮”源码:
如果想通过DOM接口来完成自动搜索的过程,则VBScript代码如下。以下代码保存在VBS文件里, 双击运行。
Set WshShell=WScript.CreateObject("WScript.Shell")
Set ie=CreateObject("internetexplorer.application")
ie.visible=1
ie.navigate("http://")
Do while (ie.busy=True)
wscript.sleep 1000
Loop
Set docRoot=ie.Document
docRoot.getElementById("kw").value="163"
docRoot.getElementById("su").click
DOM对象接口就是对WEB UI实施自动化测试的技术基础, 理论上,只要获得DOM的根节点,依次遍历,就可以对根下所有的对象进行操作了。但它的缺点是过于低层,需要自动化测试开发人员对DOM非常的精通,而且要开发大量的遍历函数,才能完成一个基本功能的操作。
2.2 QTP测试工具
QTP(Quick Test Professional)是HP公司提供的自动化测试工具,其脚本语言为VBScript, 目前最新版本为11。 主要为GUI自动化测试提供解决方案。 QTP提供了VB Object, Windows Object, Web Object等对象接口, 生成的VB Script脚本好具有可读性好,面向对象等优点。
使用QTP录制百度搜索的操作, 生成的脚本如下:
QTP在录制的过程中, 捕捉页面上的元素,录制生成了4个QTP对象(如下图)。这些对象以树状的组织形式存储在QTP的对象库里。每个对象的属性存储了此对象的相关信息,对象的层次关系代表对象在界面上的隶属关系,即DOM的层次关系。
当脚本回放时, QTP会从对象库中读出对象的属性, 按对象层次结构, 依次与页面上的各个元素进行比较。如果匹配成功则执行QTP脚本里的动作, 完成回放, 否则,脚本将会报错, 停止运行。
因此,可以看出QTP是在HTML DOM的基础上封闭了一套强大的QTP对象, 使得用户对DOM的操作更加直观和方便。
2.3 QC简介
QC(Quality Center)是HP公司的一个基于 Web 且支持测试管理的所有必要方面的应用程序。QC测试流程包括四个阶段(指定需求,计划测试,运行测试,跟踪缺陷)。
指定需求阶段, 您可以创建一个“需求树”,用于定义您的总体测试需求, 针对需求树中的每个需求主题, 创建详细的测试需求列表; 计划测试阶段, 创建“测试计划树”, 向计划树中添加每个测试的基本定义, 对于确定要自动化测试的, 使用测试工具创建测试脚本; 运行测试阶段, 计划测试执行并将任务分配给测试人员, 自动或手动执行测试集中的测试;跟踪缺陷阶段, 可以添加缺陷,查看新缺陷, 修复打开的缺陷。
QTP + QC + 测试数据管理工具 框架实例
测试管理平台: 管理脚本的开发;管理脚本的执行;管理脚本的维护;管理测试的任务; 管理测试的报告
Quick Test Professional (QTP):读取测试数据及全局环境变量;生成测试脚本 (对象识别); 执行测试脚本 (脚本回放);报告测试结果
测试数据管理工具(JAVA):从数据库提取自动化测试数据;将测试数据存入测试数据管理文件;多线程并发提取数据
Excel(测试数据驱动): 保存测试数据 (输入参数);保存测试结果 (输出参数)
XML(全局环境配置): 保存全局环境变量
构建测试数据文件实例
建立外部测试数据文件(Test_Data.xls)。QTP脚本需要从此配置文件里读取测试数据,需要将输出参数写回该配置文件。实现脚本与测试数据的分离。
此数据文件包含三张表(General, SQL, Other)。 第一张表(General)存放全局性的配置信息(如数据库连接串,站点URL,是否“下载测试时所需动态链接库文件”标志等);第二张表(SQL)存放所有QTP脚本需要读取的测试数据和需要保存的输出参数;第三张表(Other)保存一些其它的信息。一般情况下脚本开发人员需要使用“SQL”表。在该表内定义输入参数的名称(供脚本读取),定义输出参数的名称(供脚本写入),相应的SQL(供脚本运行此SQL,从DB里自动获取测试数据)。如下面的图片所示:
管理测试数据工具研发实例
通常对于大型项目的回归测试来说, 一般自动化测试数据比较多;有的时候,测试数据需要实时从数据库里提取, 这时候就需要有方法在启动脚本前能够快速的准备好测试数据,因为QTP本身对多线程支持的不是很好,所以可能需要开发另外的多线程的工具来支持快速的获取测试数据。这很重要,不然手工维护大量的测试数据将会是令人沮丧的一件工作。
可以将该配置文件存于MQC的固定路径下(自动化回归测试脚本\通用\下载全局配置文件),在QC里建立测试集的时候,“下载全局配置文件”脚本应该首先被选中运行,脚本运行后,该配置文件将被下载到测试机上(c:\temp\目录)供QTP使用。
研发工具工作流程的基本思路为:读取测试数据配置文件(Excel) 加载配置文件中的SQL语句到内存 查询SQL需要连接的数据库的类型 连接对应的数据库(并发) 执行SQL查询(并发) 返回查询结果(并发) 将结果写入数据配置文件(Excel)关闭数据库连接、关闭系统文件连接
脚本的复用实例
为提高QTP脚本的复用度, 尽可能将常用功能以函数库的形式提供出来,或二次封装常用的函数接口以方便调用,或编写常用的Action供别的脚本调用。基本上可以将代码大致分成三类,如下图所示:
6.1 构建底层库函数实例
6.2 构建公共库模块脚本实例
“登录脚本”:用于登录系统
“退出脚本”: 该脚本用于退出系统
“获取订单脚本”: 该脚本用于从页面获取订单号
脚本规范实例
在脚本最前面加上基本信息: IE版本,QTP版本,项目名称,脚本编写人, 脚本创建时间,脚本修改时间,修改说明,输入参数,输出参数,功能描述, 调用库函数说明,调用共享对象库说明,调用场景恢复文件说明,调用存在的Action说明,更改默认Action的名称,业务流程说明,其它说明。举例如上。
输入,输出参数: 原则上,所有的输入参数需要定义在配置文件内(Test_Data.xls)供脚本读取; 所有的输出参数需要保存入配置文件内(Test_Data.xls)供其它脚本视需要读取。
检验点: 一般情况,脚本里应该需要加上必要的校验点; 业务完成后,需要在页面上对业务结果进行校验; 有订单产生的,需要在数据库里校验订单是否竣工。
常量命名规范: 常量的命名应该全部用大写,使用"_"作为单词间的分隔符,单词尽量使用全名称. 如: Public Const MSG_EMPTY_ROW As String = "有空行存在"。
变量命名规范: 变量命名大小写:尽量使用错落有致的大小写字母命名变量,错误的命名如STRNAME,正确的命名如strName.用标志性的前缀来指明一个变量的数据类型,如:strName, intQuantity, blnFound, dteNow, objCurrent。如果是一般的临时性变量定义,应该尽可能地简单 (如for循环:for i=0 to 5).
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)1120059-01
任何长期的软件项目的测试工作最终都会进入自动测试阶段。软件开发的过程中在不断的更新旧的功能增加新的功能,在此基础上必须保证不影响原有的正常功能。自动化测试的引入使测试人员从繁重而枯燥的工作中解放出来,同时还能保证精确性。
随着Adobe Flex编程技术的流行,基于Flex的软件项目应运而生。然而,其美观的界面却相应带来了测试的复杂性,它不同于数据驱动测试只顾输入输出,也不同于事件驱动测试只关注行为与结果,Flex产品与Flash一样可作出动态的美丽的外观效果,在事件处理上也及其复杂,这对测试带来一些极大的挑战。本文将介绍基于Flex的自动化测试框架。
一、自动化测试框架
首先让我们看一下自动化测试框架,如图1:基于自动化测试工具的测试过程不外乎三步:自动化测试初始化;自动化录制;自动化回放。即测试工具能够识别Flex的控件,通过录制用户的操作步骤模拟用户操作,生成测试脚本,回放录制的步骤,检测结果,以达到自动化测试的效果。
二、Flex与测试工具交互框架
然而自动化测试工具如何能够识别用户各种操作并进行模拟呢?让我们再来看一下Flex事件流框架(如图2):
Stage相当于树的根部为枝叶输送养份而服务的,一个事件的触发必须首先通过这个平台进入,在对象的显示列表中找到基类,再顺延找到子类,在相应的地方去实现一个事件的处理程序。所有的显示对象都有一个Stage的属性用于指向应用平台。每当事件触发时,都会经历从Stage到目标节点再从目标节点返回Stage的过程:抓获阶段,这个过程会抓获在Stage上的所有节点的父节点;目标阶段,查找到目标子节点;浮出阶段,将查获的子节点通过其父节点返回至Stage平台上。
自动化测试工具对Flex事件的支持便是按照其事件流处理框架的标准来实现的,首先必须能够找到所谓的Stage,然后识别Stage上的所有对象,进而找到那个唯一的子对象去获得它的属性及事件处理方法,自动化测试工具通过记录用户UI上的操作然后触发事件流达到自动化操作的过程,再由用户添加检查点以达到测试的目的。因而,测试工具要模拟用户操作必须要求能够识别对象,而且用户操作的事件流也必须按照如上图所示的事件流来操作,即必须通过一个Stage平台到Flex对象。
Flex在技术上又是如何与自动化测试工具交互的呢?为了支持Flex的自动化,Flex特提供了一个重要的包,即Adobe Flex自动化包(mx。automation。*):这个包为开发者创建Flex测试案例提供了自动化编程的接口。此包包含了:自动化库-automation。swc与automation_agent。swc这两个库用于帮助实现Flex框架的组件的派生类。Automation_agent。swc文件以及与其相关的包提供普遍的机制。,如SilkTest,是建立在这些库之上的。有了这些支持才便于测试工具去模拟Flex处理机制。而对于自动化工具本身也提供了支持Flex的接口,以达到自动化工具与Flex的通信与交互。如SilkTest也提供一个支持自动化的SDK,它是基于Flex自动化的API的。SDK以与Flex的AutomationAPI同样的方式为Flex组件提供自动化支持。SilkTest的开放(Open Agent)使用了Adobe的Flex自动化库。FlexTechDomain。swc文件即包含了SilkTest的具体实现实现方法。
Flex测试工程的准备工作与其它项目类似:开启支持Flex应用程序测试的接口;创建可测试的Flex应用程序;编译Flex容器(相当上面提到的Stage);使Flex事件与组件工具化(目的是为了使测试工具能够识别Flex对象,并模拟其事件处理程序)。
三、测试维护框架
为了提高自动化测试套件的可维护性,还需要采取一些措施。推荐采用测试脚本模块化框架。通过创建独立的脚本来代表被测试应用程序的模块、对象或函数,利用抽象和封装的原则将过程对象与源应用脱离开来,增强测试脚本的重用性,可维护性,降低由源代码的改变而带来的脚本大量的变动、失效。由此,才得以更为有效的提高自动化测试的效率与可用性。例如,SilkTest将一项工程分为四类文件来管理,即测试计划文件(.pln),由测试脚本与参数构成,类似于Function的一个实例,可用于分类管理测试案例;测试脚本文件(.t),可分类管理各类各个测试案例的过程描述;包含文件(.inc),可用于管理各种封装后的函数;配置文件(.ini)。这种规划管理一个复杂的工程项目得以有序清晰方便的进行管理。
四、结束语
由此,回顾整个过程,二个方面是我们在实现自动化测试的过程不可不关注的,它是自动化支持的瓶颈,是开启自动化的钥匙,即被测应用程序与测试工具的相互支持及测试脚本的有效维护。
参考文献:
[1]《Programming ActionScript 3.0》,2008 Adobe Systems Incorporated.
中图分类号: TP 31文献标识码: Adoi: 10.3969/j.issn.10055630.2013.02.004
引言随着计算机应用日益普及和深化,用户对软件的需求越来越多,对软件要求也总是在不断变化[1]。AutoCAD产品在软件国际化的过程中,每次修改都需要对大量的测试用例进行反复测试,还要在不同语言版本的操作系统平台上测试,这就使得该项目的测试工作极为繁琐。软件自动化测试作为保证软件质量和可靠性的关键技术手段,正日益受到广泛的重视。但如何进行测试,如何提高测试的质量和效率,仍然是许多人深感困扰的问题[2]。根据对AutoCAD软件测试项目研究与实践的体会,介绍软件自动化测试技术的概述、基本过程和实现。结合实用的Silk Test工具以及可扩展标记语言技术(extensible markup language,XML),给出整个自动化测试框架。1自动化测试概述整个自动化测试平台包含两部分:测试平台和服务器平台。测试平台包含不同语言版本或者不同操作系统的平台;服务器平台主要含有源代码版本管理库和测试结果的关系数据库[3]。一个规范化的软件自动化测试过程通常包括以下几个基本的测试活动:(1)自动化测试用例选择对于Silk Test工具而言,它对Java的支持很好,所以如果是多模块、多软件测试,首先要尽量选择和Java相关的部分来设计用例[4]。(2)自动化测试环境准备开启windows远程控制,设置文件的扩展名可见,安装待测试AutoCAD系列产品,安装测试过程所需的自动化测试软件(Silk Test软件)等等一系列配置。光学仪器第35卷
第2期商林霞,等:基于XML的软件自动化测试
(3)自动化测试脚本开发Silk Test自动化测试工具支持简单的捕获同放功能,但是这并不是自动化测试。测试工具直接录制产生的脚本是不能直接使用的,所以对于利用Silk Test工具编写的脚本来说,通常是通过捕获对话框图形,抓到测试对象。然后利用Silk Test所提供的4Test语言来添加函数、控制结构等[5]。 (4)自动化测试报告生成分析脚本运行的结果是否符合要求,决定每个用例自动化测试是否通过。对测试结果进行分类整理,生成测试报告。对于不能通过的测试结果要进行分析、记录和通报,方便相关的测试人员和开发人员了解测试结果。2自动化测试系统过程为了取得自动化测试效率和效益的最大化,现选取当前最适合自动化的测试用例。例如自动化测试脚本编写异常复杂的用例、运行自动化测试脚本很难发现软件缺陷的用例等等,都可以不运用自图1自动化测试系统实现框图
Fig.1Automation testing system
realization block diagram动化测试,而运用手动测试代替。同时在两个测试版本的间歇进行新的脚本的开发,当有了一定数量的脚本之后,就让脚本运行起来,发挥作用[6]。现只要保证自动化运行的环境足够充足,那么每个测试版本所需的时间就会足够短,节省了大量的人力。软件自动化测试是一个极为复杂的过程。在不同的测试环境下,测试的流程也会有所不同。一般都要根据实际情况,制定相应的测试流程。从软件测试对象出发,软件自动化测试系统实现框图,如图1所示。对于不同语言版本的本地化测试,测试过程大体是相似的。首先根据AutoCAD软件的功能特征选择和设计测试用例,然后就是由测试用例编写测试脚本,接着就是将这些测试脚本作为输入运行程序,将通过测试得到的结果与先得到的英语版本的结果进行比较,最后就是将两者的比较结果写成测试报告,软件开发者根据测试报告再决定对软件如何处理[7]。3系统实现
3.1脚本生成根据测试设计中的每个测试用例,利用 Silk Test软件进行编程,完成自动化测试脚本。脚本编写完成,进行不断地调试,直至完成的脚本符合测试用例验证的要求。编程语言是4Test语言,整个脚本的思路是基于AutoCAD软件对话框对象来实现的。函数中执行图像录像功能的语句,把整个自动化测试的windows平台界面上的执行过程录制下来,方便判断软件是否存在缺陷。针对每个自动化测试的测试用例,编写测试脚本。每个测试用例都有数个测试确认点,测试脚本要保证每个测试确认点都能被执行自动化测试,生成测试结果。测试脚本程序示例如下:
3.2结果信息读取软件本地化测试的对象是本地化的软件,需要在本地语言的操作系统上进行。以Windows中文语言操作平台为例,用Silk Test工具运行该对话框对应的测试脚本,生成XML的结果信息文件,该XML记录了该对话框上的所有信息:文字信息、控件位置信息、控件属性信息。图2中所示的AutoCAD软件对话框的XML部分信息示例如下:
在获取对话框信息之后,接着就要进行XML结果的分析。读取XML文件信息的程序片段为:
其中,利用XPath的路径表达式来选取XML文档中的节点或者节点集[8]。如要读取出对话框的标题信息“选择样板”,则正确的XPath语句是“/DIALOG/CONTROL[1]/Texts_LIST/@Texts_00000”。类似地,对话框上各控件的位置、大小、属性等信息都可获取到。如图2中的截断错误,都用红色线框标示出来,提升了后期错误分析的效率。
3.3结果对比国际化软件自动化测试包括软件国际化测试和软件本地化测试。软件的国际化测试一般是英语版本的测试,必须在本地化测试之前进行。首先进行国际化软件测试有助于判断软件国际化的设计程度,确定软件支持的国家区域,以及本地化是否容易[9]。本地化测试过程中,以源程序软件结果(标准英语版本)作为本地化软件的主要参考。运行英语版本和本地化版本的结果比较程序,本地化版本对话框都将与标准英语版本对话框的各项信息进行对比。经对比本地化软件存在缺陷时有三大类情况:(1)本地化软件对话框的某项XML信息(控件的位置、大小、属性等)是空值;(2)本地化软件对话框的某项信息值的长度和标准英语版本的不一致;(3)本地化软件对话框的某项信息内容(控件的位置、大小、属性等)和标准英语版本的不一致。结果比较程序的部分示例:
3.4结果分析在实际的项目测试过程中,每一步都有很具体的内容。例如在报告测试结果的同时,实际上还包含了对测试结果的统计和分析,测试工程师通过对结果进行分析来判断是否存在缺陷,将缺陷上传至Test Desk网站进行管理。表1对话框界面的典型错误类型
高质量且高可靠性的企业应用程序系统是数字化时代非常重要的元素[1]。测试团队在确保企业应用程序系统满足既定标准或需求时会发挥非常重要的作用。随着系统的规模和复杂性升级,其可靠性和质量要求必然成倍增长,这意味着测试团队需要开发更有效的测试方法。一个完整的测试过程包括数据记录、数据维护、数据验证等多个方面。测试数据管理策略对于测试数据的记录必须是全面的,这也为后期的数据分析挖掘提供了支撑。
陈翔等人在文献[2]中重点阐述了回归测试中用例优先排序(test case prioritization,简称TCP)问题。从源代码、需求和模型三个角度对TCP问题进行分类,重点分析了回归测试中测试资源缺乏时的TCP问题。另外,潘伟丰等人在文献[3]中提出了基于错误传播网络的测试用例排序方法。该方法在类粒度将软件抽象成加权类依赖网络(weighted class dependency network, 简称WCDN)模型,并基于WCDN分析错误在网络上的传播行为,构造错误传播网络(bug propagation network,BPN)。实例研究表明,基于错误传播网络的测试用例排序方法在错误检出率上相比于其他经典方法有一定的提高,并且具有较好的稳定性。一个全面的用例排序方法,能准确地将当前的软件质量反映到执行用例的优先级上[4-5]。通过使用正确的TCP策略测试团队能够提供及早发现缺陷,在整个产品开发过程中,为提供更简单的方法去解决系统缺陷提供支撑。因此,拥有正确的TCP策略对测试团队乃至公司都至关重要,能加快系统周期并大幅削减成本。然而在现有的研究工作中,TCP策略问题主要集中在回归测试阶段,但是回归测试处于整个测试过程的末端[6]。由于回归测试时对于本系统缺陷分布情况有非常清晰的概念,但是由于处于末端,对于测试团队的优化毕竟有限。同时测试团队与研发团队往往是单线交流,即研发团队待测系统,测试团队极少参与提高研发团队的开发质量。
因此,可以从测试用例执行策略和测试结果反向优化开发策略两个方面展开研究,并提高系统可靠性。测试用例执行顺序问题是测试执行策略中非常重要的部分,在测试项目中持续优化测试用例执行顺序可以提早发现潜在的缺陷。同时由于测试团队对于项目整体的理解更为透彻,对缺陷的总体分析可以帮助研发团队在类似问题上处理地更为妥善。测试团队在需求分析阶段的有效介入,将从源头上提高系统的质量和可靠性。
1 测试执行策略优化
测试中的关键问题是第一时间发现被测系统不符合规范要求的内容。测试经理在测试规划时是通过大量的测试用例保证测试的覆盖率。持续优化测试用例执行顺序是在保障测试覆盖率的同时,合理地安排测试用例地执行顺序,即TCP问题。文章提出将项目测试分为三个阶段,在项目测试的初期、中期、后期三方面分别进行优化TCP,最终优化整个测试执行策略。
如图1 所示,项目测试初期,分析测试用例的历史数据得到测试用例的执行潜在价值,优先执行潜在价值高的测试用例。比如在其它项目中执行某些用例时,发现了系统不符合规范要求的部分,并提交了缺陷。在新的测试用例执行时,应首先执行这类测试用例以便快速发现系统缺陷。项目测试中期,分析本项目当前缺陷情况得到各个系统功能模块的缺陷发生概率。优先执行缺陷分布较多的功能模块相关的测试用例。项目测试后期,即回归测试阶段,需结合各个系统功能模块在本项目和历史项目中的缺陷发生概率,在保证一定回归比率的情况下,综合考虑本项目和历史项目的分析,优先回归测试缺陷发生概率较高的模块。
2 需求分析优化
项目测试工作通常被安排在项目研发工作之后,测试团队的主要工作也仅仅是将测试结果中发现的缺陷情况报告给研发团队,并没有对缺陷情况进行分析,可能使得类似的缺陷在不同的项目中反复出现。因此测试团队在提供测试报告的同时,对各个功能模块中所发现的缺陷进行分析,并在新项目立项初期给出系统模块开发时的缺陷概率,帮助研发团队在需求分析阶段重点考虑高缺陷概率的模块开发和模块间的协作,从源头上降低缺陷发生的概率。测试团队与研发团队的双向反馈将优化产品设计的需求分析阶段,提高系统的可靠性,如图2所示。
图2 测试团队和研发团队双向通道
3 结束语
文章从优化测试用例执行顺序和测试结果优化需求分析两个方面,阐述了现在系统开发中提高系统可靠性的重要方法。测试数据的管理是一座金矿,对测试数据的深入分析可以让整个测试过程不再是静止的,而是可以动态调节以应对更复杂的情况,同时深入分析测试结果也可以建立测试研发的双向通道,形成良性循环。最终可以超预期地提交高质量的系统,节约运营成本,完成市场抢占。
参考文献
[1]K.Krishna Murthy, Janardhana S Channagiri, "test data management: Enabling reliable testing through realistic test data"Building Tomorrow's Enterprise, Oct 2009.
[2]陈翔,陈继红,鞠小林,等.“回归测试中的测试用例优先排序技术述评”[J].系统软件与软件工程,2013(8).
[3]潘伟丰,李兵,周晓燕,等.“基于错误传播网络的回归测试用例排序方法”[J].计算机研究与发展,2016(3).
一、策划书名称
尽可能具体的写出策划名称,如“×年×月××公会××活动策划书”,置于页面中央,当然可以写出正标题后将此作为副标题写在下面。
二、活动背景 :
这部分内容应根据策划书的特点在以下项目中选取内容重点阐述;具体项目有:基本情况简介、主要执行对象、近期状况、组织部门、活动开展原因、社会影响、以及相关目的动机。其次应说明问题的环境特征,主要考虑环境的内在优势、弱点、机会及威胁等因素,对其作好全面的分析(SWOT分析),将内容重点放在环境分析的各项因素上,对过去现在的情况进行详细的描述,并通过对情况的预测制定计划。如环境不明,则应该通过调查研究等方式进行分析加以补充。
三、活动目的、意义和目标:
活动的目的、意义应用简洁明了的语言将目的要点表述清楚;在陈述目的要点时,该活动的核心构成或策划的独到之处及由此产生的意义(经济效益、社会利益、媒体效应等)都应该明确写出。活动目标要具体化,并需要满足重要性、可行性、时效性。
四、资源需要:
列出所需人力资源,物力资源,包括使用的地方,如教室或使用活动中心都详细列出。可以列为已有资源和需要资源两部分。
五、活动开展:
作为策划的正文部分,表现方式要简洁明了,使人容易理解,但表述方面要力求详尽,写出每一点能设想到的东西,没有遗漏。在此部分中,不仅仅局限于用文字表述,也可适当加入统计图表等;对策划的各工作项目,应按照时间的先后顺序排列,绘制实施时间表有助于方案核查。人员的组织配置、活动对象、相应权责及时间地点也应在这部分加以说明,执行的应变程序也应该在这部分加以考虑。
这里可以提供一些参考方面:会场布置、接待室、嘉宾座次、赞助方式、合同协议、媒体支持、校园宣传、广告制作、主持、领导讲话、司仪、会场服务、电子背景、灯光、音响、摄像、信息联络、技术支持、秩序维持、衣着、指挥中心、现场气氛调节、接送车辆、活动后清理人员、合影、餐饮招待、后续联络等。请根据实情自行调节。
六、经费预算:
活动的各项费用在根据实际情况进行具体、周密的计算后,用清晰明了的形式列出。
七、活动中应注意的问题及细节:
内外环境的变化,不可避免的会给方案的执行带来一些不确定性因素,因此,当环境变化时是否有应变措施,损失的概率是多少,造成的损失多大,应急措施等也应在策划中加以说明。
八、活动负责人及主要参与者:
注明组织者、参与者姓名、嘉宾、单位(如果是小组策划应注明小组名称、负责人)。
注意:
1、本策划书提供基本参考方面,小型策划书可以直接填充;大型策划书可以不拘泥于表格,自行设计,力求内容详尽、页面美观;
2、可以专门给策划书制作封页,力求简单,凝重;策划书可以进行包装,如用设计的徽标做页眉,图文并茂等;
3、如有附件可以附于策划书后面,也可单独装订;
4、策划书需从纸张的长边装订;
5、一个大策划书,可以有若干子策划书。
网站策划书策略
一、策划前的思考
很多朋友,特别是个人站长,经常都是大脑一热就建了个网站,新鲜两天半后,又放弃了,最后往往自己被把自己打败了。为了避免这种情况,在策划网站前,我们一定先要想清楚一些问题!
1、建站的目标。是纯兴趣做着玩玩,还是为了赚钱。
2、精力有多少。是利用业余时间玩玩,还是全身心的投入。
3、投资有多大。是拿点零花钱随便搞搞,还是把身家性命都赌上。
4、人员有多少。是一个人、三五好友组成的小团队还是公司运营。
5、能坚持多久。这条主要是针对投资较大,以盈利为目的的。在不赚钱的情况下,能坚持多久?
二、确定大概方向
这里说的方向类型,是指网站大概涉及到的领域,就是你想从那方面入手,IT、音乐、还是其它领域。这里笔者提醒大家尽量选择自己熟悉的、能玩得转的领域,否则不但做起来非常吃力,而且很难成功!其实这步看起来容易,但并不容易。因为想一下就选择到正确的方向太难了,这不但需要对整个互联网有大概的了解,还要对所在领域有深刻的认识,同时还要掌握网站运营的相关知识。这些东西,都是需要时间去积累、沉淀的,否则很难有正确的判断。
三、数据调查分析
确定方向后,我们还需要做一些调查,搜集一些数据。所谓知已知彼,百战不殆。这方面包括的内容很多,比如受众分析、市场现状、竞争对手分析等,不同类型的站,需要搜集的东西是不同的,这个主要根据自己需求来。这里列几个比较通用的项目:
1、搜集同领域内做的最好的十个网站。
2、分析他们的网站数据。包括排名、注册会员数、栏目数(包括具体名称)、文章数、每天更新量等。
3、分析他们的背景。包括建站时间、是否公司运营、团队规模等。
4、分析他们的优缺点。比如他们的特点是什么、成功的地方在那里、失败的地方在那里等。
5、最好列一个EXCEL表出来。
这些数据的作用很大,能够帮助我们在接下来的工作中正确分析形式,做出判断。所以切记切记,前期的相关调查和数据一定做细。
四、明确用户定位
用户定位说白了就是你的网站到底要干什么,为那些用户提供什么内容和服务。这个是至关重要的,如果你的定位和面向的用户群不明确、涉及的方面竞争太激烈、提供的内容不吸引人,肯定是没有什么前途可言的。所以这步一定要想细、想透,围绕用户需求来想,多从不同的角度去想。建议大家思考时拿一张纸和一去笔,把想到的东西一条一条写下来。这里强调一下,做网站一定不要贪多、贪大,要禁得住诱惑,不要动不动就说要做门户。如果能把一个很小的点做好、做精,也是大网站。
五、确定内容服务
定位确定后,开始确定提供的服务,也就是栏目设定及功能模块的设计。()这些主要还是基于用户需求来考虑,尽量体现出特色二字。由于此条涉及的东西很多,所以笔者会专门撰文说明。
六、真能玩得转吗
通过以上的思考过程,网站大概的架构已经在脑海里成形了。但是我们在凭空想像时,总是把事情想的非常完美,而脱离实际,所以此我们还需要再思考一下“刚刚策划出来的东西是否真的能玩得转”!主要从以下几点去思考:
1、网站涉及的领域真的是自己擅长的吗?
2、网站的定位和内容,真的是用户确实需要,而不是自己想像出来的吗?
3、以现有的技术水平,能实现预期的效果吗?
4、以现有的资金情况,能满足网站的需要吗?
5、如果是个人,真的有足够的时间和精力去维护、更新吗?
6、如果是团队或公司,人员足够吗?
7、如果想赚钱,这个站有赚钱的点或是盈利模式吗?
8、一旦失败,能接受后果吗?
七、执行
这个时候是落地实施的阶段了,开始建团队、设计网站页面、程序等,具体的执行过程就不说了。
八、实战
以上只是理论,大家可能会感觉不直观,太抽象,下面笔者来模拟一个网站的策划过程,给大家一个直观的印象。
1、做网站的目的。笔者想利用业余时间,做一个个人网站,投入不大,就是个域名和空间的钱。赚不赚钱无所谓,将来能有所发展最好。涉及到的领域无所谓,关键是做起来别太吃力。
2、确定大概方向。从笔者做过好几年个人站长,现从事互联网行业的实际情况来看,对于网站建设、运营等方便的东西最了解,做起来也最顺手。所以网站大概的方向就确定为站长站,专门为站长服务。
3、数据调查分析。现在我们来了解一些其它站长类网站的现状,目前站长类的网站,做的成功的主要有以下几个:
落伍者:ALEXA排名7147。这是一个社区型网站,整站就一个社区,没有商业化。他的主要特点是有经验的站长比较多,原创的内容比较多。其旗下还有一个站长SNS站。
中国站长站:ALEXA排名5050。这是一个老牌的站长站,知名度非常高,已经公司化运营。最早是以资源下载为主,现在还是他的主打内容,目前资讯方面做的也不错。论坛一般,不如落伍,旗下有一个提供统计服务的站,非常不错。
admin5:ALEXA排名22091,公司化运营。站长站中的后起之秀,内容做的非常不错,深受站长喜爱。
其它:还有其它方面的网站,这里就不细举了。
注:不做个人站长好多年,以上市场分析纯粹瞎写的。
从以上分析可以看出,虽然同类站点很多,但成功的也就这么几家,如果我们不求大,只求精,还是有机会的。
4、明确用户定位。现在我们拿出纸和笔,从不同角度去把网站用户的需求一条一条写出来:从建站的过程可以分为:建站前、建站中、建站后;从运营需求可以分为:SEO优化、赚钱技巧、市场推广、内容建设等;从网站类型可以分为:论坛站长、地方站长、下载站长等。
建站前:主要包含空间的选择、域名的选择、程序的选择、源码的下载等。
建站中:主要包含网页的设计、栏目的设定、内容的建设、一些免费的资源等。
建站后:网站的盈利、网站的推广等。
1、古典风格(豪华富裕)
在装修刚兴起的年代,装修大多追求的是较为豪华富裕的风格。尤其是在20世纪80年代和90年初,室内装修往往是炫耀自己身份的一种特殊形式。业主们会要求把各种象征豪华的设计嵌入装修之中,例如彩绘玻璃吊顶、壁炉、装饰面板、装饰木角线等等,而且基本上以类似于巴洛克风格结合国内存在的材料为主要装饰方式。
2、朴素风格(随心所欲)
20世纪90年代,在一些地区出现一股家装热。由于受技术和材料所限,那时还没有真正意文上的设计师来进行家装指导,因此随心所欲就是当时的最大写照。业主们开始追求一种整洁明亮的室内效果。时至今日,这种风格仍然是大多数初次置业者装修的首选。
3、精致风格(高贵庄重)
在经过近10年的摸索,随着国内居民的生活水平的提高、对外开放的增多,人们开始向往和追求高品质的生活。大约是从20世纪90年代中期开始,人们开始在装修中使用精致的装饰材料和家具,尤其是在这个时候,国内的设计师步入家装设计行列,从而带来了一种新的装饰理念。
4、自然风格(艺术休闲)
20世纪90年代开始的装饰热潮,带给人们众多的装饰观念。市面上大量出现的台湾、香港的装饰杂志让人们大开眼界,以前大家所不敢想像的诸如小花园、文化石装饰墙和雨花石等装饰手法纷纷出现在现实的设计之中。尤其是大家看惯了红榉大量使用所造成的“全国装修一片黄”的装饰现象之后,亲近自然、返璞归真也就成为了人们所追求的目标之一。
5、轻快风格(豪爽大方)
20世纪90年代中期开始,家居的设计思想得到了很大的解放,人们开始追求各种各样的设计方式,其中现代主义、后现代主义等一系列较为完整的设计体系在室内设计中形成。人们在谈及装修时,这些“主义”频繁地出现在嘴边。这种风格基本上以樱桃木作为主要的木工饰面。
6、柔和风格(平稳独立)
在上世纪未本世纪初,一种追求平稳中带点豪华的仿会所式的设计开始在各式房地产楼盘的样板房和写字楼中出现,继而大量出现在普通的家居装饰之中。这种风格比较强调一种较为简单但又不失内容的装饰形式,逐步形成了以黑胡桃为主要木工装饰面板的风格。其中,简约主义和极简主义开始浮出水面。
7、优雅风格(恬静温柔)
这是出现在上世纪未本世纪初的一种设计风格,它基本上基于以墙纸为主要装饰面材、结合混油的木工做法。这种风格强调比例和色彩的和谐。人们开始会把一堵墙的上部分与天花同色,而墙面使用一种带有淡淡纹理的墙纸。整个风格显得十分优雅和恬静,不带有一丝的浮躁。
8、都市风格(独立个性)
进入21世纪,房改的进行,众多年轻的初次置业者的出现,为这种风格的产生注入了动力。年轻人刚刚买了房子,很多都囊中羞涩,而这个时候的房地产基本上又都是以毛坯房(一种不带基本装修的风格)为主,这些年轻人被迫进行了装修的革命。受财力所限,人们开始通过各种各样的形式来强调已经“装修”的观感,其中大量使用明快的色彩就是一种典型的例子。人们会在家居中大量使用各种各样的色彩,有时候甚至在同一个空间中,使用三种或三种以上的色彩。
9、清新风格(轻淡写意)
关键词: 测试用例;前置条件;粒度设计
Key words: test case;pre-conditions;granularity design
中图分类号:TP39 文献标识码:A 文章编号:1006-4311(2012)20-0195-03
0 引言
软件测试是软件能否通向市场的最后也是最重要的一关,手工测试作为一种传统的测试方式,其特点就是简单。但存在很多问题,如大量重复性的工作导致成本较高,人员积极性下降,人员操作失误引起的输入错误等。
针对手工测试的缺点,自动化测试应运而生。但并不是所有的项目都适合引入自动化测试,也不是引入了自动化测试就会提高测试效率,降低测试成本。实际上自动化测试更需要开发和搭建测试框架,设计测试用例,这就意味着成本的投入。
1 自动化测试的设计原则
为了更好的体现自动化测试的优势,当进行自动化测试设计时,需要考虑到当前项目并计划到未来的项目。一个优秀的自动化测试设计,必须具备如下原则:①易于维护性-减少更新修改的工作量;②可靠性-测试结果精确,能够真实反映当前项目问题;③复用性-测试脚本可以复用,包括在未来的其他项目里。
自动化测试中,自动化测试用例是一个重点中的重点,如何设计自动化测试用例是决定自动化测试成败的关键。
2 自动化测试用例的设计
2.1 自动化测试用例设计特点 手工测试用例的执行实施是测试人员,在用例设计中所描述的行为主要使得测试人员能够按照测试设计者的思维去执行测试。自动化测试用例编写者是测试设计师而执行实施是计算机,自动化测试用例设计时必须满足如下两个原则:①测试用例能够体现测试设计师的设计思维,并且尽量提供便捷的方式编写用例,提高测试用例的编写效率;②测试用例能够被计算机所解析。自动化测试用例如果要被计算机所能解析,那么自动化测试用例必须有一套可以计算机识别解析的规则,并且需要涵盖测试用例需要填写的相关元素,尽量降低编写的荣誉和提升编写的效率。
2.2 手工测试用例要素 自动化测试所有活动都来源于手工测试活动,那么用例规则的提炼主要数据源将来源于现实工作中的测试用例。如表1所示手工测试用例。
传统手工测试用例一般涵盖元素:①测试用例名称:区分不同的测试用例。②测试前提条件:这个目的主要是标识执行这个测试用例的之前,必须要完成的事情,这个事情可以是一个测试用例,也可以是其他的事务,比如说环境重置、数据清理等等。可选项。③测试步骤ID:这个目的是标识测试操作的先后顺序。在一个用例中一般都是串行工作的,必需项。④测试的操作路径:这里主要描述系统的操作过程,使得被测系统进行到可以检测的位置或者检测状态,必需项。⑤测试数据:这里主要指的过程数据,即使得测试用例能够通过测试数据的驱动,使得被测系统进入到可检测的状态,可选项。⑥期望结果:系统进行到检测状态后,系统应展现的出来的行为而应该出现正确的结果,如果系统所展现的结果与期待结果不符,标识为系统的缺陷。必需项。
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)06-1231-04
计算机的应用越来越多地深入到人们的日常生活中,然而计算机软件还远没有达到零错误的要求。提高软件质量已经成为软件工程领域亟待解决的重要问题。软件测试,作为一种提高软件质量的重要手段而备受重视。在软件的开发生命周期中,软件测试是一个耗时耗力的过程,已成为软件开发的瓶颈之一[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.
测试一 自信心爆棚还是自卑心笼罩?
1.和朋友相比,你觉得自己对父母更孝顺吗?
2.和其他家庭成员相比,你是否觉得自己对家庭的贡献最大?
3.你的工作取得了成功,主要原因是你努力勤奋或者天赋出众吗?
4.面对难题,只要你愿意,就一定可以找到解决方案吗?
5.购物时,你总能买到价廉物美的东西吗?
6.你觉得自己的衣着品位比朋友高一筹吗?
7.玩牌时,你会指责牌友吗?
8.你觉得自己要比大多数人聪明一点点吗?
9.要是你来做老板,你会比他干得更好吗?
10.你对社会焦点问题的看法往往是符合社会主流观点的吗?
这一组题目测试的是你的交际心理,诊断如下:
70-100 亚健康
你在人际交往中处于超强自信状态。在获得成绩以后,你会把功劳归于自己,乐于接受各种荣誉,并认为这是理所当然的;在遭受挫折时,则把失败归咎于他人以推托责任。你认为自己看待世界的方式是最正常的,别人也应该和你保持一致。你觉得自己的才智和品德是异乎寻常的,一些很困难的事情,即使别人都失败了,你也可能获得成功。
你要认识到:
1.不管你是不是天才,人人都讨厌永远不会犯错,动辄对别人指手画脚的人。
2.每个人的思想观点和生活方式都值得尊重,不要把自己的标准强加于人。
新年调理计划:
在新的一年里,你可以完成以下三件事
1.每次做完一件事,就把一张白纸一折为二,在一边写上自己的原因,在另一边写上别人的原因,这样有助于你客观地评价自己。
2.每天自嘲三次,嘲笑别人是刻薄,嘲笑自己就是幽默,先拿自己开涮吧!
3.给自己的交际活动录一段音,找出那些自我膨胀的话语,如“这事我在行”,“要是我来做就没问题了”,“这件事不怪我”,“你怎么就不能像我一样呢”……努力“消灭”它们。
35-65 健康
恭喜!你对自己的评价是客观的,在交际中你总能摆正自己的位置。
0-35 亚健康
你在人际交往中处于不自信状态。你总是认为别人比自己强,因而养成了万事依赖他人的习惯。在任何场合你都依附别人的观点,没有自己的想法,有时难免被人利用。你常常觉得自己一无是处,心情非常沮丧,但独当一面的机会来临时,又会犹豫不决,最后总是临阵脱逃。
你要认识到:
1.天生我材必有用,你肯定有比别人强的方面。2要对自己充满信心,否则别人怎么会对你有信心呢?
新年调理计划
在新的一年里,你可以完成以下三件事:
1.在征求家人、朋友的意见后,对自己的才能做一个正面评价,然后写下来,情绪低落时看一看,给自己一个良好的心理暗示。
2.每天独立完成一件事,事无大小(可以是购物、看电影、逛街),但要坚持。
3.每次完成一个工作都小小庆祝一下,请客吃饭或者分发一些小礼物,和别人分享成功能使你自信十足,并且对更大的成功充满希望。
测试二 交际过度还是交际匮乏
1.每次在街上遇到一个熟人,你都要聊十分钟以上吗?
2.参加婚宴,餐桌上很沉闷,你会主动挑起一个话题吗?
3.一个人坐长途车,你会主动和邻座聊天吗?
4.每次同学聚会你都参加吗?
5.每周都要和朋友或同事共进晚餐吗?
6.你每天拨打的电话超过10个吗?
7.出门忘带手机就浑身不自在吗?
8.别人给你的有趣E-mail你每次都转发吗?
9.经常给别人做媒吗?
10.在集体活动中做过主持人吗?
这一组题目测试的是你的交际心理,诊断如下:
70-100 亚健康
这一组题目测试的是你的交际心理,诊断如下:你热情外向,口齿伶俐,人缘很好,是一个天生的外交家。在陌生的环境中,总可以在第一时间交到新朋友。每一次朋友聚会都不能离开了你,否则各种活动都会逊色不少。但你投人在社交活动中的精力和时间过多了一点,常常被人讥笑为“言语的巨人,行动的侏儒”。
你要认识到:
1.“交际过度”会使你失去和家人的情感交流,同时会使你觉得时间总是不够用,经常不能做自己喜欢的事。2、有时候沉默是最有力的交际武器,孤独也是可以用来享受的。
新年调理计划
在新的一年里,你可以完成以下三件事:
1.独身旅游一次,多欣赏自然历史之美妙,这是一种和天地、历史、文化的交际。
2.每月至少阅读一本书,这是和古今中外名人的交际。
3.每天回顾做的事情和说的事情,不断总结,让做实事的时间超过说空话的时间。
35-65 健康
恭喜!你的交际态度是合宜的,面对不同交际场景你总能找到合适的交际态度。
0-35 亚健康
你是一个沉默寡言的人,喜欢孤独,也许沉溺于虚拟的网络世界。你可能认为家人最重要,家是最让人舒服的地方。朋友很少,从不公开表达自己的意见,厌恶参加社交活动。别人误解你,你也懒得和他们解释。在公众场合往往更显得紧张,一开口经常结结巴巴。
你要认识到:
1.朋友多一个好一个,即使是泛泛之交,也随时有可能为你提供重要的帮助。
2.请相信你的想法很有意思,和别人交流意见很重要。
新年调理计划
在新的一年里,你可以完成以下三件事:
1.参加更多的集体活动,比以往至少多一倍。更重要的不是次数,而是要在每一次活动中寻找属于自己的乐趣。
2.交更多的朋友,在通讯录上至少增加20个人的联系方式。
3.每次集体讨论都大胆地说出自己的想法。
测试三 语无伦次和索然无味?
1.在公开发言的时候,是不是经常声音颤抖、不知所云呢?
2.在参加讨论时,是不是想开口但总是找不到好的时机?
3.和别人沟通时,常常因为表达不清而遭人误解吗?
4.经常听不懂别人的言外之意,以至于搞错别人的用意吗?
5.每次聊起自己感到有趣的事情,别人总是不以为然吗?
6.回应自己不感兴趣的邀请时,经常得罪邀请者或者只好违心地:
7.经常自以为说的是真心话却反而得罪人吗?
8.和陌生人交往,经常说不上几句就冷场吗?
9.经常被推销员打动,买下一些事后后悔的东西吗?
10.别人对你的评价是“人还不错,就是不会说话”吗?
这一组题目测试的是你的交际心理,诊断如下:
60-100 亚健康
这一组题目测试的是你的交际心理,诊断如下:你为说话问题而苦恼,经常说错话,弄错别人的意思。不知什么原因,你总是在不恰当的场合说出不恰当的话语,因而成为别人嘲笑的对象。在你嘴里,简明的道理乱成一团浆糊,精彩的经历让人摸不着头脑,好玩的笑话变得味同嚼蜡。
你要认识到:
1.说明事件要按照时间顺序,注意精彩的细节:说明道理要按照因果顺序,注意逻辑连贯:说明计划要按照轻重顺序,注
意依次展开。2.有些话语是有言外之意的,它们比字面意义更重要。
新年调理计划
在新的一年里,你可以完成以下三件事:
1.每次游玩归来都把最精彩的事件告诉别人,不妨打一下腹稿,一次失败就换一个人再试,直到听众听得津津有味为止。
2.观看电视访谈节目,阅读访谈文章,领会其中的问答技巧,在潜移默化中提升交际水平。
3.找一些情景喜剧或话剧的剧本,把一些有弦外之音的对话找出来。在聆听别人交谈时,注意捕捉这样的隐含意义:在自己说话时,也尝试着使用这样的含蓄语言。
0-60 健康
首先要恭喜你已经拥有了良好的言谈技巧!
你要认识到:
交际技巧没有最好,只有更好,如果你还需要进一步提高的话,可以从两方面人手:1提高公开演讲能力,虽然对公开演讲感到紧张是人之常情,但要成为一个社交家,这是必须要过的一关。2.提高身体语言表达能力。有很多意见并不需要滔滔不绝的宏篇巨论才能表达,很多时候,只要一丝微笑、一个手势、一种身姿就行了。
新年调理计划
在新的一年里,你可以完成以下三件事:
1.多欣赏话剧和哑剧,话剧演员的面部表情和哑剧演员的身体动作完全脱离语言就“说出”了复杂的意思,这是最高级的