zoukankan      html  css  js  c++  java
  • [转]软件测试为什么失败?

    原文链接:软件测试为什么失败

    案例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认为对测试人员的要求较低,不需要懂得太多的知识,也不需要具备很多经验,测试谁都可以做。其实,这些观点都是错误的。要招聘到一个合适的测试人员不是一件容易的事。因为一个合格的软件测试人员需要同时具备以下条件:

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

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

    ③ 良好的沟通能力。

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

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

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

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

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

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

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

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

  • 相关阅读:
    HDU1879 kruscal 继续畅通工程
    poj1094 拓扑 Sorting It All Out
    (转)搞ACM的你伤不起
    (转)女生应该找一个玩ACM的男生
    poj3259 bellman——ford Wormholes解绝负权问题
    poj2253 最短路 floyd Frogger
    Leetcode 42. Trapping Rain Water
    Leetcode 41. First Missing Positive
    Leetcode 4. Median of Two Sorted Arrays(二分)
    Codeforces:Good Bye 2018(题解)
  • 原文地址:https://www.cnblogs.com/hust-ghtao/p/4331229.html
Copyright © 2011-2022 走看看