咚咚咚
静静聆听内心世界的声音                                  常常有令人欢喜的旋律响起                                可以简单、可以深沉                                    可以抒情、可以喧哗
posts - 4,comments - 12,trackbacks - 0

测试自动化的意义  

软件测试的工作量很大,据统计,测试时间会占到总开发时间的40%,一些可靠性要求非常高的软件,测试时间甚至占到总开发时间的60%。但测试却是在整个软件过程中极有可能应用计算机进行自动化的工作,原因是测试的许多操作是重复性的、非智力创造性的、需要细致注意力的工作,而计算机就最适合于代替人类去完成这些任务。  

测试自动化是通过开发和使用一些工具自动测试软件系统,特别适合于测试中重复而繁琐的活动,其好处是显而易见的:  

1 可以使某些测试任务比手工测试执行的效率高,并可以运行更多更频繁的测试。 

2 对程序的新版本可以自动运行已有的测试,特别是在频繁的修改许多程序的环境中,一系列回归测试的开销应是最小的。  

3 可以执行一些手工测试困难或不可能做的测试,例如对于200个用户的联机系统,用手工进行并发操作的测试几乎是不可能的,但自动测试工具可以模拟来自200个用户的输入。客户端用户通过定义可以自动回放的测试,随时都可以运行用户脚本,即使是不了解整个商业应用复杂内容的技术人员也可以胜任。  

4 更好地利用资源。将繁琐的任务自动化,如重复输入相同的测试输入,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。另外,可以利用整夜或周末空闲的机器执行自动测试。  

5 测试具有一致性和可重复性。对于自动重复的测试可以重复多次相同的测试,如不同的硬件配置、使用不同的操作系统或数据库等,从而获得测试的一致性,这在手工测试中是很难保证的。 

6 测试可以重用,而且软件经过自动测试后,人们对其信任度会增加。  

7 一旦一系列测试已经被自动化,则可以更快地重复执行,从而缩短了测试时间,使软件更快地推向市场。   

总而言之,测试自动化通过较少的开销可以获得更彻底的测试,并提高产品的质量。但是,在实际使用自动测试的过程中,还存在一些普遍的问题: 

1 人们乐观地期望测试工具可以解决目前遇到的所有问题,但无论工具从技术角度实现得多么好,都满足不了这种不现实的期望。  

2 如果缺乏测试实践经验,测试组织差,文档较少或不一致,测试发现缺陷的能力较差,在这种情况下采用自动测试并不是好办法。  

3 人们容易期望自动测试发现大量的新缺陷。测试执行工具是回归测试工具,用于重复已经运行过的测试,这是一件很有意义的工作,但并不是用来发现大量新的缺陷。 

4 因为测试软件没有发现任何缺陷并不意味着软件没有缺陷,测试不可能全面或测试本身就有缺陷,但人们在使用自动化测试过程中会缺乏这种意识。  

5 当软件修改后,经常需要修改部分或全部测试,以便可以重新正确地运行,对于自动测试更是如此。测试维护的开销打击了测试自动化的积极性。  

6 商用测试执行工具是软件产品,由销售商销售,它们往往不具备解决问题的能力和有力的技术支持,因此给用户带来失望,认为测试工具不能很好地测试。  

7 自动测试实施起来并不简单,必须有管理支持及组织艺术,必须进行选型、培训和实践,并在组织内普遍使用工具。  

测试自动化具有局限性,不可能取代手工测试。手工测试可以比自动测试发现更多的缺陷,而测试自动化对期望结果的正确性有极大的依赖性。测试自动化并不能改进测试有效性,并对软件开发有一定的制约作用,测试工具没有创造性灵活性较差。然而,测试自动化可以大大促进软件测试的质量和产品化。

 一般测试过程包括标识测试条件、设计测试用例、建立测试用例、执行测试用例、比较测试输出等五个基本活动。  

1 标识测试条件  确定测试"什么"并最好定义这些测试条件的优先顺序。测试条件是被测环境的描述,它取决于被测试验证的项目。  

2 设计测试用例  确定"怎样"测试。测试用例是按一定顺序执行的与测试目标相关的一系列测试,测试用例的设计将产生许多测试包括的输入值、期望结果及其他任何运行测试的有关信息。

