APP下载

对软件开发模式变迁的研究

2019-09-10梁惠惠

现代信息科技 2019年22期
关键词:开发模式

摘  要:自20世纪60年代软件危机爆发以来,为了应对软件开发面临的本质性困难,软件开发的过程和方法不断变化以适配不同的软件开发形态,形成了各类软件开发模式。随着互联网的应用和发展,传统的软件开发模式在应对显著提升的软件规模和复杂性方面遇到了很大挑战。基于互联网群体智能的软件开发模式逐渐形成。本文通过分析影响软件开发模式变迁的关键因素,探讨在当前互联网深度应用的情形下,软件开发模式的变迁趋势。

关键词:开发模式;敏捷;迭代;DevOps;群体智能

中图分类号:TP311.5         文献标识码:A 文章编号:2096-4706(2019)22-0001-05

Abstract:Since the outbreak of the software crisis in the 1960s,in order to cope with the essential difficulties faced by software development,the process and methods of software development have been constantly changing to adapt to different software development forms,forming various software development modes. With the application and development of the internet,traditional software development modes have encountered great challenges in dealing with significantly increased software scale and complexity. A software development mode based on internet collective intelligence has gradually formed. By analyzing the key factors affecting the changes of software development mode,this paper discusses the trend of software development mode in the current situation of deep internet application.

Keywords:development mode;agile;iterative;DevOps;collective intelligence

0  引  言

20世紀60年代软件危机爆发,催生了软件工程以及早期的瀑布开发模型;20世纪90年代,IPD(Integrated Product Development)作为完善的产品开发模式、理念和方法被一些业界公司纷纷采用以提高产品开发效率、缩短产品投放市场的时间。进入21世纪,随着互联网的兴起,为了应对客户需求的快速变化,敏捷和迭代模式开始大行其道。过去的十年间,随着移动网络、社交媒体、云计算、大数据、AI的快速发展和深度应用,颠覆式创新和跨界竞争加剧,为了快速应对变化,轻资产运行和智能高效的研发平台是关键,DevOps便应运而生。而当下,在移动互联、虚拟网络的大背景下,在大数据、AI、云计算等技术的加持下,群体智能作用下的软件开发模式亦越来越受到重视。

不论是瀑布开发模型,还是敏捷、迭代或者DevOps(Development Operations),或是群体智能软件开发模式,虽然在一定程度上可以缓解或者解决软件开发面临的问题,但是随着软件开发的规模迅速扩大,复杂性急剧增加,人们在处理问题时依然受到人类智能的局限。随着先进的软件组织方式、开发方法和工具的涌现,软件开发的能力和效率不断提高,但新的、更复杂的问题随之而来:不断变迁的各类软件开发模式,如何适配不同类型的软件开发项目,应对和解决软件开发面临的本质性困难。本文重在探讨影响软件开发模式变迁的关键因素,以及在当前互联网深度应用、大数据信息爆炸等情形下,是否有适配的新型软件开发模式。

1  软件开发模式

模式是事物的标准样式,可看作是解决某一类问题的方法论的基础。将某类问题的解决方法归纳、抽象到理论高度,即为模式。遵循模式有助于指导不同的人员做出优良的设计方案,取得好的效果并获得解决问题的最佳办法。

软件开发模式可以认为是软件开发方法+一系列的软件开发过程。

1.1  软件开发方法

软件开发的方法有很多方面的意义。狭义来看,软件开发方法是指在项目管理、分析、设计、程序的编写、测试和质量控制等软件开发的阶段或活动中,为达到某个目标而采取的途径、步骤、手段等,如常见的有结构化、面向对象等分析或设计方法。广义来看,软件开发方法大致可分为重量级和轻量级两种。常见的重量级开发方法包括ISO9000、CMM(Capability Maturity Model for Software)以及RUP(Rational Unified Process)等。在应用重量级方法的软件组织中,开发人员需要在软件开发的一系列阶段活动中不断撰写很多配套的软件开发文档,以满足流程的符合度要求。常见的轻量级开发方法包括XP(Extreme Programming)和敏捷流程等。轻量级的开发方法讲求开发过程的“短平快”,尤其是快速交付,鲜有对大量正式文档的要求,反而强调面对面的沟通胜过面面俱到的文档。截至目前,重量级方法和轻量级方法孰优孰劣,依然存在很多争论。一些方法论者认为在开发中应当严格遵循并且实施这些方法;另外一些人认为他们所在的软件开发组织并不具有实施这些方法的条件。实际上,采用何种方法开发软件取决于很多因素,各开发组织只能根据组织的现状选择适配自己的软件开发方法。

