第三方测试有别于开发人员或用户进行的测试,其目的是为了保证测试工作的客观性。从国外的经验来看,测试逐渐由专业的第三方承担。同时第三方测试还可适当兼顾初级监理的功能,其自身具有明显的工程特性,为发展软件工程监理制奠定坚实的基础。
第三方测试工程主要包括需求分析审查、设计审查、代码审查、单元测试、功能测试、性能测试、可恢复性测试、资源消耗测试、并发测试、健壮性测试、安全测试、安装配置测试、可移植性测试、文档测试以及最终的验收测试等十余项。
测试并不仅仅是为了要找出错误。测试方还需要对错误进行归类和总结,通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进,更好地帮助用户。根据软件工程的要求,测试工作应贯穿开发的全过程,如右图所示。
从测试流程中可以看出,编码和单元测试基本上属于程序的调试,一般由开发方自己进行。作为第三方测试,定位在系统测试和集成测试最为有效。但是,为了得到高质量的软件,第三方也要适当介入编码与单元测试,能够更好地保证测试的有效性、准确性和可信性。
认清“第三方”的责任
第三方测试以合同的形式制约了测试方,使得它与开发方存在某种‘对立’的关系,所以它不会刻意维护开发方的利益,保证了测试工作在一开始就具有客观性。第三方一般都不直接参加开发方系统的设计和编程,为了能够深入理解系统,发现系统中存在得问题,第三方测试必须按软件工程的要求办事,以软件工程的标准要求开发方和用户进行配合,从而较好地体现软件工程的理念。引入第三方测试后,由于测试方相对的客观位置,由用户、开发方、测试方三方组成的三角关系也便于处理以往用户、开发方双方纠缠不清的矛盾,使得许多问题能得到比较客观的处理。
第三方测试不同于开发方的自测试。由开发人员承担的测试存在很多弊病,除去自身利益驱使带来的问题外,还有许多不客观的毛病,主要表现在思维的定势上。由于他熟悉设计和编程等,往往习惯于按一定的“程式”考虑问题,以至思路比较局限,难于发现“程式”外存在的问题。因为第三方测试的目的就是为尽量多地发现程序中的错误而运行程序的过程,可以更多的发现问题。此外,随着系统越做越大,客观上讲开发人员也无精力参与测试,同时也不符合大生产专业分工的原则。
第三方测试不同于用户的自测试。用户是应用软件需求的提出者,对于软件应该完成的功能是非常清楚的,是进行功能验证的最佳人选。客观情况是,大部分的用户都不是计算机的专业人士,很难对系统的内部实现过程进行深入的分析。对系统的全面测试,功能测试仅仅是一个方面,还要包括并发能力、性能等多种技术测试。这些测试对技术有很高的要求,必须由计算机的专业人员才能完成。
第三方测试一般还兼顾初级监理的职能,不但要对应用进行各种测试,还进行需求分析的评审、设计评审、用户类文档的评审等,这些工作对用户进行系统的验收以及推广应用都非常有意义。
如何组织管理
在测试的过程中,用户、开发方与测试方形成了一个三角关系,从最终目标来讲,三方是完全一致的,都是希望保证系统稳定运行。但在测试过程中,三方的关系却是既对立又合作。对立是指各自坚持自己的职责,合作是指每一方的工作都需要其它两方的支持和帮助。
为了保证测试的顺利进行,测试方必须强化内部的组织管理。根据我们的经验,完整的测试机构必须包括业务分析部门、技术支持部门、规划设计部门和综合后勤部门。例如在中国现代化支付系统第三方测试项目当中,信息化工程总体研究中心的人员分工大致是:部分人员专攻支付业务,部分人员专攻技术支持,部分人员负责测试规划与综合案例的设计,部分人员负责现场情景调度,部分人员从事案例的细化与运行。测试结果表明,总体上达到了各司其职、忙而有序。
“第三方”测试什么
根据软件的特性,第三方软件测试工程可划分为三种类型四个层次。
(1) 第一类是系统软件、环境软件和各类工具软件等的测评。这类软件多作为计算机的环境或作 “公用” 支撑软件,产品类型多、市场销量大、生产厂商多,产品的特点大都有企业、甚至国际的产品质量标准,用户选择使用时大都希望进行产品功能、性能的对比测试;对于这类软件的评测重点是软件产品的功能、性能和特点评测。
(2)第二类是面向应用软件系统的测评。这类软件,具有很强的行业应用特性,往往是要由用户与开发商签定项目合同,开发商负责开发,用户负责验收。对这类软件的评测,根据用户对第三方的依赖程度,又可分为两个层次。①第一个层次只对应用软件系统进行综合性功能、性能测试。大体是在软件系统级进行“黑盒”测试,并不对软件过程进行控制、监督。②第二个层次是对应用软件系统进行质量监理与评测。不仅承担第一个层次的任务还要对软件过程进行监控,具备初级软件工程监理的职责。
承担该类软件质量监理评测的第三方,承担软件过程质量监理的责任,在软件生命周期过程中,从软件定义开始,要对软件过程从质量保证角度进行规范化的监督、管理和控制。评测工作不仅包括软件生命周期各阶段的评审,而且还要对程序系统,进行包括模块白盒测试在内的系统集成、系统验收等测试。第三方实际上是软件业主授权的初级的软件工程监理。
(3)第三类是对软件企业的CMM评估认证,也是最高层次的软件评测。
了解测试评估
测试评估是软件测试的一个阶段性的结论,用所生成的测试评估报告,来确定测试是否达到完全和成功的标准。在测度评估阶段向用户提供强有力的支持,包括通过测试报告,验证测试结果是否符合测试计划中制定的测试标准;根据缺陷报告提供的测试结果数据,给出软件质量和测试完整性的评估报告;特别在以下几方面对测试的过程进行评测:
(1)评估测试用例覆盖:测试的目标是确保100%的测试用例全部成功地执行。如果这个目标可行或不可能达到,则要根据不同的情况制定不同的测试覆盖标准。主要考虑风险和严重性、可接受的覆盖百分比。
(2)评估代码覆盖:需要断定测试目标期望的总的测试代码行数,在测试中真正执行的代码行数及其百分比,将此结果记录在测试评估报告中。
(3)分析缺陷:对缺陷进行分析,应遵照缺陷分析策略中制定的分析标准。
最常用的缺陷分析标准有三种:缺陷分布——缺陷数量作为随缺陷属性变化的函数(如状态和级别);缺陷趋势——缺陷数量作为以时间为条件的函数;缺陷滞留——特殊的缺陷密度报告,缺陷数量与缺陷在某一状态保留的时间长短有关。
(4)确定测试是否达到完全和成功的标准在此阶段将判定测试是否已达到完全并可接受,生成测试结果报告。