再谈测试分析与测试设计
什么是测试分析与测试设计
测试分析和设计在软件测试中运用十分广泛,也十分重要,是软件测试的基础技能。如果没有测试分析与测试设计,就无法得到有效的高覆盖的测试用例,从而导致测试工作无法有效完成,质量也无法得到有效度量。如果质量无法度量,首先是团队和管理人员无法对软件的质量有信心,其次也无法发现软件系统的缺陷(defect),从而导致软件系统在线上出现问题的概率大大增加。
1、 测试分析
首先测试分析是一个分析过程,它会评估并定义测试的目标和产品的风险,并定义出成功达到目标的评估方法。最后它包含了以下重点工作:
- 测试和质量的详细级别
- 系统的复杂程度和开发和发布的流程
- 项目和产品的风险
- 哪些需要被测试和怎么进行测试
- 测试管理如何实施
- 测试流程和测试技术
- 测试设计的级别以及其他产品测试与质量相关的其它事情
2、 测试设计
测试设计主要针对一个系统以及它的组件设计测试架构和测试用例,比如针对一个特性(Feature),一个交易(Transaction),一个功能(Function)等。
测试架构,通过分析被测系统的架构,结合需要实施的不同测试类型,通过架构思维将被测系统、各种类型的测试和它们的测试工具/框架/系统等整合在一起,设计成一套系统化的,完整的测试架构。
举例来说,一个前后端分离的Web业务系统不仅有前端UI和大量的JavaScirpt代码,还有后端的API和第三方依赖系统以及数据库系统,如何将各层测试有效的联系起来就是测试架构需要解决的问题。
首先,前端、后端API、第三方依赖系统和数据库系统有各自的单元测试、集成测试等,然后可以使用契约测试来测试统一前端和后端API,再使用Stub加入对于第三方依赖系统的契约测试或者监控测试,还需要使用测试数据生成系统参数,将各种测试数据存入数据库系统用于支持契约测试等。
对于不同软件系统,其测试架构一般都是根据业务需求、技术能力等各种条件来设计的。与软件架构一样,测试架构在不同的项目里面,需要根据其软件系统的架构、技术栈、业务需求、人员的技能等因素来定制和设计。
而测试用例包括了测试的条件,测试的步骤,测试的输入值,输出值,测试断言等内容。它是日常工作中,开发和测试人员接触最多,也是测试工作的基础中的基础,如果它的有效性无法保证,那么整个测试工作的有效性也无法保证。
在真实的工作中,测试分析和测试设计都是并行合并实施的,互相影响的,但是从概念层来说,它们仍然是两个不同的概念。测试策略的制定,主要也依赖于测试分析和测试设计的产出,可以见测试分析与测试设计的重要性。
在实施了测试分析和测试设计之后,测试策略也就随之产生了,然后接着就是制定测试计划,接着持续迭代的实施测试分析和测试设计,并行的实现测试用例并执行测试用例。
测试分析和设计的分类
在传统的软件测试中,软件测试分析与设计分为黑盒和白盒两类。到现在为止,这样的分类也是可以继续使用的,因为它们依然可以帮助我们更容易的归类和理解各种测试分析和设计技术。
1、 黑盒分析与设计技术
黑盒测试是最为常见的测试类型,传统的测试中主要是有专职的测试人员来实施,其中最为常用的分析与设计技术包括以下六种主要的类型:
- 等价类
- 边界值
- 决策表
- Pairwise
- 状态转换
- 领域分析
2、 白盒分析与设计技术
相对传统的测试类型,在测试工作左移到开发过程中后,开发人员开始实施测试工作后,白盒分析与设计就开始兴起。它主要是由开发人员来实施,在TDD最为常见。在测试人员实施ATDD的时候,对于软件技术较好的测试人员也会尝试通过白盒分析和设计技术来得到更全面的验收测试用例。白盒技术相对黑盒技术较少一些,其中最主要的包括以下两种类型:
- 控制流
- 数据流
不管是基于黑盒的还是白盒的测试分析与设计技术,其本质都是帮助开发和测试人员完成业务功能的测试,而最终需要完成的都是基于用户行为和业务场景的测试用例或者测试场景。比如对于要实施良好的TDD的开发人员,也是不仅要熟悉白盒技术,也需要熟悉黑盒技术,因为在编写一些复杂功能的单元测试的时候,也需要用到等价类,边界值等基础的测试分析与设计技术。而对于测试人员,熟悉各种基础的黑盒和白盒技术,是设计出好的基于用户行为和业务场景的测试用例或者场景的基础能力。
基于用户行为和业务场景的测试分析与设计
现代绝大多数商用软件都是通过用户的特定行为来完成特定的业务场景,所以对于这些商用软件来讲,大部分的测试工作都是通过对于用户行为和业务场景的测试分析,设计并完成基于用户行为(或者操作)的业务测试场景来实施。其中最难的就是理解用户行为,并确定软件的用户行为是简易正确的,业务场景是清晰明了的。所以理解用户行为和业务场景,成为了现代大部分商业软件的重中之重。
虽然很多测试人员认识到了这点,但是往往会存在一个个误区,就是认为只需要了解业务场景和用户行为,不需要熟悉基础的测试分析与设计技术,就可以设计好测试用例和场景。但是现实的情况,如果不懂基础的测试分析与设计技术,往往在分析和设计复杂的业务场景的时候,不是测试用例数量巨大,比如不用PairWise和等价类,测试所有组合用例,就是无法分析清楚所有的状态和边界值,导致遗漏一些测试场景。
其次用户行为分为业务行为和操作行为。传统软件测试中,是以操作行为为主体来进行测试分析和设计;而现代基于复杂业务场景的商业软件中,则需要以用户的业务行为为主体来进行测试分析和设计。只有通过业务行为,才能更好的是实施ATDD这样的技术。
测试分析与设计的未来
软件测试分析与测试设计以前是软件测试工作的基础与重点,未来仍然是软件测试工作的基础与重点,只不过随着软件开发技术的发展,随着软件技术架构与业务形态的不同,测试分析与设计也随着发展。最主要的发展方向有以下两个:
1,以最终用户的价值为目标进行测试分析与设计。现在的软件系统都是由特定的人员分析,设计和开发出来的,比如PO和BA对软件进行分析并提出需求,UX对软件的界面进行设计,Dev对软件的技术架构进行设计,最终由Dev和QA完成开发和测试工作而生成软件。但是很少有软件是由真正懂得使用价值的最终用户参与设计和测试的,更多是由专业的设计人员来进行设计。但是随着软件的专业程度越来越高,需要软件化的专业行业也越来越多,需要让真正的用户参与业务分析和设计,以及测试分析与设计的工作。如果不让用户参与,不以最终用户的价值为目标,就很容易研发出不易使用,甚至是无用的软件功能,从而导致浪费,返工,事倍功半。
2,以AI技术为基础,通过AI进行测试分析与设计。随着AI技术的日新月异,未来会逐步在软件研发和测试领域占据一席位置,其中现在已经在代码编写和自动化测试领域崭露头角。但是对于AI来讲,最难的还是像人一样理解业务流程,所以如果想用AI技术来实施测试分析和设计,一直是一个难题。不过虽然不能AI独自实施测试分析和设计,但是使用AI技术辅助实施测试分析和设计还是有可能的,但是需要有特定的统一的业务领域语言(DSL)。如果所有的业务流程和验收标准等都可以使用统一的业务领域语言,并且它们都没有歧义,这样可以尝试使用AI的深度学习技术来独自实施测试分析和设计的工作,不过学习模型的建立也有很长的一条路要走。