敏捷了,自动化测试怎么搞?

发表于:2010-9-03 13:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:hsjzfling、maguschen    来源:51Testing软件测试论坛

  问题描述:

  敏捷了,自动化测试怎么搞?

  精彩答案:

  会员 hsjzfling:

  敏捷测试过程中的自动化目前在国内来看基本上还只是停留在概念阶段,据我所知,目前不少公司也都在尝试过程中,而实际的实践中能取得比较理想成果的,极为有限。而国外不少同仁也都对此持观望甚至抵触的态度。比如advanced QTP论坛的administrator Meir大大 就认为敏捷过程中的自动化是完全不现实的,理由就是sprint间隔时间内没办法完成一个完整自动化过程的设计,而频繁的变更会导致自动化资源的大量浪费,ROI上无任何前景可言。

  从我个人观点来看,没必要保持如此的悲观,但更不能过于乐观。敏捷过程是IT发展的产物,自动化从概念上来看是确认一个sprint成功的重要一关。敏捷过程需要有自动化测试,但却不能盲目让自动化介入,否则很可能适得其反。

  个人略作了下小结,由于敏捷模式的种种特色,敏捷过程中的自动化实现所需要满足的条件比常规的自动化测试活动苟刻的多,除了普通自动化过程必须具备的条件之外,主要还有以下几点:

  1、对于自动化工程师的要求更高,除了解决种种突发异常的自动化技能以外,还需要对项目的业务知识有比较多的了解。

  在敏捷模式中,文档不会像传统的模式中那样完备,测试的case可能会相对简易,不少内容都只是口口相传,敏捷团队的成员也不可能专门派一个人出来辅助自动化工程师解决业务问题,那么就要求自动化工程师对于业务知识比较了解了,就算对项目了解有限,但至少要有背景知识,大多数情况下能理解一句话中所包含甚至是隐含的一系列业务操作。

  2、项目成员结构上,自动化工程师需要成为敏捷团队的一员,而不是编外人士。理由很简单,敏捷团队经常会召开类似头脑风暴的会议,一个短暂而激烈的会议足以决定一个变更,然后大家立马投入工作中。这时自动化工程师若作为编外人士,那很可能就得不到这第一手的消息了,很可能吭哧吭哧好不容易码完的脚本还没跑过就得改了。

  3、对于项目、产品的要求。被测系统必须是非常适合自动化的,在自动化脚本开发过程中不应当遇到被某个技术实现难倒的问题,敏捷模式下是没可能有几天甚至一周的时间去处理某个自动化的技术细节的。这就需要在接受项目前做自动化可行性评估的时候考虑周全,是否有某些核心的功能无法被自动化,可以接受多少功能不被自动化。

  另外各story间不能有太强的依赖,因为很可能自动化工程师无法完成对所有功能的自动化,而一个story的需求变更也不应导致其它story有太多变化。

  4、对于BA的要求。BA需要对产品的主要功能非常了解,非常清楚哪些功能是不太会变更,而哪些部分是不太有把握的,同时对客户也要有一定的掌控能力。这样除了提供主要的测试点以外,还能结合变更来给同为最高级别的测试点附加上自动化优先级,在很大的程度上避免自动化工程师的重复劳动。

  总的来说,要实施自动化,对团队的成员素质要求非常高,也要求成员间的配合比较默契。说实话,真的很难,但并不是不可实现。

  会员 maguschen:

  这个问题有点大,我现在所处的公司也是应用了敏捷开发,下面分享一下我们公司做自动化测试的一些经验

  首先,敏捷开发并不是部分同学想象中的那样,没有文档没有需求,开发来了就干,干几个月就丢给客户一个版本让他们用去,我们公司一般6个星期是一个release周期,在这6个星期里面,可以做的事情是非常多的

  1、需求,需求通常来自于PM,在一个release周期的开始,QA通常没太多事情需要做,比较重要的工作就是跟PM沟通当前feature的一些情况,在这个时候,QA可以做一些自动化测试的准备。例如在某个release里面我知道在接下来的测试当中我需要频繁地比较CSV文件,那么作为QA就应该在项目还不是很紧张的时候就开支准备自动化测试的脚本,例如刚才说的这个CSV文件比较工作

  2、开始开发,如果公司是实时TDD开发,那么这个时候QA可以做的事情大概有2个,帮助开发写单元测试用例,并且实施自动化测试(主要是单元测试),另一个是review(虽然不是自动化测试的内容)

  3、正式提交测试,OK,这个时候是我们QA比较忙的时候了,这时候很有可能出现几个情况,1. 跟我的预想一样,我真的需要一个CSV文件比较工作,并且只需要这一个工具,并且我已经完成了,那么就可以进行测试了。2. 可能有一些新的自动化测试需求跑出来了,例如每天晚上自动比较几万个CSV文件并且把测试结果发给相关的人,这时候作为QA,在考虑资源允许的情况下,应该尽早完成这个工具,而不是每天晚上爬起来看结果并非法邮件

  4、发布完毕以后,回过头来看工具,是否有值得改进的地方,是否能够改进一下就能够给整个Team使用

  以上算是一个release周期里面的一些微观的工作,宏观上来说需要做点什么事情呢?

  现在提到的敏捷开发,都有一个很突出的特点,就是产品快速交付给客户,为了快速交付这个目的,公司里面每个团队都作出了努力,那么具体到QA团队,肯定就是要在保持测试质量得到保证的前提下,尽可能地缩减测试所需要的时间,使得产品按时按质交付。要达到这个目的,总靠一些AD-HOC的工作(例如刚才提到的突然写个CSV比较工具)是不可能达到要求的,那应该如何进行呢?

  敏捷开发也是开发,产品不是孙悟空,不会某一天就从石头里面爆出来了。在产品开发的前期(例如0.1, 0.2版本之类),尽可能地想办法搭建一个自动化回归测试的框架,这个框架的特点有:1. 快速完成回归测试; 2.能够快速地添加测试用例并且跑起来;3.能够随着产品的演化而不断改进(不能是那种用1~2个release就要扔的东西);4.维护的成本要低(在一个release周期里面如果自动化测试需求有变化,不应该需要超过1个星期的时间才能改好,当然翻天覆地的变化除外)

  综上所述, 我认为在敏捷开发里面的自动化测试是有2条路线,并且这2条路是并行的,缺一不可

  1、至少一个自动化回归测试框架,保证release前能够对产品进行覆盖较为全面的回归测试

  2、工作中*不断地*开发自动化测试工具,提高自己的生产率

  以上两点的目的很简单,就是要在保持产品质量处于一个较高水平的情况下,帮助公司尽可能地快速交付新版本的产品。

  原帖地址:http://bbs.51testing.com/thread-283407-1-1.html

