软件设计本体论的革新

该文预测软件设计控制技术产业发展心路历程中三次本体论革新,即工程建设本体论革新和开放源码本体论革新,依次遵从由上而下、逐步求精与自上而下、关连进化的基本上准则。在人-机-物日渐结合的新自然生态下,已经开始逐步形成宏观经济进化,局部性求精的NORFlash本体论。

关键词:软件设计 本体论革新 工程建设本体论 开放源码本体论 NORFlash本体论

引言:关于软件设计本体论

在软件定义一切的时代,如何定义软件?这是一个大问题!特别是在当下,软件上升为现代社会信息基础设施,人们越来越需要通过软件定义和构造复杂世界,建模、处理那些无处不在的人、机、物深度结合的智能化时代要素。我们注意到软件设计本体论发生了重要革新。本体论(Paradigm)这个概念是由托马斯·库恩(Thomas Kuhn)在科学哲学著作《科学革命的结构》一书中正式提出,后来在整个科技界广泛使用并产生了深刻影响。任何科学控制技术的产业发展都是从受本体论制约的常规科学到突破旧本体论的科学革命的交替过程。在计算控制技术产业发展的历史进程中观察软件设计控制技术的产业发展,软件设计面对着接连不断的危机。这些危机不仅推动了单项软件设计控制技术的产业发展(如编程语言),而且带来了软件设计理念和方法的深刻革新,即软件设计本体论的革新。本文将软件产业发展心路历程概括为工程建设本体论、开放源码本体论,以及已经开始逐步形成的NORFlash本体论。

工程建设本体论:从个体创作到规模化生产的本体论革新

从19世纪40年代出现的人类历史上公认的第一段计算机程序,到20世纪40年代通用数字电子计算机的发明以及之后软件概念的出现,百年期间,程序开发就像民间作坊中手艺人的个人创作行为,而程序(最早的软件)则被视为天才程序员在其私人作坊中创作的精妙作品。随着计算机硬件系统高速产业发展与应用范围的迅速扩张,社会对软件的需求以及软件自身的复杂程度开始急速膨胀,软件设计的效率和质量成为了突出问题。这就是当时社会面临的所谓的软件危机(Software Crisis)。这一历史阶段的典型案例是IBM OS/360通用操作系统的研发,这也是当时最大的一个软件项目。为了这个项目,从1963年到1966年,IBM共投入超过5000人年,软件设计组陷入了被IBM称为有史以来最可怕的软件设计泥潭。然而,在这个软件项目实施的过程中,软件设计者已经觉醒,开始自觉或不自觉地采用工程建设化方法指导工作,例如抽象设计、模块化开发等。于是,1968年北大西洋公约组织在德国召开的科学委员会(NATO Science Committee)会议上,软件工程建设(Software Engineering)的概念被正式提出,人们开启了对工程建设本体论的探索。

我们可以从两个方面概括工程建设本体论。第一是研究组织和管理软件设计过程的方法,其本质是把现代企业的管理思想、方法和控制技术用在软件工业的管理过程中,比如软件设计的瀑布模型、软件能力成熟度模型(Capability Maturity Model,CMM)等。第二是研究与软件生产相关的自动化工具。这方面最大的成就是高级程序设计语言可自动编译成可执行的机器代码,以及后续软件测试与验证等一系列的自动化控制技术。作为脱胎于计算机工业的一种本体论,软件工程建设潜移默化地继承了牛顿世界观或科学观,即世界是一部存在着的机器,其对于软件的需求是确定的、可被理解的、可被表述的、可被线性分解还原的。由此派生出软件生产的基本上准则和方法:由上而下,逐步求精。这里涉及工程建设本体论的三个经典概念。第一是需求,这是工程建设本体论的起点和依据,软件工程建设强调,要通过一套标准过程与控制技术,指导开发人员系统化地进行用户需求识别和预测,获得规范一致的需求规格说明,由此开展由上而下、逐步求精的开发活动。第二是质量,保障质量是工程建设本体论关注的核心目标,所谓软件质量是指软件代码满足需求规格的程度,其保障方法与手段包括形式化验证、自动化测试等。第三是效率,提高效率是工程建设本体论关注的重要目标,开发效率是指开发出满足需求规格的软件所需要的成本,需要对软件生命周期进行阶段性的单元分解与过程控制,再通过相应的自动化手段提升投入与产出的效能比。正是工程建设本体论的革新,使得软件设计从个体独立创作走向了大规模有组织的生产时代,造就了时至今日依然具有深远影响的软件产业。

