一、No Silver Bullet: Essence and Accidents of Software Engineering
在Fred Brooks所写的这边文章中,他认为曾经传说的年代中银色子弹可以有力针对狼人,是一个解决问题的良剂。然而,在软件工程中却不是如此,软件工程中有不可避免的诸多问题,主要由复杂性(complexity),软件整合(conformity),可变性(changeability)和不可见性(invisibility)等组成。
在硬件发展如此飞快的脚步下,软件也不敢落后,飞速的发展着。因而对应着用户各项要求的不断提高,软件也逐渐向着复杂性的方向不断延伸,为适应用户的 需求。因而,软件的复杂性不断体现出来。在软件中,规模的增加不仅是简单的添加组件,而是在整个软件上进行重新添加也相互协调,因而工程量与复杂度也随着软件规模的增加而倍数增加。复杂性的提高也将带来许多问题,如软件模块间的复杂,将带来软件不稳定性的问题;而复杂软件模块之间的相互调用与协调也将变得难以进行;而在软件复杂的同时软件项目组规模也变大,在人员的增加上之下,也像软件模块间一样,人员也很难达到协调同步的地步。
大型的软件不可能有一人独立完成,必须由软件开发者们相互合作才可以完成,为了便于开发者们的相互分工,软件就必需统一化接口,接口是软件模块的交流部分,在大型软件中,模块的划分成的小模块数量也许多,而实现软件的整合确实是个大问题。
开发者写出软件之后并不是一成不变的,由于使用中会出现各种BUG和用户的其他的需求,导致软件就得不断进行修改。然而只要软件还存在就意味着需要不断的更新,这给软件开发人员不小的困难。在不断解决发现的BUG前提下还要加上新的功能或改写功能,和上面所提到的不断增加软件复杂度类似,在不断增加难度。
软件不同于硬件,硬件是可见的,而软件是不可见的,所以软件描述有些困难。然而,软件工作者可以使用有向图来表示控制流,数据流,模式的依赖,时间序列,命名空间的关系,这样增加了软件的可表达性,但是仍然改变不了软件的不可见性。还是有许多不可表达的地方,这也给软件开发带来巨大问题。
在这些问题下,许多进步也给软件开发带来许多便捷,如高级语言(High-level languages)的方便性与统一化编程环境Unified programming environments)等。然而是否可以找到针对软件开发问题的Silver Bullet,就需要软件人员的继续努力了。
二.There Is a Silver Bullet – Brad J Cox
这个标题恰好同前一篇相反,Brad J Cox认为这个银弹就是——复杂结构的内部封装,使组件简单易用。将软件封装起来使得开发者可以对其有更好的管理能力,更重要的是用户们可以很方便的使用,用户可以减少那些他所不擅长和需要管理的东西,将复杂软件对用户简单化。因而这被视为一Silver Bullet。确实这对软件的开发与用户体验有巨大的提升,也许是称得上一枚银弹吧。
三.Big ball of mud
正如这个名字,犹如一个大泥团,而在软件开发中意味着软件代码杂乱无章,软件模块划分也是没有太多逻辑含义,这将软件变得犹如泥团一样,使得本来就不可视的软件变得更加让人无法理解。在杂乱的软件中不仅开发者无法准确的进行开发,难以完成所预期的各种效果,难以完成软件的整合与模块的清晰化;而用户也会感觉软件BUG连连,无法满足自己的各项需求。而后期,开发人员也难以进行进一步调试,修改和升级等操作。这给整个软件带来不可估量的毁灭性的打击。
这次我们许多的行为减少了这个问题。首先,我们开会讨论了整个软件框架,画出了大致草图,之后确定了软件实体化图案;然后,我们先由部分人员将整个框架搭建完成,之后人员分工进行后续的代码完成。软件的整体框架式一致性的,避免了大泥团的产生。
四、CatB – Cathedral and the Bazaar
此文描述两种软件开发模式,即:“大教堂式”和“市集”两种。这两种都是开源的,但区别在于“大教堂式”的每个软件版本代码在团队的手中,而“市集式”的源代码是在互联网上的。
此次我们是自由项目,有组员们自己选题,软件代码是自己编写,属于第一种——“大教堂式”。
五、Lost in CatB
“市集式”的开发带来许多情况。在有些人称为是.COM热潮时,认为在这个大热潮的时代IT人员大量涌现,代码的产量也是吓煞前人,有些人大为称赞此状况的时候,作者提出这只是在“市集式”开发的一种迷失。作者认为这只是一种泡沫,是一种与“教堂式”恰恰相反的“集市式”。在这种情况下,各种参差不齐的代码与模块化不够清晰,最为严重的是强行使用不必要的代码重用导致将整个WEB弄得混乱不堪,与自己声称的种种优点背道而驰,因为被作者称为只是“Lost in CatB”。
此次我们并不是使用“市集式”开发模式,且我们软件调理已经理清,框架明了,不会出现这种混乱情况。