敏捷的最佳实践-3

转载:http://blog.csdn.net/star890124/article/details/46459313

第三部分:向敏捷测试转变

引言

传统测试模式下成长起来的测试团队要如何转向敏捷,从个人和团队的两个层面又要做出那些转变呢?有什么方法和标准衡量敏捷测试团队的绩效?如何帮助团队的每个人规划正确的发展路线?团队在部署敏捷的过程中又会遇到哪些问题呢?本文主体就这些问题展开论述。


有关敏捷测试团队和个人的绩效

“如何看待敏捷测试和对测试人员做绩效考评呢?”——敏捷团队中无论开发还是测试都不是个人的开发和测试,这是团队的工作。一名好的测试人员除了能够做好本职测试工作外,表现为愿意并能够做超出原有范围的工作,能够并愿意帮助团队其他成员解决其他复杂问题,实现团队的共同目标。测试人员能够主动发现并弥补团队中的重要缺失的环节,帮助团队其他成员完成工作任务。

测试团队的职责也从仅仅发现问题的工作中向着眼于整个项目质量保障转变。因此不难得到结论,在敏捷团队中,优秀的测试人员身上有其他成员的影子。在 时间紧迫的情况下,他能转变成其他角色,做出更多的创造性的成绩。充分地发挥了个人战斗力,在帮助他人的同时,自信的态度和各项工作中的技能得到增强,自 身也可以获得更大发展。

在一次关于敏捷开发、测试经验交流中,我们认为敏捷测试团队更需要其他团队的协助,在设计测试用例时,团队的设计人员应该帮助测试团队设计测试用 例,并帮助测试团队做更多的面向客户环境的真实测试。开发团队也要确保开发任务的按时推进,和测试团队保持紧密的合作,在测试任务紧要时,也能够转变其职 能帮助测试团队完成测试任务。


测试人员向敏捷转变所需要的技能储备

这引出我们今天要探讨的一个问题,测试人员如何在技能上做好准备以面临敏捷开发的全新挑战。我们认为,一名优秀的敏捷测试人员,需要有较强的学习能 力,至少有主动学习的意愿。除了需要了解各种类型测试以及各种测试工具,测试技术外,也需要了解项目中软件设计模式,软件语言,以及项目的程序组织架构以 便建立和团队的共同语言空间。

因为敏捷团队是一个高度协作的团队,在这样的团队中工作需要很好的沟通技巧,语言能力和协作能力。

除此之外,团队的每个成员,都应该认真学习并努力寻找适合自己团队的敏捷模式,并沟通以达到团队成员对敏捷开发模式的统一认识,使得团队其他成员对自己工作的充分理解和建立起成员之间的相互信任。


测试人员向敏捷转变所需要的方法

首先我们建议采用迭代的开发模式作为向敏捷的模式转变的起点。很多传统开发模式或者基本上还是瀑布式的开发,或者是周期性的瀑布式开发,这些都不是 敏捷的迭代。敏捷的迭代是高度的迭代,不是瀑布开发的不断累加。换句话说,传统开发是传递性的工作,一方完成,另一方接手。而敏捷活动的迭代行为更强调尽 早开展各项活动,从迭代的一开始就协同工作,共同实现团队迭代的目标。而一旦抵达迭代的周期中最后一个工作日,此迭代宣布退出。

当完成了向迭代活动的转变完成后,接着,我们开始寻找项目过程、管理、执行中最紧要的问题,并使用敏捷开发中的最佳实践来一一解决这些实际问题。也 许,一开始这个过程是很缓慢,而且很难做到一步成功,但是必须通过不屑的努力和足够的耐心,慢慢转变团队的固有思维方式,并最终努力获得团队对改进后结果 的统一认可。而一个问题被解决,或者不再是项目中最严峻的问题时,我们应该开始寻找下一个待解决的困难了。重复这个过程直至成功的将团队中有悖于敏捷原则 和实践的过程和方法调整过来,同时将正确的思路和方法带给团队。

