【笔记】软件测试的艺术
软件测试的心理学和经济学
测试是为发现错误而执行程序的过程,所以它是一个破坏性的过程,测试是一个“施虐”的过程。
软件测试的10大原则
1、测试用例需要对预期输出的结果有明确的定义
做这件事的前提是能够提前知晓需求和效果图,如果不知晓则需要根据经验判断,沟通获取预期结果。
体现在文档上就是写下预期结果、输入的描述。
2、程序员应该避免测试自己写的程序
程序员会下意识地避免找出错误,因为担心受到上级,同事,客户的惩罚。也有可能错误地理解了需求。
3、编写软件的组织不应当测试自己编写的软件
4、仔细检查每个测试的执行结果
5、编写测试用例不仅包括有效的输入,还应包括无效的输入
6、检查程序“未做其应该做的”仅占测试的一半,测试的另一半是检查程序是否“做了不应该做的”
比如说工资管理程序应该只为正式员工生成工资单,但它不仅为正式员工生成,还未非正式员工生成了工资单。
7、应避免测试用例用后即弃,除非软件是个一次性的软件
测试用例的编写花费了时间,如果程序之后发生了变更,还可以直接时候或者改造后使用。
8、计划测试工作时不应假定程序不会发生错误
所谓测试,就是为了发现错误而执行的过程。
9、程序某部分发现更多错误的可能性,与该部分已经发现的错误数量成正比
为了发现更多的错误,在测试完毕后进行统计,对发现错误最多的模块进行额外的测试。
10、软件测试是一件富有创造性、智力挑战性的工作
测试用例的设计
黑盒测试
进行黑盒测试的前提是知晓需求,比如通过阅读需求规格说明书,设计文档,产品图等,这样就能明确正确的输入和输出。
边界值分析
这种方法比等价划分法的测试回报率更高,所谓边界条件,是指输入、输出的等价类恰好处于边界、高于边界、低于边界的状态。
它与等价划分法的不同在于:
1、需要编写的测试用例更多
2、不仅仅是关注输入,还要关注输出
关注输出的例子:比如在一页显示10条订单的页面中,分4种情况考虑:
总数为0条的情况下
总数为1条的情况下,关注第一页第一条的订单
总数为10条的情况下,关注第一页第一条的订单,第一页最后一个订单
总数为11条的情况下,关注第一页第一条的订单,第一页最后一个订单,第二页的第一条订单
拓展:
测试回报率(Test Return on Investment,Test ROI)是指通过进行测试活动所带来的投资回报。它是衡量测试活动效果和价值的指标,用于评估测试活动对企业或组织的盈利能力和效率的影响。
还有一种测试方法叫做错误猜测,这是一种无法用语言,文字描述传授的经验。
更高级别测试
软件开发周期的模型可以归纳为以下7个步骤:
0、甲方
1、需求
2、目标
3、外部规格说明
4、系统设计
5、程序结构设计
6、模块接口规格说明
7、代码
从0-1的步骤是将用户的需求转换为书面上的需求,这些需求是该产品要实现的目标。
1-2通过评估可行性和成本、消除相抵触的用户需求、排序,将用户需求转换为具体的目标。
2-3将产品视为一个黑盒,仅考虑接口与用户的交互,不考虑具体的细节
3-4将系统分隔为一个个的子系统,并定义它们的接口
4-5进一步将子系统分隔为模块,并确定模块的功能,层次结构(比如依赖关系),模块之间的接口。
5-6定义每个模块的接口和功能
6-7用编程语言实现具体的功能
以下是从其他角度审视上述过程:
需求规格说明定义了为什么要开发程序(Why)
目标定义了程序要做什么,以及怎么做(What,How)
外部规格说明定义了程序对用户的准确表现
针对不同的开发过程,有着不同的测试方法:
0、甲方 - 安装测试
1、需求 - 验证测试
2、目标 - 系统测试
3、外部规格说明 - 功能测试
4、系统设计 - 集成测试
5、程序结构设计 - 集成测试
6、模块接口规格说明 - 模块测试
7、代码
功能测试
功能测试又称为黑盒测试,它的目的是发现与外部需求规格的不一致。可以使用等价分析,边界值分析,因果图和错误猜测法。软件测试的10大原则也可以被拿来使用。
系统测试
能力测试
最简单的做法是判断目标文档中描述的内容在程序中是否实现。
强度测试
对于Web应用程序而言,并发数是一个重要的指标。
对于移动设备可以使用低配置手机,打开大量程序后,试着拨打一个电话,再打开GPS(这通常会持续占用大量CPU和无线电信号),然后试着运行程序看能否正常运行。
可用性(用户体验)测试
可用性测试可以换来更好的市场和经济回报。
从12个问题中获得测试灵感。P117 - P118
安全性测试
可以测试操作系统的内存保护机制、数据库管理系统的数据安全机制。
性能测试
很多软件都有特定的性能和效率目标,例如吞吐量和响应时间。
配置测试
如今很多软件都设计为可在多种操作系统下运行,如果要测试这种程序,应在不同的操作系统中,测试不同的浏览器。需要注意的是,即使是同一种浏览器,在不同的操作系统之下,运行方式也会有所不同。
兼容性测试
大多数开发的软件并不是全新的,常常是为了替换某些不完善的系统。这样的软件往往有着特定的目标,涉及到与现有系统的兼容以及从现有系统的替换过程。
例如对数据库管理系统进行升级就是一个例子,需要将现有的数据迁移到新的系统中。
安装测试
有些软件的安装过程非常复杂,测试安装过程是系统测试中一个重要的部分。
可恢复性测试
操作系统,数据库管理系统和远程处理系统等软件通常都有可恢复性的目标,说明系统如何从程序错误,硬件失效和数据错误中恢复过来。
我们可以故意将程序错误置入某个系统中,判断系统是否可以从中恢复。例如I/O设备错误,网络通讯故障等。
可维护性测试
可维护性包括:调试问题的平均时间,维护过程,内部业务文档的质量。
测试结束的准则
由于资源是有限的,但发现Bug的可能性无限的,所以必须定义何时停止测试。
比较合适的方式是:
对于功能测试,根据经验和项目成熟度估计一个Bug数,测试的目标是发现该目标数的Bug。
对于系统测试,可以是发现预估的Bug数,或者用完了计划的时间(前提是一定时间内发现Bug的频率已经很低了)
互联网应用测试
Web服务器常见的是三层结构,即表现层,业务层和数据层。
表现层提供了GUI(用户图形接口)
业务逻辑层提供了业务流程,比如用户身份认证,事务处理等。
数据访问层存储系统使用的数据(如数据字典)和从用户收集来的数据。
下列是测试三层结构的例子:
表示层的测试聚焦于易用性、人机交互方面,第一印象非常重要。
业务层的测试聚焦于性能、财务、数据的完整性、网络连通性。
数据层的测试聚焦于性能,可用性,安全性。
测试的策略
表现层测试
表现层测试包含的主要内容:
1、内容测试。包括整体审美,字体,色彩,拼写,内容准确度和默认值。
2、Web站点结构,包括无效的链接和图形。
3、用户环境。包括Web浏览器版本和操作系统配置。
业务层测试
进行业务层测试时,需要模拟用户在购买某个产品或服务时执行的步骤。例如:对于一个购物网站需要模拟搜索商品分类,整理购物车,创建或登录用户,结账,通知用户交易完成,向用户推荐商品。除了内部事务,还包括外部事务,如:第三方支付,收件地址确认。
业务层测试包含的主要内容:
1、性能,检查系统是否满足书面规格说明书的要求。
2、数据有效性(数据验证),测试的目的在于发现从客户那里采集到数据中的错误。
3、事务,测试的目的在于发现事务处理过程中的错误。
数据层测试
数据层最大的挑战之一,是复制应用系统的运行环境。必须使用相同的硬件平台和软件版本来进行有效的测试。
数据层测试包含的主要内容:
1、响应时间,应量化执行SQL语句的消耗时间,测试环境必须与实际运行环境一致,否则得到的结果将会无效。
2、数据完整性,测试的目的是发现数据存储方式的问题,比如数据类型和长度可能导致数据截断或失去精准度,对于日期和时间字段,会出现时区问题,存储时间依据的是客户端,Web服务器,应用服务器还是RDBMS的时间?多字节字符集可能需要双倍的存储容量。
3、容错性和可恢复性,最大化MTBF,最小化MTTR
移动应用测试
移动环境下测试时需要考虑的因素:
移动应用面临的挑战:设备的多样性,网络基础设施,脚本编程,可用性测试。
如何应对这些挑战呢?
使用模拟器是一个不错的方法,它可以模拟各种各样的设备和系统。
如果想要模拟用户的网络情况,可以亲身前往使用地活着雇佣当地人进行测试。
使用模拟器可以完成自动化的回归测试和系统测试。
测试人员亲自使用应用程序,以期找出界面以及人机交互的Bug。
测试方法
1、可以参考互联网应用的测试方法
2、在网络条件不那么好的条件下测试系统的反应,比如:在断网后恢复网络,会重复下订单吗?
3、测试缓存可能导致的Bug
移动应用测试分类:
基于模拟器的测试:
优点:最节约成本和最实用的方法(模拟多种设备),容易管理,可进行自动化测试。
缺点:不能100%模拟设备,所以兼容性和性能不能完全确保没问题。
从哪里开始呢?
首先制定测试计划,确定想要兼容的手机操作系统,品牌,型号。
在真机和模拟器中寻找一个平衡。
对测试用例进行版本控制,控制变更。
定期审核测试用例,剔除无效脚本。
相关文章:
![](https://img-blog.csdnimg.cn/a1e9fbce740a484a928cf627c7823c1e.png)
【笔记】软件测试的艺术
软件测试的心理学和经济学 测试是为发现错误而执行程序的过程,所以它是一个破坏性的过程,测试是一个“施虐”的过程。 软件测试的10大原则 1、测试用例需要对预期输出的结果有明确的定义 做这件事的前提是能够提前知晓需求和效果图,如果不…...
![](https://img-blog.csdnimg.cn/b94ccbe06b3c4c68b14170df34a136ac.png)
配置本地maven
安装maven安装包 修改环境变量 vim ~/.bash_profile export JMETER_HOME/Users/yyyyjinying/apache-jmeter-5.4.1 export GOROOT/usr/local/go export GOPATH/Users/yyyyjinying/demo-file/git/backend/go export GROOVY_HOME/Users/yyyyjinying/sortware/groovy-4.0.14 exp…...
![](https://www.ngui.cc/images/no-images.jpg)
C# 按钮的AcceptButton和CancelButton属性
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System...
![](https://www.ngui.cc/images/no-images.jpg)
SMT贴片制造:专业、现代、智能的未来之选
在现代科技的快速发展下,SMT贴片制造作为电子元器件的核心工艺之一,正以其专业、现代和智能的特点成为未来的首选。 随着电子产品越来越小型化,传统的手工焊接已经无法满足高速、高精度、高稳定性的要求。而SMT贴片制造作为一种先进的表面贴…...
![](https://www.ngui.cc/images/no-images.jpg)
python sqlalchemy db.session 的commit()和colse()对session中的对象的影响
实验一:commit()之后查看stu的属性id,查看db.session是否改变 db_test.route("/db_test",methods["GET"]) def db_test():stuStuTest()stu.stu_age22stu.stu_name"nnannns"stu.stu_class11print("sessio…...
![](https://img-blog.csdnimg.cn/26d8de6a4c2a41ba9c5fc95745013110.png)
python读取图像小工具
一、和图像交互获得图像的坐标和像素值 import cv2 import numpy as np import signal import threading import timeif __name__ __main__:img cv2.imread(XXX,0)#读取图片font_face,font_scale,thicknesscv2.FONT_HERSHEY_SIMPLEX,0.5,1#鼠标交互def mouseHandler(event,x…...
![](https://www.ngui.cc/images/no-images.jpg)
【ES6】JavaScript中Reflect
Reflect是JavaScript中的一个内建对象,它提供了一组方法,用于对对象和函数进行操作和检查。这些方法与内建对象的方法非常相似,但具有更高的灵活性。 以下是Reflect对象的一些常用方法: 1、Reflect.apply(target, thisArgument,…...
![](https://img-blog.csdnimg.cn/d44eaf109ecb4813a60939603b3e3cda.png#pic_center)
Ajax + Promise复习简单小结simple
axios使用 先看看老朋友 axios axios是基于Ajaxpromise封装的 看一下他的简单使用 安装:npm install axios --save 引入:import axios from axios GitHub地址 基本使用 axios({url: http://hmajax.itheima.net/api/province}).then(function (result…...
![](https://img-blog.csdnimg.cn/img_convert/8f661138d6d6c892f4c77d8411e9088d.jpeg)
WebDAV之π-Disk派盘 + 小书匠
小书匠是一款功能丰富,强大的知识管理工具。全平台覆盖,离线数据存储,自定义数据服务器,所见即所得的 markdown 编辑体验。 小书匠提供了多种实用的编辑模式,例如:栏编辑、双栏编辑、三栏编辑、全屏写作、全屏阅读等。并且该软件还提供了许多有用的扩展语法,比如Latex公…...
![](https://img-blog.csdnimg.cn/f1c56affffe943bf8afc02b76d65d34a.png)
LTE ATTACH流程、PDN流程、PGW地址分配介绍
1、S-GW\P-GW选择 MME根据S-GW和P-GW的拓扑信息进行S-GW/P-GW的选择,在S-GW的候选序列和P-GW的候选序列中比较,寻找是否有合一的S-GW/P-GW,并且根据S-GW的优先级和权重信息进行排序,得到S-GW/P-GW的候选组。 2、SGW>PGW连接 PD…...
![](https://img-blog.csdnimg.cn/aa5009838124425798e28e70d2479be9.png)
SQL sever中用户管理
目录 一、用户管理常见方法 二、用户管理方法示例 2.1. 创建登录账户: 2.1.1 检查是否创建账户成功: 2.2. 创建数据库用户: 2.2.1检查用户是否创建成功: 2.3. 授予权限: 2.3.1授予 SELECT、INSERT 和 U…...
![](https://img-blog.csdnimg.cn/0489c77c4fba464ebc9a265ebb592657.png)
linux————pxe网络批量装机
目录 一、概述 什么是pxe pxe组件 二、搭建交互式pxe装机 一、配置基础环境 二、配置vsftpd 三、配置tftp 四、准备pxelinx.0文件、引导文件、内核文件 一、准备pxelinux.0 二、准备引导文件、内核文件 五、配置dhcp 一、安装dhcp 二、配置dhcp 六、创建default文…...
![](https://img-blog.csdnimg.cn/img_convert/dd776401937ecb319097fbff3222adc8.png)
处理时延降低24倍,联通云粒数据引擎优化实践
*作者:郑扬勇,云粒星河数据中台产品负责人 云粒智慧科技有限公司成立于 2018 年 6 月,是中国联通集团混改以来成立的首家合资公司,是中国智慧城市数智化建设者。一直以来,云粒智慧以数字化、智能化、集约化产品为核心&…...
![](https://img-blog.csdnimg.cn/441f762d07a448c6a37155ba63aeae01.png)
学习MATLAB
今日,在大学慕课上找了一门关于MATLAB学习的网课,MATLAB对于我们这种自动化的学生应该是很重要的,之前也是在大三的寒假做自控的课程设计时候用到过,画一些奈奎斯特图,根轨迹图以及伯德图,但那之后也就没怎…...
![](https://img-blog.csdnimg.cn/a8141aa122c949f39bf22ea8184d04fa.png#pic_center)
React 18 对 state 进行保留和重置
参考文章 对 state 进行保留和重置 各个组件的 state 是各自独立的。根据组件在 UI 树中的位置,React 可以跟踪哪些 state 属于哪个组件。可以控制在重新渲染过程中何时对 state 进行保留和重置。 UI 树 浏览器使用许多树形结构来为 UI 建立模型。DOM 用于表示 …...
![](https://img-blog.csdnimg.cn/2d63a4ab49b04f67842937dd8ac721f0.png)
MySQL之事务与引擎
目录 一、事物 1、事务的概念 2、事务的ACID特点 3、事务之间的相互影响 4、Mysql及事务隔离级别(四种) 1、查询会话事务隔离级别 2、查询会话事务隔离级别 3、设置全局事务隔离级别 4、设置会话事务隔离级别 5、事务控制语句 6、演示 1、测试提交事务 2、测试事务回滚 4…...
![](https://www.ngui.cc/images/no-images.jpg)
Flink集群常见的监控指标
为确保能够全面、实时地监控Flink集群的运行状态和性能指标。以下是监控方案的主要组成部分: Flink集群概览:通过访问Flink的JobManager页面,您可以获取集群的总体信息,包括TaskManager的数量、任务槽位数量、运行中的作业以及已…...
![](https://www.ngui.cc/images/no-images.jpg)
React常见知识点
1. setCount(10)与setCount(preCount > preCount 10) 的区别: import React, { useState } from react; export default function CounterHook() {const [count, setCount] useState(() > 10);console.log(CounterHook渲染);function handleBtnClick() {//…...
![](https://img-blog.csdnimg.cn/dfc08b55d6a84e7aa473cf48bd1d4e98.png)
Vue-router路由
配置路由 相当于SpringMVC的Controller 路径然后,跳转到对应的组件 一键生成前端项目文档...
![](https://img-blog.csdnimg.cn/b1ba7165ecff43edb1d69fa56554b1c5.png)
JVM-CMS
when 堆大小要求为4-8G 原理 初始标记:执行CMS线程->STW,标记GC Root直接关联的对象->低延迟 并发标记:执行CMS线程和业务线程,从GC Root直接关联的对象开始遍历整个对象图 重新标记:执行CMS线程->STW&a…...
![](https://img-home.csdnimg.cn/images/20230724024159.png?be=1&origin_url=https://www.learnfk.com/guide/images/wuya.png)
无涯教程-Flutter - Dart简介
Dart是一种开源通用编程语言,它最初是由Google开发的, Dart是一种具有C样式语法的面向对象的语言,它支持诸如接口,类之类的编程概念,与其他编程语言不同,Dart不支持数组, Dart集合可用于复制数据…...
![](https://img-blog.csdnimg.cn/045a6fa79d084717b31159865fc2e9f4.png)
如何创建美观的邮件模板并通过qq邮箱的SMTP服务向用户发送
最近在写注册功能的自动发送邮箱告知验证码的功能,无奈根本没有学过前端,只有写Qt的qss基础,只好借助网页设计自己想要的邮箱格式,最终效果如下: 也推销一下自己的项目ShaderLab,可运行ShaderToy上的大部分着色器代码&…...
![](https://img-blog.csdnimg.cn/img_convert/edb7dfbfa76d69465529591ac2198ae6.jpeg)
手机无人直播软件在苹果iOS系统中能使用吗?
在现代社交媒体的时代,直播带货已经成为了一种热门的销售途径。通过直播,人们可以远程分享自己的商品,与观众进行互动,增强沟通和参与感。而如今,手机无人直播软件更是成为了直播带货领域的一项火爆的技术。那么&#…...
![](https://img-blog.csdnimg.cn/img_convert/9927a8c6ba1112d993ab90bc06b6c13a.png)
创建2个线程并执行(STL/Windows/Linux)
C并发编程入门 目录 STL 写法 #include <thread> #include <iostream> using namespace std;void thread_fun1(void) {cout << "one STL thread 1!" << endl; }void thread_fun2(void) {cout << "one STL thread 2!" <…...
![](https://www.ngui.cc/images/no-images.jpg)
Redis可以干什么
Redis可以做什么? 缓存 Redis作为一款高性能的缓存数据库,能够将常用的数据存储在内存中,以提高读写效率。它支持多种数据结构,如字符串、哈希表、列表、集合等,让你可以根据业务需求选择合适的数据结构进行缓存。 …...
![](https://img-blog.csdnimg.cn/img_convert/f6c378f0d8560e8828a0a6911afd7830.png)
R语言+Meta分析;论文新方向
Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…...
![](https://img-blog.csdnimg.cn/80c95d619eff4d09b4a32be7ebe247c0.png#pic_center)
实战系列(二)| MybatisPlus详细介绍,包含代码详解
目录 1. MybatisPlus 的基本功能2. 基本用法3. MybatisPlus 的配置4. MybatisPlus 的实体类、Mapper 接口、Service 类和 Controller 类 MybatisPlus 是一个功能强大的 MyBatis 增强工具,它提供了丰富的特性来简化操作数据库的代码。它主要用于简化 JDBC 操作&#…...
![](https://img-blog.csdnimg.cn/img_convert/515b06864d42a2a9b506580614285b49.jpeg)
横向对比 npm、pnpm、tnpm、yarn 优缺点
前端工程化是现代Web开发中不可或缺的一环,它的出现极大地提升了前端开发的效率和质量。 在过去,前端开发依赖于手动管理文件和依赖,这导致了许多问题,如版本冲突、依赖混乱和构建繁琐等。而今,随着众多前端工程化工具…...
![](https://img-blog.csdnimg.cn/img_convert/b608826138a9a307ac159b802c9a230c.jpeg)
安防监控/视频汇聚/云存储/AI智能视频融合平台页面新增地图展示功能
AI智能分析网关包含有20多种算法,包括人脸、人体、车辆、车牌、行为分析、烟火、入侵、聚集、安全帽、反光衣等等,可应用在安全生产、通用园区、智慧食安、智慧城管、智慧煤矿等场景中。将网关硬件结合我们的视频汇聚/安防监控/视频融合平台EasyCVR一起使…...
![](https://img-blog.csdnimg.cn/749c2b4b1a8f4502b4b5687bac560b91.png#pic_center)
机器人中的数值优化(九)——拟牛顿方法(下)、BB方法
本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…...
![](/images/no-images.jpg)
建设企业网站找谁/打开百度网站
写在前面本文目的不是教你如何成为一个真正的Linuxer也没有能力教你成为一个真正的linuxer而是通过笔者的一些想法试图指引你真正踏上学习linux之路成为一个真正意义的在路上的linuxer这有什么区别?是的一个成熟的Linuxer能够游走于表面的命令提示符与内部代码细节实…...
![](/images/no-images.jpg)
钓鱼网站到底怎么做/免费建立个人网站
webpack是需要自己编写自己需要的一个配置对象,取决你如何使用webpack,下面指定了所有的可用的配置选项。参考文档:https://doc.webpack-china.org... webapck.config.js var path require(path); #使用Node内置的path模块,并在它前面加上__…...
![](/images/no-images.jpg)
俄文视频网站开发/品牌线上推广方案
因为没有打开本地api set httpd port 2812 and use address localhost allow localhost...
![](https://www.cnblogs.com/Emoticons/face/043.gif)
大连网站制作的/关键词搜索引擎
原来在家里的网络被偷了以后,电信的就一直没有来修理,说他们的修理费太高,决定把我们这里定为黑名单,也就是说在也不能通网络了,郁闷了。。。本来工作的地方离家就很远,骑电单车要120分钟,一天4…...
![](/images/no-images.jpg)
wordpress seo标题/百度投诉中心人工电话
但是在portlet中我们一般不直接使用xxUtil方法,所以要通过BooksLocalServiceUtil方法进行调用,需要再进行一层包装,找到xxx.service.impl里面的BooksLocalServiceImpl类,我们在里面添加一个方法名为getAllBooks,然后在…...
flash网站素材下载/永久免费用的在线客服系统
内核:3.3 平台:rlx 涉及的主要文件有 include/linux/clk.h drivers/clk/clkdev.c drivers/clk/clk.c arch/rlx/bsp/clock.c 1、 clk通用接口 内核定义了一套标准的接口(include/linux/clk.h),用于所有的平台之上。每个时钟源对象使用…...