新闻中心

EEPW首页 > 嵌入式系统 > 业界动态 > 实现软件编程工厂化

实现软件编程工厂化

作者:北京乾坤化物数字技术有限公司总经理 赵文银时间:2022-12-13来源:电子产品世界收藏

FO方法是指面向事实的分析(Fact-Oriented Analysis)、面向结构的设计(Frame-Oriented Design)、面向形式的编程(Form-Oriented Programming) 的软件开发方法。

本文引用地址:http://www.eepw.com.cn/article/202212/441579.htm

几百行代码,完成了传统软件开发需要几十万行代码的软件系统。这并不是理论上的研究,而是一个正在使用的软件系统——云计算农村数据服务平台中的果业数据服务平台。

该平台目前包括果业产销服务,农资服务,物流服务,农机服务,分析预测等近200个系统。并可根据需求,按照全国行政区域划分,为每个村都配置一个独立的果业数据服务平台。今后云计算农村数据服务平台还可扩展到蔬菜业,养猪业等等。该农村数据服务平台所管理的数据可无限多,且数据查寻时间快速,及乎不受数据增加的影响。如此庞大的巨复杂软件系统,所需编制的数千万行、数亿行代码,都可由FO方发法的几百行代码简便自如地生成。

FO方法在业内率先实现软件编程的工厂化,使软件复用在庞大的巨复杂软件系统成功应用,是软件工程的具有里程碑意义的创新技术。

当今的计算机硬件发展是如此之快,软件的开发已经远远地落在后面。人类面临太多的难题需要通过软件来帮助分析解决。

全球金融危机爆发之前,尽管人们希望开发一些复杂的系统来满足人们的需要,但是这种需求并不迫切。然而金融危机爆发之后,人类经济发生了全球性衰退,没有一个国家能够幸免于难。20国集团领导人伦敦峰会前后的一系列应对国际金融危机的措施表明,"一场全球性的危机,需要全球性的解决方案";发端于国际金融危机的全球应对,将使世界经济形势、全球治理模式、国际关系格局等都出现新的变化,并产生远远超出危机应对本身的影响。

一个模拟全球金融体系的巨复杂软件系统将会更加有效的进行金融监管。然而目前的软件技术却无法完成如此复杂、庞大的软件系统。

能否找到开启软件开发的新方法,从根本上解决目前的软件危机难题,帮助人类开发出模拟现实的真正解决人类难题的软件系统?几十年来,国内外的计算机专家一直在寻找这个答案,并且提出了很多创新的思想方法,比如软件工程的面向对象方法,构件方法,敏捷开发等等。但是始终没有找到一种方法来解决软件的根本问题——软件危机。虽然,软件工程的某一种创新方法的出现,解决了部分编程的眼前问题,但是当软件的复杂度增加、软件系统更加庞大后,新的危机又出现了。而且这种危机比以前更加严重。

有没有银弹?

图灵奖的获得者Fred Brooks博士在1987年所发表的一篇关于软件工程的经典论文《没有银弹》中,把能给软件产业带来本质上突变的技术称为“银弹”,并且明确地强调真正的银弹并不存在。他认为没有任何一项技术或方法可以能让软件工程的生产力在十年内提高十倍。这个论断在这二十多年里一直没有被打破。

按照Brooks博士的观点,所有软件活动包括两个部分,即根本任务:打造由抽象软件实体构成的复杂概念结构;次要任务 :使用编程语言表达这些抽象实体,在空间和时间限制内将它们映射成机器语言。

一个相互牵制关联的概念结构,是软件实体必不可少的部分,它包括:数据集合、数据条目之间的关系、算法、功能调用等等。这些要素本身是抽象的,体现在相同的概念构架中,可以存在不同的表现形式。尽管如此,它仍然是内容丰富和高度精确的。

所以Fred Brooks博士认为软件开发中最困难的部分是规格化、设计和测试这些概念上的结构,而不是对概念进行表达和对实现逼真程度进行验证。当然,程序员还是会犯一些语法错误,但是和绝大多数系统中的概念错误相比,它们是微不足道的。