1.2  软件开发过程

软件开发过程或软件过程,又称软件开发生命周期,其包括软件的需求定义与分析、设计、实现、测试、交付和维护等几个阶段。软件过程为软件的开发定义了一个框架,该框架创建了一个环境,将软件开发方法、自动化工具和质量管理等紧密结合在一起,方便采用最新的技术和方法、生成各种工作产品(模型、文档、报告、表格等)、进行产品管理和软件项目管理,等等。在软件工程的范畴里,软件开发过程更多体现的是软件生命周期,适配不同软件形态和软件开发方法的软件生命周期则被总结抽象为不同类型的软件生命周期模型,如早期的瀑布模型、螺旋模型,以及近些年开始兴起的敏捷和DevOps,一系列的软件开发过程模型和软件生命周期模型被总结抽象固化下来。

敏捷的价值体现在:及时响应需求变化,强调开发个体之间以及开发与客户之间的交互,快速交付可以工作的软件而不是面面俱到的文档[1]。DevOps的价值体现在:维护与开发统一节奏,将开发交付的软件或版本及时部署获得回报。敏捷侧重于开发与客户间的配合,DevOps则注重开发与运维间的无缝衔接。二者的结合非常适用于当今的互联网企业:以客户需求为导向,强调开发过程中端到端的协作,消除开发、测试、运维之间的部门墙,降低内耗,降低成本,快速回报[2]。

不论是敏捷还是DevOps,其优点是轻量级、快速响应需求变化、快速交付,但是不够系统。而传统瀑布型开发模型的优点在于系统性和可预见性,系统性导致了其重量级开发方式,过程中需要输出大量文档。这样固定的流程式开发,带来的一个很大缺点即是难以快速响应多变的客户需求。有效的做法是将具有系统性和预见性的软件架构部件化,并嵌套到敏捷开发的每次轻量级的迭代中,使软件工程兼具软件架构的预见性和敏捷开发的适应性,根据项目的大小来调整嵌套的程度,根据每次迭代项目的大小来选择不同的架构,实现敏捷开发与软件架构融合的双赢。

软件是智力密集型创新团队中个体认知过程的直接产品,因此,许多用于软件过程管理的方法和技术旨在促进从事密切合作、智力密集型工作的组织成员之间的沟通和协调。尤其在当前越来越多的互联网应用和服务情形下,互联网开发模式,是针对互联网本质上是一个“服务”而发展起来的。因为是服务而不是产品,所以该服务最高的技术标准和评价标准是应对快速变化的能力。因此,在互联网开发模式下,开发人员更倾向于采用自动化的开发工具和方法来提高效率,如自动化测试、构建、集成、部署等;重视原型迭代,并且将开发和运营视为一个整体,不断完善互联网服务,让开发和运维在同一个生命周期里生长。这就是为何敏捷、DevOps等在互联网模式下更受欢迎的原因。

即便如此,我们依然关注到,由于软件所具有的复杂性、易变性、不可见性等特点,使得软件开发面临各种各样的困难。诸如,软件是一种无形的可塑的产品,在大多数情况下,软件开发团队需要生成和修改共享文档,而软件开发往往是作为一个学习的过程,知识的获得和信息的形成是在项目中进行的,因此,需要关注软件开发组织的有效性。又如,软件产品的复杂性,使得软件需求随着产品需求范围、知识的获得而改变;软件开发人员使用的过程、方法和工具也在持续不断地更新。再如,软件的无形性,使得目标量化和软件质量度量非常困难[3]。

2  影响软件开发模式变迁的关键要素

