当前位置: 首页 > news >正文

软件测试7大误区

随着软件测试对提高软件质量重要性的不断提高,软件测试也不断受到重视。但是,国内软件测试过程的不规范,重视开发和轻视测试的现象依旧存在。因此,对于软件测试的重要性、测试方法和测试过程等方面都存在很多不恰当的认识,这将会进一步的影响软件测试活动的开展,并且阻碍软件测试质量的提高。下面简单列举了几种有代表性的对软件测试的认识误区,并作了相应的分析和解释。

误区1:软件开发完成后才进行测试

  在传统的瀑布模型中,软件项目主要有一下几个阶段组成:用户需求、需求分析、概要设计、详细设计、编码和实现、测试以及运行维护。由于软件测试仅处于运行维护阶段之前,是软件产品交付用户使用之前保证软件质量的重要手段。因此人们一般认为,软件测试只是软件编码后的一个阶段。

  但随着软件测试业的发展,人们越来越认识到:软件测试不应只是软件项目的收尾工作,而应该在软件生命周期的每一阶段中都包含测试。软件测试是贯穿于整个软件开发生命周期的过程活动,包括软件测试计划、软件测试需求分析、软件测试用例设计、软件测试执行、软件缺陷管理、软件测试风险管理以及其他的一些软件测试相关的活动等等组成。在软件项目的每个阶段,都需要进行不同目的和不同内容的测试活动,以保证各个阶段工作产品输出的正确性。软件测试的对象也不仅仅是软件代码,还包括软件需求文档和设计文档等其他所有的软件工作产品。软件开发与软件测试之间应该是交互进行的,比如单元编码之后需要进行单元测试,模块组合之后进行集成测试。

  如果等到软件编码结束之后才进行测试,测试的时间很有限,很难达到测试的覆盖率要求和测试的质量要求。同时,假如在项目开发的后期,发现一些软件需求阶段和概要设计阶段的错误和问题,修改这些缺陷导致的成本将是非常高的。有资料表明:平均而言,如果在需求阶段修正一个错误的代价是1,那么,在设计阶段就是它的3-6倍,在编程阶段是它的10倍,在内部测试阶段是它的20-40倍,在外部测试阶段是它的30-70倍,而到了产品发布出去,这个数字就是40-1000倍。修正错误的代价不是随着时间线性增长的,而几乎是呈指数增长的。因此,应尽早地不断地进行软件测试,发现错误并加以修正,而非软件开发结束后才进行测试。

误区2:软件发布后发现软件问题,那是测试人员的责任

  许多人认为测试人员需要对发布的软件质量负责,假如软件到用户后,发现很多的问题,那是测试人员的错和责任。这种认识误区非常打击测试人员的积极性。软件中的缺陷可能来自软件开发过程中的任何一个过程,而对于软件测试而言,只能证明软件存在缺陷,而不能保证软件没有错误。通过软件测试,无法发现软件中的所有错误和缺陷。从软件开发的角度看,软件的高质量不是软件测试人员测出来的,而是需要软件生命周期的各个过程共同来保证的。出现软件错误,不能简单地归结为某一个人或某个团队的责任。比如有些错误的产生可能不是技术原因,可能来自于混乱的项目管理;或者客户发现软件某些功能并没有按照原有需求来实现,换言之,软件没有完成客户想做的操作,诸如此类问题很可能是软件设计人员理解需求错误致使设计不当所引起的。

  软件的质量,不仅仅只是测试人员的事情,软件项目参与的所有人员都应该关注软件的质量。软件质量的提高,需要每个项目人员的努力。测试只是提高软件质量的一个重要环节,质量保证应该贯穿于整个软件开发生命周期的所有的开发活动、测试活动、项目管理活动等。同时,采用合适的开发和测试过程,对改进软件质量也能起到重要的作用。除了测试活动外,同时应该分析软件项目的各个过程,从过程改进方面寻找产生错误的原因和改进的措施。

误区3:测试人员不需要具备很高的技能

  不少软件业人士认为软件测试行业对软件测试人员的技能要求不高。认为测试只是对照产品规格书操作软件,发现软件与规格说明不一致的地方,是没有技术含量的工作。

  这种观点是错误的,或者至少是步恰当的。随着软件测试行业的发展,测试不仅仅是运行软件发现缺陷的一个过程,而是从项目早期,测试人员就开始介入,进行测试需求分析、计划测试等。这要求测试人员有很好的沟通能力、理解能力、分析问题能力,同时还必须对产品开发技术有一定的了解。

  随着软件工程学的发展和软件项目管理经验的提高,软件测试已经形成了一个独立的技术学科,演变成一个具有巨大市场需求的行业。软件测试技术不断更新和完善,新工具、新流程、新测试设计方法都在不断更新,需要掌握和学习很多测试知识。所以,具有编程经验的程序员不一定是一名优秀的测试人员。软件测试包括测试技术和管理两个方面,完全掌握这两个方面的内容,需要很多测试实践经验和测试理论知识,需要我们不断的学习。 

