软件工程基础——软件测试

软件测试。

通过对软件产品进行必要的测试是非常重要的一个环节。软件测试也是在软件投入运行前对软件需求、设计、编码的最后审核。软件测试的投入,包括人员和资金的投入是巨大的。软件测试是保证软件质量的重要手段,其主要过程涵盖了整个软件生命期的过程。

软件测试的目的、定义与准则

在1990年,IEEE 610.12标准中给出了软件测试的定义。在规定条件下运行系统或构件的过程:在此过程中观察和记录结果,并对系统或构件的某些方面给出评价。检测现有状况和所需状况的不同(也就是找bug),并评估软件项目的特性。

软件测试是一个过程,它是一项验证和评估的活动,其目的是基于满足规定的需求来保证软件的质量。测试要以查找错误为中心,而不是为了演示软件的正确功能。

软件测试人员需要充分理解和运用软件测试的一些基本准则:

1.所有测试都应追溯到需求。最严重的错误不外乎是导致程序无法满足用户需求的错误。

2.严格执行测试计划,排除测试的随意性。测试计划应该包括:所测软件的功能、输入和输出、测试内容、各项测试的目的和进度安排、测试资料、测试工具、测试用例的选择、资源要求、测试的控制方式和过程等。

3.充分注意测试中的群集现象。经验表明,程序中存在错误的概率与该程序中已发现的错误数成正比。这一现象说明,为了提高测试效率,测试人员应该集中对付那些错误群集的程序。

4.程序员应该避免检查自己的程序。为了达到好的测试效果,应该由独立的第三方来构造测试。因为从心理学的角度来讲,程序人员或设计方在测试自己的程序时,要采取客观的态度是程度不同地存在障碍的。

5.穷举测试不可能。所谓穷举测试就是把程序所有可能的执行路径都进行检查的测试。但是,即使规模较小的程序,其路径排列数也是相当大的。实际测试过程中根本不可能去把所有路径都测试一遍。这说明,测试只能证明程序有错误,不能证明程序没有错误。

6.妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。

软件测试方法与技术综述

若从是否需要执行被测软件的角度,可以分为静态测试与动态测试。若按照功能划分,可以分为白盒测试和黑盒测试方法。

1.静态测试与动态测试

静态测试包括代码检查,静态结构分析,代码速度质量等。静态测试可以人工进行,充分发挥人的思维优势,也可以借助工具。经验表明,使用人工测试能够有效地发现30%到70%的逻辑设计和编码错误。代码检查主要检查代码设计的一致性,包括代码的逻辑表达的正确性,代码结构的合理性等方面。这项工作可以发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植的部分、违背程序编程风格的问题。代码检查包括代码审查,代码走查,桌面检查,静态分析等具体方式。

代码审查指的是小组集体阅读、讨论、检查代码。代码走查是执行代码的过程中进行检查,但是这个执行过程是在脑内进行。桌面检查是指的程序员自己检查自己编写的程序。程序员在程序过编译之后,绝对源代码进行分析,检验,并且补充相关文档,目的是发现错误。静态分析是指的对代码的机械性,程式化的特性分析方法。包括控制流分析,数据流分析,接口分析和表达式分析。

动态测试是基于计算机的测试。与静态测试不同,静态测试主要通过人工进行,动态测试是根据软件开发各个阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误的过程。

2.白盒测试方法与测试用例设计

白盒测试方法也成结构测试或逻辑驱动测试。白盒测试是在程序内部进行,主要用于完成软件内部操作的验证。它要求保证所测模块中每一独立路径至少执行一次;保证所测模块所有判断的每一分支至少执行一次;保证所测模块每一循环都在边界条件和一般条件下至少各执行一次;验证所有内部数据结构的有效性。可以看出,它是一种穷举路径测试。但是即使每条路径都测试了,可能还是会有错误。

有三种错误是白盒测试检测不出来的。首先,违反设计规范的错误无法检测;其次,遗漏路径的错误无法检测;最后,与数据相关的错误无法检测。

白盒测试的主要方法有逻辑覆盖测试和基本路径测试。

3.黑盒测试方法与测试用例设计

黑盒测试方法也称功能测试或数据驱动测试。黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求和功能规格说明。黑盒测试主要诊断功能不对或遗漏、界面错误、数据结构或外部数据库访问错误、性能错误、初始化和终止条件(边界)错。

黑盒测试的主要方法有等价划分法、边界值分析法、错误推测法、因果图法。

实际上,没有一种用例测试及方法能够适应所有的解决方案,应该根据实际情况进行选择使用或者混合使用。应该在测试成本和测试效果之间做一个合理的折中。

软件测试的策略

软件测试一般是按照4个步骤进行,即单元测试、集成测试、确认测试和系统测试。

1.单元测试

单元测试的目的是发现各模块内部可能存在的错误,它的依据是详细设计说明书和源程序。单元测试的技术可以采用静态分析和动态测试。对动态测试来说,用白盒测试比较多,辅之以黑盒测试。

它主要针对下面的五个基本特性进行:模块接口测试、局部数据结构测试、重要的执行路径的检查、出错处理测试、影响以上各点以及其他相关点的边界条件测试。

2.集成测试

集成测试是测试和组装软件的过程。它是在把模块按照设计要求组装起;来的同时进行测试,主要目的是发现与接口有关的错误。集成测试的依据是概要设计说明书。

集成测试所涉及的内容包括:软件单元的接口测试、全局数据和结构测试、边界条件和非法输入的测试等。

集成测试时将模块组装成程序通常采用两种方式:非增量方式组装和增量方式组装。

3.确认测试

确认测试的任务是验证软件的功能和性能以及其他特性是否满足需求规格说明中确定的需求,以及软件配置是否完全、正确。

4.系统测试

系统测试是将通过测试确认的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、支持软件、数据和人员等其他元素组合在一起,在实际运行环境下对计算机系统进行一系列的集成测试和确认测试。

系统测试的具体实施一般包括:功能测试、性能测试、操作测试、配置测试、外部接口测试、安全测试等。

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2018-2020 Shawn Zhou
  • Powered by Hexo Theme Ayer
  • PV: UV:

感谢打赏~

支付宝
微信