首页 > 代码库 > 软件测试你需要知道的事(一) 概述

软件测试你需要知道的事(一) 概述

软件测试是描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。软件测试也从客观无关联的角度提供一个关于所测软件的一个概览,从而可以对软件所存在的风险有一个客观的认识。

软件测试所感兴趣的一些测试属性:

  • 是否达到设计需求
  • 对各种输入是否返回正确的值
  • 响应时间是否可以接受
  • 可用性
  • 是否能在预想的环境中正确运行

通常情况,由于所测软件的小的组件、组成部分几乎是无穷的,而软件测试会采用可行的策略,在有限的时间跟资源里面,去选择性地测试。所以,软件测试是为了找bug而对程序进行选择性针对性的测试。换句话说,软件测试是无法穷尽测试的。

在典型的瀑布开发流程中,软件测试在程序可以部分执行的时候就积极引入,比如单元测试。相对而言,在敏捷开发中,需求、编程跟测试通常都是并发进行的。

缺陷跟错误(Defects & failures

不是所有的软件缺陷都是由编码错误造成的。通常缺陷如果所处的位置越处于瀑布的顶端,则造成的损失越大,如需求中的分歧或者不清晰。所以越早发现缺陷越有利于缺陷的改正。需求中的分歧通常是指一些非功能性的需求,如程序的可测性,可维护性,易用性,性能以及安全性。

软件错误(failure, fault, bug)通常是由于程序员的失误造成软件的输出达不到预期要求。但是不是所有的程序错误都会造成软件输出与预期不一致。比如一段永远不会被调用的代码中含有程序错误。还有一种程序错误是运行环境改变造成的,比如你更换了硬件,操作系统等。

组合式输入

软件测试不可能把所有的可能的输入都测试一遍,所以进行有选择性的组合输入是很有必要的。这样可以使得用户用尽量少的测试用例去扩大测试覆盖度。比较常见的输入组合有边界值法,等价类法,决策表法,因果图等。

经济因素

从图表中也很容易看出缺陷或者是错误发现的越早,则修复它所花费的代价越小。反之,发现的越晚,则花费越大。

Cost to fix a defect

Time detected

Requirements

Architecture

Construction

System test

Post-release

Time introduced

Requirements

5–10×

10×

10–100×

Architecture

10×

15×

25–100×

Construction

10×

10–25×

 

测试人员

80年代以前,测试人员统称软件测试员(software tester),而之后才有了更加精细的分工。如测试经理,测试组长,测试设计师,测试员,自动化测试员,测试管理员。

历史阶段

  • 1956年及以前:面向调试的测试
  • 1957-1978:面向证明的测试
  • 1979-1982:面向破坏的测试
  • 1983-1987:面向评估的测试
  • 1988- 现在:面向预防的测试

测试工件

软件测试工程中会产生的工件(产物)。

  1. 测试计划:测试说明书。
  2. 文档追踪表:记录测试过程中文档的变动。也做版本控制用
  3. 测试用例:根据需求而设计的测试一个具体事务的流程。包含了输入跟期望输出。复杂的测试用例可能会包含多个分支,根据不同的前提条件输入,得到不同的结果。
  4. 测试脚本:用自动化工具,根据测试用例创建的测试脚本,主要用来进行回归测试。
  5. 测试组:一组测试用例的集合。比如一个模块的测试用例。
  6. 测试数据
  7. 测试工具

 

软件测试你需要知道的事(一) 概述