在最近的几次与其他敏捷测试团队的讨论中,我们同时了解到许多软件开发项目中的测试团队遇到过类似的一些问题,如开发团队没有做单元测试或做得太 少,继而在开发过程中的遗留了大量质量缺陷和频繁的回归现象。这使得测试压力急剧加大,测试过程严重受阻,甚至影响到整个迭代的退出和项目的输出结果等 等。又或者传统的开发中的测试团队因为很少有条件去认识客户,了解和实际用户相关业务需求。测试脚本和用例的设计只是基于开发人员撰写的功能说明。因此, 难以做到对需求变化做出快速反应。经过讨论,我们推荐给对这样的团队如下参考方案。

  • 首先开始采用测试驱动开发 (Test Driven)。

开发人员首先要善于使用测试驱动开发方法写每一行代码,先写测试脚本后写代码,并反复使用单元测试脚本验证所写代码的正确性。

  1. 列出需求

  2. 为需求撰写一个单元测试脚本

  3. 执行测试确信测试结果是失败的

  4. 然后,写上仅仅足够的代码以使得先前的测试可以通过

  5. 当所有测试通过了,便可以开始写下一个测试脚本

  6. 针对需求有效的实现所有测试脚本

另外,当需要代码重构时候,也应该先重构单元测试脚本,在改动代买之前同样先改写测试脚本。

  • 尽早的开始测试,开始系统测试,不要等待到功能完全做好才开始。

 

了解计划中的待实现的功能,了解其权重分配,设计系统测试和功能测试用例。测试执行的一开始可以是针对部分功能的,之后可以逐步扩展。接着开始采用 迭代的过程完成测试任务,即将测试任务划分为多个周期,一开始可以做些关键的功能性测试,可以对代码中的可复用部分(组件,构件)做完整的安全测试,性能 测试,压力测试,并发测试,全球化测试等。接着的迭代周期可以做边缘化的功能测试和其他测试,最后的几个迭代应该用于回归测试,和关键的性能和稳定性测 试。


然后策略性的进行自动化测试,设计并开发可以用于日后回归测试(Regression)和用户接收测试(Acceptance Test)的自动化脚本,持续维护与开发这些脚本。自动化测试为团队带来的是长期效益,自动化测试的开发也应该首先选择部分测试对象,例如,API,框架 等比较稳定和关键的功能做功能测试的自动化;对产品的性能指标,压力测试也要较早的制定自动化测试的计划。


最后,要学会做静态测试,做好需求分析,做好对设计逻辑的分析。测试人员要更多的思考需求的可实现性,将自身作为第一用户积极参与项目和系统的需求分析,设计和开发。积极地参与前期工作,并迅速反馈给设计和开发其静态测试结果。


而且,要做好敏捷测试,我们需要转变测试等待开发的思想,测试人员需要了解开发,需要读懂代码,才能够更好的帮助开发人员分析和分离复杂问题。有甚者,测试人员可以成为开发人员的后备力量。当团队中需要更多的人撰写代码时,测试人员应该勇当其职。


团队组织的变化


敏捷的测试团队在实战中常常不需要其他人帮助做计划和分配任务,成员在各自的敏捷团队中自我管理模式下制定可行的计划与自行分配任务,并直接报告给 项目的管理层。只有在特定的集中测试模式下才需要通过测试团队的领导者形成整体的测试计划和报告。因此,敏捷测试团队是一支即能独当一面又能够默契合作的 适应力,灵活性很强的团队,这正是团队自我管理的核心思想。因此,转变到敏捷开发模式,传统组织结构也需要经历一次调整,调整围绕两个主题,第一,团队充 分授权各成员,对于如何交付结果,成员可以保持较大的灵活性,但成员自身需要对这些结果负责。第二,团队领导者需要协调团队成员对资源的共享和竞争,当敏 捷团队各自计划和实施其工作时,团队领导者应该帮助团队成员建立比较清晰的责任界限,团队角色划分,协调团队中各种资源的使用,鼓励团队之间的相互交流和 协作,帮助培养团队成员对其所属的自主决策能力。


团队需要建立良好的鼓励机制,这里我没有用激励一词,因为我们认为团队成员已经饱受着来自自身、外部的各种压力和刺激。团队要在这种高压的环境里保持高昂的斗志,一定需要更多的鼓励和关心团队中的每一个成员。并且,通过鼓励团队的创新,尊重团队的多样性,培育各种想法,使得团队自身更加善于思考,高效的达到预期目标。相反,处处压制和迫使团队成员按自己的方式做事情,将使得团队的活力降低,生产率下降。


