论云计算对传统软件工程的影响

云计算对传统软件工程的影响

云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。具体而言,其服务内容包括了基础架构即服务( IaaS) 、平台即服务( PaaS) 和软件即服务( SaaS) 3 个部分。其中IaaS通过虚拟化和智能化技术,为用户提供基本的计算与存储能力。PaaS与SaaS则是将通过虚拟化技术,将开发平台与软件以服务的方式提供给使用者[1]。云计算即是由从硬件到软件的3 层服务体系组成的。

任何一个技术都不是凭空产生的,其背后必定有实际需求的拉动,云计算技术自然也不例外。云计算的出现是为了解决资源利用率、运算能力不足以及成本问题。举例来说,传统模式下,企业建立一套IT系统不仅仅需要购买硬件等基础设施,还要买软件的许可证,需要专门的人员维护。当企业的规模扩大时还要继续升级各种软硬件设施以满足需求。然而,对于企业来说,计算机等硬件和软件本身并非他们真正需要的,它们仅仅是完成工作、提供效率的工具而已,然而企业却要在这方面花费大量的搭建、维护费用。另一方面,这些硬件设备,由于缺乏有效的资源调度,往往会产生一定程度的浪费。而云计算则可以将计算、存储资源以服务的方式提供,从而将主要的计算过程都放在云端。因而企业不需要自己搭建IT系统(对于公有云来说),只需要使用云计算企业提供的服务即可,成本问题就此解决。同时,由于使用了计算资源虚拟化技术,云计算企业可以为企业按需调度计算资源,从而在很大程度上避免了资源浪费。

那么云计算下的软件工程主要有何特点呢?首先,最直观的一点,由于PaaS层的存在,人们编程的对象由传统软件工程的对象(Object)变为了服务(Service)。面向服务也就是将业务流整体分成子业务流,对子业务流级别的模块进行组织设计,并最终形成软件系统整体。面向服务使软件在IT 系统结构层次结构系统中更加接近应用。面向服务的开发模式延伸出了云计算下的软件工程。除此之外,由于IaaS层的存在,云计算将计算环境与IT物理设备分离开来。这在一定程度上提高了软件开发的解耦程度。因而,其对于传统软件工程的影响主要有以下几点:

一.更高程度的软件复用

软件构件的成熟度提高,同时也能得到更高程度的软件复用。由于在云计算下,编程时直接使用云计算提供商提供的服务,而非传统软件工程通常的通过对象自底向上搭建各个组件,其组件成熟度自然大大提高,同时其所使用的这部分组件也得到了复用。成熟组件的复用是解决传统软件工程危机的关键。一方面,成熟组件的复用减少了软件开发的错误,提高了软件的可信度;另一方面,软件复用大大减少了工作量,提高了开发绩效。根据国内著名PaaS 提供商800APP 提供的信息,云计算模式下开发时间可以缩减1 /3 ~ 1 /10。而软件质量与开发效率之间的矛盾一直都是传统软件工程危机的根源所在,云计算在这两方面同时具有的优势自然使得其成为解决软件危机的希望。

二.开发者直接面对用户需求

由于软件实现时直接使用PasS提供的服务,开发者可能只需要少量甚至不需要编码。其更主要的工作是根据客户需求,对于云计算平台提供的服务进行组织与安排。而在传统软件工程的瀑布模型中,开发者需要首先经过分析客户需求,对软件架构进行设计分析等等流程之后才能进入最终的编码工作。而在每一层流程中,往往又要对上一层的结果进行一定的建模模拟,这就使得最终编码时,开发人员并不会直接考虑客户需求,而是面对经过层层建模后的结果。这也导致了软件工程中的又一矛盾:最终代码与客户需求之间的矛盾。由上述分析我们可以看出,该矛盾的根源在于开发人员面临的问题空间(客户需求)与解空间(实现代码)相距太远。而在云计算下,开发人员直接基于平台提供的服务考虑问题,提高了抽象层次,因而不需要传统的一层层的向下建模,能够直接面向客户需求,使得需求与开发具有的同等的语境,最终实现的应用自然也可以更加贴近客户需求。

三.降低开发门槛

由于云计算平台直接为开发人员提供服务,提高了抽象层次,开发者实际上不需要做太多的编码工作,这也大大降低了软件开发的门槛,使得更多人能够参与进来。而这一特点在以物联网为代表的超量信息系统中尤为关键。超量信息系统是指在运行过程中涉及存储或使用大量数据的系统。一个典型的物联网系统,涉及大量感知受控的设备,这些感知设备要十的七次方,千万级。同时在网上进行海量信息和通讯进程大约要10的12次方,兆级每秒,这么多的进程在进行。第三个是超量的非结构化动态数据,约为10的18次方[2]。那么我们不难想象,开发这样一个大体量的信息系统,需要相对应量的人力,也就是需要所谓的群体软件工程。然而,传统软件工程需要开发人员具有一定的专业技能与开发经验,门槛较高,因此群体开发的想法往往很难实现。然而在云计算下,软件开发的难度大大降低,开发者只需要少量的训练就可以具备开发能力。这使得在短时间内召集起一批开发人员参与超量信息项目成为可能。因而云计算为物联网系统的发展提供了便利。

四.提高解耦程度

