软件测试—从认识到BUG

前言

互联网技术圈流传着一条所谓的"鄙视链":算法 > 后端开发 > 前端开发 > 测开 > 测试。

这不过是从业者茶余饭后的谈资,不同岗位的工作重心各异,每个角色都不可替代。

本文将系统梳理软件测试的基本知识,从基本概念到岗位认知,从开发模型到BUG管理,帮助读者建立完整的测试知识框架。


一、认识测试

1.1 测试无处不在

测试并非软件行业独有,它渗透在日常生活的方方面面。

以商场买衣服为例,整个选购过程就是一系列测试行为的组合:

  • 外观测试:进店初筛,判断是否存在符合个人审美的款式

  • 试穿测试:选择尺码,验证上身效果是否提升外观

  • 面料测试:触摸感受纯棉、涤纶等材质的舒适度

  • 价格测试:询价,判断是否在心理预期(300元)之内

买衣服过程中的测试行为

软件领域同样如此,对一款购物APP进行测试,需要覆盖启动、搜索、商品浏览、下单购买等核心链路。

对一段Java程序进行测试,则要验证代码逻辑是否符合预期------比如a=1、b=2时c是否等于3,a=1、b=-2时c是否等于-1。

1.2 为什么需要测试

企业的终极目标是盈利,互联网企业通过软件与用户交互来实现这一目标。

产品质量直接决定用户体验,质量太差会导致用户大量流失,因此企业对测试岗位的需求持续旺盛。

软件测试的定义:验证软件产品特性是否满足用户需求的过程


二、测试岗位与开发对比

2.1 两大岗位

测试领域主要分为两类岗位,虽然名称各异,但本质都归属于这两大方向:

维度 测试开发工程师 测试工程师
工作重心 可测试性与通用测试基础框架 用户视角,组织整体测试实践
核心职责 编写单元测试框架、自动化测试框架 分析总结、驱动测试执行、构建端到端自动化
关注重点 质量提升与测试覆盖率 用户体验与产品质量保障

投递简历时会看到五花八门的岗位名称------功能测试、移动端测试、客户端测试等,不同企业命名习惯不同,但性质要么是测试工程师,要么是测试开发工程师。

校招阶段对编程语言和技能没有硬性要求,面试主要围绕简历内容展开。

高频面试题:测试开发与测试工程师的区别

相同点:都统称为测试人员,都对产品质量负责。

不同点:测试开发多了"开发"二字,但这里的开发不是业务开发,而是开发测试效率工具(如自动化、性能测试工具),通过工具提升测试效率和质量。

2.2 测试与开发的区别

(1)工作内容

开发人员通过C、C++、Java、Python等编程语言实现软件特性并修复BUG;测试人员则编写测试用例、执行测试、发现缺陷、验收修复,同时利用测试工具保障软件质量。

(2)技能要求
阶段 开发 测试
应届生 语言基础、开发框架、数据库、数据结构、Linux 语言基础、开发框架、数据库、数据结构、Linux + 测试技能
在职人员 需掌握Redis、RabbitMQ、ES等中间件 需掌握Redis、RabbitMQ、ES等中间件

总结而言:开发广度小、专业度高;测试广度大、专业度相对较低。但在大型互联网企业,对测试人员的专业要求可能与开发持平。

(3)薪资水平

中小企业测试薪资总体低于研发,但自动化等专业测试方向与研发基本无差距;大厂研发与测试薪资基本无差别。

(4)调试≠测试

测试人员执行测试动作,开发人员执行调试动作,二者看似相近,实则存在本质区别:

维度 调试 测试
目的 定位并解决程序中的问题 发现程序中的缺陷
参与角色 主要由开发人员完成 测试人员与开发人员共同执行;黑盒测试由测试人员完成,单元/集成测试由开发人员执行
执行阶段 开发阶段 贯穿整个软件开发生命周期

高频面试题:走测试岗位为什么还要学习开发知识?

  1. 测试人员也需要编写代码,如自动化测试、性能测试、开发测试效率工具等,需要能看懂代码、了解开发框架。

  2. 学好开发知识能提高测试质量,通过查看代码中数据的走向,从代码层面发现更深层的问题。


