软件测试工具

随着软件测试的地位在软件开发过程中逐步提高,重要性逐步显现,测试工具的应用也已经成为了普遍的趋势。本文主要对软件测试工具的发展进行了介绍,一起来看

软件测试是软件工程中的一个重要过程,也是保证软件质量的重要手段。随着软件测试的地位在软件开发过程中逐步提高,重要性逐步显现,测试工具的应用也已经成为了普遍的趋势。

目前用于测试的工具比较多,基本上覆盖了整个测试周期。其中国际主流的HP系列测试工具、IBM系列测试工具、Segue系列测试工具及Compuware系列测试工具占据了市场的90%以上。按照测试方法及测试目的,我们可以将测试工具分为白盒测试工具、黑盒测试工具、测试管理工具等。

白盒测试工具一般是针对被测源程序进行的测试,测试所发现的故障可以定位到代码级。根据测试工具工作原理不同,白盒测试的自动化工具可分为静态测试工具和动态测试工具。

目前普遍使用的该类测试工具主要有Parasoft公司的Jtest、Jcontract、C++ Test,Compuware公司的BoundsChecker、TrueTime、FailSafe等,这类工具可以对C/ C + +、Java 等语言的软件源代码进行静态分析,内置标准的编码规则检查,以及功能确认、接口测试、覆盖率分析、性能分析等。

黑盒测试工具适用于黑盒测试的场合,黑盒测试工具包括功能测试工具和系统测试工具。黑盒测试工具的一般原理是利用脚本的录制和回放,模拟用户的操作,然后将被测系统的输出记录下来同预先给定的标准结果比较。黑盒测试工具可以大大减轻黑盒测试的工作量,在迭代开发的过程中,能够很好地进行回归测试。

目前常见的功能测试工具有HP公司的Winrunner、QuickTest Professional,IBM公司的Rational

Functional Tester,Segue公司的SilkTest,Compuware公司的QARun等,这类工具主要为用户提供了符合所有主要应用软件环境的功能测试和回归测试的自动化测试功能。

常见的性能测试工具有HP公司的LoadRunner,IBM公司的Rational Performance Tester,Segue公司的SilkPerformer,Compuware公司的QALoad等,这类工具主要通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,帮助测试人员和性能工程师验证系统的性能。

测试管理工具主要用于对测试进行管理。一般而言,测试管理工具对测试计划、测试用例、测试实施进行管理,并且,测试管理工具还包括对缺陷的跟踪管理。

常用的测试管理工具主要有HP公司的Quality Center、IBM公司的Rational Test Manager,Segue公司的SilkCentral Test Manager等。

除了上述测试工具外,还有一些专用的测试工具,例如,针对数据库测试的TestBytes,对应用性能进行优化的EcoScope等。

近年来,随着测试技术的逐步发展,加上测试工作者及测试厂商的努力,测试工具在软件行业中得到了较为广泛的应用。在2009年下半年由工业和信息化部组织的全国范围内对软件企业所进行的调研数据来看,80%以上的软件企业都使用了自动化测试技术。

虽然软件测试工具得到了很大的发展,但就工具的使用情况来看,目前大多数公司是使用性能测试工具进行性能测试。由于国内的软件开发过程不是很规范,软件产品相对不够成熟,大多数软件往往不具备自动化功能测试工具应用的条件。因此,功能测试工具大规模的应用还需要一定的时间。

据山东省软件评测中心多年科研及实践分析,未来软件测试工具发展将呈现以下趋势:传统的软件测试生命周期仍在指导着当前软件测试的组织和实施,人们对于软件测试过程模型的研究并没有革命性的改变,自动化测试从技术到工具还没有取得与其宣传相匹配的实际功效。如何解决“完善的测试用例、更快的开始并结束测试、更多的报告软件缺陷”这些问题之间的关系,这将是未来测试技术发展的重点。

在此基础上,现有的测试工具也将进行更新换代。下一代的测试工具应当提供怎样的功能?它们需要内嵌高级的测试编辑器,并通过这个编辑器来支持界面测试的自动完成功能以及测试代码的重构和分析么?它需要将测试结果可视化么? 或者以自学习的方式来生成测试用例?

除此之外,随着软件行业的不断发展,大量的新技术在软件开发中得到应用,为了满足日益复杂的软件系统的测试需要,软件测试技术也随之不断的发展,越来越系统化,越来越专业化,同时软件测试工具也将在以下方面得到进一步的发展:

分布式测试工具:随着网络技术的不断发展,大量分布式系统被部署在网络中,常见的如Web应用、Web Service等。分布式系统不同于一般软件系统,它通常由物理分布的多个子系统组成,这些子系统通过相互间的协作完成计算任务,具有物理分布、并发访问、时序敏感、平台异构等特点。

此外,分布式系统中的诸多子系统在触发方式、工作方式等方面往往也不属于同一类型,比如,通过网络协议传递消息的子系统和利用本地接口进行方法调用的子系统等。因此,对分布式系统的测试也不同于一般软件系统的测试,需要采用分布式测试工具。随着越来越多的领域活动依赖于分布式应用,分布式测试将受到人们更大的关注,测试系统实现技术也将不断发展成熟,分布式测试工具将成为下一步测试工具的重点发展方向。

云测试工具:云测试是基于云计算的一种新型测试方案,云计算通过网络以按需、易扩展的方式向用户交付所需的资源,包括基础设施、应用平台、软件功能等服务。

