测试工程师必知的10大测试法则

作为开发人员,我们应该遵守这样一句话:“质量不是来自检查,而是来自生产过程的改进。”——爱德华·戴明

“测试即代码。”
太多的组织将任何未编码的东西视为一次性的。很明显,测试是必不可少的,但我们一次又一次地发现,团队将测试自动化和相关材料视为二等公民。测试是用户行为的文档,与产品组织产生的需求密不可分,并在虚拟层面与用于创建功能的代码相连。

如果它提供了价值,就应该对它进行版本化、维护、照顾和尊重,就好像它是产品本身的核心功能一样。这应该包括测试用例规范、设计和技术文档以及错误报告。

“时间扼杀信心。”
大多数人可能会认为,在一个功能上花的时间越多,就需要花越多的时间来完善、完善、测试和探索它。与直觉相反,这适合“旧世界”风格的开发,有一个测试环境、一个阶段环境,以及围绕用户将如何与之交互的许多宏大假设。

这些法则试图将SDLC(系统生命周期)引入云计算世界:微小的、渐进的变化,在推广到整个世界之前,先向有限的受众推广。“键盘在10分钟内完成生产”——这会带来更快的反馈、更少的逃脱和更高的信心。以下是编码新世界的10大法则。

1.人人皆测试
团队的每一位成员,无论使用什么流程,无论生产什么产品,无论哪个行业——每个人——都对产品的质量负责。产品、工程、测试,甚至周围的功能:客户支持、销售、营销、业务开发、早期访问测试版客户、高管——每个人都在测试。

2.度量风险而非覆盖率
假设团队甚至可以就“完美”的工作定义达成一致,那么仅仅追求完美就会导致注意力从最重要的事情上转移:关键缺陷转移到生产中对业务的风险。
在你开始担心所有功能的全面覆盖之前,先痴迷于对你的业务最关键的六个用户流。

3.测试的是“金钱”想要什么
每个业务、每个部门和每个团队都部署了一组核心功能,这些功能对收入的影响比其他功能更大。或者,每个团队都必须维护一组影响较小但仍然必要的功能。在考虑其他因素之前,将测试工作重点放在影响收入的部件上。对于电子商务,将结账流程优先于用户配置文件。对于财务,优先考虑安全和资金处理工作流程,而不是信息页面。

4.广度比深度更重要
浅层测试产品的所有区域比深层测试产品的某些区域更重要。业务逻辑的深度、多元组合旨在找到最模糊的边缘案例:这可能会在其他高优先级领域遗漏更明显的缺陷。

一旦达到了广度,那对某个特定功能的深度是多少?请参考法则2。

5.唯一完美的信号是用户的信号
在你的用户与你的软件交互之前,你所做的一切都是理论性的。

测试就是模型。它们是基于从过去用户行为中获得的信息的用户行为的近似值。我们从测试中得到的信号可能因环境、测试本身的逻辑缺陷、无意识的偏见,甚至之前模型中的错误数据而存在缺陷!

了解用户使用软件时会发生什么的唯一方法是观察用户使用软件后会发生什么。生产分析的用户旅程应与测试覆盖率相关联,以评估测试策略的有效性。

此外,考虑到用户体验中包含的元素甚至不会被视为bug,也可能不会反映在分析中。当构建变为绿色时,并不意味着就是工作的结束。

6.代码在可测试(并经过测试)之前是不完整的
可测试性是对代码的各个部分进行检测的行为。如果不允许对这些信号进行轮询和解释,很难判断正确的行为。这导致了不成比例的额外工作,这增加了发布周期的时间,并将焦点从客户体验上转移开。时间将会扼杀信心。

7.每项测试都应导致明确的行动
如果不知道当测试失败时该怎么办(无论是从测试的角度还是从产品的角度),那么测试就没有提供价值。

这通常是由于测试步骤太多,或者产品没有提供足够的失败信息(包括没有充分的可测试性,参照法则2。)