版权声明:本文由会员hsjzfling、maguschen首发于51Testing软件测试论坛每周一问活动。

原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。

《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • ios_zhangchao
    2010-9-05 19:28:21

    开发模型变了,工作模式不可能一层不变。如果想要在不同的模型中都获得成功,自是要对不同模型对人员的需求有所了解。通过很多科学家及实践证明,敏捷开发是所有开发型中最高效的。如果结果不尽如人意,想来就是实施应用的不对了。下面就是敏捷开发中的测试之我见了。





    1.     敏捷开发模型的自适应性对开发和测试人员的要求。

    -          测试要深入需求变化

    随着需求的变化,产品设计和实现也在做相应的调整。如果测试人员只能从黑盒角度看到变化,那么一则bug发现总是在较晚时期,二则测试任务将是无底洞式的。因为永远循环的重复测试,才能保证新的改动实施正确且没有影响到已经稳定了的功能模块。所以,测试人员要深入产品的设计与实现。这和计划驱动方法下的软件测试方法区别很大。因为,我们不在局限于按计划按时按预算完成工作。



    -          自适应性要深入技术开发层面

    如果仅仅从项目管理层面实行敏捷开发,而忽略了技术层面,敏捷开发也很难得以成功。

    从开发角度看,自测试代码(Self-Testing Code),持续集成(Continuous Integration),重构(Refactoring),和简洁设计(Simple Design)等等这些技术层面上的方法都需要应用执行才能达到开发的自适应。



    2.     敏捷开发的引入将引起测试领域的革命。将底层测试人员和高级测试人员彻底划分开来。这是自动化测试等非手动功能测试方法做不到的。因为敏捷开发小组要求人员的平均素质,而不是一个将领一群兵。这也将使软件开发国际化真正实现—发展中国家脱离外包工厂的名号,进一步发挥人的主观能动性。

        我们知道在中国,或是印度等相对发展落后的国家,大多数的IT工作都是重复的简单的非核心的劳动。这点在《世界是平的》一书中解释的很详细。不难想象,这些人拿到设计说明书,按步骤执行实现需求的功能,这是不需要发挥太大人的主观作用的,大多数工作人员只是按事先规定好的方法和流程做事情。但是,制作软件的全过程都是人在参与,人的主观能动性如果没有得到发挥,将是大大浪费了资源。当然,这项的实施是需要整体人员的综合素质的。

    -          首先,看看微软是怎么划分测试人员的职责的:在微软的测试体系中,主要的测试人员分为两种,一种是SDET(Software Design Engineer Tester),一种是STE(Software Test Engineer)。对SDET编程能力的要求和对开发人员的要求基本上是一样的。他们都须有扎实的计算机基础知识和编程能力。区别可能在于开发人员对算法更加精通,或某一方面的技术钻研的更深入一些。而微软亚洲工程院要求SDET的技术面很宽,要能使用很多种技术,比如可以用C、C#、脚本等来写程序。如果测试人员懂开发,有扎实的编程能力,那么他们能够做一些普通测试人员做不了的工作,比如可以将源代码打开做代码的静态分析,还可以做测试用例的代码覆盖率调查。所谓的代码覆盖率调查,是指考察测试用例能否将所有的源代码都调用到,是一种对测试质量的初步评估标准。而这些恰恰是敏捷开发所需要的。

    -          从公司管理的角度看测试人员的划分:引自“测试人员招聘的尴尬”

    测试人员的岗位有很大区别,包括做UI功能测试、系统测试、数据库测试、自动化开发、环境管理和项目管理等,对技术要求不一样。为了更好地找到合适的测试人员,有一些比较好的办法,例如:

    1.对于功能测试,技术含量低,但要求悟性好、思维能力好、沟通能力和理解能力强等,可以面向高中毕业生和大专生,通过良好的培训,就可以满足岗位要求。他们的稳定性好、肯干。

    2.对于UI适用性和易用性测试,为了打破单调性、习惯性,可以找些合同工、周末钟点工,人员的来源可以根据软件产品的涉众范围决定,包括暑假的教师、政府的公务员(周末钟点工)和在校的大学生等。

    3. 可以招大学应届毕业生,通过4-5个月公司内部的专业培训,可以从事技术要求比较高的测试工作,如API测试、自动化脚本开发。

    4. 通过前几项省下来的预算,可以用更好的薪水招聘具有丰富编程经验和测试经验(4-5年以上)的工程师,从事技术要求更高的系统测试、数据库测试等。

    我想如果是敏捷开发,大多测试分布在整个产品测试阶段,并且很难划分。因此需要测试人员具有综合素质。这种模式下,功能测试、可用性测试、稳定性测试、系统测试、数据库测试等等都是一起进行的。因此,单一素质需求,在这里就不是很试用了。

    3.     沟通-成败的根本

    沟通在任何开发模型中都很重要,在敏捷开发中尤为重要。甚至关系成败。可是,它也是最难写出来量化的东西。有些好的方法可以借鉴,但是实际中的一些细节问题还是要做事情的人本身去思考去琢磨去总结,然后去做好。以下是引用Martin Fowler试图从理论层面达到好的沟通译成中文的一段话。

    “沟通的确是一个非常重要的环节,它是敏捷方法的核心。在敏捷方法中,单元测试是程序员和代码组件的沟通,功能测试是程序员以及QA和系统的沟通,故事墙(Story Wall)和回顾(Retrospective)是团队和成员之间的沟通,功能演示(Showcase 或者 Demo)是团队通过产品和最终用户的沟通,持续集成(Continuous Integration)是产品和企业计算环境的沟通。沟通好了,什么事情都可以妥善解决,沟通得不好,好事也会变坏事。和广大技术爱好者交流沟通也是酷壳存在的目的和意义。”


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ctina/archive/2010/08/02/5783697.aspx

  • generalyi
    2010-9-03 15:32:20

    我觉得描述的太理想了,这需要团队的默契和技术积累,行业知识积累大家都很ok的情况才行,不然自动化在敏捷中只是一个笑话,可是有多少团队能够到达这一步呢

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号