您的位置:首页 > 其它

软件测试基本内容概述

2015-06-11 19:43 537 查看
软件测试的定义:

IEEE给出了关于软件测试的标准定义:软件测试是使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验被测软件系统是否满足规定的需要,或是弄清楚被测系统的预期结果与实际结果的差别。该定义从 5 个方面体现了测试工作的核心与实质。

1、软件测试的根本目的是确保软件满足用户需求

软件测试的目的在于箴言被测软件系统是否满足规定的需要,即保证被测软件符合用户需求是软件测试的最终目的,换句话说,只要软件系统不符合用户需求,就认为其存在缺陷,必须进行处理。因此,用户需求是测试的唯一依据,也是缺陷判定的依据。

无论是软件开发还是软件测试,都必须紧贴用户需求,凡是用户不认可的,都将视为缺陷。如果不能紧贴用户需求来做软件开发和测试工作,最终将导致项目失败。

另外,软件测试的最终目的是保证软件符合用户的需求,而非追求完美。随着测试量的增长,通过测试发现的软件缺陷越来越多,在一段时间内将不断降低软件缺陷导致的损失。但随着时间的继续推移,软件中的主要严重缺陷已经发现并修复之后,继续执行软件测试只能发现一些对软件功能没有重大影响的轻微缺陷,而且发现这些缺陷也变得越来越困难,反而导致测试成本的增长。因此,只要用户认为软件可以接受,就可以停止测试了。

2、软件测试的目的是要衡量软件产品是否符合预期

尽管软件测试的根本目的是确保软件满足用户需求,但如何准确地理解和表达用户需求、如何验证软件是否符合用户需求呢?对于前者,显然是以系统需求规格说明书的形式来描述用户需求;对于后者,则需要通过设计测试用例,根据测试用例的执行情况来判定其输出结果与预期结果之间是否存在差异,且这种差异是否超出用户可以接受的范围,若二者的差异用户可以接受,则无需理会,否则将其看作一个软件缺陷,需对该缺陷进行适当的处理。当用户需求不多,不复杂的时候,例如,针对一个支持100个文档的全文检索工具,其测试工作并不困难;然而,若面对一个支持10000人同时在线,具备T级海量数据的智能搜索能力、且需要和十几个已有系统进行接口的管理平台,系统地衡量软件产品是否符合预期,是一项艰巨而富有挑战性的任务。

3、软件测试是一个持续进行的过程

软件测试是持续进行的过程,不可能一蹴而就,必须重视软件测试过程管理。

软件测试的过程分为5个主要的步骤,即计划测试、设计测试、实施测试、执行测试和评估测试。具体说明如下:

3.1、计划测试

 计划测试是根据软件项目计划来制定测试计划,即在软件测试之前,必须清楚地回答一个问题:哪些人,在何时,需要做哪些测试工作,使用怎样的方法,需要哪些资源,遵循怎样的规范来完成,可能碰到那些风险,如何解决。具体说明如下。

哪些人:即与完成测试任务相关的人员,主要是测试团队的人员,也可能包含开发团队的人员和做市场的人员,应针对不同类型人员的特点和自身技术基础来布置不同的测试任务。

在何时:即指定进度表,根据项目开发计划来对应制订测试进度计划。

需要做哪些测试工作:即为测试活动提供测试范围,应明确指出在某个测试阶段,哪些测试需要做,哪些测试不需要做。例如,已发布过或已全面测试过的部分,已外包给其他公司开发实现的子系统,或者一些开源子系统常常是不需要测试的。同时,应确定系统关键功能(如系统核心操作)和高风险功能,并划分优先级别。注意若在计划中列出某些特性不需要测试,应该明确指出该特性不测试的理由,否则易导致误解而使得本该测试的特性被遗漏。

使用怎样的方法:即测试策略,如使用的黑盒和白盒测试方法,是否需要设计桩和驱动模块,回归测试策略等。

需要哪些资源:即那些测试需要借助某些硬件设备、软件工具来支持,如测试用例管理工具、缺陷管理工具、性能测试工具、测试仪等。

遵循怎样的规范:即在测试过程中必须严格遵守的规则,如进入和退出测试的标准、测试的暂停/恢复标准、测试阶段交付物的规定、相关测试文档模板等。

可能碰到哪些风险:即与测试相关的人员和资源风险,如人员的流失、资源的到位和使用风险等。不考虑风险就等于接受失败,必须对风险管理实行全局管理方法。

