信息化的本质分享 http://blog.sciencenet.cn/u/Babituo

博文

“时”与“态”的观念变迁

已有 534 次阅读 2022-3-3 09:45 |个人分类:面向资源软件开发方法|系统分类:科研笔记

“时”与“态”的观念变迁

概要

在传统的软件开发过程中,具有设计时和运行时的分界。随着现代软件开发技术的不断进步,这一“分时分界”的设计-运行策略,将逐渐演变为“分态叠加”的策略。

概念

传统软件开发过程大体上符合一般系统工程的流程。从开发的流程分工来说,设计性的工作是需求性工作的后序工作,一般包括架构设计、接口协议设计、功能组件设计、测试设计、集成构建设计等工作;按详细程度可分概要设计和详细设计;按目标进展阶段可分逻辑设计和物理设计。不管如何划分设计性工作,从时序逻辑的角度,都是处在实现性工作的前序。

实现性的工作,则是根据相对详细的物理设计,进行物理实现,其中,最主要的工作,莫过于编码实现。此外,还包括环境搭建、组装调试、整装构建、测试修复、部署发布等工作。在此期间,软件的程序逐渐从部分可运行演进到全部可运行的状态。

当软件的程序进入到可以相对安全可靠地整体运行状态时,通常就可以发布到生产环境进行应用运行了,软件进入维护性的工作阶段。

有必要区分软件的【设计时】和【运行时】的宏观和微观上的两种不同的概念。

在宏观上,从软件整体生命周期角度看,设计时是指软件上线运行前的时期,也就是开发阶段;运行时是指软件上线运行后的时期,也就是运维阶段。

在微观上,单从软件的开发阶段来看,又可分为软件的程序从生产构建的不可执行的阶段到可执行之后的阶段。这里的设计时,实际包含在IDE(集成开发环境)工具中的编码工作,在进入编译运行之前的时期,都是设计时,一旦编译通过,在IDE工具中启动运行了,才进入运行时。二者的关系是:设计时是为了假设的运行时应有的表现而设计。

本文讨论的重点是上述微观上的设计时和运行时的分界演变的规律。

分析

软件存在设计时和运行时的分界,主要原因之一是程序开发语言大多采用的是编译型语言。编译型语言是指需要编译器编译,才能自动转换为机器可执行的程序的一类编程语言,如C,C++。相对的另外一类程序开发语言,就是解释型语言,如BASIC,JAVA,java script,python,这些语言编写的代码,可以不经编译过程,立即解释执行。

假设软件开发人员和电脑可以比喻为是讲不同母语的人员,采用编译型和解释型语言的区别就好比是对书面语和口头语的翻译的区别。对外国人(程序员)用外文书面语写的书(程序),需要整本翻译为母语(编译),才能交给讲母语的人(电脑)去读(运行)。而口头语,则可以采用讲一句,翻译一句,听到一句。甚至一边讲一边同声翻译,讲的是外语,而几乎同时听到的却是母语。

这个比喻,也说明了为什么传统软件是采用编译型语言开发为主的:因为,作为一个具有一系列功能组合的软件程序,对早期的电脑来说,更像是一本书,而不是脱口秀。

存在设计时和运行时分界的另外一个原因,是出于对软件开发质量的控制需求。这么说,实际上并不十分准确。实际是和第一个原因密切相关的:因为传统采用了编译型语言编程为主,所以,就发展出来了按编译型语言开发进行质量管控的配套方法、过程策略和工具环境等,这些都是适用编译语言开发特点的。即便目前主流编程语言已经演变为解释型语言了,如Java,java Script等,但由于软件开发过程质量控制已经形成了强大的惯性,思维惯性甚至比工具环境的惯性更强大。设计时和运行时分界,仍然被当做规律来保留着。

再来做一个比喻,可进一步理解软件设计时和运行时分界带来的问题。

假设电脑是一个学生,软件开发人员开发软件只是将电脑运行所需要的知识传授给电脑。由于设计时和运行时的分界,就天然造成了学生在清醒地使用知识进行工作的同时,不能对他进行教育,而只能将学生关进教室,什么工作也不能做,只能专心听老师讲解时,才能传授知识。由此看来,对人的社会活动而言,教育时和工作时的分界就好比软件的设计时和运行时分界,这是初期教育或教育初期的模式,而不应该是成熟期教育和教育的成熟期应该遵守的规则。

软件设计时和运行时的分界,正像课堂教育制约人才素质培养一样,制约着现代计算机应用软件开发技术的发展和进步。

转念

