文章目录
- 1. 软件概述
-
- 1.1 软件生命周期
- 1.2 软件开发模型
-
- 1.2.1 瀑布模型
- 1.2.2 快速原型模型
- 1.2.3 迭代模型(增量模型或演化模型)
- 1.2.4 螺旋模型
- 1.2.5 敏捷模型
- 1.3 软件质量概述
-
- 1.3.1 软件质量的概念
- 1.3.2 软件质量模型
- 1.3.3 影响软件质量的因素
- 2. 软件缺陷管理
-
- 2.1 软件缺陷产生的原因
- 2.2 软件缺陷的分类
- 2.3 软件缺陷的处理流程
- 2.4 常见的软件缺陷管理工具
-
- 2.4.1 Bugzilla
- 2.4.2 禅道
- 2.4.3 Jira(Java语言开发)
- 3. 软件测试概述
-
- 3.1 软件测试的目的
- 3.2 软件测试的分类
-
- 3.2.1 按照测试阶段分类
- 3.2.2 按照测试技术分类(黑盒测试、白盒测试)
- 3.3.3 按照软件质量特性分类
- 3.3.4 按照自动化程度分类
- 3.3.5 按照测试类型分类
- 3.3.6 其他分类
- 4. 软件测试与软件开发
-
- 4.1 软件测试与软件开发的关系
- 4.2 常见的软件测试模型
-
- 4.2.1 V模型
- 4.2.2 W模型
- 5. 软件测试的原则
- 6. 黑盒测试方法
-
- 6.1 等价类划分法
-
- 6.1.1 等价类划分法概述
- 6.1.2 等价类的分类(有效等价类、无效等价类)
- 6.1.3 划分等价类的原则
- 6.1.4 设计测试用例
- 6.1.5 实例:三角形问题的等价类划分
- 6.2 边界值分析法
-
- 6.2.1 边界值分析法概述
- 6.2.2 边界值选取的规则
- 6.2.3 实例:三角形问题的边界值分析
- 6.3 因果图与决策表法
-
- 6.3.1 因果图设计法
- 6.3.2 因果图法设计测试用例的步骤
- 6.3.3 决策表
- 6.3.4 实例:三角形决策表
- 6.4 正交实验设计法
- 7. 白盒测试方法(这里只介绍逻辑覆盖法)
-
- 7.0 说明:后续逻辑覆盖法的示例都针对于下面这段程序
- 7.1 语句覆盖
- 7.2 判定覆盖(分支覆盖)
- 7.3 条件覆盖
- 7.4 判定-条件覆盖(分支-条件覆盖)
- 7.5 条件组合覆盖
- 7.6 实例:三角形逻辑覆盖问题
- 8. 性能测试
-
- 8.1 性能测试概述
- 8.2 性能测试的指标
-
- 8.2.1 响应时间
- 8.2.2 吞吐量
- 8.2.3 并发用户数
- 8.2.4 TPS(Transaction per Second)
- 8.2.5 点击率(Hits per Second)
- 8.2.6 资源利用率
- 8.3 性能测试的种类
-
- 8.3.1 负载测试
- 8.3.2 压力测试
- 8.3.3 峰值测试(压力测试的一种)
- 8.3.4 并发测试
- 8.3.5 配置测试
- 8.3.6 可靠性测试
- 8.3.7 容量测试
1. 软件概述
1.1 软件生命周期
软件和其他产品一样,都有一个从“出生”到“消亡”的过程,这个过程称为软件的生命周期。
通常,可将软件生命周期划分为6个阶段:
- 在瀑布模型中,软件开发的各项活动严格按照这条线进行,只有当一个阶段任务完成之后才能开始下一个阶段。
- 瀑布模型是严格按照线性方式进行的,无法适应用户需求变更,用户只能等到最后才能看到开发成果,增加了开发风险。
- 使用瀑布模型开发软件时,如果早期犯的错误在项目完成后才发现,此时再修改原来的错误需要付出巨大的代价。瀑布模型要求每一个阶段必须有结果产出,这就势必增加了文档的数量,使软件开发的工作量变大。
对于现代软件来说,软件开发各阶段之间的关系大部分不会是线性的,很难使用瀑布模型开发软件,因此瀑布模型不再适合现代软件开发,已经被逐渐废弃。
1.2.2 快速原型模型
迭代模型可以很好地适应客户需求变更,它逐个组件地交付产品,客户可以经常看到产品,如果某个组件没有满足客户需求,则只需要更改这一个组件,降低了软件开发的成本与风险。
1.2.4 螺旋模型
螺旋模型融合了瀑布模型、快速原型模型,它最大的特点是引入了其他模型所忽略的风险分析,如果项目不能排除重大风险,就停止项目从而减小损失。这种模型比较适合开发复杂的大型软件。
- 功能性:在指定条件下,软件满足用户显式需求和隐式需求的能力。
- 可靠性:在指定条件下使用时,软件产品维持规定的性能级别的能力。
- 可使用性:在指定条件下,软件产品被使用、理解、学习的能力。
- 效率:在指定条件下,相对于所有资源的数量,软件产品可提供适当性能的能力。
- 可维护性:指软件产品被修改的能力。修改包括修正、优化和功能规格变更的说明。
- 可移植性:指软件产品从一个环境迁移到另一个环境的能力。
1.3.3 影响软件质量的因素
- 软件开发缺乏规范性文件指导:软件开发缺乏规范性文件指导会导致团队成员开发随意,这会影响软件质量。而且一旦最后软件出现质量问题,也很难定责,导致后期维护困难。
- 软件开发人员问题:软件是由人开发出来的,因此个人的意识对产品的影响非常大。除了个人技术水平限制,开发人员问题还包括人员流动,新来的成员可能会继承上一任的产品接着开发下去,两个人的思维意识、技术水平等都会不同,导致软件开发前后不一致,进而影响软件质量。
- 缺乏软件质量控制管理:如果没有一个量化的指标去度量一款软件的质量,过多的关注开发成本和进度,则势必会影响软件的质量。
2. 软件缺陷管理
2.1 软件缺陷产生的原因
软件缺陷就是通常所说的Bug,它是指软件中(包括程序和文档)存在的影响软件正常运行的问题。
软件缺陷产生的原因主要有以下几点:
- 需求不明确。软件需求不清晰或者开发人员对需求理解不明确,导致软件在设计时偏离客户的需求目标,造成软件功能或特征上的缺陷。此外,在开发过程中,客户频繁变更需求也会影响软件最终的质量。
- 软件结构复杂。如果软件系统结构比较复杂,很难设计出一个具有很好层次结构或组件结构的框架,这就会导致软件在开发、扩充、系统维护上的困难。即使能够设计出一个很好的架构,复杂的系统在实现时也会隐藏着相互作用的难题,而导致隐藏的软件缺陷。
- 编码问题。在软件开发过程中,程序员水平参差不齐,再加上开发过程中缺乏有效的沟通和监督,问题累积越来越多,如果不能逐一解决这些问题,会导致最终软件中存在很多缺陷。
- 项目期限短。现在大部分软件产品开发周期都很短,开发团队要在有限的时间内完成软件产品的开发,压力非常大,因此开发人员往往是在疲劳、压力大、受到干扰的状态下开发软件,这样的状态下,开发人员对待软件问题的态度是“不严重就不解决”。
- 使用新技术。现代 会,每种技术发展都日新月异。使用新技术进行软件开发时,如果新技术本身存在不足或开发人员对新技术掌握不精,也会影响软件产品的开发过程,导致软件存在缺陷。
2.2 软件缺陷的分类
根据不同的划分标准,可以分为不同的缺陷类型,具体如下表所示:
2.4 常见的软件缺陷管理工具
软件缺陷管理是软件开发项目中一个很重要的环节,选择一个好的软件缺陷管理工具可以有效地提高软件项目的进展。软件缺陷管理工具有很多,免费的、收费的应有尽有,下面介绍几个比较常用的软件缺陷管理工具。
2.4.1 Bugzilla
Bugzilla是Mozilla公司提供的一款免费的软件缺陷管理工具。Bugzilla能够建立一个完整的缺陷跟踪体系,包括缺陷跟踪、记录、缺陷 告、处理解决情况等。
使用Bugzilla管理软件缺陷时,测试人员可以在Bugzilla上提交缺陷 告,Bugzilla会将缺陷转给相应的开发者,开发者可以使用Bugzilla做一个工作表,标明要做的事情的优先级、时间安排和跟踪记录。
2.4.2 禅道
禅道是一款优秀的国产项目管理软件,它集产品管理、项目管理、质量管理、缺陷管理、文档管理、组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程。
禅道分为专业和开源两个版本,专业版是收费软件,开源版是免费软件,对于日常的项目管理,开源版本已经足够使用。
2.4.3 Jira(Java语言开发)
Jira是Atlassian公司开发的项目与实务跟踪工具,被广泛用于缺陷跟踪、客户实务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。Jira配置灵活、功能全面、部署简单、扩展丰富、易用性好,是目前比较流行的基于Java架构的管理工具。
Jira软件有两个认可度很高的特色:
- 第1个是Atlassian公司对该开源项目免费提供缺陷跟踪服务。
- 第2个是用户在购买Jira软件时源代码也会被购置进来,方便做二次开发。
3. 软件测试概述
3.1 软件测试的目的
结合软件开发、软件测试与客户需求可以将软件测试的目的归结为以下几点:
- 对于软件开发来说,软件测试通过找到的问题缺陷帮助开发人员找到开发过程中存在的问题,包括软件开发的模式、工具、技术等方面存在的问题与不足,预防下次缺陷的产生。
- 对于软件测试来说,使用最少的人力、物力、时间等找到软件中隐藏的缺陷,保证软件的质量,也为以后软件测试积累丰富的经验。
- 对于客户需求来说,软件测试能够检验软件是否符合客户需求,对软件质量进行评估和度量,为客户评审软件提供有力的依据。
3.2 软件测试的分类
3.2.1 按照测试阶段分类
按照测试阶段可以将软件测试分为单元测试、冒烟测试、集成测试、系统测试与验收测试。这种分类方式与软件开发过程相契合,是为了检验软件开发各个阶段是否符合要求。
- 单元测试是软件开发的第一步测试,目的是为了验证软件单元是否符合软件需求与设计。单元测试大多是开发人员进行的自测。
- 冒烟测试是对新构建版本软件进行的最基本测试。这种测试重点验证的是程序的主要功能,而不会对具体功能进行深入测试。
- 集成测试是冒烟测试之后进行的测试,它是将已经测试过的软件单元组合在一起测试它们之间的接口,用于验证软件是否满足设计需求。
- 系统测试是将经过测试的软件在实际环境中运行,并与其他系统的成分(如数据库、硬件和操作人员等)组合在一起进行的测试。
- 验收测试主要是对软件产品说明进行验证,逐行逐字地按照说明书的描述对软件产品进行测试,确保其符合客户的各项要求。
3.2.2 按照测试技术分类(黑盒测试、白盒测试)
按照使用的测试技术可以将软件测试分为黑盒测试与白盒测试。
黑盒测试:
黑盒测试就是把软件(程序)当作一个有输入与输出的黑匣子,它把程序当作一个输入域到输出域的映射,只要输入的数据能输出预期的结果即可,不必关心程序内部是怎么样实现的。
3.3.3 按照软件质量特性分类
按照软件质量特性可以将软件测试分为功能测试与性能测试。
功能测试:
功能测试就是测试软件的功能是否满足客户的需求,包括准确性、易用性、适合性、互操作性等。
性能测试:
性能测试就是测试软件的性能是否满足客户的需求,性能测试包括负载测试、压力测试、兼容性测试、可移植性测试和健壮性测试等。
3.3.4 按照自动化程度分类
按照自动化程度可以将软件测试分为手工测试与自动化测试。
手工测试:
手工测试是测试人员一条一条地执行代码完成测试工作。手工测试比较耗时费力,而且测试人员如果是在疲惫状态下,则很难保证测试的效果。
自动化测试:
自动化测试是借助脚本、自动化测试工具等完成相应的测试工作,它也需要人工的参与,但是它可以将要执行的测试代码或流程写成脚本,执行脚本完成整个测试工作。
3.3.5 按照测试类型分类
软件测试类型有多种,包括界面类测试、功能测试、性能测试、安全性测试、文档测试等,其中功能测试与性能测试前面已经介绍,下面主要介绍其他几种测试:
界面类测试:
界面类测试是验证软件界面是否符合客户需求,包括界面布局是否美观、按钮是否齐全等。
安全性测试:
安全性测试是测试软件在没有授权的内部或外部用户的攻击或恶意破坏时如何进行处理,是否能保证软件与数据的安全。
文档测试:
文档测试以需求分析、软件设计、用户手册、安装手册为主,主要验证文档说明与实际软件之间是否存在差异。
3.3.6 其他分类
还有一些软件测试无法具体归到哪一类,但在测试行业中也会经常进行这些测试,如α测试(Alpha测试)、β测试(Beta测试)、回归测试等,具体介绍如下:
α测试(Alpha测试):
α测试是指对软件最初版本进行测试。软件最初版本一般不对外发布,在上线之前,由开发人员和测试人员或者用户协助进行测试。测试人员记录使用过程中出现的错误与问题,整个测试过程是可控的。
β测试(Beta测试):
β测试是指对上线之后的软件版本进行测试,此时软件已上线发布,但发布的版本中可能会存在较轻微的Bug,由用户在使用过程中发现错误与问题并进行记录,然后反馈给开发人员进行修复。
说明:根据软件开发版本周期划分软件测试
- 根据软件开发版本周期进行划分,可以将软件测试分为预览版本Preview测试、内部测试版本Alpha测试、公测版本Beta测试、候选版本Release测试。在这些测试完成之后产品就可以正式发布上线。
回归测试:
当测试人员发现缺陷以后,会将缺陷提交给开发人员,开发人员对程序进行修改,修改之后,测试人员会对修改后的程序重新进行测试,确认原有的缺陷已经消除并且没有引入新的缺陷,这个重新测试的过程就叫作回归测试。回归测试是软件测试工作中非常重要的一部分,软件开发的各个阶段都会进行多次回归测试。
随机测试:
随机测试是没有测试用例、检查列表、脚本或指令的测试,它主要是根据测试人员的经验对软件进行功能和性能抽查。随机测试是根据测试用例说明书执行测试用例的重要补充手段,是保证测试覆盖完整性的有效方式和过程。
4. 软件测试与软件开发
软件开发与软件测试都是软件项目中非常重要的组成部分,软件开发是生产制造软件产品,软件测试是检验软件产品是否合格,两者密切合作才能保证软件产品的质量。
4.1 软件测试与软件开发的关系
软件测试贯穿软件项目的整个过程,但它的实施过程与软件开发并不相同。软件开发是自顶向下、逐步细化的过程,软件计划阶段定义软件作用域,软件需求分析阶段建立软件信息域、功能和性能需求等,软件设计阶段选定编程语言、设计模块接口等;软件测试与软件开发过程相反,它是自底向上、逐步集成的过程,首先进行单元测试,排除模块内部逻辑与功能上的缺陷,然后按照软件设计需求将模块集成并进行集成测试,检测子系统或系统结构上的错误,最后运行完整的系统,进行系统测试,检验其是否满足软件需求。
软件测试在项目各个阶段的作用如下所示。
- 项目规划阶段:负责从单元测试到系统测试的整个测试阶段的监控。
- 需求分析阶段:确定测试需求分析,即确定在项目中需要测试什么,同时制订系统测试计划。
- 概要设计与详细设计阶段:制订单元测试计划和集成测试计划。
- 编码阶段:开发相应的测试代码和测试脚本。
- 测试阶段:实施测试并提交相应的测试 告。
软件测试与软件开发的关系可用下图表示:
4.2.2 W模型
W模型是由V模型演变而来的,它强调测试应伴随整个软件生命周期。其实W模型是一个双V模型,软件开发是一个V模型,而软件测试是与开发同步进行的另一个V模型,如图所示。
6.1 等价类划分法
等价类划分法是一种常用的黑盒测试方法,它主张从大量的数据中选择一部分数据用于测试,即尽可能使用最少的测试用例覆盖最多的数据,以发现更多的软件缺陷。
6.1.1 等价类划分法概述
一个程序可以有多个输入,等价类划分就是将这些输入数据按照输入需求进行分类,将它们划分为若干个子集,这些子集即为等价类,在每个等价类中选择有代表性的数据设计测试用例。这种方法类似于学生站队,男生站左边,女生站右边,老师站中间,这样就把师生群体划分成了3个等价类。
使用等价类划分法测试程序需要经过划分等价类和设计测试用例2个步骤
6.1.2 等价类的分类(有效等价类、无效等价类)
等价类可分为有效等价类与无效等价类,其含义如下所示。
- 有效等价类:有效等价类就是有效值的集合,它们是符合程序要求、合理且有意义的输入数据。
- 无效等价类:无效等价类就是无效值的集合,它们是不符合程序要求、不合理或无意义的输入数据。
6.1.3 划分等价类的原则
一般在划分等价类时需要遵守以下原则:
- 如果程序要求输入值是一个有限区间的值,则可以将输入数据划分为1个有效等价类和2个无效等价类,有效等价类为指定的取值区间,两个无效等价类分别为有限区间两边的值。例如,某程序要求输入值x的范围为[1,100],则有效等价类为1≤x≤100,无效等价类为x<1和x>100。
- 如果程序要求输入的值是一个“必须成立”的情况,则可以将输入数据划分为1个有效等价类和1个无效等价类。例如,某程序要求密码正确,则正确的密码为有效等价类,错误的密码为无效等价类。
- 如果程序要求输入数据是一组可能的值,或者要求输入值必须符合某个条件,则可以将输入数据划分为1个有效等价类和1个无效等价类。例如,某程序要求输入数据必须是以数字开头的字符串,则以数字开头的字符串是有效等价类,不是以数字开头的字符串是无效等价类。
- 如果在某一个等价类中,每个输入数据在程序中的处理方式都不相同,则应将该等价类划分成更小的等价类,并建立等价表。
6.1.4 设计测试用例
确立了等价类之后,需要建立等价类表列出所有划分出的等价类,用以设计测试用例。基于等价类划分法的测试用例设计步骤如下所示。
- 确定测试对象,保证非测试对象的正确性。
- 为每个等价类规定一个唯一编 。
- 设计有效等价类的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,直到测试用例覆盖了所有的有效等价类。
- 设计无效等价类的测试用例,使其覆盖所有的无效等价类。
6.1.5 实例:三角形问题的等价类划分
三角形问题是测试中广泛使用的一个经典案例,它要求输入3个正数a、b、c作为三角形的3条边,判断这3个数构成的是一般三角形、等边三角形、等腰三角形,还是无法构成三角形。如果使用等价类划分法设计三角形程序的测试用例,首先需要将所有输入数据划分为不同的等价类。
对该案例进行分析,程序要求输入3个数,并且是正数,在输入3个正数的基础上判断这3个数能否构成三角形,如果构成三角形再判断它构成的三角形是一般三角形、等腰三角形还是等边三角形,如此可以按照下列步骤将输入情况划分为不同的等价类。
(1)判断是否输入了3个数,可以将输入情况划分成1个有效等价类,4个无效等价类,具体如下:
- ① 有效等价类:输入3个数。
- ② 无效等价类:输入0个数。
- ③ 无效等价类:只输入1个数。
- ④ 无效等价类:只输入2个数。
- ⑤ 无效等价类:输入超过3个数。
(2)在输入3个数的基础上,判断3个数是否是正数,可以将输入情况划分为1个有效等价类,3个无效等价类,具体如下。
- ① 有效等价类:3个数都是正数。
- ② 无效等价类:有1个数小于等于0。
- ③ 无效等价类:有2个数小于等于0。
- ④ 无效等价类:3个数都小于等于0。
(3)在输入3个正数的基础上,判断3个数是否能构成三角形,可以将输入情况划分为1个有效等价类和1个无效等价类,具体如下。
- ① 有效等价类:任意2个数之和大于第3个数,a+b>c、a+c>b、b+c>a。
- ② 无效等价类:其中2个数之和小于等于第3个数。
(4)在3个数构成三角形的基础上,判断3个数是否能构成等腰三角形,可以将输入情况划分成1个有效等价类和1个无效等价类,具体如下。
- ① 有效等价类:其中有2个数相等,。
- ② 无效等价类:3个数均不相等。
(5)在构成等腰三角形的基础上,判断这3个数能否构成等边三角形,可以将输入情况划分为1个有效等价类和1个无效等价类,具体如下。
- ① 有效等价类:三个数相等,a=b=c。
- ② 无效等价类:三个数不相等。
上述分析一共将三角形输入划分为了15个等价类,给这些等价类确定编 ,并建立等价类表,如下表所示:
如果软件要求输入或输出是一组有序集合,如数组、链表等,则可选取第一个和最后一个元素作为测试数据。如果被测试程序中有循环,则可选取第0次、第1次与最后两次循环作为测试数据。除了上述讲解到的边界值选取之外,软件还有其他边界值的选取情况,在对软件进行测试时,要仔细分析软件规格需求,找出其可能的边界条件。
6.2.3 实例:三角形问题的边界值分析
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!