1、FO软件编程思想拯救云计算软件危机最好方案 60年代中期,大容量、高速度计算机出现,使计算机应用范围快速扩大,软件开发急剧增加。高级语言开始出现;操作系统发展引发了计算机应用方法改变;大量数据处理造成第一代数据库管理系统诞生。软件系统规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来个人设计、个人使用方法不再能满足要求,迫切需要改变软件生产方法,提升软件生产率,软件危机开始爆发。 1968年,北大西洋条约组织计算机科学家在联邦德国召开国际会议,第一次讨论软件危机问题,并正式提出一个新名词:软件工程。以后出现了一门新兴工程学科——软件工程学,目标就是研究和克服软件危机。
2、 软件工程不能处理软件危机 刚开始时候,软件工程确实处理了部分问题。 然而进入上世纪80年代以后,尽管软件工程研究和实践取得了较大成就,软件技术水平有了长足进展,不过软件生产水平仍然远远落后于硬件生产水平发展速度。 当需求比较复杂时候,软件工程本身也出现了危机。比如当一个需求需要1亿个模块时候,缺乏必需文档资料或文档资料不合格,将给软件开发和维护带来很多严重困难和问题。 云计算必需面对“软件危机” 软件开发商极少提“软件危机”事情,架构设计师依据用户需求,制订出开发方案后,软件人员只需要根据要求编写代码就能够了。实际上中国很多软件人员好象不知道有“软件危机”这回
3、事。 传统软件开发能够回避谈论“软件危机”,毕竟是一个简单系统,比如ERP,也只是一个简单系统,即便出现软件危机,影响也不会太大,最多是影响一个大型企业。 然而开发云计算产品时候,软件危机就成了绕不过去坎了。一样是提供企业资源管理服务,影响就不是一个企业,也是很多企业,和和这些企业相关联政府部门,比如税务局、工商局、商业局、统计局等,因为这些部门从企业“数据云”里取得相关信息。 软件危机本质难题 图灵奖取得者Fred Brooks在1987年所发表了一篇相关软件工程经典论文——《没有银弹》。认为没有任何一项技术或方法能够能让软件工程生产力在十年内提升十倍。这篇经典论文关
4、键叙述通常被解释为复杂软件工程问题无法靠简单答案来处理。而她结论到现在为止是正确。 软件危机本质难题在于软件体系结构和软件程序代码数量。 1、体系结构是指数据、算法、功效在软件系统中连接形式,尽管数据、算法、功效本身是正确,不过其连接形式是多样,也就是说每个组成组员,是经过多条路径和其它组员连接。比如ERP中库存管理里家电产品信息,会关联到商业销售、物流、运输等。 2、程序是完成一个功效所需要逻辑过程集合。程序代码是统计逻辑过程符号。因为程序员本身问题,逻辑不清楚或所使用符号不正确,将造成程序存在“BUG”。代码数量越多,隐藏“BUG”就越多。 只有采取革命性方法才
5、有处理软件危机可能 以软件工程为关键传统软件开发方法,经过几十年发展,已经达成了一定高度,而且也出现了大量创新方法和思想。比如高级语言出现,面向对象编程,图形化编程,程序验证,构件技术,UML,MDA,SOA,灵敏开发等等。 1、Model Driven Architecture 模型驱动架构 UML是MDA所使用关键技术,任何使用MDA创建应用程序全部基于标准化,和平台无关UML模型。这么,就意味着应用程序被定义为和平台无关,所以这么应用程序就是可移植。这很轻易让人想到Java所宣称“write once run anywhere”,试图去构建一个平台无关框架,如Swing
6、 UI库。不过这种想法必需在性能和平台集成上作出折衷,而在过去这种折衷是很多产品失败根源,因为这些失败,业界仍然很怀疑MDA宣言。 2、灵敏开发 AM是一个态度,而不是一个说明性过程。AM是灵敏建模者们坚持价值观、灵敏建模者们相信标准、灵敏建模者们应用实践组成集合。 AM描述了一个建模风格。当它应用于灵敏环境中时,能够提升开发质量和速度,同时能够避免过分简化和不切实际期望。 AM是对已经有方法补充,而不是一个完整方法论。 AM并不是要反对文档。文档创建和维护全部会增大项目涉众投资。灵敏文档尽可能简单,尽可能小,目标只集中在和现在开发系统有直接关系事情上,充足了解受众需要
7、 AM也不是要反对CASE工具。灵敏建模者使用那些能够帮助开发人员提升效果,提升价值工具。而且,她们还尽力使用那些能够胜任工作最简单工具。 一直以来,国外优异软件工程师和软件研究人员殚尽竭虑,寻求提升软件开发效率方法和思想。然而这些优异方法仍然无法处理软件危机难题。由此可见,假如只在传统软件开发思想上进行创新,将极难找四处理软件危机“银弹”。只有在思想上发生革命性改变,才有可能寻求四处理“软件危机”根本方法。 FO方法多个假设条件 FO软件编程思想是北京乾坤化物数字技术经过8年探索实践而提出来。这是一个哲学和技术相结合范例。FO软件开发方法是建立在以下多个假设之上:
8、 1、软件复杂度是能够经过软件体系架构来描述,任何体系架构是能够经过维来构建。 2、任何一个复杂用户需求全部是分解,我们把不能再分解组成部分叫“对象” 3、任何一个对象包含而且必需包含两个部分,即对象外部属性和对象内部属性。 4、对象连接方法即结构,就是该用户需求体系架构。 FO软件开发方法 1、什么是FO软件开发方法 FO软件开发方法是以哲学方法论为指导新一代软件开发方法。包含三个部分,即面向事实分析(Fact-Oriented Analysis)、面向结构设计(Frame-Oriented Design)、面向形式编程(Form-Oriented P
9、rogramming)。 (1)面向事实分析。把用户需求当成存在事实,采取哲学方法进行分析。比如“教育云”用户需求就是把现实中教育体系模拟出来,我们采取哲学方法来进行分析,首先根据行政区域分解,全球,中国,省,地级城市,县、乡镇、村。然后以一个具体地域来分析,比如东莞市,包含教育门户,教育软件功效服务,教育工具等。不能再进行分解实体就是对象。对象包含内部特征——形式,和外部特征——配置两部分。 (2)面向结构设计。把上述分析过程中得到对象连接形式整理出来,并采取维方法表述。这么就得到了软件体系结构。比如地名维,栏目维,分类维等。 (3)面向形式编程。对形式部分编写程序代码,即
10、得到一个无具体含义功效模块。该模块和配置(描述参数)结合,就得到一个对象。 2、软件产品组成 根据FO软件开发方法规则,软件包含四部分:数据,功效模块,表现程序,连接方法(体系结构)。 在传统软件开发方法里,软件由数据、程序两部分组成,广义上讲,相关文档也能够作为软件一部分。 比较这两个方法,在FO方法里,软件=功效模块+表现程序+连接方法(体系结构),变为三个独立部分。 在教育云CMS系统中应用 现在在教育云CMS系统里,已经完成了10个功效系统开发,未来将扩充到几十个甚至几百个系统。 教育云里CMS系统是采取FO方法开发,数据、功效模块设计和行业应
11、用类型无关,也和平台无关。是根据软件工厂标准来设计。 这种方法最大特点是系统开发效率高,维护效率高。比如在内容公布管理系统里,10个不一样系统使用是一样功效模块,也就是说只使用了几百行代码,就开发了10个不一样需求内容管理系统。未来增加几百个系统,使用代码仍然是这几百行,而采取传统软件开发方法,这几百个系统则可能需要几十万行代码。 代码降低原因以下: 1、数据表设计规范化。根据同构群方法来设计数据表,把表里字段分为文本类、数字类、日期类、逻辑类等。每种类是由包含0个以上字段组成集合。利用同构群特征,只要是内容公布管理,就属于同构群一个,其处理方法是完全相同。 集合S={
12、文本类、数字类、日期类、逻辑类}和对这些字段处理运算组成了一个群G。 2、采取非线性逻辑单元结构方法来设计功效模块。一个功效模块是有一系列逻辑单元根据一定排列次序组成。以下图所表示,对于一个指定功效模块来说,存在最少一个以上独立逻辑单元入口,每个逻辑单元入口就要求了一个运算路径。同一层面逻辑结点排列次序可能有时序要求或没有时序要求。 采取传统软件开发方法开发下图所表示功效模块时,开发商无法预先知道功效模块实际模样,因为不一样软件工程师,或同一个软件工程师在不一样时间段,编写软件代码是不一样。也就是说无法得到一个基础规范软件程序。 FO软件开发方法采取非线性方法,对功效模块逻辑
13、单元进行分析处理,沿逻辑单元路径独立编写代码,最终依据需要排列第一层逻辑结点位置,就得到了功效模块。 根据FO开发方法,假如最小逻辑单元所完成功效相同,那么其代码也是一样,也就是说在最小逻辑单元层面,代码是完全共用。 FO软件开发方法意义 在8年实践应用里,经过不停探索调整,FO软件开发方法已经基础成型,并在部分具体应用中得到验证。在云计算时代,面对社会需求重大改变和愈加残酷IT技术竞争,FO方法推广应用将含有一定主动意义。 1、在基础上由国外控制关键技术IT领域,出现了含有完全自主知识产权软件开发方法,对提升中国企业竞争力含有主动地推进意义。 2、因为处理了软件危机本质难题,极大地提升了软件开发速度,为处理巨复杂软件需求提供了确保,所以为加紧“复杂系统”应用起到一定推进作用。






