建立、组织和管理一支优秀的测试团队是做好软件测试工作的基础。测试活动的开展必须贯穿于整个软件开发生命周期,因此,测试活动应该和相关的开发活动进行协调,并统一规划。不同的组织,可能会以不同的方式组织测试团队,以达到组织和项目层面的测试目标。
采用独立的测试人员进行测试和评审,发现缺陷的效率会明显提高,因此,独立的测试团队是一个较好的选择。独立测试的方式并不是完全的替代开发人员进行的测试,因为开发人员也可以高效地在他们的工作产品中找出很多缺陷。因此,根据组织和项目的特点,可以选择不同的独立测试策略:
● 非独立的测试人员(开发人员测试自己的代码)。
● 测试由不同的开发人员执行,而不是代码的编写者本人。
● 测试由开发团队中专门的测试人员完成。
● 测试由独立于开发团队的测试团队完成。
● 外部测试专家基于特定的测试目标执行测试。
● 测试由组织外的团队执行(例如:外包)。
对于庞大、复杂的系统或安全关键系统,最好让独立的测试人员进行多个级别的测试。开发人员也可以参与其中(特别是在测试级别比较低的时候),但是开发人员缺少测试目的性和测试相关技能会限制他们的测试效率。独立测试人员有权要求定义测试过程及规则,但是只有在明确授权的情况下才能充当这种过程相关的角色。在实际的项目中,可以考虑采用多种独立测试策略相结合的形式。
1)非独立的测试人员
在这种情况下,没有任何的独立性。开发人员对自己开发的代码进行测试。开发人员将根据自己的理解对代码进行测试,一旦发现缺陷,开发人员能够马上进行修复,大大缩短解决问题的时间;同时由于开发人员对代码很熟悉,知道哪些地方可能存在更多的问题,可以有针对性地进行测试。但通常情况下,开发人员愿意花费更多的时间在开发活动上,而留给测试活动的时间很少,测试活动的质量无法得到保障。从心理学来看,让开发人员发现自己代码中存在的缺陷存在一定难度,因此,不太容易发现缺陷。
2)测试由不同的开发人员执行
测试由不同的开发人员执行,而不是代码的开发者本人。这种形式在一定程度上体现了测试的独立性。一方面,担当测试工作的开发人员对系统设计和开发的代码比较熟悉,而且同为开发人员,沟通比较通畅;另一方面测试对象并不是自己开发的代码,这种情况下缺陷的发现率将会有一定程度的提高。开发人员兼任测试人员的工作,没有形成独立的测试团队,整个团队的核心是开发,这种情况下,一个开发人员测试另一个开发人员的代码可能不情愿报告缺陷。同时,开发人员设计的测试用例通常集中在正面的功能测试用例上,对于一些非功能测试以及异常情况的考虑比较少。
3)测试由开发团队中专门的测试人员完成
开发团队内部有专门的测试人员或测试团队,这些测试人员或测试团队向开发经理汇报工作。该模式下,测试人员已从开发人员中独立出来,因此,测试人员具有一定的独立性,他们可以采用和开发人员不同的视角分析和检查被测试产品;同时测试人员和开发人员联系紧密,可以和开发人员及时沟通。但是这种模式下,测试人员仍然受到开发经理的制约,不能完全独立地从产品质量出发进行测试,由于整个项目进度和经费的关系,测试的投入可能不够,在开发任务紧张的情况下,这些测试人员还可能负责部分开发任务,从而不能保证产品质量。
4)测试由独立于开发团队的测试团队完成
这种情况下,测试团队具有相当的独立性。此时,测试团队直接向利益相关者(例如:项目经理)汇报,测试团队重点关注被测试对象的质量。发现缺陷成为测试团队最重要的目标之一,对测试对象中出现的问题能够进行客观的分析和评价。由于整个团队都负责测试相关活动,测试团队可以集中精力