8. 始终测试高层级
软件测试有“层”(从高到低):生产、UAT、功能、集成和单元。
高层测试对于强制不同团队开发的不同组件之间的交互至关重要,但边缘案例的细节可能会向下移动到较低层。这些较低层测试具有较少的依赖性,避免了昂贵的管道配置/编排,并且运行速度比较高层测试更快。

例如,UI测试应该仅用于确定用户界面是否能够呈现API的输出。如果通过同一个UI重复测试业务逻辑,则应该将这些测试中的大部分“向下”移动到API层。

9.从不链接测试
所有测试都应在不考虑任何其他测试状态的情况下执行。测试数据的管理应确保每个测试都生活在自己的独立场景中,并且不能被另一个测试更改。

测试应该是原子化的、自主的。

10. 首选最紧密的反馈回路
所有测试都是反馈回路。他们从特定的角度贯穿产品,并向特定的人或团队提供反馈。最严密的反馈回路是尽可能多地切断以测试所讨论的特定操作的回路。测试一个比必要的更宽的循环会引入一些变量,这些变量可能会混淆你从测试中得到的信号。

这十条法则并不完整,测试领域还有很多限定守则,而且使用这些法则时的上下文环境也很重要。也许某次测试会打破一两条法则,那也无妨,不必把它们奉为金科玉律,重要的是寻求持续改进,而非特定一次的完美。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/635863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯备战 每日一题 (2)

今天的题目是回忆迷宫 这个题目我们来熟悉一下 弗洛伊德算法 的代码模板 弗洛伊德算法用来处理最短路径问题 弗洛伊德算法(Floyd’s algorithm)用于解决图中所有节点对之间的最短路径问题。算法的基本思路是通过逐步迭代更新节点对之间的最短路径长度&a…

Windows系统使用手册

点击前往查看🔗我的博客文章目录 Windows系统使用手册 文章目录 Windows系统使用手册Windows10解决大小核调度问题Windows系统安装软件Windows系统Typora快捷键Windows系统压缩包方式安装redisWindows安装dockerWindows系统的docker设置阿里源Windows系统下使用doc…

美颜SDK功能设计:定制化美颜滤镜的应用与开发教学

当下,美颜SDK成为开发者们追逐的焦点之一。然而,如何设计具有个性化特色的美颜滤镜,不仅能够满足用户的需求,还能够在激烈的市场竞争中脱颖而出,成为了一项技术上的挑战。 一、定制化美颜滤镜的重要性 为什么我们需要…

android 常规log的查看与抓取

ProtoLog开关 在代码中我们经常看见ProtoLog打印的log,如下: ProtoLog.i(WM_DEBUG_ANIM, "Animation start delayed for %s", mAnimatable);这种log正常情况不会显示,因此我们需要打开开关,其格式为: adb …

【迅搜19】扩展(二)TNTSearch和JiebaPHP方案

扩展(二)TNTSearch和JiebaPHP方案 搜索引擎系列的最后一篇了。既然是最后一篇,那么我们也轻松一点,直接来看一套非常有意思的纯 PHP 实现的搜索引擎及分词方案吧。这一套方案由两个组件组成,一个叫 TNTSearch &#xf…

Linux多线程——互斥锁

本质Gitee仓库:互斥锁、锁封装 文章目录 1. 线程互斥2. 互斥锁2.1 锁的初始化与释放2.2 加锁与解锁 3. 锁的原理4. 锁的封装5. 线程安全与可重入函数 1. 线程互斥 一个共享资源在被多个线程并发访问的时候,可能会出现一个线程正在访问,而另一个线程又来…

「alias」Linux 给命令起别名,自定义bash命令

0. 背景 Arch 系统没有 ll命令,在其他发行版用惯了一时间没有真不习惯,来配置一下吧! 1. 全局配置 我希望 ll 命令可以被所有人使用,所以应该配置在全局的bash配置文件中,一般这个全局bash配置文件在: /etc/bash.bashrc 切好管理员权限后,命令如下 echo “alias ll‘ls -l -…

hyperf安装

下载docker windows下下载 安装Windows docker,会提示安装 安装wsl https://docs.microsoft.com/zh-cn/windows/wsl/install(插件) 安装>wsl --install -d Ubuntu-16.04 用户名:xxx 密码:xxx supervisor安装 …