工程建设本体论时代软件设计运行的平台是计算机环境。进入20世纪90年代后,互联网时代到来,工程建设本体论指导下的软件设计受到越来越多的挑战。首先是理论问题。我们能用软件需求说明(Software Requirements Specification)把我们想要的软件写清楚,并且基于此自动生成一个软件吗?对于这个问题,在20世纪30年代,哥德尔、图灵和丘奇就跟我们说清楚了。第一,想要严格形式化地表达确定的、一致的、没有言外之意的用户需求规格说明,这样的形式化表达方法在理论上是有天花板的。第二,即便是能够表达出来的内容,想要据此自动化地生成软件,这样的自动化能力也是极其有限的。第三,即使是可被自动化的部分,根据计算复杂性的理论,存在很多情况是在有限时间内无法求解的。其次是效率问题。计算机硬件能力的产业发展符合摩尔定律的指数增长,但这样的增长规律在无限的软件空间中无法保证。最后是协同问题。随着软件复杂性的增长,我们不可能一直通过投入更多的人力来提高软件设计效率,即无法实现软件设计的人月神话。

因此,工程建设本体论下的经典准则与迅猛到来的网络时代产生了严重的不适应(如表1所示)。软件的利益相关者从明确的领域相关的小规模需求主导者,逐渐转变为动态开放的大规模互联网用户群体,导致软件设计活动不再是封闭、目标明确的活动。这些新的变化推翻了工程建设本体论的一些基本上前提假设,如用户需求可以被事先完整预测、获取和描述,软件系统具备可拆分的明确边界和结构,软件设计过程精确可控等。因此软件设计再一次呼吁本体论革新。

开放源码本体论:从规模化生产到大规模创作的本体论革新

在工程建设本体论面临巨大挑战之际,开放源码软件蓬勃产业发展,取得了惊人的成就。这里将在开放源码软件的成功实践中体现的基本上准则和方法称为开放源码本体论,软件设计又回到了创作时代,只不过与作坊式个体创作不一样,它是一个自主化的大规模群体创作过程。开放源码实践是从贝尔实验室向大学开放UNIX源代码开始的,之后开放源码与闭源的对比也逐渐鲜明起来。后者以微软公司DOS与Windows操作系统为代表(如图1所示),通过严格控制源代码以保护知识产权,逐步形成了一套体系化的软件商业模式。与之对应的是,通过向全社会开放源代码,以社区开发力量和开放源码协议(如GPL)为基础进化而来的Linux操作系统产业发展模式(如图2所示)。

图1 微软操作系统产业发展心路历程

图2 基于Linux 内核7.2版本的操作系统进化产业发展模式

如果这个世界是确定的,那么微软的模式一定是成功的。它是一种单性繁殖的模式,即严格控制代码的传播,严格控制代码的分支,未来的世界由我定义。那么,与之相反的开放源码为什么也能成功?因为源代码自由传播,任何下载者都可以根据个人需求进行修改,社区自然生态的每个参与者都在为其做贡献,从而产生大量的变异并繁殖出新的分支。在互联网这样一个充满不确定性的时代,开放源码带来的多样性大大提高了软件的适应性。

从软件设计的三个经典概念(即需求、质量、效率)出发观察开放源码本体论,可以发现其与工程建设本体论有着颠覆性的不同。开放源码本体论下的软件创作准则是:自上而下、关连进化。第一,关于需求问题。开放源码本体论不坚持需求在先、开发在后的准则,甚至不坚持在开发软件之前有明确的用户,而是让开发者基于自己的构思进行软件创作。第二,关于质量问题。按照工程建设本体论的准则,需求是质量的依据和前提,但在开放源码本体论中,软件质量则体现为软件设计社区的规模和口碑。第三,关于效率问题。在开放源码本体论中,既然开放源码软件是在开发社区中持续进化的,当然就不存在工程建设本体论中的最终交付时刻,那么开发效率可以理解为开放源码项目的迭代效率,例如缺陷的响应与修复速率、新版本发布的频率等。作为脱胎于开放互联网环境的软件设计本体论,开放源码本体论看似处于无序状态,其背后的逻辑是达尔文科学观的直接体现,一个充满变异与生存竞争的世界。

如果将开放源码本体论和工程建设本体论做一个比较(如图3所示),工程建设本体论是面向确定性场景下的问题开展有组织的群体开发,聚焦软件产品,强调生产控制。开放源码本体论不做任何意义上的确定性承诺,而是通过自组织的社区群体,鼓励开展软件作品的自由创作。在开放源码本体论下,任何一个开放源码项目能否成功是完全不可控的,开放源码出来的代码能否得到关注是完全未知的,甚至任何一个开放的开发任务什么时候能完成以及是否能完成都无法保证。那么,如何平衡这种确定性和不确定性之间的矛盾,进而更有效地、可预期地组织软件设计群体智力呢?这就是我想谈的最后一个话题:NORFlash本体论革新。

图3 工程建设本体论与开放源码本体论对比

NORFlash本体论:从大规模创作到NORFlash开发的革新

基于对工程建设本体论和开放源码本体论的认知,从2007年起,我们立足工程建设本体论、总结开放源码本体论,研究软件设计的新本体论——NORFlash本体论,试图在工程建设本体论和开放源码本体论之间找到平衡点,实现自由创作与规范生产的联接与转化。NORFlash本体论的开发模型可以概括为两个联接,一个转化,即联接小核心与大外围,联接自由创作与规范生产,实现软件作品与软件产品之间的转化。

