@[TOC]软件测试基础
第一章 软件测试基础
1.1.1软件生命周期
六个阶段:
问题定义
需求分析
软件设计
软件开发:
软件测试
软件维护
淘汰
1.1.2软件开发模型
1.瀑布模型
计划需求分析 -----软件设计阶段
软件设计编码测试 -------软件开发阶段
运行维护 ------软件维护阶段
优点:检查点清晰,分工明确,有利于大型软件开发人员的组织管理及工具的使用与研究,可以提高开发的效率
缺点:严格按照现行执行,增加了开发风险;要求必须有产出结果,增加了开发工作量
对于现代软件,各阶段之间的关系很少是线性的,瀑布模型已经不适合现代软件开发,被淘汰了
2、快速原型模型
优点:克服了需求不明确带来的风险,适用于不能预先确定需求的软件项目。
缺点:原型设计较难,不利于开发人员对产品的扩展
3、迭代模型
优点:实行客户需求变更;降低了开发成本的风险
缺点:增加了集成失败风险;容易退化为“边做边改”模式,失去对整个项目的控制。
4、螺旋模型
制定计划----风险分析----客户评估----实施工程
综合了快速原型模型
优点:强调了风险分析,有助于将软件质量融入开发中;小分段构建大型软件,易于计算成本;客户彩玉,保证项目可控
缺点:构建过程太繁琐,不适合小型项目
5、敏捷模型
以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发
特点:
1**.迭代**,项目被拆分成多个子项目,迭代完成,每个迭代都要经过测试。
2.快速响应需求变更,在修改过程中,软件一直处于可用状态
3.开发未动测试先行
4.注重人的作用
5.不断对产品进行细微、渐进式的改进,每次改进一小部分,如果可行在逐步扩大改进范围
1.1.3软件质量概述
从软件质量的定义,可将软件质量分为三个层次:
满足需求规定:软件产品符合开发者明确定义的目标,并且能可靠运行。
满足用户需求:软件产品的需求是由用户产生的,软件最终的目的就是满足用户需求,解决用户的实际问题
满足用户隐式需求:软件如果满足用户隐式需求,及潜在的可能需要在将来开发的功能,将会极大的提升用户满意度,这就意味着软件质量更高
功能性,可靠性,可食用性,效率,可维护性,可以移植性
影响软件质量的因素:
1、需求模糊
2、软件开发缺乏规范性文件指导
3、软件开发人员问题
4、缺乏软件质量控制管理
1.2.2软件缺陷产生的原因
-
需求不明确
-
软件结构复杂
-
开发人员水平有限
-
项目期限短
-
使用新技术
1.2.2软件缺陷的分类
1.2.3软件缺陷的处理流程
(1)提交:测试人员发现缺陷之后,将缺陷提交给测试组长。
(2)分配:测试组长接收到测试人员提交的缺陷之后,将其移交给开发人员。
(3)确认:开发人员接收到移交的缺陷之后,会与团队甚至测试人员一起商议,确定该缺陷是否是一个缺陷。
(4)拒绝/延期:如果经过商议之后,缺陷不是一个真正的缺陷则拒绝处理,关闭缺陷;如果经过商议之后,确定其是一个真正的缺陷,则可以根据缺陷的严重程度或优先级等选择立即处理或延期处理。
(5)处理:开发人员修改缺陷。
(6)复测:开发人员修改好缺陷之后,测试人员重新进行测试(复测),检测缺陷是否确实已经修改。如果未被正确修改,则重新提交缺陷。
(7)关闭:测试人员重新测试之后,如果缺陷已经被正确修改,则将缺陷关闭,整个缺陷处理完成。
测试人员在提交软件测试时会按照公司规定的模板将缺陷的详细情况记录下来生成缺陷报告,每个公司的缺陷报告模板并不相同,但一般都会包括缺陷的标号,类型,严重程度,优先级,测试环境等,有时还会有测试人员的建议。
编写缺陷报告注意事项:
-
每个缺陷都有一个唯一的编号
-
缺陷要有重现步骤
-
一个缺陷生成一份报告
-
缺陷报告要整洁、完整
### 1.2.4常见的软件缺陷管理工具 1、Bugzilla 2、禅道 3、JIRA ### 1.3.1软件测试简介 ### 1.3.3软件测试分类 **按照测试阶段分类** 1. 单元测试:验证软件单元是否符合软件需求与设计,开发人员自测。 2. 冒烟测试:软件构件版本建立后,对系统的基本功能进行简单的测试,这种测试重点验证的是程序的主要功能,而不会对具体功能进行深入测试。 3. 集成测试:冒烟测试之后,将已经测试过的软件单元组合在一起测试他们之间的接口,用于验证软件是否满足设计需求。 4. 系统测试:将经过测试的软件在实际环境中运行,并与其他系统的成分组合在一起进行测试 5. 验收测试:主要是对软件产品说明进行验证,逐行逐字地按照说明书的描述对软件产品进行测试,确保符合客户的各项要求。 **按照测试技术分类** 1. 黑盒测试 2. 白盒测试 按照软件质量特性分类 1、功能测试:测试软件的功能是否满足客户的需求,包括准确性、易用性、适合性、互操作性 2、性能测试:测试软件的性能是否满足客户的需求,性能测试包括负载测试、压力测试、兼容性测试、可移植性测试和健壮性测试等。 **按照自动化程度进行分类** 1、手动测试:测试人员一条一条的实行代码完成测试工作,费时费力而且很难保证测试效果。 2、自动化测试:借助脚本、自动化测试工具等完成相应的测试工作,他也需要人工的参与,但是他可以将要执行的测试代码或流程写成脚本,执行脚本完成整个测试工作 **按照测试项目分类** 1、界面类测试:验证软件界面是否符合客户需求 2、安全性测试:试软件在没有授权的内部或外部用户的攻击或恶意破坏时如何进行处理,是否能保证软件与数据的安全 3、文档测试:以需求分析、软件设计、用户手册、安装手册为主,主要验证文档说明与时间软件之间是否存在差异。 **其他分类** 1、α测试:软件上线之前进行的版本测试。由开发人员和测试人员或者用户协助进行测试。测试人员记录使用过程中出现的错误与问题,整个测试过程是可控的。 2、β测试:软件上线之后进行的版本测试。由用户在使用过程中发现错误与问题并进行记录,然后反馈给开发人员进行修复。 3、回归测试:对修改后的程序重新进行测色hi确认原有的缺陷已经消除并且没有引入新的缺陷,这个重新测试的过程就叫做回归测试 4、随机测试:没有测试用例、 检查列表、脚本或指令的测试,他主要是根据测试人员的经验对软件进程功能和性能的抽查。
1.4.1软件测试与软件开发之间的关系
1.4.2创建的软件测试模型
1、V模型
优点:将复杂的测试工作分成了目标明确的小阶段完成,具有阶段性、顺序性和依赖性,它既包含对源代码的底层测试也包含了对于软件需求的高层测试。
缺点:只能在编码之后才能开始测试,卓期的需求分析等前期工作没有涵盖其中,因此它不能发现需求分析等早期的错误,这为后期的系统测试、验收测试埋下了隐患。
2、W模型
优点:测试范围不仅包括程序,还包括需求分析、软件设计等前期工作,这样有利于尽早全面的女现问题。
缺点∶它将软件开发过程分弋需少、设计、编码、集成等一系列的串
行活动,无法支持迭代、自发性等需要变更调整的项目。
3、H模型
H模型将测试活动完全独立了出来,形成一个完全独立的流程,这个流程将测试准备活动和测试护活清晰的体现出来。测试流程和其他工作流程是并发执行的,只要集个工作流程的条件成熟就可以开始进行测试。
测试准备——→测试开始——测试执行——→测试流程
----概要设计流程
4、X模型
X模型的设计原理是将程序分成多个片段反复迭代测定然后将多个片段集成再进行迭代测试。
1.5软件测试原则
1、测试应基于客户需求。
2、测试要尽早进行。
3、穷尽测试是不可能的。
4、遵循GoodEnough原则
GoodEnough原则是指测试的投入与产出要适当权衡,形成充分的质量评估过程,这个过程建立在测试花费的代价之上。测试不充分无法保证软件产品的质量,但测试投入过多会造成资源的浪费。随着测试资源投入的增加,测试的产出也是增加的,但当投入达到一定的比例后,测试的效果就不会明显增强了。因此在测试时要根据实际要求和产品质量考虑测试的投入,最好使测试投入与产出达到一个
GoodEnough状态。
BACK
5、测试缺陷要符合“二八”定理。
一般情况下,软件80%的缺陷会集中在20%的模块中,缺陷并不是平均分布的。因此在测试时,要抓住主要矛盾,如果发现某些模块比其他模块具有更多的缺陷,则要投入更多的人力、精力重点测试这些模块以提高测试效率。
6、避免缺陷免疫。
1.6.1软件测试流程
( 1)分析测试需求
测试人员在制定测试计划之前需要先对软件需求进行分析,以便对要开发的软件产品有一个清晰的认识,从而明确测试对象及测试工作的范围和测试重点。在分析需求时还可以获取一些测试数据,作为测试计划的基本依据,为后续的测试打好基础。
此外,分析测试需求也是对软件需求进行测试,以发现软件需求中不合理的地方。
( 2)制定测试计划
测试计划一般要做好以下工作安排。
确定测试范围︰明确哪些对象是需要测试的,哪些对象不是需要测试的。制定测试策略︰测试策略是测试计划中最重要的部分,它将要测试的内容划分出不同的优先级,并确定测试重点。根据测试模块的特点和测试类型(如功能测试、性能测试)选定测试环境和测试方法(如人工测试、自动化测试)。
安排测试资源︰通过对测试难度、时间、工作量等因素对测试资源合理安排,包括人员分配、工具配置等。
安排测试进度︰根据软件开发计划、产品的整体计划来安排测试工作的进度,同时还要考虑各部分工作的变化。在安排工作进度时,最好在各项测试工作之间预留一个缓冲时间以应对计划变更。
预估测试风险︰罗列出测试工作过程中可能会出现的不确定因素,并制定应对策略。
( 3)设计测试用例
测试用例( Test Case )指的是一套详细的测试方案,包括测试环境、测试步骤、测试数据和预期结果。不同的公司会有不同的测试用例模板,虽然它们在风格和样式上有所不同,但本质上是一样的,都包括了测试用例的基本要素比。
测试用例编写的原则是尽量以最少的测试用例达到最大测试覆盖率。
(4)执行测试
测试执行就是按照测试用例执行测试的过程,这是测试人员最主要的活动阶段。在执行测试时要根据测试用例的优先级进行。
在执行测试过程中,测试人员要密切跟踪测试过程,记录缺陷、形成报告等,这一阶段是测试人员最重要的工作阶段。
(5 )编写测试报告
一份完整的测试报告必须要包含以下几个要点。
**引言︰**测试报告编写目的、报告中出现的专业术语解释及参考资料等。
测试概要∶介绍项目背景、测试时间、测试地点及测试人员等信息。
**测试内容及执行情况︰**描述本次测试模块的版本、测试类型,使用的测试用例设计方法及测试通过覆盖率,依据测试的通过情况提供对测试执行过程的评估结论,并给出测试执行活动的改进建议,以供后续测试执行活动借鉴参考。
**缺陷统计与分析:**统计本次测试所发现的缺陷数目、类型等,分析缺陷产生的原因给出规避措施等建议,同时还要记录残留缺陷与未解决问题。
**测试结论与建议︰**从需求符合度、功能正确性、性能指标等多个维度对版本质量进行总体评价,给出具体明确的结论。
测试报告的数据是真实的,每一条结论的得出都要有评价依据,不能是主观臆断的。