谈如何提高产品质量

最近,我们的产品上线了,上线之后,稳定是最重要的,但是,出现了几次bug,都是不应该犯的错误,所以,避免bug特别是重大bug出现,提高产品质量,非常迫切。为此,我花了几天时间,翻一些资料来系统地学习,此文是学习的总结。

产品开发过程

产品开发过程:需求分析、设计、编码、单元测试、集成测试、功能测试、Beta测试和发布。在工程师开发之前,策划或产品提过来的需求、策划的配置文件或者后期的测试,都可能影响产品质量,但是,本文侧重于从开发者角度谈提高产品质量。先分享一张来自《Code Complete》的插图。

可以看到,随着项目规模变大,架构、设计和集成测试、系统测试需要的时间会更多,而编码和开发者测试的时间更少。因此,提高效率最为明显的方法是提高产品质量, 减少测试、调试和修改所需时间。所以,设计、测试和编码同样重要,要分配更多时间,编码完 != 工作完成。

测试的重要

在很多大一些的IT公司,比如微软,开发职位叫Software Development Engineer,SDE,软件开发工程师;测试职位叫Software Development Engineer in Test,SDET,软件测试开发工程师,可见测试人员本质还是开发工程师。这有别于我们在公司里常常见到的QA,我是做游戏的,我见到的QA都是打开游戏,然后点点点,从表现上测试功能是否正常,这样测试是无法全面测试的,这也难怪在很多公司里QA比开发团队地位低。我觉得,对于测试这个职位,要做好,是很难的。他要能读懂策划文档和开发文档,从源头上开始着手。如果白盒测试,要能看懂别人写的代码;如果黑盒测试,要和开发人员多沟通,画出来实现的流程图,并且分析网络协议;然后,设计完备的测试用例。如果不根据需求、设计和实现,设计完备的测试流程,而只是操作一下试试功能是否正常,很多隐藏的bug是测试不出来的。

在传统软件行业:软件的质量和稳定最重要,代表企业:IBM、微软、思科等。根据我查到的资料,开发与测试人员比例,微软1:1,思科1:1.5,普遍在1:1 - 3:1。SDET从需求文档、设计文档开始Review,SDE编码,SDET写测试用例,跟极限编程的过程类似。极限编程的基本过程:构思
-> 编写测试代码 -> 编写代码 -> 测试,编写测试和编写代码都是增量式的,写一点测一点,在编写以后的代码中如果发现问题可以较快的追踪到问题的原因,减小回归错误的纠错难度。

而互联网行业:快很重要,有bug在线上也方便修改发布,更提倡full stack developer,代表企业:amazon、facebook、google等。开发与测试人员比例,google 10:1, MySpace 5:1。阿里资深专家,amazon前高级经理,陈皓认为:并不是互联网公司认为测试不重要,而是他们认为正因为测试很重要,所以才不应该交给只做测试的人,开发人员要对自己开发的产品质量负责。对于一个公司,“产出性”的人应该多于“支持性”的人。当你的条件受限人手不够的时候,你必然不能干所有的事,但你要去做很多自动化的事情,不管是自动化部署还是自动化运维。然而当你的人多的时候,你必然只会简单用人来解决问题。劳动密集型与知识密集型的公司差别就在这里。

以微软和google为代表的保证产品质量的做法,都有道理,而且都是成功的。但是,我个人更倾向于full stack developer,第一,招很多SDET对大部分公司都不现实,合格的SDET薪资不会比SDE低;第二,我认为开发人员要对自己的开发的内容负责,主动的想办法提高产品质量,而不是被动的等测试。

产品质量目标

评估产品质量,常用的是千行代码缺陷率,以下是查到的一些业界的千行代码缺陷率数据。典型的统计表明,在开发阶段,平均50~60个,交付后15~18个;微软内部测试的产品10-20个,正式发布产品0.5个;某外包公司,A级≤ 0.5个,B级≤1个,C级≤5个;航天飞机的软件,0个/50万行。缺陷率做到平均水平的1/10是很少见的,而如果10倍以上,产品可能永远也不会完工。

跟性能瓶颈一样,80%的错误往往出现在20%的代码中。大部分错误都是低级错误,比如,对需求或设计的误解、书写错误、赋值语句、边界错误或循环错误。大多数错误是容易改正的。另外,warning是很多错误的根源,所以工程里要禁止warning。

发现错误

