软件测试的目的是通过发现程序中的错误来提高软件产品的质量,一个成功的测试是发现了至今未发现的错误的测试,通过不断测试、修改、再测试、再修改,不断持续循环的过程来提高软件产品的质量,规避软件系统上线后由于潜在的缺陷造成的风险隐患所带来的商业风险。可以说软件测试只能证明软件存在缺陷的过程。
软件测试的误区
软件测试很容易让人产生一种误解,特别是一些不懂软件测试的项目管理人员、开发人员、DBA、运营等人认为软件测试工作就是为了找bug,不就是在软件程序上点点点吗?把软件测试工作看得一文不值,导致软件测试人员的在公司的地位比较低,同时给刚毕业的大学生也造成了一些误解,认为软件测试工作简单好做,门槛低,没有技术含量,只要是人就能做。每一项工作的目的都是有价值的,就像我们软件测试,它的主要价值就在于发现程序中的错误提高软件的质量,如果没有软件测试,用户谁敢用我们企业的软件,我们的质量怎么能够保证?
作为一名合格的软件测试工程师,除了找到缺陷,还需要跟踪缺陷,直至问题完全修复,然后对缺陷进行回归确认,最后关闭缺陷。除此之外,测试人员还需要分析这个问题,找到这个问题发生了根本原因,避免类似问题在其他产品或模块再次发生。
软件测试的定义
大家都知道软件是由文档、数据、源代码等配置项组成,所以软件测试针对的也就不仅仅是软件本身,而是包括软件形成过程的文档、数据以及源代码。软件测试是指在规定的条件下对软件进行功能验证、性能效率、安全性、可靠性等软件特性验证的过程,以发现软件运行中的错误来度量软件质量。也就是说软件测试是一种实际输出与预期输出之间的审核或者比较过程。
软件测试分类
按测试技术划分
1.白盒测试:注重程序内部逻辑处理,能看见程序源代码是基于代码层面的测试,分为代码走查和代码审查。
2.黑盒测试:相对于白盒测试而言的一种测试方法,把程序理解成一种黑盒子,关注程序的输入与输出,看不到代码。
3.灰盒测试:介于白盒和黑盒之间的一种测试方法
按测试内容划分
1.功能测试:属于黑盒测试方法,通过测试人员设计具体的测试用例来验证软件的功能是否符合需求。
2.界面测试:即UI测试,验证软件界面布局是否符合客户的风格,不同的软件具有不同的界面。
3.性能测试:通过对被测件施加并发压力,获取系统最大并发数,响应时间,吞吐量,为系统上线提供参考依据。
4.兼容性测试:主要分为浏览器兼容性、APP终端兼容性,通过兼容性测试来验证软件系统是否具备最佳运行表现。
5.安全测试:通过安全测试验证系统是否存在安全漏洞,是否具备防止非法请求入侵的能力,分为漏洞扫描、渗透测试、源代码安全审计
6.易用性测试:验证软件是否简单易用
按测试对象是否运行划分
1.动态测试:通过运行软件程序才能验证软件特性是否符合要求的测试
2.静态测试:不运行软件程序,常用于文档检查,代码走查
按测试手段划分
1.手工测试:就是人工测试,执行“点点点”的过程
2.自动化测试:通过相应的测试工具(自研、采购)进行的一种自动化测试,需要测试人员具有一定的编程能力
软件测试模型
软件测试模型常被用来指导整个软件测试过程,常见的模型包括:V模型、W模型、H模型、X模型,其中V模型是最具代表性。主要说一下V模型吧,该模型呈现“V”字型,如下图:
1.用户需求与需求分析:收集用户需求,并对用户需求进行分析的过程,也是软件进行系统测试、验收测试的依据。
2.概要设计:建立系统的逻辑模型,主要任务是将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面。
3.详细设计:对概要设计进一步分析,属于软件开发的一部分,设计符合用户需求的软件产品。
4.编码:对详细设计中部分实现的过程。
5.单元测试:主要是测试程序代码,为的是确保各单元模块被正确的编译,单元的具体划分按不同的单位与不同的软件有不同。
6.集成测试:验证各单元模块间的功能实现情况,以及模块接口连接的成功与否,数据传递的正确性等,主要目的是检查软件单位之间的接口是否正确。
7.系统测试:把软件系统搭建起来,验证软件其功能、性能等是否符合用户需求,在系统中运行是否存在漏洞等。
8. 验收测试:项目交付验收。
软件测试的发展前景
最近几年,随着“互联网+”浪潮的兴起,软件测试技术也在不断进步,如:非功能测试、接口测试、自动化测试、渗透测试、源代码测试等,对测试人员的要求越来越高,普通的功能测试工作逐渐被自动化的测试工作所替代。另一方面,企业项目管理者也越来越重视软件测试工作,不惜花重金聘请测试专家来公司指导测试工作,测试人员的地位和待遇也在不断提升。