软件测试的目的和原因
软件测试的两个主要原因:(1)对质量或可接受性做出判断,也就是通过测试来验证软件是否符合软件需求规格说明、用户需求等要求,判断评价软件质量;(2)发现问题,也就是寻找缺陷,发现错误。
这两个原因并不是互斥的,而是相辅相成的,理解不可偏颇,最早的软件测试目的是为了证明软件不存在错误,之后发展到软件测试是为证明软件存在错误。软件满足用户需求的能力和软件存在错误不是严格上的对等关系,从一定意义上软件可能虽然存在错误,但仍然能满足用户的需求,也许软件测试的目的应该是为了验证软件的功能、性能达到了用户要求,同时尽可能多地在允许的条件下发现错误和缺陷。所以测试要在选择的方法和环境、条件下保证充分性,也就是测试工程师要向相关干系人证明自己对软件进行了充分测试,在这个充分测试下软件是否满足要求,发现了多少错误,哪些错误被改正了,哪些被遗留了,而不仅仅是软件测试过程中发现哪些错误,或仅仅是软件满足用户的需求。所有的测试过程既要证明软件本身的功能性能结果,也要证明自己测试的充分性。
软件测试的目的和原因不仅仅是发现“bug”,还有别的目的和原因。在测试过程中的所有行为应该分别去切近这些目的和原因。
1.1基本定义
为什么要定义一些术语?使得大家能够在一样的语境中去理解和讨论有关问题。
错误(error)——人类会犯错。近义词是过错(mistake)。也就是没有做对某些该做对的事情。
缺陷(fault)——缺陷是错误的结果。更精确地说,缺陷是错误的表现,表现是表示的模式,比如叙述性文字,数据流框图、层次结构图、源代码等。缺陷可以分为过错缺陷和遗漏缺陷,对于软件测试工程师和软件工程师来说常常关注的是侠义的源代码缺陷。同义词是缺点(defect)。
失效(failure)——当缺陷执行时会发生失效。一是失效只出现在可执行的表现中;二是这种定义只与过错缺陷有关。
发现遗漏缺陷的方法:评审
事故(incident):当出现失效时,可能会也可能不会呈现给用户。事故说明出现了与失效类似的情况,警告用户注意所出现的失效。
测试(test):测试显然要处理错误、缺陷、失效和事故。
测试用例(test case):测试用例有一个标识,并与程序行为有关。测试用例还有一组输入和一个预期输出表。
通过这些术语,可以发现测试用例在测试中占据中心地位。测试过程可以再细分为独立的步骤:测试计划、测试用例开发、运行测试用例以及评估测试结果。本书的重点是如何标识有用的测试用例集合。
总结:人是会犯错误的,犯了错误会产生缺陷,过错性缺陷在执行时会产生失效或事故,遗漏性缺陷会产生功能缺失,测试的重要目的之一是通过失效、事故和发现遗漏,来查找到缺陷,纠正错误。
1.2测试用例
软件测试的本质是针对要测试的内容确定一组测试用例。
输入:前提和实际输入
预期输出:后果和实际输出
有的时候,测试用例的输出常常被忽略,这很不幸,因为输出部分的确定往往很困难。例如,假设要测试一个为飞机确定最佳航线的软件,要有一定的联邦管理局的空中走廊约束条件和飞行当天的气象数据。怎么样才能知道实际最佳航线是什么呢?(1)学术界:假设有一位“知道所有答案”的圣人。(2)工业界:“参考测试”(Reference Testing),即系统要在专家用户的指导下进行测试。这些专家要判断被执行的一组测试用例的输出是否可接受。
测试用例常用的信息:
测试用例ID 目的 前提 输入 预期输出 后果 执行历史 日期 结果 版本 执行人 |