|
一:软件测试基础知识:
1:软件测试的定义:
IEEE的定义:使用人工或自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清楚预期结果与实际结果之间的差别。
通俗一点说软件测试是采用测试用例执行软件的活动,目标是找出失效或演示正确的执行。
2:软件bug产生的原因:主要有三种情况
A:在编码前就产生的错误:作为软件开发依据的需求,在开发初期就提供的不够明确,不能满足用户的实际需求或对用户的需求理解有误。
B:在编码过程中产生的错误:开发人员的逻辑错误或开发过程中没有遵守统一的,公认的方法论或开发规范,开发人员间配合不够严密,约定不够明确。
C:测试过程中可能产生的错误:开发人员对测试当中发现的bug进行修改后,可能产生新的bug。
3:测试的生命周期:
1:单元测试:单独检验各模块的工作
2:集成测试:将测试过的单个模块集成到子系统中,直到测试完整个系统,这里的集成可以是一次性的(非增量式集成),也可以是逐个的扩展(增量式集成)
3:系统测试:充分运行系统,验证系统各部件是否都能正常工作并完成所赋予的任务。常见的系统测试包括:恢复测试、安全测试、性能测试、强度测试。
4:验收测试:用户验收测试是软件开发结束后,用户对软件产品投入实际应用以前进行的最后一次质量检验活动。它要回答开发的软件产品是否符合预期的各项要求,以及用户能否接受的问题。
4:软件测试的信息流:
二:软件错误与软件质量保证:
1:软件错误严重级别分类:
1- Low 低级别:使操作者不方便或遇到麻烦,但它不影响执行软件功能,比如标题或信息提示不正确。
2- Medium中等级别:影响系统的基本功能或简单功能,但软件可以正常运行,比如执行速度缓慢。
3- High 高级别:严重地影响系统要求或基本功能的实现,但存在合理的更正办法,比如信息修改失败或不正确。
4- Very high 严重级别:严重地影响系统要求或基本功能的实现,且没有办法更正,比如遥测、遥控失败。
5- Urgent 致命级别:不能执行正常软件功能或重要功能,软件无法正常运行下去,比如系统崩溃、死机。
2:软件错误的分类:
从错误的性质看,软件错误分为以下几种
1:静态测试和动态测试:
主要从是否需要执行被测软件的角度,可分为静态测试和动态测试,前者不利用计算机运行待测程序而应用其他手段实现测试目的,如代码审核。(我认为主要是让测试人员对编译器发现不了的潜在错误进行分析,如无效的死循环,多余的变量等),而动态测试则通过运行被测试软件来达到目的。
2:黑盒测试和白盒测试:
黑盒测试又称功能测试、数据驱动测试或基于规格说明的测试,他是从用户的角度进行测试,用这种方法进行测试,被测程序被当作打不开的黑盒,因而无法了解其内部结构。在完全不考虑程序内部结构和内部特性的情况下,测试者只知道该程序输入和输出之间的关系,或是程序的功能,他必须能够根据输出判断测试结果的正确与否。在确认测试或系统测试中大都采用黑盒测试,常用的测试方法有:等价类划分、边值分析、因果图。
白盒测试又称结构测试、逻辑驱动测试或基于程序的测试,采用这一测试方法,测试者可以看到被测的源程序,他可用以分析程序的内部结构,并且根据其内部构造设计测试用例。在单元测试当中主要采用白盒测试,常用的测试方法有:语句覆盖,判定覆盖,条件覆盖、判定/条件覆盖、路径覆盖、模块接口测试。
3.测试步骤:
软件测试工作可以从一螺旋曲线上来体现,在螺线的核心点针对每个单元的源代码,进行单元测试,在单元测试完成后,沿螺线向外前进,开始针对软件整体构造和设计的集成测试,然后是检验软件需求是否能得到满足的确认测试,最后,来到螺线的最外层,把软件和系统的其他部分协调起来,当作一个整体,完成系统测试。这样,沿着螺旋线,从内到外,逐步扩展了测试的范围。
上图表示了测试的流程图,开始分别完成每个单元的测试任务,以确保每个模块能正常工作。单元测试大量地采用白盒测试方法,尽可能发现模块内部的程序错误,然后,把已测试过的模块组装起来,完成集成测试,其目的在于检测与软件设计相关的程序结构问题。这是较多的采用黑盒测试方法来设计测试用例。完成集成测试以后,要对开发工作初期制定的确认准则进行检验,确认测试是检验所开发的软件是否能满足所有功能和性能需求的最后手段,通常采用黑盒测试方法,完成确认测试后,给出的应该是合格的软件产品,但为检验它是否能与系统的其他部分(如硬件、数据库及操作人员)协调工作,需要进行系统测试。
A:单元测试:
是程序的最小组成单位,它具有以下特征:
1:单元接受数据输入后,经过加工,得到一些结果,可能给出输出结果,也可能仅仅发生一些状态的改变,但如果输入、加工和输出三者缺少任何一个,这个程序单元都不是完整的。
2:原则上说,每个程序单元都应有正规的规格说明,使之对其输入、加工和输出的关系作出明确的描述。
比程序单元更大的是程序模块,它有以下基本属性:
名字,明确的功能,内部使用的数据,与其它模块或与外界存在的数据联系,实现其特定功能的算法,可被其上层模块调用,在其工作过程中也可调用其下属模块协同工作。
有时候我们不加区分,默认单元测试就是模块测试也是允许的
单元测试要解决的问题主要有以下5个方面:
1:模块接口:对被测的模块,信息能否正常无误地流入和流出
2:局部数据结构:在模块工作过程中,其内部的数据是否能保持其完整性,包括内部数据的内容、形式及相互关系不发生错误。
3:边界条件:在为限制数据加工而设置的边界处,模块是否能正常工作。
4:覆盖条件:模块的运行能否作到满足特定的逻辑覆盖
5:出错处理:模块工作中发生了错误,其中的出错处理设施是否有效。
模块与其周围环境的接口有无差错应首先得到检验,否则其内部的各种测试工作也将是徒劳的。
由于每个模块在整个软件中并非孤立,为模拟这一联系,在进行单元测试时,需要设置若干辅助测试模块,一种是驱动模块,用以模拟被测模块的上级模块。
另一种是桩模块,用以模拟被测模块工作过程中所调用的模块。驱动模块在单元测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。壮模块由被测模块调用,它们仅作很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口。
B:集成测试:
在每个模块完成单元测试以后,需要按照设计时作出的结构图,把他们连接起来,完成集成测试(ineegrated test) ,组成集成测试的方式,主要有两种方法,既非增式测试和增式测试.
非增式测试指:按程序结构图将各模块联结起来,把连接后的程序当作一个整体进行测试.
增式测试的集成是逐步实现的, 增式测试可以按照不同的次序执行,大体上有两种方式:
1:自顶向下增式测试是按结构图自顶向下进行的
2:自下向上增式测试是按结构图自下向上进行的
总体上说,由于增式测试使用了较少的辅助模块,且把可能出现的差错分散暴露出来,便于找出问题和修改,所以增式测试比非增式测试具有一定的优越性.
C:确认测试:
即检验所开发的软件是否能按顾客提出的要求进行,若能达到这一要求,这认为开发的软件是合格的,这里说的顾客提出的要求主要是指在软件规格说明书中确定的软件功能和技术指标.另外配置审查是确认过程的重要环节,其目的在于确保已开发软件的所有文件资料已经编写齐全,并得到分类编目,足以支持投入运行以后的软件维护工作.
D:系统测试:
与系统中其它部分配套(包括计算机的软硬件环境和外部设备)运行,保证在系统各部分协调工作的环境下也能正常工作.
包括:
恢复测试:采用各种人工干预方式使软件出错,而不能正常工作,进而检验系统的恢复能力.如果系统本身能够自动地进行恢复,则应检验;重新初始化,数据恢复以及重新启动是否正确,如果这一恢复需要人为干预,则应考虑平均修复时间是否合理.
安全测试:目的在于检验安装在系统内的保护机构确实能够对系统进行保护,常用方式是设置一些测试用例试图突破系统的安全保密措施,检验系统是否能存在安全保密的漏洞.
强度测试:检验系统的能力最高实际限度.进行强度测试时,让系统的运行处于资源的异常数量、异常频率和异常批量的条件下。
4:人工测试:
这里的人工测试指不依赖于计算机的测试技术,主要是指利用穿插在软件开发各阶段的程序审查保证程序的质量。
第四章:黑盒测试
1:等价类划分:
等价类划分是一种典型的黑盒测试方法,我们必须仔细分析和推敲说明书的各项需求,特别是功能需求,把说明中对输入的要求和输出的要求区别开来并加以分解。等价类划分的办法是把程序的输入域划分为若干部分,然后从每个部分中选取少数代表性数据当作测试用例。
步骤1:划分等价类:
首先把数目极多的输入情况分长若干个等价类(某个输入域的集合)。它表示,就发现程序中的错误而言,集合中的每个输入条件是等效的。如果我们的测试数据全都从同一个等价类中选取,除去其中的一个测试数据对发现程序错误有意义外,使用其余的测试数据进行测试都是徒劳的。
在划分等价类时,要注意区别以下两种不同的情况:
有效等价类:有效等价类指的是对程序而言是有意义的、合理的输入数据所构成的集合。
无效等价类:不合理或无意义的输入数据所构成的集合。
划分等价类的准则:
1:如果输入条件规定了取值范围或值的个数,则可确定一个有效等价类和两个无效等价类。如:“ID范围为1到999”,则可取有效等价类为“1<ID〈999”。
无效等价类为ID〈1和ID〉999。
2:如果输入条件规定了输入值的集合,或是规定了“必须如何的条件“,则可确定一个有效等价类和一个无效等价类。如规定”标示符必须要以字母开头“,则”以字母开头者”作为有效等价类,”以非字母开头“为无效等价类。
3:如果我们知道已划分的等价类中各元素在程序中的处理方式是不同的,则应将此等价类进一步划分为更小的等价类。
步骤2:确定测试用例:
对根据已列出的等价类表,按以下步骤确定测试用例:
1:为每个等价类规定一个唯一的编号。
2:设计一个测试用例,使其尽可能多地覆盖伤未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖。
3:设计一个新的测试用例,使其只覆盖一个无效等价类,重复这一步使所有的无效等价类均被覆盖。
2:因果图法:
等价类法并没有考虑到输入情况的各种组合带来的制约关系,所以我们引入了因果图法。
利用因果图导出测试用例需要经过以下步骤:
1:分析程序规格说明的描述,哪些是原因,哪些是结果。原因常常是输入条件或输入条件的等价类,而结果是输出条件。
2:分析程序规格说明的描述中语义的内容,并将其表示成连接各个输入与各个输出的因果图。
3:由于语法或环境的限制,有些输入条件和输出的组合是不可能出现的,为表明这些特定的情况,在因果图上使用若干个特殊的符号标明约束条件。
4:把因果图转换成判定表。
5:判定表中每一列表示的情况写成测试用例。
Ci表示输入条件,Ei表示输出状态。
我们注意到,输入状态相互之间还可能存在某些依赖关系,称为约束(例如,某些输入条件本身不可能同时出现,我们用特定的符号表明这些约束。
E约束(异):a和b中至多有一个可能为真,即a和b不能同时为真。
I约束(或):a、b、c中至少有一个是真,既a,b,c3个输入条件至少有一个成立。
O约束(唯一):a和b必须有一个为真,而且仅有一个为真。
R约束(要求):a输入条件为真时,b输入条件也必须为真
输出条件的约束只有一个:
若输出为a,则输出为b的情况不可能出现。
3:边界值分析:
软件输入域和输出域的边界往往是最容易出现错误的地方,在设计测试用例的过程中。必须给予足够的重视,基于边界值分析而专门设计的测试用例,往往能取的良好的测试效果。
其基本思想是使用稍低于最小值、最小值 稍高于最小值、正常值 、稍低于最大值、最大值、稍高于最大值取输入变量。 |
|