• 软件测试基础知识


    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)界面测试问题

    1. 文字或图片重叠
    2. 文字或图片剪裁
    3. 文字或图片没对齐
    4. 重复菜单项或链接
    5. 提示信息错误
    6. 各个页面的样式风格是否统一
    7. 各个页面的标题是否正确
    8. 导航处是否按相应的栏目级别显示,导航文字是否在同一行显示
    9. 文章列表页左侧的栏目是否与一级,二级栏目的名称,顺序一致
    10. 提示,警告或错误说明应清楚易懂,用词准确,摒弃模棱两可的字眼
    11. 所有的图片是否都被正确装载,在不同款的浏览器,分辨率下图片是否能正确显示
    12. 切换窗口大小
    13. 按钮大小,位置
    14. 菜单项
    15. 识别鼠标操作,多次点击,无规则点击,右键
    16. 控件,描述信息字体大小统一
    17. 快捷键和菜单选项
    18. 滚动信息或图片
    19. 调整显示器分辨率
    20. 鼠标移动到flash焦点时特效,离开时
    21. 术语和命令统一

    (2)功能测试(连接,按钮,本身应该具有的功能,提示问题)

    1. Tooltip不显示
    2. JS错误问题
    3. 页面链接错误
    4. 页面访问资源不可用
    5. 出现"404页面错误"
    6. 按钮不工作
    7. 功能未实现
    8. 错误信息提示不合理
    9. 数据库访问错误
    10. 文档无法下载

    (3)表单测试(边界值测试,等价类测试,异常类测试)

    1)文本框测试常见验证点

    1. 输入正常
    2. 输入已存在
    3. 输入超长字符串
    4. 输入默认值和空格
    5. 只输入字母或数字
    6. 利用复制,粘贴输入
    7. 输入特殊字符集,如"NULL",“\n”
    8. 输入中文,英文,数字,特殊字符组合
    9. 输入不符合格式的数据
    10. 输入HTML语言
    11. 输入全角,半角的英文,数字,特殊字符

    2)特殊输入域测试常见验证点

    1. 密码框: 可见? 全部空格? 大小写敏感? (比如:密码3位, 输入6个空格成功了, 密码和确认密码不一致却成功了)
    2. 日期: 不符合格式的数据; 无效日期; 写未来日期; 结束日期没设置在开始日期之后
    3. 电话:含英文字母? 分机号中间用破折号分隔
    4. 邮政编码:国内全是数字, 英国是字母与数字组合
    5. 电子邮件:格式,不存在的邮件
    6. 购物数量:输入最大值, 负数, 0, 字母, 特殊字符
    7. 必填字段:不填, 输空格, 提示是否统一

    3)单选按钮

    只能选一个, 保存信息正确, 不能不选(没有默认值)

    4)复选框

    全选, 部分选, 全不选, 查看保存结果是否与所选择的一致

    5)大块文字区域

    输入数据>最大字符; 输入数据=最大字符; 不输入任何数据; 在Firefox或Chrome浏览器下,大块文字区域的右下角一般都可以拖放,尝试用鼠标进行拖放,检查会不会导致界面很难看或滚动条消失

    6)下拉列表框

    条目内容正确,无重复条目,无遗失条目; 执行列表框中每个条目的功能

    7)排序

    正序排列,反序排列; 从A到Z排序; 数字大小顺序; 如果有分页,检查是否先排序再分页

    8)分页

    1. 没有数据时,分页标签全部置灰,不支持点击
    2. 在首页时,“首页” “上一页"失效; 在尾页时,“下一页” " 尾页” 失效; 在中间页时,四个标签均可点击且跳转正确.
    3. 翻页后,列表中的数据是否仍按照指定的顺序进行排序
    4. 分页标签在同一水平线上
    5. 分页标签样式一致
    6. 分页的页数正确
    7. 正确跳转指定的页数
    8. 在分页处输入非数字的字符,是否有提示
    9. 是否支持回车键的监听

    9)搜索框填充域

    1. 搜索按钮功能是否失效
    2. 正确搜索
    3. 输入键盘中所有特殊字符,是否报错
    4. 系统是否支持键盘回车键,Tab键
    5. 搜索出的结果页面是否与其他页面风格一致
    6. 在输入域输入空格,是否报错
    7. 不输入任何内容,是返回无记录还是系统报错
    8. 精确查询还是模糊查询,如中%国
    9. 将光标放置搜索框中,搜索框默认内容是否自动被清空
    10. 搜索输入域是否实现回车键监听事件

    10)特殊字符处理

    1. 键盘上的所有特殊字符
    2. ’ "
    3. URL中参数的名与值的分隔符合是"问号",“与”,“或”,有意识输入? & |
    4. URL提交数据方式两种get和post,不适当编码与解码会导致空格与加号解码后一致,所有输入注册密码有意识地输入"+++++"
    5. 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端区别
      在这里插入图片描述

  • 相关阅读:
    PaddleVideo:环境配置
    嵌入式linux开发,Linux下访问PHY芯片寄存器,获取phyID号,获取phy的link状态
    ADO.NET 之sqlConnection 对象使用摘要
    微信小程序获取华为云影子设备失败,显示403报错
    PointNet/Pointnet++训练及测试
    tomcat部署war包访问显示404
    域前期信息收集
    C //例5.11 译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。
    重建二叉树(前序+中序配合)
    分享电脑便捷妙招,电脑小白们快码住
  • 原文地址:https://blog.csdn.net/XGZ2IT/article/details/127832372