作为软件测试工具(包括功能测试工具、性能测试工具等)服务商提供的测试平台,软件开发企业在其平台上进行相关自动化测试、不再在本地计算机上安装和使用这些工具。这种无须本地安装和配置测试环境,在远程测试平台上进行测试的方式被称作云测试。目前云测试平台还处于实验阶段,随着云计算技术的逐步发展,云测试技术也将不断发展完善。

安全性测试工具:安全性测试工具以自动化或半自动化的方式验证系统安全功能运行是否正确、安全机制是否有效和查找潜在的安全漏洞。随着计算机网络的迅速发展和软件的广泛应用,软件的安全性己经成为备受关注的一个方面,渐渐融入我们的生活,成为关系到金融、电力、交通、医疗、政府以及军事等各个领域的关键问题。

软件安全漏洞造成的重大损失以及还在不断增长的漏洞数量使人们已经开始深刻认识到软件安全的重要性。随着安全性测试技术的深入研究,安全性测试工具也将是测试工具的重点发展方向。

本文简单分析了国内软件测试的现状,认为业内对软件测试的重视程度仍然普遍不足。作者一并介绍了几种测试工具的选择考虑点,以供读者参考。

AD:

2013大数据全球技术峰会课程PPT下载

国内软件测试现状

近期国家对软件行业也给出了很多鼓励政策,软件及相关行业在中国得到了很大的发展,我们也看到了一大批软件企业在国际中也占据了很重要的地位。不过我们发现很多软件公司在重视代码开发的同时,却没有把代码质量跟上去,忽略了测试在整个项目工程的重要性。

可是测试真的是不重要,只是开发的附属品吗?我们列举一个例子说明:美国微软,该公司的开发人员和测试人员的比例是1:1,也就是说每个开发人员会配备一名测试人员,而且这名测试人员都是具有和开发人员一样的开发能力的,可以进行大规模自动化测试。微软重视测试的原因也很简单,因为在宽带普及以前,很多更新都是靠邮寄光盘完成的,更新的成本非常高,一定要在出厂前严把质量关。对于一个纯软件公司是如此,那么我们的一些有硬件产品的公司,如果产品是因为软件上面出现了重大缺陷,大规模硬件召回的成本是不是会更高呢?目前在国内,很多的企业也认识到了测试的重要性,可是只是停留在认识阶段,只是做做简单的黑盒测试,功能性测试等。有的负责人也许会谈到,我们的产品是基于互联网产品,软件大部分都是在服务器端,更新的成本大幅降低。那么我们就更应该做好产品,让广大的客户端用户对产品有更好的用户体验,给网友们更好的服务,而不是一味的借助于网络更新,在使用中发现错误后去弥补。最近一次的暴风影音的“召回门”就是一个很好的说明。

对于一些正在成长中的中小企业,由于人力资源有限,目前还没有比较正规的测试,我们还可以理解。可是一些已经形成规模,有一定研发力量的大型企业,是很有必要建立一整套完整的测试流程来完善公司的产品。但是在和大公司负责人沟通得知和我们的期望值还是有一定差距的。他们可能花了大量的人力,物力来通过 CMM,ISO认证,却不能踏实的做好测试。在他们眼里,认证才是一个公司的硬实力体现,测试则是一个可有可无的过程。这一点让人有点黯然,在中国的快餐市场上,我们该如何推动我们软件测试,不是靠你和我,而是靠全民总动员,大家要培养这个意识,把这个意识和行动穿叉在我们研发的全部过程中,难道我们还做不出好的产品吗?

这让我马上我想到了已经和联通签约马上进入中国的IPhone,可以说这一款手机改变了整个世界对手机的使用习惯。IPhone的成功,个人观点,软件质量的稳定性可靠性是最为关键的一票。

在我们和客户聊到测试的时候,他们说也是有心无力,只能通过人为的做一些简单的测试来应付。于是我们会给他们介绍一些自动化的测试工具的时候来协助测试,这些企业普遍表现了对这次测试工具的兴趣。不过,这些工具的价格立即扼杀了他们抓测试的信心,他们无法接受一张光盘的叫价超过一辆汽车,他们更喜欢实物。可是他们忘了,软件的价值不是体现在一张光盘上面,而且体现在这个软件能给企业,给人们生活带来的益处。

诚然,价格,技术和企业愿望是目前测试在中国走的很艰难的原因。目前一些测试培训机构也是在积极培养专门的测试人才。我们也希望有国内的企业能做出我们自己比较好的测试工具来打破测试工具昂贵的价格坚冰。我相信有那么一天中国的软件质量一定会在世界上有属于自己的一席之地。

测试工具简评

在这里,也结合我个人的经验,按照开发V模型来分别讲讲几个对应的自动化测试工具。

在软件开发初级阶段,对应于代码做静态分析。目前很多的企业都没有做静态分析,甚至还有企业不太明确静态分析。在这里给大家推荐的工具是QAC和PC-lint。

PC-lint在国内的用户基础比较好,这个工具出来的比较早,由一个大学教授编写,而且价格也不贵,只有命令行模式是它的局限性,检查的代码规则不多。目前有部分企业用这个工具做代码静态分析。