误区4:测试是测试人员的工作,和开发人员无关

  我们提倡软件测试尽早介入软件项目,或者说我们提倡贯穿于整个软件开发生命周期的测试。因此,在项目概念、需求和设计阶段,软件测试就应该介入项目中去。开发和测试是相辅相成的过程,需要软件测试人员和程序员、系统分析员等项目其他成员保持密切的联系,需要更多的交流和协调,以便提高测试效率。在这些阶段所发现的问题将有助于开发设计人员完善需求和设计。

  在项目开发过程中,一般由开发人员针对模块进行白盒测试,这是早期的测试。后期对于测试人员所发现的缺陷,开发人员应根据优先级来进行修复,针对开发人员的修改,测试人员还要进行再测试和回归测试工作。因此,在整个项目过程当中,测试也不仅仅是测试人员的事情,而是测试人员和开发人员紧密合作的过程。

误区5:由项目进度来决定测试工作量

  规范的测试流程应该是一个整体的连续的过程,包括测试计划和控制、测试分析和设计、测试实现和执行等阶段。每一阶段也应有各自的规程。而大多数人对测试的理解往往是随项目进度而定,即离项目交付空余的时间多,就多做测试;反之,则少做测试。这样很可能导致测试时间紧张,从而可能放弃其中的一些测试,可能导致遗漏一些重要的缺陷,显然这种做法存在非常大的风险。

  测试进度由项目开发进度来确定,这个观念很大程度上是因为“测试是开发生命周期的一个阶段”这个误区造成的。实际上,我们一直强调,测试是贯穿于整个软件开发生命周期的。在制订软件项目计划的同时,就需要规划和制订软件测试的计划。测试计划的一个重要内容是确定测试的进度(也就是测试时间和资源的安排)。因此,测试时间的多少,应该在项目早期根据项目的特点和风险分析结果来确定,而不仅仅是决定于项目进度。

误区6:软件测试是没有前途的工作,只有开发人员是软件高手

  由于我国软件整体开发能力比较低,软件过程还不规范。项目的成功往往靠个别开发人员的能力,他们负责总体设计和程序详细设计,认为软件开发就是编写代码,给人的印象往往是程序员是真正的牛人,具有很高的地位和待遇。因此,在这种环境下,软件测试并不受重视,软件测试人员的地位和待遇自然就偏低了,甚至软件测试变得可有可无。

  随着市场对软件质量要求的不断提高,软件测试将变得越来越重要,相应的软件测试人员的地位和待遇将会逐渐提高。在微软等软件过程比较规范的大公司,软件测试人员的数量和待遇与程序员没有多大差别,优秀测试人员的待遇甚至比程序员还要高。软件测试将会成为一个具有很大发展前景的行业,软件测试大有前途。市场需要更多具有丰富测试技术和管理经验的测试人员,他们同样是软件专家。

误区7:自动化测试效率高,将取代软件手工测试

  测试自动化在某些情况下可以提高测试的效率(比如完成重复的测试配置、模拟大虚拟用户等),但是并不是所有的测试都适合自动化,如程序需要处理的数据量不大、程序运行的次数不多、或者测试需要一些人的主观判断(如界面测试)等,在这些情况下,自动化测试可能并不是很好的选择。

  同时,自动化测试需要在前期投入大量的资源和工作量,同时需要维护的成本很高,包括环境的搭建、测试脚本的设计、维护等。因此,要具体情况具体分析,不能盲目推崇测试自动化。

相关文章:

软件测试7大误区

随着软件测试对提高软件质量重要性的不断提高,软件测试也不断受到重视。但是,国内软件测试过程的不规范,重视开发和轻视测试的现象依旧存在。因此,对于软件测试的重要性、测试方法和测试过程等方面都存在很多不恰当的认识&#xf…...

【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作

目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象(ndarray) 多维数组的属性 1、创建数组 2、数组操作 3、数组数学 4、数组广播 5、排序操作 1. np.sort() 函数 2. np.argsort() 函数 3. ndarray.sort() 方法 4. 按列或行排序 5. n…...

CSS宽度问题

一、魔法 为 DOM 设置宽度有哪些方式呢?最常用的是配置width属性,width属性在配置时,也有多种方式: widthmin-widthmax-width 通常当配置了 width 时,不会再配置min-width max-width,如果将这三者混合使…...

浅谈C++|STL之string篇

一.string的基本概念 本质 string是C风格的字符串,而string本质是一个字符串 string和char * 区别 char * 是一个指针string是一个类,类内部封装了char *,管理这个字符串,是一个char * 型容器。 特点 string类内部封装了很多成…...

Kubernetes Dashboard安装部署

Kubernetes Dashboard安装部署 1. 下载Dashboard 部署文件2. 修改yaml配置文件3. 应用安装,查看pod和svc4. 创建dashboard服务账户5. 创建admin-user用户的登录密钥6. 登录6.1 使用token登录(1) 短期token(2) token长期有效 6.2 使用 Kubeconfig 文件登录 7.安装met…...

在Qt的点云显示窗口中添加坐标轴C++

