软件开发与单元测试
计算机软件存在的目的是为了驱动硬件,在硬件为主的时代,人们看到计算机就会认为它是标准化、不近人情且小众的机器设备。随着计算机软件的大量出现,人们看到计算机就会觉得很亲切,认为它是我们无法分开的伙伴。有了软件的驱动,计算机“人性”的一面得以显露,但软件的规模要比我们想象的巨大,以Windows10为例,大约由5000万行代码组成,如果你想要把它的源码都读一遍,可能要穷尽你的一生。

不光是Windows操作系统,我们日常使用的软件或者移动端APP,背后都是由一大堆代码构成,而只要有代码的地方,就一定会存在bug。有编程经验的同学一定会认同,随着系统规模的不断变大,开发人员对系统的控制能力也在逐步削弱,如何能够让代码就像我们理想中的样子工作,如何能够避免问题的出现,其实祖师爷(图灵)早已经预言到了。
在1945年,二战结束的日子里,人们为世界恢复和平而庆祝,但人们都不知道,曾在英国的布莱切利公园,有一群天才们,通过研发出第一台计算机破解了纳粹德国的英格玛密码机。正因为他们杰出的工作,每天早上放在希特勒办公桌前的简报也同样的会出现在盟军首脑面前,二战因此提前两年结束。
那个时候,世界上只有一台计算机,它被称为克里斯托弗(来自于《模仿游戏》中的桥段),就在布莱切利公园,由图灵给它编写代码。这是真正意义上的代码,不是Ada编写的程序,而是二进制代码。设计者图灵使用整型和逻辑运算来编写程序,由克里斯托弗来解释执行,千把行的代码就攻陷了英格玛,算上图灵同一个团队的人,那时世界上的程序员可能不超过5个。

现如今,计算机到处都是,可穿戴设备和智能手机,都可以被算作计算机,数量肯定比人多了。虽然会编程的人占比不多,但据统计,也有2千万专业程序员了,他们大都像你我一样,利用IDE编写着代码,使用顺序、条件和循环堆砌着业务逻辑。有了这么多程序员,软件生态一定能够做的很好吧,但事实刚好与之相反。
软件开发面临的困境
图灵说 “我们需要大量有数学能力的人,因为我们面临很多这样的工作。我们遇到的困难之一是如何采取一种合适的规则,使我们的工作不会背离我们的意图。”,这段话显然是针对编程而言。编程这项工作需要人具备一定的数学能力,最起码是懂得逻辑,而将逻辑编写成代码的过程充满了挑战,因为人不是机器,不会记得全部路径和细节,总会犯错,从而导致编写出来的软件不能按照期望进行工作,这种与期望的背离,就是bug。
仔细回想一下图灵说过的话,他提到一种合适的规则,让我们所做的工作能够符合预期,可见,只写过上千行代码的图灵,已经预测到了今天开发者们所面临的困境。针对软件开发面临的困境,自软件诞生以来,随着规模不断的变大,越来越多的方法论和工具不断的涌现,都希望能找到图灵提到的规则。
但现实是残酷的,小到桌面应用程序出现bug无法使用,大到NASA的航天系统出现bug导致航天飞机升空爆炸,人们在编写程序的同时,也在编写bug,依靠测试人员也无法穷举所有的缺陷。
寻找圣杯
寻找图灵提到的规则,就是在寻找软件开发的圣杯。让我们先忘记圣杯,看看人们是如何应对软件规模的不断增长,这就要从很久以前开始说起了,当然如果你看过任何一本软件工程方面的书,你就一定很熟悉这段历史。
最早计算机硬件刚产生,软件只是附庸,那个时候是无“软件”概念的时代(1946~1955),软件程序主要围绕着硬件进行开发,规模很小,可以认为都是一些小工具。随着操作系统的出现,通用程序不断的下沉,越来越多的人进入到编程的世界,这个阶段是意大利面阶段(1956~1970),程序员是这个时代的宝贝儿,他们随意的编码,整个软件代码看起来就像意大利面一样杂乱无章,能用就行,还要什么自行车?而在这种环境下堆砌代码很容易“塌方”,最终后果就是软件一旦到了一定规模,就会不可避免的出现问题,由此产生了“软件危机”。
用代码去“码楼”会塌,但现实世界中,用砖去码楼,楼塌的却不多,这是为什么呢?因为建筑业遵循建筑规范,工程化的管理使得质量有保证,效率会更高。这时候有些聪明人就将建筑工程化思想引入到软件开发过程,软件工程这一领域变应运而生。软件工程强调用工程化的思想解决软件开发问题,瀑布模型、迭代模型、敏捷开发和RUP等软件开发方法论不断的推出,其目的就是为了提升效率,保证质量。除了软件工程,在软件开发的各个方面,都在进行着效率和质量提升的革命,如下表所示:
领域 | 所含内容 |
---|---|
编程范式 | 面向对象开发、框架和DSL等 |
开发流程 | 迭代、敏捷和持续集成等 |
研发工具 | IDE、代码审查和FindBugs等 |
经验习惯 | 设计模式和测试先行等 |
如上表所示,在软件开发的不同领域,人们使用各种技术来提升该领域的效率和质量,所含内容不断的推陈出新。要寻得圣杯,不是依靠一个简单的规则,更不是依赖某个工具,它需要我们不断的创新。寻得圣杯的人,必是开发者,而单元测试就是一种良好的经验习惯,掌握它,使用它,能够更好的指引你去寻得圣杯。