软件测试

臧艳辉

目录

  • 1 走近软件测试
    • 1.1 走近软件测试
    • 1.2 一个软件测试工程师必备的专业技能和素质
    • 1.3 章节测验
  • 2 软件测试技术
    • 2.1 正确认识软件测试
    • 2.2 软件测试遵循的基本原则
    • 2.3 软件测试的分类
    • 2.4 软件测试的过程模型
    • 2.5 章节测验
  • 3 测试中缺陷的识别与描述
    • 3.1 初识软件缺陷
    • 3.2 全面解析软件缺陷
    • 3.3 有效的记录缺陷
    • 3.4 缺陷报告实例
    • 3.5 缺陷报告模板
  • 4 项目测试计划的制定
    • 4.1 一个项目完整的测试流程
    • 4.2 初识测试计划
    • 4.3 测试计划的基本机构和内容
    • 4.4 测试计划模板和案例
  • 5 初识软件测试用例
    • 5.1 什么是测试用例
    • 5.2 项目测试中设计测试用例的作用
    • 5.3 如何设计一个项目的测试用例
    • 5.4 在测试过程中测试用例怎样进行更新和维护
  • 6 使用等价类划分方法设计测试用例
    • 6.1 等价类划分法的基本思想
    • 6.2 进行等价类划分法的原则
    • 6.3 使用等价类划分法设计测试用例实例
  • 7 使用边界值分析法设计测试用例
    • 7.1 边界值分析法的基本思想
    • 7.2 如何确定边界
    • 7.3 测试知识储备
    • 7.4 使用边界值分析法设计测试用例实例
    • 7.5 项目中如何进行健壮性边界值测试
    • 7.6 等价类+边界值
    • 7.7 章节测试
  • 8 使用大纲法设计测试用例
    • 8.1 什么是大纲法
    • 8.2 项目中如何使用大纲法设计测试用例
  • 9 使用场景法设计测试用例
    • 9.1 什么是场景法
    • 9.2 项目中如何使用场景法设计测试用例
  • 10 因果图和决策表结合设计测试用例
    • 10.1 因果图法的介绍
    • 10.2 决策表的介绍
    • 10.3 项目中选用因果图法和决策表设计测试用例需考虑的问题
    • 10.4 使用因果图法和决策表设计测试用例
  • 11 功能测试
    • 11.1 什么是功能测试
    • 11.2 功能测试的主要内容及测试策略
    • 11.3 功能测试的方法汇总
    • 11.4 功能测试的经验及注意事项
  • 12 界面测试
    • 12.1 界面检查的通用原则
    • 12.2 具体的界面检查的举例
    • 12.3 设计界面测试用例
    • 12.4 界面测试标准总结
  • 13 软件的安装卸载测试
    • 13.1 软件的安装卸载测试
    • 13.2 软件的安装测试
    • 13.3 软件的运行测试
    • 13.4 软件的卸载的测试
  • 14 项目中如何使用进行有效的缺陷管理
    • 14.1 进行缺陷管理的目标是什么
    • 14.2 项目中缺陷管理的流程是怎样的
    • 14.3 缺陷的跟踪方法有哪些
  • 15 测试报告该如何撰写
    • 15.1 软件质量评估
    • 15.2 如何撰写测试报告
    • 15.3 如何写项目总结
    • 15.4 如何写个人测试总结
  • 16 集成测试
    • 16.1 初识集成测试
    • 16.2 集成测试方法
  • 17 白盒测试
    • 17.1 初识白盒测试
    • 17.2 白盒测试技术——逻辑驱动测试
    • 17.3 白盒测试技术——循环覆盖测试
    • 17.4 白盒测试技术——基本路径测
  • 18 软件测试技术及岗位需求介绍
    • 18.1 软件测试岗位需求
    • 18.2 软件测试技术介绍
    • 18.3 软件测试比赛内容
    • 18.4 软件测试岗位应聘简历撰写
功能测试的主要内容及测试策略
  • 1 电子教材
  • 2 PPT

11.2  功能性测试的主要内容及测试策略

11.2.1  功能性测试的主要内容

结合缺陷的正式定义,通常认为,功能测试的主要内容包括以下几个方面。

Ø 检验是否所有功能都能够实现,是否存在遗漏的功能。

Ø 检验是否所有功能都能正确实现,是否存在不正确的功能。

Ø 检验是否存在额外的功能,如快捷键等。

Ø 检验功能是否满足系统设计的隐含需求,如系统对意外情况的反应能力等。

Ø 检验系统能否正确接受输入,对异常输入是否能够予以提示,是否具有一定的容错能力。

Ø 检验系统能否正确输出结果,输出格式和数据是否正确,是否可以正确保存和读取。

Ø 检验系统状态是否能够随业务流程变化而变化,并保持稳定。

11.2.2  功能性测试的测试策略

不同的应用系统,功能测试的内容差异很大,我们可将被测系统分为以数据为中心的系统和以活动序列为中心的系统,前者包括各种管理信息系统,后者包括大部分基于Web的应用系统。下面我们分别讨论这两类系统的基本特点和功能测试的侧重。

1. 以数据为中心的系统

以数据为中心的系统核心就是数据的处理。我们可以从两个方面考虑展开功能测试。

1)从实体关系模型来考虑

从高层来考虑功能测试,需建立系统的实体关系模型。实体关系模型中明确地描述了系统的所有实体,各实体之问的对应关系和逻辑关系。针对不同的实体关系和逻辑关系,应采用不同策略来设计测试用例。

