软件测试
2023-12-13 12:21:26 0 举报
AI智能生成
软件测试
作者其他创作
大纲/内容
精准测试概念
功能覆盖
1,新功能覆盖+基于经验的历史功能回归
2,新功能覆盖+基于经验的历史功能回+专项测试
专项测试
范围
核心业务功能产品特性
思路
确定指标,如何衡量
数据
数据类型覆盖引入线上数据
触发
自动化
思考
代码有变更
无法获知变更影响哪些功能
无法精确的选取测试用例
不得不全量回归
传统软件测试的主要短板
第一大短板:测试的维护成本日益升高。
传统测试用例数量的增长会导致测试用例的代码覆盖率增长,但当覆盖率到达一定的数值时(75%左右),则出现了增长瓶颈,这时为了维护一个庞大的测试用例集,以保证产品新特性和老功能的正确性与稳定性,使覆盖率继续增长,需要花费越来越多的时间和人力成本
第二大短板:测试过程的低效。
随着软件功能的不断丰富,相应测试用例集也愈加庞大,这时难免会出现“杀虫剂”效应,即:测试用例越来越多,而产品的“免疫力”也越来越强,测试效果却不明显。 造成这种问题的原因是,我们在测试早期已经发现了80%的软件缺陷,除非再花费巨大的人力和时间成本分析并增加大批量的测试用例,否则后期新增的测试用例已经很难再发现新的缺陷。
第三大短板:缺乏有效的回归用例选取机制。
在传统测试理念中,每次添加新功能或者修复缺陷,一般都需要在产品上线前进行一轮全回归测试,哪怕这次的改动只有一行代码。但是,全回归测试的测试用例数量以及执行代价一般都比较大。 这里,我们之所以要采用全回归测试,是因为我们无法准确地知道这次更新到底会影响哪些功能,也无法知道应该从测试用例集中选取哪些必要的测试用例,无奈之下只能两眼一抹黑地执行全部用例。
第四大短板:测试结果的可信度不高。
在传统软件测试中,人工因素占据了测试数据的统计分析的绝大部分比重,由此导致测试数据本身的技术公信力不够高,进而需要依靠管理手段来保证真实的测试数据被准确地记录。这种做法不仅可靠性差,而且执行成本高。
第五大短板:无论是白盒测试技术还是黑盒测试技术都有其局限性。
如果完全基于黑盒测试,那么注定无法深入代码实现的细节,也就无法做到有的放矢地设计测试用例;而如果基于白盒测试技术,为了保证代码质量,往往会采用代码级测试和代码覆盖率技术。 但是,这些测试方法都强依赖于产品代码,一旦代码发生改变,很多测试都会因此失效,因此很难适应快速迭代的开发流程。 另外,由于目前的代码级测试和代码覆盖率技术还不支持测试用例级别的覆盖率分析,而是要将所有测试结果混在一起,导致白盒测试时无法区分代码覆盖率的贡献到底来自于哪个测试用例,这将极大地限制白盒测试工具在测试结果分析上的作用。
测试分类
测试方法
白盒测试
单元测试的目的在于发现各模块内部可能存在的各种错误,
主要是基于白盒测试
在C++这种面向对象的语言中,要进行测试的基本单元是类
或类的方法
单元测试的目的
验证代码是与设计相符合的
跟踪需求和设计的实现
发现设计和需求中存在的错误
发现在编码中引入的错误
单元测试的内容
模块接口
局部的数据结构
独立路径
出错处理
边界处理
单元测试环境
测试用例
驱动模块
接收测试数据,并把数据传送给要测试的模块,对被测试模块的输出和期望值进行比较,打印测试结果
被测试单元
桩
模拟替代那些隶属于本单元的模块,需要针对不同的输入,返回不同的期望值,模拟不同的功能
单元测试的开展
确定被测试对象,模块主要功能,以及和其他模块的关系
确定应测试的特性(有些特性只能在集成测试或系统测试阶段才能进行),各被测试模块的具体测试对象(如类的方法)
分析被测试单元之间的关系,画出他们之间的关系图,根据被测试对象的结构关系确定测试策略
根据结构图和测试策略,定义操作流程,包括驱动,桩,测试代码的添加
测试需求:
环境需求,被测试对象的特殊要求,测试工具要求,测试代码(桩,驱动函数,测试脚本)要求,测试数据要求
举例: 1. 确定模块之间的测试流程
商业规则排序主要的模块:
RankConfig模块实现解析se.conf中business_ranks节点内的配置项
GeneralRankFrame模块 实现商业规则排序的逻辑控制
基于模块之间的上述关系, 测试过程中各模块测试先后顺序如下:
RankConfig模块――》BoostObjects模块――》GeneralRankObject模块――》GeneralRankFrame模块
GeneralRankObject模块: 实现排序算法
BoostObjects模块:实现主要的数据结构
1.确定被测单元的应测试特性,和不被测试的特
应测试特性
不被测试的特性
2. 确定被测模块内部的结构关系
如:商业规则排序中RankConfig模块内部的结构关系图
子主题 1
3. 确定测试策略
自顶向下策略
先对最顶层的单元进行测试, 把顶层所调用的单元做成桩模块.
其次对第二层进行测试,使用上面已测试的单元作为驱动模块,如
此类推直到测试完所有的模块
自底向上策略
先对模块调用层次图上最底层的模块进行单元测试,模拟调用该模块的模块
作驱动模块.然后再对上面一层做单元测试,用下面已经被测试过的模块作
桩模块,依次类推,直到测试完所有的模块
独立测试策略
不考虑每个模块与其他模块之间的关系,为每个模块设计桩模块和驱动模
块,每个模块进行独立的单元测试
4. 逻辑覆盖---
语句覆盖法
设计若干个用例(越少越好),程序执行起来时保证每条可执行语句至少被执行一次
子主题 2
子主题 3
分支覆盖
设计若干个用例(越少越好),程序执行起来时保证每个分支的取真取假分支至少被执行一次
子主题 2
子主题 3
覆盖了分支一定覆盖了语句
条件覆盖法
子主题 1
子主题 7
设计若干个用例(越少越好),程序执行起来时保证每个条件的取真取假情况至少被执行一次
条件A>1取真标记为T1,取假标记为F1;
条件B==0取真标记为T2,取假标记为F2;
条件A==2取真标记为T3,取假标记为F3;
条件X>1取真标记为T4,取假标记为F4;
分支条件覆盖法
因为覆盖了条件,不一定覆盖了分支,所以有了分支条件覆盖
设计足够的测试用例,使得判定中每个条件的所有可能至少执行一次,并且每个判定本身的判定结果(即分支)也至少出现一次
子主题 3
子主题 4
子主题 5
路经覆盖法
分支条件法设计的测试用例覆盖了条件的组合,同时覆盖了分支,但是从路经覆盖角度漏掉了路经acd, 路经覆盖法就是设计足够的用例,要求覆盖程序中所有可能的路经
子主题 2
子主题 3
基本路经覆盖法
因为做到完全的路经覆盖有时候无法实现,所以引出了基本路经覆盖法,把覆盖的路经数压缩在一定的限度内
主要步骤:
根据程序流图
得到程序的控制流图
算出环路复杂度
导出基本可执行路经集合
设计测试用例确保基本路经集中每一条路经的执行
控制流程图
子主题 1
控制流图元素:
圆圈表示一个或多个没有分支的源程序语句
箭头表示边,表示控制流的方向
程序环路复杂度:
就是程序基本路集中的独立路经数量,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。
程序的环路复杂性和区域数一致
独立路经:至少包含一条在其他独立路经中从未有过的边的路经
Path1:1-11
Path2:1-2-3-4-5-10-1-11
Path3:1-2-3-6-8-9-10-1-11
Path4:1-2-3-6-7-9-10-1-11
这4个路经组成了控制流图的一个基本路经集
基路径集
子主题 1
基路径集:
a->7
a->b->7
a->b->2->5->7
a->b->2->3->4->7
a->b->2->3->6->a->7
其他
循环路经测试
简单循环
连锁循环
嵌套循环
等价类划分
边界值分析
代码行小于30的函数不需要做单元测试,通过代码走读保证函数质量
对代码行大于200的函数建议重构,内部逻辑太复杂
为了提高测试效率,建议单元测试中采用黑盒测试用例设计方法为主,白盒测试用例设计为辅的方法
对全新的代码和修改过的代码进行单元测试
单元测试要按照测试方案进行,排除测试的随意性
单元测试的执行建议使用自动化测试框架
单元测试应该体现在代码的每日构建中
黑盒测试
黑盒测试也称为功能测试,它着眼于程序的外部特征,而不考虑程序的内部逻辑结构。测试者把被测程序看成一个黑盒,不用关心程序的内部结构。黑盒测试是在程序接口处进行测试,它只检查程序功能是否能正常使用,程序是否能接收输入数据产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。黑盒测试是基于用户角度进行的测试。
探索性测试
灰盒测试
可以理解为静态的白盒测试或动态的黑盒测试,灰盒就是界于黑白之间, 对软件内部有所了解, 但不见得到了如指掌的程度, 却可以结合这些了解做些比黑盒多点的测试。
文档测试
文档测试涵盖面很大,在软件的各个版本中均有所使用。随着软件版本的变化,文档测试的测试内容也有所变化。在需求分析以及原型架构阶段,文档测试主要目标是: Sitemap、动作分解列表、数据库ER图、UML用例图、流程图、需求文档等文档。
文档测试主要检查文档的正确性、完整性和可理解性。正确性是指不要把软件的功能和操作写错,也不允许文档内容前后矛盾。完整性是指文档不可以漏掉关键性内容。可理解性是指在文档中描述的语言要简明易懂,不能让别的开发人员拿到文档时看不懂文档的内容。
命名规范测试
命名规范测试用于测试项目中的文件命名、代码以及版本号等书写是否符合规范。文件命名规范以及版本号命名规范可以参看第四部分里软件命名规范的详细信息;各种语言的命名规范可以参考语言自身的规范,如NoahWeb的可以参考 http://docs.noahweb.net附录中的《NoahWeb各类资源命名规范》。
需求完整性测试
需求完整性测试主要存在于需求探索阶段,在需求尚未完全明确之前对已收集到的需求做出整理性的、检查遗漏性的测试,确认需求是否明确。另外,需求完整性测试也承担着一部分澄清需求的任务。
链接完整性测试
在原型架构阶段,链接完整性的测试是非常有必要的。该项测试任务主要是检查假页面中各种链接是否完整,是否指向目标位置,属于检查性的测试。
页面完整性测试
页面完整性测试主要存在于集成测试阶段以及其后续其它阶段中,测试页面是否完整,页面质量是否达标,属于检查性测试。
UI合理性测试
UI合理性测试也就是人机交互界面的合理性,UI合理性测试的内容很多,具体测试内容如下:
提示、菜单、帮助的格式是否一致;
提示、菜单、帮助中的术语是否一致;
各个控件之间的对齐方式是否一致;
输入界面和输出界面在外观、布局、交互方式上是否一致;
功能类似的相关界面在外观、布局、交互方式上是否一致;
同一层次的文字在同一种提示场合(一般情况、特殊字体、警告等)在文字大小、字体、颜色、对齐方式方面是否一致,字体大小 是否与界面的大小比例协调;
多个连续界面依次出现的情况下,界面的外观、操作方式是否一致;
系统是否拒绝客户的错误输入并做出提示;
系统是否在用户完成操作时给出操作成功的提示;
用户界面是否存在空白空间,没有空白空间的界面是杂乱无章的,易用性差;
各个控件的间隔是否一致,垂直和水平方向上是否对齐;
是否允许动作的可逆性,返回原有操做;
数据和数据库完整性测试
因为在开发阶段开发人员随时都有可能根据需要来修改数据库,所以对数据和数据库完整性测试在软件项目的任何阶段也是非常必要的。该项测试内容主要是以数据库表为单位,检查数据库表以及表中各字段命名是否符合命名规范,表中字段是否完整,数据库表中的字段描述是否正确包括字段的类型、长度、是否为空,数据库表中的关系、索引、主键、约束是否正确。
功能测试
功能测试在软件项目的任何阶段中都是重要的。实现功能,满足客户需求是软件本身最大的使命。功能测试在任何阶段下基本上都作为测试工作的第一项出现。该项测试任务主要为了测试已实现的功能是否满足需求,是否正确,是否有价值以及是否完整。在黑盒和白盒测试状态下,该测试均会被使用。
功能测试中测试人员往往会忽略掉一些细节问题,比如:一个功能的实现必须要经过6步操作才能完成,而且需要加入20条信息才能看得出测试结果,有的测试人员为了节省时间虽然做完了6步操作,但是没有加入足量的信息,,使得测试不全面,正是因为这样而导致一些隐藏的BUG没有被测试出来。所以说在功能测试中要按部就班的把所有要进行的测试功能每一步都执行一遍,应该添加的数据都添加完整,以避免遗漏掉BUG没有测试出来。
压力测试
压力测试是为了发现在什么条件下您的应用程序的性能会变得不可接受。这通过改变应用程序的输入以对应用程序施加越来越大的负载并测量在这些不同的输入时性能的改变来实现的。这种操作也称为负载测试,但是负载测试通常描述一种特定类型的压力测试——增加用户数量以对应用程序进行压力测试。
对应用程序进行压力测试最简单的方法是手工改变输入(客户机数量、需求大小、请求的频率、请求的混合程度等等)并描绘性能的变化。但是如果有许多输入,或者需要在大的范围内改变输入,那么你可以借助一个自动化的压力测试工具来完成此测试。
安全性测试
安全性测试主要是测试系统在没有授权的内部或者外部用户对系统进行攻击或者恶意破坏时如何进行处理,是否仍能保证数据和页面的安全。测试人员可以学习一些黑客技术,来对系统进行攻击。 另外,对操作权限的测试也包含在安全性测试中。具体测试内容如下:
执行添加、删除、修改等动作中是否做过登录检测。
退出系统之后的操作是否可以完成。
所有插入表单操作中输入特殊字符是否可以正常输正常存储,特殊字符为:!?#¥%……—*()~——-+=[]{}、|;:‘”?/《》<>,。
在带有参数的回显数据的动作中更改参数,把参数改为特殊字符并加入操作语句看是否出错。
测试表单中有没有做标签检测,标签检测是否完整。
在插入表单中加入特殊的HTML代码,例如:<marquee>表单中的字本是否移动?</marquee>。
页面脚本测试
页面中时常使用到JavaScript脚本,为了降低页面的出错率,则必须对页面脚本进行测试。其主要内容包括:相关页面中的脚本是否正常运行,JavaScript脚本是否有错误页面。
提示文本测试
提示文本测试从严格意义上来讲应该属于UI合理性测试的一部分,该项测试主要针对各个页面中使用到的大量提示文档进行测试,主要包括:表达不明确的位置是否有提示文本、提示文本的弹出是否正常、提示信息含义是否明确易懂。
浏览器测试
由于B/S结构项目是基于浏览器运行的,所以需要对浏览器进行必要的测试。该测试任务主要是软件对各种浏览器(IE5.5、IE6.0、 FireFox浏览器 )的支持是否正常,在IE浏览器中可以正常显示的页面在其它浏览器中是否可以正常显示。
安装测试
在软件项目的后期阶段,会对做好的软件进行打包把软件做成安装程序,以便用户可以正确的安装使用,所以需要对做好的安装文件进行安装功能方面的测试。该测试的主要任务是:检查软件是否能够正常安装使用、是否可以完全卸载此软件的所有功能和页面。
自定义测试
在常规测试时可能表中的测试项不能满足测试要求,如果有特殊测试项请测试人员自己定义修改测试的类型。
程序运行状态
静态测试
动态测试
软件阶段
单元测试
集成测试
系统测试
验收测试
回归测试
alpha测试
Btea测试
测试类型
功能测试
负载测试
压力测试
性能测试
大数据测试
易用性测试
安装测试
恢复测试
安全性测试
兼容性测试
内存泄漏测试
竞品测试
可靠性测试
文档测试
服务类型
手机端测试
pc端测试
软件测试基础
软件测试的发展方向
执行层
功能(初级-专职过渡阶段)
性能(初级)
自动化(初级)
安全(初级)
白盒(初级)
业务(初级)
小组长,主管(初级)
质量保证工程师SQA(专职业务线)
管理层
测试分析师(专职-领导过渡阶段)
测试架构师初级专职-领导过渡阶段)
测试经理(执行领导-管理路线)
QA经理(执行领导-业务路线)
产品经理(执行领导-业务线)
项目经理(执行领导-技术路线)
系统分析师
测试培训师
中高层过渡
测试总监
产品总监
行业资讯顾问
研发总监
项目总监
软件测试的基本概念和原理
软件测试的定义
目的
分类
测试过程
测试方法
测试策略
软件测试的测试技术
黑盒测试
白盒测试
灰盒测试
随机测试
回归测试
性能测试
安全测试
压力测试
软件测试的测试工具
测试管理工具
缺陷管理工具
自动化测试工具
软件测试的质量保证
质量标准
质量度量
质量评估
软件测试的管理
测试计划
测试用例设计
测试执行
测试报告
测试计划如何编写
确定测试目标和范围
明确测试的目标和测试范围
软件版本
功能
性能
安全
确定测试方法和策略
根据测试目标和范围,选择相应的测试方法和策略
黑盒测试
白盒测试
自动化测试
制定测试计划
根据测试目标、范围、方法和策略,制定详细的测试计划
测试环境
测试用例
测试时间
测试人员
测试工具
编写测试用例
根据测试计划,编写详细的测试用例
步骤
预期结果
实际结果
执行测试
根据测试计划和测试用例,执行测试
记录测试结果
记录问题
分析测试结果
对测试结果进行分析
分类
严重程度
原因
编写测试报告
根据测试结果和分析,编写详细的测试报告
测试概述
测试结果
问题
建议
测试报告如何编写
概述
对测试的目标、范围、方法、策略等进行简要概述,以便读者了解测试的基本情况
测试结果
对测试过程中的所有测试结果进行记录,
包括测试通过的用例、
未通过的用例
未执行的用例等
问题列表
对测试过程中发现的所有问题进行记录
问题的描述
严重程度
原因
解决方案
建议
根据测试结果和问题列表,提出相应的建议
改进测试方法
改进软件设计
修复问题
总结
对整个测试过程进行总结
测试的优点
缺点
不足
建议
测试报告的编写应该注意以下几点
简明扼要:测试报告应该简洁明了,突出重点,避免冗长和重复。
准确无误:测试报告应该准确无误,所有数据和信息应该经过验证和确认。
规范统一:测试报告应该符合规范和标准,格式和样式应该统一。
重点突出:测试报告应该突出重点,重要的信息应该放在显眼的位置。
逻辑清晰:测试报告应该逻辑清晰,信息的组织和呈现应该合理有序。
测试方法
黑盒测试方法
1)等价类划分法
2)边界值法
3)因果图法
4)判定表法
5)正交排列法
6)测试大纲法
7)场景法
白盒测试方法
白盒测试是一种测试方法,它通过对软件内部结构的了解和分析,来设计测试用例,以检查软件的正确性、完整性和优化性。
语句覆盖测试:测试用例能够覆盖软件中的每一个语句,以检查每一个语句是否正确执行。
判定覆盖测试:测试用例能够覆盖软件中的每一个分支,以检查每一个分支是否正确执行。
条件覆盖测试:测试用例能够覆盖软件中的每一个条件,以检查每一个条件是否正确执行。
路径覆盖测试:测试用例能够覆盖软件中的每一条路径,以检查每一条路径是否正确执行。
边界值测试:测试用例能够覆盖软件中的边界值,以检查软件在边界值处是否正确执行。
错误处理测试:测试用例能够覆盖软件中的错误处理代码,以检查软件在出现错误时能否正确处理。
白盒测试方法的选择应该根据软件的特点和测试目标来确定,以保证测试的全面性和有效性
灰盒测试方法
灰盒测试是介于白盒测试和黑盒测试之间的一种测试方法,它既考虑了软件的内部结构,也考虑了软件的外部行为。
数据库测试:测试数据库的正确性、完整性和安全性,以保证软件的数据存储和处理功能正常。
界面测试:测试软件的用户界面,包括界面的布局、颜色、字体、交互等,以保证软件的易用性和美观性。
集成测试:测试软件的不同模块之间的集成,以检查模块之间的接口是否正确,以及模块之间的交互是否正常。
性能测试:测试软件的性能和稳定性,包括响应时间、负载能力、并发能力等,以保证软件的可靠性和可扩展性。
安全测试:测试软件的安全性,包括网络安全、数据安全、用户身份验证等,以保护软件的安全和用户的隐私。
测试的数据准备如何做的
测试数据准备是测试工作中非常重要的一环,它直接影响测试的质量和效率。
测试数据准备的主要步骤包括以下几个方面:
定义测试数据需求:根据测试用例和测试目标,定义测试数据的类型、格式、数量和质量等需求。
收集测试数据:根据测试数据需求,收集测试数据,包括手动输入、从生产环境中提取、从第三方数据源中获取等方式。
组织测试数据:将收集到的测试数据进行分类、整理和归档,建立测试数据库或测试数据仓库,以便于管理和使用。
清洗测试数据:对测试数据进行清洗和处理,包括去重、去噪、格式化、转换等操作,以保证测试数据的准确性和一致性。
生成测试数据:对于某些特定的测试场景,需要生成特定的测试数据,可以使用测试数据生成工具或编写脚本进行生成。
验证测试数据:对于重要的测试数据,需要进行验证和审查,以保证测试数据的正确性和合法性。
测试数据准备需要根据具体的测试需求和测试类型来确定,同时需要注意测试数据的保密性和安全性,避免敏感信息泄露和数据损坏。
软件的生命周期
过程质量
story质量
story描述更详细
UI/UX输出
关联功能联动
沟通质量
story串讲
评估并记录story测试需要的时间
开发反串讲
根据开发描述概要设计,优化测试点
测试点串讲
做好记录并根据记录修改测试点
开发质量
开发自测
测试驳回次数
转测率
sotry转测时间点需要明确
bug数量
模块bug数量横向比对
bug反复修改次数
bug 重复次数出现
模块问题率收集
用来指导测试策略
测试质量
晨会
晨会直说三件事:进度,风险,问题(建议)没人尽量控制在1分钟。
版本封板质量会
release封板当天(周五)下午
版本遗留问题,各模块风险收集,第二天回归测试策略制定
story用例使用飞书思维导图编写
方便评审和测试方向指引
复制思维导图副本来记录测试结果,使用颜色来标注测试用例执行状态
通过
失败
失败需要简述并且给出猪齿鱼bug信息
暂不执行
产品质量
开发
代码静态扫描门禁
自动化测试门禁
可测试性植入
给input,span,button加卫衣标识属性
测试
更加符合敏捷测试的测试策略的制定
story思维导图用例执行
每轮手机思维导图测试结果
回归测试
基线excel用例的维护
基于基线用例的自动化
基线以外的专项自动化
根据测试点分析回归重点
release的回归测试
以后依赖自动化
tc作为灰度的回归测试
手工+自动化
二开始用流量回放
测试分析
根据bug分布模块和功能分析
知道测试策略
根据每次p0,p1问题分析
查漏补缺
人员能力
功能测试
后续捉奸通过模块交换测试的方法,让所有测试掌握尽量多的模块
自动化测试
自动化测试培训
多组织交流
学习和编写自动化需要额外的时间
自动化框架的确定和ui自动化基本库的确定,底层封装
按照责任田维护的方式分配
ui自动化
api自动化
普通api自动化
单接口
调用链
契约测试
性能测试
测试心得
测试流程
测试人员软素质
测试质量保证
测试流程完善
自动化流程
自动
手工
工具
质量控制机制
前期
问题都是Dev leader和PM商量说了算
后期
项目的主动权都在测试这边,某个bug的要不要解决,或者项目进度控制都是测试leader说了算。
对参与的经过负责
测试用例及管理
效率
快
快的前提是什么
测试工具
Fiddler
Drip
httpwatch
IE DevToolBar
PaintNotNet
procexp
测试人员的专业素质
专业
白盒测试
代码进行Review
意识(时间,质量)
时间意识
质量意识
风险意识
项目组的每个成员都被明确告知,如果这个项目每delay一天,就会损失多少个million的美元
培训
互相分享的习惯
培训文档
测试数据记录
系统自动的,每天都是由系统自动统计当天的bug情况,然后发送一个report到每个项目组成员的邮箱里。最后到测试总结的时候,这些测试数据将变得非常有用。
0 条评论
下一页