王辉的博客

是什么让我对未知世界始终充满热情?

0%

并发(concurrency)和并行(parallelism)是两个完全不同的概念。

并发,从它的英语本意来看是竞争的意思。这是理解它的关键。没有竞争,并发就无从谈起。为什么会有竞争,那是因为资源是有限的。资源是一方面是有限的,一方面还要满足不同主体的需求,这就会遇到资源的共享。这样以来,就要指定一些规则,让大家有效,并且安全的利用这些资源。这里的并字,强调的是一种秩序。

并行,和竞争没有半毛钱的关系。并行指的是一个任务的属性,看它能不能被化分成相互独立,可以同时完成的小任务。比如说,有一个任务,是要数一本书一共有多少字,那么这个任务就可以被分成很多份,让小明数十页,小微数另外十页。此处的并字,侧重点是指任务能不能可分,能不能同时进行,来达到加速的目的。

两者,不是一个概念,不对立存在。不同的用法是为了达到不同的目的。一个很好的例子,就是JVM中不同的垃圾回收算法,有的是并发的,有的是并行的。

这里所说的级别是指一个测试所覆盖的系统的范围的大小。一个测试所覆盖的系统越多,它的级别也就应当越高。之所以想谈软件的级别,是因为对测试级别的不合理划分会引发更多的开发成本,降低开发效率。

在软件开发的整个生命周期中,在它的交付阶段,一个必不可少的步骤便是验收测试。验收测试的目的在于证明软件可以满足客户的所有需求。这个测试是软件测试中的最高级别的测试。它的特点有,系统覆盖范围最为全面,从用户界面,到算法逻辑,到数据存储,全部囊括其中。其次,测试必须基于用户的真实使用环境,一切都是真枪实弹,不能参杂任何的仿真的元素。最后,这种测试往往不能被完全自动化,它的执行会牵连到测试人员的直接参与。

从以上特点我们可以总结出来,一个测试的级别越高,它的执行成本就会越高。其中包括,资源环境的配置,人员的直接干预。这也就必然决定了测试的反馈时间延长(比如说配置环境需要半天,测试人员到位需要提前预约)。其次,由于大的覆盖范围,分析问题,鉴定问题的难度也会增加。因此,一个测试的级别越高,它被执行的次数就应该越少,它被执行的时间段就因该越晚。

我并不反对写高级别的测试,但我反对把一个验收测试当作单元测试用。

 

说有模块A,B,C。A依赖B和C,B依赖C。在A的POM中,可以只声明对B的依赖,而省略C。

有人说了,这样做不好,如果有一天B不依赖C了,而A仍然需要C,A就傻逼了,因为他躺着中了一枪。所以有人说,A一定要明确的声明对C的依赖,而不是靠B做一个传递依赖。

我觉得,任何事的对与错都不是绝对的,得看。

如果真的不好,与其保留这种名不正言不顺的做法,不如让Maven直接给它删了,何必模棱两可呢。避免许多口舌。