ACM题解Day1|1.Accurate Movement ,2.Help the Support Lady, 3.Absolute Game

1.Accurate Movement 思路 : 本题为模拟题主要是模拟方块的移动,其中 以两木块的最右端做为记录点. 先挪动a, 每次a块只能挪到和b块相同的位置, b块每次最多挪动(b-a).为什么因为有限制挡板然后俩木块要不能同时移动只能移动一一个 #include<bits/stdc.h> using namespac…

数字IC后端设计实现 | PR工具中到底应该如何控制density和congestion?(ICC2Innovus)

吾爱IC社区星友提问&#xff1a;请教星主和各位大佬&#xff0c;对于一个模块如果不加干预工具会让inst挤成一团&#xff0c;后面eco修时序就没有空间了。如果全都加instPadding会导致面积不够overlap&#xff0c;大家一般怎么处理这种问题&#xff1f; 在数字IC后端设计实现中…

[AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

L1-064 估值一亿的AI核心代码(Java)

以上图片来自新浪微博。 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序&#xff0c;规则是&#xff1a; 无论用户说什么&#xff0c;首先把对方说的话在一行中原样打印出来&#xff1b;消除原文中多余空格&#xff1a;把相邻单词间的多个空格换成 1 个空格&#xff0c…

jsjs原生 JavaScript轮播图 渐变淡入淡出

下面是整体代码 复制即可使用&#xff0c; <!DOCTYPE html> <html lang"zn"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" con…

php array_diff 比较两个数组bug避坑 深入了解

今天实用array_diff出现的异常问题&#xff0c;预想的结果应该是返回 "integral_initiate">"0"&#xff0c;实际没有 先看测试代码&#xff1a; $a ["user_name">"测","see_num">0,"integral_initiate&quo…

【Spring之手写一个依赖注入容器】

Spring之手写一个依赖注入容器 1. 创建两个自定义注解1.1 Component注解1.2 DI注解 2. ApplicationContext接口与实现类2.1 ApplicationContext 接口2.2 实现类&#xff1a;DefaultListableApplicationContext 3. 定义DAO层和Service层及其实现4. 定义异常信息类4.1 InjectBean…

ETL概念

ETL ETLELT 技术原理ETL 模式应用场景常见工具ETL未来发展方向 ETL 在BI项目中ETL会花掉整个项目至少1/3的时间&#xff0c; ETL设计的好坏直接关接到BI项目的成败。ETL(Extract-Transform-Load) : 用来描述将数据从来源端经过抽取&#xff08;extract&#xff09;、转换&…

深入理解Rust引用与借用

文章目录 一、概述二、引用与解引用三、不可变引用四、可变引用4.1、可变引用同时只能存在一个4.2、可变引用与不可变引用不能同时存在4.3、悬垂引用&#xff08;Dangling References&#xff09; 团队博客: 汽车电子社区 一、概述 获取变量的引用&#xff0c;称之为借用(borro…

day3:基于UDP模型的简单文件下载

思维导图 tftp文件下载客户端实现 #include <head.h> #define SER_PORT 69 #define SER_IP "192.168.125.223" int link_file() {int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}return sfd; } int filedownloa…

智慧校园大数据应用系统介(3)

智能巡课系统 巡课系统是一种新的课堂观察记录工具,它将学校或区域内全体教师作为一个整体,采用数字化手段描述教师和学生的课堂行为。通过移动端实时记录和通用性的统计分析,使教育者更容易发现教学过程与教学成果之间的联系,有助于改变课堂生态、提高教学有效性、提升教…

《剑指 Offer》专项突破版 - 面试题 18、19 和 20 - 详解回文字符串(C++ 实现)

目录 前言 面试题 18 : 有效的回文 面试题 19 : 最多删除一个字符得到回文 面试题 20 : 回文子字符串的个数 前言 回文是一类特殊的字符串。不管是从头到尾读取一个回文&#xff0c;还是颠倒过来从尾到头读取一个回文&#xff0c;得到的内容是一样的。 英语中有很多回文单…