QAC这个工具进入国内也有一段时间,不过推广力度不是很大,目前这个工具在外资企业的研发部门的推广的比较好,国内的一些大企业和一些测试评测中心也在使用该工具,该工具使用起来比较方便,界面形式,也支持命令行模式,还有是MISR的标准制定者之一,所以比较有权威性,专业性很强,在国内也有很好的技术支持。价格相对来说就比较贵了。

然后动态单元测试这块,可以看看parasoft旗下的几款产品,有分别针对java语言的,C++语言的版本。该工具使用起来还比较方便,是基于Eclipse框架开发的,界面友好,功能也比较强大,在上海有office.当然就是价格不太让人接受。

当然如果只是要做内存泄露这块,可以了解一下parasoft旗下的一个工具insure++。这个工具可以实施监控内存的一个使用情况。

如果是做嵌入式这块单元/集成测试,用户与也可以使用IPL的Cantata++和IBM的RTRT,这两个工具在针对嵌入式这块的单元/集成测试比较强大,特别是Cantata++还支持自动的打桩,封装,这个也是该工具的一个亮点。

上篇中提到要对这几个概念做说明的,这这里作个补充:就CANTATA++举例:

1)打桩是对被测函数外部调用的替代,是用来对没有开发的或用户开发的模块进行模拟。对系统函数,由于Cantata++已经作了移植,都可直接使用,不用也不能打桩。不能打桩时,接口数据无法验证。

2)使用封装的before功能,可检测对外部调用的参数数据、全局数据是否满足测试时的要求;并且可以修改参数、全局数据的值,使得外部函数按照测试的要求运行。例如嵌入式应用中经常将一个数据转换为指针,然后使用指针操作相关的内存数据,但在主机环境测试时,由于内存保护,指针指向的地址为空,程序就飞了。在这种情况下就可以使用before功能定义变量,将变量的地址传送给被调用的函数,从而完整地验证功能和覆盖率。

3)使用封装的after功能迫使外部调用返回很难实现或无法达到的条件,从而使被测模块的功能和分支都得到验证。如在主机环境下对malloc函数封装,在一般情况下是无法实现返回空指针的结果。利用

Cantata++封装的after功能修改返malloc函数返回值为NULL指针,这样被测函数的错误处理功能得到验证。

如果需要对代码做一个质量度量,推荐使用一个质量度量工具McCabe,这个工具不需要执行代码就可以完成代码走查,对代码有一个深层次的代码度量,提供多达几十种度量。操作起来很方便,只是要熟悉这个产品,需要对产品有一定的理解,对项目管理有很大的帮助。

至于后面的版本管理工具,CVS,VSS,我在这里就不做太多的介绍。

软件测试是通过找出缺陷和问题评估产品质量并间接改进产品质量的手段,它是从一个错误陈述(“系统能正常运行”)开始,从无限种可能中选出与该陈述矛盾的输入。

AD:

2013大数据全球技术峰会课程PPT下载

软件测试是软件开发的重要、必要部分,是通过找出缺陷和问题评估产品质量并间接改进产品质量的手段。从软件工程的观点看,预防程序问题要比改正问题重要得多,因此,必须首先把软件测试看做是检验预防程序错误的机制是否有效的主要手段,同时又是找出程序异常的手段。

从一段对话谈起:

甲、乙、丙三人对“所有奇数都是质数”这个假设进行测试。

甲说:“3是质数,5是质数,7是质数。看起来这个假设没错。”

乙说:“3是质数,5是质数,7是质数,9是质数,11是质数„„”

丙说:“错!9就是一个非质数奇数。”

软件测试就是从一个错误陈述(“系统能正常运行”)开始,从无限种可能中选出与该陈述矛盾的输入。必须避免甲犯过的错误(没有验证合适的值),也要避免犯乙犯过的错误(验证了合适的值,但是没有发现矛盾之处),需要像丙那样,用最小工作量找出合适的反例。

IEEE把软件测试定义为:从通常是无限大的执行域中恰当地选取一组有限测试用例,对照程序已经定义的预期行为,动态地检验程序的行为。

从这个定义可以看出软件测试的四个特点:首先是“动态”,软件测试总要通过一组输入执行程序。但是,单靠输入值并不总能充分地确定一个测试,因为对于复杂、非确定的系统,由于系统会处于不同的状态,因此对于同样的输入可能产生不同的响应。所以,特定的输入通常还要指定系统的特定状态。其次是“有限”,在测试中实际能够观察的执行数量是有限的。测试永远都意味着有限资源和计划进度与本质上是无限测试需求之间的折衷:正是这种矛盾带来了大家经常提到的技术(测试充分性评判准则)和管理(测试工作量估计)两个方面的测试问题。接着是“选取”,很多测试手段的本质区别就是如何选择有限的测试集。针对特定条件确定最合适的选取准则是一个非常复杂的问题,在实践中需要运用风险分析技术和测试

工程专门知识。最后是“预期”,必须能够确定所观察到的程序执行输出是不是可接受的,否则测试工作就是无用的。

