测试技术经过这么多年的发展,在大学已经有软件测试的专业,在很多年前就有软件测试研究方向。我读硕士研究生时的研究方向就是网络协议的一致性测试。在这里只是介绍测试职位在实际工作中的具体工作是什么。一个测试工程师的工作大致上是在完全理解软件的业务需求后根据每个功能点和它的分类;编写功能测试例,将测试例分组归类成测试套件。测试例是测试文档中最基础的组成部门,测试工程师根据测试例去测试软件,测试的软件是在经过开发部门单元测试后提交给测试部门用来做集成测试和系统测试。随后咱们介绍一下测试工作的种类:单元测试、集成测试、系统测试、回归测试、性能测试、安全测试。测试软件可以是人工操作通过鼠标点击键盘录入来实现,也可以编写测试脚本,或者在人工操作测试的过程中通过专业测试软件录制测试脚本,然后再手工修改部分代码,以后就可以自动执行测试,不用再手工测试。提高了测试效率和测试的准确性。因为一个软件的测试例在编写的时候软件业务需求、技术需求等文档基本都已定稿,所以测试文档确定以后是很少修改或变更。测试脚本或测试程序也变化不大,每次的回归测试如果都是手工测试那么工作量可想而知,回归测试一般都是由测试脚本来自动测试。因为编写的测试脚本最终运行后要给出测试结果,一般的测试结果分三类:通过、失败、未决。
关于测试的分类一般分为以下:单元测试、集成测试、系统测试、回归测试、性能测试、安全测试。单位测试一般有开发部门自己完成,主要测试自己编写的代码实现的功能、组件接口是否符合设计文档,输入输出是否正确。在完成单元测试后提交给测试部门。管理规范的公司或者通过CMM3级的组织都会有代码管理工具如StarTeam SourceSafe等。测试部门会在开发部门提交代码后下载最新版的代码,集中编译上传到测试环境中,进行集成测试。集成测试用来测试软件的各组成部分是否能按设计要求组合在一起实现预定的功能,做各模块联调测试,检查各模块的接口是否一致、各模块间的数据流和控制硫是否按照设计实现其功能、以及结果的正确性验证,可以是整个产品的集成测试,也可以是大模块的集成测试。集成测试之后就是系统测试:它是针对整个产品的全面测试,既包含各模块的验证性测试(验证前两个阶段测试的正确性)和功能性(产品提交个用户的功能)测试,又包括对整个产品的健壮性、安全性、可维护性及各种性能参数的测试。回归测试是当软件需求发生变化,程序代码也完成更新,这时要测试一下修改或新增的代码对已有未变化的功能是否有影响。防止修改了旧bug增加了新bug。或者增加了新功能原有的功能却不能用了!性能测试一般会测试软件并发用户数,响应时间,大数据的处理,长交易处理能力,宕机恢复能力等一般会使用LoadRunner。安全测试主要基于工具分析和扫描,检查是否存在危险如:注入攻击、拒绝服务、配置操纵、访问控制、日志伪造等等。
产品测试经理
属于测试工程师的老板或上级,具有丰富的产品测试经验和需求领悟能力。曾经的一个测试事故让我对产品测试经理的能力有了非常深的印象。有一次系统新增加了一项与之前功能相关且名称相似,测试工程师没有理解业务需求编写出来的测试例几乎没有覆盖新增加的功能,被产品测试经理检查出并纠正。敏锐的洞察力和良好的分析、研判能力来分析市场发展趋势,可以提出软件的发展或进步方向。把握用户需求,完成需求分析到测试转变,对产品设计的生机和改进要能提出关键的意见。负责或配合其他部门,持续改善产品。负责测试团队的日常管理工作。
测试类职位的特点
职位的重要性和地位在稳步上升,与开发类平分秋色。在前些年人们往往看不起测试职位,一方面它位于整个项目的下游,如果没有开发就没有测试,测试总是跟在开发后面。另一方面软件系统的复杂性和应用环境简单,测试在项目起的作用较小。但是这两方面随着开发技术的发展尤其测试驱动开发TDD,还有是人们对软件质量的关注使得测试逐渐和开发地位基本持平。我原来在的单位技术性的员工有100多,开发技术部的有40人,项目部30人,测试部30人。
且职业寿命在积累中逐渐增长类似医师。自动化测试、一致性测试、互操作测试等等技术的发展使测试工程师在工作中不断积累了经验,不像开发类的技术和工具都不断更新。而测试类的工程越来越值钱,越老对软件的理解越丰富。
在软件业技术是非常重要的,在从事技术类高级职位的工程师,不仅有非常好的技术,还能带领一支技术队伍,像导师一样帮助他们给于技术支持和指导,确定工作方法,指明工作方向,解决队伍在项目过程中遇到各种技术问题。同时还要具备领导能力。我在读研究生的时候老师让我给本科生带辅导 ,我对这样工作一点不重视,觉得不就是看着他们做实验出错的时候去给调试一下,但是我的老师很严肃的对我说:“你要给别人一滴水,你自己要有一桶水”,我有又了一句,“如果你只有一滴水,你只会给别人一头雾水”。