当今的时代,电脑的能力早已不是只会“咿呀学语”的时代了,而是完全可以“出口成章”的时代了。有趣的是,我们依然还在重复着书面翻译和课堂教学的模式,对电脑进行“填鸭式的教育”。

虽然,软件开发过程的时序逻辑是不可改变的,但在时间线上,并没有限定所有的工作,都必须在一条时间线上串行地完成。理解这一点,是能否完成观念转变的关键。思考这样一个问题:想象一下同样的时序逻辑,是在一条时间线上串行地进行,还是在多条时间线上并行地进行的差异,就会醒悟:在软件的生命周期上,在某一个动作(如编译动作)进行的时间点上,划定软件的设计时和运行时的不可逾越的边界,并不是对应用软件自身逻辑开发实现的必要需求。

正如对生命的“生死状态”的理解,传统观念认为:生命是服从从无到有,然后又从有到无的“时序逻辑”的,时间的边界点,可以划定在“出生”和“死亡”动作的发生时刻点。而现代观念认为:“生”和“死”只是在时序逻辑上存在的先后次序的两种状态,并不是必须在具体的某个单一的时间点来完成整体切换的状态,作为整体,是可以看成是同时具备两种状态的叠加的,只是两种状态的特征表现程度,随着不同的阶段,表现出不一样的强弱程度而已。

可以理解为:作为生命整体的不同部分,如每个细胞,生与死发生在不同的时间线上,时间周期的长短不一。生命,其实是所有的时间线交织构成的整体时间线,而不是所有的部分物构成的整体物件。

现代软件的体系结构的演变过程,正越来越明显地体现出了这种生命特征。

分形

应用软件的演进形态,出现了从“单体”的软件形态,转变为“多体”的形态,又逐渐转变回“单体”形态的迭代演进模式。

从单机版的一个软件从启动运行到退出运行,存在明确的“生死边界”,到DLL动态链接库,再到CS、BS架构引入SOA理念、到现今云原生下的微服务架构和无服务架构的演进规律,正显示出,软件正在经历由局域的功能分解合一来单体实现,到广域的由众多的、甚至是海量的多体服务来实现的转变。服务的启停,是微观单体的生死,时序逻辑的边界依然遵守,但软件的整体生命,正变得规模越来越宏大,而需要融合的地域、时域、时线数量,横跨的业务边界的广度和深度需求,正在爆炸式地增长。

一个以泛在网络为硬件平台的、整体融合的、唯一的、超巨型的“单体”软件——元宇宙,又正在形成中。这和从受精卵单细胞生命演进到无数细胞有机构成的人类个体生命,又逐渐由单个独立的人类个体生命,到全人类命运共同体这个超巨型单体生命的分形迭代的演进,何其的相似。

态分

软件的形态已经变化,但软件的设计时和运行时分界鸿沟,却依然横梗在软件的生命周期上,被当做软件工程的金科玉律V型过程)在遵守,这正在成为软件开发技术进步的严重障碍。是时候将设计时和运行时的观念转变为设计态和运行态观念了。

如何完成这个观念转变呢?需要从软件在整体上,不再按时间点区分为设计时和运行时来看待,而是按某一部分,或某一局部,或“所有的各部分”是处于设计状态,还是处于可运行状态中来看待。这样,一个软件就成为其部分或局部的设计态和运行态的叠加的、持续存活的有机整体,而不是生死轮回的一个生命周期。

这一观念的转变意味着:传统软件全生命周期的开发和运行可在一个统一的虚拟平台上闭环设计、实现和运行;相互联系的不同功能的软件可在同一个公共的虚拟平台上进行融合统一;软件局部功能的改善和升级改进可以在统一的平台上,做在线的局部修正和状态切换来实现。就像人体细胞的死亡和新生,实现了人整体的肌体更新和成长。比如,人体血细胞可以生死更替多轮,但人体整体却可以保持于鲜活状态不变。

结论

随着应用软件适应的应用范围,时空尺度的跨度不断扩张,并保持整体融合的需求成为主流,未来应用软件新的形态将发生变化。软件设计时和运行时的概念将逐渐被微分,然后以设计态和运行态叠加的形式,来实现应用软件的设计、实现、运维一体化,形成整体统一平滑闭环演进的新的应用软件的存活模式。

 

 

2022年3月1日星期二

邱嘉文




https://blog.sciencenet.cn/blog-33982-1327823.html

上一篇:云原生——可能走错了路
下一篇:陀螺形软件生命周期模型

1 杨正瓴

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2022-7-2 21:43

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部