软件测试通常要在不同层次上执行,大体上划分为三大阶段:单元测试、集成测试和系统测试。单元测试检验独立软件模块的机能,软件模块可以是独立子程序,也可以是由紧密相关的数个单元组成的较大构件,单元测试一般需要对被测代码进行访问并借助调试工具的支持,并且可能需要被测代码编程人员的介入;结构化软件系统。现代的集成测试策略更多是结构驱动的,这意味着对软件部件或子系统的集成是基于确定的功能线程,因此集成测试是一个连续活动,在每一阶段测试人员必须抽象出低一级的情况并集中于正在处理的这一级的状况;系统测试关注的则是整个系统的行为,它需要将系统与非功能性系统需求进行比较,非功能性系统需求指系统的安全性、速率、精确性、可靠性等。系统与其它软件、应用程序、硬件设备或操作环境的外部接口评估也在系统测试中进行。

测试技术分类

从软件生产发达国家来看,20世纪60年代,软件测试主要以代码调试为主;70年代主要以演示软件系统的正确性为主;80年代到90年代中期,主要以检查程序错误为主;90年代中期以后,软件测试开始更注重软件质量特性的整体评估。目前软件测试最主要的目标是评估软件功能,但一般也要测试软件的非功能属性。

目前应用于软件测试领域的技术有很多,而且差别很大,大致有两种分类方法。

第一种是按测试的生成来源划分,即基于测试人员的直觉和经验(即兴测试)、需求规格说明(包括等价类划分、边界值分析、判定表、基于有限状态机、形式化语言转换和随机测试等)、代码结构(基于流程图、调用关系图等参考模型、基于控制流标准、基于数据流的标准)、发现的错误(以过去经验为基础的错误推测法、增加一个被测程序变种的变异测试)、被测程序的使用领域(操作剖面、软件可靠性工程测试)和被测程序类型(面向对象、基于构件、网站、GUI、并发程序、协议一致性、分布式系统、实时系统、科学计算软件测试)的测试技术。

第二种是经典的分类方法,即黑盒测试和白盒测试。依赖于被测软件设计及编码信息进行的测试称为白盒测试(基于代码测试的参考模型、基于控制流标准、基于数据流标准和变异测试等),只依靠被测软件输入/输出行为而没有关于输入/输出之间信息状况的测试称为黑盒测试(等价类划分、边界值分析、判定表、基于有限状态机、源于形式化需求规格说明、错误推测法、随机测试、操作剖面和软件可靠性工程测试等)。 在实际测试中,往往综合采用这些技术。

测试过程有章可循

过程是一组把输入转换为输出的相关活动。不同层次上的测试活动必须与人员、工具、政策、度量一起组织于一个良定义的过程中,这一过程是软件生命周期的完整组成部分。测试过程需要加以控制并进行持续改进。

软件测试过程的决定性因素是人。对于成功的测试来说,一个必要条件是人员对测试活动所采取的积极和相互协作的态度。另外,应该使软件产品涉及的所有人员都认识到:及早发现软件错误是大家共同的目标,而不仅仅是测试人员的责任。

文档是测试过程规范化的一个完整组成部分。IEEE 829完整描述了各种测试文档、文档间关联及文档与测试过程间的关联。测试文档包括测试计划、测试设计说明、测试过程说明、测试案例说明、测试日志和测试事件或问题报告等。用于测试过程控制与改进的度量包括:设计的测试用例数、执行的测试用例数、通过的测试用例数、失败的测试用例数等。

测试管理的一个关键性任务是决定什么样的测试是充分的,某个测试阶段何时可以终止。对此,充分性度量和错误密度估价、操作可靠性评估都可提供有益支持,但只有这些还不充分。决策还应考虑潜在的遗留失效可能造成的损失和风险,并将之与进一步测试所需成本进行对比。为使测试和维护工作有组织、成本效益高,应将各测试手段系统化地加以重用。为此,应在测试的各个层次,对测试脚本、测试用例和预期结果进行精心定义并记录。

用于特定环境、特定类型程序的测试方案以及决策动机,构成了测试模式。测试模式本身也可文档化,并可重用于以后的类似项目。

随着软件测试的地位在软件开发过程中逐步提高,重要性逐步显现,测试工具的应用也已经成为了普遍的趋势。本文主要对软件测试工具的发展进行了介绍,一起来看

软件测试是软件工程中的一个重要过程,也是保证软件质量的重要手段。随着软件测试的地位在软件开发过程中逐步提高,重要性逐步显现,测试工具的应用也已经成为了普遍的趋势。

目前用于测试的工具比较多,基本上覆盖了整个测试周期。其中国际主流的HP系列测试工具、IBM系列测试工具、Segue系列测试工具及Compuware系列测试工具占据了市场的90%以上。按照测试方法及测试目的,我们可以将测试工具分为白盒测试工具、黑盒测试工具、测试管理工具等。

白盒测试工具一般是针对被测源程序进行的测试,测试所发现的故障可以定位到代码级。根据测试工具工作原理不同,白盒测试的自动化工具可分为静态测试工具和动态测试工具。

目前普遍使用的该类测试工具主要有Parasoft公司的Jtest、Jcontract、C++ Test,Compuware公司的BoundsChecker、TrueTime、FailSafe等,这类工具可以对C/ C + +、Java 等语言的软件源代码进行静态分析,内置标准的编码规则检查,以及功能确认、接口测试、覆盖率分析、性能分析等。

黑盒测试工具适用于黑盒测试的场合,黑盒测试工具包括功能测试工具和系统测试工具。黑盒测试工具的一般原理是利用脚本的录制和回放,模拟用户的操作,然后将被测系统的输出记录下来同预先给定的标准结果比较。黑盒测试工具可以大大减轻黑盒测试的工作量,在迭代开发的过程中,能够很好地进行回归测试。

