1.大纲总览
2.软件测试方法
3.测试步骤
4.面向对象的测试
5.软件调试
发现和改正错误。
- 测试开销大
- 不能进行穷举测试
- 测试难度大。(既不能进行穷举测试,又要尽可能多的查出错误,需要选择“高效”的测试用例)
1. 所有的测试都应追索到用户的需求:系统中最严重的错误是导致程序无法满足用户需求的错误;
2. 尽早的和不断的进行软件测试:需求和设计时初始的缺陷占很大的比例;缺陷的修改成本随着阶段的推移而急剧上升;缺陷具有放大的特点。3. 80-20原则:测试发现的错误80%很可能起源于20%的模块中,应孤立这些疑点模块重点测试。
4. 注意测试中的群集现象:在所测程序段中,若发现错误数目多,则残存数目也比较多
5. 尽量不由程序设计者测试
6. 最重要的是设计周密的测试用例
测试用例至少包括:
执行测试用例前:应满足的前提条件
输入
预期输出
设计测试用例时应包括合理的输入条件和不合理的输入条件
7. 回归测试:程序修改错误后必须进行回归测试,避免引入新的错误
8. 严格执行测试计划:排除测试的随意性
9. 妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。
软件测试贯穿于软件开发的整个期间(这是传统的测试流程,在实践中,根据项目、项目组等实际情况有所调整,而且这种测试流程也是不断循环更迭的):
立项阶段-需求阶段----设计阶段----编码 和 单元测试阶段----集成测试阶段----系统测试阶段-----验收测试阶段-----结项总结阶段
静态测试 不运行被测试程序本身,而是通过对软件进行分析、检查和审阅达到测试的目的
测试方法: 代码审查;代码走查;桌面检查;技术评审
动态测试 通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能
测试方法:编写测试用例-执行测试结果-分析输出结果
黑盒测试 功能测试\数据驱动测试,功能测试/数据驱动测试,是在已知产品所应对应具有的功能的前提下,通过测试来检测每个功能是否都能正常使用。
测试方法:等价划分类、边值分析、因果图、基于判定表的测试、正交测试、场景测试等
白盒测试 结构测试/逻辑驱动测试,是在知道产品内部工作过程的前提下,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行。
测试方法:语句覆盖、判定覆盖、条件覆盖、路径覆盖、条件组合覆盖
单元测试 的粒度最小,一般由 开发小组 采用 白盒方式 来测试,主要测试单元是否符合“设计”。
集成测试 界于单元测试和系统测试之间,起到“桥梁作用”,一般由 开发小组 采用 白盒加黑盒 的方式来测试,既验证“设计”,又验证“需求”。
系统测试 的粒度最大,一般由独立 测试小组 采用 黑盒方式 来测试,主要测试系统是否符合“需求规格说明书”。
验收测试 与系统测试相似,主要区别是测试人员不同,验收测试由 用户 执行。
集成测试主要用来测试 模块与模块之间的接口 ,同时还要测试一些主要 业务功能。
系统测试是在经过以上各阶段测试确认之后,把系统完整地模拟客户环境来进行的测试。
语句覆盖:选择足够的测试用例,使得程序中的每个语句至少能被执行一次。
判定覆盖:执行足够的测试用例,使得程序中每个判定至少获得一次“真”和“假”值。
条件覆盖:执行足够的测试用例,使得判定中的每个条件去的各种可能的结果。
判定\条件覆盖: 执行足够测试用例,使判定中的每个条件取到各种可能的值,并使得判定取得各种可能的结果。
条件组合覆盖:执行足够的测试用例,使得每个判定中的各种可能条件的组合都至少出现一次。
1)选择逻辑覆盖标准。
2)按照覆盖标准列出所有情况。
3)选择确定测试用例。
4)验证分析运行结果与预期结果。
用白盒测试以下程序段:
Procedure(VAR A,B,X:REAL);
BEGIN
IF (A>1) AND (B=0)
THEN X:=X/A ;
IF (A=2) OR (X>1)
THEN X:=X+1
END;
1.语句覆盖:使得程序中的每个语句至少被执行一次。
满足语句覆盖的情况: 执行路径 - ace
用例格式: [input(A,B,X),output(A,B,X)]
选择用例:[(2,0,4),(2,0,3)]
2.判定覆盖:每个判定至少为“真”或“假”各一次。
覆盖情况:执行路径-ace & abd 或者 abe & acd
选择用例: [(2,0,4,),(2,0,3)]ace [(1,1,1),(1,1,1)]abd 或者......
3.条件覆盖:判定中的每个条件获得各种可能。
覆盖情况:判定一:A>1,A<=1,B=0,B~=0 ; 判定二:A=2,A~=2,X>1,X<=1
用例:[(2,0,4),(2,0,3)] [(1,1,1),(1,1,1)]
4. 判定\条件覆盖:同时满足条件和判定覆盖。
如图:
5. 条件组合覆盖:使得判定中条件的各种可能的组合都至少出现一次。
如图:
等价分类法、边值分析法、错误推测法、因果图法
等价分类法:根据程序的I/O特性,将程序的定义域划分为有限个等价区域-“等价类”,从等价类中选择具有:“代表性”的用例。可分为有效等价类和无效等价类(没意义的输入数据构成的集合)。
边值分析法:选择的等价类的边缘值作为测试用例,让每个等价类的边界都得到测试,选择测试用例既要考虑到“input”也要考虑到“output”。
边界原则:A.输入/输出值范围/边界;B.输入/输出值的个数;C.输入输出有续集的边界。
错误推测法:凭经验或者直觉推测出可能发生的错误,列出程序种可能有的错误和容易发生错误的特殊情况,选择测试用例。
因果图法:将输入条件作为“因”,输出条件作为“果”,将黑盒看成从因到果的网络图,采用逻辑图的形式来表达功能说明书中输入条件的各种组合与输出的关系。根据这种关系可选择高效的测试用例。
所有测试过程都应采用综合测试策略;即先作静态分析,再作动态测试。并事先制订测试计划。测试步骤如图:
测试内容:
模块接口测试:
I/O参数值的个数、类型、次序、格式是否正确,I/O文件属性、操作是否正确
边界条件测试:
边界条件常闭噢扩 循环边界,最大小值、控制流中的等于、大于、小于等。
错误处理测试:
检查“错误处理程序”本身的错误。
局部数据结构测试:
数据说明是否正确、一致,变量以及初始值定义是否正确。
重要路径测试:
完成模块功能的主要路径,一般是控制结构。
测试步骤:
驱动模块:模拟主程序功能,用于向别测试程序传递数据,接收、打印从被测试程序返回的数据。
桩模块:用于模拟由被测试模块所调用的下属模块功能。
测试内容:
重点测试模块的接口部分,需要设计驱动模块和桩模块。
测试步骤:
确定模块组装方案,将经过测试的某块组装成一个完整的系统,分为渐增式和非渐增式。
渐增式 分为自顶向下 和自底向上,(又分别包括深度优先和广度优先)
自顶而下增值
优点:能够尽早发现系统主控方面的问题。
缺点:无法验证桩模块是否完全模拟了下属模块的功能。
自底而上增值
优点:驱动模块较容易编写桩模块,能够尽早查出底层涉及较复杂的算法和实际的I/O模块中的错误。
缺点:最后才能发现系统主控方面的问题。
测试内容:
验证系统的功能性能等特性是否符合需求规格说明。
测试步骤:
1.有效性测试
制定测试计划,运用黑盒法,验证软件特性是否与需求符合
2.软件配置复查
软件配置— 指软件工程过程中所产生的所有信息项:文档、报告、程序、表格、数据。随着软件工程过程的进展软件配置项(SCI software Configuration Item)快速增加和变化。应复查SCI是否齐全
3.α测试和β测试
α测试:是在开发机构的监督下,由个别用户在确认测试阶段后期对软件进行测试,目的是评价软件的FLURPS(功能、局域化、可使用性、可靠性、性能和支持),注重界面和特色。
β测试:由支持软件预发行的客户对FLURPS进行测试,主要目的是测试系统的可支持性。
将经过确认测试的软件,与计算机硬件、外设、支持软件等一起,在实际运行环境下测试
验收测试是以用户为主的测试。
........
P.s.最近在看《Google 软件测试之道》,受益良多,希望有时间能多看几次。