软件开发是典型的知识密集型、复杂度高、开发周期长、可靠性保证难的活动。随着软件应用范围的迅速扩大,以及软件运行平台从单机到网络环境的转变,软件的规模越来越大,复杂性越来越高,这将导致软件在反映对象、开发基础、关注内容、运行方式、提交形式开销比重等方面的重要发展。从个体计算过程到群体合作过程的发展;由电子服务延伸到现代服务;从以单个软件开发为主向以集成开发为主的顺延;从以产品为中心到以服务为中心,如应用服务提供商(ASP,Application Service provider)和Web Service等都体现了软件向服务发展的趋势。已经存在大量发展运行的软件,如:金融、电信、航天等;软件应用的范围不断扩大,商务、交通、家电,已经无处不在;软件的规模与复杂性持续增加,越来越多的知识正在由软件进行显式表达;出现了大量与软件相关的标准;软件危机仍然存在;软件应用范围将继续扩大,成为信息社会的物理设施;遗留的软件仍继续发挥作用;最近一段时间,延长软件生命、维护、演化等问题同时受到了学术界和产业界的双重关注,诸如:柔性结构技术、远程维护技术、自适应技术等将受到重视。
软件的不断发展和演化,逐步的将中间件和构件分离出来,用于处理诸如:数据资源互操作的数据访问中间件、远程过程条用中间件、面向消息中间件、分布异构环境下的事务处理中间件,以及分布、异构的网络环境下的将各种对象有机结合的对象中间件。
Booch于2001年曾经说过:“管理变化性与复杂性是基于构建软件开发的动力”。在日趋复杂的网络环境中,如何将软件分布于不同的节点上。在现有的软件体系结构中,如何协调构件与构件的关系,如何突出软件复用这一思路。近十年来面向对象技术逐步成为主流的软件开发技术,为软件复用提供了基本的技术支持。软件复用被视为解决软件危机,提高软件生产质量和效率的现实可行途径。
那么如何更好的实现软件复用,我们不妨可以从我们自身这个最精密的、有智能的“机器”来借鉴一下。
生命的基本单位——构件
细胞——生命体的基本构成单位。在某种角度来看,它就是构件,有机构成了形形色色的各种生命体,各自执行着自己在自然界独特的功能。计算机作为人类进化的一个触角和延伸,似乎还没传承生命体特有的有机和严谨,貌似一堆相对松散的机械和电子行为。
人类发明工具的过程看起来是使人类逐渐的从劳动不断解脱出来的过程,而终极目标则是让工具自主代替人本身进行劳动,这就要求机器要具有某种形式的思维,而软件则是人类的思维的拓展,恰恰给了机器这种初级的思维形式。而这种机器的初级的思维形式还处在混沌状态,在于软件的开发思想和方式还未达到极致,如何达到这种极致,看来从解析生命界中最高等的动物,人类自身似乎能得到一些启示。