软件测试的核心在于检验被测对象是否满足用户的要求,从这一目标不难看出,测试者一定要站在用户的角度思考问题,从用户的实际使用环境、习惯着手验证被测对象应用表现。只有这样,才能满足用户需求,辅以高质量的产品设计、高效的生产过程,研发出来的软件才是高质量的产品。因此以最终用户身份进行软件产品测试将是未来一段时期内主要的测试思路。

  与软件开发的创造性相比,软件测试活动需具有破坏性思维。被测对象不仅能处理正确、正常的业务操作,也需经得起异常输入、异常操作的考验,软件系统应当具备某种程度的健壮性要求。

  软件测试相比其他IT工作,行业进入门槛低。从业务测试角度考虑,从业人员仅需掌握被测对象的业务知识,了解一些基本的测试方法,以最终用户身份去使用检验被测对象即可胜任。

  如果需要完成自动化、性能测试,甚至是白盒测试,也只需学习一门编程语言和一些工具即可胜任。当然,还可能需要其他一些辅助知识,如数据库、操作系统(Linux/Unix)、服务架构类(Web Server、中间件、网络硬件等),当然随着IT技术的迅速发展,测试工程师所需掌握的技术也越来越多。

  行业没有好坏,只有是否适合自己,软件测试工作进入门槛低,技术升级相对缓慢,随着测试经验和技术能力在实际工作中的不断加强,提升相对容易,价值体现在脑力活动上,但软件测试工作也是一个细心、耐心活,对从业者的职业素质要求较高。

  软件测试职业发展中,从职业技术要求角度,可分为手工测试、自动化测试(包括自动化功能、性能)、白盒测试等几个方面。从业务知识角度,可分为金融产品、电  子商务、移动互联等业务方向,从测试管理角度,则有测试主管、测试经理、测试总监等之分,从测试资历来分,则有初级测试工程师、中级测试工程师、高级及专家级测试工程师。

  软件测试在软件生产分工合作细化的发展进程中,其职业岗位要求不断被细化,新入行的读者可根据自己的兴趣爱好及性格特点选择适合自己发展的职位。

  软件测试工作与软件开发工作相比,主要有以下几点不同。

1.知识体系要求不同

从软件生产活动分工来看,软件开发与软件测试是软件生产过程中非常重要的两个环节。

软件开发人员需要了解业务背景、需求、编程语言、数据库、操作系统等知识,在整个知识体系中是偏向于产品构建型知识。

软件测试人员则不然,在日常测试工作中,需要站在用户的角度思考问题,可以对软件开发及软件内部知识不做太多了解,更多地偏向于应用产品、破坏产品。在工作中可能同时测试若干项目,可能面临着不同编程语言编写、不同架构平台、不同业务知识背景,甚至完全不同的操作模式(网页游戏和手机游戏),因此测试工程师需要知识的广度,在知识广度增加的同时提高技术深度。

2.技术技能要求不同

软件开发工程师需掌握一系列专业的编程语言、数据库、操作系统、服务器管理等知识,编程技能,如C、C++、Java等,数据结构、算法,常用的IDE平台,如VS、Eclipse等,数据库如MySQL、SQL Server、Oracle、MangoDB等,操作系统如Windows Server、Linux/UNIX等。

开发知识更新相对较快,对脑力要求较高,随着年龄的增长,精力逐年下降,因此很多开发工程师做到一定年限后基本都转向管理岗位了。

软件测试掌握的技能相对要简单些,基本都是围绕应用层面考虑,如测试理论、测试流程、测试用例设计方法、缺陷管理知识。如果需要实施自动化或性能测试,可利用Selenium、Appium、Jmeter、LoadRunner等工具,掌握通用的编程语言,如C、C++、Java、Python语言等,即可满足大部分需求,也可以学习些脚本语言,如js、vbs、Python等,而数据库、操作系统等方面的知识仅在实现性能测试或其他测试目标时需要。

3.问题思维模式不同

软件开发工程师的问题思维模式是创造性的,关注重点是如何构造,如何实现,如何编写高质量的代码。

软件测试工程师的思维模式则是破坏性的,会想方设法从用户的使用角度破坏系统,构建正常、异常输入,发现被测对象表现特性与用户需求的偏离现象。

因而,选择软件测试还是软件开发岗位,除了岗位性质分析外,还需结合自身情况来考虑!