从表面上看,测试、质量检查、评审是在耽误进度,实际上则不然。如果软件缺陷被遗落并流落到客户那里,其结果是代价高昂的电话费或者现场支持费用,还可能需要修复、重新测试和发布新的产品,更糟糕的情况是产品要被召回甚至被客户起诉。这种成本付出非常高,几乎是在内部修改缺陷时的几何级数倍,一般高达100~1000倍(可以参考PhilipCrosb的相关著作)。

  案例中的情况,实际上是为了赶进度而不进行测试,如果第一版进行规范的测试,后面那些“救火”英雄肯定会少些,同时也会得到客户对公司更大的认可。很多公司尽管对这个道理已经耳熟能详,但接下来如何进一步落实到行动中却是不容乐观的问题。

  树立提高质量是尊重客户的思想。

  作者注意到目前不少公司存在着“愚弄客户”的嫌疑。不管是有心的还是无意的,很多公司认为只要能拿到“钱”已经达到目的了,因此也不在乎是否掩盖缺陷和敷衍客户。案例中的做法肯定是不尊重客户的,因为没有产品可以安装时,不说明实情,反而提供一个“满目疮痍”的产品来临时应付客户,甚至后安排实施人员“硬撑”半年。

  生活中大家都讨厌假冒伪劣产品,但是软件行业从业者的却很少意识到质量不好的软件也是假冒伪劣产品。对客户负责,是对公司负责。“树立客户是上帝”的思想,一定要把重视质量落实到行动中,这样我们不至于拼命的去生产那些“假冒伪劣”软件,后被市场淘汰。在软件产业发达的,已经是客户的买方市场,客户永远会选择质量好的、服务好的产品来满足自己的需求,只有质量好的产品,才可以不断的向前发展。

  建立规范的测试体系和质量保证体系,逐步使软件开发进入良性循环状态。

  在没有开发规范的前提下,软件团队是很少能开发出高质量的软件。因此软件团队一定要建立规范的测试体系和质量保证体系,同时把规范体系逐步落实到工作中。案例中的公司是没有“开发法律”的小软件作坊,所以才倒行逆施。不但做了很多浪费人力、物力的无谓工作,还给客户留下了不好的印象,造成了不良后果。类似案例中这样的开发团队在现实中很多,都是处于混乱的开发状态。解决的根本办法是逐步规范测试体系,进而建立全面管理的质量管理系统,终形成一个良好的开发体系。在好的开发体系下,片面重视进度的情况是不容易发生的。

  2、缺陷反复出现,谁的责任?

  下面的案例取材自某公司产品开发部开发某网络教育平台软件的工程过程。本产品在历时一年半的研发后开始投入测试。测试工作允许的时间为7个工作日。

  测试工作过程记录如下

进度
测试人员
开发人员
其他问题
(1)熟悉软件
(2)阅读项目文档
(3)制定测试策略(2人)
(4)制作测试跟踪表格(1人)
其它工作
第二天
(1)确定测试策略
(2)划分测试任务
(3)阅读各自测试模块的文档
下午做整个系统的业务功能串讲(部分开发人员)。
第三天
开始执行测试
其它工作
缺陷总数70多
第四天
执行测试
其它工作
缺陷总数200多
第五天
执行测试
其它工作
缺陷总数500多
第六天
(1)执行测试
(2)总结测试
(3)撰写测试缺陷报告
其它工作
缺陷总数600多
第七天
撰写测试分析报告
其它工作

   经过7个工作日的测试,得出结果,此系统不可用,需做重大修改。系统经过重新设计,保留了部分原有业务功能和业务逻辑之后重新开发,并进行了测试。测试工作允许的时间为三个月。

  测试工作过程记录如下

阶段
测试人员
开发人员
其他问题
单元测试
build通过,操作均实现
集成测试
数据流转执行正常
系统测试
随着开发过程测试
缺陷总数500多

全部开发完成集中测试
缺陷总数4000多

  在后的系统测试结束后,对测试结果进行了分析,发现如下现象:

  第二版中的4000个多缺陷基本包含了第一版发现的600多个缺陷;

  相似缺陷较多,例如:如果一个程序员写的模块中发现某个页面邮件输入格式没有校验,那么他写的所有页面中包含邮件数据项的内容都不会校验;

  数据校验遗漏较多:如果在一个系统输入了不合法的数据项,那么,整个系统中会出现几十个数据项合法校验遗漏;

  细节错误较多,例如:页面Title不对应的错误在系统中有600多个;

  程序设计风格不统一。相同的功能点,如分页、翻页处理,做得五花八门,并且以测试人员的理解来判断是否为缺陷,导致某些功能点在不同页面能发现个3到5个缺陷。