建立、组织和管理一支的测试团队是做好软件测试工作的基础。测试活动的开展必须贯穿于整个软件开发生命周期,因此,测试活动应该和相关的开发活动进行协调,并统一规划。不同的组织,可能会以不同的方式组织测试团队,以达到组织和项目层面的测试目标。
采用独立的测试人员进行测试和评审,发现缺陷的效率会明显提高,因此,独立的测试团队是一个较好的选择。独立测试的方式并不是完全的替代开发人员进行的测试,因为开发人员也可以高效地在他们的工作产品中找出很多缺陷。因此,根据组织和项目的特点,可以选择不同的独立测试策略:
● 非独立的测试人员(开发人员测试自己的代码)。
● 测试由不同的开发人员执行,而不是代码的编写者本人。
● 测试由开发团队中专门的测试人员完成。
● 测试由独立于开发团队的测试团队完成。
● 外部测试专家基于特定的测试目标执行测试。
● 测试由组织外的团队执行(例如:外包)。
对于庞大、复杂的系统或安全关键系统,好让独立的测试人员进行多个级别的测试。开发人员也可以参与其中(特别是在测试级别比较低的时候),但是开发人员缺少测试目的性和测试相关技能会限制他们的测试效率。独立测试人员有权要求定义测试过程及规则,但是只有在明确授权的情况下才能充当这种过程相关的角色。在实际的项目中,可以考虑采用多种独立测试策略相结合的形式。
1)非独立的测试人员
在这种情况下,没有任何的独立性。开发人员对自己开发的代码进行测试。开发人员将根据自己的理解对代码进行测试,一旦发现缺陷,开发人员能够马上进行修复,大大缩短解决问题的时间;同时由于开发人员对代码很熟悉,知道哪些地方可能存在更多的问题,可以有针对性地进行测试。但通常情况下,开发人员愿意花费更多的时间在开发活动上,而留给测试活动的时间很少,测试活动的质量无法得到保障。从心理学来看,让开发人员发现自己代码中存在的缺陷存在一定难度,因此,不太容易发现缺陷。
2)测试由不同的开发人员执行
测试由不同的开发人员执行,而不是代码的开发者本人。这种形式在一定程度上体现了测试的独立性。一方面,担当测试工作的开发人员对系统设计和开发的代码比较熟悉,而且同为开发人员,沟通比较通畅;另一方面测试对象并不是自己开发的代码,这种情况下缺陷的发现率将会有一定程度的提高。开发人员兼任测试人员的工作,没有形成独立的测试团队,整个团队的核心是开发,这种情况下,一个开发人员测试另一个开发人员的代码可能不情愿报告缺陷。同时,开发人员设计的测试用例通常集中在正面的功能测试用例上,对于一些非功能测试以及异常情况的考虑比较少。
3)测试由开发团队中专门的测试人员完成
开发团队内部有专门的测试人员或测试团队,这些测试人员或测试团队向开发经理汇报工作。该模式下,测试人员已从开发人员中独立出来,因此,测试人员具有一定的独立性,他们可以采用和开发人员不同的视角分析和检查被测试产品;同时测试人员和开发人员联系紧密,可以和开发人员及时沟通。但是这种模式下,测试人员仍然受到开发经理的制约,不能完全独立地从产品质量出发进行测试,由于整个项目进度和经费的关系,测试的投入可能不够,在开发任务紧张的情况下,这些测试人员还可能负责部分开发任务,从而不能保证产品质量。
4)测试由独立于开发团队的测试团队完成
这种情况下,测试团队具有相当的独立性。此时,测试团队直接向利益相关者(例如:项目经理)汇报,测试团队重点关注被测试对象的质量。发现缺陷成为测试团队重要的目标之一,对测试对象中出现的问题能够进行客观的分析和评价。由于整个团队都负责测试相关活动,测试团队可以集中精力培养整个团队的测试能力,成为专业的测试团队。
由于测试团队独立于开发团队,测试团队成员的开发技能相对较弱,对于系统的需求、设计和代码的理解需要投入更多的工作量,而且测试人员和开发人员需要建立正式的沟通渠道,例如:需要建立更加完善的配置管理和缺陷管理系统。
5)外部测试专家基于特定的测试目标执行测试
聘请来自于组织外部的专家对特定的测试目标执行测试。外部专家并不对整个系统进行全面的测试,而只关注其中特定的领域,例如:可能只关注被测试对象的重要的质量属性(例如:易用性、安全性或性能等)。这些专家在特定的领域都有很深的造诣,可以在短时间内快速对被测试对象的特定方面进行评估,发现缺陷并提出改进意见。但是这些外部的测试专家的成本通常都很高,项目因此要有高额的投入。
6)测试由组织外的团队执行
这种形式实现了大化的测试独立,既能够以揭露软件中的缺陷为目的开展工作,也能不受发现的缺陷的影响。组织和经济上的独立性使其有更充分的条件按测试要求去完成工作。由于专业优势,独立测试工作形成的测试结果更具信服力。由于测试结果常常和软件的质量评价联系在一起,因此,由专业化的独立测试机构进行评价权威性更强。但是这种独立性也带来一些负面影响:知识传递可能不充分、需要明确的需求定义、需要很好的沟通平台以及外部组织的质量不确定等。这些影响因素在采用这种形式的测试组织时是需要加以考虑的。
上面介绍了六种不同的测试独立性的形式。测试独立性的优点有:
● 对软件测试和软件中的错误抱着客观的态度,这种客观的态度可以解决测试中的心理学问题,既能够以揭露软件中的错误为目的进行工作,也能不受发现的错误的影响。
● 经济上的独立性使其工作有更充分的条件按测试要求去完成。
● 独立测试作为一种专业工作,在长期的工作过程中势必能够积累大量的实践经验,形成自己的专业优势。
● 软件测试是技术含量很高的工作,需要有专业队伍加以研究,并进行工程实践。专业化分工是提高测试水平、保证测试质量、充分发挥测试效用的必然途径。
● 由于专业优势,独立测试工作形成的测试结果更具信服力,而测试结果常常和对软件的质量评价联系在一起。因此,由专业化的独立测试机构进行评价的权威性更强。
● 独立测试机构的主要任务是进行独立测试工作,这使得测试工作在经费、人力和时间方面更有保证,不会因为开发的压力而减少对测试的投入,降低测试的有效性,从而可以避免开发组织侧重软件开发而对测试工作产生不利的影响。
测试的独立性并不是越高越好。随着测试独立性的提高,也会带来一些问题:
● 组织的复杂度越来越高,管理成本增加,当测试团队不属于该组织的时候,对于测试团队的测试质量无法及时监控。
● 沟通效率降低,原来可能只是需要打个招呼的问题,现在需要通过复杂的配置管理、缺陷管理和文档管理系统来解决。
● 测试人员和开发人员的距离越来越远,项目团队氛围可能会下降,某些极端情况甚至出现开发人员和测试人员的对立现象。
● 测试人员重点关注测试相关技能,对开发技能的掌握比较差,不利于发现系统需求和设计方面的缺陷。
● 独立的测试团队可能降低开发人员的质量责任感,开发人员可能会觉得产品质量应该是测试团队的事情,而不是整个项目团队的责任。
一个组织的测试活动可以采用多种测试独立性策略。不同的测试级别可以使用不同形式的测试独立性策略。低级别的测试采用独立性比较低的策略,高级别的测试采用独立性比较高的策略,例如:组件测试和集成测试由开发人员来完成,系统测试由企业内部独立的测试团队完成,验收测试由组织外引入的测试团队完成,如表1所示。具体的形式可以根据组织和项目的实际情况进行调整。
表1 测试团队和测试级别
独立性 级别 |
不同的开发人员 |
组织内独立的测试团队 |
组织外部的测试团队 |
组件测试 |
X |
|
|
集成测试 |
X |
|
|
系统测试 |
|
X |
|
验收测试 |
|
|
X |