目前常见的功能测试工具有HP公司的Winrunner、QuickTest Professional,IBM公司的Rational

Functional Tester,Segue公司的SilkTest,Compuware公司的QARun等,这类工具主要为用户提供了符合所有主要应用软件环境的功能测试和回归测试的自动化测试功能。

常见的性能测试工具有HP公司的LoadRunner,IBM公司的Rational Performance Tester,Segue公司的SilkPerformer,Compuware公司的QALoad等,这类工具主要通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,帮助测试人员和性能工程师验证系统的性能。

测试管理工具主要用于对测试进行管理。一般而言,测试管理工具对测试计划、测试用例、测试实施进行管理,并且,测试管理工具还包括对缺陷的跟踪管理。

常用的测试管理工具主要有HP公司的Quality Center、IBM公司的Rational Test Manager,Segue公司的SilkCentral Test Manager等。

除了上述测试工具外,还有一些专用的测试工具,例如,针对数据库测试的TestBytes,对应用性能进行优化的EcoScope等。

近年来,随着测试技术的逐步发展,加上测试工作者及测试厂商的努力,测试工具在软件行业中得到了较为广泛的应用。在2009年下半年由工业和信息化部组织的全国范围内对软件企业所进行的调研数据来看,80%以上的软件企业都使用了自动化测试技术。

虽然软件测试工具得到了很大的发展,但就工具的使用情况来看,目前大多数公司是使用性能测试工具进行性能测试。由于国内的软件开发过程不是很规范,软件产品相对不够成熟,大多数软件往往不具备自动化功能测试工具应用的条件。因此,功能测试工具大规模的应用还需要一定的时间。

据山东省软件评测中心多年科研及实践分析,未来软件测试工具发展将呈现以下趋势:传统的软件测试生命周期仍在指导着当前软件测试的组织和实施,人们对于软件测试过程模型的研究并没有革命性的改变,自动化测试从技术到工具还没有取得与其宣传相匹配的实际功效。如何解决“完善的测试用例、更快的开始并结束测试、更多的报告软件缺陷”这些问题之间的关系,这将是未来测试技术发展的重点。

在此基础上,现有的测试工具也将进行更新换代。下一代的测试工具应当提供怎样的功能?它们需要内嵌高级的测试编辑器,并通过这个编辑器来支持界面测试的自动完成功能以及测试代码的重构和分析么?它需要将测试结果可视化么? 或者以自学习的方式来生成测试用例?

除此之外,随着软件行业的不断发展,大量的新技术在软件开发中得到应用,为了满足日益复杂的软件系统的测试需要,软件测试技术也随之不断的发展,越来越系统化,越来越专业化,同时软件测试工具也将在以下方面得到进一步的发展:

分布式测试工具:随着网络技术的不断发展,大量分布式系统被部署在网络中,常见的如Web应用、Web Service等。分布式系统不同于一般软件系统,它通常由物理分布的多个子系统组成,这些子系统通过相互间的协作完成计算任务,具有物理分布、并发访问、时序敏感、平台异构等特点。

此外,分布式系统中的诸多子系统在触发方式、工作方式等方面往往也不属于同一类型,比如,通过网络协议传递消息的子系统和利用本地接口进行方法调用的子系统等。因此,对分布式系统的测试也不同于一般软件系统的测试,需要采用分布式测试工具。随着越来越多的领域活动依赖于分布式应用,分布式测试将受到人们更大的关注,测试系统实现技术也将不断发展成熟,分布式测试工具将成为下一步测试工具的重点发展方向。

云测试工具:云测试是基于云计算的一种新型测试方案,云计算通过网络以按需、易扩展的方式向用户交付所需的资源,包括基础设施、应用平台、软件功能等服务。

作为软件测试工具(包括功能测试工具、性能测试工具等)服务商提供的测试平台,软件开发企业在其平台上进行相关自动化测试、不再在本地计算机上安装和使用这些工具。这种无须本地安装和配置测试环境,在远程测试平台上进行测试的方式被称作云测试。目前云测试平台还处于实验阶段,随着云计算技术的逐步发展,云测试技术也将不断发展完善。

安全性测试工具:安全性测试工具以自动化或半自动化的方式验证系统安全功能运行是否正确、安全机制是否有效和查找潜在的安全漏洞。随着计算机网络的迅速发展和软件的广泛应用,软件的安全性己经成为备受关注的一个方面,渐渐融入我们的生活,成为关系到金融、电力、交通、医疗、政府以及军事等各个领域的关键问题。

软件安全漏洞造成的重大损失以及还在不断增长的漏洞数量使人们已经开始深刻认识到软件安全的重要性。随着安全性测试技术的深入研究,安全性测试工具也将是测试工具的重点发展方向。

本文简单分析了国内软件测试的现状,认为业内对软件测试的重视程度仍然普遍不足。作者一并介绍了几种测试工具的选择考虑点,以供读者参考。

AD:

2013大数据全球技术峰会课程PPT下载

国内软件测试现状

近期国家对软件行业也给出了很多鼓励政策,软件及相关行业在中国得到了很大的发展,我们也看到了一大批软件企业在国际中也占据了很重要的地位。不过我们发现很多软件公司在重视代码开发的同时,却没有把代码质量跟上去,忽略了测试在整个项目工程的重要性。

