软件测试为什么会失败

                              共创力研发咨询/杨学明

      案例1: A公司是一家从事网游点卡交易的互联网公司,去年年底我司做调研时发现一个问题:测试部门有近40人,独立于研发团队,团队成员分为自动化测试和手工测试两个小组,测试经理则是从IBM过来的,但据研发和测试人员反应,测试人员的地位非常低,自动化测试岗位形同虚设,没有起到任何作用,在互联网软件开发的过程中,测试人员的价值非常有限,测试员工的成就感非常低,最近一个月也有30%-40%的离职率,这个问题让负责测试部门的陈总非常头痛,一方面人员不太稳定,一方面软件质量的问题越来越多....

      案例2:B公司是深圳一家医疗电子企业,公司有专业的软件测试部,独立向研发管理部汇报。经过我司的调研,B公司的软件测试流程已具备,专业的测试人员也有一批,但测试人员相对于开发人员普遍薪酬低,缺乏激励,加上公司领导层对研发过程质量不太关注,研发过程中测试不充分,导致许多致命的问题到客服现场才发现,最后又把责任推到测试头上,测试人员不愿意承担责任,导致团队的测试效率非常低下,开发与测试之间相互推诿....

      以上两个案例,是中国目前很多企业遇到的问题。软件究竟需不需要测试,软件的测试究竟怎么做?如何通过软件测试来保证产品质量?....在软件开发越来越占重要地位的今天,越来越多的领导层已认识到软件测试的重要性,但除了华为、中兴、腾讯等为数不多的几个公司做得好一点之外,很多企业都还在摸索,测试部门的价值在一个公司里往往成了争论的焦点,测试人员的地位也无法与开发人员抗衡。

      笔者曾经分别任职于华为和阿里巴巴公司,也曾经服务过一些中小型软件公司,成功和失败的案例都有,总体来说,中国目前的软件测试体系还不成熟,很多公司试图做好软件测试,但由于在测试管理、测试技术、测试流程等方面缺乏高度的认识,往往导致测试失败,如测试人员的待遇问题、测试技术如何提升、自动化需要做到什么程度等等,测试为什么失败?根据笔者多年的测试管理经验,可以归结为以下三个方面:

      1)缺乏测试组织的支撑。许多公司的测试组织仍然附属于开发部门,没有独立的测试环境,不能从公平、公正的角度指出软件存在的缺陷,并要求在限定的时间对软件的缺陷进行修复。国外较成熟的测试组织(如微软,Yahoo等),测试组织属于QA部门,而不是研发部门,这样更有利于保证产品质量。另一方面,许多公司对测试部门的定位是QC(质量控制)部门,而测试部门并没有控制质量的权利,而成了QC(质量检测)的角色,即在最后一个环节对软件产品进行验证,这个时候为时已晚,产品质量的很多问题可能已无法测试出来。在华为公司,测试和开发是平等的,两个部门都是PDT(产品开发团队)的组成部分。如下图所示:

 

   PDT是临时小组,在项目开始时成立,在产品成功发布后解散,PDT成员在概念阶段一起作整个项目的计划,PDT成员在执行阶段一起管理整个项目,测试人员和开发人员同时参与项目的整个过程。只有测试人员一开始就进入产品开发团队,才能有效的保证产品质量,因此,建立独立于开发的测试体系是非常必要的。

2)缺乏测试流程的保障。很多公司建立了规范了开发流程,如CMMI或IPD等等,但软件测试往往成了短板,如开发的版本发布频繁,测试人员疲于奔命,测试人员缺乏质量检测标准,测试过程中的软件需求变更过快,没有测试结束标准等...这些都是缺乏规范的测试流程的表现。没有规范的测试流程,研发人员会经常会以此为借口,发布没有完善的软件版本,开发过程中不做版本规划,修改缺陷时经常返工...这些,都会增加测试人员的工作量,而作为开发的下游部门,测试人员很难去改变开发人员的这些不规范的行为,只能用大家公认的流程去约定大家的开发行为,如单元测试、集成测试、系统测试、验收测试的入口条件、中断条件、出口条件等。同时,在开发过程中,对开发人员和测试人员的行为进行约束,如开发修复缺陷后需要返工,要与绩效挂钩;测试人员漏测试致命或严重缺陷需要处罚等等。目前,业界较流行的开发流程采用V模型:

 

     V模型的特点是:开发与测试紧密相连。在V模型中,从项目的需求分析、

概要设计、详细设计到具体的编码编写。开发的每一个环节都和软件的测试紧密

相扣,可以有效的保证产品质量。各个阶段测试的工作如下:

    需求阶段主要活动是:测试工作从需求文档中,设计系统测试的用例,

按照需求文档的功能划分,突出测试重点。完成系统测试的计划工作。

    在功能概要设计阶段活动是:依据功能概要设计的目标,设计测试用例,对集成测试阶段的目标,作好一个准备。

    在详细设计阶段的活动是:在这一阶段,对应的测试工作是单元测试工作,通过详细设计的说明,测试工作人员可以准备好测试用例。这个是最小的测试执行单元。

    在编码阶段的活动是:测试工作可以根据上述的单元测试计划,进行单元测试了。一面编程,一面进行单元测试。充分的单元测试可以极大的提高程序的质量。因为很大的一部分错误都是在单元中发现的,如条件组合问题、边界值问题等。

    编码工作全部完成后,测试工作就可以按照计划进行。从单元测试、集成

测试、到系统测试。最后还有验收测试,验收测试工作主要是面向客户,向客户演示软件功能的实现。通过系统测试的用例。给客户展示,并确保用例全部执行通过,测试工作完成。建立规范的测试流程对测试部门的效率提升是非常关键的一环。

3)缺乏合适的测试人员。很多公司的HR认为对测试人员的要求较低,不需要懂得太多的知识,也不需要具备很多经验,测试谁都可以做。其实,这些观点都是错误的。要招聘到一个合适的测试人员不是一件容易的事。因为一个合格的软件测试人员需要同时具备以下条件:

具备一定的产品和业务知识。

有一定的怀疑精神,有寻根问底的精神。

良好的沟通能力。

具备一定的编程能力,只有懂一两门编程语言,跟开发的交流会更加顺畅。

具备良好的文档编写能力,能编写较规范的测试报告。

总结及分享的能力,能及时总结测试经验及与他人分享的能力。

学习能力较强,对新业务、新技术和新产品功能的掌握较快。

具备发散性思维,需要对客户的正常操作及异常操作进行推断。

掌握一定的自动化测试方法和工具,能对测试效率不断进行改进。

   除了上面几点之外,还有些公司对测试人员的英文水平要求较高,或者要求有带领团队的能力。可见,测试人员需要掌握的知识还真多,具备以上要求的测试人员或管理人员少之又少,除了招聘之外,公司内部也可以进行培养。

   由此可见,人、流程、组织对软件测试的成功进行缺一不可。当然,研发管理的规范性,测试人员的绩效考核和激励机制也是非常重要的因素,一定要解决测试团队的成就感问题,同时,应建立测试人员的职业通道。只有这样,测试才有可能做好,不会陷入“测试人员走了一批又来了一批”的怪圈,一方面团队不稳定,另一方面产品质量也不会稳定。