事实上,现代软件系统中存在的一些无法规避的内在特性,即复杂度、一致性、可变性和不可见性,让软件开发总是非常困难。因此Fred Brooks博士得到一个结论,天生就没有银弹。

目前我们无法确定FO软件开发方法是否就是真正的“银弹”,因为只有在更多的实践中验证后才能得到明确的结论。但是它可以使用有限的少量代码实现传统方法需要数百万行、数千万行代码才能实现的软件功能,以及它可以建立任意空间复杂度的软件架构体系,并且这个架构体系结构是可以根据需要随意调整的。因此至少我们可以认为它是一种高效的软件开发方法。

FO方法是如何解决“概念结构”难题的?

云计算时代,软件系统的复杂度比目前已经开发的软件系统要复杂得多,或许其复杂程度比 Brooks博士想象的还要复杂,而且我们几乎无法预先知道最终的系统到底有多复杂。开发一个不能预先知道复杂度的软件系统,听起来似乎在讲一个天方夜谈里的故事,然而不幸的是,在云计算时代,它的确是真实的。在西方所有恐怖民间传说的妖怪中,人狼之所以是最可怕的,是因为我们不知道他们的面孔会变成什么样的。

为了对付人狼,我们在寻找可以消灭它们的银弹。这种银弹是存在的。

那么对于具有人狼特性的软件,是否也存在银弹?尽管二十多年前图灵奖获得者布鲁克斯博士得出了“没有银弹”的结论,但是国内外的计算机人员并没有放弃对“银弹”的寻找,对希望的渴求以及永不放弃的精神是人类的天性。

作为哲学和软件技术相结合的产物,FO软件开发方法是北京乾坤化物数字技术有限公司在多年的实战中总结出来的方法。而环境的生存压力是形成这种方法的最大动力。我们不得不考虑如何让不同行业的软件使用同样的代码,也必须考虑如何用最少而且有限的代码来构建任意多的功能模块,以及如何应对不同行业的用户变化不定的需求。

FO方法是指面向事实的分析、面向结构的设计、面向形式的编程的软件开发方法。

面向事实的分析是哲学话题而非技术话题。是由行业专家对客户需求进行逻辑分析,而这种分析是完全不考虑软件技术的,只是单纯地按照哲学方式进行分析,然后建立逻辑模型。因此严格来讲,它不属于软件技术范畴。因为分析人员几乎不需要和程序员做任何交流,只需要把创建好的逻辑模型交给程序员就可以了。

采用面向结构的设计方法,我们可以得到一个复杂的空间逻辑结构,它将用来处理软件系统内在特性引发的一些问题,即复杂度、一致性、可变性和不可见性。

复杂度问题。任何一个复杂的现实模型,可以采用哲学方法,分解为简单对象的连接,而这种连接方式就是结构。因此对一个任意复杂模型的处理就转换成了对连接方式的处理,也就是对结构的处理。把连接方式进行分类,这样一个复杂的连接方式就转换成了由一系列不同类型的简单连接方式的组合。即得到了一系列的简单结构。

以云计算农村数据服务平台为例,得到了树状地名分层结构,行业分类结构,表现形式结构,产品分类,服务分类,人员分类,工作类型等等。这些结构组合在一起,就得到了云计算农村数据服务平台的对象连接方式。

一致性问题。 正如Fred Brooks博士在其论文中所阐述的,并不是只有软件工程师才面对复杂问题,物理学家甚至在非常“基础”的级别上面对异常复杂的事物。不过,物理学家坚信必定存在着某种通用原理,或者在夸克中,或者在统一场论中。爱因斯坦曾不断地重申自然界一定存在着简化的解释,因为上帝不是专横武断或反复无常的。

但是Fred Brooks博士却悲观地认为软件工程师根本无法用简单的方法来解决软件的这些复杂特性。甚至无法象物理学家那样从信念中获得安慰。而这种复杂度是人设计的结果,是随心所欲、毫无规则可言的,这种复杂性引起了软件的一致性问题。

