软件测试理论知识基础详细解说—总结
目录
软件测试理论知识基础详细解说—总结
软件研发流程
软件测试基础
软件测试原则
软件测试的对象
软件测试分类
软件测试风险
软件测试类型
按照开发阶段划分
按是否运行程序划分
按照是否查看代码划分
其它划分
质量
面试:杯子怎么测?1
面试:杯子怎么测?2
测试需求分析
面试:测试拉杆箱
面试:测试Web页面
面试:测试登录功能
Tips:Httponly、SQL注入和XSS
软件研发流程
软件生命周期:需求;设计;编码;测试;维护;升级;废弃。
软件测试流程:需求分析;测试计划;测试方案;测试用例;测试执行;测试报告;
测试工程师:负责找出软件中存在的问题,并报告。
软件测试基础
测试不仅仅是为了发现软件缺陷与错误,而且也是对软件质量进行度量和评估,以提高软件的质量。测试是程序执行的过程,母的在于发现错误。一个好的在于能发现至今未发现的错误;一个成功的测试是发现了至今未发现的错误。
软件质量:软件与明确的和隐含的定义的需求相一致的程度。
软件测试原则
- 所有的软件测试都应追溯到用户需求
- 应当把“尽早地和不断地进行软件测试”作为软件测试者的座右铭
- 安全测试是不可能的,测试需要终止
- 测试无法显示软件潜在的缺陷
- 充分注意测试中的群集现象
- 程序员应避免检查自己的程序。
- 应尽量避免测试的随意性。
软件测试的对象
- 根据软件的定义,软件包括程序、数据、文档,所以软件测试并不仅仅是程序测试。软件测试贯穿于整个软件生命周期中。
- 由于软件测试贯穿于整个软件生命周期中,各阶段有不同的测试对象,形成了不同开发阶段的不同类型的测试。需求分析、概要设计、详细设计以及程序编码等各阶段产生的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应作为“软件测试”的对象。
软件测试分类
- 按照开发阶段划分软件测试:单元测试、集成测试、系统测试、验收测试
- 按照测试实施组织划分软件测试:开发方测试、用户测试(Beta测试)、第三方测试
- 按照测试技术划分:白盒测试、黑盒测试、灰盒测试。
软件测试方法和技术的分类与软件开发过程相关联,它贯穿了整个软件生命周期。
软件测试风险
软件测试中的软件风险是根据预测软件将出现的风险,指定软件测试计划并排列优先等级,风险分析是对软件潜在问题进行识别、估计和评价的过程。
风险也包括进度风险、质量风险、人员风险、变更风险、成本风险等。
软件测试类型
按照开发阶段划分
- 单元测试:是指对软件中的最小可测试单元进行检查和验证
- 集成测试:在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成子系统或系统,进行集成测试
- 系统测试:将已经确认的软件、计算机硬件、外设、网络等其它元素结合在一起,进行信息系统的各种组装测试和确认测试。
- 验收测试(a,b测试):
a:它是意向确定产品是否能够满足合同或用户规定需求的测试。这时管理型和防御性空值
b:主要确认软件是否按照合同要求进行工作,既是否满足软件需求规格说明书中的要求
按是否运行程序划分
- 静态测试:不运行被测试的软件,而知识静态的检查代码、界面或者文档
- 动态测试:实际运行被测试的软件,输入相应的测试数据,检查输出结果是否和预期结果相一致的过程
按照是否查看代码划分
- 黑盒测试:把软件看成一个黑盒子,不管内部逻辑和内部特性,只依据规格说明书检查程序的功能是否符合功能说明。
- 白盒测试:又称为结构测试。着重于程序内部结构和算法,不关心功能和性能指标。
- 灰盒测试:介于白盒和黑盒测试之间,基于程序运行时刻的外部表现同时又结合程序内部逻辑结构来设计用例,执行程序并采集程序路径执行信息盒外部接口结果的测试技术。
其它划分
- 回归测试:对软件的新版本测试,重复执行上一个版本测试时使用的测试用例。防止出现“以前应用没有的问题现在出问题了”。
- 冒烟测试:冒烟测试的对象是每一个新编译需要正式测试的版本,目的是确认软件基本功能正常,可以进行后续的正式测试工作。
- 随机测试:测试数据是随机产生的,在测试用例之外。只能作为一个测试的补充
- 敏捷测试:原有测试定义中通过执行被测系统发现问题,通过测试这种活动能够提供对被测试系统提供度量等概念还是使用的。
- TDD(测试驱动开发): 测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。然后循环进行添加其他功能,直到完全部功能的开发。
质量
软件质量的价值,取决于其应用情景的重要程度,以及该应用情景对于该软件产品的依赖程度。
- 内部质量:它是从内部观点出发的软件产品特性的总体。内部质量是针对内部质量需求被测量和评价的质量。
- 外部质量:外部质量是从外部观点出发的软件产品特性的总体。它是当软件执行时,更典型地是使用外部度量在模拟环境中,用模拟数据测试时,所被测量和评价的质量。
- 使用质量:是从用户观点出发,来看待软件产品用于特定环境和条件下的质量。它测量用户在特定环境中达到其任务目标的程度,而不是测量软件自身的性质。
面试:杯子怎么测?1
- 功能测试:能够装水;除了装水能否装其它液体;能装多少水;杯子是否有刻度表;能否泡茶泡咖啡;能否方冰箱做冰块;什么材质的
- 界面测试:外观是否好看;什么颜色;什么形状;重量;是否有异味;图案是否合理
- 性能测试:能够装100度以上的水;能否装0度的冰水;装满水是否会漏水;杯子上的图案是否容易脱落
- 安全性测试:制作材料是否有毒;能否在微波炉使用;摔到水泥地是否摔碎;是否容易滋生细菌;是否有缺口;内壁材料是否会溶解到水中;破碎后是否会造成二五i还,
- 可用性测试:是否烫手;是否好拿;是否容易喝到;是否防滑
面试:杯子怎么测?2
需求测试: 查看杯子使用说明书
界面测试: 查看杯子外观
功能度:用水杯装水看漏不漏;水能不能被喝到
安全性:杯子有没有毒或细菌
可靠性:杯子从不同高度落下的损坏程度
可移植性:杯子在不同的地方、温度等环境下是否都可以正常使用
兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等
易用性:杯子是否烫手、是否有防滑措施、是否方便饮用
用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述
疲劳测试:将杯子盛上水(案例一)放24 小时检查泄漏时间和情况;盛上汽油(案例二)放24 小时检查泄漏时间和情况等
压力测试:用根针并在针上面不断加重量,看压强多大时会穿透
跌落测试: 杯子加包装( 有填充物), 在多高的情况摔下不破损
震动测试: 杯子加包装( 有填充物), 六面震动, 检查产品是否能应对恶劣的铁路\ 公路\ 航空运输
测试数据:测试数据具体编写此处略。其中应用到:场景法、等价类划分法、因果图法、错误推测法、边界值法等方法
期望输出:该期望输出需查阅国标、行标以及使用用户的需求
测试需求分析
测试需求主要解决“测什么”的问题 ,即指明被测对象中什么需要测试。
测试类型:
1)功能测试
2) 界面测试
3) 安全测试
4) 本地/国际化测试
5) 数据库测试
6) 可靠性测试
7) 集成测试
8) 兼容性测试
9) 自动化测试
10) 性能测试
11) 回归测试
面试:测试拉杆箱
首先问面试官需求是怎么样的
功能测试:拉杆箱的大小容量是否符合要求,拉杆箱的伸缩杆是否正常,拉杆箱的滚轮是否灵活,是否可以360度旋转,箱锁是否正常。
界面测试:拉杆箱是否美观,材质,颜色,花纹是否符合要求。箱子吊牌logo是否正确
性能测试:最大能装多重的东西,最多能走多远的路。
安全性测试:箱子材质是否有害,高温淋雨是否释放有害物质。箱子各边是否光滑无棱角
可用性测试:拉杆是否防滑,箱子拉链是否灵活,滚轮是否灵活
压力性能测试:连续负重30公里,连续抽拉拉杆,连续关上打开箱锁。
兼容性测试:在不同的地面上是否都能正常使用。
面试:测试Web页面
功能测试:基本功能,比如登录,加入购物车,下订单等操作是否能正确完成
界面测试:界面的布局是否合理
性能测试:最大能支持多少用户同时在线,并发订单提交量
可用性测试:界面是否符合用户的使用习惯。
安全性测试:是否存在sql注入攻击,xss等
兼容性测试:在不同的终端、不同的浏览器上显示效果是否一样
国际化测试:是否有外语版
面试:测试登录功能
功能测试
- 输入正确的用户名和密码能否跳转到正确的页面
- 输入错误的用户名和密码是否能返回错误提示
- 用户名和密码,太长和太短怎么处理
- 用户名和密码中有特殊字符怎么处理
- 记住用户名功能
- 记住密码功能
- 用户名和密码输入时有空格的处理
- 密码是否能以*号显示
界面测试:
- 界面是否美观,输入框和按钮是否对齐
- 输入框和按钮的长度高度是否符合要求
性能测试:
- 打开登录页面需要多久
- 输入账号和密码之后多久能够响应
安全性测试:
- 登录后生成的cookie,是否是httponly(否则容易被脚本窃取)
- 用户名和密码是否通过加密的方式发送给服务端
- 用户名和密码的验证,应该是在服务端验证,而不能单单是在客户端使用javascript验证
- 用户名和密码的输入框,应该屏蔽SQL攻击注入
- 用户名和密码输入框,应该禁止输入脚本(防止XSS攻击)
- 错误登录的限制次数(防止暴力破解)
可用性测试:
- 是否可以使用全键盘操作,是否可以使用快捷键
- 输入用户名和密码之后,按回车是否可以登录
兼容性测试:
- 主流的浏览器是否能显示正常功能正常
- 不同的平台就是不同的操作系统是否能显示正常
- 移动设备上是否工作正常
- 不同的分辨率是否显示正常工作正常。
Tips:Httponly、SQL注入和XSS
SQL注入:用户在访问服务器的过程中,通过表单提交或输入域名的方式使用SQL语句,去访问数据库,获取数据库中的数据。
XSS攻击(跨站脚本攻击):将脚本注入到网页,使用户加载攻击者恶意制造的网页程序。
Httponly:cookie可以通过浏览器的document对象来获取,设置httponly之后从document对象中就不能获取cookie对象了。