系统测试
- 意义和目的
- 原则
- 测试过程
- 测试策略
- 测试方法
- 练习题
- 测试用例设计
- 黑盒测试
- 等价类划分
- 边界值分析
- 错误推测
- 因果图
- 白盒测试
- 逻辑覆盖
- 循环覆盖
- 基本路径测试法
- 练习题
- 调试
- 软件度量
- 练习题
考点少,知识点多
意义和目的
- 系统测试的意义:系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。
- 系统测试的目的:就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。
- 信息系统测试应包括软件测试、硬件测试和网络测试。硬件测试、网络测试可以根据具体的性能指标进行,此处所说的测试更多的是指软件测试。
- 系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析、系统设计和实施的最后复查。根据测试的概念和目的,在进行信息系统测试时应遵循以下基本原则。
原则
根据测试的概念和目的,在进行信息系统测试时应遵循以下基本原则。
- 应尽早并不断地进行测试。测试不是在应用系统开发完之后才进行的,测试应贯穿在开发的各个阶段,应尽早纠正错误,消除隐患。
- 测试工作应该避免由原开发软件的人或小组承担,测试工作应由专门人员来进行。
- 在设计测试方案时,不仅要确定输入数据,而且要根据系统功能确定预期输出结果。
- 在设计测试用例时,不仅要设计有效、合理的输入条件,也要包含不合理、失效的输入条件。
- 在测试程序时,不仅要检验程序是否做了该做的事,还要检验程序是否做了不该做的事。
- 严格按照测试计划来进行,避免测试的随意性。
- 妥善保存测试计划、测试用例,作为软件文档的组成部分,为维护提供方便。
- 测试例子都是精心设计出来的,可以为重新测试或追加测试提供方便。
测试过程
① 制订测试计划。在制订测试计划时,要充分考虑整个项目的开发时间和开发进度以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有测试的内容、进度安排、测试所需的环境和条件、测试培训安排等。
② 编制测试大纲。测试大纲是测试的依据,它明确、详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。
③ 根据测试大纲设计和生成测试用例,产生测试设计说明文档。其内容主要有被测项目、输入数据、测试过程和预期输出结果等。
④ 实施测试。测试的实施阶段是由一系列的测试周期组成的。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例对被测软件或设备进行完整的测试。
⑤ 生成测试报告。测试完成后要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误。
另外,给出一些建议,如可采用的修改方法,各项修改预计的工作量及修改的负责人员。
测试策略
① 单元测试。单元测试也称为模块测试。单元测试侧重于模块中的内部处理逻辑和数据结构。测试的对象是可独立编译或汇编的程序模块、软件构件或面向对象软件中的类(统称为模块),测试依据是软件详细设计说明书。
② 集成测试。目的是检查模块之间,以及模块和已集成的软件之间的接口关系,并验证已集成的软件是否符合设计要求。测试依据是软件概要设计文档。
- 自顶向下集成测试。自顶向下集成测试是一种构造软件体系结构的增量方法。
- 自底向上集成测试。自底向上集成测试就是从原子模块(程序结构的最底层构件)开始进行构造和测侧试。
- 回归测试。回归测试有助于保证变更不引入无意识行为或额外的错误。回归测试可以手工进行,方法是重新执行所有测试用例的子集,或者利用捕捉/回放工具自动执行。
- 冒烟测试。冒烟测试是一种常用的集成测试方法,是时间关键项目的决定性机制,它让软件团队频繁地对项目进行评估。
③ 确认测试。主要用于验证软件的功能、性能和其他特性是否与用户需求一致。根据用户的参与程度,通常包括以下类型:
- 内确认测试:主要由软件开发组织内部按照SRS进行测试。
- α测试:由有代表性的最终用户在开发者的场所进行。用户在开发环境下进行测试,且在受控的环境下进行。
- β测试:用户在实际使用环境下进行测试,β测试是在不被开发者控制的环境下软件的“现场”应用。接到β测试的问题报告之后,开发人员对软件进行修改,然后准备向最终用户发布软件产品。
- 客户验收测试:针对需求规约,在交付前以用户为主进行的测试。其测试对象为完整的、集成的计算机系统。验收测试的目的是,在真实的用户工作环境下,检验软件系统是否满足开发技术合同或SRS。验收测试的结论是用户确定是否接收该软件的主要依据。除应满足一般测试的准入条件外,在进行验收测试之前,应确认被测软件系统已通过系统测试。
④ 系统测试。测试对象是完整的、集成的计算机系统:测试的目的是在真实系统工作环境下,验证完成的软件配置项是否和系统正确连接,并满足系统/子系统设计文档和软件开发合同规定的要求。测试依据是用户需求或开发合同。主要内容包括:
- 恢复测试。恢复测试是一种系统测试,通过各种方式强制地让系统发生故障,并验证能否按照要求从故障中恢复过来,并在约定的时间内开始事勞处理,而且不对系统造成任何伤害
- 安全性测试。安全性测试验证建立在系统内的保护机制是否能够实际保护系统不受非法入侵。
- 压力测试。压力测试要求以非正常的数量、频率或容量等方式执行系统。
- 性能测试。性能测试用来测试软件在集成环境中的运行性能。在测试过程中的任何步骤都可以进行性能测试。
- 部署测试也被称为配置项测试。测试对象是软件配置项。测试目的是检验软件配置项与SRS的一致性。测试的依据是SRS。在此之间,应确认被测软件配置项已通过单元测试和集成测试。
测试方法
软件测试方法分为静态测试和动态测试。
- 静态测试是指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测,包括对文档的静态测试和对代码的静态测试。对文档的静态测试主要以检查单的形式进行,而对代码的静态测试,包括桌面检查、代码审查、代码走查的方式。使用这种方式能够有效的发现30%-70%的逻辑设计和编码错误。
- 人工检测。人工检测不依靠计算机而是依靠人工审查程序或评审软件,包括代码检查、静态结构分析和代码质量度量等。
- 计算机辅助静态分析。利用静态分析工具对被测试程序进行特性分析,从程序中提取一些信息,以便检查程序逻辑的各种缺陷和可疑的程序构造。
- 动态测试是指通过运行程序发现错误。在对软件产品进行动态测试时可以采用黑盒测试法和白盒测试法。
- 黑盒测试也称为功能测试,在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性。常用的黑盒测试技术有等价类划分、边界值分析、错误准测和因果图等。
- 白盒测试也称为结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要。白盒测试常用的技术是逻辑覆盖、循环覆盖和基本路径测试。
练习题
软件确认测试也称为有效性测试,主要验证()。确认测试计划通常是在需求分析阶段完成的。根据用户的参与程度不同,软件确认测试通常包括()。
A.系统中各个单元模块之间的协作性
B.软件与硬件在实际运行环境中能否有效集成
C.软件功能、性能及其它特性是否与用户需求一致
D.程序模块能否正确实现详细设计说明中的功能、性能和设计约束等要求
A.黑盒测试和白盒测试
B.一次性组装测试和增量式组装测试
C,内部测试、Alpha、Beta和验收测试
D.功能测试、性能测试、用户界面测试和安全性测试
答案C C
测试用例设计
黑盒测试
常用的黑盒测试技术有等价类划分、边界值分析、错误推测和因果图等。
等价类划分
等价类划分:将程序的输入域划分为若干等价类,然后从每个等价类中选取一个代表性数据作为测试用例。
- 等价类划分有两种不同的情况:有效等价类和无效等价类。
- 有效等价类:满足需求的数据集合。
- 无效等价类:不满足需求的数据集合。
- 等价类测试用例的设计原则:
- 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;
- 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
边界值分析
边界值分析:将每类的边界值作为测试用例,边界值一般为范围的两端值以及在此范围之外的与此范围间隔最小的两个值。也就是选取正好等于、刚好大于、刚好小于边界的值作为测试数据
- 上点:边界上的点(正好等于)
- 离点:距离上点最近的点(刚好大于、刚好小于)
- 内点:范围内的点(区间范围内的数据)
判断输入的数据是否小于-99或者大于99,如果小于-99或大于99给出错误提示
错误推测
错误推测:没有固定的方法,凭经验而言,来推测有可能产生问题的地方,作为测试用例进行测试。错误推测法的思想是根据经验列举出可能出现问题的清单,根据清单分享问题可能原因,推测发现缺陷。适合的场景:
- 时间紧任务量大时,根据之前项目类似经验找出易出错的模块重点测试。
- 时间宽裕通过该方法列出之前出现问题较多的模块再次复测。
因果图
因果图:由一个结果来反推原因的方法,具体结果具体分析,没有固定方法。
白盒测试
白盒测试常用的技术是逻辑覆盖、循环覆盖和基本路径测试。
逻辑覆盖
逻辑覆盖:考察用测试数据运行被测程序时对程序逻辑的覆盖程度,主要的逻辑覆盖标准有语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖6种。
- 语句覆盖。是指选择足够的测试数据,使被测试程序中的每条语句至少执行一次。语句覆盖对程序执行逻辑的覆盖很低,因此一般认为它是很弱的逻辑覆盖。
- 判定覆盖。是指设计足够的测试用例,使得被测程序中的每个判定表达式条件的真假分支都要覆盖一次,因此判定覆盖也称为分支覆盖。判定覆盖要比语句覆盖更强一些。
- 条件覆盖。是指构造一组测试用例,使得每一判定语句中每个逻辑条件的各种可能的值至少满足一次。
- 判定/条件覆盖。是指设计足够的测试用例,使得判定中每个条件的所有可能取值(真/假)至少出现一次,并使每个判定本身的判定结果(真/假)也至少出现一次。
- 条件组合覆盖。是指设计足够的测试用例,使得每个判定中条件的各种可能值的组合都至少出现一次。满足条件组合覆盖的测试用例是一定满足判定覆盖、条件覆盖和判定/条件覆盖的。
- 路径覆盖。是指覆盖被测试程序中所有可能的路径。
循环覆盖
循环覆盖:执行足够的测试用例,使得循环中的每个条件都得到验证。
基本路径测试法
基本路径测试法:是在程序控制流图的基础上通过分析控制流图的环路复杂性,导出基本可执行路径集合,从而设计测试用例。设计出的测试用例要保证在测试中程序的每一条独立路径都执行过,即程序中的每条可执行语句至少执行一次。此外,所有条件语句的真值状态和假值状态都测试过。路径测试的起点是程序控制流图。程序控制流图中的结点代表包含一个或多个无分支的语句序列,边代表控制流。
练习题
软件测试一般分为两个大类:动态测试和静态测试。前者通过运行程序发现错误,包括()等方法;后者采用人工和计算机辅助静态分析的手段对程序进行检测,包括()等方法。
A.边界值分析、逻辑覆盖、基本路径
B.桌面检查、逻辑覆盖、错误推测
C.桌面检查、代码审查、代码走查
D.错误推测、代码审查、基本路径
A.边界值分析、逻辑覆盖基本路径
B.桌面检查、逻辑覆盖、错误推测
C.桌面检查、代码审查、代码走查
D.错误推测、代码审查、基本路径
答案A C
针对月收入小于等于3500元免征个人所得税的需求,现分别输入3499,3500和3501进行测试,则采用的测试方法()
A,判定覆盖
B,边界值分析
C.路径覆盖
D.因果图
答案B
白盒测试技术的各种覆盖方法中,()具有最弱的错误发现能力。
A.判定覆盖
B.语句覆盖
C.条件覆盖
D.路径覆盖
答案B
调试
- 测试是发现错误,调试是根据测试时所发现的错误找出原因和具体的位置,进行改正。
- 调试需要确定错误的准确位置,确定问题的原因并设法改正;改正后要进行回归测试。
– 调试的方法有:试探法、回溯法、原因排除法(对分查找法、归纳法、演绎法)。- 试探法:调试人员分析错误的症状,猜测问题所在的位置,利用在程序中设置输出语句,分析寄存器、存储器的内容等手段获得错误的线索,一步步地试探和分析出错误所在。这种方法效率很低,适合于结构比较简单的程序
- 回溯法:从发现错误症状的位置开始,人工沿着程序的控制流程往回跟踪代码,直到找出错误根源为止。这种方法适合于小型程序,对于大规模程序,由于其需要回溯的路径太多而变得不可操作。
- 对分查找法:这种方法主要用来缩小错误的范围。
- 归纳法:就是从测试所暴瑶的问题出发,收集所有正确或不正确的数据,分析它们之间的关系,提出假想的错误原因,用这些数据来证明或反驳,从而查出错误所在。
- 演绎法:演绎法根据测试结果,列出所有可能的错误原因;分析已有的数据,排除不可能和彼此矛盾的原因;对其余的原因,选择可能性最大的,利用已有的数据完善该假设,使假设更具体:用假设来解释所有的原始测试结果,如果能解释这一切,则假设得以证实,也就找出错误,否则,要么是假设不完备或不成立,要么有多个错误同时存在,需要重新分析,提出新的假设,直到发现错误为止。
软件度量
- 软件的两种属性:外部属性指面向管理者和用户的属性,可直接测量,一般为性能指标。内部屈性指软件产品本身的压性,如可靠性,只能间接测量。
- McCabe度量法:又称为环路复杂度,假设有向图中有向边数为m,节点数为n,则此有向图的环路复杂度为m-n+2.
- 注意m和n点的含义不能混淆,可以用一个最简单的环路来做特殊值记忆此公式,另外,针对一个程序流程图,每一个分支变(连线)就有一条有向边,每一条语句(语句框)就是一个顶点。
练习题
根据McCabe度量法,以下程序图的复杂性度量值为()。
A.4
B.5
C.6
D.7
答案A
根据公式V(G)=m-n+2p,其中m、n和p分别表示图G中的弧的个数、顶点的个数和强联通分量数。根据上述公式可得,右图的复杂性为9-7+2=4