通常情况下不论采用什么方法和技术,其测试都是不彻底的,一是不能穷尽测试,二是测试的时间极其有限,没有足够的时间完成所需的测试。虽然我们不能保证被测试的程序中不存在遗漏的缺陷,但是,如果软件完成测试之后,遗漏的严重错误过多,则表明测试是非常不充分的,测试是失败的。测试不足意味着让用户承担很大的质量风险。反过来说,如果过度测试,则又会浪费宝贵的测试资源,产品迟迟不能发布,增大企业的成本。因此,在实际的测试计划中,如何平衡测试的投入和质量的风险是必须考虑的问题,需要考虑测试的范围取舍、需要适当地承受一些风险----哪些测试项优先级高,需要优先测试;哪些测试项优先级低,在时间不够的情况下,可以不测。也可以选择不同的测试方法,达到不同的测试效果,如在特别高效率的测试情况下,测试覆盖率有所降低,在某些情况下可能就是一种明智的决策。即在测试的取舍上、在测试的投入与质量风险上,需要找到一个最佳平衡点。这就是测试策略发挥作用的地方。
1、测试策略
为了最大程度地减少这种遗漏的错误,同时也为了最大限度地发现存在的错误,在测试实施之前要确定有效的测试策略。然后,根据测试策略,选定测试方法、确定测试范围等,丰富测试计划,制定详细的测试方案。依据软件项目类型、规模及应用背景的不同,我们将选择不同的测试方案,以最少的软、硬及人力资源投入而获得最佳的测试效果,这就是测试策略目标所在。
软件测试策略:即在一定的软件测试标准、测试规范的指导下,依据测试项目的特定环境约束而规定软件测试的原则、方式、方法的集合,这就是测试策略,其包括如下:
- 实施的测试类型和测试的目标;
- 实施测试的阶段及相应的技术;
- 用于评估测试结果的方法和标准;
- 对采取测试策略所带来的影响或风险的说明等。
2、测试策略制定的三项基本要素
软件测试制定有3项基本要素:输入、输出和过程。
(1)输入:作为制定测试策略的依据,包括限制条件和已具有的资源;
- 所要求的软、硬件的详细说明,包括测试环境、测试工具等;
- 人力资源和测试进度的约束,包括测试组成员角色和职责说明;
- 测试方法和衡量测试是否通过的标准;
- 被测软件组件或系统的功能性和技术性需求文档,及其变更请求的控制流程。
- 软件系统所受到的其他限制。
(2)输出:制定策略的成功,即最终对所制定 策略的定义或说明。 - 通过/失败的准则和测试风险评估的结果。
- 已批准和签署的测试策略文档。
- 测试策略相对应的测试计划、测试用例的设计思想和思路。
(3)制定策略的过程。
测试组分析需求,参与设计的讨论,测试策略应该覆盖整个项目的生命周期,需要各类技术人员参与;各类技术人员相互之间应多交流、讨论,以保证制定正确的测试策略。
3、如何制定测试策略
测试策略描述如何全面的、客观地和有效地开展测试,对测试的公正性、遵照的标准做一个说明。在制定测试策略过程中,需要考量用户特点、系统功能之间的关系、资源配置、上个版本的测试质量和已有的测试经验等各个因素的影响,从而找到问题的解决办法,包括采取哪些测试方法、采用什么样的测试工具等。尽可能地考虑到某些细节,借助创造性的思维或头脑风暴,往往能帮助找到测试的新途径。
为了制定正确的测试策略,先要明确其输入,包括被测的软件系统的功能性和技术性需求,以及测试目标、测试方法和完成标准等。然后,根据测试目标或测试需求确定测试的内容,评估各项测试内容可能存在的风险并确定测试的优先级,针对不同的测试内容选择最合适的测试方法、技术和工具,针对不同的测试风险采取不同的对策,最后确定测试策略,包括测试各个阶段完成的标准、所采用的方法和对策以及测试用例设计的取舍等。
测试策略制定步骤:
在制定策略的过程中,权衡资源约束和风险等因素是很关键的,有效的测试策略就是为了降低风险,在有限的资源下完成给定的测试任务,优先级高的测试任务优先完成。如果不采取测试策略,就不能及时完成测试任务。而采取一定的测试策略(如新方法、特别的方法)能及时完成测试任务,或者是舍弃某些非常低或较低优先级的测试任务,从而增加了测试风险。所以需要正确把握测试目标和测试风险之间的平衡,获得最佳的测试策略。
4、如何更好地制定测试策略
针对不同的测试阶段(单元测试、集成测试、系统测试)、不同的测试对象或测试目标制定相对应的测试策略。例如,单元测试,执行严格的代码复查,以保证在早期就能发现大部分的问题,而对功能性的回归测试,尽量借助自动化完成,而且要求每天执行冒烟测试或验证测试,包括在安全性测试、配置测试执行时可进行一些探索性测试。所以在制定测试策略时,可选择的范围很大。
-采用不同的测试方式,如加强静态测试、采用探索式测试就有可能解决进度的问题。
- 采用不同的测试方法,白盒方法准确有效,但黑盒方法能够直接面对业务,完成端到端的验证。
- 在选择不同的测试方式、方法时,需要考虑团队的能力,甚至需要考虑团队人员的责任心,如果能力强、责任心强、探索式测试效果会好得多。
- 测试用例的选择、优化,一般要求测试用例事先定义优先级,这样有多少时间或人力资源,就做多少测试,按优先级的顺序,从高向地来选择测试。
- 不同的测试层次(单元、集成、系统)其策略是不一样的
- 新的测试环境是否是虚拟环境、新的测试工具是否易用等都是影响因素。
为了更好地确定软件测试策略,也可以试着问一些如下的问题,在寻找这些答案的过程中,也就找到了有效的测试策略。 - 如何确定回归测试的范围?
- 如何利用可重复性的测试?
- 测试缺乏可预见性,如何收集能衡量测试结果的指标?
- 如何建立稳定的、模拟系统实际运行的测试环境?
- 如何从无穷的输入数据中选择合理的、有效的测试数据集?
- 如何加强静态测试-----规格说明书、设计文档和程序代码等的审查?
- 如何处理单元测试和集成测试的关系?
- 如何处理手工测试和自动化测试之间的平衡,使它们的互补性得到发挥,测试的效率和质量达到最佳状态?
- 如何衡量这份测试策略的有效性?
5、基于测试技术的测试策略
著名的软件测试专家mysers指出了使用各种测试方法的综合策略。
- 在任何情况下都要使用边界值分析方法,因为边界值分析方法所设计的测试用例能很有效地发现软件代码的缺陷。
- 等价类划分方法是对边界值分析方法的有效补充。
- 如果软件某些功能的输入数据/条件存在多种组合情况,则一开始就可选用因果图法。
- 错误推测法可以帮助追加一些比较特殊、不易直接推理出来的测试用例。
- 对照程序逻辑来审查已有测试用例的逻辑覆盖成都。如果没有达到要求的覆盖率,则应当再增加一些测试用例。
- 尽管用户更倾向于基于程序规格说明的功能测试,但是白盒测试能发现潜在的逻辑错误,而这种错误往往是功能测试发现不了的。
6、分阶段的测试策略
- 严格地执行代码复查,以保证在早期就发现问题,而不是在代码发布之后。
- 利用单元测试和集成测试,可以尽早地发现更多的问题,并准备好自动化测试;
- 需要建立一个正规的且自动化的冒烟测试,只有100%通过冒烟测试,才能进入下一个阶段。
- 在系统测试中,以每次发布用户基线为结束标志,用户基线会增长,同时也会逐渐地要求一些更为精确的性能测试。
- 不能忽略安全性测试、可用性测试、配置测试和数据完整性测试。
- 在功能性、安全性测试、配置测试中可进行一些探索性测试。
- 制定更为详细的用户验收测试计划,将其与测试脚本和培训材料一起提供给用户,以帮助用户快速提高并完成任务。
7、基于测试方案的综合测试策略
- 根据软件产品或服务特性对客户的使用价值以及特性失效所造成的损失,来确定相应特性的测试优先级。产品特性的优先级越高,其被测试的时间越早,测试的力度也越大。
- 要使用尽可能少的测试用例,发现尽可能多的程序错误。一次完整的软件测试过后,如果程序中遗漏的(较)严重错误过多,则表明本次测试是不足的或失败的,这意味着可能让用户承担较大的利益损失风险。反过来说,如果过度测试,则又会浪费软件企业自身的宝贵资源。所以,需要在以上两点–风险和效率上进行权衡,找到一个最佳平衡点。
- 测试策略应该尽量的简单、清晰,例如可以在优先的白板上通过2~3行字和1~2个图就描述出测试策略来,或者可以通过一个简短的会议(20分钟~30分钟),就能把测试策略解释清楚。
- 基于缺陷分析的测试策略,通过缺陷分析,可以更好地了解开发人员的习惯,找到容易犯错的地方,可以更好地设计测试用例,更快地发现缺陷。也可以从缺陷出发,反推回去,找到合适的测试策略。