软件测试的艺术_全书读书笔记
——写在前面,本文是对《软件测试的艺术(第3版)》的观后总结,记录方便日后查阅复习。本文中的一些图片都是引用自《软件测试的艺术(第3版)》。
相对于别的书来说,这本书的可读性非常高,并且有许多实用的例子,之后可能会多次回顾,因此在此记录一些重点,以便查阅。
文章目录
- C2十条软件测试的原则
- C3代码检查
- C4测试用例设计
- 黑盒测试
- 等价划分
- 边界值分析
- 因果图
- 错误猜测
- 白盒测试
- 判定覆盖
- 条件覆盖
- 测试策略
- C5模块(单元)测试
- 白盒测试
- 增量测试(集成)
- 自顶向下与自底向上测试
- C6更高级别的测试
- 根据软件生命周期进行测试
- 功能测试
- 系统测试
- 验收测试
- 安装测试
- 制定测试计划
- 易用性(用户体验)测试
- 应该考虑的部分要素
- 调试
- 蛮力法调试
- 归纳法调试
- 演绎法调试
- 回溯法调试
- 测试法调试
- 调试的原则
- 错误分析
- C9 敏捷开发模式下的测试
- 敏捷开发特征
- 敏捷测试
- 极限编程和测试
- 极限单元测试
- C10互联网应用测试
- 互联网测试的特殊
- 表示层的测试内容
- 业务层的测试内容
- 数据层的测试
- C11移动应用测试
- 移动环境
- 设备
- 设备多样性
- 运营商网络基础设施
- 脚本编程
- 易用性测试
- 测试方法
C2十条软件测试的原则
1、测试用例中一个必须部分是对预期输出的定义
2、程序员应当避免独立测试自己编写的程序
3、编写软件的组织(开发组)不应当测试自己编写的软件
4、应当彻底检查每个测试的执行结果
5、测试用例的编写不仅应当根据有效和预期的输入情况,而且也应当根据无效和未预料到的输入情况
6、检查程序是否没做到需求只是一半,另一半是检查是否做了不该做的。
7、应避免测试用例用后即弃,除非是一次性软件
8、计划测试工作时不应该默许假定不会出错
9、程序某部分存在更多错误的可能性,与该部分已发现错误成正比
10、软件测试是一项极富创造性、极具智力挑战性的工作
C3代码检查
代码审查清单,同前书,记录在Xmind中。
分为数据引用错误;
数据声明错误;
运算错误;
比较错误;
控制流程错误;
接口错误;
输入\输出错误;
其他检查。
C4测试用例设计
最关键的问题:在所有可能的测试用例中,哪个子集最有可能发现最多的错误!
先通过特定黑盒测试设计用例,再使用白盒测试对逻辑结构进行检查、补充用例。
黑盒测试
四种方法:等价划分、边界值分析;因果图分析;错误猜测。
等价划分
两个原则:
严格控制测试用例的增加!
覆盖大部分其他可能的测试用例。
步骤:
1、确定等价类:
列一个表格
外部条件 | 有效等价类 | 无效等价类 |
---|---|---|
可登记1-6人 | 1-6人 | 0人,6+人 |
2、生成测试用例:
设置编号;
编写新用例覆盖尽可能多的有效等价类,直到所有都被覆盖;
编写新用例覆盖一个无效等价类直到所有都被覆盖。
边界值分析
考虑边界上下值以及输入/输出边界。
1、如果-1.0——1.0,则考虑1.0,1.001,0.999等
2、输入值数量边界
3、输出结果、数量边界
4、其他内部、外部边界条件
因果图
对输入组合状态进行划分。
本质上是一种数字逻辑电路。
过程:1、将规格说明分解为可执行片段。
2、确定规格说明中的因果关系。(系统转换也是果,如数据库、文件修改等)
3、分析规格说明的语义内容并转换成因果布尔图。
4、给图加上注解符号。
5、跟踪图中状态变化情况,将因果图转换成一个有限项的判定表,每一列代表一个用例。
6、列转换成测试用例。
基本符号,∩and ∪or ∽not ——identity
约束符号E:ab不能同时为1
i:abc中至少有一个是1(不能全0)
o:ab有且仅有一个必须为1
R:如果a 1则b必须1
可以只使用判定表不画因果图!
https://www.cnblogs.com/test-123/p/9686346.html
建立有限项判定表时,步骤为:
1、选择一个果为当前状态
2、回溯查找所有导致该果为1的因组合
3、每个因组合生成一列
4、对于每种因组合判断,放置。
原则:或:
结果0列所有情况
结果1不考虑全1情况
与:
结果1列所有情况
结果0列一个为0情况
和所有都为0的情况
错误猜测
依赖直觉与经验!
白盒测试
关注测试用例执行的程度及覆盖程序逻辑结构的程度。
判定覆盖
每个单元必须有是和否的结果,每个入口点都必须被调用一次。
条件覆盖
确保每一个判断的每一个条件的所有可能结果至少执行一次。
测试策略
1、如果规格说明中包含输入条件组合,应使用因果图分析法
2、任何情况下都要使用边界值分析方法
3、应为输入和输出确定有效和无效等价类,在必要时对测试用例进行补充
4、使用错误猜测进行补充
5、使用白盒\多重条件覆盖准则进行逻辑结构的检查
C5模块(单元)测试
从程序中的单个子程序或过程开始进行测试(可同时进行多个)。
白盒测试
基本上都是使用上文中的白盒测试方法等设计有效的测试用例集。
if的所有路径遍历及边界条件
增量测试(集成)
增量测试即将下一步要测试的模块组装到测试完成的模块集合中再进行测试。
大爆炸测试则反之。
驱动模块和桩模块:前者是将数据传给被测模块的主模块;后者是被测试模块调用的模块。
优缺点:
可以使用之前测试过的模块作为驱动模块,减少工作量;
可以较早发现模块中接口与假设相关错误(集成测试);
便于定位错误;
更彻底地进行测试(整体性);
占用机器时间和资源多;
在项目刚开始没法使用(模块分离情况下)。
自顶向下与自底向上测试
这两种都是属于增量测试的方法。
具体不作介绍。
注意检测软件是否完成了一些不该有的功能!
C6更高级别的测试
根据软件生命周期进行测试
功能测试
发现程序与其外部规格说明(从用户角度对程序的精确描述)之间存在不一致的过程。
使用黑盒测试中的四种方法:等价类、边界、因果图、猜测。
系统测试
并非测试系统功能,而是将系统或程序与其初始目标(可度量的书面目标)进行比较。
可以根据下面的测试用例分类进行测试用例的检查与补充。
验收测试
从客户角度验证可用功能及易用性。
安装测试
安装时间、文件是否完整。
制定测试计划
测试计划:
目标;
结束准则;
进度;
责任;
测试用例库及标准;
工具;
计算机时间;
硬件配置;
集成;
跟踪步骤;
调试步骤;
回归测试。
预测bug数量
通过发现与修复Bug的数量与预测的进行对比,再加上测试周期的长度来决定测试是否结束。
易用性(用户体验)测试
应该考虑的部分要素
由于用户文化差异导致的理解偏差和环境偏差?
程序的输出是否有意义、能被理解?
错误信息是否易懂?
用户界面语义等是否正确连贯一致?
用户名密码等输入框是否有输入验证,大小写提示?
无用选项?
对于用户移动鼠标等操作是否能可见,有交互?
操作是否易于上手,上下级返回,查找?
快速来回切换是否有问题?
最终功能是否完成设计规格要求?
与使用者(不同领域)联系沟通问卷调查。
E = 100 * (1-(1-L)^n)
E为找到错误的比例,n为测试人数,L为单个测试人员发现的易用性问题比例
调试
发现问题后就得进行调试
蛮力法调试
1、利用内存信息输出调试;
2、根据在程序中插入print来调试
3、使用自动化调试工具调试。
归纳法调试
步骤:
演绎法调试
从普通的理论或者前提出发,使用排除和精炼的过程,找到错误。
回溯法调试
按照逻辑一点点找,工作量大
测试法调试
使用不同的测试用例辅助调试
调试的原则
1、动脑
2、长时间无法解决则留到之后
3、与他人交流
4、不第一时间使用调试工具
5、避免使用测试法
6、避免引入新错误
错误分析
位置?人?内容?下次如何避免?发现时间的早晚长短?
C9 敏捷开发模式下的测试
随着竞争不断增加,现在软件基本都是敏捷开发,周期短且质量要求高,对测试的要求也逐渐变高!
敏捷开发特征
提倡迭代式和增量式,围绕客户为中心、以客户需求为导向进行开发,不断迭代提升客户满意度。
敏捷测试
协同测试的一种形式。
客户通过定义用例及程序属性参与设计、开发者和测试者共同打造自动化测试配件。
在这种测试中,测试者不能仅仅找出错误,还需要协助开发修复bug、改变需求设计以及性能质量的提升。
极限编程和测试
轻量、敏捷,最大程度利用API进行编程。
关注点:
开发与客户协同;
根据客户指定规格说明和用例;
不断测试代码库;
寻求反馈(结对编程)。
其中测试很重要,首先要创建单元测试和验收测试,再进行代码库的建立。
极限单元测试
单元测试为极限测试中的主要测试方法,有两条简单的规则:
所有代码模块在编码开始之前必须设计好单元测试用例并在产品发布之前通过。
C10互联网应用测试
互联网作为最火热的C/S模式程序,对于性能、易用性等要求非常高(用户粘性弱)。
三层C/S架构可以当做三个具有清晰接口定义的黑盒,改变每一层都不会影响其他层。
第一层——Web服务器,也被叫做表示层,主要是将内容可视化后呈现给用户。
第二层——业务层,运行应用服务器(软件),负责事务处理、用户身份鉴定、数据确认和日志。
第三层——数据存储。
互联网测试的特殊
1、用户群庞大且五花八门;
2、业务环境复杂;
3、用户地点;
4、安全性;
5、测试环境;
6、兼容性。
第一印象非常重要,因此首先进行测试的是易用性和人机交互界面。
对于服务器、日志、系统资源和备份的监控也非常重要,确保不出问题。
如果出了问题,也要使平均故障间隔时间最大(MTBF)并且平均故障恢复时间(MTTR)最小。
以下为检测三层一些常用的测试用例。
表示层的测试内容
1、内容测试;
2、Web站点结构测试(链接、图形、文件);
3、用户环境(兼容性和操作系统);
使用白盒测试的理论以及逻辑顺序的全覆盖来进行网页GUI的测试。
确定需要支持的浏览器,注意一些比较容易出现问题的代码和控件的使用:
ActiveX、Html5、JavaScript、Adobe Flash、VBS、PHP、Java applets
业务层的测试内容
互联网应用系统的业务逻辑中的错误,与测试单机程序类似,黑白盒共同使用。
如果是内部开发,则白盒优先,如果是外包则黑盒优先,从单元开始再进行系统测试。
主要测试项:
性能、数据有效性、事务。
性能测试
页面加载时间,事务处理时间;一般用响应时间和吞吐率来进行定量衡量。
压力测试也是进行性能测试的一种很好的方式(临近失效点)。
数据验证
主要判断数据采集与真实值有无差别。
事务测试
是一种业务层专属的系统测试,需要对内部业务和外部服务都进行完整的测试,确保内外正确通信。
数据层的测试
主要是对应用系统用于存储和获取信息的数据库管理系统的测试。
最大的挑战是复制应用系统的运行环境(配置);
其次测试响应时间、数据完整性、容错性和可恢复性(最大化MTBF最小化MTTR)
C11移动应用测试
挑战主要在设备和移动环境两个方面。
移动环境
首先考虑设备连接问题、网络速度、有效区域(偏远地区)以及网络延时;
其次关注设备多样性、限制(内存缓存尺寸操作系统多任务等)、输入手段等;
最后确认以何种方式安装和维护应用程序。
设备
主要分为四类挑战
设备多样性
具体同上述第二条所述,引出两种不同的测试方法:真机和模拟器测试。
运营商网络基础设施
支持不同运营商,不同地区使用的测试。
脚本编程
对于模拟器可以较为方便地进行自动化脚本的编写,对于真机除了必要的步骤进行手工操作,也得尝试进行自动化脚本的编写。
易用性测试
用户角度进行操作尝试。
测试方法
借鉴互联网测试第二第三层的测试方法,从性能规格、数据有效性以及事务处理组件进行测试;以及响应时间、数据完整性、容错性以及可恢复性进行测试。
软件测试的艺术_全书读书笔记相关推荐
- 《软件测试经验与教训》读书笔记---第二章
<软件测试经验与教训>读书笔记--目录 第一章 测试员的角色 第二章 按测试员的方式思考 第三章 测试手段 第四章 程序错误分析 第五章 测试自动化 第六章 测试文档 第七章 与程序员交互 ...
- 《android开发艺术探索》读书笔记(五)--RemoteViews
接上篇<android开发艺术探索>读书笔记(四)--View工作原理 No1: RemoteViews使用场景:通知栏和桌面小部件 No2: 通知栏主要通过NotificationMan ...
- 《软件测试自动化之道》读书笔记 之 目录导航
<软件测试自动化之道>读书笔记 之 目录导航 2014-10-09 源代码 第1章 API测试 第2章 基于反射的UI测试 第3章 基于Windows的UI测试 第4章 测试套件设计模式 ...
- 《Android开发艺术探索》读书笔记
一.前言 花了几天整理完<Android进阶之光>的读书笔记,效果不是很满意,把以前零散整合成一片超长笔记,总感觉也不是那么好,决定接下来读书笔记还是拆开来,以后也好查找一点. 二.目录 ...
- 金融市场基础知识-全书读书笔记汇总
金融市场基础知识-全书读书笔记汇总 参考: https://mp.weixin.qq.com/s?__biz=MzUxNDc2ODk1Mw==&mid=2247484311&idx=1 ...
- 《android开发艺术探索》读书笔记(二)--IPC机制
接上篇<android开发艺术探索>读书笔记(一) No1: 在android中使用多进程只有一种方法,那就是给四大组件在AndroidMenifest中指定android:process ...
- 《Android开发艺术探索》读书笔记 (3) 第3章 View的事件体系
本节和<Android群英传>中的第五章Scroll分析有关系,建议先阅读该章的总结 第3章 View的事件体系 3.1 View基本知识 (1)view的层次结构:ViewGroup也是 ...
- 软件测试的艺术_读书笔记(五)
第四章 更高级别的测试 1.软件开发过程 当程序无法实现其最终用户的要求的合理功能时,就发生了一个软件错误 软件开发过程 :沟通有关最终程序的信息,并将信息从一种形式转换到另一种形式.由于信息的转化 ...
- 【我的JS第三本】JavaScript_DOM编程艺术第二版读书笔记
经过前一段时间HTML&CSS的学习,感觉视频加读书是一个比较不错的学习方法,两者相辅相成,互相补充,所以也准备看看关于JavaScript的书. 2015年12月14日,之前使用韩顺平老师的 ...
最新文章
- 重磅! SLAM从入门到精通系统教程汇总
- Android面试题目之四: 归并排序
- 用Eclipse进行java学习的步骤
- linux DNS辅域
- 使用PyTorch从零开始实现YOLO-V3目标检测算法 (四)
- Apache Flink 在实时金融数据湖的应用
- python计算一年有多少天_Python 案例 004 (计算当前时间是一年中的第几天)
- [有奖励]GeneralUpdate开源项目招募开发者
- xcode 4 最低的要求是 10.6.6的版本,如果你是 10.6.3的版本,又不想升级的话。可以考虑通过修改版本号的方法进行安装
- java构造方法 this_Java中的构造方法this、super的用法详解
- 生物数据库建设,等你来~
- FreeCodeCamp Caesars密码项目的演练
- 波卡生态预言机ROOM上线Uniswap,最高涨幅达862%
- 2021年中国一次性防护服市场趋势报告、技术动态创新及2027年市场预测
- 【渝粤教育】国家开放大学2018年秋季 1356T高级英语听说(2) 参考试题
- javascript 下载和打印文件流
- IELTS11 Test2 laws are needed to make people recycle more of their waste
- matlab在矩阵后面添加两行数据_用MATLAB对矩阵每两列求和
- 驱动器存在问题-U盘量产-主控SM3255AB
- Badboy内置浏览器,提示脚本错误解决方法
热门文章
- 认识并使用 Promise
- Android 高仿百度地图的LBS服务——离线地图篇 Part 2 (v 3.1.1)
- matlab程序实现物理现象,关于基于Matlab物理实验系统设计与实现
- Rectifier (neural networks) - 整流函数
- 研发体系的打造(总裁班)
- Linux学习笔记:Linux常用命令总结
- oracle cursor rowcount,关于cursor的rowcount
- php中rowcount 意思,浅谈PDO的rowCount函数
- 【国庆快乐】送给祖国母亲一朵玫瑰花(效果+代码+运行)
- MySQL(学习笔记)——数据库视图、触发器及存储过程