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

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

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

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

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

一.更高程度的软件复用

软件构件的成熟度提升,同时也能获得更高程度的软件复用。因为在云计算下,编程时直接使用云计算提供商提供的服务,而非传统软件工程一般的经过对象自底向上搭建各个组件,其组件成熟度天然大大提升,同时其所使用的这部分组件也获得了复用。成熟组件的复用是解决传统软件工程危机的关键。一方面,成熟组件的复用减小了软件开发的错误,提升了软件的可信度;另外一方面,软件复用大大减小了工做量,提升了开发绩效。根据国内著名PaaS 提供商800APP 提供的信息,云计算模式下开发时间能够缩减1 /3 ~ 1 /10。而软件质量与开发效率之间的矛盾一直都是传统软件工程危机的根源所在,云计算在这两方面同时具备的优点天然使得其成为解决软件危机的但愿。浏览器

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

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

三.下降开发门槛

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

四.提升解耦程度

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

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

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

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

国内云服务供应商

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

 

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

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

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

                

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

 

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

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

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

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

              

以搭积木的方式实现模型

 

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

 

结语

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

参考文献

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

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

相关文章
相关标签/搜索