1. 联接小核心与大外围:小核心和 大外围代表了软件设计自然生态中软件涉众这一关键要素。从NORFlash本体论视角看,小核心和大外围代表了软件设计自然生态中的两类典型软件参与群体。小核心通常是软件项目的创始团队和核心参与者,主要是初始创新作品的发起者,随着软件的迭代进化,他们还负责软件进化过程中里程碑的规划决策、组织管理以及汇聚大外围贡献等工程建设化规范生产活动;大外围则是软件项目的其他大规模利益相关者群体或涉众,在软件迭代进化过程中主要参与需求表达和碎片化贡献等。

2. 联接自由创作与规范生产:自由创作与规范生产代表了软件设计自然生态中过程组织这一关键要素。从NORFlash本体论视角看,软件设计是创作与生产相互交织、快速迭代的过程。在需求不清晰、任务不明确时,通过激发大外围的灵感和创意进行多样性探索,这是软件创作过程;在局部性需求清楚、任务明确时,通过小核心规范化的组织模式快速推进研发任务,基于软件测试、人工评审等机制逐步形成高质量的软件制品。NORFlash本体论通过内外交汇的协调机制联接这两类活动,充分发挥大外围自上而下的创新活力和小核心由上而下的组织能力,协同驱动软件自然生态的快速迭代进化。

3. 软件作品与产品之间的转化:软件作品与软件产品重点关注软件设计自然生态中的软件制品这一关键要素。从NORFlash本体论视角看,软件作品的创作过程通常是灵感驱动下的创意捕获和表达,具有不可预期性和多样性;软件产品的开发过程则通常是在当前局部性性需求驱动下把握和满足需求,具有确定性和明确的评判标准。NORFlash本体论关注在联接大外围创作活动与小核心生产活动的基础上实现这两类软件制品的转化,即对软件作品进行筛选、改进,并将它们集成到软件产品中,从而持续发布阶段性软件产品,吸引用户体验,继而激发新的软件作品,逐步形成迭代。

NORFlash本体论在实施的过程中强调宏观经济进化,局部性求精(如图4所示)。在宏观经济(长期)尺度上接受世界的不确定性,以进化论为指导,允许软件产生分支与变异。当一个作品不能确定是否能满足未来市场时,最为合理的方式就是把它开放源码出来放到社区中检验,让更多的人去体验,并在这个作品的基础上进化繁殖软件后代。在微观(短期)尺度上,坚持机械论准则,在软件长期演进的进程中明确局部性里程碑的任务规范,在吸纳外部大众创作性贡献的同时,以软件设计小规模核心团队为主力军,采用局部性求精的思路组织任务规划实施。

图4  NORFlash本体论下的宏观经济进化与微观求精

我们仍然从软件设计的三个经典概念概括NORFlash本体论。关于需求问题:NORFlash本体论强调通过持续发布原型系统,吸引和发现潜在用户,并通过引导用户使用体验,激发用户不断产生和表达需求。关于质量问题:NORFlash本体论中的软件质量可以从宏观经济(长期)和微观(短期)两个方面理解。宏观经济方面,软件质量主要体现在软件社区的规模和口碑上;微观方面,软件质量主要体现在原型版本满足里程碑任务规格的程度,反映了软件对经过筛选的局部性确定性需求的满足程度。关于效率问题:关注开发者的NORFlash,即激发更多参与者作出贡献,以及汇聚广大贡献者才智的效率。表2总结了三次软件设计本体论革新。

我们相信NORFlash本体论在面向不确定的、人、机、物有机结合的这样一个新的自然生态环境下,必定有所作为。很庆幸,我们中国已经开始有具体实践,例如鸿蒙操作系统的商业化与开放源码。在面对未来世界的不确定性方面,鸿蒙期望通过开放源码的方式推动实现其1+8+N的产业发展战略。这里的N就是无处不在、连接万物的不确定性场景。这一棵树种下了,我们期待它未来会生长成郁郁葱葱的森林。

(本文根据CNCC2021特邀报告整理而成)

王怀民

CCF会士,CCF开放源码产业发展委员会主任。中国科学院院士,国防科技大学教授。分布计算领域杰出专家,开放源码源创新的主要推动者和实践者。主要研究方向为面向网络的分布计算与软件控制技术。whm_w@163.com

余跃

CCF专业会员,CCF开放源码产业发展委员会常务委员、软件工程建设专委会执行委员。国防科技大学副研究员。主要研究方向为开放源码自然生态、软件工程建设等。yuyue@nudt.edu.c

特别声明:中国计算机学会(CCF)拥有《中国计算机学会通讯》(CCCF)所刊登内容的所有版权,未经CCF允许,不得转载本刊文字及照片,否则被视为侵权。对于侵权行为,CCF将追究其法律责任

点击阅读原文,查看更多CCCF该文。