分层设计与分层测试

 分层是复杂软件系统常见的设计思路。比如互联网的七层/五层模型,Android系统的APP/FWK/JNI/Kernel等,都是通过分层、解耦,达到简化问题,易于维护,便于扩展的效果。

  传统的黑盒测试主要关注客户需求,白盒测试比较灵活,但实际应用中以验证编码实现为主,两者都忽略了设计这个开发过程中承上启下的环节。分层测试的核心思想是:针对有明确分层设计的软件系统,采用白盒测试的技术,在层与层之间验证接口的正确性。分层测试以调用接口驱动被测系统,尽量不依赖于打桩(具体原因后面会提到)。去年下半年开始我们在Android测试中尝试分层测试,取得了很好的效果。

  1、精准。我们都知道,离问题产生的地方越近,就越容易触发问题。如果问题发生在底层,以白盒测试的方法,很难精确打击,特别是一些复杂场景或异常流程,可能无法构造。而分层测试的切入点就是层与层之间的接口,从机制上更接近出问题的地方,因此也更容易命中目标。

  2、低成本。这个优势源于可测试性。举例来说:我们要测试Android系统下拨号的性能,黑盒怎么测呢?测试人员需要打开秒表,同时进行拨号的操作,并观测电话是否拨通。操作麻烦不说,误差也很大。如果用分层测试的方式,只要提供拨号和检查是否拨通两个对外开放的接口,通过用例脚本调用,并记录两者的时间,就可以方便准确地得到耗时。更进一步,我们还可以在不同层次的接口调用时均记录下时间,在脚本中直接对各个环节的耗时进行分析,从而自动分析流程的瓶颈,找到影响性能的关键环节。

  再回过头来看前面提到的尽量避免打桩的建议,也是考虑到成本。打桩是白盒测试最困难的部分,特别是涉及到复杂的数据类型或者系统内部状态。因此很多开发同事不愿意使用UT。分层测试重驱动弱打桩,测试脚本主要还是运行在真实的测试环境中,这样就避免了打桩上的投入,也更接近开发的调试手段。

  3、高效。这里是指用例执行速度快。首先自动化测试的速度就明显优于手工测试,基于API调用的自动化又比UI自动化要快,分层测试的高效就建立在API调用高效的基础上。从我们收集的数据来看,相同的用例,手工执行的耗时平均在5-8分钟,UI自动化一般也需要1-2分钟,而分层测试通常10-20秒就完成了,效率提升达10倍。

  4、易定位。易定位其实是和精准对应的。在用例设计的时候就考虑到用例所针对的代码,一旦出现问题,自然就容易定位了。

  5、稳定。客户需求是易变的,内部实现也是易变的,但是层与层之间的接口是不同开发人员之间的约定,通常会尽量保持稳定。这里也有一组数据:从Android 4.2到Android 4.4,我们设计的JNI层用例变更不到10%,而针对APP界面开发的用例,变更率高达40%。

  6、尽早测试。尽早测试是敏捷所提倡的,目的是把问题拦截在前端,降低问题修复成本。由于分层测试不依赖于完整系统,可以通过直接调用底层接口进行测试,就不需要等到整个系统开发完成。其实分层测试的思想和自底向上的系统开发模式也是不谋而合的。

  介绍了这么多分层测试的优势,那么它是万能的银弹吗?首先,分层测试不是端到端的测试,接口之上的部分无法覆盖,因此无法替代验收测试。另外,分层测试依赖于被测系统良好的分层设计,如果被测系统的结构不清晰,耦合严重,分层测试就不合适了。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-07-31 17:08:26

分层设计与分层测试的相关文章

基于分层设计的插装阀集成块CAD方法

0 引言 随着二通插装阀控制技术日益广泛的应用,插装阀液压集成块 的设计问题已愈加受到人们的关注.由于插装阀元件的结构特殊性和集成块内部 孔道连通的复杂性,使集成块设计工作具有相当难度,颇费工时且容易出错.因 此,在设计过程中采用CAD技术和方法已成为行业内的必然选择.但在目前,国 内外所见的液压集成块CAD研究基本上集中在原理图绘制.孔道校核及二维工程 图输出等方面,很少涉及到液压集成块中元件布局和孔道连通的自动优化设计, 且大多数研究都集中在板式阀,针对插装阀的则较少见. 同时,随着CAD

对J2EE应用系统分层设计的思考

J2EE分层设计是Java企业应用的最基本的设计思想. 从最常规的分层结构来说,系统层次从上到下依次为: 表现层:主要是客户端的展示. 服务层:直接为客户端提供的服务或功能.也是系统所能对外提供的功能. 领域层:系统内的领域活动. DAO层:数据访问对象,通过领域实体对象来操作数据库. 其中有些指导原则: 1.上层总是依赖其下层,依赖关系不跨层. 2.表现成除外,同一层之间方法不允许相互调用.这是实际开发中一些开发者容易范的错误!如果真是同一层之间存在方法调用,需要注意,这些调用都是一些上层不可

大数据环境下该如何优雅地设计数据分层

发个牢骚,搞大数据的也得建设数据仓库吧.而且不管是传统行业还是现在的互联网公司,都需要对数据仓库有一定的重视,而不是谈一句自己是搞大数据的就很厉害了.数据仓库更多代表的是一种对数据的管理和使用的方式,它是一整套包括了etl.调度.建模在内的完整的理论体系.现在所谓的大数据更多的是一种数据量级的增大和工具的上的更新. 两者并无冲突,相反,而是一种更好的结合. 话说,单纯用用Hadoop.Spark.Flume处理处理数据,其实只是学会几种新的工具,这是搞工具的,只是在数据仓库中etl中的一部分.

【漫谈数据仓库】 如何优雅地设计数据分层

一.文章主题 本文主要讲解数据仓库的一个重要环节:如何设计数据分层!其它关于数据仓库的内容可参考之前的文章. 本文对数据分层的讨论适合下面一些场景,超过该范围场景 or 数据仓库经验丰富的大神就不必浪费时间看了. 数据建设刚起步,大部分的数据经过粗暴的数据接入后就直接对接业务. 数据建设发展到一定阶段,发现数据的使用杂乱无章,各种业务都是从原始数据直接计算而得. 各种重复计算,严重浪费了计算资源,需要优化性能. 二.文章结构 最初在做数据仓库的时候遇到了很多坑,由于自身资源有限,接触数据仓库的时

《逻辑与计算机设计基础(原书第5版)》——3.1 开始分层设计

3.1 开始分层设计 如第1章所述,设计一个数字系统的过程为:1)指定所需的行为.2)以布尔方程或真值表的方式对系统的输入与输出关系进行形式化.3)优化逻辑行为的表示,减少所需逻辑门的数量,就如第2章中介绍卡诺图时那样.4)将优化后的逻辑映射到可以实现的工艺上,比如第2章中的逻辑门或本章所述的功能模块.5)验证最后设计的正确性,以便满足功能描述.本章将重点介绍组合逻辑设计过程的前4步,从指定系统到映射逻辑至可以实现的工艺.但在实际的设计实践中,最后一步验证设计正确性通常在设计工作精力中占相当大的

一起谈.NET技术,走向ASP.NET架构设计——第三章:分层设计,初涉架构(中篇)

1.阐明示例需求 本篇还是用之前的电子商务网站中的一个简单的场景来讲述:在页面上需要显示产品的列表信息.并且根据产品的类型不同,计算出相应的折扣. 在上篇中,我们已经设计项目的逻辑分层.我们再来回顾下: 可能有的朋友认为从Smart UI立刻跳到这种分层设计,似乎快了些.其实也算是一个思想的跳跃吧.下面就来看看这种分层是如何解决之前Smart UI的问题的. 2.业务层设计 记得在之前的Smart UI的例子中,程序的业务逻辑是直接写在了ASPX页面后面的cs代码中的.现在,采用分层的方法,我们

走向ASP.NET架构设计第三章:分层设计,初涉架构(中篇)

1.阐明示例需求 本篇还是用之前的电子商务网站中的一个简单的场景来讲述:在页面上需要显示产品的列表信息.并且根据产品的类型不同,计算出相应的折扣. 在上篇中,我们已经设计项目的逻辑分层.我们再来回顾下: 可能有的朋友认为从Smart UI立刻跳到这种分层设计,似乎快了些.其实也算是一个思想的跳跃吧.下面就来看看这种分层是如何解决之前Smart UI的问题的. 2.业务层设计 记得在之前的Smart UI的例子中,程序的业务逻辑是直接写在了ASPX页面后面的cs代码中的.现在,采用分层的方法,我们

Android 多分辨率屏显设计及其兼容性测试

0 引 言        2007 年11 月,Google 公司发布基于Linux2.6 内核的移动终端操作系统- Android, 由于其开源性,得到很多手机厂商的追捧和应用开发者的青睐.近年来智能手机发展迅速,运行速度.存储容量和可靠性等指标有了显着提高[1],当今的智能手机用户对应用软件的舒适性和美观性有了更大的期望,应用程序界面友好性已经越来越重要.但是由于Android 的开源性,硬件厂商屏幕分辨率不统一,据统计目前市场上Android系统手机的分辨率有10 余种,分辨率分布如此广泛

测试用例设计——如何提高测试覆盖率

说到测试用例的设计,我想每个有过测试经历的测试工程师都会认为很简单,不就是:按需求或概要设计,得到软件功能划分图,然后据此按每个功能,采用等价类划分.临界值.因果图等方法来设计用例就行了. 但事实上撇开测试数据的设计不谈,仅就测试项来说,我们发现,对同一个项目,有经验的测试人员,在写用例或测试时总会有更多的测试考虑点,从而发现更多的问题:而有些测试人员测试用例的撰写却只有那么三板斧,表面看好象已经把页面所有信息的测试都考虑到了,实际上却还是遗漏了大量测试覆盖点,导致其测试出来的程序总是比较脆弱.