前言
互联网技术圈流传着一条所谓的"鄙视链":算法 > 后端开发 > 前端开发 > 测开 > 测试。
这不过是从业者茶余饭后的谈资,不同岗位的工作重心各异,每个角色都不可替代。
本文将系统梳理软件测试的基本知识,从基本概念到岗位认知,从开发模型到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)调试≠测试
测试人员执行测试动作,开发人员执行调试动作,二者看似相近,实则存在本质区别:
| 维度 | 调试 | 测试 |
|---|---|---|
| 目的 | 定位并解决程序中的问题 | 发现程序中的缺陷 |
| 参与角色 | 主要由开发人员完成 | 测试人员与开发人员共同执行;黑盒测试由测试人员完成,单元/集成测试由开发人员执行 |
| 执行阶段 | 开发阶段 | 贯穿整个软件开发生命周期 |
高频面试题:走测试岗位为什么还要学习开发知识?
测试人员也需要编写代码,如自动化测试、性能测试、开发测试效率工具等,需要能看懂代码、了解开发框架。
学好开发知识能提高测试质量,通过查看代码中数据的走向,从代码层面发现更深层的问题。
三、修炼之道
3.1 综合能力
(1)沟通能力
沟通能力直接影响工作开展效率,是测试工程师获得更好发展的"敲门砖"。
面试中常有这样的情况:明明知道答案,却表达不清楚,导致面试评价较差。
工作中同样如此,清晰的沟通能大幅降低与开发、产品的协作成本。

(2)快速学习能力
测试人员需要具备三重学习能力:对不同业务需求的快速理解能力、对测试新技术和新方法的学习能力、对不同编程语言的快速掌握能力。
(3)开发能力
除了保障项目质量,测试人员还需针对当前业务开发效率工具来提升测试效率。同时,测试工作涉及大量文档编写------测试计划、测试用例、测试报告等,扎实的文字能力是必备基础。
3.2 自动化测试
自动化测试在测试领域占有举足轻重的地位,它将测试人员从大量重复性手工劳动中解放出来,使其能把更多精力投入到更多类型的测试中。
生活中的自动化无处不在:自动洗手液避免了按压动作,疫情期间有效减少交叉感染;交通灯使交通有序进行,大幅降低事故概率。
软件测试中的自动化分为两类:
-
接口自动化:自动请求接口并校验返回属性是否符合预期
-
UI自动化:在界面或移动端模拟人的行为进行操作,检查元素和操作是否符合预期
3.3 设计能力
测试用例设计能力是指无论面对什么类型的测试,都能设计出高效发现缺陷、保证产品质量的优秀用例。提升路径有三:掌握设计方法、阅读优秀案例、多写多练积累总结。
3.4 探索性思维
测试工程师在执行过程中不断学习被测系统,结合经验、知识和直觉进行错误猜测和逻辑推理,整理出更多有针对性的测试关注点。探索性思维的质量取决于测试人员的经验积累。
炒菜中的探索性思维:油温、火候、调味量的控制
就像炒菜一样,油温大小、火候控制、调味品用量都非常考验厨师的探索性思维------炒得好是菜,炒不好就"放毒"了。
测试同样如此,同样的系统,不同经验的测试人员能发现的缺陷数量和深度截然不同。
3.5 兴趣与责任感
兴趣是择业的重要因素,对工作性质不感兴趣很难走得长远。而责任感是测试工作者最重要的素质之一------测试往往是产品质量的最后把关者,测试工作成效很难衡量,用例执行数、BUG数量都无法直接说明产品质量是否合格。
高频面试题:为什么走测试岗位而不走开发岗位?
回答思路:从岗位性质 + 个人性格/爱好 + 职业规划三个方面阐述。
个人兴趣:测试工作需要耐心和细心,接触测试内容后产生浓厚兴趣。
岗位性质:测试人员以保障项目质量为主,通过开发效率工具提升测试效率;开发以业务编码为主。
职业规划:大学期间树立测试方向目标,今后持续提升测试和开发能力,在测试领域做出有影响力的成果。