移动应用架构之IO蒸馏

IO和交互

IO, 是一个应用和外界交互的手段。

应用,最关键的交互对象,是用户。通过IO,应用可以响应用户在屏幕上的按,滑,拉等操作,显示相应的内容。一款应用,必须通过和用户的交互,才能展现它的功能。如果按它点它都没反应,显而易见,这个应用没有存在的意义。

除了和用户的交互,应用时常需要和其他的外部系统配合,比如服务器,文件系统,数据库。交互过程中,应用会读取网络请求,发送网络答复,修改文件等等。这种交互可以让不同的软件系统相互协作,共同完成用户所期待的功能。

由此可见,对一个应用来讲,IO必不可少。

IO和测试

然而,从软件自动化测试的角度来看,IO不仅增加了测试的难度,而且降低了测试的质量。

从和用户交互的角度来看,首当其冲的难题,自动化测试的实现绝不可能依赖于用户的手动介入,否则就不能称之为自动化测试了。一种对策,是事先录制下来用户的操作,然后将其重现。还有一个办法,就是用编程的方式,模拟用户操作。仅仅处理用户输入这一部分,就给测试带来了不少麻烦。

除此之外,还有应用和其他系统的交互。如果一个前端应用使用了后台,那么测试前端就得把后台服务器跑起来。在某些情况下这根本无法完成,比如交互的对象是一个不受自己控制的服务器。即便应用所需的各个交互对象都可以被成功构建,文件或网络的写入和读出,都会大大增加测试的执行时间,进而降低测试的质量。

测试策略

在这种情况下,我们需要什么样的测试策略?这个问题的答案,将是我们测试方案最根本的指导思想。

你开发了一个应用,你最需要测的是什么?我建议你现在暂停五分钟,好好想想这个问题的答案。

你需要测的是按钮吗,是文字输入框吗,是数据库的读写吗,是HTTP的调用吗?不是,一方面它们应该都是非常成熟的模块,是基石,它们必须好用。另一方面,也是最重要的,它们不是你存在的理由!你需要测的,是能把你的应用和他人的区分开来的东西,专属于你的那一部分,换句话说,你需要测的是你的核心业务,核心竞争力。这就是我们的指导思想。

IO蒸馏

这恰恰是我想提出的IO蒸馏的概念,通过IO蒸馏,我们要把我们的核心竞争力给提炼出来,越纯越好,纯到所有的IO都被分离出来。一旦实现分离,我们就可以用一种模拟的假IO来替换难以控制的真IO,这样既能保证我们通过IO来测验应用的功能,又大大的降低测试的复杂度。

下图表示的是我们IO蒸馏的过程。

结语

对任何一款应用来讲,IO都扮演着至关重要要的作用,IO是应用体现它价值的舞台。然而,IO的自然属性对自动化测试带来了巨大的挑战。面对这个挑战,以测试核心竞争力为出发点的IO蒸馏,给我们带来了一套高效的测试方法。它把IO和应用的核心业务高度隔离开来,一方面使得应用的核心竞争力得以凸显,另一方面,让模拟假IO替换真IO成为可能,大大了提高了测试的效率。

延伸阅读