可是测试真的是不重要,只是开发的附属品吗?我们列举一个例子说明:美国微软,该公司的开发人员和测试人员的比例是1:1,也就是说每个开发人员会配备一名测试人员,而且这名测试人员都是具有和开发人员一样的开发能力的,可以进行大规模自动化测试。微软重视测试的原因也很简单,因为在宽带普及以前,很多更新都是靠邮寄光盘完成的,更新的成本非常高,一定要在出厂前严把质量关。对于一个纯软件公司是如此,那么我们的一些有硬件产品的公司,如果产品是因为软件上面出现了重大缺陷,大规模硬件召回的成本是不是会更高呢?目前在国内,很多的企业也认识到了测试的重要性,可是只是停留在认识阶段,只是做做简单的黑盒测试,功能性测试等。有的负责人也许会谈到,我们的产品是基于互联网产品,软件大部分都是在服务器端,更新的成本大幅降低。那么我们就更应该做好产品,让广大的客户端用户对产品有更好的用户体验,给网友们更好的服务,而不是一味的借助于网络更新,在使用中发现错误后去弥补。最近一次的暴风影音的“召回门”就是一个很好的说明。

对于一些正在成长中的中小企业,由于人力资源有限,目前还没有比较正规的测试,我们还可以理解。可是一些已经形成规模,有一定研发力量的大型企业,是很有必要建立一整套完整的测试流程来完善公司的产品。但是在和大公司负责人沟通得知和我们的期望值还是有一定差距的。他们可能花了大量的人力,物力来通过 CMM,ISO认证,却不能踏实的做好测试。在他们眼里,认证才是一个公司的硬实力体现,测试则是一个可有可无的过程。这一点让人有点黯然,在中国的快餐市场上,我们该如何推动我们软件测试,不是靠你和我,而是靠全民总动员,大家要培养这个意识,把这个意识和行动穿叉在我们研发的全部过程中,难道我们还做不出好的产品吗?

这让我马上我想到了已经和联通签约马上进入中国的IPhone,可以说这一款手机改变了整个世界对手机的使用习惯。IPhone的成功,个人观点,软件质量的稳定性可靠性是最为关键的一票。

在我们和客户聊到测试的时候,他们说也是有心无力,只能通过人为的做一些简单的测试来应付。于是我们会给他们介绍一些自动化的测试工具的时候来协助测试,这些企业普遍表现了对这次测试工具的兴趣。不过,这些工具的价格立即扼杀了他们抓测试的信心,他们无法接受一张光盘的叫价超过一辆汽车,他们更喜欢实物。可是他们忘了,软件的价值不是体现在一张光盘上面,而且体现在这个软件能给企业,给人们生活带来的益处。

诚然,价格,技术和企业愿望是目前测试在中国走的很艰难的原因。目前一些测试培训机构也是在积极培养专门的测试人才。我们也希望有国内的企业能做出我们自己比较好的测试工具来打破测试工具昂贵的价格坚冰。我相信有那么一天中国的软件质量一定会在世界上有属于自己的一席之地。

测试工具简评

在这里,也结合我个人的经验,按照开发V模型来分别讲讲几个对应的自动化测试工具。

在软件开发初级阶段,对应于代码做静态分析。目前很多的企业都没有做静态分析,甚至还有企业不太明确静态分析。在这里给大家推荐的工具是QAC和PC-lint。

PC-lint在国内的用户基础比较好,这个工具出来的比较早,由一个大学教授编写,而且价格也不贵,只有命令行模式是它的局限性,检查的代码规则不多。目前有部分企业用这个工具做代码静态分析。

QAC这个工具进入国内也有一段时间,不过推广力度不是很大,目前这个工具在外资企业的研发部门的推广的比较好,国内的一些大企业和一些测试评测中心也在使用该工具,该工具使用起来比较方便,界面形式,也支持命令行模式,还有是MISR的标准制定者之一,所以比较有权威性,专业性很强,在国内也有很好的技术支持。价格相对来说就比较贵了。

然后动态单元测试这块,可以看看parasoft旗下的几款产品,有分别针对java语言的,C++语言的版本。该工具使用起来还比较方便,是基于Eclipse框架开发的,界面友好,功能也比较强大,在上海有office.当然就是价格不太让人接受。

当然如果只是要做内存泄露这块,可以了解一下parasoft旗下的一个工具insure++。这个工具可以实施监控内存的一个使用情况。

如果是做嵌入式这块单元/集成测试,用户与也可以使用IPL的Cantata++和IBM的RTRT,这两个工具在针对嵌入式这块的单元/集成测试比较强大,特别是Cantata++还支持自动的打桩,封装,这个也是该工具的一个亮点。

上篇中提到要对这几个概念做说明的,这这里作个补充:就CANTATA++举例:

1)打桩是对被测函数外部调用的替代,是用来对没有开发的或用户开发的模块进行模拟。对系统函数,由于Cantata++已经作了移植,都可直接使用,不用也不能打桩。不能打桩时,接口数据无法验证。

2)使用封装的before功能,可检测对外部调用的参数数据、全局数据是否满足测试时的要求;并且可以修改参数、全局数据的值,使得外部函数按照测试的要求运行。例如嵌入式应用中经常将一个数据转换为指针,然后使用指针操作相关的内存数据,但在主机环境测试时,由于内存保护,指针指向的地址为空,程序就飞了。在这种情况下就可以使用before功能定义变量,将变量的地址传送给被调用的函数,从而完整地验证功能和覆盖率。