正如上述提到的,因为软件开发具有本质性的困难,导致软件开发模式也在不断地适应软件发展不同阶段、不同情境下的需要。软件开发模式可看作是人们改造世界的一种方式,是结合软件开发方法和软件开发过程来开发提高人们生产效率的软件系统的一种模式。那么,隨着人类社会的不断进步和发展,软件开发模式的变迁受到了哪些因素的影响,要回答这个问题,需要回顾生产力的概念。

恩格斯认为,生产力是具有生产经验与劳动能力的人利用生产工具改造自然而形成的能力。构成生产力的基本要素是:劳动者、劳动资料和劳动对象。劳动资料主要以生产工具为主;劳动对象是指劳动者在劳动过程中使用劳动工具所加工的一切对象。由上述定义,我们知道,软件开发可作为一种生产力,它涉及到三个要素:

(1)以生产工具为主的劳动资料,可以认为是软件开发所需的技术和工具等;

(2)劳动对象,即软件产品和服务;

(3)劳动者,即开发主体——人。

由此可见,抛开软件产品不谈,软件开发模式的变迁,主要受人的要素以及技术和工具的要素影响。鉴于软件是智力密集型创新团队中个体认知过程的直接产品,我们重点探讨人的要素中软件开发组织方式不同对软件开发的影响。尤其是在目前软件开发规模越来越大,互联网协同要求越来越高的情形下,软件开发组织的组织方式变得尤为重要。

综上所述,我们认为,软件开发模式的变迁,主要受以下三个关键要素的影响:

(1)组织方式;

(2)技术和工具;

(3)虚拟社会。

下面本文分别阐述这三种要素在软件开发模式中的所发挥的作用及其演化过程。

2.1  软件开发组织方式的演化

软件开发组织方式,涉及软件开发组织结构或者项目治理,业内一般有垂直型、水平型和混合型的组织结构。本文重点分析这些组织结构背后隐藏的社会性或商业性因素。

分析软件开发的历史和现状,可将软件开发概括为三个阶段:小作坊式软件开发、工业化软件开发、社会化软件开发[4]。简单来说,三个阶段的发展历程可概括为:从单打独斗的小作坊式原始软件开发,演化为流程化、系统化的工业化软件开发。随着Web2.0的普及、开源软件以及虚拟社区的兴起,软件开发又演化为去中心化的社会化软件开发。在这三个阶段的发展过程中,软件开发组织方式的演化,遵循了人类社会和商业组织的演化模式,即,从去中心化,到中心化,再回到去中心化。

随着软件规模和复杂性的不断增加,集中式的软件项目管理以及单纯地增加团队的规模并不会相应提升软件开发的效率和质量。尤其是随着互联网的快速发展,软件的规模和复杂度越来越高;软件开发越来越要求开放、分布、共享和协同;软件运行环境越来越开放、动态且多样化。上述变化,促使人们寻找能够匹配大规模软件开发的新软件开发组织方式。群体智能提供了一种解决问题的新模式。其背后的逻辑是:通过汇聚群体的智慧,产生一种超越个人智慧的更高层次的智能,这种大规模的人类群体协同能够有效应对软件开发的本质性困难。

2.2  技术的演化

软件开发技术包括:软件开发方法学、工具和环境等,其主体是软件开发方法学。软件开发方法学是对软件开发中应遵循的策略、原则、步骤以及相应的输出作出约定,从而规范化、工程化软件开发过程。软件开发环境则是方法、工具的有机组合。

纵观软件开发技术的发展,可归纳为五个阶段:

(1)机器语言阶段;

(2)汇编语言阶段;

(3)高级程序设计语言阶段;

(4)软件开发工具阶段;

(5)组件化与服务化阶段。

各个阶段依次用机器语言、汇编语言、高级程序设计语言、软件开发框架与工具以及流程编排容器来开发软件。

2.2.1  机器语言

是用二进制代码表示的一种机器指令的集合,其能够被CPU直接识别和执行。不同的计算机都有各自的机器语言,即指令系统。从使用的角度看,机器语言是最低级的语言。

2.2.2  汇编语言

