精华内容
下载资源
问答
  • 当然自动化测试也不是万能的,不要拿手工测试自动化测试相比,而应该把自动化测试看做是对测试员能力的扩充,能够完成手工测试所不能完成的工作。 来看看业界对自动化测试的看法吧。 《Google软件测试之道》...

     

    自动化测试的重要性自然不用多说,没有自动化测试敏捷开发和CI/CD几乎不可能存在。

    当然自动化测试也不是万能的,不要拿手工测试与自动化测试相比,而应该把自动化测试看做是对测试员能力的扩充,能够完成手工测试所不能完成的工作。

     

    来看看业界对自动化测试的看法吧。

     

    1. 《Google软件测试之道》3.4 章节,YouTube测试工程师apple chow的观念:“如果测试或者自动化过于难以维护,不如放弃它并试着去实现更有韧性,更好的东西。密切关注一段时间维护和排错的成本。遵守70-20-10法则:小型的用来验证单个类或者功能的单元测试占70%,中型的用来验证一个或者多个应用模块之间的测试占20%,大型的高级别的用来完整应用的测试(一般是系统测试和端到端测试)占10%。”
    2. 《Google软件测试之道》3.4 章节,YouTube测试工程师apple chow的观念:“安排好优先级,寻找小成本大回报的自动化项目。一定要记住自动化并不能解决所有问题,尤其是前端项目和设备测试。总是会需要聪明的,探索式的测试并跟踪测试数据。”
    3. 《Google软件测试之道》4.4 章节,Google Gmail测试工程经理Ankit Mehta谈Gmail的测试经验是:“20%的测试人员进行探索式测试,任何关注用户体验的产品都需要探索式测试。还有30%的测试工程师关注于产品的整体性测试,他们和测试开发工程师一起来保证测试的效果。另外50%的工作,是测试开发工程师开发相关的自动化测试和工具,以保持代码库的健壮和提高开发人员的工作效率。”
    4. 《Google软件测试之道》4.6 章节,Google Chrome测试工程经理Joel Hynoski认为:“测试本身就是一种平衡的艺术。一方面,我们必须能让产品发布,对每个发布版本做所需的检查以保证没有问题。另一方面,我们必须开发优秀的自动化测试,并为自动化投入开发自己的框架和基础设施。再有,我们需要围绕着“开发-构建-测试-发布”的流程模式计划和安排我们的工作。还有,测试专家不断地向世界展示我们进行测试的最新方法,如果你不实验这些新东西,你会觉得自己是在原地踏步。”。
    5. 《软件测试经验与教训》中,关于自动化测试

    表格 1 手工测试和自动化测试的比较

    比较点

    手工测试

    自动化测试

    定义

    人工进行的测试

    利用自动化工具或平台进行的测试

    执行时间段

    在测试早期往往使用得比较多

    测试中后期,或者回归测试上。

    执行效率

    执行效率较低

    一般执行效率较高

    执行代价

    每次的执行代价相对固定

    取决于自动化的代价和执行频率

    测试质量

    取决于测试用例的质量和测试人员的素养

    取决于测试用例的质量和自动化测试用例的质量

    重复执行

    每次执行都需要相应的执行代价,但是不同的人执行同一个用例可能看出不同的问题

    执行可以复用,但重复执行不能提高有效性

    性能测试场景

    对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,手工测试几乎不可能。

    可以自动化测试模拟同时有许多用户,从而达到测试的目的。

    局限性

    许多与时序、死锁、资源冲突、多线程等有关的错误通过手工测试很难捕捉到;

    很多和界面相关的场景自动化测试很难检测到问题。

    发展方向

    手工测试者最适合成为领域专家,他们可以把相当复杂的业务逻辑存在最强力的测试工具——大脑里。而且手工测试速度比较慢测,试者就有时间可以观察分析细微的逻辑问题。速度虽然慢些,但是比较容易。

    自动化则胜在测试底层的细节。自动化可以测试崩溃、挂起、错误返回值、返回码、异常和内存使用等等。速度快但是也困难些。想对业务逻辑进行自动化测试比较困难,风险也大。

     

    手工测试和自动化测试具体选择要看看项目规模,客户需求,公司能力等,绝大多数时候都是结合在一起使用才能发挥最大威力。

    展开全文
  • 软件手工测试和自动化测试的比较

    千次阅读 2009-10-23 09:59:00
    软件手工测试和自动化测试的比较 摘要:随着现代软件业的发展,软件测试在软件开发中占据了越来越重要的地位。本文就从实际的软件测试项目工作流程的角度探讨了手工测试和自动化测试的特点。并对它们各自的优缺点做...

    软件手工测试和自动化测试的比较

     

    摘要:随着现代软件业的发展,软件测试在软件开发中占据了越来越重要的地位。本文就从实际的软件测试项目工作流程的角度探讨了手工测试和自动化测试的特点。并对它们各自的优缺点做了简单的阐述。

     

    关键词:软件测试,手工测试,自动化测试

     

    The Comparison of Manual Test and Automation Test in Software Test

    Software Engineering College Of University of Science and Technology Of China

    ABSTRACT: In software Testing, there are some mistakes in it. Especially in taking which way to accomplish a software project testing. The article discussed the two ways of software testing, manual ways and automation ways. At last, it gave the conclusion about the software testing.

    1 引入测试的原因

    信息技术的飞速发展,使软件产品应用到社会的各个领域,软件产品的质量自然成为人们共同关注的焦点。不论软件的生产者还是软件的使用者,均生存在竞争的环境中,软件开发商为了占有市场,必须把产品质量作为企业的重要目标之一,以免在激烈的竞争中被淘汰出局。用户为了保证自己业务的顺利完成,当然希望选用优质的软件。事实上,对于软件来讲,还没有象银弹那样的东西。不论采用什么技术和什么方法,软件中仍然会有错。采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要测试来找出,软件中的错误密度也需要测试来进行估计。测试是所有工程学科的基本组成单元,同样也是软件开发的重要部分。自从有程序设计的那天起测试就一直伴随着。统计表明,在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。因此,测试对于软件生产来说是必需的。一直以来,软件的测试主要是以手工测试为主,但是随着现代软件的复杂程度的加深,人们对使用手工方式来完成软件测试感到的越来越力不从心,同时因为在软件测试中存在着大量的重复性工作,而这种工作是比较适合机器而不是人类来完成的。因此,自动化测试成为最佳的解决方案。而所谓自动化测试,实际上是将大量的重复性的测试工作交给计算机去完成,一个优秀的自动化测试方案,不但可以满足科学测试的基本要求,而且可以节约大量的时间、成本、人员和资源,这样不仅会大大减少软件工作人员的工作强度,而且会极大的提高企业效益。由于自动化测试在我国开展的时间还不是很长,所以容易有人对它产生误解。特别是有些软件企业的领导,有些人认为自动化测试代价太高,很难实施;而有些人却认为自动化测试可以容纳一切,可以很容易的替换手工测试。其实这些看法都是很片面的。本文通过对软件测试活动的实施过程的各个步骤的展开的顺序来对手工测试和自动化测试做一个简单的比较,以达到澄清测试误区目的,为我们在软件测试项目中对测试方法的选择做一点参考。

     

    2 软件测试的实施过程

    对于软件测试活动本身而言,也是一个工程化的过程,要经历测试项目立项,测试计划的编制,测试的设计测试的实施,测试的执行,测试的评估几个阶段。这一过程对手工测试也好,自动化测试也好都是一样。软件测试活动实施过程图如下所示:

    测试的实施

    测试的评估

    得到测试用例

    对整个测试项目做出估计,评价

    测试项目立项

    确定测试项目负责人并做出一定的测试分析

    设计测试计划的编制

    测试的设计

    形成测试需求报告

    主要解决如何执行测试问题

    测试的执行

    执行测试用例

     

     

     

     

     

     

     


    在这一个图表中,我们清楚的知道软件的测试流程的展开也是一个顺序的过程,同时也是一个层进的过程,是按照顺序依次展开的,当然在实施的过程中,每一步内部可能会发生多次迭代的情况,这是是允许的。在下面我们就按照这个模型所展示的流程来对手工测试和自动化测试进行简单的比较。

     

    3 手工测试和自动化测试的比较

    (1)测试项目立项

    对任何一个软件开发项目而言,测试本身也是一个工程化的过程,它同样需要经过项目的立项这一个步骤,这一个步骤所要解决的问题主要是解决测试组织的框架的问题,主要是根据测试任务的规模大小来做出相应的先期准备工作;主要是确定项目负责人。测试项目立项对手工测试而言,比较自由,主要是测试项目负责人的问题,以后的测试工作就是由测试项目负责人和整个项目的项目经理来进行沟通完成。对自动测试而言,项目立项中不但要解决前面所提及的问题,还有一个重要的问题的是自动测试工具的选择的问题。对于自动化测试工具的选择往往要取决于所测试项目的性质。若是测试项目的内容主要是在于测试软件产品的UI的话,那么就应该选用GUI测试工具如IBM公司的Rational Robot;若是偏重于测试系统性能的话,可以选用LoadRunner;若是想实现单元测试的自动化则可以选用Junit等等。但是无论选择什么样的工具,请一定要给使用人员以专业的培训,这样可以收到事半功倍的效果。在此,我以IBM公司的Rational Test Suite为例来加以说明。

    (2)测试计划的编制

    测试计划是根据用户需求报告中关于功能要求和性能指标的规格说明书,通过定义相应的测试需求报告,同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。测试计划活动包含对下面问题的回答:

    什么和在哪里?―告诉我们要测试什么和在哪里执行这些测试。

    为什么?―测试输入告诉我们为什么要做这种测试。

    什么时候?―告诉我们什么时候测试必须执行和必须通过。

    谁?―由谁来执行这些测试活动。

    测试计划编制的第一步是去确定测试输入。测试输入是测试的依靠或是测试需要的验证。测试输入帮助你决定你需要测试的内容。他们是帮助我们确定基于开发过程中可能需要的变化。在你确定了你的测试输入,比较容易的形成一个测试计划。测试计划为项目中其他的测试集合提供一个组织结构。我们需要注意的是在一个测试项目中可能包含多样的测试计划。我们可以为测试的每一个阶段编制一个计划。不同的测试工作组可以有他们自己的测试计划。一般地,每一个计划应当有一个确定且唯一的高水平的测试目标。

    在软件测试计划编制这一点上,手工测试的重点在于测试进度的安排,测试人员的分配上,以及测试资源的调配上。通常是要生成出软件测试计划说明书。后面的测试活动都是按照测试计划说明书进行逐步展开的。

    而对自动化测试则是在上一步选定的测试自动化工具的基础上进行展开的,利用自动化测试工具自身附带的管理工具,或者与自动化测试工具配合使用的测试管理工具,直接在工具中生成实际的测试计划。例如Rational Test Suite 中的Rational TestManager就是一个很好的测试计划生成工具。自动化测试中的资源调配也可以在其中进行分配。但是这些管理工具的缺点是无法应付短时间突发事件,有些缺乏灵活性。

    (3) 测试的设计

    测试的设计主要解决“我们将如何执行测试?”。一个完整的测试设计会告知我们有关需要与系统被获得的活动和他们应该期待观察的行为和特性,当然如果系统正在适当地运行的话

    测试的设计是一个迭代的和行进中的过程。你应当能够在任何系统执行之前开始测试的设计,他们是基于用例(use cases),需求,原型和其他的资源尔产生的。当系统被描述的更加清晰时,测试的设计应当与系统一起更加细节化。我们需要注意一个测试的设计不同于软件的设计工作,它应当被用来作为建立你的测试用例的指导说明书的。

    手工测试中的测试的设计多是利用了因果图,等价类划分方法,边界值分析方法 ,错误推测方法 ,因果图方法,判定表驱动等这些方便人工分析的方法来完成测试用例的设计,使用这些方法来完成测试的设计对测试人员的要求比较高,在正式的测试中,这些工作都是测试项目负责人或者有相当经验的高级测试工程师来完成的。这是因为在这一分析的过程中,更多的需要的是工作的经验,人的智慧,人的责任心和耐性。这一过程同样是比较繁琐和关键的,它直接决定了最后我们得到的测试用例的质量。

    而在自动化测试中,测试工具多是使用了类似于软件开发过程中的那种迭代的方法来完成测试的设计的,它是一个逐步求精的过程。而且对测试的分析过程中出现的遗漏的条件很容易在下一次迭代过程中加入。相对手工测试而言,这是自动化测试在测试的设计过程中的最大的优点。例如,在Rational Test SuiteTestManager中,我们可以通过下列步骤完成测试的设计:

    指明基本步骤需要与应用和系统交互,以便执行测试。就是测试项目中测试用例在未来得测试脚本中的安排顺序的考虑。

    指明如何有效的使特征恰当地工作。就是解决如何安排测试得校验点的问题

    说明测试的前置条件和后置条件。解释测试的先导条件和后续的现场回复工作。

    说明测试的可接受标准。说明清楚测试所要达到得精度。尤其是在测试那些与数据处理程序相关得项目中,这一点尤其重要。

    所以在自动化测试中,测试的设计比一个手工测试的设计要更抽象,但是它可以容易地发展成一个测试的执行,但是自动化测试方法中测试的设计会受机器配置的制约。如机器系统硬件系统,软件系统的配置,网路系统的配置等等,这些在自动化测试过程中必须考虑进去,但是手工测试则不一样,它比较灵活,我们人工可以很容易的改变机器的配置,而后再次进行测试。

    (4)测试的实施

    测试的实施其实在这里对手工测试而言是要得到真正可用的测试用例,以形成测试执行人员在进行测试执行时的依据。这一步骤对手工测试尤其简单,因为在手工测试过程中一旦完成了测试设计,那么测试用例的生成就是一件极为容易的事情了。在大多数的手工测试项目中,测试主管往往是将这一步骤和上面的测试的设计是混合在一起来执行的,最终是要形成可是的文档的。

    对自动测试而言,测试实施的活动包括了可复用测试脚本的设计和开发,测试脚本用来实施我们的测试用例。在我们使用了迭代的方法完成了测试的设计后,就可以得到了实际上可以使用的测试用例,这时我们可以将测试用例和根据测试用例开发出来的测试脚本进行结合,将它们联系在一起。在这种联系的过程中,脚本和测试用例之间的关系并不一定是一一对应的,大多数的情况下,都是一个测试用例对应了一个或者一个以上的测试脚本。

    在每一个测试的项目中,测试的实施都是不相同的。我们需要注意的是,自动化测试中往往要求我们将测试用例和开发出来的测试脚本组合进行顺序,优先级,执行次数上进行安排。如在Rational Test SuiteTestManager中,它提供了一种称为Suite的组合方式,就是将许多的测试用例和脚本进行组合编排,形成一个测试Suite,在Suite中我们可以添加同步点,时间延迟命令,场景等等,使得在一个测试Suite中可以在多台不同测测试机器上同时执行。这种Suite还支持嵌套使用。

    相对手工测试而言,自动化测试在这一步骤中要花费比手工测试更多的时间。但是测试脚本的质量的好坏直接影响了整个测试项目的进行。所以这一个步骤对自动化测试项目而言是其关键。

    (5)测试的执行

    测试执行对手工测试而言,就是一个启动机器和被测试的程序,按照测试用例规定的步骤一步步执行测试的过程。在这个过程中,我们输入的数据的值及类型均已经在测试用例中有了明确的规定,预期的输出在测试用例中也做出了清楚的说明。测试人员只是一个被动的执行测试用例过程。这个过程对测试人员而言是一个比较枯燥且乏味的阶段。只是到了测试输出后,测试人员需要将测试的实际输出和预期输出进行人工的比较来确定软件中是否有BUG存在。

    但是对自动化测试而言,我们的测试执行活动包含了要求自测试的实施的执行就应该确保系统功能的正确性。通过自动化测试工具,我们可以做到:

    一个单独的测试脚本

    一个或更多的测试用例

    一个测试的集合(如TestManagerSuite),执行一些测试用例和测试脚本的混合体,这一过程是通过一台或更多的测试用机和虚拟测试者来完成的。

    例如在Rational TestManager就提供了如下的几种测试:

     GUI测试-图形界面测试

     VU测试-虚拟用户测试,多用于性能测试中

     VB测试-针对VB的测试

     Java测试-针对Java系统的测试

     Manual测试-手动和自动的结合测试

     CommandLine测试-命令行的测试

    需要注意的是,自动测试一旦启动执行后,只要测试脚本是正确的,一般情况下,它的执行是不会轻易被终止的,除非是脚本执行结束或者测试人员人工干预终止。由于这种特性,所以,自动测试大多利用的是测试人员的非工作时间来执行的。这样能大大提高人工效益。但是,相对手工测试而言,自动化测试的执行对脚本的依赖程度极高,一旦测试的对象发生改变或者测试环境发生了改变,就会导致测试脚本出错,使得整个测试无法顺利执行。而手工测试不一样,手工测试最大的特点是灵活性极高。一旦测试的对象或者测试环境发生了改变的话,测试执行人员也能很容易的发现错误,即使是测试用例没有改变。所以在测试执行的灵活程度上,手工测试的程度要好。但是自动化测试的费效比比较高。

    (6)测试的评估

    测试的评估活动包括:

    确定实际测试执行的有效性。执行的是否完全?执行失败是否因为不符合前置条件?

    分析测试输出以确定结果。在执行测试过程中,你查看报告上已产生的数据来检验该执行是否是可接受的。

    查看合计的结果以检查对测试计划,测试输入,配置等的覆盖程度。这也可以被用来衡量测试的进展和对分析的趋向。

    评价本次测试的有效性等等。若是有需要还要向上司给出相应的评价报告。

    对手工测试而言,这个一任务是通过统计过程来完成的。测试人员完成测试后,需要将相关的测试结果记录下来,同时还要统计执行失败的测试用例,从这些数据中形成本次测试报告,上交给测试项目负责人后,由测试项目负责人来完成整个测试项目情况的汇总,并在汇总的基础上完成对测试项目的分析。手工测试中往往要使用到将统计到的大量数据进行公式化的计算才能得出最终的结论和形成最后的报表。所以相对而言比较麻烦,工作量大。

    对自动化测试而言,这一切操作起来相对比较简单,一般情况先可以借助自动化测试工具中带有的报告生成机制完成这个任务。在Rational TestManager中,它里面的TestLog清晰的记录了测试执行,测试过程中发生的问题,测试用例成功和失败的比例,测试过程Log信息,同时在这些信息的基础上,运用提供的工具就可以很容易的生成在这个项目中包含的测试对象的情况汇总。但是,需要我们注意的是,自动化测试工具能对给定的预期的输入(脚本中设定或者取自于测试脚本得数据池)和产生的输出进行比较,但是工具本身并不能告诉测试者软件是通过了测试还是没有通过——它只能说明实际输出结果和与预期结果是否相符。这也是自动化测试和手工测试的一个很重要的区别。所以对于采用自动化测试方式执行失败的用例往往需要还是需要我们使用手工的方式来检查分析,所以从这个程度上来说,手工测试是自动化测试的一个必要的补充。

    在上面的几个步骤中,我们按照测试过程展开的顺序依次比较了手工测试方法和自动化测试方法的区别,我们可以看出来,手工测试最大的优点是灵活,最大的缺点是费效比太低。但是自动测试最大的优点是它处理的快捷,但是不灵活。下面的部分我们就结合手工测试和自动化测试各自的特点谈谈他们各自适合的场合。

     

    4 手工测试和自动化测试的特点及各自适用场合

    手工测试特点:

    测试人员要负责大量文档、报表的制订和整理工作,会变得力不从心。

    受软件分发日期、开发成本及人员、资源等诸多方面因素的限制,难以进行全面的测试。

    如果修正缺陷所需时间稍长,那么想将手工测试应用于回归测试将变得异常困难。这是因为需要测试的测试用例太多。

    对测试过程中发现的大量缺陷缺乏科学、有效的管理手段,责任变得含混不清,没有人能向决策层提供精确的数据以度量当前的工作进度及工作效率。这样往往会导致最后的汇总报表数据不准确。

    反复测试带来的倦怠情绪及其他人为因素使得测试标准前后不一,测试花费的时间越长,测试的严格性也就越低。

    难以对不可视对象或对象的不可视属性进行测试。

    自动化测试的特点:

    可以运行更多更频繁的测试用例。

    可以执行一些手工测试困难或者不可能做的测试。如对不可视对象的测试,利用面向对象的自动化测试脚本就很容易实现。

    可以更好的利用资源。在夜间执行自动测试用例。

    测试具有移植性和可重复性。好的测试脚本往往具有较好的平台移植性。

    可以更快地将软件推向市场。因为自动测试节省了大量的时间。

    但是自动化测试要求的先期投入比较大,而且要求人员必须经过严格的培训。

    所以手工测试和自动化测试各自适用的场合如下:

    测试很少执行的项目中。当测试用例执行频度太小时(一年一次),我们可以直接使用手工测试就可以了。

    软件运行仍然不稳定时,适合使用手工测试。

    测试结果很容易通过人验证的测试项目适合手工测试。

    测试项目中涉及物理交互比较多的时候适合手工测试。如需要经常查看打印机,绘图仪的输出时。

    软件维护时使用的回归测试适合自动化测试。

    执行压力测试时适合自动化测试。例如测试服务器的最大访问上限等。

    配置和兼容性测试等项目适合自动化测试。

     

    5 案例演示和文章总结

    案例演示:

    在一个实时的项目监控的系统中,客户通过手机或固定电话拨号完成数据的输入,当接受到的号码一旦与已知设定不符合的时候,触发报警系统,在打印该输入号码同时还要将它转存到磁带上。

    测试分析:在该项目中,我们需要对客户号码;报警器,还有输出设备(打印机和磁带机)这三个方面进行测试。再进一步分析我们知道,对于电话号码而言可能有好多的形式,但是无论如何,它们的值一定是数字组成的,对接收方来说,只有两种情况,收到了合法的数据和收到和非法的数据。所以它适合使用程序来模拟输入数据和根据输入判断预期的输出结果。可以使用自动化的方式来实现。对报警器而言,它只有两种状态报警或不报警。所以同样可以用合法的数据来触发报警和使用非法数据来测试来判断其是不是不报警。所以同样可以实现自动化。再看第三个测试对象,输出设备的测试,如前面所述,对于这种物理设备的测试只能使用手工测试。

    从上面的这个简单的例子中,我们可以看到,在任何一个项目中,完全的手工测试和自动化测试都是不可取的,我们可以将那些重复频度大,测试输入容易使用程序来模拟和测试结果可以预期的测试可以使用自动化的方式来实现。对于那些涉及物理交互的测试用例还是使用手工方式为好。总体而言,手工测试和自动化测试是相互补充的。在一个具体的项目中,到底谁占重要的部分,这个要根据实际的项目来确定,而不能人为主观限定。同时需要我们注意的是,在我们目前的实际应用中大多数的自动化测试所使用的测试用例大多是从手工测试提取而来的,所以一定要注意对那些手工测试用例的抽象化,否则会导致自动测试脚本中输入数据会有遗漏。造成测试输入不完全,这样就会导致测试项目的失败。

    总而言之,在现代的软件开发项目的测试中,不存在一个项目完全是使用哪一种方法来独立完成整个项目的测试,这是不可能的。只可能是两种方法同时并重或者一个为主,一个为辅。


    主要参考文献(列出作者、论文名称、期刊名称、出版年月)。

    1.       (美)[M.菲斯特](Mark Fewster),(美)[D.格雷厄姆](Dorothy Graham)

    软件测试自动化术与实例详 电子工业出版社 2000

    2.       (美) Ron Patton软件测试    机械工业出版社 2002

    3.       (美)Edward Kit 软件测试过程改进》  机械工业出版社 2003

    4.       Robin F. Goldsmith著《软件测试:V模型,还是X模型?》赛迪网 2003

    5.       Brian Marick著《When Should a Test Be Automated?Testing Foundations 2003

    张友生著《基于Web的系统测试方法》中国系统分析员网站 2003

     

    展开全文
  • 一直以来,软件的测试主要是以手工测试为主,但是随着现代软件的复杂程度的加深,人们对使用手工方式来完成软件测试感到的越来越力不从心,同时因为在软件测试中存在着大量的重复性工作,而这种工作是...


    一直以来,软件的测试主要是以手工测试为主,但是随着现代软件的复杂程度的加深,人们对使用手工方式来完成软件测试感到的越来越力不从心,同时因为在软件测试中存在着大量的重复性工作,而这种工作是比较适合机器而不是人类来完成的。

    因此,自动化测试成为最佳的解决方案;而所谓自动化测试,实际上是将大量的重复性的测试工作交给计算机去完成,一个优秀的自动化测试方案,不但可以满足科学测试的基本要求,而且可以节约大量的时间、成本、人员和资源,这样不仅会大大减少软件工作人员的工作强度,而且会极大的提高企业效益。由于自动化测试在我国开展的时间还不是很长,所以容易有人对它产生误解。特别是有些软件企业的领导,有些人认为自动化测试代价太高,很难实施;而有些人却认为自动化测试可以容纳一切,可以很容易的替换手工测试。其实这些看法都是很片面的。

    本文通过对软件测试活动的实施过程的各个步骤的展开的顺序来对手工测试和自动化测试做一个简单的比较,以达到澄清测试误区目的,为我们在软件测试项目中对测试方法的选择做一点参考。      

    软件测试的实施过程

    对于软件测试活动本身而言,也是一个工程化的过程,要经历测试项目立项,测试计划的编制,测试的设计,测试的实施,测试的执行,测试的评估几个阶段。这一过程对手工测试也好,自动化测试也好都是一样。软件测试活动实施过程图如下所示:

    图片来自pointer_y的博客

    手工测试和自动化测试的特点及各自适用场合

    手工测试特点:

    ● 测试人员要负责大量文档、报表的制订和整理工作,会变得力不从心。

    ● 受软件分发日期、开发成本及人员、资源等诸多方面因素的限制,难以进行全面的测试。

    ● 如果修正缺陷所需时间稍长,那么想将手工测试应用于回归测试将变得异常困难。这是因为需要测试的测试用例太多。

    ● 对测试过程中发现的大量缺陷缺乏科学、有效的管理手段,责任变得含混不清,没有人能向决策层提供精确的数据以度量当前的工作进度及工作效率。这样往往会导致最后的汇总报表数据不准确。

    ● 反复测试带来的倦怠情绪及其他人为因素使得测试标准前后不一,测试花费的时间越长,测试的严格性也就越低。

    ● 难以对不可视对象或对象的不可视属性进行测试。

    自动化测试的特点:

    ● 可以运行更多更频繁的测试用例。

    ● 可以执行一些手工测试困难或者不可能做的测试。如对不可视对象的测试,利用面向对象的自动化测试脚本就很容易实现。

    ● 可以更好的利用资源。在夜间执行自动测试用例。

    ● 测试具有移植性和可重复性。好的测试脚本往往具有较好的平台移植性。

    ● 可以更快地将软件推向市场。因为自动测试节省了大量的时间。

    但是自动化测试要求的先期投入比较大,而且要求人员必须经过严格的培训。所以手工测试和自动化测试各自适用的场合如下:

    ● 测试很少执行的项目中。当测试用例执行频度太小时(一年一次),我们可以直接使用手工测试就可以了。

    ● 软件运行仍然不稳定时,适合使用手工测试。

    ● 测试结果很容易通过人验证的测试项目适合手工测试。

    ● 测试项目中涉及物理交互比较多的时候适合手工测试。如需要经常查看打印机,绘图仪的输出时。

    ● 软件维护时使用的回归测试适合自动化测试。

    ● 执行负载、压力测试时适合自动化测试;例如测试服务器的最大访问上限等。

    ● 配置和兼容性测试等项目适合自动化测试。

    自动化测试其实就是通过自动化工具执行定制好的测试脚本,可以节省人力和时间成本,提高测试效率。但自动化测试不是并不能完全代替人工测试。自动化测试能解决很多问题,同时也带来很多问题。下面是我对自动化与手工测试的一个对比,算是一点心得。

    (1)覆盖率

             优势:在同等时间内,启动自动化测试能够覆盖更多的功能。

             劣势:只适合回归测试,开发中的功能不划算。对于开发中功能,需求或者实现的更改,都会导致自动化脚本的变更,维护脚本的工作量和开发这个功能不相上下,实在是不划算。

    (2)测试效率

             优势:完成同等数目的测试,启动自动化速度更快。

             劣势:脚本开发比用例开发耗时长,包括编写脚本、调试脚本、维护脚本,而手工测试也要对测试哦用例进行撰写、评审、修订。由于用例编写更多为自然语言,时间上肯定会少。这里也引申一个另外的一种观点,直接用自动化脚本替代测试用例,也不乏是很好的做法。

    (3)执行可靠性

          优势:可靠的按脚本执行,后续定位、复现有明确的配置路径可循。

          劣势:程序是死的,人是活的。目前而言,最智慧的还是人。可以说是成也萧何败也萧何,自动化的稳定来源于其死板,而人的智慧体现在思维的跳跃,跳跃的思维也会导致后期不易定位。

    (4)资源利用率

        优势:设备、仪表资源能够7*24小时利用。

        劣势:无。这点上,自动化完胜。

    (5)人力上限

         优势:可进行压力、负载、并发、重复等人力不易完成的任务。

         劣势:无。这点,自动化完胜。

    (6)人员培养

         优势:提升测试人员能力,提高与开发沟通的效率。

         劣势:培养一名自动化测试人员耗费资源更多,不但是功利的说自动化工程师更贵,同时在团队中推广自动化配套的培训、测试管理、产品开发环节都要跟上。增加的环节从某种意义上讲,就是浪费,因为如果不弄自动化,都可以省了。

    往期推荐:
    自动化测试与手工测试对比


    黑盒测试以及测试用例设计

    如何降低软件自动化测试维护成本?

    Jenkins可用环境变量以及使用方法

    如何快速切换Python运行版本,如何选择Python版本

    所处的圈子,成就了你的高度

    Annotation:Part of the content reference to PriticeEveryday's & joshuah's blog(CSDN)



    展开全文
  • 先表明观点:自动化测试是手工测试的有效补充,这个观点我很认同。 但是自动化测试能主导甚至取代手工测试,小编觉得是不可能的。 自动化测试是什么呢? 自动化测试是按照我们事先编写好的脚本,按照一定顺序或随机...

    先表明观点:自动化测试是手工测试的有效补充,这个观点我很认同。

    但是自动化测试能主导甚至取代手工测试,小编觉得是不可能的。

    自动化测试是什么呢?

    自动化测试是按照我们事先编写好的脚本,按照一定顺序或随机顺序,执行脚本步骤,并对比预期结果,得到测试实际结果的一种测试手段。

    既然是事先编写好的脚本,那么自动化测试其实就是为了验证当前逻辑分支或黑盒功能是否存在问题。

    用例覆盖代码分支,是存在一定遗漏的,在数家公司验证过,用例最多覆盖70%的代码逻辑;而用例发现bug的比例,不会超过60%。那剩下的40%,依赖于测试人员的经验和对业务的熟悉程度,所以手工的自由测试或者探索测试,仍然有必要存在。

    这么说也没错,绝对可行。但是带来了第二个问题:自动化测试维护成本相比手工测试,会高多少?如果持平,那么你全部写成自动化脚本,还是很合理。如果过高,很多工程师只会把一些大量重复性的用例转换成自动化。

    在这里插入图片描述

    软件测试中手工测试重要还是自动化测试重要?

    这个问题好像好多人都问过。手工测试、自动化测试哪个更重要❓ 答:都重要,不存在孰轻孰重的问题。

    对软件测试而言,如果软件功能逻辑、界面等变更较频繁,自动化脚本往往不一定适配下一个版本,需要每个版本花时间进行调试,这样对测试工程师来说就叫维护成本。

    如果调试时间太长,靠自己手工测试早就完成了,那么自动化测试的价值就不存在了。

    所以综上所述,我认为自动化和手工测试,都同样重要,而且相对而言,在产品研发初期或者一些小公司,手工测试一定占据主导地位。

    手工测试和自动化测试都基于对用户需求、功能需求的正确理解,对测试对象进行充分测试设计的基础上开展的。

    按照测试阶段或者功能稳定程度来划分,手工测试更适合软件模块、集成测试阶段或者功能稳定性低(缺陷多、变动快等),如果这个时候开展自动化会引入过多的自动化开发、维护成本。

    自动化测试更适合在产品迭代后期或者功能相对稳定的时候开展,通常应用于回归测试场景下

    按照不同的测试对象来划分,如测试百万级的元数据迁移、汇聚处理时,由于数据的多样性,很难通过用手工测试保障质量,自然而然需要考虑自动化的方式提高测试效率,进而保障测试质量。时间有限的情况下,使用自动化尽可能覆盖重复性高的操作。

    同时自动化并不是生搬硬套,根据不同的业务场景选择合适的自动化框架十分重要,可以有效的提高测试开发效率和降低维护成本。如,对于一个含有强流程的业务模块,采用关键字驱动测试框架更利于用例的组织和维护。通常常用的自动化框架还包含数据驱动测试框架、模块化测试框架。

    自动化测试的类型也要因地制宜,如ui自动化、接口自动化等等,也需要结合业务特点、底层架构选择合适的类型开展。

    软件测试中,手工测试是基础

    自动化测试是提升效率的手段,也是未来的趋势。想要做好测试,二者都很重要,不可或缺。手工测试一次完整的测试行为中,可能不包含自动化测试,但一定会包含手工测试。

    手工测试是对被测产品的总体需求进行全面验证,把真实用户所有可能输入的数据分类后进行等价测试,容易查出程序中的错误。

    也就是说,手工测试是以用户的角度,从输入和输出的对应关系为出发点,进行测试的,注重软件的功能正确性。

    手工测试主要试图发现以下几类错误:
    1、用户可能输入的数据千奇百怪,所以手工测试的时候,不仅要测试所有合法的输入,还要测试那些不合法,但是可能会出现的输入。这就需要引入测试用例,来量化管理这些输入的类型,比如等价类,边界值,因果图等,都是常见的用例设计方法。

    但几个测试人员,在规定时间内,就算不吃不喝不睡的测试,也不能涵盖所有可能发生的用户使用场景,这个时候就要引入自动化测试的手段啦。

    2、比如上线一个新版本,除了验证新功能的正确与否,还必须保证旧功能的正常运作。但是针对旧功能,没有必要每次都手工跑一遍测试用例,太费时间。

    我们可以针对旧功能,写一个自动化脚本(比如登录注册页、用户反馈页这些很少去碰去改动的页面),每次都让脚本自己运行一遍,一般没什么大问题。

    3、现在移动端测试,要涵盖的机型很多,苹果还好,安卓的机子简直数不过来,手工去兼容几个,再多就顾不过来了,耽误进度了。写一个自动化脚本,可以运行在所有你要兼容的机型上面,就会节省很多人力和时间。

    自动化当然也有缺点,就是大多数时候,脚本只能是一次性的,如果针对某个功能写了一个脚本,下次这个功能改动了,这个脚本基本就作废了。

    小tip:写自动化脚本,一定要到版本稳定了,再去写,跟性能测试道理是一样的。版本不稳定的时候,去测性能,去执行自动化,会造成大量的无用功。

    展开全文
  • 1 引入测试的原因 信息技术的飞速发展,使软件产品应用到社会的各个领域,软件产品的质量自然成为人们共同关注的焦点。不论软件的生产者还是软件的使用者,均生存在竞争的环境中,软件开发商为了占有市场,必须把...
  • 关于手工测试自动化的两难问题

    千次阅读 2013-10-24 20:34:11
    从今年年初的版本开始,项目要求各特性测试用例的自动化百分比要达到80%以上,于是乎我们花了很多时间在写自动化脚本上。最近的一个项目,因为考虑到后面还有好多轮迭代以及回归,因此我们鼓励尽早做自动化,甚至在...
  • 讨论的内容包括如何通过自动化测试用例的个数和比例测试设计工  背景:我们测试团队包括业务测试团队和测试工具开发部门(测试规划部),近期,部门在讨论自动化测试考核的细节。我们的目标:通过工具提高工作...
  • 自动化测试

    2014-03-19 09:50:12
    1、基本上还没有开始自动化,完全处于纯手工测试状态,这个阶段称为纯手工测试阶段。 2、开始能够去写一些自动化脚本或者一些自动化工具(比如:qtp)去覆盖一些功能或者用例。这个阶段称为自动化的起步阶段。 3、...
  • 自动化测试前沿

    2017-06-16 13:48:43
    什么是自动化测?... 首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter),或自己所写的一段程序
  •  首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来替代或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmter),或自己写的一段程序,用于生成1到100个测试...
  • 自动化测试自动化测试介入时机

    千次阅读 2014-12-13 17:33:56
    2、现在,在阿里不管是接口测试还是UI自动化,基本上都是在与开发同步进行,我们需要将自动化的作用最大化,提高测试的效率。    所有,我最终的建议是尽量提前来做,将自动化的价值最大化。
  • 自动化测试原则

    千次阅读 2018-12-03 16:22:01
    文章目录自动化测试原则自动化测试的目的单元测试 vs 集成测试单元测试和集成测试之间的区别由你来决定每一层级的测试如何对测试排优先级测试即代码DRY 数据驱动测试测试DSL通用测试DSL专用测试DSL范例测试 vs 批量...
  • 什么是自动化测?... 首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter),或自己所写的一段程序
  • 自动化测试的转行

    2017-08-22 14:12:35
     首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter),或自己所写的一段程序,用于生
  • 如何自动化测试

    2017-06-21 11:34:17
    相信绝大多数从事测试行业的同志们对自动化测试有抱有一个美好的幻想,可是到底该怎么实现落地呢? 接下来我将结合分层测试金字塔实际案例为大家分享。  一、了解自动化测试金字塔  说起自动化测试不得不...
  • 什么是自动化测?... 首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter),或自己所写的一段程序
  • 自动化测试简介

    千次阅读 2018-04-20 13:31:26
    1. 基础概念 1.1. 百度百科的概念 首先我们来了解一下“自动化”的概念,来源于百度百科: ...自动化技术广泛用于工业、农业、军事、科学研究、交通运输、商业、医疗、服务家庭等方面。采用自动化技术不仅可以...
  • 自动化包括一切通过工具的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具或自己所写的一段程序。 UI自动化 UI层的自动化测试,这个大家应该再熟悉不过了,大部分测试人员的大部分工作都是对...
  • 1.提高测试人员的工作成就感幸福感,减少手工测试中部的重复性工作 2.提高测试用例的执行效率,实现快速的自动化回归测试,快速地给开发团队质量反馈 3.减少测试人员数量,提高开发测试的比例,节省企业的人力...
  • 很多进入测试行业的人前两年都只会做手工测试,只会点点点,随着年龄的增长,很容易被开发人员嫌弃,被应届毕业生取代,最后只能被淘汰,面临中年危机,找不到心仪的工作。 所以,为了能够延长测试职业生涯,为了...
  • 当下自动化覆盖了很多场景的测试,比如单元测试、接口测试、UI测试、性能测试等等,那么什么条件下更适合用自动化测试呢?先来看看经典的自动化测试分层理论吧。 自动化测试分层 上面这个图想必大家都已经见过了,...
  • 什么是自动化测试

    2021-03-18 15:11:49
    一、概念二、为什么要进行自动化测试三、自动化测试相关知识1、自动化测试在什么阶段开始?2、自动化测试所属分类?3、自动化测试的优点4、自动化测试的缺点四、自动化测试分类 一、概念 什么是自动化测试?笔者认为...
  • iOS UI自动化测试

    千次阅读 2016-10-25 09:18:43
    转载地址:... ...随着移动互联网时代的蓬勃发展,移动终端的自动化测试也在业界日益活跃,总体来看在Android平台上的自动化工具实践比较多,但是说到iOS平台无论从自动化工具的数量还是质
  • python+selenium自动化测试-1概述

    千次阅读 2019-09-09 14:23:27
    在回归测试方面,selenium有很大的优势,一定程度上代替了手工测试,让我有更多时间关注项目业务其他测试技术。 学自动化技术至少要掌握以下几个步骤:获取元素,操作元素,设计脚本业务逻辑,获取返回结果,断言...
  • 自动化测试了解

    2018-07-27 16:02:58
    什么是自动化测?    做测试好几年了,真正学习实践自动化测试一年,自我感觉这一个年中收获许多。... 首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试...
  • 深入理解软件测试自动化测试

    千次阅读 2018-11-13 19:24:18
    编写代码(脚本),也就是把手工测试用例的操作步骤校验转化成脚本实现,然后批量执行代码(脚本)实现测试的目的, 就是自动化测试 从自动化测试的概念推导出,自动化测试用例编写的根据是我们的手工测试用例 ...
  • 自动化测试万能论

    2016-05-28 20:27:07
     其实对于自动化的理解有宏观微观之分。  所谓宏观就是指能够代替人工完成整个所有工作的执行,从而实现无人值守;而微观就是对某一种情况下的部分内容通过代码来自动完成。可以说其实无论是最早的DOS下的ba
  • 自动化测试介绍

    2014-10-15 16:02:49
     首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter),或自己所写的一段程序,用于

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,337
精华内容 4,934
关键字:

自动化和手工测试比例