3)使用封装的after功能迫使外部调用返回很难实现或无法达到的条件,从而使被测模块的功能和分支都得到验证。如在主机环境下对malloc函数封装,在一般情况下是无法实现返回空指针的结果。利用

Cantata++封装的after功能修改返malloc函数返回值为NULL指针,这样被测函数的错误处理功能得到验证。

如果需要对代码做一个质量度量,推荐使用一个质量度量工具McCabe,这个工具不需要执行代码就可以完成代码走查,对代码有一个深层次的代码度量,提供多达几十种度量。操作起来很方便,只是要熟悉这个产品,需要对产品有一定的理解,对项目管理有很大的帮助。

至于后面的版本管理工具,CVS,VSS,我在这里就不做太多的介绍。

软件测试是通过找出缺陷和问题评估产品质量并间接改进产品质量的手段,它是从一个错误陈述(“系统能正常运行”)开始,从无限种可能中选出与该陈述矛盾的输入。

AD:

2013大数据全球技术峰会课程PPT下载

软件测试是软件开发的重要、必要部分,是通过找出缺陷和问题评估产品质量并间接改进产品质量的手段。从软件工程的观点看,预防程序问题要比改正问题重要得多,因此,必须首先把软件测试看做是检验预防程序错误的机制是否有效的主要手段,同时又是找出程序异常的手段。

从一段对话谈起:

甲、乙、丙三人对“所有奇数都是质数”这个假设进行测试。

甲说:“3是质数,5是质数,7是质数。看起来这个假设没错。”

乙说:“3是质数,5是质数,7是质数,9是质数,11是质数„„”

丙说:“错!9就是一个非质数奇数。”

软件测试就是从一个错误陈述(“系统能正常运行”)开始,从无限种可能中选出与该陈述矛盾的输入。必须避免甲犯过的错误(没有验证合适的值),也要避免犯乙犯过的错误(验证了合适的值,但是没有发现矛盾之处),需要像丙那样,用最小工作量找出合适的反例。

IEEE把软件测试定义为:从通常是无限大的执行域中恰当地选取一组有限测试用例,对照程序已经定义的预期行为,动态地检验程序的行为。

从这个定义可以看出软件测试的四个特点:首先是“动态”,软件测试总要通过一组输入执行程序。但是,单靠输入值并不总能充分地确定一个测试,因为对于复杂、非确定的系统,由于系统会处于不同的状态,因此对于同样的输入可能产生不同的响应。所以,特定的输入通常还要指定系统的特定状态。其次是“有限”,在测试中实际能够观察的执行数量是有限的。测试永远都意味着有限资源和计划进度与本质上是无限测试需求之间的折衷:正是这种矛盾带来了大家经常提到的技术(测试充分性评判准则)和管理(测试工作量估计)两个方面的测试问题。接着是“选取”,很多测试手段的本质区别就是如何选择有限的测试集。针对特定条件确定最合适的选取准则是一个非常复杂的问题,在实践中需要运用风险分析技术和测试

工程专门知识。最后是“预期”,必须能够确定所观察到的程序执行输出是不是可接受的,否则测试工作就是无用的。

软件测试通常要在不同层次上执行,大体上划分为三大阶段:单元测试、集成测试和系统测试。单元测试检验独立软件模块的机能,软件模块可以是独立子程序,也可以是由紧密相关的数个单元组成的较大构件,单元测试一般需要对被测代码进行访问并借助调试工具的支持,并且可能需要被测代码编程人员的介入;结构化软件系统。现代的集成测试策略更多是结构驱动的,这意味着对软件部件或子系统的集成是基于确定的功能线程,因此集成测试是一个连续活动,在每一阶段测试人员必须抽象出低一级的情况并集中于正在处理的这一级的状况;系统测试关注的则是整个系统的行为,它需要将系统与非功能性系统需求进行比较,非功能性系统需求指系统的安全性、速率、精确性、可靠性等。系统与其它软件、应用程序、硬件设备或操作环境的外部接口评估也在系统测试中进行。

测试技术分类

从软件生产发达国家来看,20世纪60年代,软件测试主要以代码调试为主;70年代主要以演示软件系统的正确性为主;80年代到90年代中期,主要以检查程序错误为主;90年代中期以后,软件测试开始更注重软件质量特性的整体评估。目前软件测试最主要的目标是评估软件功能,但一般也要测试软件的非功能属性。

目前应用于软件测试领域的技术有很多,而且差别很大,大致有两种分类方法。

第一种是按测试的生成来源划分,即基于测试人员的直觉和经验(即兴测试)、需求规格说明(包括等价类划分、边界值分析、判定表、基于有限状态机、形式化语言转换和随机测试等)、代码结构(基于流程图、调用关系图等参考模型、基于控制流标准、基于数据流的标准)、发现的错误(以过去经验为基础的错误推测法、增加一个被测程序变种的变异测试)、被测程序的使用领域(操作剖面、软件可靠性工程测试)和被测程序类型(面向对象、基于构件、网站、GUI、并发程序、协议一致性、分布式系统、实时系统、科学计算软件测试)的测试技术。

