测试基础简要

1.软件测试基本概念

通常对软件测试的定义有以下两种描述。

定义一:软件测试试为了发现程序中的错误而执行程序的过程。

定义二:软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计的一批测试用例(即输入数据及其预期输出结果),并利用这些测试用例运行程序,以及发现错误的过程,即执行测试步骤。

测试方案:阐述对于某一特定的测试点如何去测试的思路,也就是阐述用什么方法、如何去测试问题。

测试用例:所谓测试用例是为特定目的而设计的一组测试输入、执行条件和预期输出。测试用例是执行测试的最小实体。另外,设计的测试用例应具有步骤清晰、操作性强的特点。一个好的测试用例是发现了迄今为止尚未发现的错误的用例。

测试执行:根据事先设计好的测试用例而执行的过程。这个过程需要根据用例执行的输入数据,判断执行程序后的输出结果是否正确。

缺陷:我们常说到的Bug(从严格意义上来说,缺陷不等于Bug)。对软件缺陷的定义有以下5条描述。

  • 软件未达到产品说明书中已经标明的功能。
  • 软件出现产品说明书中指明了不会出现的错误。
  • 软件未达到产品说明书中虽未指出但应当达到的目标。
  • 软件功能超出了产品说明书中指明的范围。
  • 软件测试人员认为软件难以理解、不易使用,或者最终用户认为该软件使用效果不佳。

2.软件测试基本目的

表面上看,软件测试的目的是要证明程序有故障存在,并且要尽可能多、尽可能早地发现程序中的错误。实际上,暴露问题不是软件测试的最终目的,发现问题是为了解决问题。只有解决了问题,软件的质量才有提高,才达到了测试的最终目标。

正如前面所说的“软件测试是为了发现程序中的错误而执行程序的过程”,正确认识这一点很重要。因为不同的测试目标,会设计不同的测试用例。如果目标是发现程序中的错误,则设计测试用例时就会考虑用各种方法设计出最能暴露错误的测试用例。反之,就会设计一些证明程序的用例去执行。


3.软件测试策略

对一个项目进行测试,在做测试计划时,必须考虑清楚对本项目要采取哪些测试的策略,也就是说将采用什么手段或方法进行测试。

在软件开发的生命周期中,软件开发可划分不同的开发阶段,如常用的软件开发V模型。对应软件开发的不同阶段,软件测试也分为不同的单元测试、集成测试、系统测试及验收测试。

但是,通常需根据项目的进展及要求的具体情况,可采用迭代式开发模型、敏捷开发模式等,各阶段也可并肩地进行。

单元测试主要针对以下5个方面进行测试:

  • 模块接口。
  • 模块局部数据结构。
  • 重要的执行通路。
  • 出错处理检测。
  • 边界条件测试。

由于一个模块仅完成某一方面的功能,因此在软件系统中,一个模块不可能独立存在,模块与模块之间必然存在相互的联系。在进行单元测试时,需要根据具体情况来设计驱动模块和桩模块,与被测试模块一起构成测试环境。

集成测试:在单元测试之后,把通过单元测试的模块按照设计的要求组装起来进行测试,主要目标是发现与接口有关的问题。

集成测试模块组装的方法分为非增量式增量式两种。非增量式是指先分别测试每个模块,然后把所有模块按设计要求放在一起组成所要测试的程序。增量式是把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完成后,再把下一个待测试模块结合进来测试,这样每次增加一个模块,直到把所有模块都测试完成为止。

系统测试:把软件、硬件及系统其它组成部分集成在一起,模拟最终用户的使用环境,站在用户的立场进行的综合性测试。目的是保证系统各组成部分能够协调的工作,系统的性能达到产品规格的要求。

验收测试:根据软件需求说明书的规定,对软件产品进行评估,以确保其是否满足软件需求的过程。经过确认测试后,应对软件给出结论性评价,即合格或者不合格。如果软件的功能、性能及其他方面的要求满足软件需求规格说明的规定,则视为合格的软件,反之则视为不合格,给出缺陷清单并提到开发部门。