Ø 1l:此时仅需一类测试用例,创建l1的对象实例即可。

Ø 1对多:结合边界值和等价类测试,应分别创建l1121对多这三类对象实例。

Ø 多对l:与1对多相似,应分别创建1121,多对l这三类对象实例。

Ø 多对多:这种情况相对复杂,可按照1对多、多对l 、多对多这三种情况分别创建对象实例。

设计测试用例的过程中,还应兼顾满足实体之间的逻辑限定条件。

2)从对数据的操作来考虑

我们也可以从系统主要涉及的四类针对数据的操作来设计测试用例。这四类操作为:增加、删除、查找和修改。同样地,针对不同操作,也应采用不同的设计思想。

1)增加

应测试增加操作是否能够正常实现,并应测试其他一些特殊的方面,举例如下。

Ø 针对需要唯一命名却输入重复的名字或 ID 的情况,检查系统是否会报错,特别注意添加名字和ID时系统是否区分大小写,或者系统能否正确处理输入内容的前后空格。

Ø 系统是否针对所有必填项进行处理,例如用星号对必填项予以提示。

Ø 增加成功后能否方便地看到增加的结果。

Ø 增加一项或一组数据是否会对其他数据产生影响,若产生影响,是否为正确的影响。

2)删除

应测试针对一项或一组对象的删除操作能否正常实现.并应针对特殊情况进行测试,举例如下。

Ø 对于不存在的对象,或不选中任何对象,系统能否正确处理。

Ø 系统删除之前是否有相应提示。

Ø 删除一项或一组数据是否会对其他数据产生影响,若产生影响,是否为正确的影响。

3)查找

应测试系统能否支持各种查找操作,包括简单查询和高级查询,具体策略如

Ø 输入系统存在和不存在的内容,检查系统查找的结果是否正确。

Ø 对于可以输入多个查找条件的地方,同时添加合理和不合理的条件,检查系统能否正确处理。

Ø 能否将查找结果与修改、删除等操作方便地结合起来。

4)修改

修改主要关注一些特殊的点,包括如下。

Ø 能否修改不存在的对象。

Ø 通过查看来确定修改后带出的信息与修改的信息保持一致,即确保对象得到成功修改。

Ø 应检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型。

Ø 修改时将不允许重名的项改为已存在的内容,检查系统能否及时报错,并注意系统不应报和自己重名的错。

2. 以活动序列为中心的系统

以活动序列为中心的系统核心就是活动序列,包括系统输入、系统输出、系统状态以及系统事件(触发状态变迁的事件)。我们可以结合这些元素来设计测试用例。

1)基于系统输入的测试用例设计

系统测试与集成测试的一个显著区别在于系统测试是涉及硬件设备(或称端口)的,而集成测试主要关注软件本身,其接口不涉及硬件。基于系统输入设计测试用例应考虑对所有输入的覆盖,可以考虑以下问题.

Ø 是否覆盖所有可以接受输入的硬件设备。

Ø 是否覆盖所有输入条件。

Ø 是否覆盖输入条件的边界取值(采用边界值测试的思想)。

Ø 是否覆盖输入条件的典型取值(采用等价类划分的思想)。

Ø 是否覆盖所有不合理的输入。即碰到任意一种无效或不合理输入的时候,系统能否给予合理的反馈(当然,这个条件一般是不可能完全覆盖的)。

2)基于系统输出的测试用例设计类似于输入情况,针对系统输出设计测试用例时,也可从以上方面来考虑,只是测试输出时,应该不涉及不合理的输出。

3)基于系统状态的测试用例设计

系统可能处于多种状态,对于面向对象的系统更是如此,基于系统状态设计功能测试用例时,往往需要借助高层的设计模型,例如,有限状态机直接描述系统的状态,根据系统上业务的分析结果将得到业务流程图,图中每个节点都可以看做是状态。状态的变迁就像程序的执行,会形成不同的路径。在系统测试的层面上,我们可以借鉴白盒测试中的覆盖指标来展开功能测试。对于一个系统状态图而言,可选的覆盖指标如下。

Ø 语句覆盖(即状态覆盖)。状态图中的每个状态对应一条“语句”,设计的测试用例至少应覆盖到每个状态。

Ø 判定覆盖(即状态变换的覆盖)。状态图中随着触发事件的发生,引发状态的变迁,对应“语句”的执行,功能测试用例应覆盖到每次状态的变迁。事实上,只有触发事件才能导致状态变迁,对状态变换的覆盖将访问到每个触发事件,因此,该指标也等同于触发事件的覆盖。

Ø 路径覆盖。从同一个初始状态开始,在不同的事件触发组合条件下,状态的变迁将形成各种路径,最终到达终止状态,在系统层面上,最高也是最严格的覆盖指标就是要达到所有可行路径的覆盖。正如白盒测试中所分析的那样,这个指标往往是很难达到的。

4)基于系统事件的测试用例设计

基于系统事件设计测试用例是与系统状态紧密联系的,我们建议结合系统状态的覆盖展开对事件的覆盖测试。注意,在功能测试时,状态图与程序分析中的控制流图(或程序图)不同,后者的每个节点是一条语句,它不可分解,而系统状态图中的每个节点对应一个状态,它是可以分解的。状态的分解导致状态图产生层次结构,也进一步导致路径数量的爆炸。解决的方法是采用自底向上的测试策略,从最底层的状态图开始,逐层向上层推进。