测试的目的:
1、检验开发出来的软件是否符合用户的需求。
2、尽可能多地发现程序中的错误和缺陷。
基本要求(测试人员):
1、了解软件的总体设计思路和详细设计过程。
2、对整套软件的数据流程要十分清晰。
测试用例:
1、由测试数据和相应的预期结果构成。
2、在测试之前,一定要设计好测试数据和相应的预期结果,这是测试用例的基本原则和进行有效测试的最好途径之一。
测试原则:
1、根据测试数据来确定预期的输出结果。
2、彻底检查每个测试结果(正确的,错误的),并对测试结果进行认真和仔细的分析。
3、对非法的和非预期的输入数据也要象合法的和预期的输入数据一样编写测试用例。
4、以挑剔的眼光来看待每个程序模块,不要设想程序中不会出现错误,程序做了它不该做的事情,我们也应该把它视为错误。
5、程序模块经测试后,残存的错误数目一般与已发现的错误数目成正比例,也就是说一个模块中发现的错误越多,那么它可能残存的错误数目也就越多,对这样的程序模块,一定要进行严格和更彻底的测试。
6、要保存测试用例。
测试步骤
单元测试
1、主要是对编码进行测试,通过对它进行测试,来检查程序模块的语法,语义和语用的正确性。从目前我们公司来看,由于时间或其他方面的原因,对编码的测试一般侧重于语法方面,对语义和语用方面的测试则相对薄弱
2、通过单元测试,能够发现程序模块中的逻辑通路是否都按预定的要求正确地工作,是否实现了系统规划说明书中规定的模块功能和算法,它对联体测试起着至关重要的作用。
联体测试(集成测试)
1、对由各个模块组装而成的程序进行测试,主要检查模块间的接口和通信(测试数据的联动性,即在一个程序模块中输入的数据在与之相关的程序模块中能否得到正确的体现)
2、通常在联体测试时,一般采用输入一条明细进行测试和采用输入多条明细进行测试,也就是采用由简单到复杂的联体测试策略,这样能够比较及时的发现软件中的问题。
确认测试
1、确认测试的任务是检查软件的功能,性能及其他特是否与用户的需求一致,它是以用户的需求规格说明书作为依据的测试。
测试用例设计:
语句覆盖
1、我们要设计足够的测试用例,使得被测程序的每个语句至少执行一次。
2、在测试程序时,要考虑程序要实现的每一个功能及其细节,例如:现有一个打印报表程序,要求每页打印24行,假设我们只对打印格式行进行测试,那么我们至少要进行以下4次测试:
输入1条明细进行打印测试
输入23条明细进行打印测试
输入24条明细进行打印测试
输入25条明细进行打印测试
如果这四次测试都符合打印格式行的要求,那么它基本能保证每页至多只能打印24行
判定覆盖
1、设计足够的测试用例,使得运行这些测试用例时,每个判定的所有的可能结果至少出现一次,如下的一个程序流程图
S
A C
B E
D
入口
(y>1) and (z=0)
x = x / y
(y=2) or (x > 1)
x = x +1
(图 1-1)
图1-1有二个判定:
(1)y > 1 and z = 0
(2)y = 2 and z = 0
例如:选择测试路径SACBD和SABED,下面两个测试用例可满足判定覆盖标准:
测试数据 x = 3 , y = 3 ,z = 0 , 预期结果 x = 1 (判定A为真,B为假)
测试数据 x = 1 ,y = 2, z = 1 ,预期结果 x = 2 (判定A为假,B为真)
条件覆盖
1、设计足够的测试用例,使得运行这些测试用例时,判定中的每个条件的所有可能结果至少出现一次。
图1-1中,判定(1)中各种条件的所有可能结果为:y > 1 ,y <= 1 , z = 0 , z 0 ,判定(2)中各种的所有可能结果为:y = 2 ,y 2 ,x > 1 , x 1 , z = 0 , y = 2 ,x <= 1)
测试数据 x = 2 ,y = 2 ,z = 1 ,预期结果 x = 3 (执行路径SABED,满足条件 y <= 1,z 0,y 2, x > 1)
综合运用判定/条件覆盖,条件组合覆盖
等价类划分
1、如果把所有可能的输入数据(有效的和无效的)划分成若干个等价类,那么可以合理地作出假定:如果等价类中的一个输入数据能检测出一个错误,那么等价类中的其他输入数据也能检测出同一个错误;反之如果一个输入数据不能检测出某个错误,那么等价类中其他输入数据也不能发现这一错误。
2、在测试时,将输入数据划分成若干个有效等价类和若干个无效等价类,然后设计测试用例覆盖这些等价类。
边值分析
1、输入的一些测试数据直接在其边界上,或稍高于其边界,或稍低于其边界
2、针对程序模块采用相应的测试方法
基本数据录入
1、检查每个字段的类型,长度以及录入规则是否与设计时给出的字段的类型,长度以及录入规则一致
注:录入规则主要是指:a、直接进行手录入;b、前显示手录入; c、自动显示且光标不停留于此
2、字段的排列顺序以及光标的跳格顺序是否符合人们的通常思维方式。
3、录入是否方便(主要考虑使用下拉式与使用弹出式的选择)、
4、出错的提示信息是否亲切,严谨和一致(对于出错类型相同的,其提示信息应该一致)。
单据程序
1) 录入画面是否简洁明了
2) 数据处理是否正确合理
3) 打印
a、将打印出来的报表同票据进行对照,检查打印的内容是否处在正确的位置。
b、检查打印的内容是否完备。
4) 对数字,日期范围要测试,录入及出错时都应有相应的提示信息。
5) 输入临界值进行错误检测(边值分析法)
例如:当录入规则要求输入的数值必须大于零时,此时可输入小于等于零的数值进行测试,看执行程序后有什么效果
计算类程序
1、计算结果要前端显示,结果为零要录入,否则跳过结果。
2、要特别重视联体测试
3、计算结果要测试,检查
4、特殊情况要考虑
报表类程序
1、对齐方式:数值型右对齐,字符型左对齐;控键之间上下左右要对齐
2、内容要打印到框格中
3、要完全符合用户对报表格式及打印内容的要求
测试报告
测试时,一定要认真填写测试报告,将测试用例的设计和测试的步骤都详细的记录下来,以备今后使用。一般来说,填写测试报告要包括以下基本内容:
测试人
测试时间
测试模块:主模块,子模块,功能项
测试用例
测试步骤
测试记录
测试错误简要分析
总之,,软件测试是一项非常重要和细致的工作,也是一项很艰苦的工作,我们对它一定要有足够的认识和比较全面的把握,这样才有利于我们的软件向高效率、高质量和高效益等发面发展.。
软件测试从不同角度可以有以下划分:静态测试与动态测试,白盒测试和黑盒测试,人工测试和自动化测试。
1.静态测试与动态测试根据被测对象的运行状态可以把测试方法划分为静态测试和动态测试。
静态方法是不利用计算机运行被测试程序,而是采用其它手段达到测试的目的。具体的表现手段有代码人工走查,代码覆盖率分析等。它主要检测软件的静态质量属性。
动态方法与之相反,即通过运行被测试程序来达到测试的目的。具体的表现手段有功能验证测试,性能验证测试等。它主要检测软件的动态质量属性。
2.白盒测试和黑盒测试根据对软件产品的测试关注点不同,可以将测试方法划分为黑盒测试和白盒测试。
黑盒测试与白盒测试是两类广泛使用的测试方法。
黑盒测试又称功能测试,数据驱动测试或基于规格说明的测试。它测试的依据是程序的外部特性。因此,黑盒测试是从用户观点出发的测试。这一方法的主要缺点是它依赖于规格说明书的正确性。
实施黑盒测试的方法又有基于图的测试、等价类划分和边界值分析等方法。
白盒测试又称结构测试,逻辑驱动测试或基于程序的测试。
在白盒测试中,依据由弱到强的覆盖准则,最常见的测试方法有:
• 语句覆盖
• 分支覆盖或判定覆盖
• 条件覆盖
• 判定/条件覆盖
黑盒测试是依据程序的外部特性进行的测试,它完全不涉及到程序的内部结构,如果外部特性本身有问题或规格说明有误,用黑盒测试则发现不了。另一方面白盒测试完全相反,它只依据程序的内部结构进行测试,而不考虑外部特性,如果程序本身有问题,如程序逻辑有错误,或有遗漏,则无法发现。
3.人工测试和自动化测试根据执行测试的主体不同,又可以将测试方法划分为人工测试和自动化测试。
广义上,人工测试是人为测试和手工测试的统称。
人为测试的主要方法有桌前检查 (desk checking) ,代码审查( code review )和走查( walkthrough )。事实上,用于软件开发各个阶段的审查会( inspection )或评审 (review) 也是人为测试的一种。经验表明,使用这种法能够有效地发现 30% 到 70% 的逻辑设计和编码错误。 IBM 代码审查会的查错效率更高,竟能查出全部错误的 80% 。由于人工测试技术在检查某些编码错误时,有着特殊的功效,它常常能够找出利用计算机不容易发现的错误。人为测试至今仍是一种行之有效的测试方法。
手工测试指的是在测试过程中,按测试计划一步一步执行程序,得出测试结果并进行分析的测试行为。目前,在功能测试中经常使用这种测试方法。
自动化测试指的是利用测试工具来执行测试,并进行测试结果分析的测试行为。自动化测试不可能完全自动,它离不开人的智力劳动。但是它能替代人做一些繁琐或不可能通过手工达到的事情。我们将在后面的内容里专门讨论它。