◆牟 杨
(上海体育学院 上海 200438)
仿生学的诞生和发展给人类解决各种问题提供了独特的视角和方案,人类发展史上的许多重大工程发明都源自仿生学。“软件工程是开发、运行、维护和修复软件的系统方法”[1]。北京大学杨芙清教授曾指出,软件具有生物特性,应用软件的生产模式应该模拟生物的生产模式而非硬件的生产模式[2]。仿生软件开发研究在国内外尚属新兴领域,不是现在人工智能研究方向的热点,目前还没有出现系统的、具有突破意义的研究成果,从事相关领域的研究人员和学者也还处在摸索阶段。
图1 知网摘录国内人工智能发展方向检索图
通过搜索知网相关条目,可以看到基于仿生学模拟人体大脑结构的交叉学科即人工神经网络方面的论文发表热度很高,而对于智能化软件开发,以及基于仿生学的仿生软件工程方面的文章,产出量及关注度都比较低。笔者就仿生学应用于智能化软件开发,特别是应用于软件诞生之初的结构设计,作了一点初步实践与探索,错讹失妥之处必多,敬希方家指正。
根据先行研究的成果,仿生软件工程可分为如下三类:仿微生物软件、仿植物软件、仿动物软件[3]。此分类以生物的相关特性对相应的软件系统,并根据其复杂程度、更新频次以及与互联网的交互作用进行了划分,这种划分进一步明确了软件与各种生命体的相似性。在软件的发展中既然显示出与生命体越来越多的相同点,那么生命体产生的过程对于智能化软件开发自然有可借鉴和学习之处。
本文讨论的重点不在于进一步对软件进行分类来探寻与生命体的相似性,因为动植物千差万别的根本原因在于他们的遗传基因不同,即使是最简单的单细胞动物也对软件开发有着借鉴意义。正如Frederick P.Brooks在《人月神话》所指出的,在增量开发时生物的复杂性令人敬畏,它自我更新能力异常强壮[4]。
如何将生命产生初期的特点应用到软件开发中,即如何将生命科学应用于智能化软件的开发是本文讨论的重点。下文将对智能化软件的开发和生命体产生进行类比,本文讨论及实践的范围,限于智能化仿动物软件的开发,而以受精卵到动物出生的过程作为软件开发的学习阶段。
既然要借鉴生命产生中的优点来对软件开发进行优化与革新,确定何种生物的哪个阶段作为软件开发的借鉴对象尤为重要。从已有研究成果来看,石富源《仿动物软件工程方法基因模型研究》[5]将“软件开发”和“物种产生”相对应,李朝霞《仿植物软件工程方法研究》[6]则提出了“软件开发”对应的是“生物体产生”。
如上文所述,一款“软件的开发”即是一特定“物种的产生”,仿生软件的开发和升级,即是新的生命体诞生、进化、成长、生长的过程。生命的起源到现在仍然没有定论,一种论点认为新的物种是生命由原始低级的生命体经过千百万年进化而来,仿生软件的开发正是或许未来是有如软件病毒(注:病毒正是属于生物链中比较初级、简单的微生物)中一段低级的程序代码或程序基因,被程序开发者赋予生命,并投放到Internet平台中去,经过或长或短时间的优胜劣汰,进化出或者说升级为一款智能软件,在这种意义上“仿生软件开发”就被赋予了全新的含义,软件工程师便成为“上帝”一般的造物主角色。
这种“软件开发”和“物种产生”的对应关系在理论上是正确的,但它在实践中所需要的条件却是未来模式,由于生成时间、存储空间、检验标准的不确定性,注定它在目前的软硬件条件下无法付诸实践。如果说软件工程师是孕生软件的“上帝”,那么当下Internet环境则有如推促软件升级的“上帝之手”——它通过用户体验对各种软件进行着优胜劣汰,不过从事软件开发的普通程序员相较于“上帝”来说他们更像孕育、分娩的“孕妇”,根据客户的需求开发出各种各样特定的软件。
既然当今程序员不是“上帝”还是从事“孕妇”一样的工作,而软件与生命体的对应关系是多方面的,可以从宏观上去定义,也可以从微观上去模仿,因此我们需要对智能化软件开发与生命成长阶段进行重新定义,以便在当前条件下模仿生物产生来进行软件开发的实践应用,本文是以动物从受精卵到出生的过程作为学习和模仿对象,对软件开发进行借鉴与指导。
软件开发只是软件工程的一个环节,细分下去软件需求、软件设计等诸多环节如何与生命体产生过程相对应,却是一个难题,这势必影响到生物体产生诸阶段与软件开发诸阶段二者对应的完整性。我们假设生命如“上帝创造论”学说一样,是造物主在地球上放置了一段原始的生物DNA片段,最终使地球生机盎然,依然不能解释地球为什么需要生命,换言之与软件需求相对应的生命体的产生依然是未解之谜。基因储存着生命的种族、血型、孕育、生长、凋亡等过程的全部信息,那么软件设计对应的是各种物种的基因编制。表1试对生物体产生阶段与软件开发诸阶段的对照关系做了梳理。
表1 生物体产生阶段与软件开发诸阶段对照表
就上文对软件开发和生命过程的对应关系的梳理,确定了“个体软件实现与编码”对应的是“从受精卵到出生的过程”,那么本节笔者将梳理动物胚胎过程的发育过程及其特点对软件编码的借鉴意义。
“从受精卵到出生的过程”也可以细分为很多阶段。虽然动物的种类繁多,胚胎发育过程复杂,但依然拥有相似的过程:可分成受精、卵裂、桑葚胚、囊胚、原肠胚与器官形成等阶段,即受精卵发育成胚胎,胚胎继续细胞分裂、分化,产生各种细胞,组建各种组织、器官,最终形成动物幼体。
从生命体的诞生来看,在个体基因设计完成之后,个体的孕育诞生是一次成型的,这一点和传统软件模型中的瀑布模型比较相近,即软件设计之后就是软件编码,不会像螺旋模型需要重新设计,这好比在鸡蛋孵化过程中不会发生重新编制或修改设计以至孵出小鸭来。这是生命体诞生中一次成型而不会变化的特点,对于变更需求比较频繁的软件行业来说,或许不是一个可以借鉴的特征,但还是有不少值得软件编码借鉴、学习的地方。
(1)优势一:全周期生命态,通过细胞分裂的成长来保持一致性、兼容性.
人类的胚胎在孕育过程中经历了“有丝分裂”,所有器官以及系统都是一个小小的受精卵孕育而来,有丝分裂让母子细胞含有相同的遗传信息,保证了整个生命个体成长过程中的一致性和兼容性。
软件开发中的编码阶段,往往会发生参数不匹配,环境不兼容,运行版本不一致等各种问题,究其根源还是现阶段的软件编码是从函数、模块到整体系统构架的集成与整合这一拼装特性所导致。当今软件项目的规模日渐增大,系统日趋复杂,如Windows 7大约含有50,000,000行代码,对于复杂程度超乎想象的软件工程来说,类似乐高积木般集成起来的模块拼装方式难以满足质量标准日趋严格的软件开发要求,拼装而成的系统往往存在隐患。而反观生命体,如小鸡的构造要比一款大型的企业软件复杂得多,健壮得多,智能得多;成本和制造时间却很少。既然软件日趋复杂、规模不断增大、仿生程度愈益提高的趋势是不可逆转的。那么,软件编码去向更为复杂的生命体构成学习,应该是解决软件开发诸多难题的一条出路。
“全周期生命态”的含义是指生命孕育从“从受精卵到出生的过程”都是活体状态,它是自发的按照固有的分子级的构造在孕育生命,它的正确性也是由自发的功能性来检测的。但网站系统直到系统上线的最后一步,整个系统才算是运行起来,只有运行起来的网站才是“生命态”的。当在“百度”等搜索网站上进行查询,如同和一个“智者”交流,这时网站是拟生命态的,当服务器宕机没有任何反应时,刚才还在交流的“智者”如突然逝去一般。软件开发历经设计、编码、单元测试、系统测试,最后才上线运行;如果软件编码是和生命孕育过程及结构相一致的话,需要最开始就建立上线运行系统,把这一段最开始与“受精卵”对应的程序片段放入到运行环境中去,让它通过细胞自发分裂似地自我复制和自我构建,最后形成一个完整的软件系统,由于软件成长过程中所有的构建标准都是一致的,也就不会存在不兼容等各种问题。
(2)优势二:全周期生命态,通过自身构建情况反映成长进度。
软件的另一大问题就是软件进度估算困难,通过软件代码编写进度来预估完成时间,在代码运行之前难以确定隐藏了多少错误,软件纠错时间往往含有不确定性从而让开发时间难以把控。如果软件开发是全周期运行状态的话,软件中的错误和Bug将会充分暴露,也会更易于了解软件的开发进度,能大大降低管理和估算成本。
(3)优势三:全周期自动化,自动生成无人干预。
如果能像生命孕育阶段的全周期自动孵化那样,实现智能软件开发阶段的全自动化,则将完全省去所有人工开发成本以及项目管理成本,给软件行业带来革命性的飞跃。
(4)优势四:全周期生命态在生命构建过程中的自我测试与中止。
胚胎发育的过程是按阶段循序进行生物合成和细胞分化;由组织发生到器官发生,最终在形态建立的基础上出现功能分化。胚胎发育不会对每个细胞进行检查,而是通过它不断地分类,演变成组织来证明它是健康的。软件开发却不能像胚胎发育过程那样自我检测每一步的发育步骤是否正常,而需要专门的测试组来验证每个模块或组件是否正确。当然,在生命体自我构建过程中,一旦早期细胞出现问题,那么会发生孕育中止或出生缺陷的问题,而无法在孕育过程中发现问题并进行弥补与纠错。但另一方面这种自我检测的方式和孕育过程之自行中止,仍极大地节省了测试成本、时间成本、资源成本,从而值得软件开发引为借鉴。
(5)优势五:神经网络在生命初期开始构建。
在人类胚胎过程第7周神经管出现,后端部分形成脊髓,前端部分稍膨大,为脑的原基,由此可见人类神经形成是在于胚胎早期,正因为有了神经网络这样一个传达中枢,人类可以通过感觉神经感知外界避免机体受到伤害。
人类的神经系统也对软件开发有着深刻的启示。现在的软件一般要借助其他安全工具如“WAF”等来进行防护,自身没有安全检测功能,在网页篡改或是网站资源恶意删除时都无法感知,处在一个人为监控和被动发现的状态,如果软件系统自身就如一个生命体一样有一套完整的“感觉神经”系统,随时对于网络入侵者或黑客进行恢复和阻断,那对于网站的网络安全防护能力将是一个极大的提升。
(6)优势六:全能干细胞具有形成完整个体分化潜能。
从克隆技术可以看出,个体的某些体细胞包含了所有个体的全部信息。如果软件系统有相应的类似种子程序或DNA程序片段存在的话,将完全改变软件开发的现有形态,也有助于对软件系统的复原和备份。当软件系统变得残缺不全时,甚至是在遭受火灾地震等重大灾害时,只要一部分DNA程序片段便能复原整个软件系统。
在开发中如何借鉴生命科学的精髓是极为困难的事,软件作为隶属于计算机科学的工学学科,在应用过程中受制于当今的软硬件条件限制有时不得不有所妥协。笔者曾在仿生软件开发方面做过初步尝试,愿将其中的经验教训与读者分享。
如上文的“全能干细胞具有形成完整个体分化潜能”,即通过一个DNA程序片段生成或恢复整个软件系统,当今技术条件下笔者认为只有理论参考价值,尚无实现之可能。因为遗传基因信息的存储介质是分子级,而IT技术的信息存储是0/1格式,相对于基因信息的存储介质要简单得多。如人类基因组是由23对染色体(共46个)所构成,而组成染色体的碱基对共含有30亿个。将如此复杂的构造体凝聚于一个软件组件之中,当今的IT技术还无法实现。
为了将上文讨论的有关设想付诸实践,在软硬件允许的条件下笔者设计了一个“仿生命科学系统网站”,该系统网站和生物的对应关系,请参见表2。
表2 生物体产生阶段与“仿生命科学系统网站”对照表
限于篇幅下面简单介绍一下该系统的开发过程。
(1)“仿生命科学系统网站”的软件设计以及自动生成系统准备。
为了完成“全周期生命态的自动编程”,需要预先构建以下生成“仿生命科学系统网站”的辅助模块与系统,如软件系统生成流程模块、网页控件生成及测试系统、系统事务性操作执行系统、网页整合集成模块以及模拟测试数据等系统及模块。
(2)在网站系统运行状态下对一个网页控件进行软件编程。
首先调试好数据库以及网络发布容器,在第一个网页的第一个控件测试成功后,才能生成第二个网页控件。当第一个控件测试失败时,整个系统生成过程终止,如果所有开发测试过程成功,最终将是完成一个完整的网站系统供用户使用,其间无须任何人为干预和辅助。这是对生命孕育中的细胞分裂、自我生成与测试过程的模拟实践。
(3)网页控件监控系统用来感知目前正在开发的网页控件。
通过网页监控模块来确定当前正在构建的控件,并记录光标所在位置,那么这个监控模块在系统构建时能确定当前的构建网页和组件,还能记录网站所有事项操作和页面跳转路径图,最终形成此网站的导航图。将监控系统最终与网站系统一起发布,能对使用者当前正在使用的控件做监控,即用户行为监控系统,是对感知神经的实践模仿,能提高网站系统的智能安全防御功能。
(4)网站系统的开发完成以及与传统软件开发时间比较。
在各个模块以及网页拼装完成后,最后进行自动的整合测试,那么一个网站从一个控件到最后系统整合,这样一款仿生智能软件系统也就宣告完成。虽然这个自动生成过程只耗时46分钟左右,但前期各个生成系统的设计以及数据库调试等,却花费了大约11个月(见图2)。
从本例看出同等规模的软件开发,如果是按普通的软件开发通常在2个月内可以完成。但本款智能化软件试图将生命科学运用于软件开发中,故耗时11个月之久,主要是因为各种软件自动生成及测试系统的开发颇费精力,但这一实验性的自动开发软件一旦成功并顺利运行,则仿生智能化软件开发中的编码以及测试步骤,只需要不到一个小时就能完成。从人类工业的发展史来看,测试与准备系统应属于开发工具和装备,从手工作坊到智能生成流水线,人类工业的制造设备都是在逐渐升级中变得更加复杂与精密,制造时间却是大大缩短,从这个角度来看将生命科学运用于智能软件开发,是符合未来智能化软件的发展趋势的。
图2 仿生软件开发过程时间图
针对生命科学之应用于软件科学的热点在于机器学习,即智能仿生软件的开发与应用,而对软件的诞生过程失于关注,笔者认为研究人员应关注如何全自动化、智能化地来生产软件,因为生命科学对于仿生智能软件开发的借鉴意义,应该是全生命周期的,即贯穿于软件开发的全过程,尤其是软件诞生初期,只有在其设计模式与开发理念都符合未来智能化发展趋势的前提下,软件才能拥有更高的智慧,并通过后期机器学习成为高智慧的仿生命体。软件孕育诞生即早期设计的重要性绝不亚于后期的机器学习。本文研究和归纳了一些仿生学对智能化软件开发可以借鉴的优点,对于软件开发与生命成长各阶段的对应关系进行了重新定义,最后也以自己设计的一个小的软件系统为例进行了初步实践和探索,抛砖以引玉。本文如果能给生命科学应用于智能化软件开发提供一个思路或实例,引起大家的思考,也就达到了初衷。总之,仿生软件必将是软件智能化的一个发展方向,生命科学应用于软件开发仍然是一块有待开发的宝藏之地,值得我们去探索和研究。