使用CPU指令型语言進行编程来表达业务逻辑。使用汇编语言编程,编程人员需要理解大量计算机底层的特性,难度大,成本高。

2.2.3  高级程序设计语言

使用面向过程的语言表达业务逻辑。主流的面向过程的范式有顺序结构、选择结构和循环结构。高级程序设计在一定程度上提升了软件开发的效率,但是对软件的复杂度依然缺乏控制,不利于大型软件的开发。

2.2.4  软件开发工具

采用各种框架和技术来开发软件。框架技术采用面向对象的模块化思维来表达业务逻辑,它更接近人类认知世界的方法。这一时期也催生出许多程序框架和工具用以简化软件生命周期的各个流程,如Spring框架、Maven构建工具、Git版本控制工具、IDE集成开发环境等。采用框架技术的软件尚不不具备弹性伸缩的能力,只能依靠升级硬件的配置来扩展服务能力。

2.2.5  组件化与服务化

该方式利用分布式的思想实现软件的组件化和服务化,能够提高软件的复用性和服务能力。但面临的一个问题是,普通开发人员如何基于组件构建出大型应用程序。理想的状况应当是可视化、自动化、傻瓜化,开发人员能够基于业务流程,在可视化界面上,通过拖拽从资料库中获取各种组件,从而生成可运行的业务流程甚至应用。当前流行的容器化和编排技术,促进了组件化和服务化软件的开发模式形成,大大降低了构建大型应用软件的成本。尤其是在云计算环境中,软件开发人员可从云环境获取云组件,在本地或云提供的虚拟机上组合装配完成业务流程或应用,然后从云存储服务器动态加载与提取数据,形成一种基于云计算的软件架构[5]。

在传统的软件开发中,软件开发技术的应用更多体现的是人的智力以及人的智力在机器上的应用结果。在互联网和物联网的大环境下,万物互联,包括人与人、人与机器、机器与机器之间的互联,软件开发技术需要考虑如何充分利用人的智力以及机器的“智能”。互联网可以为人们提供大量潜在的资源(诸如各类群体用户及信息)和服务[6]。

2.3  虚拟社会尤其是互联网群体智能的崛起

2.3.1  群体

群体与个体相对,是个体的共同体。不同个体按某种特征相结合,为了共同的目标而彼此互动、相互协作,就形成了群体。群体具有几个特征:目标性、群体意识、协作性和归属感。

2.3.2  群体智能

定义1:群体智能是指群体集合所具有的优于个体或个体总和的智慧与能力[7]。传统的群体智能最早是针对生物界智能体的集合,如蜂群、蚁群、鸟群和人类社会等。这些群体基于自身经验的简单法则发挥“1+1>2”的功效,为人类提供了解决复杂问题的策略[8]。此类群体智能在集体层面表现出分散的、去中心化的自组织行为。

定义2:除了个人智能的限制之外,群体智能来自大量自主个体的集体智能效应,他们被激励在某个基于互联网的组织结构下执行具有挑战性的计算任务[9]。该定义有两层含义,一是群体智能来自基于互联网的在线社区或平台上的大量个人,强调互联网在群体智能涌现中的重要性;二是群体智能系统无缝地交织人群和机器功能,以解决具有挑战性的计算问题。随着人群系统规模的扩大,协调大规模人群的工作并处理复杂任务变得越来越具有挑战性。

2.3.3  基于互联网群体智能的软件开发

在过去的几十年里,一些软件开发活动已经成为传统方法的难点,传统的软件开发方法已经无法有效应对互联网环境下显著提升的软件规模和复杂性。互联网的持续发展促成了互联网群体智能现象在各种问题领域内的不断涌现和蓬勃发展,其中,开源软件、软件众包等已经显著改变了人们对软件开发的理解,并提出了基于群体尤其是互联网群体的软件开发的新实践[9],在此基础上逐渐形成了基于互联网群体智能的软件开发模式。

