软件测试基本理论-IBM模式
软件测试基本理论(1)
IBM生产模式
1 参考书目
《IBM-从菜鸟到测试架构师-一个测试工程师的成长日记》
- 出版社:电子工业出版社
- 印次:2013年6月
- 作者:IBM主要工程师
2 重要提醒
Warning
IBM的业务性质是做大型企业的IT解决方案,仍然属于比较中规中矩的传统企业。所以对传统的软件企业有比较大的借鉴意义,但是对于互联网等新兴企业的从业人员,还是采取保留式的态度,取其精华即可。
3 测试产生的时代背景
1968年NATO会议提出了“软件危机”:
- 脆弱
- 不可靠
- 缺乏安全性
- 性能下降
- 出错
- 难以升级
- 73%的软件项目被延迟/超资/取消或失败
4 软件测试目的-IBM
- 确保软件质量
- 减少质量问题给企业及用户带来隐患
5 测试的现状
测试的理论及实践已经逐渐完善,但是测试的方法和体系却缺乏完整性的讨论。
6 测试分类
- 测试分类
-
- 安装测试
- 构建测试
- 白盒测试
- 黑盒测试
- 性能测试
- 迁移测试
- 目的
-
确定软件从安装到使用及至后期维护的稳定性和健壮性。
7 新手入门
测试是一个严谨、全面而有条理的过程
- 测试需要有测重点2/8原则)
-
除了小型项目,进行完全(各种输入和前提条件的组合)的测试是不可行的。需要动用风险分析和不同系统功能的测试优先级,来确定测试的关注点,从而替代穷尽测试。
8 单元测试
定义:开发人员针对程序模块(软件设计的最小单位)来进行正确性检验的测试。
单元测试是和开发最接近的一种测试
由开发人员编写。开发人员编写单元测试用例并执行,验证单元模块是否得出预期的结果
- 单元测试是粒度最小的软件测试
-
- 过程化编程:单个程序,函数,过程
- 对象化编程:方法,基类,抽象类,派生类
子系统只有通过单元测试之后才集成到大系统中
9 白盒测试
定义:指测试人员可以直接访问内部数据结果、算法及其代码实现的测试。
常见的方法:
- 接口测试
- 代码覆盖率测试
- 缺陷注入方法
10 “单元测试”和“白盒测试”区别
- 测试目不同
-
- “白”是测试程序的整体逻辑
- “单”是测试程序中一个独立的模块
- 执行人员不同
-
- 白盒一般是由专门的白盒测试人员完成
- 单元测试一般由程序员自己完成
11 功能测试(黑盒测试)
定义:通过黑盒模式发现代码集成后存在的功能问题的测试。
- 关注的重点是系统的功能
- 可以自动或者手动执行测试用例
和 单元测试 的区别:粒度不同。
- 单元测试关注的是最小代码片断
- 功能测试关注的是一个完整的业务功能
12 性能测试
- 关注重点
-
验证软件的非功能性需求的测试
- 应对复杂苛刻的用户场景
-
- 吞吐率
- 稳定性
- 可靠性
- 主要手段
-
通过自动化的方法模拟真实用户并发访问的场景
- 最终目的
-
- 验证系统的性能指标或发现其性能瓶颈
- 从根本上保证用户体验和长远利益
13 手工测试特点
- 优点
-
- 方便灵活
- 首次投入成本低
- 人员素质要求低
- 缺点
-
- 效率低
- 重复开销大
- 难以模拟复杂的使用场景,如:并发或连续事务
14 自动化测试特点
- 优点
-
- 效率高,提供很强的生产力
- 重复活动开销小
- 基本可以模拟任何复杂的使用场景,除了图灵测试
- 弱化了软件测试人员个体差异的影响
- 缺点
-
- 首次投入成本高
- 变更成本大
- 人员素质要求高
15 自动化vs手动测试(1)
形成良好互补,2/8原则
- 因地制宜。测试投资回报比。ROI算法
-
- 稳定,持续迭代,增量式的开发,流程固化(目前互联网主流模式),适合以自动化为主
- 需求不稳定,一次性项目任务(传统软件工业主流模式),适合以手工为主
创造性的工作交付人来做,重复性工作交付机器来做
大项目适合自动化测试,小项目适合手工测试
16 自动化vs手动测试(2)
估计自动化脚本开发的必要性:
- 自动化测试成本= 脚本开发成本+(平均调试脚本成本 +平均执行脚本成本)× 测试执行次数
- 手工测试成本=平均手工执行工作量×测试执行次数
- ROI=自动化测试成本/手工测试成本
17 自动化vs手动测试(3)
小规模项目成本对比图:
分析:
- 小规模测试基本上手动和自动都可以适用
- 在很小规模的时候,手工在成本上有很大的优势
- 随着回归次数增加,手工成本基本线性增加,自动化则成本趋于稳定
18 自动化vs手动测试(4)
大规模项目成本对比图:
分析:
- 软件项目随着规模增大,很容易产生滚雪球效应
- 手工测试很快遇到天花板,无论是成本还是可操作性都会出现障碍,投入成本增幅远高于开发成本增幅
- 自动化将成为主流,基本成本的增长和开发的成本投入幅度相当
19 瀑布模式和敏捷模式
- 瀑布模式
-
- 过程严格划分:需求分析/设计/实现/测试/集成/维护
- 分工明确,但是灵性性差,项目失败风险大
- 敏捷模式(Agile Development)
-
- 迭代开发(Iterative Development)
- 增量开发(Incremental Development)
- 把完整的过程分成多个持续时间较短的迭代
- 能够实现持续集成
- 具有很好的项目的风险控制能力和项目持续生产能力
20 软件过程自动化
- 构建自动化
-
自动化从各个模块的源码构建组装成一个完整的产品
- 测试自动化
-
构建前自动完成相应的测试工作
- 部署自动化
-
对于通过测试的构建好的产品,做好成品测试后,自动化部署到生产服务器
21 自动化场合选取
- 尽量对稳定的对象做自动化,如API接口
- GUI不建议使用自动化,投资回报比太低,变更大
22 自动化比例
自动化脚本的开发工作并不是越早越好,而是应该基于稳定的测试环境和测试计划。
有经验的测试工程师,是会在效率和质量上寻求平衡点,把精力集中在最容易出问题的点上。
- 自动化比例
-
- 对于API测试的自动化测试选取40%~60%
- 对于GUI测试的自动化测试选取30%左右
23 保留的争议性观念
- 文档的重要性不亚于软件产品本身
-
这和另外的思路“最好的文档就是产品本身的代码”有所出入。
完全的TDD是不适合大多数公司的。毕竟测试是属于上层建筑,建立在已有的开发产品上的。
作者: | Harmo哈莫 |
---|---|
作者介绍: | https://zhengwh.github.io |
QQ: | 1295351490 |
时间: | 2015-08-24 |
版权说明: | 未经许可,严禁用于商业目的的非法传播 |
联系或打赏: | http://zhengwh.github.io/contact-donate.html |
软件测试基本理论-IBM模式的更多相关文章
- 基于python的互联网软件测试开发(自动化测试)-全集合
基于python的互联网软件测试开发(自动化测试)-全集合 1 关键字 为了便于搜索引擎收录本文,特别将本文的关键字给强调一下: python,互联网,自动化测试,测试开发,接口测试,服务测试,a ...
- Javascript设计模式理论与实战:桥接模式
桥接模式将抽象部分与实现部分分离开来,使两者都可以独立的变化,并且可以一起和谐地工作.抽象部分和实现部分都可以独立的变化而不会互相影响,降低了代码的耦合性,提高了代码的扩展性. 基本理论 桥接模式定义 ...
- Java程序员应该知道的10个面向对象理论
英文原文:10-object-oriented-design-principles 面向对象理论是面向对象编程的核心,但是我发现大部分 Java 程序员热衷于像单例模式.装饰者模式或观察者模式这样的设 ...
- 【云计算】IBM开放云架构
IBM 的开放云架构 通过改变业务和社会运行的方式,云计算开启了丰富的创新途径.开发人员现在正将记录系统与参与性系统相结合,一种新的基于云的应用程序风格正在出现:交互系统.这些应用程序要可持续发展,云 ...
- 招聘前端、Java后端开发、测试、Mysql DBA
公司介绍: http://www.lagou.com/gongsi/43095.html http://www.yamichu.com 简历发到: zhuye@yamichu.com 招聘职位: JA ...
- 【我给面试官画饼】Python自动化测试面试题精讲
那今天给家分享的是一个面试主题. 就比如说我们的自动化测试,自动化如何去应对面试官,和面试官去聊一聊自动化的心得,自动化你现在去面试的时候是一个非常重要的一个关键点,所以如果你在这方面有一定的心得.那 ...
- 向架构师进军-->可重用架构资源
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 软件架构有三个主要来源:拿取.方法以及直觉.拿取也就是可重用资源.对于一个标准的系统 ...
- python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)
简介 上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试. 什么是接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统 ...
- [原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试),长期有效
[原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试方向),长期有效 高级测试工程师(性能/自动化方向) 1.负责性能测试计划,性能需求分析,性能测试方案和用例设计,搭建性能测试环境,执 ...
随机推荐
- AdminLTE-2.2.0 学习
这货基于Bootstrap 3(提供了统一的样式,覆盖了默认的),所以官方建议先搞懂Bootstrap 3再说. # 布局 Layout 布局由四个主要部分组成: Wrapper (.wrapper) ...
- IEEE二进制浮点数算术标准学习
看到有网上有个项目是要求将浮点数用二进制表示出来,需要用IEEE754标准,查了查维基和深入理解计算机系统,重新学习了一遍浮点数在计算机中的表示和内存中的存储, 先简单的做个笔记,后面需要更深入的理解 ...
- adb devices 端口占用
一. 1.通过cmd命令,输入adb devices查看连接设备时,报错 2 .通过adb nodaemon server 查看adb server绑定的端口.提示“通过每个套接字地址只能使用一次” ...
- Orchard源码--初步(1)
1.打开解决方案Orachard.sln 2.直接启动项目调试 3.接着你会看到下图 呵呵,有点啰嗦( ̄︶ ̄)↗ 涨 4.点击上图的‘Finish Setup’后
- 如何在SCENEKIT使用SWIFT RUNTIME动态加载COLLADA文件
问题:今天接到一个项目,负责弄需求的美眉跟我讲能不能做一个原型能够加载Collada文件,流程如下: 用户用app下载Collada 压缩包(如内购项目) 压缩包解压 展示Collada文件里的内容 ...
- js基础知识点总结
如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避免全局变量和方法(命 ...
- Android studio 分析内存泄漏
以前用eclipse的时候,我们采用的是DDMS和MAT,不仅使用步骤复杂繁琐,而且要手动排查内存泄漏的位置,操作起来比较麻烦.后来随着Android studio的潮流,我也抛弃了eclipse加入 ...
- 自定义滚动条——控制div的大小和透明度
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #2b7ec3 } p.p2 { margin: 0.0px ...
- c# DataTable 转为 List 类型
代码: public class ModelConvertHelper<T> where T : new() { public static IList<T> ConvertT ...
- gridview汇出EXCEL (ExportGridViewToExcel(dt, HttpContext.Current.Response);)
调用 ExportGridViewToExcel(dt, HttpContext.Current.Response); private void ExportGridViewToExcel(DataT ...