云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。具体而言,其服务内容包括了基础架构即服务( 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架构就是将用户交互、数据转换、业务逻辑、业务实现等等都解耦出来,并且以开放和标准的接口进行服务封装。而云计算平台通过计算环境虚拟化,在此基础上进一步解耦。那么解耦为什么对于软件工程如此重要呢?这是因为软件工程所想要解决的一个核心问题就是变化的问题。在软件开发维护过程中,需求的变化、架构的变化、部署的变化、用户负荷的变化,从设计到最终使用到产品生命周期,它一直在变化。而为了能够在变化时不至于“牵一发而动全身”,我们就需要使得各部件之间不相互依赖,因此在更改某一部件时,其他部分就不会收到影响,这也正是解耦所做的工作——增加部件间独立性。
传统软件工程采取用户提出需求,开发商设计实现,用户审核验收的二元合作方式。然而在云计算下,第三方云计算中心的作用亦十分重要。云计算模式下的软件开发和运行环境基本上都是由云计算中心来架构的,这些资源按照开发者的要求进行配置。在开发者一端省去了硬件设施架构、运行环境调试等工作,只需一个浏览器和一些简单的工具就可以实施开发。而一些专用云计算平台甚至承担更多工作,使得开发完成之后的测试以及运行维护也全部由云计算中心负责。
可以看出,在新型的“三足鼎立”的关系下,开发商省去了很多重复性的工作,从而能够集中精力处理客户的需求,大大提高了工作效率。然而云计算中心在简化开发商工作,改变工程业务链的同时,也降低了开发商的商业价值。因而,云计算平台,随着在软件工程中不断提升的地位,冲击了传统软件工程中的合作方式。而这种情况,是当下众多的中小企业所面临的问题。
众所周知,软件工程没有“银弹”,云计算也难以成为那颗“银弹”。然而不可否认的是,云计算的出现提高了软件复用,简化了设计过程,降低了开发门槛,增强了解耦程度,大大推动了软件工程的发展。同时,其对于传统工程二元格局的冲击,也促使软件工程开发模型与相关技术开始产生变革,使得更加多元化的开发模式与商业模式成为可能。
[1] 史杰,谢丽君,史少华.论云计算对软件工程的影响[J].昆明学院学报,2011,33(6):67-68.
[2] 李未.云计算与软件开发变革[R].北京:第四届中国云计算大会,2012.
原文:http://www.cnblogs.com/fy14061043/p/5971519.html