群体智能可支持软件工程的不同阶段活动。最近的研究表明,群体智能可帮助开发和测试应用程序,以及分析软件需求,同样,也可以直接用来实现应用程序[6]。软件工程的复杂性决定了软件开发的群体智能具有许多独有的特征和问题,这些特征和问题与普通的智能化不同。同时,互联网的不可靠性、动态性、消费性以及社会性四个特征又导致基于互联网的软件开发面临很大的挑战[6]。因此,群体智能在软件开发中,依然需要支持如下的几个特性:

(1)科学性:基于群体智能的软件开发是软件工程学科,需要遵循编程语言的严格语法和语义、遵循各类工程标准,如文档标准、各种过程活动标准等;

(2)创造性:软件生命周期中各项活动如需求分析、设计、实现等需要软件开发人员的创造性,基于群体智能的软件开发依然要考虑如何激发软件开发人员在软件开发任务中的创造力;

(3)主观性:主要体现在软件类产品的质量、DFX等特性。除了产品功能以外,软件类产品/服务的前述质量和诸可性等需求特性,依然是我们需要关注实现的。尽管其带有一定的主观性,但是也有相应的评估标准。

3  软件开发模式的变迁趋势

3.1  传统的开发模式依然在各种适配的场景下发挥重要作用

针对一些运营商类、企业类用户,其日常运营维护所用的软件,依然适用工业化软件开发。通常由软件公司内部的开发者團队进行开发。这些开发团队通常采用集中式层级结构作为其组织方式。在此类场景下,传统的软件开发模式依然大行其道,如瀑布模型依然在大规模的软件项目中广泛使用,此类项目规模较大,项目周期较长,一般采用集中式层级结构,有层级分明的组织结构以及分工明确的人员职责。敏捷模型依然适用于“短平快”的软件项目,此类项目一般团队规模不超过10人,需求更新快,响应也快,一般每周或每月发布一个版本。

3.2  基于互联网群体智能的软件开发正在崛起并深度应用

针对一些互联网类应用,尤其是共享经济下的互联网、物联网应用,则更多适用社会化软件开发。此类场景下,人的要素依然是第一生产力,讲求大规模群体协同、群体智能汇聚、快速迭代、持续演化。因为软件开发涉及到:

(1)任务的分析与分发;

(2)人员的组织、激励与评估评价;

(3)各类开发工具;

(4)质量控制。

因此,基于互联网群体智能的软件开发,也必然面临几个主要问题需要重点关注并解决:

3.2.1  组织的有效性

回顾影响软件开发模式变迁的关键要素,其中之一便为组织方式。群体是个体的组合体,同时又超越个体。具有不同背景、技能的个体组合起来,如何才能产生有效性,产生恒久的、可衡量的群体智能?由于各行业的组织结构和团队协作方式各不相同,为了展开有效的软件开发活动并提供有效的解决方案,需要不同程度的专业知识和奉献精神,需要更多的基于实际数据的行业特定研究。为了实现群体任务的目标,人们可以采用交互模式,包括协作、协调和竞争来连接个人,并为他们提供在社交环境中工作的调解机制。同时,由于个体具有较高的自主性和多样性,导致群体智能在软件开发花费的时间、力量和成本具有很高的不确定性。因而,一个关键的科学问题是如何掌握不同情景中的群体智能模式,揭示其内在机制、引导激励机制和操作方法,实现可预测的群体智能涌现。

因此,要确保群体组织的有效性,需要了解如何突破基于互联网的大众化协同、大规模协作的开放式共享与质量管理。

3.2.2  工作流工具平台的支撑

该问题与影响软件开发模式变迁的关键要素——技术相关。群体智能软件开发需要一系列的方法、工具或环境支持。具体来说,有如下两种:

(1)软件开发工具:软件开发人员需求分析、建模、编程、设计、测试等活动,需要各类工具支撑。集成开发环境IDE可以将这些工具集成到软件开发生命周期的各项活动中;

(2)知识共享和协作工具:各类在线论坛、维基百科、问答网站和其他基于Web的协作工具允许参与者进行知识共享和协作的沟通。StackOver流程使软件开发人员能够发布问题并解决技术问题,分享开发经验和知识。

3.2.3  群体智能的质量控制