主要通过检查和测试。检查包括:需求检查、设计检查、代码详查,测试包括:单元测试、集成测试、系统测试等。

有统计数据表明:单元测试的平均错误检出率是25%,集成测试35%,小规模Beta测试35%,系统测试45%。而对设计和代码进行详查的错误检出率分别是55%和60%。

检查

阅读代码要比测试平均每小时多发现80%多的错误,代码检查和测试所获得的收效之比为8:1。这是因为,错误越早发现,解决成本越低。

检查方法:协同编程,详查需求、设计、代码。不仅仅是检查,要提前思考怎么做?带着思考检查。

单元测试

1. 基于结构的测试。测试用例要覆盖每一条控制语句,if for while and or switch case等。

2. 数据流测试,避免重复初始化、重复销毁、定义不使用、未初始化使用等情况,检测数据流变化。

3. 错误猜测:

1). 边界分析,>=与>的区别,null、size是0的情况,比如测试小于MAX,三种边界情况<MAX、MAX本身、>MAX,10000个好友/道具的时候会不会导致游戏卡死?

2). 复合边界,int add(int a, int b),a和b都小于2^31,但是,如果a和b都很大,它们的和会不会出界?

3). 坏数据,太小/大的数据,未初始化的数据,错误类型的数据,错误长度的数据等。

4). 向前兼容和向后兼容。比如,游戏最新版本是2.5,但是有的玩家一直不更新,还是1.0,要兼容这些玩家。

集成测试

在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,进行集成测试。

执行方案

综合考虑我们团队的实际情况,最后我制定了“详查+单元测试+集成测试+系统测试”的方案,来提高我们的产品质量。有些方法,比如协同编程、净室开发,虽然很好,但是对于我们的团队来说,执行起来太难。ps:我对净室开发很感兴趣,正在研究,研究透以后可能会试着采用。

详查:先自己详查,从需求开始,然后是设计和编码;然后,团队中的小伙伴互查。关于详查,有两点需要注意:1. 检查前,要先制定代码规范,让开发人员不把精力耗在代码规范的争执上。2. 详查结果不作为员工表现的考核标准,考核应该基于最终的产品。

单元测试:重点是理清流程,针对每个流程都测试到。集成测试:把单元测试的功能组合起来测试,侧重于模块的整体性。系统测试:有点像QA的普遍工作,从功能上测试,各个需求点是否都正常。

执行:我首先制定了代码规范,并给大家讲解,然后征求大家的意见统一。然后,写了一份本文章的内部版本,并给大家详细讲解(为了让小伙伴们更容易,内部版本细节比较丰富,举了一些例子,写的比较啰嗦,稍微精简、加工之后,形成了这篇blog)。另外,需要注意,详查结果不要作为员工表现的考核标准,考核应该基于最终的产品。

转载请注明出处: http://blog.csdn.net/ynnmnm/article/details/37743403。作者:夜风。

谈如何提高产品质量

时间: 2024-11-13 04:28:06

谈如何提高产品质量的相关文章

浅谈如何提高产品质量?

对于一个企业而言,能否很好的生存下去,有四个核心指标,产品质量Q.服务质量S.产品价格P.响应时间T.在我看来,属于技术范畴的2个最核心的指标是:一是产品质量.二是响应时间,提高企业核心竞争力要以提高产品质量为目标,质量是企业的命脉所在,怎样更好的保障产品质量,为一线的销售保驾护航好产品,就显得尤为重要了.作为一名员工,我们和企业同呼吸,共命运,加强产品质量的意识,提高产品质量也就显得日益迫切.那么到底如何做才能提高产品质量? 就我个人而言,我是一名软件测试工程师,那么我应该在日常的工作中做出怎

如何提高产品质量-开发维度

最近,我们的产品上线了,上线之后,稳定是最重要的,但是,出现了几次bug,都是不应该犯的错误,所以,避免bug特别是重大bug出现,提高产品质量,非常迫切. 产品开发过程 产品开发过程:需求分析.设计.编码.单元测试.集成测试.功能测试.Beta测试和发布.在工程师开发之前,策划或产品提过来的需求.策划的配置文件或者后期的测试,都可能影响产品质量,但是,本文侧重于从开发者角度谈提高产品质量.先分享一张来自<Code Complete>的插图. 可以看到,随着项目规模变大,架构.设计和集成测试.

金万城招商主管谈如何提高销售技巧和话术

