一:测试预览
什么是测试?
测试就是评估一个系统或者它的组件的过程,意图就是发现它是否能满足特定的需求。测试的结果可能是真实的,你所期望的,或者是不一样的。简单的说,测试就是执行一个系统以便求证实际期望或需求下任何
分歧、错误、或者漏掉的需求。
按照ANSI/IEEE 1059标准,测试可能被定义成分析一个软件项目的过程,以便侦测现有的和软件需求条件下的差异,并且评估软件项目的自身特性。
谁来测试?
这取决于项目的进程和利益相关者。在IT行业,大公司都有一个专门负责测试的团队,软件开发者也进行单元测试。大多数情况下,测试一个系统有以下的各自职责(能力)的专业人员:
a:软件测试师
b:软件开发师
c:项目经理
d:终端用户
不同的公司会指派不同的人员进行软件的测试,基于这些人员的自身经验和知识,比如有软件测试工程师,软件质量控制工程师,QA分析工程师等等。
不可能在软件开发的任意期间都进行测试,下面两个片段说明了在SLDC什么时候开始测试和什么时候终止测试。
什么时候开始测试?
早期的测试减少了产品的返工成本、时间、修正的自由。然而在软件开发生命周期(SLDC)中,测试可能从需求收集开始,终止于软件开发;也可能取决于使用的开发模型,比如瀑布模型测试一直用于测试的整个阶段,
但也可能是增量模型,测试一直存在于每个增量/迭代中,并且最后整个应用都需要测试。
什么时候停止测试?
决定什么时候终止测试不像什么开始测试那么难,测试应该说是从来不该停止,而且没有人能够说软件100%被测试了,以下方面是考虑什么时候开始停止测试:
a:测试到期
b:测试用例执行完成
c:在特定的点功能和代码规模完成
d:bug已经修正到了一个特定的等级,没有重大的bug
f:管理层决定
校核和验证
这两项很容易迷惑交互使用他们的人,让我们简单的讨论下。
序号 | 校核 | 验证 |
---|---|---|
1 | 你正确的构建了它吗? | 你构建了正确的事情? |
2 | 确保软件系统满足了所有的功能 | 确保功能满足了意向的行为 |
3 | 校验从开始就有了,包括文档和代码的检查等 | 验证发生在校核之后,主要是整个产品的检查 |
4 | 只是开发者做的事情 | 测试者做的事情 |
5 | 静态的行为,包括核实软件是否正确的回顾、预览、检测 | 有动态的行为,按照软件的需求执行软件 |
6 | 它是一个客观的过程,不是主观的决定,因为软件必须要被核实 | 它是主观的过程,也是主顾的决定,软件运行的怎么样 |
二:测试的秘密
1:测试是昂贵的
有句话是这么说的,在软件开发的过程中与其做测试,不如后期做更多的维护和订正。早先测试在许多方面可以节省时间和成本,然而如果为了减少成本不测试可能会导致
软件的不正确设计,做出来的产品可能一无是处。
2:测试就是浪费时间
在软件开发的生命周期内,测试可能是一个从来不该在考虑的范围过程。然而诊断和修正被证实的错误的确是浪费时间但是有成果性的行为。
3:测试要等到产品开发完后才开始
毫无疑问,测试取决于源代码,但是需求预览和测试用例开发是独立于开发代码的。然而迭代和增量作为一个开发声明周期模型,可以减少软件开发对测试依赖性。
4:完全测试是可能的
当一个客户或者测试者认为完全测试是可能的,这就是一个问题了。当然可以说把所有的模块都测试是可能的,但不能说你可以做完全的测试。有些应用场景可能是测试者和客户从来用不到的,但一旦项目被运用到实际生产环境中,
它就是开始运行了。
5:如果一旦被测试,那么软件就是零bug
这是客户、项目经理、管理团队之间一个很普遍的误解。没有人能够说软件是100%的零bug,即使测试者具备超强的测试技术来测试应用软件。
6:没有发现的缺陷是测试者的责任
如果一个应用程序里面即使在测试过后,仍然存在bug,去责备测试者可能并不妥当。因为这牵涉到时间,成本,需求更改因素。然而测试策略可能会导致被遗失掉的bug。
7:测试者应该对产品的质量负责
测试者应对产品的质量负责,这个一个普遍的误解。测试者的责任是发现bug并提交上去,然后接收方确定是否修正和发布软件。软件发布在特定的时间给测试者施加了压力,因为如果bug,他们可能会因此受到责备。
8:无论是否可能,都应该使用测试自动化,因为它节省了时间
测试自动化节省时间是真实的,但是在软件开发的期限里,不能都使用测试自动化;某种程度上讲,测试自动化只有当软件被自动化测试并且稳定了可以使用。而且,测试自动化在需求不断变更的时候是不能使用的。
9:任何人都能测试一个软件程序
IT行业外的人认为并且相信测试软件是任何人都能干的事情,而且测试是一个枯燥的工作;然而测试工程师深知根本不是这么回事。尽量去发现不是自己开发的软件中存在的潜在错误不是那么容易的。
10:测试的任务就是发现bug
发现软件中的bug是测试者的任务,但是同时他们得要是某个软件领域的专家。开发者可能只是负责特定的被分配的模块,但是测试者可能需要懂得软件工作的整个过程,一个模块对另一个模块会产生什么样的依赖。.
三:软件测试VS QC,QA,审计等
测试,质量保证和质量控制
大部分人都会对质量保证,质量控制和测试的概念混淆不清。虽然他们在某种程度上是相关的,也许可以看做是同样的行为,但是他们之间还是有不同的。下面解释了这个区别:
序号 | 质量保证 | 质量控制 | 测试 |
---|---|---|---|
1 | 证实过程实现的行为。和软件开发和意向需求相关的过程和标准 | 证实对已归档成需求的软件开发核实的行为。 | 证实bug、错误、缺陷存在于软件的行为 |
2 | 关注的是过程和步骤而不是对系统的实际测试 | 关注的是实际的测试以证实在实现的过程中产生的bug或缺陷 | 关注的是实际的测试 |
3 | 面向过程的行为 | 面向产品的行为 | 面向产品的行为 |
4 | 预防性行为 | 订正的过程 | 预防性过程 |
5 | 软件测试生命周期的子集 | QC可能是被认为质量保证的子集 | 测试是质量控制的子集 |
审计和检查
审计:一个系统化的过程是确定一个组织或团队如何应用实际化的测试过程。一般的,在软件测试期间,这是一个独立的检查过程。