软件测试之功能测试详解
一、测试项目启动与研读需求文档
(一) 组建测试团队
1、测试团队中的角色

2、测试团队的基本责任
尽早地发现软件程序、系统或产品中所有的问题。
督促和协助开发人员尽快地解决程序中的缺陷。
帮助项目管理人员制定合理的开发和测试计划。
对缺陷进行跟踪、分析和分类总结,以便让项目的管理人员和相关的负责人能够及时、 清楚地了解产品当前的质量状态。
帮助改善开发流程、提高产品开发效率。
促进程序编写的规范性、易读性、可维护性等
3、测试团队与开发团队的 3 种模式
(1)以开发为核心,测试只是开发队伍的一部分,也就是开发团队中有测试人员,但 没有形成独立的团队
(2)以项目经理为核心,开发小组和测试小组并存,隶属于项目经理领导。
(3)项目经理、开发组长和测试组长“三足鼎立”,测试团队具有独立的、权威的地 位。
(二)软件质量需求
1、软件质量需求的分类
软件质量需求用于确定测试目标。
测试目标包括:功能、性能、界面、易用性、兼容性、安全性、可用性/可靠性、可维 护性、可扩展性等。
功能以外统称非功能。
2、功能
软件能做什么?
需要做什么?
怎么做是正确的?
哪些功能要测试、哪些功能不需要测试?
哪些功能重要,哪些不重要?
哪些功能先实现或先测试?
3、性能
反映软件运行时的效率和占用资源情况的能力。
时间特性:时间短、速度快、效率高。
资源特性:占用资源(CPU、内存、硬盘、网络)少。
4、界面(UI)
布局合理;
控件位置恰当;
文字没有乱码、字体大小合适;
颜色使用恰当;
图片、表格恰当、舒适、美观。
5、易用性
在指定条件下使用时,软件产品被理解、学习、使用和吸引用户的能力。
6、兼容性/可移植性
指软件产品从一种环境迁移到另一个环境的能力,反映一个软件与不同的硬件环境、操 作平台、其他软件的共同使用的能力
包括与不同硬件、平台、软件自身不同版本、其他软件、数据的兼容。
7、安全性
指软件产品保护信息和数据的能力。
8、可用性/可靠性
指系统正常运行的能力或程度,可用性=正常运行时间/(正常运行时间+非正常运行时 间)×100%
可用性指标一般要求达到 4 个 9 即 99.99%(全年 52 分钟不正常工作)或 5 个 9 即 99.999%(全年 5 分钟),对一些军事系统,可用性高达 7 个 9(99.99999%(全年 失效时间不超过两秒)。
一般测试时间不足,可以采用空间换时间的办法,如在高负载情况下进 行为期一周 或一个月的测试,以判断其可靠性。
关注 MTTF(平均无故障时间)、MTTR(平均恢复时间)、MTBF(平均失效间 隔时间)。
9、可维护性
指软件产品可被修改的能力
修改可能包括修正、改进或软件对环境需求和功能规格说明变化的适应。
可维护性的软件应该是易改变的、稳定的、易测试的。
10、可扩展性/可伸缩性测试
通过很少的改动就能实现整个系统处理能力的增长
如在部署两台服务器时测试系统性能(容量,即最大负载),再部署四台、八台服 务器时分别进行系统容量的测试,看其容量是否为上次(两台、四台)实验值的两 倍或接近两倍。如果是,系统就具有良好的可伸缩性。
(三)研读需求文档
1、测试需求分析的过程
收集与研读文档,提出并解决问题,整理需求信息
功能拆分、功能描述/需求整理
编写测试点
需求评审
2、研读需求文档
2.1 研读文档主要任务
提取有用的需求信息
提出需求中不清晰、不理解、不明白的问题
和用户、业务人员、产品经理或产品设计人员、开发人员等沟通
2.2 怎么研读文档
分析思路
分析软件的用户群,分析用户的实际需要;
分析软件的开发环境、开发语言、数据类型;
分析软件架构、软件的运行环境和平台、数据库类型;
分析软件要实现哪些目标(功能、性能、界面、易用性、兼容性、安全性)以 及具体的要求是什么;
分析软件有哪些功能,每种功能要完成什么业务,这些业务应该怎么实现,业 务逻辑是什么,业务流程是怎样的,业务规则有何要求;
分析功能或业务间的联系,哪些业务更关键或重要;
明确测试周期,测试目标,测试范围。
细节上
分析每个模块或功能上实现的功能
设计的开发原理包括数据类型
从用户使用场景角度分析业务流程
记录业务规则
实施
以情景再现的形式写出需求信息。
2.3 研读需求文档案例
拿到一个项目,怎么入手?
即时贴程序部分需求说明
便签的数量最多为 50 个
便签标题字数最多为 40 个字节
便签的正文文字数量最多为 200 个
年份只能设置在 1900-2100 之间
(四)需求评审
1、意义
对软件需求进行正确性的检查。
保证软件需求的可测试性。
通过产品需求文档的评审,与市场、产品、开发等各部门相关人员沟通,使得大家 认识一致,避免在后期产生不同的理解,引起争吵。
通过产品需求文档的评审,更好地理解产品的功能性和非功能性需求
在需求文档评审通过后,测试的目标和范围就确定了。虽然此后会有需求的变更, 但可以得到有效的控制,这样可降低测试的风险。
评审是否完成是以需求文档获得多方“邮件确认”或“签字”通过为标志的。这不 应该只体现在“签字”形式上,更重要的是达到下面的结果。
所有参与方达成一致。
已发现的问题被阐述清楚、被修正。
2、需求评审的质量要求
正确性
完备性
易理解性
一致性
可行性
易修改性
可测试性
可追溯性
3、需求评审的参加人员
用户代表
需求人员
产品经理
项目经理
开发人员
开发经理
测试人员
测试经理
市场经理
质量保证人员
4、测试人员参与评审时的注意事项
明确自己的角色和责任。
熟悉评审内容,为评审做好准备,做细做到位。
在评审会上,针对问题阐述观点,而不是针对个人。
可以分别讨论主要的问题和次要的问题。
在会议前或会议后可以就存在的问题提出自己建设性的意见。
提高自己的沟通能力,采取适当的、灵活的表述方式。
对发现的问题跟踪下去。
应该在需求形成的过程中进行分阶段的多次评审,而不是一次评审。
测试人员要善于提问,多思考
这些需求都是用户提出来的吗?
有没有画蛇添足的需求?没有漏掉什么需求吗?
和竞争对手的产品做过比较吗?我们的产品优势体现在哪里?
是否正确地描述了每个需求?这条描述是否存在二义性的问题?
我的理解和文档作者的理解一致吗?
二、测试需求分析与测试用例设计
(一) 界面中的控件知识
1、文本框和密码框
2、单选按钮、组合列表框、数码框
3、复选框
4、列表框
5、命令按钮
6、其他界面元素
三、 测试需求分析与测试用例设计方法
1、场景法
1.1 测试点/检查点
测试时应该考虑可以测试的诸多方面。
1.2 场景法概述
场景法模拟用户操作软件时的情景,主要用于测试系统的业务流程。
当拿到一个测试任务时,我们先要关注它的主要功能和业务流程是否正确实现,这 就需要使用场景法来完成测试。
1.3 场景的定义
场景用来描述软件操作的路径。
基本流
按照正确的业务流程来实现的一条操作路径(模拟正确的操作流程)。
备选流
导致程序出现错误的操作流程(模拟错误的操作流程)。
1.4 场景法的分析步骤
分析软件需求
从用户使用情景角度,写出业务流程和业务规则
写出基本流场景和备选流场景
1.5 场景法案例:ATM 机取款
步骤一:分析业务流程(可以绘制流程图)
步骤二:描述程序的基本流及备选流
1、基本流(正确的流程)
(1)插入银行卡:客户将银行卡插入 ATM 机的读卡器
(2)验证银行卡:ATM 机从银行卡的磁条中读取账户代码,并检查它是 否属于可以接受的银行卡
(3)输入密码:ATM 机要求客户输入密码
(4)验证密码:确定该密码是否正确
(5)进入 ATM 主界面:ATM 显示在本机中可用的各种选项
(6)选择取款并输入金额:客户选择“取款”,并选择取款金额
(7)ATM 机验证:ATM 机进行验证账户余额是否满足以及总取款金额 是否满足要求,验证 ATM 机内现金是否够用
(8)更新账户余额、出钞:验证成功,更新账户余额,输出现金,提示 用户收取现金
(9)返回主界面
2、备选流(各种错误情况)
(1)银行卡无效:提示错误并退卡
(2)密码错误:提示错误,并判断是否 3 次错误
(3)密码 3 次错误:吞卡
(4)账户余额不足:提示错误并退卡
(5)总取款金额超出当日可取限额:提示错误并退卡
(6)ATM 机余额不足:提示错误并退卡
步骤三:根据基本流和备选流生成不同的场景
2、等价类划分
2.1 案例引入
测试两位数加法器(学生思考、讨论、陈述)
2.2 等价类划分核心思想
通过需求分析,找出程序的输入域。
将输入域划分成若干类。
每一类中选取代表性数据等价于这一类中的其他值。
2.3 等价类划分的步骤
需求分析
划分等价类(根据需求,有效等价类、无效等价类)并细化(根据计算机知识)
2.4 等价类划分案例
步骤 1:需求分析
阅读文档 :
借助开发知识
与开发或用户沟通
了解用户群及行业知识
写出需求:
-99~99 之间的整数
步骤 2:划分等价类并细化
有效类
-99 到 99 之中的整数
细化 :负数、0 、正数
无效类
超范围 :<-99 或 >99
非法类型 : 浮点数 、 字符(串)
2.5等价类划分注意事项
不但要考虑有效等价类,也要考虑无效等价类
两块划成一块(等价类划分过粗),结果?
遗漏一种测试情况
一块划成两块(等价类划分过细),结果?
冗余测试
仔细划分,审查划分
过于粗略可能会漏掉软件缺陷
积累经验
3、边界值分析
3.1 边界值分析的思想与步骤
分析需求,找出边界。
写出边界值
最小值
小于最小值
最大值
大于最大值
3.2边界值分析案例
两位数加法计算器的边界值 : -99 、-100、99 、100
3.3 为什么分析边界值
看看下面的代码有错误吗?
输入或输出的边界最容易产生错误。
4、决策表
前面测试两位数加法计算器的测试没有考虑输入组合。
4.1 决策表的分析步骤
需求分析
分析输入和输出
用等价类划分分析输入的各种情况、输出的各种情况
画判定表
分析与简化判定表
4.2 决策表案例
分析输入条件和输出条件
输入
输出
正确计算
错误提示
原始决策表/判定表
优化决策表
优化策略
测试基本功能的保留;
一个输入错误,另外输入无所谓,可以整合;
所有输入都要错误过。
最终的决策表
4.3 决策表的局限性与优化策略
导致测试量爆炸。
5、错误推测
5.1 测试若干原则回顾
测试不是验证软件正确,而是攻击软件,发现错误。
测试要时刻保持怀疑的态度,具有缺陷预防意识。
测试要寻求系统设计、功能设计的弱点。
设计负面的、异常的测试,如考虑错误的或者异常的输入,往往可以发现更多的软件缺陷。
5.2 什么是错误推测
在测试程序时,人们可以根据经验或直觉推测程序中可能存在的各种错误,从而有针对 性地编写检查这些错误的测试方法。
错误推测分类
输入数据测试方面
输出数据测试方面
数据结构测试方面
文件系统方面
5.3 输入数据方面的错误推测
输入非法数据
一般用于键盘输入数据时。
测试方法
输入非法类型
输入非法范围/长度
输入非法格式
注意
错误信息的检查:需要额外考虑错误提示信息的内容
错误信息和错误要对应一致
错误信息不能为空
错误信息的内容不能只是错误代码,不能包含开发信息
错误信息不能中英文混合
5.4 错误推测
输入非法类型
输入非法范围(数值)
输入非法长度(个数)
输入非法格式
输入默认值
输入特殊字符
输入合法数据的非法组合
粘贴强制输入
一个输入多个输出不要遗漏
输出结果(含数据库)要正确
上溢、下溢(含结果)
操作数与操作符不符
文件超载
文件权限不足
介质忙或不可用
介质损坏
输入默认值
适用于有默认值的地方。
测试方法
接受软件的默认值
键入空值
将默认值改为另外一个值
将默认值改为另外一个值,再变为空值
输入特殊字符(集)
适用于不能输入有特殊含义的字符时。
测试方法
根据被测软件所处的操作系统、程序设计语言、后台数据库以及具体业务 等信息列出表格,进行讨论,标明哪些需要测试,哪些需要剔除。
了解具体行业知识,具体问题具体分析。
案例
文件命名下列特殊字符(33 个)
不能使用:\ /<>|“😗?,com0-com9,lpt0-lpt9,prn、aux、nul、 con。
思考
用户名有哪些特殊字符?
QQ 昵称、聊天内容有哪些特殊字符?
输入合法数据的非法组合
适用于输入值之间存在依赖关系时。
测试方法
输入可能是出现问题的组合值。
案例
输出数据方面的错误推测
1)同一个输入产生多种输出
案例
输入:一个电话打来
输出:
状态一:等待接听。
状态二:占线。
状态三:停机。
状态四:无法接通。
状态五:关机。
状态六:空号。
测试方法
详细测试每一种输出,不要有遗漏。
熟悉被测软件业务知识,阅读各种程序文档,明确输入可能产生的输出, 列出关于程序输入于输出的一个列表,然后进行测试。
2)验证输出结果的正确性
测试方法
不仅测试输入的正确性,还要检查结果的正确性。
测试人员要尽可能多地学习所涉及问题的领域。
数据结构方面的错误推测
1)数据结构溢出
适用于程序中存在变量、数组等数据结构时。
测试方法
变量 :
上溢:值太大
下溢:值太小
数组
上溢:数据量太多
下溢:数据量太少
2)计算结果溢出
测试方法
输入非法值或很大与很小数据,强制结果产生上溢或下溢。
3)操作数和操作符不符
适用于需要进行数值计算程序和图形操作程序的测试时,如加、减、乘、除等。
测试方法
找到程序中容易引起操作数和操作符不符的计算、表达式等
文件系统方面的错误推测
1)使文件系统超载
适用于数据存储到硬盘中时。
案例
假设“软件测试工程师管理系统”要保存 10000 个工程师信息,则保存时 engineer.txt文件可能会有20M大小,如果此时磁盘只有10M可用空间了, “软件测试工程师管理系统”会如何动作呢?
测试方法
创建满容量或近乎满容量的文件系统,然后强制执行各种通过输入或输出 访问文件系统的操作。
打开足够多的文件,文件打开时会强制创建备份副本,从而占用双倍的存 储空间。
使用工具 CannedHeat,模拟文件系统超载。
2)更改文件访问权限
适用于对文件进行读写的应用程序。
测试方法
不同的用户对相同文件具有不同的访问权限,需要考虑登录同一台机器的 多个用户操作相同文件的权限问题。
打开一个文件,在操作系统中修改该文件的访问权限。有些操作系统 允许权限高的用户控制一般用户已经打开的文件。
两个应用程序打开,关闭同一个文件。
如把同一应用程序的不同版本安装在同一机器上,在不同版本的应用 程序中打开和关闭同一文件;
试着在某个应用程序中打开在另一个程序中已打开的文件,这可能会 导致文件访问权限上出现冲突。
3)使介质忙或不可用
适用于应用程序的运行需要消耗大量内存或运行时需求其他相关软件同时运 行的情况。
大多数操作系统能同时运行多个应用程序,但相互切换时会有延迟,但是 没有对错误响应。
测试方法
通过启动大量应用程序,强制它们都打开并保存文件来使文件系统处于忙 的状态;或者同时下载大量文件也可以使后台拥挤。
使用一些测试工具来模拟磁盘的状况。
4)介质损坏
使用场合
损坏的介质可能使操作系统传回错误代码,这些错误代码可能没有在应用 程序中编程处理。
测试方法
损坏介质的方法使用不很多,只有少数公司采用,大多是开发操作系统、 设备驱动程序以及以安全为主的应用程序的公司会采用这种测试方法。确 定是否使用该方法,主要要考虑数据对用户的重要性。
该方法可以使用实际损坏了的介质。检查应用程序对错误的处理能力,应 用程序可以对错误进行处理或者将问题告诉用户,并且要确保用户数据文 件不丢失、不损坏。
也可以通过软件模拟。
6、编写测试点
将测试点写入测试需求分析说明书,或者 XMind 等,留存下以供将来编写测试用例使
用。
四、编写测试用例
1、编写测试用例(一般公司都有固定模板)
2、测试用例的写作说明
2.1 用例编号/序号
简单、唯一。
2.2 用例说明
也称测试点、检查点、测试概述、用例概述、测试说明;
用一句话对测试用例进行概述;
可以总结测试目的;
可以用疑问句表示;
可以用“检查、验证、测试”等字眼(如验证 QQ 默认安装);
最好看到这句话就能知道如何测试;
尽量唯一(决策表可能会有重复的测试说明);
用例执行多轮时,越往后执行可能越快,如果用例写得好,直接看概述就行。
2.3 初始条件
也称预置条件、前提条件;
初始条件要是一个状态,而且是静态的,如管理员已登录后台;
初始条件是第一步操作步骤之前的状态,不能太远,不用从头写到尾
很多项目中不写预置条件。
2.4 操作步骤
若对数据要求高,需要把数据分离出来;
步骤要都有序号;
每一步用分号分开,最后用一个句号;
每一步必须换行;
参数前加冒号(如用户名:admin);
涉及按钮界面用【】、“”等成对符号间隔;
功能的详细用例步骤 4-6 步左右;
最后一步一定是个动作,不能写结果。
2.5 预期结果
是一个状态;
如果参考文档中有描述,原封不动的抄过来;如果文档中没有具体要求,则点要一 致,可以有几个点,如 QQ 默认安装,应能启动、默认选项匹配等。
2.6 用例状态
通过、失败、阻塞、未执行、搁置、无效用例…
初始条件达不到时,一般用例状态设置为阻塞。
看如何执行用例,执行完关心什么来定。
2.7 优先级
用例的执行顺序。
3、测试用例的评审和管理
保证测试用例质量的方法
首先,要对用户需求、服务质量要求、产品特性有深刻且全面的理解
其次,采取正确、恰当的方法进行用例设计;
再者,按照测试用例的标准格式或规范的模板来书写测试用例;
最后,对测试用例的检查、评审,也是提高测试用例质量的主要且有效的手段。
五、提交缺陷报告
一) 软件缺陷的判定
1、什么是缺陷
软件存在着不符合质量需求或违背软件用户、客户、企业意愿的问题,这就是软件缺陷 (Defect),又叫“Bug(臭虫)”。
2、软件缺陷的判定准则
软件未达到产品说明书标明的功能;
产品说明书简称为说明(spec)或产品说明(productspec),是软件开发小组 的一个协定。它对开发的产品进行定义,给出产品的细节、如何做、做什么、 不能做什么。这种协定从简单的口头说明到正式的书面文档有多种形式。
软件出现了产品说明书指明不会出现的错误;
如金融软件 7*24 工作不能宕机
软件功能超出产品说明书指明范围;
软件未达到产品说明书虽未指出但应达到的目标;
如软件在断电时的意外处理
软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。
主要体现在易用性方面。
3、软件缺陷的表现形式
用户要求的功能、特性没有实现或部分实现。
运行出错,包括运行中断、系统崩溃、界面混乱等。
数据结果不正确、精度不够、不完整或格式不统一。
文字显示内容不正确或拼写错误。
系统性能低下、系统资源浪费。
4、分离和再现软件缺陷
发现缺陷后,应该做好分离和再现,排查发现的“缺陷”是不是软件本身的问题, 然后才能提交。
再现 3 次
重现
复现
5、避免提交缺陷的缺陷和重复缺陷
缺陷的缺陷
是测试人员提交的不是缺陷的缺陷;
是一种无效缺陷;
此类缺陷常使测试人员遭受指责。
怎么办 : 正确理解需求; 做好复现。
重复缺陷
同一个缺陷 A 测试工程师提交后,B 测试工程师又提交或者自己提交的缺陷 与之前提交的缺陷相同或类似;
是一种无效缺陷;
怎么办 : 尽量避免两个人同时测试同一模块; 自己提交的缺陷与自己的重复,提交前查找一下,增强开发知识。
6、处理无法再现的缺陷
首先,对这样的缺陷进行详细的记录,使用不同办法去尝试复现。
其次,要合理地安排时间,要考虑到测试项目的整体进度,对一时难以再现的缺陷 可以暂时搁置,以保证项目的正常进度,并尽快提交给开发人员。
最后,在测试过程中对未再现缺陷予以关注。
7、处理有争议的缺陷
跟有关人员进行沟通、讨论;
搁置。
二) 提交缺陷报告
1、什么是缺陷报告
缺陷报告是对缺陷进行记录、分类和跟踪的文档。
2、缺陷报告的读者对象
软件开发人员
报告缺陷是为了缺陷得到修复。
希望获得缺陷的本质特征和复现步骤。
质量管理人员、市场人员、技术支持人员
希望获得缺陷的严重程度和分布情况,以及对市场和用户的影响程度。
3、缺陷报告的写作准则(5C)
Correct(准确)
每个组成部分的描述准确,不会引起误解;
Clear(清晰)
每个组成部分的描述清晰,易于理解;
Concise(简洁)
只包含必不可少的信息,不包括任何多余的内容;
Complete(完整)
包含复现该缺陷的完整步骤和其他本质信息;
Consistent(一致)
按照一致的格式书写全部缺陷报告。
4、缺陷报告的组织结构
缺陷的标题/缺陷摘要/缺陷概述/缺陷基本信息
预处理
复现步骤
期望结果
实际结果
缺陷的严重程度
缺陷的优先级
测试的软件和硬件环境
测试的软件版本
缺陷的类型
注释文字和缺陷截图
5、缺陷报告的写作要求
5.1 缺陷标题
尽量按缺陷发生的原因与结果的方式书写;
执行完 A 后,发生 B;
在什么地方,做了什么事情,出了什么结果;
使用“在…以后”,“在…时候”或“在…期间”等连结词有助于描 述缺陷的原因和结果。
避免使用模糊不清的词语;
为了方便搜索和查询,尽量使用关键字;
为了便于他人理解,避免使术语、俚语或过分具体的测试细节。
5.2 复现步骤
提供测试的预备步骤和信息;
步骤完整,准确,简短,没有缺漏任何操作步骤,没有任何多余的步骤;
将常见步骤合并为较少步骤;
简单地一步一步地引导复现该缺陷;
每一个步骤尽量只记录一个操作;
每一个步骤前使用数字对步骤编号;
尽量使用短语和短句,避免复杂句型和句式;
只记录各个操作步骤是什么,不要包括每个步骤的执行结果。
5.3 预期结果
软件应该具有的结果,或者说正确结果应该是什么样子。
5.4 实际结果
实际结果的描述要列出具体的表现行为,而不是简单的指出“不正确”或“不起作 用”。
如果一个动作产生彼此不同的多个缺陷结果,或者一个动作将产生一个结果,而这 个结果又产生另一个结果。为了易于阅读,这些结果应该使用数字列表分隔开来。 如实际结果:
1.显示“命令代码行…错误”;
2.显示“并且终止…服务”。
5.5 注释/截图
可以包含以下各方面的内容:
截取缺陷特征图像文件;
测试过程所使用的测试文件;
测试附加的打印机驱动程序;
再次描述重点,避免开发人员将缺陷退回给测试人员补充更多信息;
再次指明该缺陷是否在前一版本已经存在;
多个平台之间是否具有不同表现;
注释包含缺陷的隔离信息,指出缺陷的具体影响范围。
如,缺陷的注释可能包含下面的内容:
能在 Win2000 和 WinXP 文本框中显示文本内容,但不支持 Win98
屏幕刷新后,现象会消失。
使用二进制文件,不存在该错误。
参见附加的使用说明书和测试文件。
6、怎么提交高质量的缺陷报告
尽早提交缺陷报告。
清楚地说明此问题对用户价值的危害。 提供尽可能多的技术信息(如包含复现该缺陷需要的环境变量或测试所用的数据文 件),方便程序员调试。
报告的软件缺陷进行了必要的隔离,报告的缺陷信息具体、准确。
易于搜索软件测试报告的缺陷。
一个缺陷报告中只报告了一种缺陷。
缺陷报告中不要提问题。
避免常见的错误
我(I)、你(You)、他/她(He/She)
情绪化的语言和强调符号!!!
似乎(Seems)、看上去可能(Appearstobe)
认为比较幽默的内容 不确定的测试问题(Issues)/不确定是否是缺陷
三) 缺陷的分类
1、缺陷的分类标准
2、根据缺陷类型对缺陷分类
功能缺陷
界面缺陷
文档缺陷
代码缺陷
算法错误
性能缺陷
3、根据缺陷的等级对缺陷分类
A 类—致命缺陷,包括以下各种错误:
由于程序所引起的死机,非法退出;
死循环;
数据库发生死锁;
因错误操作导致的程序中断;
功能错误;
与数据库连接错误;
数据通讯错误
B 类—严重缺陷,包括以下各种错误:
程序错误;
程序接口错误;
数据库的表、业务规则、缺省值未加完整性等约束条件
C 类一般缺陷,包括以下各种错误:
操作界面错误(包括数据窗口内列名定义、含义是否一致);
打印内容、格式错误;
简单的输入限制未放在前台进行控制;
删除操作未给出提示;
数据库表中有过多的空字段
D 类—较小缺陷,包括以下各种错误:
界面不规范;
辅助说明描述不清楚;
输入输出不规范;
长操作未给用户提示;
提示窗口文字未采用行业术语;
可输入区域和只读区域没有明显的区分标志
E 类—意见或建议
4、根据缺陷处理的优先级对缺陷分类
5、根据缺陷状态对缺陷分类
四)缺陷报告的处理
1、缺陷报告的简单处理流程/缺陷的生命周期
软件测试人员提交缺陷报告;
测试负责人审核后将缺陷报告分配给相关的开发人员修改;
缺陷被修改后由测试人员根据缺陷报告中的修改记录进行返测;
返测通过的缺陷报告由负责人关闭,返测未通过的缺陷报告直接返回开发人员重新 修改,缺陷报告直到缺陷被修复以后才关闭;
关闭或已解决的缺陷报告可能会被阶段性的复审重新打开,这些报告一旦被再次打 开应该立即处理。
2、缺陷报告的标准处理流程
正常缺陷
重复缺陷
无效缺陷
推迟修改
验证不通过
描述不清楚
3、缺陷跟踪管理系统/缺陷管理工具
3.1 缺陷管理工具的功能
缺陷提交
缺陷跟踪
缺陷分析
有效的缺陷分析不仅可以评价软件质量,同时可以帮助项目组很好地掌握和评 估软件的研发过程,进而改进研发过程,未对缺陷进行分析就无法对研发流程 进行改进。
缺陷分析还能为软件新版本的开发提供宝贵的经验,进而在项目开展之前,指 定准确、有效的项目控制计划,为开发高质量的软件产品提供保障。
3.2 常见缺陷管理工具
Bugzilla
Bugfree
Mantis
Jira
ZenTao(禅道)
QualityCenter/Application Lifecycle Management
六、总结
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。
相关文章:
软件测试之功能测试详解
一、测试项目启动与研读需求文档 (一) 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产品中所有的问题。 督促和协助开发人员尽快地解决程序中的缺陷。 帮助项目管理人员制定合理的开发和测试计划。 对缺陷进行…...
Python深度学习基础——卷积神经网络(CNN)(PyTorch)
CNN原理 从DNN到CNN 卷积层与汇聚 深度神经网络DNN中,相邻层的所有神经元之间都有连接,这叫全连接;卷积神经网络 CNN 中,新增了卷积层(Convolution)与汇聚(Pooling)。DNN 的全连接…...
pytorch 反向传播
文章目录 概念计算图自动求导的两种模式 自动求导-代码标量的反向传播非标量变量的反向传播将某些计算移动到计算图之外 概念 核心:链式法则 深度学习框架通过自动计算导数(自动微分)来加快求导。 实践中,根据涉及号的模型,系统会构建一个计…...
VSCode解决中文乱码方法
目录 一、底层原因 二、解决方法原理 三、解决方式: 1.预设更改cmd临时编码法 2.安装插件法: 一、底层原因 当在VSCode中遇到中文显示乱码的问题时,这通常是由于文件编码与VSCode的默认或设置编码不匹配,或…...
pandas.DataFrame.dtypes--查看和验证 DataFrame 列的数据类型!
查看每列的数据类型,方便分析是否需要数据类型转换 property DataFrame.dtypes[source] Return the dtypes in the DataFrame. This returns a Series with the data type of each column. The result’s index is the original DataFrame’s columns. Columns with…...
高性能服务开发利器:redis+lua
Redis 与 Lua 脚本的结合,其核心价值在于 原子性操作 和 减少网络开销。 一、Redis 执行 Lua 脚本的优势 原子性 Lua 脚本在 Redis 中原子执行,避免多命令竞态条件。 减少网络开销 将多个 Redis 命令合并为一个脚本,减少客…...
开源智能体MetaGPT记忆模块解读
MetaGPT 智能体框架 1. 框架概述 MetaGPT 是一个多智能体协作框架,通过模拟软件公司组织架构与工作流程,将大语言模型(LLM)转化为具备专业分工的智能体,协同完成复杂任务。其最大特点是能够将自然语言需…...
Docker部署MySQL大小写不敏感配置与数据迁移实战20250409
Docker部署MySQL大小写不敏感配置与数据迁移实战 🧭 引言 在企业实际应用中,尤其是使用Java、Hibernate等框架开发的系统,MySQL默认的大小写敏感特性容易引发各种兼容性问题。特别是在Linux系统中部署Docker版MySQL时,默认行为可…...
【RabbitMQ】延迟队列
1.概述 延迟队列其实就是队列里的消息是希望在指定时间到了以后或之前取出和处理,简单来说,延时队列就是用来存放需要在指定时间被处理的元素的队列。 延时队列的使用场景: 1.订单在十分钟之内未支付则自动取消 2.新创建的店铺,…...
深兰科技携多款AI医疗创新成果亮相第七届世界大健康博览会
4月8日,以“AI赋能 健康生活”为主题的2025年(第七届)世界大健康博览会(以下简称健博会)在武汉隆重开幕。应参展企业武汉市三甲医院——武汉中心医院的邀请,深兰科技最新研发的新一代智慧医疗解决方案和产品在其展位上公开亮相。 本届展会吸引了来自18个…...
20周年系列|美创科技再度入围「年度高成长企业」系列榜单
近日,资深产业信息服务平台【第一新声】发布「2024年度科技行业最佳CEO及高成长企业榜」,美创科技凭借在数据安全领域的持续创新和广泛行业实践, 再度入围“年度网络安全高成长企业”、“年度高科技高成长未来独角兽企业TOP30”。 美创科技作…...
saltstack分布式部署
一、saltstack分布式 在minion数量过多时,通过部署salt代理,减轻master负载 1、在master上删除说有minion证书 2、在minion上删除旧master信息 3、安装部署salt-syndic 4、修改minion 5、在master上签署代理的证书 6、在代理上签署minion证书 7、测试...
CCRC 与 EMVCo 双认证:中国智能卡企业的全球化突围
在全球经济一体化的浪潮中,智能卡行业正经历着前所未有的变革与发展。中国智能卡企业凭借技术优势与成本竞争力,在国内市场成绩斐然。然而,要想在国际市场站稳脚跟,获取权威认证成为关键一步。CCRC 与 EMVCo 双认证,宛…...
逆向工程的多层次解析:从实现到领域的全面视角
目录 前言1. 什么是逆向工程?2. 实现级逆向:揭示代码背后的结构2.1 抽象语法树的构建2.2 符号表的恢复2.3 过程设计表示的推导 3. 结构级逆向:重建模块之间的协作关系3.1 调用图与依赖分析3.2 程序与数据结构的映射 4. 功能级逆向:…...
【Docker项目实战】使用Docker部署ToDoList任务管理工具
【Docker项目实战】使用Docker部署ToDoList任务管理工具 一、ToDoList介绍1.1 ToDoList简介1.2 ToDoList主要特点二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载ToDoList镜像…...
基于SpinrgBoot+Vue的医院管理系统-026
一、项目技术栈 Java开发工具:JDK1.8 后端框架:SpringBoot 前端:Vue开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 二、功能介绍 (1)…...
如何进行数据安全风险评估总结
一、基于场景进行安全风险评估 一、概述 数据安全风险评估总结(一)描述了数据安全风险评估的相关理论,数据安全应该关注业务流程,以基础安全为基础,以数据生命周期及数据应用场景两个维度为入口进行数据安全风险评估。最后以《信息安全技术 信息安全风险评估规范》为参考,…...
用 npm list -g --depth=0 探索全局包的秘密 ✨
用 npm list -g --depth0 探索全局包的秘密 🚀✨ 嗨,各位开发者朋友们!👋 今天我们要聊一个超实用的小命令——npm list -g --depth0!它就像一个“全局包侦探”🕵️♂️,能帮你快速查出系统中…...
依靠视频设备轨迹回放平台EasyCVR构建视频监控,为幼教连锁园区安全护航
一、项目背景 幼教行业连锁化发展态势越发明显。在此趋势下,幼儿园管理者对于深入了解园内日常教学与生活情况的需求愈发紧迫,将这些数据作为提升管理水平、优化教育服务的重要依据。同时,安装监控系统不仅有效缓解家长对孩子在校安全与生活…...
新闻发稿软文发布投稿选择媒体时几大注意
企业在选择新闻稿发布媒体时,需要综合考虑以下几个关键因素: 1. 匹配媒体定位 企业应根据自身品牌定位和传播目标,选择与之契合的媒体平台。确保新闻稿的内容和风格与媒体的定位高度一致,从而提高稿件被采纳的可能性。 2. 衡量…...
[Scade One] Swan与Scade 6的区别 - signal 特性的移除
signal 特性移除 在 Scade One 引入的Swan中,移除了Scade 6中存在的signal 特性。比如 Scade 6 中的signal声明 sig sig_o;或者signal使用,比如 o sig_o; 在Swan中已经被移除。 不过Swan仍旧保留了对布尔流的emit操作,比如 emit a if c …...
亚马逊推出“站外代购革命“:跨境购物进入全平台整合时代
一、创新功能解析:平台边界消融的购物新范式 亚马逊最新推出的External Product Fulfillment(EPF)服务,正以技术创新重构全球电商格局。这项被称作"代购终结者"的功能具备三大核心突破: 全链路智能化 • 智能…...
Java 常用安全框架的 授权模型 对比分析,涵盖 RBAC、ABAC、ACL、基于权限/角色 等模型,结合框架实现方式、适用场景和优缺点进行详细说明
以下是 Java 常用安全框架的 授权模型 对比分析,涵盖 RBAC、ABAC、ACL、基于权限/角色 等模型,结合框架实现方式、适用场景和优缺点进行详细说明: 1. 授权模型类型与定义 模型名称定义特点RBAC(基于角色的访问控制)通…...
达梦数据库迁移问题总结
问题一、DTS工具运行乱码 开启图形化 [rootlocalhost ~]# xhost #如果命令不存在执行sudo yum install xorg-x11-server-utils xhost: unable to open display "" [rootlocalhost ~]# su - dmdba 上一次登录: 三 4月 9 19:50:44 CST 2025 pts/0 上…...
JS | 函数柯里化
函数柯里化(Currying):将一个接收多个参数函数,转换为一系列只接受一个参数的函数的过程。即 逐个接收参数。 例子: 普通函数: function add(a, b, c) {return a b c; } add(1, 2, 3); // 输出 6柯里化…...
Elasticsearch中的基本全文搜索和过滤
Elasticsearch中的基本全文搜索和过滤 知识点参考: https://www.elastic.co/guide/en/elasticsearch/reference/current/full-text-filter-tutorial.html#full-text-filter-tutorial-range-query 1. 索引设计与映射 多字段类型(Multi-Fields) ÿ…...
蓝桥杯嵌入式第十五届
一、底层 根据它的硬件配置可以看出来这套题目使用到了按键、LED、LCD、输入捕获这几个功能 (1)输入捕获功能 首先在CubeMx里面的配置 题目中说到了我们使用的是PA15和PB4(实际在板子上对应的的是R39和R40),所以我们…...
基于ueditor编辑器的功能开发之给编辑器图片增加水印功能
用户需求,双击编辑器中的图片的时候,出现弹框,用户可以选择水印缩放倍数、距离以及水印所放置的方位(当然有很多水印插件,位置大小透明度用户都能够自定义,但是用户需求如此,就自己写了…...
DDR中的DLL
在DDR4内存系统中,DLL(Delay Locked Loop,延迟锁相环)是一个非常重要的组件,用于确保数据信号(DQS)和时钟信号(CK)之间的同步。以下是DLL的作用以及DLL on和DLL off的影响…...
Python学习之jieba
Python学习之jieba jieba是优秀的中文分词第三方库,由于中文文本之间每个汉字都是连续书写的,我们需要通过特定的手段来获得其中的每个词组,这种手段叫做分词,我们可以通过jieba库来完成这个过程。jieba库的分词原理:利用一个中文词库,确定汉字之间的关联频率,汉字向概率大的组…...
快速幂fast_pow
快速幂算法讲解 快速幂算法是一种高效计算幂运算的算法,其核心思想是利用指数的二进制分解,把幂运算的时间复杂度从 O(p) 降低到 O(logp)。 原理 假设要计算 an,将 n 表示成二进制形式:n2k12k2⋯2km,那么 ana…...
Go并发背后的双引擎:CSP通信模型与GMP调度|Go语言进阶(4)
为什么需要理解CSP与GMP? 当我们启动一个Go程序时,可能会创建成千上万个goroutine,它们是如何被调度到有限的CPU核心上的?为什么Go能够如此轻松地处理高并发场景?为什么有时候我们的并发程序会出现奇怪的性能瓶颈&…...
42、JavaEE高级主题:WebSocket详解
WebSocket 一、WebSocket协议与实现 WebSocket是一种基于TCP协议的全双工通信协议,能够在客户端和服务器之间建立实时、双向的通信通道。通过WebSocket,客户端和服务器可以在任何时候发送数据,并立即接收到对方的响应。 1.1 WebSocket协议…...
UGUI源代码之Text—实现自定义的字间距属性
以下内容是根据Unity 2020.1.01f版本进行编写的 UGUI源代码之Text—实现自定义的字间距属性 1、目的2、参考3、代码阅读4、准备修改UGUI源代码5、实现自定义Text组件,增加字间距属性6、最终效果 1、目的 很多时候,美术在设计的时候是想要使用文本的字间…...
【AI】MCP概念
一文讲透 MCP(附 Apifox MCP Server 内测邀请) 7分钟讲清楚MCP是什么?统一Function calling规范,工作量锐减至1/6,人人手搓Manus!? | 一键链接千台服务器,几行代码接入海量外部工具…...
HarmonyOS:使用geoLocationManager (位置服务)获取位置信息
一、简介 位置服务提供GNSS定位、网络定位(蜂窝基站、WLAN、蓝牙定位技术)、地理编码、逆地理编码、国家码和地理围栏等基本功能。 使用位置服务时请打开设备“位置”开关。如果“位置”开关关闭并且代码未设置捕获异常,可能导致应用异常。 …...
深入解析原生鸿蒙中的 RN 日志系统:从入门到精通!
全文目录: 开篇语📖 目录🎯 前言:鸿蒙日志系统究竟有多重要?🛠️ 鸿蒙 RN 日志系统的基础结构📜 1. 日志的作用⚙️ 2. 日志分类 🔧 如何在鸿蒙 RN 中使用日志系统🖋️ 1…...
【前端】【Nuxt3】Nuxt3中usefetch,useAsyncData,$fetch使用与区别
一、Nuxt3 中不同数据获取方式的请求行为对比 (一)总结:请求行为一览 useFetch 和 useAsyncData 是 Nuxt 推荐的数据获取 API,自动集成 SSR 与客户端导航流程。$fetch 是更底层的请求方法,不具备自动触发、缓存等集成…...
【Linux系统】Linux基础指令
l i n u x linux linux 命令是对 L i n u x Linux Linux 系统进行管理的命令。对于 L i n u x Linux Linux 系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件, L i n u x Linux Linux 系统管理的命令是它正常运…...
Android中Jetpack设计理念、核心组件 和 实际价值
一、Jetpack 的定义与定位(基础必答) Jetpack 是 Google 推出的 Android 开发组件集合,旨在: 加速开发:提供标准化、开箱即用的组件 消除样板代码:解决传统开发中的重复劳动问题 兼容性保障:…...
flutter开发音乐APP(前提准备)
1、项目的一些环境: 2、接口文档: 酷狗音乐 NodeJS 版 API 3、接口数据结构化 Instantly parse JSON in any language | quicktype UI样式借鉴参考: Coffee-Expert/Apple-Music-New-UI: Apple Music Clone on Flutter, with redesigned UI…...
网络协议学习
最近在适配ESP32的网络驱动,借此机会先学习一下网络通信协议。 以太网帧、IP包及TCP与UDP的报文格式 提问腾讯元宝提示词: TCP窗口是干什么的拥塞窗口是什么的...
示波器直流耦合与交流耦合:何时使用哪种?
直流耦合和交流耦合的基本区别应该在于它们如何处理信号的直流分量和交流分量。直流分量是指信号中的固定电压部分,而交流分量则是信号中变化的电压部分。 例如,一个5V的直流电压叠加了一个1V的正弦波交流信号,整个信号会在4V到6V之间波动。如…...
js解除禁止复制、禁止鼠标右键效果
有的网页会禁止复制,甚至禁止鼠标右键,如何解决 按F12进入检查模式,在控制台输入下面的js代码 1.解除禁止复制 document.addEventListener(copy,function(event){event.stopImmediatePropagation();},true); 2.解除禁止鼠标右键 document…...
如何把未量化的 70B 大模型加载到笔记本电脑上运行?
并行运行 70B 大模型 我们已经看到,量化已经成为在低端 GPU(比如 Colab、Kaggle 等)上加载大型语言模型(LLMs)的最常见方法了,但这会降低准确性并增加幻觉现象。 那如果你和你的朋友们把一个大型语言模型分…...
xwiki的权限-页面特殊设置>用户权限>组权限
官方文档https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/Access%20Rights/ 他有组权限、用户权限、页面及子页面特别设置。 页面特殊设置 > 用户权限 > 组权限 XWiki提供了设置wiki范围内权限、细粒度页面级权限的能力,以及在需要更多控制的…...
Go语言比较递归和循环执行效率
一、概念 1.递归 递归是指一个函数在其定义中直接或间接调用自身的编程方法 。简单来说,就是函数自己调用自己。递归主要用于将复杂的问题分解为较小的、相同类型的子问题,通过不断缩小问题的规模,直到遇到一个最简单、最基础的情况&#x…...
Windows 图形显示驱动开发-WDDM 2.0功能_供应和回收更改
供应和回收更改 对于 Windows 显示驱动程序模型 (WDDM) v2,有关 套餐 和 回收 的要求正在放宽。 用户模式驱动程序不再需要在内部分配上使用套餐和回收。 空闲/挂起的应用程序将使用 Microsoft DirectX 11.1 中引入的 TrimAPI 删除驱动程序内部资源。 API 级别将继…...
MongoDB 新手笔记
MongoDB 新手笔记 1. MongoDB 1.1 概述 MongoDB 是一种 文档型数据库(NoSQL),数据以类似 JSON 的 BSON 格式存储,适合处理非结构化或半结构化数据。 对比 MySQL: MySQL 是关系型数据库,数据以表格形式存…...
Pytorch查看神经网络结构和参数量
基本方法 print(model) print(type(model))# 模型参数 numEl_list [p.numel() for p in model.parameters()] total_params_mb sum(numEl_list) / 1e6print(fTotal parameters: {total_params_mb:.2f} MB) # sum(numEl_list), numEl_list print(sum(numEl_list)) print(numE…...