如同解决软件复杂度一样,既然FO方法已经把复杂度问题解决了,自然其一致性问题也就不存在了。因为在每个最简单的连接方式中,比如行业分类,尽管不同的设计人员在命名或者结构的处理上有差别,但是其本质是一致的。比如我们对果业产品的分类,我们把猕猴桃又划分为早熟、中熟、晚熟三类,然后对早熟再进行细分,而很多的人没有增加早熟这一层分类,但是这两种分类方式在结构上具有一致性。

可变性问题。FO方法把软件系统分为两个独立部分,对象和连接方式(即结构)。软件结构是一个多维空间架构,每个维是由一组位置数据元素组成。对象又分为两个独立的部分,对象的内部特性——形式,对象的外部特性——配置,形式是程序代码,配置是一组描述数据的集合。

形式作为对象的内部特性,是固定不变的。但是作为外部特性的配置以及作为连接方式的结构是可以变化的。FO方法将通过调整配置和结构来改变软件,使它更加适应用户的需求。这种改变不涉及程序代码,只是对描述数据进行调整,不会增加软件开发维护的难度。因此可以根据需要随意改变软件的功能,以便更加适应环境的需要。

不可见性问题。软件是不可见的和无法可视化的。软件的客观存在不具有空间的形体特征。因此,没有已有的表达方式,就像陆地海洋有地图、硅片有膜片图、计算机有电路图一样。当我们试图用图形来描述软件结构时,我们发现它不仅仅包含一个,而是很多相互关联、重叠在一起的图形。这些图形可能描绘控制流程、数据流、依赖关系、时间序列、名字空间的相互关系等等。

FO方法采用具有遗传特性的无限分层的树以及线性方式来展示描述软件的空间形体特征,我们无法描绘软件的复杂空间结构图形,但是可以显示每个维的图形,比如在云计算农村数据服务软件平台里,地名结构树,分类树等分别代表软件空间结构的地名维,分类维,这些是可以采用几何方式展示的。

几百行代码是如何构建传统方法需要几十万行代码的软件系统的

面向形式的编程方法(Form-Oriented Programming)的核心思想在于对象的内部特性即对象的存在形式是固定不变的,其外部特性即配置(描述)是可以变化不定的。这种观点在哲学上已经有明确的推论,比如《逻辑哲学论》等。

对于固定不变的“形式”,我们采用程序代码方式来完成,即使用一组指令,按照逻辑顺序进行排列。配置采用数据描述方式来完成,即制定一种“规定”,用特定的符号来完成对象外部特性的描述。程序只对“规定”里的符号本身做处理,而对符号所代表的具体含义不关心,所以当符号所代表的含义发生改变时,对于程序本身来说,它仍然在做同样的处理,但是展示给用户的结果却发生了改变,是另外一种不同的东西。这是由于人的主观意识决定的,因为人在大多数时候,是通过外部特性来判断这个东西是什么,那个东西是什么的,而计算机是通过内部特性来判断东西的所属的。

比如在云计算农村数据服务平台里,物流数据的统计和果品销售数据的统计,对于人来说,是两个不同的东西,但是对于计算机来说,它们是一样的,是对符号做同样的处理,不同的是作为由符号构成的群,是由不同的同类符号子群构成,每个子群的元素具有相同的构造(处理方法),但是元素的数量可能会有差异。

基于这个特性,就可以采用相同的程序代码,采用不同的配置(描述),构造出不同行业的大量软件系统了。比如在我们的“云计算果业数据服务平台”中,采用几百行代码,就已经完成了近200个不同的应用程序,如物流货运服务,果品销售服务,农机服务等。而采用传统的软件开发方式,完成这样的系统,如果每个系统使用2000行代码,至少也需要四十万行代码。