云计算平台将计算环境与IT物理设备分离开来,提高了解耦程度。而众所周知,软件技术的发展过程就是不断解耦的过程。最开始所有软件都是在一个程序里,软件技术的发展就是不断的把它的组成不部分分拆出来。比如说70年代、80年代的子程序就是把业务逻辑分离出来,八十年代出现的远程过程调用就是把用户交互解耦出来。 九十年代出现的消息队列,就是把同步连接的变成异步连接的,进一步解耦。21世纪出的消息代理,就是将数据转换解耦出来。今天,SOA架构就是将用户交互、数据转换、业务逻辑、业务实现等等都解耦出来,并且以开放和标准的接口进行服务封装。而云计算平台通过计算环境虚拟化,在此基础上进一步解耦。那么解耦为什么对于软件工程如此重要呢?这是因为软件工程所想要解决的一个核心问题就是变化的问题。在软件开发维护过程中,需求的变化、架构的变化、部署的变化、用户负荷的变化,从设计到最终使用到产品生命周期,它一直在变化。而为了能够在变化时不至于“牵一发而动全身”,我们就需要使得各部件之间不相互依赖,因此在更改某一部件时,其他部分就不会收到影响,这也正是解耦所做的工作——增加部件间独立性。

五.冲击开发商-用户二元格局

传统软件工程采取用户提出需求,开发商设计实现,用户审核验收的二元合作方式。然而在云计算下,第三方云计算中心的作用亦十分重要。云计算模式下的软件开发和运行环境基本上都是由云计算中心来架构的,这些资源按照开发者的要求进行配置。在开发者一端省去了硬件设施架构、运行环境调试等工作,只需一个浏览器和一些简单的工具就可以实施开发。而一些专用云计算平台甚至承担更多工作,使得开发完成之后的测试以及运行维护也全部由云计算中心负责。

可以看出,在新型的“三足鼎立”的关系下,开发商省去了很多重复性的工作,从而能够集中精力处理客户的需求,大大提高了工作效率。然而云计算中心在简化开发商工作,改变工程业务链的同时,也降低了开发商的商业价值。因而,云计算平台,随着在软件工程中不断提升的地位,冲击了传统软件工程中的合作方式。而这种情况,是当下众多的中小企业所面临的问题。

国内云服务供应商

下面结合当前国内云服务巨头——“阿里云”的例子,来进一步了解云服务发展的现状。下图为阿里云当前提供的解决方案:

 

阿里云当前主打的解决方案

可以看出,其服务涉及建站、创建app、音频、游戏、大数据处理、商业等各个方面。这一方面体现阿里对该项目的重视,另一方面,这也是云计算在软件工程应用广泛,对于软件开发影响深远的一大体现。

我们同时可以注意到,阿里云紧跟当前热点,将云计算与当前的大数据分析、机器学习、人工智能等前沿领域相结合,提供了机器翻译,个性化推荐,人脸识别、语音识别等云服务,如下图:

                

阿里云提供的与前沿领域紧密结合的服务

 

再进一步,用户如何使用这些服务呢?这里就体现出来了之前我们所说的云服务降低编程门槛的特点。本来实现起来十分复杂的功能,在云计算下,可能只需要几行调用API的代码,甚至无需代码而仅仅操作几下鼠标,就可以轻易实现。

就以机器翻译为例。要使用这一功能,用户首先需要申请相应的服务,之后平台会向用户发送其专有的AccessKey。之后用户要做的就只是按照相应规范调用api即可。在这一例子中,提供的api有两个:detect与translate,分别用于检测语言与翻译。用户可以使用分配给自己的Key,发起HTTPS请求来调用API,即可对于目标文本进行检测与翻译。整个过程用户所要编写的代码大概只需要几十行。这也是其提供的服务主要采用的流程。

而机器学习服务的使用则更为简单。阿里云机器学习平台通过拖拉转的方式来操作实验。将复杂的机器学习算法集成为算法组件共拖拉,实验人员通过搭积木的方式实现实验流程。

大大降低了数据挖掘的操作门槛。这也使得实验人员可以从复杂繁重的代码编写工作中解放出来,从而专心于模型的设计中去。        

              

以搭积木的方式实现模型

 

那么对于传统软件开发领域,阿里云又有着怎样的优势呢?我们以其提供的视频解决方案为例。当下直播行业十分火爆,吸引了大笔资金。然而独立开发一个直播平台却是一件让人十分头疼的事。开发者需要考虑Web、Android、IOS等多种平台的兼容性冲突、主播端视频传输的稳定性及传输速度、客户端的卡顿等等问题,需要耗费很大精力。在这种情况下,如果选择传统自主开发方案,可能主要工作量都会花在实现上,那么就很难做出亮点。然而阿里云直接提供了视频直播加速、快速视频解码、直播监控等等方案,直接为开发人员解决了技术痛点,使其可以将工作量花在设计自身特色上,提高了产品的质量。而该服务使用起来也十分简单。以视频直播加速为例,用户只要在开通服务后,将直播域名提交给云平台,再经过几步解码格式、推流地址、播放地址的相关设置,即可使用直播服务。整个过程中无需任何代码。正像我们之前说的,云平台简化了开发者的工作,使其能够更好地处理用户需求,而非被技术难点困住。

 

结语

众所周知,软件工程没有“银弹”,云计算也难以成为那颗“银弹”。然而不可否认的是,云计算的出现提高了软件复用,简化了设计过程,降低了开发门槛,增强了解耦程度,大大推动了软件工程的发展。同时,其对于传统工程二元格局的冲击,也促使软件工程开发模型与相关技术开始产生变革,使得更加多元化的开发模式与商业模式成为可能。

参考文献

[1] 史杰,谢丽君,史少华.论云计算对软件工程的影响[J].昆明学院学报,2011,33(6):67-68.

[2] 李未.云计算与软件开发变革[R].北京:第四届中国云计算大会,2012.

 

posted @ 2016-10-17 22:23  Kira096  阅读(374)  评论(6编辑  收藏  举报