赞
踩
前传:软件测试的基础知识点在百度上都可以搜到,但对于个人而言,眼过千遍不如手过一遍,因此写下这篇文章也有助于自己总结记忆~
(1)定义:计算机系统中与硬件相互依存的一部分(程序+数据+相关文档)
(2)程序:按事先设计的功能和性能要求执行的指令序列
(3)数据:使程序能正常操纵信息的数据结构
(4)文档:与程序开发、维护和使用有关的图文资料
主要分为软件开发技术(方法+过程+工具+环境)和软件开发管理
可行性研究和计划(立项)->需求分析->概要设计(测试计划)->详细设计(测试方案)->实现(开发阶段;包含单元测试)->组装测试(集成测试)->确认测试(系统测试,验收回归测试)->使用和维护(上线使用及日常更新维护)
(1)定义:软件质量保证的一种手段
(2)目的:发现错误以及避免这些错误的发生,使产品达到完美
(3)概念:是软件工程中的一个非常重要的环节,是开发项目整体的一部分,是有计划有组织的,是伴随软件工程的诞生而诞生的,软件测试不是万能的不可能发现全部缺陷,软件测试是有局限性的。
为了提高工作效率,节省人力和成本,把人为驱动的测试转化为机器执行
需求分析->测试计划->框架搭建(附带工具选择)->测试用例设计(编写测试用例或开发测试脚本,并文档化)->测试—调试测试(针对自动化测试脚本)->评估(评估测试结果并改进测试过程)
(1)定义:按照程序内部结构,逻辑驱动测试程序
(2)目的:检测产品内部动作是否按照设计说明书的规范进行,检验程序的每条路径是否都能按照预定要求进行工作
(3)对象:源程序,用代码内部的分支,路径,条件,使程序设计的控制结构导出测试用例
(1)静态测试
(2)动态测试
(1)界面对象测试流程
界面对象(UI)→业务对象(BO)→数据管理对象(DMO)→DBserver端
(2)业务对象测试流程
DBserver端→数据管理对象(DMO)→业务对象(BO)→界面对象(UI)
(1)尽量先用自动化工具来进行静态解析
(2)建议先从静态测试开始(静态结构分析、代码走查、静态质量度量),然后进行动态测试(如覆盖率测试)
(3)以静态分析结果作为依据,再使用代码检查和动态测试方法对静态分析结果进行进一步确认,提高测试效率及准确性
(4)覆盖率测试是白盒测试的重要手段,在测试报告中可作为量化指标的依据,对于软件的重点模块,应使用多种覆盖率标准衡量代码的覆盖率
(1)概述:主要检查代码和流图设计的一致性、代码结构的合理性、代码编写的标准性、可读性、代码的逻辑表达的正确性等方面。包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。
(2)目的:检查代码是否按照某种标准或规范编写的代码
(3)方式:桌面检查
(4)项目:目录文件组织
(1)定义:主要以图形的方式表现程序的内部结构(例如函数调用关系图、函数内部控制流图);通过应用程序各函数之间的调用关系展示了系统的结构,列出所有函数,用连线表示调用关系和作用。
(2)主要分析:可以检查函数的调用关系是否正确
是否存在孤立的函数而没有被调用
明确函数被调用的频繁度,对调用频繁的函数可以重点检查
语句检查、类型转换
能力(陈述经代码检查证实了的本软件的能力)、缺陷和限制
(1)逻辑覆盖法
根据覆盖目标的不同和覆盖源程序语句的详尽程度,逻辑覆盖又可分为语句覆盖 、判定覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖、修改条件判定覆盖、组合覆盖和路径覆盖
面向对象的覆盖主要讨论继承上下文覆盖和基于状态的上下文覆盖
测试覆盖准则主要讨论(ESTCA)错误敏感测试用例分析和(LCSAJ)线性代码序列与跳转
(2)插桩技术
插桩测试是一个被广泛应用的测试方法,插桩测试就是向源程序中插入语句然后执行程序,通过打印语句,获得动态信息(我们最为关心的信息)
(3)基本路径测试法
基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法,设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。重点内容如下:
(4)域测试法
域测试是一种基于程序结构的测试方法,基于对程序输入空间(域)的分析,选择测试点进行测试。
主要为:
(1)域错误:程序的控制流存在错误,对于某一特定的输入可能执行的是一条错误路径,这种错误称为路径错误,也叫做域错误
(2)计算型错误:对于特定输入执行的路径正确,但赋值语句的错误导致输出结果错误,称为计算型错误
(3)丢失路径错误:由于程序中的某处少了一个判定谓词而引起的丢失路径错误
(5)符号测试
符号测试基本思想是允许程序的输入不仅仅是具体的数值数据,而且包括符号值,符号值可以是基本的符号变量值,也可以是符号变量值的表达式
(1)符号测试执行的是代数运算,可以作为普通测试的一个扩充
(2)符号测试可以看作是程序测试和程序验证的一个折衷办法
(3)符号测试程序中仅有有限的几条执行路径
(6)Z路径覆盖法
分析程序中的路径是指检验程序从入口开始,执行过程中经历的各个语句,直到出口
Z路径覆盖对循环机制进行简化,减少路径的数量,使得覆盖所有路径成为可能,简化循环意义下的路径覆盖称为Z路径覆盖
循环简化:限制循环次数,只考虑循环一次或零次情况
循环简化的目的是限制循环的次数,无论循环的形式和循环体实际执行的次数,简化后的循环测试只考虑执行循环体一次和零次(不执行)两种情况,即考虑执行时进入循环体一次和跳过循环体这两种情况。
(7)程序变异测试法
程序变异是一种错误驱动测试,错误驱动测试是指该方法是针对某类特定程序错误的,要想找出程序中所有的错误几乎是不可能的,解决办法是将错误的搜索范围尽可能地缩小,以利于专门测试某类错误是否存在。
数据驱动测试或者基于规格说明的测试,只检查程序功能是否按照规格说明书规定正常使用,是否能接收数据及产生正确的输出信息,并且满足数据库或者外部信息的完整性
(1)等价类划分法
概念:将所有可能输入数据(有效和无效)划分为若干个等价类,选取代表性的数据当做测试用例,保证完整性和代表性
有效等价类:合理的有效的输入集合
无效等价类:无效的没有意义的输入集合,检查程序异常
等价类划分方法:按照区间、数值、集合、限制条件、处理方式划分
(2)边界值分析法
对输入或输出的边界值进行设计(5/7原则)
(3)因果图法
简化逻辑关系,操作步骤较复杂
(4)判定表驱动法
针对不同存在条件、动作关系或者因果关系的设计用例方法
4大组成部分:条件桩、条件项、动作桩、动作项
(5)场景法
事件触发的情景生成场景(同一件事不同触发顺序和处理结果形成事件流)
(6)功能图法
用功能图(流程图)形象的表达操作流(状态迁移图+布尔函数组成)
需要依靠判定表因果图表示逻辑,是黑盒+白盒混合用例的设计方法
(7)错误推断法
基于以往的经验和出现的错误,推测软件可能存在的缺陷和错误,针对性的设计用例
(8)正交试验设计法
从大量数据中挑选适量的有代表性的,合理设计用例
注意点:确定测试的优先级和测试重点,提高覆盖率,边界值分析必须使用
根据需求中关于功能和性能的要求设计,制定参考范围
一组由前提条件、输入、执行条件、预期结果等组成,以完成对某个特定需求或者目标测试的数据,体现测试方案、方法、技术和策略的文档
科学有效的对测试步骤进行组织规划,方便管理,记录
编号、日期、设计和测试人员、优先级、标题、目标、环境、输入数据/动作、预期结果
软件需求设计说明书、软件模板
从高到低,独立性,与功能一一对应,根据需求设计,由有经验的人员设计
有模板,正确性,代表性,可判断性,重现性,详细准确清晰的步骤,符合规范
市场上的用例缺陷管理工具很多,这里列举几个:mantis、redmine、jira、bugzilla、禅道等
编写→评审(修改→再次评审)→使用→保存管理→维护/升级
目标的描述、环境、输入输出数据/动作、步骤、预期结果、备注等
一种验证行为,程序中每一项都需要验证
程序语法检查、程序逻辑检查、模块接口测试、局部数据结构测试、路径测试、边界条件测试、错误处理测试、代码书写规范检查
(1)程序语法检查
(2)程序逻辑检查
(3)模块接口测试
模块接口是模块内和模块外联系的关键部位;当模块通过外部调用时,数据必须正确流入,当模块结束问题的处理返回调用模块时,数据必须能正确流出
(4)局部数据结构测试
局部数据结构是为了保证临时存储在模块内的数据,模块错误根源往往是局部数据结构
表现形式如下:
(1)局部数据结构测试最常见的积累错误
(2)不适合或者不相容的类型说明
(3)变量无初值
(4)变量初始化或者缺省值有错
(5)不正确的变量名或者不正确的截断
(6)出现上溢、下溢或者地址异常
(5)路径测试
对模块中的重要的执行路径进行测试,路径错误主要由错误的计算,不正确的比较或者不正常的控制流导致
(6)边界条件测试
容易出错的因素:
(1)程序内有一个n次循环,这个n次循环应该是1n,而不是0n
(2)由小于、小于等于、等于、大于、大于等于、不等于确定的比较值出错
(3)出现上溢、下溢和地址异常问题
(7)错误处理测试
完善的模块设计要求能预见出错的条件,并设置适当的出错处理,以便在一旦程序出错时,能对出错程序重做安排,保证其逻辑上的正确性
(8)代码书写规范检查
单元测试是针对每个程序的单体调试,主要步分为程序语法检查和程序逻辑检查
定义:功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能;只需要考虑它的功能点不需要考虑软件的内部结构及代码等
(1)链接测试
链接是web应用系统的一个很重要的特征,主要是用于页面之间切换跳转,指导用户去一些不知道地址的页面的主要手段,链接测试一般关注三点:
① 链接是否按照既定指示那样,确实链接到了该链接的界面
② 测试该链接所链接的页面是否真的存在
③ 保证系统中没有单独存在的页面(即没有链接指向,只能通过正确的URL地址才能访问)
(2)表单测试
也可以理解为数据落地,当用户在web应用系统上向服务器提交信息时,就需要使用表单操作,比如,用户注册,登录,信息变更等等;这种情况下,我们必须测试提交信息的完整性,以检验提交给服务器的数据的正确性,当然,这还涉及到一些常理性的逻辑,比如出生日期和职业、工作年限是否恰当,所在地省份城市区域间的匹配等,如果设定使用默认值,也需要测试
(3)导航测试
作为测试,很多时候都要站在用户的角度去思考,大部分用户都是目的驱动的,当他访问一个网站或者web系统时,会很快的浏览系统,找不到满足自己需求的信息时,会很快离开,很少有用户愿意花时间去熟悉系统的结构;导航测试,就是在不同的页面跳转之间,或者按钮,对话框,列表以及窗口等,通过考虑这些因素,去判断一个应用系统是否易于导航是否直观?系统的主要模块是否可以通过主页访问或者到达?站点是否需要站内地图或者搜索引擎等其他帮助?web系统导航的另外一个重点就是页面结构、导航、菜单、风格等是否一致,确保用户可以凭借直觉或者简单的判断就可以找到自己想要的内容。
(4)图形测试
可以理解为UI测试,其中包括图片、动画、边框、颜色、字体、背景、按钮等等
其中要考虑以下几个重点:
① 图片要有明确的用途,代表;图片尺寸尽量小,一般采用JPG或者GIF压缩
② 页面整体风格是否和系统的用途一致
③ 背景颜色,字体,搭配是否合理
(5)内容测试
主要用来检测web系统提供信息的准确性、相关性,比如:商品的价格,文字描述;信息的准确性,是否有拼写错误;信息的相关性,比如很多网站的“相关文章列表,视频列表等”
(6)整体界面测试
也就是我们常说的用户体验,用户浏览时是否感觉舒适,整体风格等等一般做一个类似问卷调查的形式,来判定用户的反馈信息,最好有最终用户的参与
(1)平台兼容
现在有很多的操作系统,比如Windows、Unix、Linux、macintosh等;用户使用哪个系统取决于用户,因此,系统兼容测试就很有必要
(2)浏览器兼容
浏览器是web客户端最核心的组件,不同的浏览器,对Java,JavaScript,css或者HTML的规格都有不同的支持;另外,采用的框架和结构风格在不同浏览器中也存在不同的显示甚至不显示,不同的浏览器对安全性的设置也是不同的
测试浏览器兼容,有个方法就是创建一个兼容性矩阵,来测试不同厂商不同版本的浏览器兼容,比如测试IE浏览器,可以通过一个叫做IEtester的工具来测试兼容,或者可以通过F12控制台来切换浏览器版本来测试兼容以前一些前端元素的显示等
安全测试的主要区域有以下几点:
用户权限,就是该账号拥有哪些执行操作的权利
① 软件权限:其中包括发送信息,拨打电话,链接网络,访问手机信息,联系人信息等
② 数据在本地的存储、传输等
③ 执行某些操作时导致的输入有效性验证、授权、数据加密等方面
④ 基于各种通信协议或者行业标准来检查
① 验证app能否正确安装运行卸载,以及操作过程和操作前后对系统资源的占有情况
② 安装运行卸载的提示,报告等
③ 检查安装路径,文件是否合理,组件是否正确注册等
① 用户界面(菜单、对话框、窗口)等布局,风格是否满足用户需求,文字位置,描述是否正确,界面美观程度,文字图片组合是否合理
② 用户友好性、人性化、便于操作等
① 评审需求,多方面考虑,整理出内在外在以及非功能性的直接间接功能点,对比需求,提取测试点
② 根据常用的一些分析方法,等价类边界值判定表因果图场景法等方法,设计测试用例,对提取的功能点进行覆盖
③ 测试各个阶段不断跟踪缺陷,做好用例的更新迭代和不断变更需求所带来的业务或者需求的错误
① 极限测试:各种边界情况下验证app的响应能力
如:低电量、储存满。弱网等情况
② 响应能力测试:验证各种情况下不同操作能否满足用户响应需求
③ 压力测试:反复长期操作下,系统该资源的使用情况
比如:前后台运行时来电话,短信,下载文件,听音乐看电影等不同情况下的表现
① 不同网络环境(WiFi、2G、3G、4G等)
② 各种设备品牌机型系统版本等兼容:苹果、安卓(不同品牌,不同安卓系统版本)等
bug修复后的回归测试,上线交付前进行全部的回归,验证
每次app版本迭代更新时,配合不同网络环境,及不同更新权限(强制更新,不强制更新),进行下载、安装、更新、启动运行等测试
① 支付结果的确认,数据库查询
② 请求报文是否加密
③ 不同场景的支付
金额足够、金额不足、重复支付、无网支付、弱网支付、同账号多平台一起支付、余额宝微信信用卡多种支付方式、不同支付方式的组合、密码正确/错误、支付上限等情况
也称为组装测试,联合测试,主要针对软件高层设计进行测试,一般以模块和子系统为单位进行测试
① 模块内集成,主要测试各个接口的交互
② 子系统内集成,子系统内各个模块的交互
③ 系统集成,测试系统内各个子系统和模块的交互关系
不仅仅代码编译通过就算集成,而是所有模块子系统能正常运转,一般采用的方法是数据驱动,集成测试不看系统表象,而是对数据流进行分析,可分为自顶向下、自下向上、核心集成、分层集成等方法
① 确定子系统的模块组成,保证这些模块都已通过单元测试
② 由开发组装这个模块,生成子系统,保证模块内功能尽可能发挥出来
③ 设计测试用例,以一个关键模块为核心展开,围绕功能和性能,测试接口
④ 搭建测试环境,按照用例进行测试
⑤ 记录测试结果,总结问题
定义:检查系统是否能完成需求说明的内容,对系统能正常、完整的运行;其中包括软件、硬件和相关联的设备、测试数据
目的:模拟真实系统工作环境下通过与系统需求作比较,检验完整的软件配置项能否和系统正确连接,发现软件与系统/子系统之间与需求设计文档不符合或矛盾的地方
目标:功能是否达到规格说明书要求,是否存在其他缺陷,是否有完善到缺陷记录及跟踪等
(1)黑盒测试
多任务测试:同一时间内运行多个应用程序
临界测试:系统临界和应用系统临界
中断测试:软件在工作过程中被其他任务或意外事件终止当前正在进行的程序
① 人为中断
② 硬件异常中断
③ 程序执行中断
④ 意外中断
(2)自动化测试
① 响应时间的性能测试
② 可靠性分析
③ 强度测试
④ 安装测试
⑤ 恢复测试
① 软件开发已完成,并且已修复已知缺陷
② 验收测试计划已被批准
③ 对软件需求说明文档审查已完成
④ 所有关键模块的代码审查已完成
① 验收系统是否按照需求文档开发,用户体验是否达到用户要求,与设计要求差距大小,完成的功能水平
② 验收系统是否达到了双方共识
③ 验收系统的可靠性和维护性
④ 验收系统的业务运行处理能力
① 验收人员要熟悉软件的功能和性能要求、软硬件环境要求,以及质量和验收要求
② 要有相应的验收要求文档,规格要求
③ 根据验收要求进行验收测试,结果要出具报告,进行评审
① 软件是否满足需求文档规定的所有功能和性能的要求
② 文档资料等是否完整
③ 对功能测试、集成测试、系统测试、性能测试、安全测试等用例进行回归
① 审查提供验收的各类文档的正确性、完整性和统一性
② 审查项目功能是否达到设计需求说明书规定的要求
③ 审查项目有关指标是否达到要求
④ 审查项目实施进度
⑤ 对项目技术等水平做评估,得出项目的验收报告
① 流程测试
② 边界值测试
③ 容错性测试
④ 异常测试
⑤ 安装配置测试
在软件开发的各个阶段,都可能进行若干次回归测试,其在整个测试过程中占很大比重
只要软件发生修改,那么就需要重新测试,以确定修改的软件功能是否达到了预期目的,以及修改可能产生的新的问题(已修改部分对原功能产生影响)
确认软件经过修改或变更后是否仍满足所有的需求
回归测试是重复测试,要求使用相同的方法、测试用例和数据,在相同的环境下测试
① 测试所有修改或修正过的功能模块
② 测试与被修改模块相关的模块
③ 测试所有新增加的模块
④ 测试整个模块
每次有改动或者需求迭代变更时候
验证新功能,保证旧功能不被影响
测试验证被测软件在不同软件和硬件条件中运行的情况,覆盖各种软件、硬件环境,其实质就是测试软件是否与其他与之交互元素之间的兼容(比如浏览器、操作系统、硬件)
测试软件的容错性、发现隐藏的bug,以及其对产品的影响,得到最佳的配置
① 不同主机的配置测试
② 不同组件的配置测试
③ 不同外设的配置测试
④ 不同接口的配置测试
⑤ 可选项的配置测试
① 不同操作系统平台兼容性测试
② 同一操作系统不同版本兼容性测试
③ 软件本身向前向后兼容测试
④ 软件本身与其他软件兼容测试
⑤ 数据兼容测试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。