软件测试行业是一个新兴的行业,软件质量保证是一个比测试行业还要新的行业,既然是新行业,在工作范围的定位上难免有一些问题,在现实的工作中,软件测试人员和开发人员之间,质量保证人员和项目经理和开发部门经理之间似乎总有无穷无尽的矛盾,正确认识测试人员和质量保证人员在软件开发过程中的作用和地位,让测试人员和质量真正做到为软件开发保驾护航的作用,必须先确定前了解测试人员和质量保证人员在软件开发过程中遇到的问题。

  开发人员和测试人员的矛盾问题:一般来说开发人员看不起测试人员,我想这是一个普遍存在的现象,出现这一问题有其客观原因,1测试人员的来源相对水平比较低,现在开发人员低要本科毕业,而且是正规本科,即使是研究生学历在很多单位也只能从普通开发人员做起(当然其发展会比较快一点),而测试人员,如果是本科计算机的专业算高学历了,如果是本科,计算机专业,男的,那么其发展和研究生在开发中的地位比较类似,(我无意轻视女同胞们,只是说一个实际情况)。这样从总体上来说,测试人员比开发人员技术水平要低。另外一个原因,在实际工作中,测试工作对开发工作起了一个评判的作用,开发人员开发的系统有那些问题,这些在测试中会暴露出来(虽然不是全部),如果测试人员比开发人员水平高很多,开发人员还可以接受,但如果测试人员水平不如开发人员,则开发人员的反弹会很大,这象我们在上高中的时候,高一的时候,老师比我们的知识水平高很多,我们都会信服老师的讲解,而到了高三,我们知识已经和老师相差不多,而反应速度比老师要快很多,这个时候我们对老师的解题的方法和步骤会提出质疑,如果老师能给我们一个满意的解释,我们仍然会信服于他,而如果我们发现老师还不如我们自然会对他不满。测试人员和开发人员的关系在某些地方和老师和学生的关系有一些类似,只不过这里的老师似乎总比学生水平低。后一个原因是说起来也很简单,谁的孩子谁疼,代码象开发人员的孩子一样,是他们心血的结晶,无数次殚精竭虑,无数个不眠之夜的结果,可自己的孩子却被人指责,你说开发心里是一个什么滋味,不反弹那才奇怪呢(说明他对工作不负责)。

  开发人员和质量保证人员的矛盾:开发人员和质量保证人员的矛盾只要表现在两个方面,一个是项目管理权限的矛盾,前几天我在和单位一个QA人员聊天的时候,我问他,你们QA人员的职责是什么,他很快的回答说:“监控软件开发”,我接着问一个问题,“那么项目经理的职责是什么”,他想了半天没有说话。监控,应该是指监督、控制,而监督、控制无疑是项目经理和开发部门经理的责任,否则还要他们做什么?如果质量保证人员将自己在开发过程中的位置定位在监控上怎么能不和项目经理和开发部门经理产生权限冲突,而这种冲突必然对开发工作造成妨害。质量保证人员和开发人员的矛盾另外一个问题是开发流程上的矛盾,中国的开发人员不注意开发流程是有很久的历史了(相对软件的历史),质量保证人员想通过规范流程对软件开发起到保证作用,但在这个过程中,质量保证人员定义的开发流程是否符合实际情况是一个很大的问题,一个是单位的开发项目比较多,有时候是小项目,有时候是大项目,有时候是需要项目快速完成以抢占市场,有时候却又要要求产品有很好的质量,以保证市场的占有率,这些不同的商业要求的项目很难用一种开发模式来完成,而质量保证人员却很难对这些复杂的情况做深入的了解,所以他们定义的开发流程往往不能在实际过程中起到对项目的质量起到保证作用。而这些情况无疑会增加开发人员对质量保证人员的抵触心理。

  说了这些问题,下边想说说测试人员和质量保证人员如何避免这些问题的一些建议吧。

  首先说测试人员,对于一个公司的测试部门,首先要定义的测试部门的工作内容,比如我在现在的测试部门,首先确定的是测试部门只负责单位的产品的系统测试。原来测试部门只要开发人员提出测试申请,他们测试,这样的结果是测试工作强度大,但测试覆盖率很低,起不到测试的作用,而且开发人员频繁的更改也给软件的配置管理造成了很大的麻烦。现在测试部门规定测试工作要由项目经理提出,而不是开发人员,测试工作主要是按照一个完成测试流程进行,一般一个系统的系统测试快也要3周时间,在测试期间要保证所测试系统的软件、硬件的一致,也是无论我们在测试中发现了什么问题,不允许开发人员进行更换。否则走测试异常终止。另外一个测试工作只是负责测试用例的执行(当然前边有测试计划、测试需求、测试用例的编写)结果的判断,也是如果测试实际结果和预期不相同算错误,其他的一概不管。而预期结果是从系统需求规格说明书获得,而不是和开发人员进行交流来获得(保证预期结果的一致性)。测试人员对被测试出来的问题(预期和结果不一致)是否算bug不做任何评估,只是提交现象,好可以将问题复现出来,但不进行进一步的定位,(确定问题是否是问题,问题发生的代码是开发人员的责任,这是测试和调试的区别)。调试是开发人员的责任,不是测试一人员的责任,当然如果测试人员工作比较空闲可以帮助做一些辅助的测试工作帮助开发人员进行调试,但这个测试的前提是测试人员已经完成了测试任务,否则应该拒绝开发人员提出的附加的测试任务。后一点,测试人员对问题的级别进行定性,我要求测试人员在问题的描述的时候要清晰,详细,但一般问题级别高定义为中级,这么做主要是避免和开发人员产生争执,毕竟测试人员的职责只是发现问题,问题产生原因的判断,错误级别的判断不是测试人员的责任。

  质量保证其主要任务保证软件的质量,如果你的行动不能对产品的质量起到保证作用,甚至对开发的质量起了相反的作用,你要考虑你的方法了,质量保证个人认为有几个点要注意:

  1、质量保证是一个渐进的过程,不要指望一步到位,每一次做一点改进,并让开发人员可以感受到改进的效果,比如是否可以首先抓住需求规格说明书的改进,然后是架构的设计,其次是编程代码规范,测试的改进,变更管理的改进,一步一步来,总之不要想一口吃一个胖子。

  2、质量保证需要观念的改变,开发人员都想自己的成果得到别人的认可,他们也不愿意成天加班,还被领导批,被客户骂,被同事埋怨,之所以产生问题,是对开发过程中很多事情的意义和作用了解不是很清楚,作为质量保证人员有责任帮助他们了解开发中各过程的意义和作用,一旦他们自己要求的改进的动力比质量保证人员要大得多,所以质量保证人员主要的任务应该是帮助开发人员了解、理解开发流程的主要环节的工作内容,这些环节的主要作用,而不仅仅是强制开发人员应该怎么做,不应该怎么做。

  大致总结一下:

  1、开发人员是软件开发的主体,测试人员和质量保证人员都是为开发人员服务的。之所以这么说并不是否认测试人员和质量保证人员的重要性,而是要测试人员和开发人员明确自己的位置。

  2、测试人员的工作是测试,也是看系统是否符合系统需要报告中的功能和性能的要求,如果出现不符合的现象是问题。至于问题为什么会产生,产生的位置等问题不是测试人员关注的问题。

  3、质量保证人员是规范开发流程的,并要检查项目实际执行情况,发现问题,及时和项目经理和开发负责人沟通,注意是检查和沟通,而不是监控,实际的监控是由项目经理负责的。

  4、测试人员和质量保证人员需要分级别。开发人员是分级别的,主要要做好测试工作和质量保证工作对测试人员和质量人员也应该分级别。