接下来我们将开发“云计算蔬菜数据服务平台”、“云计算养牛数据服务平台”、“云计算养鱼数据服务平台”、“云计算农村医疗数据服务平台”、“云计算人口数据服务平台”等,采用系统同构特性,这些软件系统将同样使用这几百行程序代码。而采用传统的软件开发方法,可能需要几千万行代码。

FO方法的意义

FO方法的意义大致有几个方面。

一是解决了软件复杂度问题。FO方法可以快速搭建任意复杂的软件体系结构,同时可以根据需要随意修改调整软件体系结构。这种调整修改可以发生在软件生命周期的全过程,即开发初期,或者软件使用过程中。体系结构的调整将形成全新的软件系统。

从这种意义上讲,FO方法使软件具有可以进化的功能。因为调整的目的是为了让软件系统更加适合客户的需求,每次的调整都可能更加逼近目标。

由于FO方法可以处理任意复杂的模型,所以从理论上讲,FO方法可以搭建和现实地球对应的数字地球,在这个数字地球里,有金融体系、商务体系、气象体系等等。

二是减少了程序代码的数量。程序代码的减少,大大增强了软件的可读性,可维护性,同时减少的BUG存在的可能性。比如目前的操作系统的代码达到了数亿行,如果采用FO方法,使其代码的数量限制在几万行,那么其维护以及功能的调整修改就容易很多。

三是提高了软件的安全性。软件的复杂度以及软件代码是导致安全问题的重要因素。大量的安全隐患存在于程序代码里面。从程序代码里发现问题并进行处理,是解决安全性的根本途径。然而在传统的软件开发中,由于程序代码的数量过于庞大,因此预先知道问题的所在是很难的。同时由于软件的复杂度,有时候即便找到了问题所在,也无法从根本上加以解决,因为这个地方的问题可能已经关联了N个程序,而我们无法准确的知道那些地方和这个错误有关联。

FO方法通过把复杂的问题转换为一系列独立的简单问题,然后采用解决简单问题的方法来提高软件系统的安全性。

四是提高了软件开发的进度。FO方法采用哲学方法来分析用户需求模型,采用命题形式来建立逻辑需求模型。程序代码的编写过程实际上是对命题的翻译过程。比如对一个简单对象的形式进行代码编写,实际上已经有了一个哲学上对这个形式的逻辑描述,程序员只需要把这种描述翻译成计算机语言就可以了,而计算机语言的选择可以根据需要来选择,比如java,c等。

和传统的软件开发方法比较,FO方法对于大型软件系统的开发,效果会更加明显,开发周期可以缩短70%左右。

五是减少了软件开发成本。软件开发成本主要是程序员的成本,在一个大型的软件系统开发中,传统的方法对程序员的素质以及人员数量的要求很高,软件是程序员思维过程的记录,因此人力成本也就很高。同时由于程序代码的庞大,导致了后期维护成本的不可控,也大大增加了总体成本。

FO方法把软件开发转换成为一个简单的劳动,软件是现实用户需求模型在计算机世界的映射。逻辑模型的建立由行业专家采用哲学的方法来建立,程序员只是在完成翻译工作。因此人力成本相对较低。同时由于代码数量的减少,后期维护成本也就相对减少很多。

对于大型、复杂的软件系统开发,FO方法的软件开发成本会更低,和传统的软件开发方法比较,大约会减少60%左右的成本。

六是软件可以满足用户不断变化的需求。FO方法只把形式部分采用程序代码方式来实现,而反映对象外部特性的配置部分采用数据描述方式来实现。因此用户可以根据现实环境的变化来修改软件配置,以便获得满足自己需要的软件系统。

2010年2月22日

注:此文是中国嵌入式系统产业联盟网络空间命运共同体研究会交流文

愿意加入我们研究会和微信群进行共同研讨的人士,可扫下面的网络空间研究会微信群二维码入和后补填入会豋记表。如您已是中国嵌入式系统产业联盟理事或会员,只需扫研究会二维码入群,联盟秘书处就会为您办加入研究会的豋记。谢谢!

1670911081336355.png




关键词: 软件编程工厂化

评论


技术专区

关闭