软件测试基础知识
1.测试模型
-
瀑布模型
开发将系统都做好了,然后测试。最大问题是测试工作后置,导致整个项目开发完成之后如果发现比较重要的问题,修改的成本是非常大的。 -
V模型
将测试过程细化,分为单元测试,集成测试,系统测试和验收测试,但没有解决测试后置问题。 -
W模型
将测试和开发过程分离出来,对整个项目过程中的需求文档,设计文档同样要进行测试,将测试工作前置,大大降低整个项目的质量风险。 -
敏捷模型(目前流行使用)
主要特点就是为了适应现代互联网公司的“短频快”的开发节奏而设计的一种测试和开发的模型。
迭代:每次迭代叫做一个sprint,每个sprint里面选出来要实现的需求会安排到sprint backlog里面。每个sprint一般是以一个月作为一个周期。
通俗的理解就是一个系统有很多的功能模块,每次迭代取出一个或几个功能实现,然后进行测试,测试没有问题就上线发布。 -
其他模型
还有H模型,X模型,前置模型
2.测试分类
-
按阶段划分
单元测试:某个特定函数的行为。开发人员进行白盒测试。
集成测试:模块之间的依赖接口。以黑盒测试为主,使用postman进行接口测试。方法有非增量式集成测试(一步到位),增量式集成测试(自顶向下增量式,自低向上增量式,三明治集成)。
确认测试:软件功能,性能及其他特性是否与用户要求一致。以黑盒测试为主,包括功能测试,兼容性测试,压力测试。
系统测试:整个软件系统与计算机硬件。以黑盒测试为主,包括功能测试,兼容性测试,压力测试。
验收测试:用户参与测试。以黑盒测试为主,是用户对软件最终检查。 -
按执行状态划分
动态测试:运行被测试的程序,构造测试实例,执行程序及分析程序的输出结果
静态测试:不运行被测试的程序 -
按测试技术划分
白盒测试:检测产品内部的结构及检验程序中的每条通路是否都能接通,按照预定要求正确工作。
黑盒测试:不考虑程序内部结构和特性。
灰盒测试:测试各个组件之间的逻辑关系是否正确,采用桩驱动把各个函数按照一定的逻辑串起来。 -
按执行主体划分
验收测试:开发者和用户共同去检测与证实。
用户测试:通过用户大量使用的评价,检查软件,用户使用性测试。
第三方测试:第三方测试机构来进行 -
按不同手段划分
手工测试
自动化测试(通过工具或者代码) -
按测试产品划分
移动端测试
web端测试 -
按测试包含的内容划分
功能测试
界面测试
安全测试:关注指标为数据要加密传输,防止溢出,sql注入,抓包工具获取信息,病毒攻击,数据存储。
兼容性测试
易用性测试
可靠性测试
安装测试:下载安装,卸载,重新安装,中断等。
性能测试:关注指标有CPU,内存,响应时间,闪退,卡顿。 -
按测试流程划分
冒烟测试:目的是为了测试这个需求的主流程,主干功能是否正常。
需求测试:测试新开发的需求功能是否正常。
回归测试:测试整个系统功能是否正常,没有被新开发的需求影响出错。
回归测试策略:
1.完全回归
2.选择性回归(3种方法)
a.覆盖修改法:针对被修改的部分,选取或重新构造测试用例验证没有错误。
b.周边影响法:包含覆盖修改法确定的用例,还需要分析修改扩散影响,对那些收到修改间接影响的部分选择测试用例验证它没有错误。
c.指标达成法:类似单元测试的方法,在重新执行测试前,先确定一个要达成的指标,如修改部分代码100%覆盖,与修改有关的接口60%的覆盖,基于这种要求选择一个最小的测试用例集合。
3.测试目的与原则
-
目的
检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 -
原则
证伪而非证真,
尽早地和不断地进行测试,
重视无效数据和非预期的测试,
对测试结果做全面检查,
测试现场保护和资料归档,
程序员应避免检查自己的程序,
注意群集现象,
用例要定期评审。
4.测试流程
测试计划:了解测试需求,安排测试人员,时间及资源。
测试设计:根据测试需求提取测试要点,编写测试用例
测试开发:建立可重复使用的自动化测试过程。(可有可无)
测试执行:冒烟测试,需求测试,回归测试。执行测试用例,提交bug,跟踪bug,验证bug被解决。
测试评估:确保缺陷全部被解决,编写测试报告。
通俗理解:开发给测试讲解需求,然后测试从需求提取测试要点,出一个思维导图,然后编写测试用例,开始进行冒烟测试,主干流程能走通之后进行需求测试,如有bug,则跟开发沟通,待bug解决之后再次验证,最后进行回归测试,对系统其他功能进行测试,看是否有被新加入的功能影响到,测试没有问题之后,就写测试报告,总结一下此次测试,最后与开发沟通封版,上线。
5.测试发展规划
初级测试工程师—中级测试工程师—高级测试工程师—测试组负责人—测试开发
- 技术方向
自动化测试,接口测试,性能测试,测试开发,安全测试,测试架构师 - 管理方向
测试经理,项目经理,SCRUM MASTER,测试/质量总监 - 业务方向
业务测试专家(银行,金融),需求分析师,产品经理
6.单元测试
- 主要任务
模块接口测试:全局变量定义一致性,调用参数
局部数据结构测试:数据的定义和使用
边界条件测试:循环边界,输入边界
执行路径测试:关键路径,重要路径 - 步骤
驱动模块:相当于被测模块的主程序,用于接收测试数据,并把这些数据传送给被测模块,启动被测模块,最后输出实测结果。
桩模块:用来模拟被测模块工作过程中所调用的模块,一般只进行很少的数据处理。
7.黑盒测试
-
黑盒测试划分
功能测试:逻辑测试,界面测试,易用性测试,安装测试,兼容性测试
性能测试:一般性测试,稳定性测试,负载测试,压力测试 -
黑盒测试方法
(1)等价类划分
有效等价类:合理的,有意义的输入数据构成的集合
无效等价类:无意义,不合理
比如:密码8-10位
有效等价类:8-10位密码 。 无效等价类:0-7,10位以上
(2)边界值分析
一般边界值分析:取值为min,min+,normal,max-,max,测试用例数为4n+1。
健壮性边界值分析:取值为min,min+,min-,normal,max-,max,max+,测试用例数为6n+1
比如:8-16位
一般边界值分析取值:8,9,8-16其中一位,15,16 。 健壮性边界值分析:7,8,9,8-16其中一位,15,16,17
(3)决策表
(4)因果图
适用于描述多种输入条件组合,相应产生多个动作的方法。原因-结果图,约束图
(5)场景法:基本流即软件操作步骤,备选流即操作过程遇到的问题。 -
几类错误
功能不正确或遗漏
界面错误
数据库访问错误
性能错误
8.白盒测试
对代码的测试,一般由开发完成。
-
白盒测试划分
静态白盒测试:不执行的条件下审查软件设计,体系结构和代码
动态白盒测试:通过查看并使用代码的内部结构和执行测试 -
白盒测试方法
逻辑覆盖法:语句覆盖,判定覆盖,条件覆盖,条件判定覆盖,修正条件判定覆盖,条件组合覆盖,路径覆盖。
路径分析法:绘制控制流图—计算复杂性—确定独立路径的集合—测试用例生成
控制结构测试:条件测试(<,=,or),循环测试(简单循环,嵌套循环,串接循环),路径覆盖(舍弃一些次因素,减少路径的数量,只考虑通过循环体零次和一次这两种情况)
数据流测试:变量定义测试,程序片法。
9.缺陷
-
缺陷内容
缺陷标识:使用数字序号表示
缺陷类型:功能,用户界面,文档,软件包,性能,系统/模块接口
缺陷严重程度:致命,严重,一般,较小
缺陷产生的可能性:总是,通常,有时,很小
缺陷优先级:立即解决,高优先级,正常排队,低优先级
缺陷状态:激活或打开,已修正或修复,关闭或非激活,重新打开,推迟,保留,不能重现
缺陷来源:需求说明书,设计文档,系统集成接口,数据流(库)
缺陷流程:开始—打开—已分配—已解决—已验证—已关闭—结束 -
缺陷分析方法
缺陷分布分析
缺陷趋势分析
注入-发现矩阵分析 -
bug状态标准
待处理:发现新问题后提交的状态
已确认:经测试人员及研发人员讨论后确认是bug,提交的状态由测试人员来设置
已处理:经研发人员确认是BUG后修复的状态,修改还没有验证
已修改:测试人员认为问题已经修改,通过验证,由测试人员设置
仍存在:测试人员认为BUG未修复成功,问题仍然存在,由测试人员设置
不是问题:研发人员确认不是BUG
暂不处理:当前版本不做修改,后续版本再考虑,由研发人员或测试人员设置
10.测试证书
对于干测试有用的证书,另外其他IT行业的有用证书。在找工作的时候属于加分项。不一定非要考证,有兴趣有时间的话也可以当作一个学习的目标。
-
软件测试
计算机等级考试(二级)
计算机等级考试(三级)
国际软件测试资质认证项目ISTQB(基础级)
项目管理专业人员资格认证(PMP)
软件测评师(软考)
系统集成项目管理师
国际软件测试资质认证项目 -
开发
软件设计师
系统集成项目管理师
信息系统项目管理师
前端app开发:Android(Java,Kotlin),IOS(Objective-C,Swift)开发语言认证 -
业务需求分析
系统分析师
产品经理国际资格认证(NPDP) -
质量保证
软件评测师
注册软件质量保证师 -
数据开发
大数据助理工程师(ACA)
大数据工程师(ACP) -
数据治理
助理数据治理师(CDGA)
高级数据治理师(CDGP) -
信息安全
ISO27001
CCNA
国际信息系统审计师(CISA)
CCNP
BS7799LA
注册信息安全专业人员(CISP);同等标准资质或中级职称
防病毒专业认证
信息系统安全专业认证(CISSP);同等标准资质或中级职称 -
运营族-项目管理
软件造价工程师
系统集成项目管理师
项目管理专业人员资格认证(PMP)
信息系统项目管理师
拥有社会或行业认可的中高级职称/专业任职资格
11.自动化测试
-
适合自动化的项目
需求稳定,不会频繁变更
研发和维护周期长,需要频繁执行回归测试
需要在多种平台上重复运行相同测试的场景
性能,兼容性通过手工测试无法实现,或者手工测试成本高
被测软件的开发较为规范,能够保证系统的可测试性
测试人员具备一定的编程能力 -
自动测试原则
一般集中在需要重复测试的基本功能,基本业务流以及正向路径操作,不要复杂的异常测试,不要复杂业务流程操作
用例之间保持独立性,最好不要形成依赖关系
自动化测试如果对数据进行了修改,在测试结束后,应尽量保持还原,避免对其他用例执行产生影响
每个自动化测试用例只能验证一个功能点 -
自动化测试的LOVE四步法
12.接口测试
13.测试用例设计方法
-
等价类划分法
有效等价类,无效等价类 -
边界值分析法
-
错误推测法
根据经验或直觉推测程序中可能存在错误 -
判定表法
适合逻辑判断复杂的场景,通过穷举条件获得结果 -
正交实验法
在各因素互相独立的情况下,设计出一种特殊的表格,找出能以少数替代全面 -
因果图法
-
场景法
-
大纲法
测试用例基本要素: 编号, 标题, 重要级别, 输入限制, 操作步骤, 预期结果.
14.web界面测试
(1)界面测试问题
- 文字或图片重叠
- 文字或图片剪裁
- 文字或图片没对齐
- 重复菜单项或链接
- 提示信息错误
- 各个页面的样式风格是否统一
- 各个页面的标题是否正确
- 导航处是否按相应的栏目级别显示,导航文字是否在同一行显示
- 文章列表页左侧的栏目是否与一级,二级栏目的名称,顺序一致
- 提示,警告或错误说明应清楚易懂,用词准确,摒弃模棱两可的字眼
- 所有的图片是否都被正确装载,在不同款的浏览器,分辨率下图片是否能正确显示
- 切换窗口大小
- 按钮大小,位置
- 菜单项
- 识别鼠标操作,多次点击,无规则点击,右键
- 控件,描述信息字体大小统一
- 快捷键和菜单选项
- 滚动信息或图片
- 调整显示器分辨率
- 鼠标移动到flash焦点时特效,离开时
- 术语和命令统一
(2)功能测试(连接,按钮,本身应该具有的功能,提示问题)
- Tooltip不显示
- JS错误问题
- 页面链接错误
- 页面访问资源不可用
- 出现"404页面错误"
- 按钮不工作
- 功能未实现
- 错误信息提示不合理
- 数据库访问错误
- 文档无法下载
(3)表单测试(边界值测试,等价类测试,异常类测试)
1)文本框测试常见验证点
- 输入正常
- 输入已存在
- 输入超长字符串
- 输入默认值和空格
- 只输入字母或数字
- 利用复制,粘贴输入
- 输入特殊字符集,如"NULL",“\n”
- 输入中文,英文,数字,特殊字符组合
- 输入不符合格式的数据
- 输入HTML语言
- 输入全角,半角的英文,数字,特殊字符
2)特殊输入域测试常见验证点
- 密码框: 可见? 全部空格? 大小写敏感? (比如:密码3位, 输入6个空格成功了, 密码和确认密码不一致却成功了)
- 日期: 不符合格式的数据; 无效日期; 写未来日期; 结束日期没设置在开始日期之后
- 电话:含英文字母? 分机号中间用破折号分隔
- 邮政编码:国内全是数字, 英国是字母与数字组合
- 电子邮件:格式,不存在的邮件
- 购物数量:输入最大值, 负数, 0, 字母, 特殊字符
- 必填字段:不填, 输空格, 提示是否统一
3)单选按钮
只能选一个, 保存信息正确, 不能不选(没有默认值)
4)复选框
全选, 部分选, 全不选, 查看保存结果是否与所选择的一致
5)大块文字区域
输入数据>最大字符; 输入数据=最大字符; 不输入任何数据; 在Firefox或Chrome浏览器下,大块文字区域的右下角一般都可以拖放,尝试用鼠标进行拖放,检查会不会导致界面很难看或滚动条消失
6)下拉列表框
条目内容正确,无重复条目,无遗失条目; 执行列表框中每个条目的功能
7)排序
正序排列,反序排列; 从A到Z排序; 数字大小顺序; 如果有分页,检查是否先排序再分页
8)分页
- 没有数据时,分页标签全部置灰,不支持点击
- 在首页时,“首页” “上一页"失效; 在尾页时,“下一页” " 尾页” 失效; 在中间页时,四个标签均可点击且跳转正确.
- 翻页后,列表中的数据是否仍按照指定的顺序进行排序
- 分页标签在同一水平线上
- 分页标签样式一致
- 分页的页数正确
- 正确跳转指定的页数
- 在分页处输入非数字的字符,是否有提示
- 是否支持回车键的监听
9)搜索框填充域
- 搜索按钮功能是否失效
- 正确搜索
- 输入键盘中所有特殊字符,是否报错
- 系统是否支持键盘回车键,Tab键
- 搜索出的结果页面是否与其他页面风格一致
- 在输入域输入空格,是否报错
- 不输入任何内容,是返回无记录还是系统报错
- 精确查询还是模糊查询,如中%国
- 将光标放置搜索框中,搜索框默认内容是否自动被清空
- 搜索输入域是否实现回车键监听事件
10)特殊字符处理
- 键盘上的所有特殊字符
- ’ "
- URL中参数的名与值的分隔符合是"问号",“与”,“或”,有意识输入? & |
- URL提交数据方式两种get和post,不适当编码与解码会导致空格与加号解码后一致,所有输入注册密码有意识地输入"+++++"
- web网页通过HTML语言解析,有意识的输入HTML语句
11)转义字符
在文本框中输入"\n"和"\“,检查输出是否相同,如果和用户输入的不一样就是缺陷.
在文本框中输入’||”
12)多次快速提交问题:连续多次点击同一个按钮,会不会报错
13)共用页面session问题
14)页面刷新问题
15)浏览器前进/后腿按钮问题
15.客户端测试
-
安装
首次安装
重复安装(保持程序运行,再次安装) -
卸载
程序自身卸载程序
windows控制面板里卸载
卸载是否干净
卸载后,是否可以再次安装
程序卸载是否影响其他程序或系统运行 -
UI
页面美观
不同的操作系统
调整机器的分辨率 -
手机端
手机网络多样化: 2G,3G,4G,5G,wifi,无网络,中途切换网络,中途中断网络
系统多样化:IOS,安卓等
分辨率多样化,屏幕尺寸
实现手机与计算机联系:豌豆荚,360手机助手,腾讯手机管家(安卓系统),91手机助手for iphone
手机的日志获取:alogcat.apk—安卓手机上获取log
16.安全测试
-
什么是安全测试
安全测试是一种软件测试,可发现软件应用程序中漏洞,威胁和风险,可以防止来自入侵者的恶意攻击。
如果产品有高危漏洞,不小心被黑客袭击,导致服务器瘫痪或资金损失,重要数据泄漏和丢失,或者服务器资源被黑客恶意利用,会导致公司业务无法正常运转或损失惨重。 -
安全测试的目的
(1)提升产品的安全质量
进行安全测试,可以找到安全漏洞,例如常见的SQL注入,跨站点请求伪造CSRF,跨站脚本攻击XSS等安全问题。
(2)降低修复成本
在产品发布前找到安全问题,并予以修复,可以大大降低修复成本。
(3)度量安全等级
通过安全测试,我们能发现安全问题,进行评估系统的安全等级。 -
安全测试的七种类型
(1)漏洞扫描:自动软件针对已知的漏洞扫描系统。
(2)安全扫描:手动或自动识别网络和系统弱点的技术。
(3)渗透测试:渗透测试是关于安全测试的,它有助于识别系统中的漏洞。
(4)风险评估:包括对系统中可能的风险进行分析,风险分为低,中,高三种。
(5)安全审计:完成对系统和应用程序的检查,以检测漏洞。
(6)道德黑客:为检测系统中的缺陷,而非个人利益对系统进行的黑客攻击。
(7)态势评估:将安全扫描,道德黑客和风险评估结合起来,已显示组织的总体安全态势。 -
什么是安全漏洞
安全漏洞是指受限制的计算机,组件,应用程序或其他联机资源的无意中留下的不受保护的入口点,漏洞是硬件软件或使用策略上的缺陷,他们会使计算机遭受病毒和黑客攻击。 -
常见的安全漏洞有哪些
(1)SQL注入
SQL注入是一种比较常见的高等级漏洞。SQL注入就是没有过滤从页面传至接口的字符,攻击者通过恶意的SQL查询插入到输入参数中,在后台服务器上解析进行执行,最终导致数据库信息被篡改或泄漏。
(2)跨站点请求伪造csrf
攻击者盗用你的身份(借用你的token),以你的名义发送恶意请求,而你却不知情。恶意攻击者往web页面里插入恶意的HTML代码,当用户浏览该页之时,嵌入其中web里面的HTML代码会被执行,从而达到恶意目的。
(3)跨站点脚本攻击XSS
指利用网站漏洞从用户那里恶意盗取信息。用户输入中可加入JS等破坏性的代码,而程序没有进行过滤,还执行了这些代码,达到了恶意攻击的目的。
主要有存储型,反射型和DOM(基于文档对象模型)三种类型。
存储型:攻击的数据会保存到数据库,一般存在于post 的请求或者get的请求。
反射型:攻击的数据,不保存在数据库,属于一次性的,一般在get请求参数中构造,与存储型的危害差别不大。
DOM:没有访问服务端,属于纯前端的行为。
(4)越权
需要手动覆盖。主要分为水平越权和垂直越权。
水平越权:在业务系统中,本来用户A只能对自己的个人信息进行增删改查,但是通过抓包,修改用户id(一般用户id都是递增的),可以获取到其他人的个人信息,或者账号A将自己的个人信息页面通过浏览器发送给用户B,用户B登录系统后可以看到用户A的信息,这就是水平越权了。
垂直越权:在业务系统中,本来用户A对某条记录只有查看的权限,但是通过抓包,可以对记录进行修改。
(5)密码传输未采用复杂加密方式
例如密码仅仅采用md5的加密方式,可通过撞库反解密码。
(6)未授权的SQL查询执行
对不合法的请求进行了正确的响应,例如去除请求参数,清除HTTP请求体或修改请求方法等等,最后还是返回了状态码200,期望返回除200外的其他状态码。
(7)恶意站点链接
网站中存在恶意站点链接,存在跳转链接,但是要人工自行识别。
- 漏洞修复
(1)SQL注入修复方式
方法一:程序代码里的所有查询语句,使用标准化的数据库查询语句API接口,设定语句的参数进行过滤一些非法的字符,防止用户输入恶意的字符传入到数据库中执行SQL语句。
方法二: 对用户提交的参数安全过滤,像一些特殊的字符(,(),*&......%#等)进行字符转义操作,以及编码的安全转换。
(2)跨站点请求伪造csrf修复方式
方法一:添加Token,发请求时带上Token。处理请求的时候需要验证Cookie+Token
方法二:请求头中Refer参数需要校验请求来源是否是目标网页发出
实际项目中,一般采用添加Refer请求头和添加Token组合的方式,来防止csrf攻击。
(3)跨站点脚本攻击XSS
使用过滤器,对用户输入执行危险字符清理。
17.移动端
移动端有app,小程序,微信公众号等。
-
移动端测试类型
功能,中断,UE(用户体验),安装和卸载,兼容性,稳定性,性能,网络,电量。 -
测试的方式
(1)真机测试(系统测试后期)
(2)模拟器(开发阶段,前期测试,比如MuMu模拟器)
(3)云测平台(通过云测平台进行大规模机型测试,如Test Bird -
移动端与PC端区别