第二种是经典的分类方法,即黑盒测试和白盒测试。依赖于被测软件设计及编码信息进行的测试称为白盒测试(基于代码测试的参考模型、基于控制流标准、基于数据流标准和变异测试等),只依靠被测软件输入/输出行为而没有关于输入/输出之间信息状况的测试称为黑盒测试(等价类划分、边界值分析、判定表、基于有限状态机、源于形式化需求规格说明、错误推测法、随机测试、操作剖面和软件可靠性工程测试等)。 在实际测试中,往往综合采用这些技术。

测试过程有章可循

过程是一组把输入转换为输出的相关活动。不同层次上的测试活动必须与人员、工具、政策、度量一起组织于一个良定义的过程中,这一过程是软件生命周期的完整组成部分。测试过程需要加以控制并进行持续改进。

软件测试过程的决定性因素是人。对于成功的测试来说,一个必要条件是人员对测试活动所采取的积极和相互协作的态度。另外,应该使软件产品涉及的所有人员都认识到:及早发现软件错误是大家共同的目标,而不仅仅是测试人员的责任。

文档是测试过程规范化的一个完整组成部分。IEEE 829完整描述了各种测试文档、文档间关联及文档与测试过程间的关联。测试文档包括测试计划、测试设计说明、测试过程说明、测试案例说明、测试日志和测试事件或问题报告等。用于测试过程控制与改进的度量包括:设计的测试用例数、执行的测试用例数、通过的测试用例数、失败的测试用例数等。

测试管理的一个关键性任务是决定什么样的测试是充分的,某个测试阶段何时可以终止。对此,充分性度量和错误密度估价、操作可靠性评估都可提供有益支持,但只有这些还不充分。决策还应考虑潜在的遗留失效可能造成的损失和风险,并将之与进一步测试所需成本进行对比。为使测试和维护工作有组织、成本效益高,应将各测试手段系统化地加以重用。为此,应在测试的各个层次,对测试脚本、测试用例和预期结果进行精心定义并记录。

用于特定环境、特定类型程序的测试方案以及决策动机,构成了测试模式。测试模式本身也可文档化,并可重用于以后的类似项目。


相关文章

  • 如何选择测试工具
  • 如何选择测试工具 应用测试工具的目的 应用测试工具的目的很明确,一般而言,在测试过程中应用测试工具主要为了以下几个目的: 1. 提高软件测试效率和质量 2. 减少软件测试的开销,降低了软件开发的成本 3. 减少软件测试过程中的重复劳动 4. ...查看


  • 软件测试方法技术的研究与对比-毕业论文
  • 软件测试方法技术的研究与对比 作 者 学科. 学 指 导 完 成姓 名: 专业 : 号 : 教 师: 日 期: XX大学 XXXX University 软件测试方法技术的研究与对比 总计: 毕业论文 64 页 表 格 14 表 插 图 2 ...查看


  • 软件自动化测试工具的应用研究
  • [摘 要]软件自动化测试对于提高软件的测试效率和质量有着至关重要的作用,笔者在此主要从软件自动化测试的定义.工具分类以及内容角度来进行分析研究,以期软件自动化测试工具不断完善,发挥其应有的作用. [关键词]软件自动化测试:测试工具:应用 1 ...查看


  • 学科工具软件及其在学科教育教学中的应用解析
  • 学科工具软件及其在学科教育教学中的应用 该文主要以化学为例,讨论了学科工具软件的概念内涵.特点和种类,与通用工具软件.课件.积件的区别,及其在辅助学科教育教学和课件制作的应用,提出:学科工具软件是一种重要的.特殊的学科教育教学资源,它既是信 ...查看


  • 常用工具软件
  • <常用工具软件>教学大纲 二.课程性质.地位和任务 常用工具软件课程是一门实用性广泛的实践课学科.该课程涉及面广,实践性极强,内容涉及计算机日常应用过程中需要基本掌握的,主要介绍比较常用.使用性强.具有一定代表性并且流行的工具软 ...查看


  • 各种测试工具的主要功能和用途
  • 各种测试工具的主要功能和用途 trueSamurai 2002-4-28 22:19:9 我只做过Web Application的测试,所以只能对自己用过的几个测试工具做个评价. 如果是做Unit-Test 的话(对开发人员比较有用),已经 ...查看


  • 软件测试工具--QESatJava白盒测试工具:希赛网软件工程频道
  • QESatJava白盒测试工具 来自:北京航空航天大学软件工程研究所 [2005/04/12] 在人们的意识中,往往会认为软件测试工具是为一些软件开发的专业人员设计的,但就 Java软件分析与测试工具而言,其适用范围还不仅限于专业人员.开发 ...查看


  • 如何做好嵌入式软件开发测试
  • 如何做好嵌入式软件开发测试? 嵌入式软件测试的目的是保证软件满足需求规格说明,与非嵌入式软件的测试目的是一样的.系统失效是系统没有满足-个或多个正式需求规范中所要求的需求项,嵌入式软件有其特殊的失效判定准则. 而且嵌入式软件对可靠性的要求比 ...查看


  • [电动工具检验与测试]课程标准
  • <电动工具检验与测试>课程标准 课程代码: 建议课时数: 110 学分:6 适用专业:机械制造与自动化(电动工具)专业 先修课程:<电工电子技术应用>.<材料应用与处理>.<质量管理>.< ...查看


热门内容