再造测试(Re-Inventing Testing):什么是集成测试?(上)

( 原文来自 James Bach 的博客:http://www.satisfice.com/blog/archives/1570

朱少民 等译,译文最早刊登在 微信公众号:软件质量报道

屏幕快照 2016-03-31 下午10.23.41

我痴迷于从事测试人员教练的原因之一,就是同时他们也帮我检验专业知识。这里有个特别好的例子可以说明这点,这是和性格开朗且思维活跃的学生Anita Gujrathi(已经得到她的允许,可以使用她的全名)的一次谈话。
今天的主题是“集成测试”,是从Anita给她自己罗列出来的技能清单中挑选出来的。“集成测试”之所以被选出来是因为集成测试是每个人都会用到的,但却很少人能真正明确它的概念。我的一部分工作就是帮助测试人员意识到,他们可能认为他们知道的事情,但其实只是模糊的直觉而已。一旦我们明确了这些概念,才可以帮助我们更深入的学习并融会贯通。
我们的对话如下:(做了一些语法和标点符号的小改动,括号内是我增加的评注)

James:
你是如何理解集成测试的?
(当我在问她这个问题的时候,我同样也在问自己。这是一个已知过程“文化融入(transpection,即在充分认识文化差异的基础上,将自己置身于对方的文化背景上观察和思考问题)”的一部分。当然,我不是为了得到“正确答案”,而是为了探索和训练她的思维过程,称为苏格拉底式问答法、反诘法)

Anita:
集成测试是我们在集成两个或多个系统时所进行的测试
(这不算错误的回答,但它太表面,还需要说出更多底层细节。太表面的意思是说,还需要更多的细节和细微的差别等内容。一个表面的答案也许在许多情况下是适用的,但是对于学习和训练来说这是一个黑盒子,我们要打开它。)

James:
那么什么是集成呢?

Anita:
就是某种连接两个系统的情形,这样在他们之间就可以交换数据。
(这是个不错的回答,但它还是太浅层。她说“某种(kind of)”,我猜她可能不太确定该用什么单词。我不知道她是否理解两个组件在集成中连接的技术实现。例如,当两个系统共享同一个操作空间时,在某种特定情境下,两个系统可能会出现依赖冲突。我想更进一步了解她对这个部分的理解。)

James:
连接两个系统有是什么意思呢?
(这个过程称为“细节驱动”或者“钻探(drilling down)”。通过选择对关键性概念的持续提问,使得问题的思考不断深入,有时候我会通过问一个案例来继续话题。)
 
Anita:
例如,有一个叫WorldMate处理旅游者行程的应用程序,它会生成一个XML文件,另一个应用程序读取XML文件,创建自己格式的行程,用于监测旅行者的旅程。
(学生在不知道如何解释一个概念的时候,就经常用例子来说明。他们常希望,我能通过他们说的例子,“理解”他们,从而放过他们,不用再解释更多的事情。例子当然是有帮助的,但是我不会就此罢手的。我想要知道的她怎么理解连接两个系统的概念的。
这个例子有趣的地方在于,这里仅仅说明了一个“弱集成”。如果她不能很好的理解集成这个概念,我可能会让她了解这个例子根本说明不了集成概念。
是什么原因说这是个“弱集成”的案例呢?因为这个例子中两个程序的唯一的衔接点是一个标准化的格式文件,没有其他的依赖关系或交互模式被提及,这正是设计者们想要的,尽量最小化不同组件之间的交互,消除由于集成而产生的风险。)
 
James:
我还是没有得到想要的结果:连接两个系统的含义究竟是什么?
(因为这是一个例子而不是解释,也不能作为一种解释。如果有人问什么是花,而你却拿出玫瑰,他们还是不知道什么是花,因为你可以用这朵玫瑰回答他上百个其他各种问题:什么是植物?什么是活物?什么是植物学?什么是细胞?什么是红色?什么是碳?什么是质子?你最喜欢的东西是什么?什么是广告?什么是危险?每次玫瑰都是一个问题的具体某方面的答案,但是不是所有的方面,那么你怎么知道玫瑰作为一个例子,实际上到底是解答哪个问题呢?没有一个具体的解释,你其实只是在猜测。)

Anita:
我正要说到这个问题呢。现在,我们将WorldMate(作为第三方的应用)连接到我的软件产品上,于是当一个旅游者从服务器上订了一张票并收到行程确认邮件,然后就进入WorldMate,生成XML文件,将其发送到我的软件上。这样我们就在WorldMate和我的应用软件之间建立通信连接。
(Anita坚持自己的看法,她看起来很自信,这很好。虽然她所说的是真正意义上的通信,但是从集成风险这上下文来看,这样的通信不会引起我们特别的关注。这种类型的通信并不一定需要集成测试,因为这里的XML结构是作为一个衔接点,两个系统分离的很清晰,并不需要做特别的或者困难的集成工作。)
 
James:
我还是没有得到这个问题的答案。简单来说,这两个系统并没有连接,而是互相独立的。那么连接真正的含义是什么呢?
(我假装不知道答案,为了使得她能更明晰问题。如果我感到学生是理性的自信,作为教练的我才会采用这种策略)

Anita:
好吧。基本上,我说的连接是指我们在两个系统之间创建通信。
(现在开始有好的回答了,但她提出的案例,只是展示了弱通信类型。)
James:
这个例子中,我并没有看到任何的数据通信。一个系统创建XML,另一个系统读取它,互相并不知道对方。
(我犯了个错误,不该说看不到通信。我应该说是个过于简单的通信。我本意是想激怒她,让她与我争辩,但是我话说过头了。)

Anita:
这是个单向通信的连接。
(我同意这是单向的!这就是为什么我说是弱集成。)

James:
Google和Bing(必应)是集成吗?
(苏格拉底问答法的一个主要策略就是找个案例,这个案例是适合于学生的想法的,但是又可以驳倒他们想说明的问题。我尝试弄懂,对于两个事情是集成还是只是简单的“靠近”的区别,Anita的看法究竟是什么呢?)

Anita:
不是?
James:
根据你的说法,他们是集成。因为我可以通过Google搜索一些信息,然后把搜索到的信息作为输出传送给Bing,Bing在这些信息的基础上再搜索。我通过Google搜索到一个公司名称,然后把这个名称粘贴复制到Bing,然后通过Bing的搜索来了解这个公司的具体信息。刚才你给的那个例子,就是两个独立的程序碰巧在处理同一个文件。

Anita:
明白了。
James:
所以,如果我测试两个独立的程序,应该已经完成了对独立程序所有该做的测试了。那么集成测试还需要做什么特别的、不同的或者专门的测试呢?

在这一点上,Anita看起来很困惑。这时候该转为教学模式了,帮助她明确概念,或者让她自己去研究弄明白这个问题。但是,我意识到,此时我自己的想法也不会太好。当我问我自己“如果我是她,我会怎么回答这些问题呢?”,我的回答并不会比她更深入。我决定下线,针对集成测试进行新的思考。
世界上许多事情都是轻微集成的,有些东西本身就很完整了。这个看起来是很显然的,但是究竟区别在哪呢?我现在已经有答案了,在我写下一部分博客之前,你的想法是什么?

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我
  • 上海市嘉定区曹安公路4800号同济大学软件学院
  • kerryzhu@vip.163.com