本文以一个工作流测试项目为例,
总结了在测试过程中积累的经验,探讨了目前国内软件开发企业在软件测试过程中遇到的问题以及解决的方法。
测试项目背景和实施情况工作流在某公司软件产品线中占有重要地位。
Workflow项目是5系列中的一个小版本,主要增加了任务代办、任务代理、以及任务交接等功能,同时还修复了一些易用性和功能性的Bug。下面,我们大概介绍一下这个项目的实施情况:
- 项目规模与测试人员配置:
- 项目代码行数:5万行
- 开发人员配置:开发人员5名、实习生1名
- 测试人员配置:测试设计人员1名、测试执行人员2名、实习生1名
- 项目测试时的系统部署情况:
- 测试预期与测试执行情况整个测试项目是比较成功的,项目的时间执行情况和预期的测试指标度量都比较接近。发现Bug总数和缺陷密度都达到了要求的标准。当然,测试周期的实际值比计划值晚了两周,原?因是在系统测试后期,为了满足PSO部门提出的定时器需求造成了一定的延期。回顾整个项目的测试过程,我有几点小小的感悟,愿在此和大家一起分享。
测试如何尽早介入
基于以前的测试经验,我们也越来越认识到测试人员应该尽早介入项目的重要性。简单地沿用测试V模型往往出现很多问题,特别是在项目进度拖延的情况下更是如此。如果测试人员一味固执地被要求严格按照V模型定义的标准来开展测试工作的话,则结果往往是在项目初期测试人员工作量极度不饱和(很多测试人员无所事事),而到了项目后期,一旦项目经理决定压缩测试时间,测试人员就不得不加班加点地工作。但是,不少朋友实践“测试人员尽早介入”的效果并不理想,例如:
- 测试人员参加项目前期的各种会议,会被当作“专职的”会议记录员。
- 测试人员参加代码评审,又不甚了解程序开发语言,浪费了时间其丢失了自信。那么,在这个XXX5.2
Workflow项目中我们是怎么做的呢?实际上,在项目开发初期,测试人员可以开展很多有价值的工作,例如:
- 评审需求文档的正确性和可测试性;根据需求文档整理和分析测试需求,清晰明确的测试需求是测试设计的基础。
- 在开发设计过程中,根据需求文档和设计文档进行测试设计,测试设计方案是测试用例的保证。
- 和项目团队中的集成组和开发组协?商软件版本的编译方式和编译进度以及测试人员提取版本的方式和进度。
- 开发人员每天下午4:30之前提交所有可编译的代码,每天晚上进行日编译;
- 开发经理根据版本稳定情况,每周提交测试申请单。
- 测试人员根据测试进度需要,提取测试版本。
- 提前准备测试环境,包括数据库环境,操作系统和web应用服务器,以及复杂集群环境。
- 如果项目需要,还可以在此阶段研究一下自动测试工具,包括一些准备外包测试的工作。根据产品的成熟度调整测试策略开发测试一盘棋。测试经理应该有大局观,保持测试策略总与开发的进展相一致,保证最终的软件成果最佳(而不是测试部发现Bug数最多)。在这个XXX5.2
Workflow项目过程中,我们合理制定了不同阶段的测试策略,收到了很好的效果。
产品开发期同情的测试
要忍!要在这个能够发现大批Bug的黄金时段学会做减法。就现实而言,这个阶段的产品,大多难以满足系统测试的条件。如果进行穷兵黩武式的测试,无疑会加重开发人员的焦虑心情,甚至对测试产生逆反心理。另一方面,测试工作不应停滞,特别是不少测试人员对产品的了解还流于皮毛,抓紧时间进行“测试练兵”非常有必要。因此,“产品开发期”的测试切忌生硬。其实,此时程序人员也知道产品还不成熟,所以要告诉测试执行人员:
- 这个阶段不要提交界面简单错误和易用性方面的Bug(可以先记录下来到项目末期提交),否则会使开发人员质疑测试人员只会发现简单的Bug。
- 换位思考,了解此时开发人员最关心的是功能是否能正确运行,多对基本功能进行测试。
产品成熟期积极的测试
随着产品的不断成熟,主要功能的实现已经趋于完善,关键路径的测试已经不成问题。此时的程序员们,压力已经大大减轻,他们的工作重点也从“构建”转移到了“修复Bug”,这个阶段程序人员对于Bug的接受程度是最高的,对Bug的修复和反馈也非常积极。于是,此时的测试工作应对整个产品的细节和所有路径进行覆盖测试,保证测试的全面性,层层深入地测试产品值得测试的各个部分,尽可能多的发现并报告Bug。
产品稳定期多样的测试
在这个阶段,可以尽情的向开发人员报告产品易用性和界面的Bug;可以充分发挥每个测试人员的想象力,根据以往的测试经验来搭建测试场景,构造测试数据;可以通过不同业务场景的不同操作,通过特殊的测试数据,以及相对复杂的集群测试环境来进行多样化测试。为什么?因为此时必须测试得更加深入,才能发现更深层次的Bug,于是多样性的测试、探索式的测试必不可少。产品发布期谨慎的测试在临近产品发布的日子,包括测试在那的很多工作都变得谨慎起来:代码的提交权限受到了控制,只保留开发经理一个入口;测试的重点更加具有防御性,要仔细测试每个变更,还可以组织“结对测试”来增加测试的保障。测试经理应知人善任为了保证测试工作的质量,首当其冲地就是应该有专业的测试团队。在很多小的软件项目中,往往没有专门的测试团队。这样一来,到了代码基本完成之时,就只能从客户支持部门或研发部门抽调一些人手临时拼凑出“测试团队”进行几周的测试工作,测试质量难以保证。我们则会尽早规划测试团队的人员结构,完善测试团队的配置。每个测试人员的特点和强项常常不尽相同,例如,擅长测试数据质量的测试员,未必能胜任系统环境配置复杂的测试任务。总之,对测试经经理而言,做到知人善任非常重要。同时,在项目测试过程中及时进行调整有时也很必要。此次测试的工作流系统,要求测试人员不仅应掌握一定的工作流业务知识,还需要有较强的逻辑思维能力。而在此项目测试过程中,笔者发现一位测试人员对功能的细节过分关注,而对整个工作流程总是理解不到位。显然,其设计出的测试用例不能适应工作流测试的要求。于是,立即进行人员分工和测试任务的调整,保证了测试工作顺利进行。坚持立场,规范流程我们公司有严格的测试流程,所有提交测试的软件版本,在提交之前,都要完成必需的冒烟测试(Smoking
Test)。冒烟测试是一种测试包,其目标是检查版本的基本功能。这个测试包是由测试人员根据测试用例中级别为“基本”的测试用例抽取出来的,如果该版本没有通过冒烟测试,则就可以说明该版本不太稳定,不值得提交测试人员进行系统测试。有的公司冒烟测试是由测试人员手工或者自动测试。在我们这个项目中,为了保证每个可测试版本的冒烟测试质量,是由开发人员负责完成的。他们知道,如果程序不能通过冒烟测试,测试小组就会拒绝该版本。因此,他们会填写一份提交测试申请表来申请进行系统测试。在这份表格中,不仅会明确版本号,修改或新增的功能详细说明,还会给测试人员提供此版本的测试重点,以及可能会影响到的功能。这些内容对测试人员都是至关重要和大有裨益的。
在项目测试过程中,我们也出现过打回某个版本的情况,拒绝测试。总结起来,基本上有以下几种情况:
- 由于任务查询的技术难度比较大,开发进度已经延期了5天,测试人员正在焦急的等待这部分的功能测试。可是,新提交的可测试版本中,这个功能根本就不能使用,如果进一步测试就是浪费时间,我们立即打回了这个测试版本。
- 新增了代办的功能,可是以往的代理功能中的增加代理人功能却不能正常使用,而增加代理人功能又是代办功能的基础,也就是说,在这个版本中,及时代办功能完全能够测试,可离开了增加代理人功能,代办测试是没有意义的。
- 在回归测试阶段,可测试版本的提交是比较频繁的。开发人员一旦解决了一部分bug就会提交一个可测试版本,如果此时测试人员并不急需更换版本,并且得知另一个版本会在几个小时之后就会完成,我们可以不测试这个版本。为了能更好的完成冒烟测试这个关键阶段,测试人员积极与开发人员配合:
- 负责提供冒烟测试案例。
- 如果测试人员处于版本等待阶段,主动和开发人员一起做冒烟测试。开展有效测试,提高测试效率有效的测试用例是软件测试成功的关键,有助于提高测试效率和测试覆盖率。在这个工作流软件测试项目中,我们从测试模型(Test
Model)入手,结合丰富的测试经验和专业知识,从繁多的测试用例中挑选出有效的用例,用尽可能少的测试输入,覆盖尽可能多的软件需求。主要采用了状态机模型和组合模型,并结合了正交设计技术和组合覆盖技术,完成了对整个系统的测试设计。知己知彼,合力制胜提供服务使测试人员有机会赢得程序员的信任,同时也有机会展示自己的才能。同时,带来的回报是得到了开发人员对我们的帮助。在整个项目过程中,我们获得了很好的回报,比如:开发人员讲解设计思路、算法流程;和测试人员一起构造测试数据;积极参加每日测试例会,主动解决问题等。这样良好的合作状态与测试人员的主动努力是分不开的,主要体现在:
- 获取程序员信任,及时沟通不要与被测程序的开发人员形成不必要的敌对关系。如果能与打交道的程序员共享信息,比如他们的计划、设计文档的早期草案和早期原型等,测试工作会更加有效。越早与程序员接触,情况就越好。尽早提出你的意见和反馈,了解程序员提交前完成的工作。
- 主动出击,提供服务 ○ 在测试前期,直接向开发人员提供服务;这不仅可以建立信任,而且还可以证明测试人员是能够与之合作的人。我们在项目过程中提供给开发人员的服务:○
对工作流的运算逻辑?构件进行了测试,方便了后期开发工作流客户端应用的使用。○ 对内部版本和原?型进行测试。○
对需求文档的可测试性进行评审。开发人员和测试人员一样,对模棱两可的要求很头疼,他们非常希望测试人员的介入。○
帮助程序员建立测试环境,方便程序员进行测试。
- 耳目作用
在项目过程中,测试人员有机会能够发现很多存在的问题,比如:需求和设计以及开发的不一致性,项目计划中工作任务的缺失等等。测试人员不要仅局限于测试命令链本身,及时验证和发现项目环节中的问题。
总之,测试项目能否成功,与整个项目组的精诚合作是密不可分的。测试人员是一种服务角色,要乐于接受这种角色,只有这样,才能得到被服务的人的帮助和支持,以及认可。 |