三、修炼之道

3.1 综合能力

(1)沟通能力

沟通能力直接影响工作开展效率,是测试工程师获得更好发展的"敲门砖"。

面试中常有这样的情况:明明知道答案,却表达不清楚,导致面试评价较差。

工作中同样如此,清晰的沟通能大幅降低与开发、产品的协作成本。

(2)快速学习能力

测试人员需要具备三重学习能力:对不同业务需求的快速理解能力、对测试新技术和新方法的学习能力、对不同编程语言的快速掌握能力。

(3)开发能力

除了保障项目质量,测试人员还需针对当前业务开发效率工具来提升测试效率。同时,测试工作涉及大量文档编写------测试计划、测试用例、测试报告等,扎实的文字能力是必备基础。

3.2 自动化测试

自动化测试在测试领域占有举足轻重的地位,它将测试人员从大量重复性手工劳动中解放出来,使其能把更多精力投入到更多类型的测试中。

生活中的自动化无处不在:自动洗手液避免了按压动作,疫情期间有效减少交叉感染;交通灯使交通有序进行,大幅降低事故概率。

软件测试中的自动化分为两类:

  • 接口自动化:自动请求接口并校验返回属性是否符合预期

  • UI自动化:在界面或移动端模拟人的行为进行操作,检查元素和操作是否符合预期

3.3 设计能力

测试用例设计能力是指无论面对什么类型的测试,都能设计出高效发现缺陷、保证产品质量的优秀用例。提升路径有三:掌握设计方法、阅读优秀案例、多写多练积累总结。

3.4 探索性思维

测试工程师在执行过程中不断学习被测系统,结合经验、知识和直觉进行错误猜测和逻辑推理,整理出更多有针对性的测试关注点。探索性思维的质量取决于测试人员的经验积累。
炒菜中的探索性思维:油温、火候、调味量的控制

就像炒菜一样,油温大小、火候控制、调味品用量都非常考验厨师的探索性思维------炒得好是菜,炒不好就"放毒"了。

测试同样如此,同样的系统,不同经验的测试人员能发现的缺陷数量和深度截然不同。

3.5 兴趣与责任感

兴趣是择业的重要因素,对工作性质不感兴趣很难走得长远。而责任感是测试工作者最重要的素质之一------测试往往是产品质量的最后把关者,测试工作成效很难衡量,用例执行数、BUG数量都无法直接说明产品质量是否合格。

高频面试题:为什么走测试岗位而不走开发岗位?

回答思路:从岗位性质 + 个人性格/爱好 + 职业规划三个方面阐述。

  1. 个人兴趣:测试工作需要耐心和细心,接触测试内容后产生浓厚兴趣。

  2. 岗位性质:测试人员以保障项目质量为主,通过开发效率工具提升测试效率;开发以业务编码为主。

  3. 职业规划:大学期间树立测试方向目标,今后持续提升测试和开发能力,在测试领域做出有影响力的成果。


相关推荐
龙亘川4 天前
一网统管AI平台民生业务实践:基于城市数字底座赋能公积金业务服务升级
大数据·安全·智慧城市·开源软件·数据可视化·政务
kybs19914 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
LorryJovens4 天前
【LAAP科研】双系统具身AGI范式研究——基于LAAP认知架构与Jev概率决策模型的系统性技术调研与范式验证
人工智能·gpt·安全·架构
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
山东科恩光电4 天前
提升安全性的关键技术:安全触边在工业自动化中的应用解析
安全
LONGZETECH4 天前
一线职教实测:风光 580 汽车故障诊断仿真系统,破解实车实训四大核心痛点
人工智能·学习·安全·架构·汽车
Mikko74 天前
jackson-databind 升到 2.21.6 就安全了吗?jackson-core 是另一个坐标,它那条 high 全局库至今没收
java·后端·安全·json
赛博守夜人4 天前
反舞弊系列之十四:商业地产与零售招商中的“转租差价与免租期寻租”
安全