4.软件测试方法

4.1静态测试和动态测试

按照软件测试是否执行程序,软件测试通常可分为静态测试和动态测试两大类。

(1)静态测试

静态测试的主要特征是不实际运行被测试软件,主要目的是对软件的编程风格结构等方面进行评估。

静态测试包括代码检查静态结构分析代码质量度量等。它可以由人工根据编码规范进行检查,通过分析代码结构来检测程序的正确性,也可以借助软件工具自动进行。进行静态测试的人员必须熟悉程序的结构、参数定义等,还需要测试人员对产品知识有一定程度的认识。这样不仅能发现程序正确性方面的问题,还能站在用户的角度分析发现程序的实现是否合理。

静态测试能发现逻辑设计和编码错误方面的大部分问题,但代码中仍会有隐藏的故障无法通过静态测试来发现。静态测试的结果不能作为最终结果,还必须通过动态测试进行详细的分析及验证。

(2)动态测试

动态测试与静态测试正好相反,必须真正地运行被测试程序,通过输入测试用例对运行过程中的输入、输出数据进行分析,从而得出测试结论

动态测试包括功能测试覆盖率分析性能分析内存分析等。功能测试可采用手工测试,视具体情况也可采用自动化测试的方法。覆盖率、性能、内存的分析常要借助其他软件测试工具,或者自行编写以实现测试的目的。

静态测试和动态测试是相辅相成的,通过静态测试可以比较细致地对代码进行检查,通过动态测试可以比较细致地对代码进行检查,通过动态测试则可以对软件运行的结果哦得出明确的解论,具有较强的确定性。

4.2黑盒测试和白盒测试

如果按照测试时是否考虑程序内部结构实现来分,软件测试可分为黑盒测试和白盒测试。

黑盒测试(Black-box Testing)又称功能测试,是根据软件规格说明书的要求,运行并验证程序是否满足用户的需求,试一种从用户立场出发的测试。这种方法把被测程序当做一个黑盒子,不考虑程序内部的逻辑结构和特性,通过输入测试数据,根据需求来判断输出是否正确。黑盒测试一般被用来确认软件功能的正确性和可操作性。

白盒测试(White-box Testing) 又称结构测试,是通过分析程序内部逻辑结构,针对特定条件和循环设计测试用例,对程序的逻辑路径进行测试。这种方法要求测试者对软件的结构和代码相当熟悉,测试的目的是尽量覆盖程序的每一个分支,在程序的不同点检测“程序的状态”以判定其实际情况是否和预期一致。

这两种测试方法的出发点是完全不同的,反映了测试思路的两个方面。两种方法各有侧重,不能替代。黑盒测试的优点是效率高和实用性强,缺点在于测试往往是不完全和不充分的;白盒测试的优点在于能够对程序内部的特定部位进行覆盖测试,缺点是无法测出程序未实现的功能。

总之,黑盒测试和白盒测试各有自己的优、缺点,测试的效果是相辅相成的。工作人员在规划测试方案时,需要将黑盒测试与白盒测试结合起来,才能把软件测试得更充分、更有可靠性。


5. 软件测试流程

软件测试贯穿于软件开发的整个生命周期中,在不同的阶段可采取不同的测试方法,但无论是单元测试、集成测试,还是系统测试都可以按下面的流程进行。

  1. 编写测试计划
  2. 设计测试方案
  3. 设计测试用例
  4. 执行测试
  5. 故障跟踪
  6. 输出测试报告
  7. 测试总结

一般情况下,软件测试在工程实践中 经常实施的有单元测试、集成测试、系统测试。系统测试,人们又常把它称为功能测试,这其实是不全面的,但也有一定的道理。因为系统测试主要的工作是功能测试,就是根据软件的规格说明书验证软件是否满足用户的需求;但系统测试除了测试功能之外,还必须验证系统的性能是否满足用户的需求,所以系统测试是不完全等同于功能测试的。

猜你喜欢

转载自blog.csdn.net/python_jeff/article/details/87342089