3 建立测试用例  建立测试脚本和所需要的硬件和软件环境。  

4 执行测试用例  在被测软件运行时使用测试用例。对于手工测试来说,测试人员按事先准备好的手工过程进行测试,测试人员输入数据、观察输出、记录发现的问题。对于自动测试来说,可能只需启动测试工具,并告诉工具执行哪些测试用例。  

5 比较测试输出  应该对每次测试的实际输出进行分析研究,判断软件功能是否正确。这种验证可以是非正式的测试人员主观判断,也可以是将实际输出与期望输出进行严格准确的比较。  在这些测试活动中,标识测试条件和设计测试用例主要为智力活动,执行测试用例和比较测试输出相对来说是比较机械的活动。另外,标识测试条件和设计测试用例只执行一次,执行测试用例和比较测试输出需要重复多次,而机械的和重复的活动特别适合于自动化。下面是一些适于考虑进行自动化的测试活动:  

测试用例的生成,包括测试输入,标准输出,测试操作指令等;   

测试的执行写控制,包括单机与网络多机分布运行;夜间及假日运行。测试个案调用控制;测试对象、范围、版本控制等;   

测试结果与标准输出的对比;   

不吻合的测试结果的分析、记录、分类、和通报;   

总测试状况的统计与报表的产生。

测试用例的生成  用编程语言或更方便的剧本语言(script language,如Perl等)写出短小的程序来产生大量的测试输入,包括输入数据与操作指令。同时,也可以按照一定的逻辑规律产生标准输出。输入与输出的文件名字按规定进行配对,以便控制自动化测试及结果核对的程序易于操作。  

 这里提到测试案例的命名问题,如果在项目的文档设计中作统一规划的话,软件产品的需求与功能的命名就应该成为后继开发过程的中间产品的命名分类依据。这样,就会为文档管理和配置管理带来很大的方便,使整个产品的开发过程变得更有条理,更符合逻辑。任何新手半途加入到开发工作中也会更容易进入状态。

测试的执行写控制  单元测试或集成测试可能多用单机运行,但对于系统测试或回归测试,就极有可能需要多台机在网络上同时运行。记住一个这样的原则,在开发过程中的任何时候,如果你需要等候测试的运行结果的话,那就是一个缩短开发时间的机会。   

对于单个的测试运行,挖潜的机会在测试的设置及开始运行和结果的对比及显示。有时候,需要反复修改程序,重新汇编和重新测试。这样,每一个循环的各种手工键入的设置与指令所花费的时间,加起来就非常可观。如果能利用make或类似的软件工具来帮助,就能节省大量的时间。  

对于系统测试或回归测试这类涉及大量测试个案运行的情况,挖潜的的机会除了利用软件工具来实现自动化之外,就是怎样充分利用一切硬件资源。往往就算是在白天的工作时间内,每台计算机的负荷都没有被充分利用。能够把大量测试个案分配到各台机器上去同时运行,就能节省大量的时间。另外,把大量的系统测试及回归测试安排到夜间及周末运行,更能提高效率。   

如果不购买商品化的工具的话,应当遵从正规的软件开发要求来开发出好的软件测试自动化工具。在实践中,许多企业自行开发的自动化工具都是利用一些现成的软件工具再加上自己写的程序而组成的。这些自己开发的工具完全是为本企业量身定做的,因此可用性非常强。同时,也能根据需要随时进行改进,而不必受制于人。当然,这就要求有一定的人力的投入。   

在设计软件自动测试工具的时候,路径(path)控制是一个非常重要的功能。理想的使用情况是这个工具可以在任何一个路径位置上运行,可以到任何路径位置去取得测试用例,同时也可以把测试的结果输出放到任何的路径位置上去。这样的设计可以使不同的测试运行能够使用同一组测试用例而不至于互相干扰,也可以灵活使用硬盘的空间,并且使备份保存工作易于控制。 

同时,软件自动测试工具必须能够有办法方便地选择测试用例库中的全部或部分来运行,也必须能够自由地选择被测试的产品或中间产品采作为测试对象。

