转自:https://blog.csdn.net/LiuJiuXiaoShiTou/article/details/72808451
软件测试是软件生存周期中必不可少的环节,软件的典型生存周期可以用下图来形容:
软件测试的目的是尽可能早的发现软件缺陷并确保其得以修复,因此软件测试是提高软件质量的重要手段,大量的经验实践证明,软件测试越早参与到软件开发过程中,开发出来的软件质量相对越高,时间和物力也越经济。
根据软件工程的基本理论,多模块程序的测试共包括以下4个层次:
各阶段测试的具体内容会在以后章节具体介绍,下面介绍一下软件测试的经典技术。
软件测试的经典技术分为黑盒测试和白盒测试技术。其中黑盒测试技术忽略程序内部结构,看不到程序的代码细节,只针对程序的功能进行测试,黑盒测试的方法有:
具体方法会在以后章节中具体介绍,敬请期待。
说完黑盒测试,就该介绍白盒测试了,白盒测试也称结构测试,白盒测试深入程序内部结构,分析程序代码结构,因此学好白盒测试,首先要掌握必要的编程语言,比如说Java或者C/C++/C#等。白盒测试的方法有:
白盒测试的方法要涉及到程序图和流程图的设计,逻辑覆盖主要利用程序图,路径覆盖主要利用流程图,测试者必须能够根据程序的代码结构画出相应的程序图和流程图,白盒测试的方法也会在以后的章节中具体介绍。
本节主要介绍一下层次测试的第一步——单元测试。在了解单元测试之前先看一个简单的主程序树状模块图:
所谓模块测试就是在底层进行的测试,如上图,单元测试就是测试上图中紫色的模块。单元测试是整个测试的基础,单元测试中发现的错误约占程序总错误数2/3,单元测试的目标是通过对程序底层模块的静态和动态测试使底层模块达到模块说明的要求。
单元测试主要测试5方面的的问题:
模块的接口测试主要检查数据能否正确地通过模块;数据结构测试目的在于保持程序内部数据的完整性;重要路径测试是单元测试的一项基本任务,主要做好覆盖分析;程序最容易在边界上出错,因此边界条件测试是必不可少的;错误处理测试要点是在工作中发生了错误,其中的错误处理措施是否有效。
单元测试的一般步骤:
编译过程中主要检查对象就是代码中的语法错误;静态分析器检查使用专用工具来进行分析,代码审查主要依靠人工,第二步和第三步都是以检查结构性错误为主的静态分析;动态测试是单元测试的最后步骤,重点是发现单元的功能型错误,可采用白盒测试或者黑盒测试方法进行测试,白盒测试和黑盒测试会在以后进行详细介绍,这里知道有这两种方法即可。
代码评审有两类组织形式:一、办公桌检查,由程序员自己审查自己的代码,仅适用于规模很小的程序。二、以小组会的方式进行,又分为走查和代码会审两种,适用于各种规模的程序。
单元测试不是独立的程序,在多模块程序中,模块之间可以相互调用,单元测试时往往需要为被测模块编制若干模块替身,替身模块仅是真实模块的简化,仅需模拟与被测模块直接相关的一部分功能。
根据经验总结,在单元级发现问题时,问题肯定就在那个单元中,如果在多个单元模块集成时发现缺陷,那么它一定与模块之间的交互有关。在实际情况中,有很少的例外。
好的,本节到此结束,下一节将详细介绍层次测试的第二步——集成测试。
本节主要介绍一下层次测试的第二步——集成测试。上一节我们已经在一定程度上了解了单元测试,这一节我们要讲解的集成测试就是建立在单元测试的基础上,将所有模块按照设计要求组装成一个完整的系统而进行的测试,也称为联合测试或组装测试。
集成测试应由独立于开发人员的测试小组负责实施。集成测试重点测试所有模块的接口部分,需设计测试过程所使用的驱动模块和桩模块,在单元测试时为被测试模块做的上下级模块做的替身分别称为驱动模块和桩模块。测试方法以黑盒为主。集成测试的方案大致可分为有三种,分别是自顶而下、由底向上以及从两头逼近的混合模式。看下面程序模块:
自顶而下的测试从顶模块开始,沿被测程序的结构图逐步向下测试,按照移动路线的差异,又可区分为两种不同的实施步骤,分别是先广后深和先深后广两种,以上图为例,先广后深的组装顺序:
M1——M2——M3——M4——M5——M6——M7——M8
先深后广的组装顺序:
M1——M2——M5——M8——M6——M3——M4——M7
自顶而下的测试要使用桩模块,如下图显示了先深后广的测试步骤:
其中,S2、S3、S4、S5、S6和S8分别是M2、M3、M4、M5、M6和M8的替身。
由底而上模式的典型步骤:
例图程序模块可能的组装顺序:
M8——M5——M6——M2
M7——M4——M3——M1
混合模式是以上两种模式的综合,其一般步骤:
此种模式兼有以上两种模式的优点,应用也最广泛。
以上三种模式是从一个模块开始,测一次添一个模块,组装程序类似于滚雪球,所以统称为渐增式。三种模式都有各自的优缺点,综合起来,混合模式正在与扬长避短,综合了两种模式的优点,建议多采用混合模式进行总装。
好的,本节到此结束,下一节将详细介绍层次测试的第三步——确认测试。
有效性测试和软件配置审查是确认测试最重要的两项工作。
确认测试一般是在模拟的环境或者就是开发环境下运用黑盒测试法,按照需求说明书,验证软件功能、特性是否与用户需求一致。经过确认测试后,可能有以下两种情况:
软件配置审查也称配置审计,指软件工程过程中所产生的所有信息项:文档、报告、程序、表格、数据等。此阶段主要复查SCI是否齐全,检查软件的所有文档资料的完整性和正确性,然后对发现的缺陷,进行修复,最后编排好目录,以便后期维护顺利进行。
确认测试继集成测试之后进行,其目的在于确认组装完毕的程序是否满足需求说明书。确认测试是由软件开发单位组织实施的最后一项开发活动,测试结束后,软件就交付验收了,因此开发单位必须十分重视这项工作,和集成测试一样,也应由独立测试小组负责实施。
好的,本节到此结束,下一节将详细介绍层次测试的第四步——系统测试。
经过了前面的总结,今天该到层次测试的最后一步——系统测试了,系统测试是验收工作的一部分,应由用户单位组织实施。软件开发单位应该为系统测试创造良好的条件,负责回答和解决测试中可能发现的一切质量问题。
系统测试是在更大范围内进行测试。除被测试程序外,系统还可能包括硬件和原有的其他软件。系统测试的目的在于把软件产品顺利安装到系统中以后,保证软件与系统其余部分协调工作,并且符合软件需求说明书的要求。
下面说一下集成系统的测试,下图是集成系统测试的测试内容:
其中:
功能测试主要检查软件功能是否符合需求说明的要求,基本方法是构造一些合理的输入,检查是否得到期望的输出,假如输入范围是无限的,关键在于寻找等价区间,还有一种有效的测试方法就是边界值测试,会在以后具体介绍。
性能测试是用来测试软件在集成系统中的运行性能,特别是针对实时系统和嵌入式系统,常常与强度测试结合起来进行。
安全性测试是为了保证安装在系统内的保护机制能在实际运行中保护系统不受非法侵入等非法行为的干扰,测试过程中需要设置一些测试用例试图突破系统的安全保密措施,检验系统是否有安全保密的漏洞。
恢复测试目的在于保证系统受到某些外部事故的破坏时能够重新恢复正常工作,可以通过各种手段,强制性地使软件出错而不能正常工作,进而检验系统恢复能力。
强度测试主要是在一些极限条件下,检查软件系统的运行情况,例如一些超常数量的输入数据、超常数量的用户、超常数量的网络连接,这对于了解软件系统的性能和可靠性、健壮性具有十分重要的意义。
文档测试主要检查文档的正确性、完整性和可理解性。正确性指不要把软件的功能和操作写错,也不允许文档内容前后矛盾;完整性是指文档不可以虎头蛇尾,更不允许漏掉关键内容;可理解性指文档内容让大众用户看得懂、能理解。
到这里,层次测试的所有阶段都介绍完了,下一节将介绍软件测试的经典方法黑盒测试中的部分内容,最后介绍一下终止测试的标准。
软件可以终止测试的标准有两个,一个标准是规定测试策略和应达目标,例如,在白盒测试中,可以规定完全覆盖为标准,即语句覆盖和分支覆盖率必须达到100%,满足了这些条件就可以停止测试;在黑盒测试中,可以规定设计各种方法来设计测试用例,当所有测试用例全部用完时即可停止测试。另一个标准是规定至少要查出的错误数量,例如根据以往的测试经验,估算系统中的缺陷数目,规定目标是消除95%的设计缺陷和98%的编码与结构缺陷,则可以停止错误。
前面总结了软件测试层次的各阶段目标和任务等相关内容,接下来将总结软件测试的经典方法,即黑盒测试和白盒测试。其中黑盒测试有等价分类、边界值分析、错误推测和因果图等经典分析方法,本节先介绍黑盒测试中的等价分类,也称等价分配或等价划分,即分步骤的把过多(无限)的测试案例减小到同样有效的小范围过程。
其中,有效等价类中的任何一个测试测试用例都能代表同一等价类中的其他测试用例,即从某一个等价类中任意选出一个测试用例若未能发现程序的缺陷,就可以合理地认为使用程序中的其他测试用例也不会发现程序的缺陷;无效等价类中的每一个无效等价类至少要用一个测试用例,否则有可能漏掉某一类错误。
划分等价类有其一般步骤,下面我们就一个具体的例子来讲解等价类划分的具体步骤。
具体问题:某软件开发公司进行人员扩增,规定应聘人员的年龄在20周岁(1992年11月前出生)到35周岁(1977年11月后出生)之间,若出生年月不在以上范围内,则拒绝面试,并显示“年龄不合格”,请使用等价类划分方法对这一程序功能设计测试用例。
第一步:划分等价类。现规定出生年月由6位数字字符表示,前4位代表年,后2位代表月份,则给出以下3个有效等价类和7个无效等价类,如下表:
第二步:设计有效等价类的测试用例。在设计有效等价类测试用例前最好将所有等价类都先编号,如上图,然后根据编号设计测试用例,使其尽可能多的覆盖尚未被覆盖的等价类,下面是设计的测试用例表:
让几个等价类公用一个测试用例,可以减少测试次数,有利而无弊。
第三步:为每一无效等价类至少设计一个测试用例。本例有7个无效等价类,则至少设计7个测试用例,假如少设计测试用例,就有可能产生遗漏。下面是无效测试用例。
本程序的等价类划分就算基本写完了,学习时注意划分的一般步骤,选择测试用例时也要仔细斟酌,看是否在所要测试的等价类中。
等价类划分是一种典型的黑盒测试方法,也是一种非常实用的重要测试方法,作为一个合格的测试员,应具备划分等价类并为其设计合理的测试用例的基本能力。
好的,本节结束,下一讲将总结黑盒测试的另一个经典方法——边界值分析法,敬请期待!谢谢!
三国中的诸葛亮能看破天象,对敌军的破绽之处也更是了如指掌,死孔明吓跑活仲达的笑话无人不知,无人不晓。作为软件测试员就应该有孔明先生这样的本领,测试员能该把软件当作自己的敌人,兵法云知己知彼方能百战不殆。本节将总结黑盒测试中的又一常用方法——错误推测法。
从这一节开始即将总结白盒测试的常用经典技术。前面详细总结了黑盒测试和一些常用的黑盒测试技术,但是都没有打开软件的代码进行测试,黑盒测试的概念就是针对白盒测试技术命名的,那么什么是白盒测试呢?白盒测试也称结构测试,白盒测试是针对被测单元内部是如何工作进行的测试,深入程序代码细节,它根据程序的控制结构设计测试用例,主要用于软件程序验证。
白盒测试又分为静态白盒测试和动态白盒测试。其中静态测试主要涉及代码走查和审查,就不在这里总结了,动态测试包括逻辑覆盖测试、路径覆盖测试和边界值测试等,当然分法还有好多,这里主要总结逻辑覆盖测试和路径覆盖测试。覆盖测试要以程序图和流程图辅助工具,所以在学习覆盖测试前要熟练掌握程序图和流程图的画法。
本节主要介绍流程图和流程图到程序图之间的转化。程序流程图是描述和分析软件控制流向的通用工具,利用程序流程图设计测试用例有助于分离程序的路径,进行覆盖统计,程序流程图的主要符号:
顺序:
条件判断:
先判断后循环:
先执行后判断循环:
下面看一段程序的代码,并分析画出其流程图:
#include
void main()
{
inti,a[5]; //定义循环变量i,数列项n
longsum=0; //定义数列的和及临时变量
cout<<"请输入5个数,作为数列每项的值:"<
for(i=1;i<=5;i++)
{
cout<<"请输入第"<个值:";
cin>>a[i];
}
for(i=1;i<=5;i++)
{
sum+=a[i];
}
}
流程图:
程序图:
由于程序流程图的知识很简单,所以本节就介绍这么一个非常简单的实例,图都可以对比画出来的,程序流程图在逻辑覆盖测试中非常重要,所以以后章节的总结中也会渗透程序流程图的实例。
、