针对不同的测试阶段应分别订制各自的测试计划,如单元测试计划、集成测试计划、系统测试计划。

3.2、设计测试。

设计测试是对照测试计划中选定的测试范围,对测试计划中的方法进行细化。在测试设计阶段有一个重要的概念:测试需求,即需要测试的特性,一般地,通过分析功能需求,找到每个功能点所需要测试的特性,从而得到测试需求,再从测试需求设计测试用例。

同样地,针对不同的测试阶段将得到不同的测试设计文档,如单元测试设计说明书、集成测试设计说明书、系统测试设计说明书。测试需求和测试用例将包含在测试设计文档中。

3.3、实施测试。

实施测试是测试过程中的最重要环节。测试设计阶段所涉及的测试用例仅仅是以文档或管理工具等多种书面形式进行记录的,测试用例无法自动执行,而且在一些特殊情况下,测试用例将无法独立执行。因此,实施测试就是根据需要,通过脚本开发,测试驱动/测试桩模块的开发,将静态的测试用例转化为可以实际执行的动态测试用例。例如,当函数f1调用函数f2,而函数f2又调用函数f3时,若需要对函数f2进行测试,但函数f1、f3尚未编码完成或尚未进行单元测试而无法确保其正确性,此时为了确保对函数f2实施单元测试,需要开发函数f1、f3对应的驱动和桩模块,使得f1到f3的调用过程在有限条件下顺利执行,以达到测试用例运行的目的。

3.4、执行测试。

执行测试是采用手动方式或者通过测试脚本来运行测试用例的过程。在测试执行的过程中,需要注意记录测试过程以及在测试中发现的缺陷。在各个测试阶段都对应有执行测试的这个环节,但单元测试与集成测试是可以同步进行的。只有系统测试必须在单元测试和集成测试完成之后才能开始执行。

3.5、评估测试。

测试执行过程中需要不断地评估,主要分为两方面工作,其一是对测试用例的执行结果进行评估,若测试用例的实际输出与预期输出相吻合,或者二者之间的差异在用户可以接受的范围内,则测试用例的测试结果为通过,否则就认为用例的测试结果为失败,对应记录下相关的缺陷,该评估是在每次测试用例执行后必须做的事情;其二是对一段时间内的测试过程进行评估,这里所提的评估也主要是指阶段性的测试评估工作,该评估不仅包含对测试工作效果的评价,还包含对被测对象质量的评价,目的在于总结测试工作的经验,发现测试工作的不足,以及做出后续工作决策。例如,通过测试用例对代码行或功能点的覆盖、测试用例执行率指标等来判断测试工作是否全面、彻底,通过缺陷的个数、缺陷分布等指标来判断被测对象质量是否达到要求,若二者均满足要求,则认为当前的测试工作和被测对象质量达到测试的退出标准,可以进入后续的测试或开发环节,否则需要继续当前的测试。

4、测试既需要动态执行又需要静态检查

定义中提到的运行系统强调必须通过实际执行被测软件系统来发现缺陷,但并未提示该如何执行软件系统,测试人员的作用就在于通过设计测试用例,利用特定的数据集(输入数据)和动作集(输出数据)来考验被测系统,判断系统能否以用户预期的方式给予正确、及时的反馈。同时,该定义还强调必须通过静态检查被测系统来发现缺陷,例如,对相关开发文档的评审、对源代码的检查、对用户手册等用户相关文档的检查,这一静态检查过程往往不需要实际运行程序,因此,在一定程度上将大大降低测试的工作量。

5、测试不仅需要手动执行还需要自动执行

传统的测试工作大多依靠人工方式来完成,如测试计划的制订,测试用例的设计,甚至测试用例的执行也多依赖于人工执行。

总之,从软件测试的标准定义可以看出,软件测试包含大量复杂的工作,要想将软件测试工作做好,需要解决至少如下三方面的问题:

1、围绕用户需求这个最根本的测试目的,需要考虑:如何有效地获取用户需求,如何准确理解和表达用户需求,如何保证用户需求的稳定性。

2、围绕软件产品是否符合预期这个测试目的,需要考虑:如何高效地设计测试用例,达到对成本、质量、进度的均衡控制;

3、围绕测试过程的管理,需要考虑:如何合理评估和控制风险,如何规划整个测试工作,如何管理包括环境、工具、人力、测试交付物在内的所有相关资源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: