系统的思想:被测对象的系统性

我在学校学的专业是自动化。自动化最强调的就是系统的思想。我本科的时候上过一门课,叫“模拟电路”,任教的是华成英教授,我们私下里都叫她华奶奶。华奶奶有一句名言:“小到一个原子,大到整个宇宙,都是一个系统”。就是这句名言,帮助我实现了系统思想的启蒙。

图片

凡是系统,都具有四种基本特征:

     ① 第一,多元性。系统是由多个元素组成的,这些元素之间又各有差异。

     ② 第二,相关性。系统的不同元素之间、系统与环境之间总是按一定方式相互作用、相互制约。华奶奶教导我们,在模拟电路里,如果一个参数的改变导致电路某项性能上升或下降,那么一定有其它某项性能下降或上升。有一弊必有一利,明白了这一点你就永远不会跳楼。

     ③ 第三,层次性。系统通常可以逐级分解成一系列的子系统,表现出一定的层次结构。

     ④ 第四,整体性。系统具有整体的特征。华奶奶教导我们,面对复杂电路,要先看整体,不要揪着细节不放,总是纠缠于那个奇怪的二极管是干嘛用的,就分析不出整个电路的功能和性能了。

系统思想就是从这些基本特征出发,来认识客观事物、解决实际问题的思想,强调多元思维、关联思维、分层思维、整体思维。“小到一个原子,大到整个宇宙,都是一个系统”,那么被测对象肯定也是一个系统。所以,在测试设计里,系统思想有基础性的指导作用。

一、被测对象与环境的普遍相关性

既然被测对象是一个系统,它就具有相关性,就必然和一些外部事物产生联系,这些外部事物就是被测对象所处的环境。比方说,我们要测试一台无人机,可能会受到风力、海拔、雨雪、电磁强度等环境因素的影响:

图片

如果我们要测的是一个软件系统,可能会受到服务器、操作系统、网络、外部数据、用户操作等环境因素的影响。

图片

被测对象的理想能否成为现实,与各种环境因素息息相关。所以我们在做测试设计的时候,最好是首先把所有环境因素都考虑清楚,整理出一个完整的列表。

当然这很难。否则我们也不会说,“测试完整性问题”是五个测试基本问题之一了。有时候我们看到一个生产故障的分析报告,就特别无语:“竟然还跟这个因素有关?这谁想得到?!”我家车里的导航,出过一个特别诡异的bug,每次我从西五环上阜石路的时候,还有每次在儿童医院南边一点掉头的时候,抬头显示的导航信息都会卡死,只能重启车机才能恢复,在其它地方就没这个问题。我打电话给厂家反馈这个bug的时候,好像都能看到厂家测试人员脸上错愕的表情。

图片

我们这里想要强调的,并不是环境因素完整列表有多么必要,而是在考虑被测对象环境因素的时候,我们应该对这种普遍的相关性心存敬畏,不要被自己有限的常识牵着走,然后想当然地忽略掉某些因素。

二、被测对象的边界

当然最终,我们还是只会把一部分影响力比较大的环境因素,纳入到测试设计的范畴里。因为我们的测试资源一定是有限的,我们不希望测试输入空间的维度太高,规模太大。这些影响力比较大的环境因素,就构成了被测对象的外部边界。

另外,凡是系统都有多元性,所以被测对象总是由一些元素组成的。这些元素就形成了被测对象的内部边界。我们可以在不同的颗粒度上定义系统的元素,相应的,内部边界也可大可小。譬如说,一个软件系统,我们既可以说它是由几个子系统构成的,也可以说它是由一堆服务构成的, 还可以说它是由一些类构成的,这就形成了不同大小的内部边界。

图片

在测试设计里,如果可用的资源发生了变化,我们可能就需要对边界的设定进行调整。比方说,当可用资源减少的时候,我们就应该缩小外部边界,或者放大内部边界。

三、被测对象的整体涌现性

系统的某些性质,只能在大量元素构成的整体中涌现出来,在单个元素里并不存在。韩愈的诗,《早春呈水部张十八员外》,里面有这样两句:“天街小雨润如酥,草色遥看近却无。”从草地之外一定距离“遥看”整体,能看到一片绿油油的草色;可走近了,反而看不到了。这里的草色,就是一种整体涌现性。

图片

实际上,涌现这个词最近在媒体中出现得很多,时下被炒得火热的大模型,就有整体涌现性。大模型是由很多神经元组成的系统,当神经元的规模达到几百亿这个量级之后,大模型会突然涌现出很不错的解决特定问题的能力。

图片

当然,涌现出来的性质不一定是好的。有的系统故障,只有当系统超过一定规模的时候才会发生。如果我们对被测对象的这种整体涌现性认识不足,就容易导致测试不充分。譬如在软件领域,现在很多系统采用微服务架构。我们在测试这类系统的时候,容易有一个倾向,就是会把绝大部分资源,投入到面向单个微服务的接口测试里。因为接口测试实施起来比较简单,方便做自动化。可等到系统上线了才发现,很多问题都是在系统整体的层面上才会暴露出来,接口测试根本发现不了。

四、被测对象的层次性

被测对象一般都有层次结构,我们可以在不同的层次上分别开展测试。

这种做法,在各个领域里都很常见。比如集成电路的测试,可以分成单元级、芯片级、板级、系统级几个层次。

图片

单元级测试的目标是验证Cache、FPU这些处理单元的功能;芯片级测试的目标是验证这些处理单元是不是正确集成在一块芯片里;板级测试的目标是验证这些芯片是不是正确集成在一块电路板上;系统级测试的目标是验证电路整体的功能。

在软件领域,分层测试就包括单元测试、集成测试、系统测试几个层次。

图片

单元测试的目标是验证代码里每个基本组件的功能;集成测试的目标是验证这些组件是不是正确集成在一起;系统测试的目标是验证整个软件系统的功能。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值