通过摸索整理了三个方法&#xff1a; 一、方法1&#xff1a;//不推荐&#xff0c;但可以参考 1、通过pcl的compute3DCentroid()方法计算点云的中心点坐标&#xff1b; 函数原型如下&#xff1a; compute3DCentroid (const pcl::PointCloud<PointT> &cloud, Eigen…...

[密码学入门]凯撒密码(Caesar Cipher)

密码体质五元组&#xff1a;P,C,K,E,D P&#xff0c;plaintext&#xff0c;明文空间 C&#xff0c;ciphertext&#xff0c;密文空间 K&#xff0c;key&#xff0c;密钥空间 E&#xff0c;encrypt&#xff0c;加密算法 D&#xff0c;decrypt&#xff0c;解密算法 单表代换…...

uboot 顶层Makefile-make xxx_deconfig过程说明三

一. uboot 的 make xxx_deconfig配置 本文接上一篇文章的内容。地址如下&#xff1a;uboot 顶层Makefile-make xxx_deconfig过程说明二_凌肖战的博客-CSDN博客 本文继续来学习 uboot 源码在执行 make xxx_deconfig 这个配置过程中&#xff0c;顶层 Makefile有关的执行思路。 …...

c++中的多线程通信

信息传递 #include <iostream> #include <thread> #include <chrono> #include <mutex> #include <condition_variable> #include <queue> // 用于存储和同步数据的结构 struct Data {std::queue<std::string> messag…...

IO day7

1->x.mind 2-> A进程 B进程...

C语言之指针进阶篇(3)

目录 思维导图 回调函数 案例1—计算器 案例2—qsort函数 关于qsort函数 演示qsort函数的使用 案例3—冒泡排序 整型数据冒泡排序 回调函数搞定各类型冒泡排序 cmp_int比较大小 cmp传参数 NO1. NO2. 解决方案 交换swap 总代码 今天我们学习指针难点之回调函数…...

SQL7 查找年龄大于24岁的用户信息

描述 题目&#xff1a;现在运营想要针对24岁以上的用户开展分析&#xff0c;请你取出满足条件的设备ID、性别、年龄、学校。 用户信息表&#xff1a;user_profile iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543female20…...

vite搭建vue3项目

参考视频 1.使用npm搭建vite项目,会自动搭建vue3项目 npm create vitelatest yarn create vite2.手动搭建vue3项目 创建一个项目名称的文件夹执行命令&#xff1a;npm init -y 快速的创建一个默认的包信息安装vite: npm i vite -D -D开发环境的依赖 安装vue,现在默认是vue3.…...

Qt中表格属性相关操作,调整表格宽度高度自适应内容等

1 表格列宽设置 利用Qt designer设计&#xff0c;可以通过改变表头的列宽从而保证内容不会被遮盖&#xff0c;输入空格的方式增加表头的长度&#xff0c;比如表头为"Value"&#xff0c;则改成"Value "&#xff0c;可以扩展列默认的宽度&#xff0c;保证后面…...

NLP机器翻译全景:从基本原理到技术实战全解析

目录 一、机器翻译简介1. 什么是机器翻译 (MT)?2. 源语言和目标语言3. 翻译模型4. 上下文的重要性 二、基于规则的机器翻译 (RBMT)1. 规则的制定2. 词典和词汇选择3. 限制与挑战4. PyTorch实现 三、基于统计的机器翻译 (SMT)1. 数据驱动2. 短语对齐3. 评分和选择4. PyTorch实现…...

docker四种网络模式

文章目录 一.为什么要了解docker网络二.docker 网络理论三.docker的四类网络模式3.1 bridge模式3.2 host模式3.3 container模式3.4 none模式 四.bridge模式下容器的通信4.1 防火墙开启状态4.2 防火墙关闭状态 一.为什么要了解docker网络 当你开始大规模使用Docker时&#xff0…...

C 风格文件输入/输出---无格式输入/输出---(std::fgetc,std::getc,std::fgets)

C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数&#xff0c;而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 无格式输入/输出 从文件流获取字符 std::fgetc, std::getc …...

多线程之间如何进行通信 ?

实现多线程之间通信的方式有多种,以下是一些常见的方式: 共享变量:多个线程共享一个变量,通过互斥锁(如synchronized关键字)来保护对该变量的访问,确保线程之间的安全通信。 wait() 和 notify() / notifyAll():通过Object类的wait()方法使线程等待,然后使用notify()或…...

二叉树顺序存储结构

目录 1.二叉树顺序存储结构 2.堆的概念及结构 3.堆的相关接口实现 3.1 堆的插入及向上调整算法 3.1.1 向上调整算法 3.1.2 堆的插入 3.2 堆的删除及向下调整算法 3.2.1 向下调整算法 3.2.2 堆的删除 3.3 其它接口和代码实现 4.建堆或数组调堆的两种方式及复杂度分析…...

Apache HTTPD 多后缀解析漏洞复现

Apache HTTPD 支持一个文件拥有多个后缀&#xff0c;并为不同后缀执行不同的指令。比如&#xff0c;如下配置文件&#xff1a; AddType text/html .html AddLanguage zh-CN .cn 其给.html后缀增加了media-type&#xff0c;值为text/html&#xff1b;给.cn后缀增加了语言&…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...