软件测试

臧艳辉

目录

  • 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

第一章  测试中缺陷的识别与描述

简介

在第一章中已讲了软件测试的目的,其中一个软件测试的目的就是要发现其存在的问题并解决它,保证软件的质量,本章就重点讲软件缺陷的相关概念、识别和描述缺陷的方法等。通过本章的学习可以了解到什么是软件缺陷,为什么会出现软件缺陷,如何去识别项目中的缺陷以及该怎样描述一个缺陷,对软件缺陷的认识和了解从本章开始。

3.1  初识软件缺陷

3.1.1  软件缺陷是什么

软件问题在软件工程或软件测试中都被称为软件缺陷或软件故障。在不引起误解的情况下,不管软件存在问题的规模和危害的大小,由于都会产生软件使用上的各种障碍,所以将这些问题统称为软件缺陷。

对于软件存在的各种问题,都用“软件缺陷”这个词,在英文中人们喜欢用一个不贴切但已经专用的词“缺陷(臭虫)”,实际和“缺陷(缺陷)”词相近的词还有很多,如:

缺点(Defect                    偏差(Variance

异常(Anomy )                     失败(Failure)

问题(Problem                   矛盾(Inconsistency)

错误(Error                     毛病(Incident

但人们都习惯使用“软件缺陷(缺陷)”这个词,它含有一些偏差、谬误或错误的意思,更多地表现在功能上的失败(Failure)和实际需求的不一致,即矛盾(Inconsistency)。软件缺陷,即计算机系统或者程序中存在的任何一种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷、瑕疵。缺陷会导致软件产品在某种程度上不能满足用户的需要,在IEEE 1983 orIEEEstandard729 中对软件缺陷下了一个标准的定义。

1)从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题。

2)从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。软件缺陷就是软件产品中所存在的问题,最终表现为用户所需没有完全实现,没有满足用户的需求。

3.1.2  为什么会出现软件缺陷

通过软件测试可以发现软件产品中的缺陷,那么缺陷是怎么产生的呢?软件程序写完后都要进行测试,因为没有人能保证它所写的程序是完全正确无误的。而即使经过了严密的测试,软件仍然会或多或少存在缺陷。我们所能够做的就是尽量减少缺陷,确定缺陷发生的原因并加以修正。

给软件带来缺陷的原因有很多,这里列举几点。

Ø  人员之间的沟通交流不够,交流上有误解或者根本不进行交流。

Ø  程序设计本身有错误。

Ø  软件复杂性。

Ø  需求不断变化。

Ø  工期短,任务重,压力大。

Ø  参与人员的过度自信。

Ø  文档不完善。

Ø  软件开发工具和系统软硬件的支持不完备。

以上列举了一些软件缺陷产生的主要原因。

3.1.3  测试中怎样识别软件缺陷

在一个软件中,把所有的软件问题都称为缺陷听起来也许非常简单,但是这样做并不能真正解决问题,现在缺陷(缺陷)这个词需要加以定义。首先需要了解一下一个辅助术语:产品说明书(product specification)。产品说明书有时又简称为说明(spec)或产品说明(product spec),是软件开发小组的一个协定,它对开发的产品进行定义,给出产品的细节、如何做、做什么、不能做什么。这种协定从简单的口头说明到正式的书面文档有多种形式。

在项目中,只有至少满足下列5个规则之一才称发生了一个软件缺陷(software 缺陷):

1)软件未实现产品说明书要求的功能。

2)软件出现了产品说明书指明不会出现的错误。

3)软件实现了产品说明书未提到的功能。

4)软件未达到产品说明书虽未明确指出但应该实现的目标。

5)软件难以理解、不易使用、运行缓慢或者——从测试员的角度看——最终用户认为不好。

为了更好地理解每一条规则我们以计算器为例进行说明。

计算器的产品说明书声称它能够准确无误地进行加、减、乘、除运算。当你拿到计算器后按下“+”键,结果什么反应也没有,根据第(1)条规则这是一个缺陷。假如得到错误答案根据第(1)条规则这同样是一个缺陷。

若产品说明书声称计算器永远不会崩溃、锁死或者停止反应。当你任意敲键盘,计算器停止接收输人,根据第(2)条规则这是一个缺陷。

若用计算器进行测试发现除了加、减、乘、除之外它还可以求平方根,说明书中从没提到这一功能,雄心勃勃的程序员只因为觉得这是一项了不起的共鞥而把它加入,这不是功能,根据第(3)条规则,这是软件缺陷。这些预料不到的操作,虽然有了更好,但会增加测试的工作,甚至可能带来更多的缺陷。

若在测试计算器时发现电池没电会导致计算不正确,但产品说明书未指出这个问题.根据第(4)条规则,这是个缺陷。

软件测试人员是第一个真正使用软件的人,否则,客户就是第一个使用软件产品的人。如果软件测试员发现某些地方不对劲无论什么原因都要认定为缺陷。在计算器例子中,如果觉得按键太小,“=”键布置的位置极其不好按,或在明亮光下显示屏难以看清,根据第(5)条规则这些都是缺陷。

注意:每一个使用过一些软件的人都会对软件的工作方式有自己的意见和想法,要编写令所有人都满意的软件是不可能的。作为软件测试人员,在运用第(5)条规则时应记住下面这一点:要全面、最重要的是要客观评价,并非所有的测试发现的缺陷都要进行修改。

3.1.4  修复软件缺陷的代价

在一开始介绍软件测试时,曾说测试人员要从需求分析时就介入进去,问题发现得越早越好。缺陷被发现之后,要尽快修复这些被发现的缺陷。为什么要这样做呢?原因很简单,错误并不只是在编程阶段产生,需求和设计阶段同样会产生错误。也许一开始,只是一个很小范围内的潜在错误,但随着产品开发工作的进行,小错误会扩散成大错误,为了修改后期的错误所需要的工作量要大得多。缺陷发现或解决得越迟,成本就越高。

Boehmsoftware Engineering Economics1981年)一书中写到:平均而言,如果在需求阶段修正1个错误的代价是l ,那么在设计阶段就是它的3~6倍,在编程阶段是它的10 倍,在内部测试阶段是它的20~40 倍,在外部测试阶段是它的30~70倍,而到了产品发布出去时,这个数字就是40~1000倍。修正错误的代价不是随着时间线性增长,而几乎是呈指数增长的。图3-1所示就是说明这样一个道理。

3-1 软件缺陷修复成本趋势图