群体智能的质量控制可认为是影响软件开发模式变迁的关键要素——技术和人均相关。意味着互联网群体在赖以工作的系统中提交的产品、数据标签和产品设计,其质量将对最终要交付给用户的产品和软件系统的有效性产生很大影响,然而,这种影响往往在不同的工作者之间有所不同。良好的评估和激励,能够激发群体的兴趣和积极性,从而对全群体智能软件开发做出更多贡献。而如何评估、控制和保证工作质量是我们要重点考虑的问题[9]。针对这些问题,需要新的机制和方法进行质量控制,以保证整个群体智能系统的质量。上述问题,对于组织自主群体,实现高效的协作和有效的智能是一个非常大的挑战。因此,大多数成功的资源项目和公司都有相应的群体开发支撑平台和相应的组织结构。

3.3  传统软件开发模式与互联网群体智能开发模式的融合

不可否认的是,当前的软件开发,不论是面向运营商、企业类的大型软件项目,还是互联网类应用项目,或是个人开发的一个游戏类APP,均离不开传统的软件工程的理论、方法指导,更多时候也依赖互联网上各类社区、服务、开源平台和工具的支持。互联网的群体协同、智力汇聚等优势在软件开发项目中正发挥着越来越重要的作用。

4  结  论

软件开发模式的变迁,伴随着软件开发的三个阶段(原始软件开发、工业化软件开发、社会化软件开发),受多种因素的影响,如软件开发组织方式、技术,尤其是互联网群体智能的兴起。不同的软件开发模式适用于不同的场景,而针对基于互联网群体智能的软件开发方法,业界学者正在进行一些初步的尝试和探索,重点探索互联网环境下软件开发的方法与技术,例如群体智能的形成、群体的组织与任务分配、群体智能的激励与质量控制、度量与管控;探索互联网环境下以大规模群体协同、智力汇聚、群体中个体的信誉追踪、群体智能持续演化为基本特征的新型软件开发模式[9]。

参考文献:

[1] 张林.软件开发模式的演进 [J].硅谷,2011(12):24+ 54.

[2] KIM G,HUMBLE J,DEBOIS P,et al. DevOps实践指南 [M].刘征,王磊,马博文,等译.北京:人民邮电出版社,2018:2-8.

[3] 魏金岭,周苏.软件项目管理与实践 [M].北京:清华大学出版社,2018:6-7

[4] 张伟,梅宏.基于互联网群体智能的软件开发:可行性、现状与挑战 [J].中国科学:信息科学,2017,47(12):1601-1622.

[5] 左海春.云环境下动态装配软件开发方法中的关键技术研究 [J].通讯世界,2017(19):14-15.

[6] SALAY R,DALPIAZ F,CHECHIK M. Integrating Crowd Intelligence into Software [C]//2015 IEEE/ACM 2nd International Workshop on Crowd Sourcing in Software Engineering,May 19 2015,Florence Italy. USA:IEEE Press,2015:1-7.

[7] 靖鲲鹏,王佳岐.国外“群集智慧智能”研究进展与展望 [J].高技术通讯,2018,28(8):700-711.

[8] 王华,赵东杰,杨海涛,等.大数据时代下网络群体智能研究方法 [J].计算机与现代化,2015(2):1-6.

[9] LI W,WU W,WANG H,et al. Crowd intelligence in AI 2.0 era [J].Frontiers of Information Technology & Electronic Engineering,2017(1):19-47.

作者简介:梁惠惠(1975-),女,汉族,山东莱阳人,副教授,硕士,研究方向:软件工程、大数据

猜你喜欢

开发模式
中职烹饪课程“校企协同”开发模式的创新与实践
鼓浪屿音乐旅游发展模式探析
浅谈乡村旅游的开发和利用
基于JSP技术的常用开发模式分析及运用
我国乡村旅游驱动机制与开发模式研究
非物质文化遗产的旅游开发模式与优化策略
邢台微营销市场前景与开发模式研究
四川康养旅游资源评价及开发模式研究
区域经济条件下旅游资源开发模式研究
浅析小学高年级数学习题资源的开发模式