消费是指为满足人们物质文化需要而消耗物质资料的行为,是人们生存和发展的必要条件.需求是指人们对特定事物需求的欲望或要求.人们对服装的消费需求分为生理和心理需求两大方面.生理需求也称本能需求或天然需求,是人自身发展过程中,为了维持生命.保持人体的生理平衡而形成的需求.如穿服装为了保暖或保护身体.而心理需求是为了提高 物质和精神生活水平而产生的高级需求,它受历史条件.社会制度.民族和风俗习惯等的制约,反映了人的社会性,是随着 人类社会发展的结果. 1.消费需求有哪些特点 消费有很多特点,了解这些特点

unity3D游戏开发之浅谈如何提高游戏生命力

游戏中某些时候,玩家会处于"空闲"状态,即处于无事可干的状态.那么为什么会造成这种情况呢?又如何避免让玩家处于"空闲状态"呢?我试着分析下,可能有以下几个原因: 1.节奏控制不合理 节奏的控制不合理.让玩家在游戏某一阶段"紧张"时间过长,或者松弛太久都是不好的.松紧张弛有度,才能造成玩家不至于太空闲. 例如玩家在野外打怪,或者下FB,这个过程就是"紧"的过程.当玩家背包满了,这个时候肯定要回城清包.交任务.存放东西.去拍卖行.

浅谈“互联网+”浪潮下传统行业的战略转型

"互联网+"时代来临,越来越多的互联网企业入侵传统行业,越来越多的传统企业面临战略转型.对于互联网企业来说,快速的产品推广和灵活的用户运营是他们的优势,但是在线下门店,服务和产品质量上存在先天不足,并且短时间内无法弥补:对于传统企业来说,多年的市场经营使他们构建了完善的供应链上下游关系.但如何适应新时代的互联网运营模式,更快的完成产品推进,不是他们擅长的方面.因此传统行业和互联网行业的互相融合已成为当今中国企业战略转型的核心. 下面简单描述两个例子帮助大家理解"互联网+&qu

如何提高移动端注册登录体验

有多少用户愿意注册登录,决定了一款产品的活跃度.我们来谈一谈如何提高移动端的登录体验. 一.登录类型 用户通常有三种不同的方式来登录一个APP: 第三方授权登录的方式,优势是,省去用户注册这一流程,让用户可以在第三方授权下迅速登录.劣势是用户不是你的用户,是第三方的用户,流量可能只是暂时的,而且转化起来比较难.但我个人还是倾向于第三方授权登录的方式,因为第三方大多数都拥有海量的活跃用户,而且我们还可以在后期进行有针对性的转化—给用户一系列个性化设置.绑定手机号的操作流程. 最反感用第三方授权登录

祭旗篇---关于提高技术团队技术氛围的一些尝试

这个博客由我们团队的成员来共同维护,要求每个成员定期贡献技术类博文,第一篇是个例外,因为主题是用来“祭旗”的. “春蚕到死丝方尽,蜡炬成灰泪始干”,用来形容什么好呢?我觉得可以用来比喻一些企业把员工当做“炮灰”来使唤的情况.我曾经在这样的企业呆过,虽然过去没有现在这么辛苦,这些企业一般不会真正关心员工的成长,只要员工能干活,能完成任务就行,往死里使唤…… 现在虽然每天都很累,但是我一直都相信组织没有把员工当做“炮灰”,作为一名在路上的一线技术经理,我也不希望我的团队成为“炮灰”…… 我们的团队成

如何提高模版识别的成功率

在图像识别的方法中,模版识别是比较简单的一种,<学习opencv>中给出了例子和实现代码,即使是在最新版本中,改变的也并不大. 但是这并不代表模版识别在实际应用中不适合.恰恰相反,每一张方法都需要用在它合适的地方.模版识别相对来说,应用于特征不是非常明显,或者对速度要求不是非常高的情况下.当然,有许多时候,你只能选择模版识别,而不能用特征识别,因为图像没有提供那么足够的特征. 这里,我谈一谈如何提高模版识别的成功率. <学习opencv>中给出5中模版识别算法,并且附了例子.即使就

浅谈自动化测试之持续集成

from:https://www.cnblogs.com/wysk/p/7517277.html 一.持续集成是什么? 持续集成是一种软件开发的实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成.每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误.许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件. 持续集成指的是,频繁地(一天多次)将代码集成到主干,通过持续集成流程的进行自动化方式的