正在加载图片...
中国科学:信息科学第50卷第11期 来解决.此外,为缓解软件危机,极限编程XP)提出了系列措施来提高软件开发的效率和增进开发 人员对彼此代码的理解,如使用用户故事把客户加入到需求分析的圈子当中,或使用结对编程实现增 进代码理解的编程分享等. 又比如说,在技术方面,DevOps同)的提出倡导了软件开发模型从经典的瀑布模型,到后来的敏捷 和精益开发,以至更具效率的持续集成、持续交付、持续部署和持续运维.此外,设计模式[可强调了 复用已有的成功软件开发设计,以提升开发效率和降低维护难度,而代码重构阁则指引了如何在不破 坏原有功能的前提下,为己有软件引入设计模式.针对设计模式和代码重构的引入,科研人员也深入 分析其实际效用,如香港科技大学张成志教授团队通过设计基于实际软件开发者的对比实验,研究了 雇佣具有更多工作经验的开发者和花费代价通过代码重构为已有软件引入设计模式这两种方法哪个 对软件的持续维护工作更具有效用回,以及软件开发者是否真能有效利用预先在软件中部署的设计模 式o等问题 如此看来,类似于软件可成长性问题的关注一直存在,为何现在再次讨论并探索其可能的解决方 案呢?有两点主要的原因,一是现代信息社会对软件的构建和维护要求更加迫切了,如物联网、软件定 义和工业4.0等概念和技术的提出,促使软件系统加速进入“人-机-物”三元融合的应用模式,并 不断承受环境、资源和需求持续变迁的压力;二是现代计算基础设施更加成熟和有能力,如云计算、大 数据和深度学习等技术的提出.使得原先因为计算能力不足而无法大规模开展的工作如今能够有效尝 试.在这样的前提下,我们希望深入理解软件的可成长性问题,并从软件自身的构架角度(内部)和对 开发者支持的角度(外部)共同探讨软件可成长性的解决方案, 需要说明的是,反映出软件可成长性问题的软件构建和维护任务的复杂性,既有来自开发角度的 原因,也有运行态的原因.从开发角度来说,在软件部署前由于初始应用需求日益复杂,而在软件部署 后则因为应用需求持续变迁,所以开发角度这方面主要是指用户的应用需求导致软件构建和维护的复 杂性.另一方面,从运行态来说,软件的环境和资源持续变迁,也可能使应用难以保持原有的服务质量 和内容,而要应对这一问题,也会产生对软件持续维护,甚至再次构建的需求,所以运行态这方面主要 是指环境和资源变迁所导致的软件构建和维护的复杂性.这两方面综合起来,我们说,软件构建和维 护的复杂性即可成长性难题,既涉及开发角度,又有运行态的原因,是环境、资源和需求多个来源的持 续变迁所导致的,这是一个深刻且影响广泛,需要认真对待的问题: 2.2软件可成长性概念的内涵和范畴 基于以上的分析,我们定义软件可成长性概念的内涵为:在其所处软硬件环境,所依赖外部资源, 以及所服务用户目标不断变化的条件下,能通过主动的感知、智能的适应和持续的重构演化,实现长 期生存并不断优化.这一概念内涵,界定了引发软件可成长性目标的由来(即环境、资源和需求的变 化),也指明了达成软件可成长性的方法(即基于感知、适应和演化的架构). 同时我们定义软件可成长性概念的范畴为:软件成长不是“开创天地,从无到有”的神话,即软件 无需开发者,可完全自行演化出所需功能,也可完全自行修正自身缺陷(从任意规约自动生成程序的 问题是不可判定的山,更不用提无规约情况下的程序自动生成问题):相反,软件成长是一个“不断努 力,持续演进”的过程,即软件在自身架构上需要明确考虑其适应和演化问题,支持软件适应变化和版 本演化,使其生存时间更长,并对开发者支持使其更容易实现软件新增功能和修复缺陷。 1597 https://engine.scichina.com/doi/10.1360/SSI-2020-0079中国科学 : 信息科学 第 50 卷 第 11 期 来解决. 此外, 为缓解软件危机, 极限编程 XP [5] 提出了系列措施来提高软件开发的效率和增进开发 人员对彼此代码的理解, 如使用用户故事把客户加入到需求分析的圈子当中, 或使用结对编程实现增 进代码理解的编程分享等. 又比如说, 在技术方面, DevOps[6] 的提出倡导了软件开发模型从经典的瀑布模型, 到后来的敏捷 和精益开发, 以至更具效率的持续集成、持续交付、持续部署和持续运维. 此外, 设计模式 [7] 强调了 复用已有的成功软件开发设计, 以提升开发效率和降低维护难度, 而代码重构 [8] 则指引了如何在不破 坏原有功能的前提下, 为已有软件引入设计模式. 针对设计模式和代码重构的引入, 科研人员也深入 分析其实际效用, 如香港科技大学张成志教授团队通过设计基于实际软件开发者的对比实验, 研究了 雇佣具有更多工作经验的开发者和花费代价通过代码重构为已有软件引入设计模式这两种方法哪个 对软件的持续维护工作更具有效用[9] , 以及软件开发者是否真能有效利用预先在软件中部署的设计模 式 [10] 等问题. 如此看来, 类似于软件可成长性问题的关注一直存在, 为何现在再次讨论并探索其可能的解决方 案呢? 有两点主要的原因, 一是现代信息社会对软件的构建和维护要求更加迫切了, 如物联网、软件定 义和工业 4.0 等概念和技术的提出, 促使软件系统加速进入 “人 – 机 – 物” 三元融合的应用模式, 并 不断承受环境、资源和需求持续变迁的压力; 二是现代计算基础设施更加成熟和有能力, 如云计算、大 数据和深度学习等技术的提出, 使得原先因为计算能力不足而无法大规模开展的工作如今能够有效尝 试. 在这样的前提下, 我们希望深入理解软件的可成长性问题, 并从软件自身的构架角度 (内部) 和对 开发者支持的角度 (外部) 共同探讨软件可成长性的解决方案. 需要说明的是, 反映出软件可成长性问题的软件构建和维护任务的复杂性, 既有来自开发角度的 原因, 也有运行态的原因. 从开发角度来说, 在软件部署前由于初始应用需求日益复杂, 而在软件部署 后则因为应用需求持续变迁, 所以开发角度这方面主要是指用户的应用需求导致软件构建和维护的复 杂性. 另一方面, 从运行态来说, 软件的环境和资源持续变迁, 也可能使应用难以保持原有的服务质量 和内容, 而要应对这一问题, 也会产生对软件持续维护, 甚至再次构建的需求, 所以运行态这方面主要 是指环境和资源变迁所导致的软件构建和维护的复杂性. 这两方面综合起来, 我们说, 软件构建和维 护的复杂性即可成长性难题, 既涉及开发角度, 又有运行态的原因, 是环境、资源和需求多个来源的持 续变迁所导致的, 这是一个深刻且影响广泛, 需要认真对待的问题. 2.2 软件可成长性概念的内涵和范畴 基于以上的分析, 我们定义软件可成长性概念的内涵为: 在其所处软硬件环境, 所依赖外部资源, 以及所服务用户目标不断变化的条件下, 能通过主动的感知、智能的适应和持续的重构演化, 实现长 期生存并不断优化. 这一概念内涵, 界定了引发软件可成长性目标的由来 (即环境、资源和需求的变 化), 也指明了达成软件可成长性的方法 (即基于感知、适应和演化的架构). 同时我们定义软件可成长性概念的范畴为: 软件成长不是 “开创天地, 从无到有” 的神话, 即软件 无需开发者, 可完全自行演化出所需功能, 也可完全自行修正自身缺陷 (从任意规约自动生成程序的 问题是不可判定的 [11] , 更不用提无规约情况下的程序自动生成问题); 相反, 软件成长是一个 “不断努 力, 持续演进” 的过程, 即软件在自身架构上需要明确考虑其适应和演化问题, 支持软件适应变化和版 本演化, 使其生存时间更长, 并对开发者支持使其更容易实现软件新增功能和修复缺陷. 1597 https://engine.scichina.com/doi/10.1360/SSI-2020-0079
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有