测试结果与标准输出的对比  在设计测试用例的时候,必须考虑到怎样才能够易于对此测试结果和标准输出。输出数据量的多少及数据格式对比较的速度有直接影响。而另一方面,也必须考虑到输出数据与测试用例的测试目标的逻辑对应性及易读性,这将会大大有利于分析测试所发现的不吻合,也有利于测试用例的维护。   

许多时候,要写一些特殊的软件来执行测试结果与标准输出的对比工作,因为可能有部分的输出内容是不能直接对比的,例如对运行的日期时间的记录、对运行的路径的记录、以及测试对象的版本数据等,这时就要用程序进行处理。

不吻合的测试结果的分析、分类、记录和通报 

 前面谈到,用于对测试结果与标准输出进行对比的特殊软件,往往也同时担任对不吻合的测试结果进行分析、分类、记录和通报的任务。其中?quot;分析"是找出不吻合的地方并指出错误的可能起因;"分类"包括各种统计上的分项,例如对应的源程序的位置、错误的严重级别(提示、警告、非失效性错误、失效性错误;或别的分类方法)、新发现的还是已有  记录的错误等;"记录"是按分类存档;"通报"是主动地对测试的运行者及测试用例的负责人通报出错的信息。  

最直接的通报方法是由自动测试软件发出电子邮件给测试运行者及测试用例负责人,邮件内容的详细程度可根据需要灵活决定。

总测试状况的统计与报表的产生  

这些是自动测试工具所应有的功能,其目的是提高过程管理的质量,同时节省用于产生统计数据的时间。产生出来的统计报表最好是存放到一个约定的路径位置,以便任何有关人员都知道怎样查阅。同时,可按需要用电子邮件向适当的对象(如项目经理,测试经理和质量保证经理)发出统计报表。 自动测试与开发中产品每日构建(build )的配合  

自动测试应该是整个开发过程中的一个有机部分,它需要依靠配置管理来提供良好的运行的环境,同时它必须要与开发中的软件构建紧密配合。 

 在开发中的产品达到一定程度的时候,就应该开始进行每日构建和测试。这种做法能使软件的开发状态得到频繁的更新,以及及早发现设计和集成的缺陷。为了充分利用时间与设备资源,下班之后进行自动的软件构建,紧接着进行自动测试(这里多数指的是系统测试或回归测试),是一个非常行之有效的方法。如果安排得好,到第二天上班时,测试结果就已经在各人的电子邮箱里面面了,等待着新的一天的开发工作。  

 软件测试是为了发现错误而执行程序的过程,其目的在于以最少的时间和人力系统地找出软件中潜在的各种错误和缺陷。测试主要是由人而不是由机器执行,因而存在心理学的问题。  

软件测试技术大体上可以分成白盒测试和黑盒测试。白盒测试技术依据的是程序的逻辑结构,主要包括逻辑覆盖和路径测试技术等;黑盒测试技术依据的是软件行为的描述,主要包括等价类划分、边界值分析和状态测试等。  

程序的静态测试是在不执行程序的条件下,有条理地仔细审查软件设计、体系结构和代码,从而找出软件错误的过程,其主要方法包括同行审查、代码会审、代码走查等。 

 由于软件错误的复杂性,软件测试需要综合应用测试技术,并且实施合理的测试步骤,即单元测试、集成测试、确认测试和系统测试。单元测试集中于每一个独立的模块;集成测试集中于模块的各组装;确认测试集中检验是否符合需求规格说明书中确定的各种需求;系统测试集中检验系统所有元素之间协作是否合适,整个系统的性能和功能是否满足。  

软件调试则是在软件测试成功后开始的工作,其任务是进一步诊断和改正程序中的错误。软件调试是程序员自己进行的技巧性很强的工作,调试工作的困难与人的心理因素和技术因素都有关系,需要繁重的脑力劳动和丰富的经验。  

软件测试中存在许多机械的和重复性的工作,对此可以应用计算机进行自动化测试,从而可以大大促进软件测试的质量和产品化。但测试自动化具有局限性,不可能取代手工测试。

posted on 2005-12-05 11:22 咚咚咚 阅读(118) 评论(0)  编辑 收藏 引用 所属分类: AutomatedTesting
只有注册用户登录后才能发表评论。