当然,在这里我们更要需要关注团队的核心人物——团队的领导者,在敏捷团队中,团队的领导者更多是一个实战经验丰富,能够独立完成自身所承担的敏捷 项目组工作外,也能够辅导和帮助其他团队成员做好各项工作的重要角色。优秀的团队领导者往往会成为主导项目成败的关键,然而一个不能够很好转变固有思路, 自身都不能做好敏捷测试所涉及的工作的所谓的领导者是自然没有能力去完成培养和发展自我组织,自我管理的团队的艰巨任务的了。很显然,越来越多的传统团队 的领导者具备了领导者和管理者的双重身份,然而,敏捷的团队中,并不需要这样的双重身份。而团队民主,平等的建立才是团队领导者和团队所有人需要尽力保护 和推崇的原则。而敏捷团队中的领导者更多是团队的领军人物,他 ( 她 ) 明确下一步要做的事情,勇于挑战新事物,不怕承担责任,具备正值,公正,协调能力强的特点,更重要的是他(她)是团队中的模范,他 ( 她 ) 的影响力,正是领导力的源泉。因此,如果传统测试团队需要发展成为敏捷测试团队,那么团队领导者的职责和形态的转变也必然十分重要。


最后,团队用人和人才配置仍然需要慎重考虑,换句话说,就是因人而异的安排工作。举个例子,在一个分布式的敏捷团队中,集中在中国的测试团队需要划 分出几只小团队分别服务于不同的敏捷开发团队,其中有美国、德国、日本三个实验室参与到这个项目中来,面对时区差异,项目所需技能差异。我们建议在没有更 好的办法的情况下,选择了体力很好的同事在有时差 12 个小时左右的敏捷团队中,将学习能力强的同事放到新技术含量最高的敏捷团队中,代码经验丰富的同事放到做底层架构的敏捷团队中,这样来以达到测试团队的最 佳组合与配置。

敏捷测试的计划与管理

测试用例的撰写和传统测试基本没什么差异,按照已有的模式撰写就好了。笔者的测试团队,使用了 XML 文件格式保存所有测试用例, 原因主要是沿用了测试团队原有的习惯,而同时也因为 XML 测试用例能够更好的匹配自动化测试的需要,并且便于更新。测试脚本是自动化测试的产物,敏捷开发周期短,变化多,很难拿到一个稳定的产品再开始做自动化。 而自动化脚本的设计自然要避免去测试不稳定部分,开始的迭代周期几乎百废待兴,自动化作用不大,到了中期,笔者的团队自动化测试才稍成气候。


在迭代验收之前团队要通力合作解决各种能够解决的问题,保障 Backlog 的如期完成。这里有一个问题值得再次提出来和大家讨论,或许曾在敏捷项目中的许多人也都遇到了,那就是出现了一些质量缺陷没有来得及在迭代退出前完全解决 的现象。那是不是说明测试不能够退出呢?笔者的回答是“不”。迭代的验收时间即是迭代退出时间,也是测试团队必须退出的时间。在实施中,我们将这些来不及 解决的质量缺陷分成三类,一类是“希望能够解决”的质量缺陷,这部分未解决质量缺陷将要成为新一轮迭代的“将做事宜”,甚至可能作为新一轮迭代的需求做到 Backlog 里。第二部分是“必须解决”,这部分因为直接关系到最基本,最关键的功能,这样的质量缺陷必须被立刻解决,否则就必须承认本次迭代的失败了。第三部分是 “不再重要的” 质量缺陷,这部分质量缺陷可以因为技术的不可实现,对客户产生较小的影响或者考虑到不久因为代码重构,这样的问题不在存在的理由,经过团队和 STAKEHOLDER 的批准可以置成“推迟解决”,待日后解决或者定义到产品的版本说明文档中。


其它:

由于敏捷开发的流程是不断迭代的过程,所以很多复杂的功能可能会在未来的 Sprint 周期中被优化。对测试人员而言,一个有效的方法是尽量将一些验证基本功能的测试用例作为基本验证测试用例(Basic Verification Test Case)在第一时间实现自动化;而对一些复杂的功能测试用例,可以先采用手工的方法测试,直到在未来 Sprint 周期中该功能达到稳定时候再考虑自动化。

posted on 2016-08-12 16:28  竹雨阑珊1  阅读(267)  评论(0编辑  收藏  举报

导航