首页 > 代码库 > 云计算对传统软件工程的影响

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

 

什么是云计算

云计算(英语:Cloud Computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。

云计算是继1980年代大型计算机到客户端-服务器的大转变之后的又一种巨变。用户不再需要了解“云”中基础设施的细节,不必具有相应的专业知识,也无需直接进行控制。云计算描述了一种基于互联网的新的IT服务增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展而且经常是虚拟化的资源。

在“软件即服务(SaaS)”的服务模式当中,用户能够访问服务软件及数据。服务提供者则维护基础设施及平台以维持服务正常运作。SaaS常被称为“随选软件”,并且通常是基于使用时数来收费,有时也会有采用订阅制的服务。

推广者认为,SaaS使得企业能够借由外包硬件、软件维护及支持服务给服务提供者来降低IT营运费用。另外,由于应用程序是集中供应的,更新可以即时的发布,无需用户手动更新或是安装新的软件。SaaS的缺陷在于用户的数据是存放在服务提供者的服务器之上,使得服务提供者有能力对这些数据进行未经授权的访问。

用户通过浏览器、桌面应用程序或是移动应用程序来访问云的服务。推广者认为云计算使得企业能够更迅速的部署应用程序,并降低管理的复杂度及维护成本,及允许IT资源的迅速重新分配以因应企业需求的快速改变。

云计算依赖资源的共享以达成规模经济,类似基础设施(如电力网)。服务提供者集成大量的资源供多个用户使用,用户可以轻易的请求(租借)更多资源,并随时调整使用量,将不需要的资源释放回整个架构,因此用户不需要因为短暂尖峰的需求就购买大量的资源,仅需提升租借量,需求降低时便退租。服务提供者得以将目前无人租用的资源重新租给其他用户,甚至依照整体的需求量调整租金。

云计算下的软件工程及其特点

软件的发展大体上经历了程序、软件产品和软件服务3 个阶段。早期的计算机系统以硬件为主,在硬件上搭配规模不大的程序,程序开发的流程较为简单,开发效率依赖于程序员的个人才智。随着计算机性能的提升和应用的扩展,软件的比重不断提高。无论是从规模还是从复杂程度上,都超越了个人的设计开发能力。工程化的设计思想及其相关的技术方法逐渐开始在开发中显得愈加重要。1968 年“软件工程”的概念被首次提出。软件工程强调的可维护性和文档化以及对软件生命周期系统化的管理使软件成为一种产品。软件产品的出现使得软件与硬件分离,成为独立的研究体系。在软件开发方法上逐渐形成了分析、设计、编码、运行、维护的一般流程。软件涉及的关系主体方面也基本形成了软件开发商与用户的二元格局。在软件工程提出后的几十年间,开发方法和设计思想不断创新,但是这一基本流程和格局没有太大变化。

软件的开发与计算模式和运行方式直接相关。一般而言,企业计算系统资源按照分层方式进行设计,体现在“应用―中间件/数据库―操作系统―硬件服务器”紧耦合的模式部署。这种资源架构是软件工程设计开发模式的先决条件。云计算的服务架构由IaaS,PaaS 和SaaS 构成。通过标准架构体系的中间件,屏蔽不同操作系统间的差异性,在虚拟化硬件和操作系统上提供可靠的稳定的业务保障,这也就是PaaS 的核心。在云计算的模式下,软件工程在面向对象的基础上进一步抽象化,提升到面向服务的层次。面向服务也就是将业务流整体分成子业务流,对子业务流级别的模块进行组织设计,并最终形成软件系统整体。面向服务使软件在IT 系统结构层次结构系统中更加接近应用。面向服务的开发模式延伸出了云计算下的软件工程。其基本特性表现在以下方面:

1) 构件的成熟度提高,软件的可复用程度得到提升。软件复用一直是提高软件开发效率克服软件危机的重要途径,而构件可以在更高抽象层次上实现大粒度的软件复用。软件复用程度的提高一方面可以运用成熟构件模块减少软件开发错误,提高软件的可信性; 另一方面则可以缩短开发时间,提高开发的绩效。根据国内著名PaaS 提供商800APP 提供的信息,云计算模式下开发时间可以缩减1 /3 ~ 1 /10。绩效与可靠的矛盾关系一直是软件危机的根源所在,云计算在这两方面同时具有的优势无疑为缓解软件危机带来了希望。

2) 开发者面向业务应用,需求工程成为重点。在PaaS 的平台中,开发者有可能写很少的代码甚至不需要代码,而只需按照业务流程对平台中提供的各类资源进行设计和组织即可。这种模式下,需求与开发具有了同等的语境,同时需求在软件工程中的地位也将更加重要。

3) 云计算下的软件工程打破了软件开发商与用户的二元格局,第三方云计算中心的作用更加重要。云计算模式下的软件开发和运行环境基本上都是由云计算中心来架构的,这些资源按照开发者的要求进行配置。在开发者一端省去了硬件设施架构、运行环境调试等工作,只需一个浏览器和一些简单的工具就可以实施开发。开发完成之后的测试以及运行和维护也全部由云计算中心负责。这种三足鼎立的关系是传统软件工程中所不曾有的,这既改变了工程业务链也改变了商业价值链。云计算中心将开发者与用户联系起来,并且在软件体系中占据了重要的位置。这种情况将会是云计算推广后众多的中小企业所面临的问题,对于大型的软件开发企业来讲,则可以通过构建企业私有云来完成之一嬗变。但是这也将存在着巨大的技术、资金挑战。因此,公共云与私有云的软件工程将会并存发展,这也是比较现实的一种预测。

对传统软件工程的影响

            与传统的软件体系结构相比,基于云计算的软件体系结构最重要的特点在于其前所未有的开放性和成熟的构件化。云计算应用软件必将大量利用云服务提供管理中问件的现成的软件构件,同时,新研制的软件又将成为后续应用软件开发所能利用的成熟构件。

云计算应用软件体系结构在本质上是完全分布式的,由客户端、服务端、管理端、开发端、测试端等多种软件构件有机集成,多种应用共享公共软件构件,应用之间仍然有清晰的逻辑边界,但不再有截然分开的物理边界。

从生命周期特点看,传统的软件生命周期模型是串行的,本质都是瀑布模型的变形,这样的生命周期模型更易于控制,可以保证在确定时间有确定的结果。但在云计算环境下,软件开发生命周期模型;并发模型、多重螺旋模型将成为主流,瀑布模型、迭代模型的使用越来越少,在软件部署后,交付的都是中间版,软件升级成为常态。

开发流程:软件开发不再是一个封闭的、全局控制的流程,而是存在多个并发和自治的流程,在一个项目中,自底向上、自顶向下有机集成。

在软件开发的各个基本阶段,需求阶段将占据较大的工作量比例,架构设计基本可以从已有的成熟架构模式中选型确定,详细设计可以借用大量的成熟构件和代码,随着软件复用程度的提高,软件测试的工作量将大大降低,而软件质量则得到有效提升。

开发过程中,用户、开发人员之间不再有明确的角色划分,通常情况下,在不同阶段,软件开发者、服务提供者、软件使用者多种角色是同一个人软件开发工具由云计算服务商统一提供,开发组织无需购买永久性的软件许可,只需在开发周期内按需租用云服务商的软件许可,这样可以大大降低软件工具费用。

云计算给软件部署、运行管理和维护带来了高度的灵活性,对于一个特定的应用,软件部署、运行管理、维护和开发过程是并行的,第一次部署的可能只是一小部分功能,在随后的软件升级中不断完善。由于云计算模式极大的降低了软件构件之间的耦合程度,软件的客户端、服务端、管理端等构件完全以并发、独立的方式部署和管理,甚至软件运行的基础设施也可以在用户透明的方式完成升级换代和重新部署。

云计算软件是按照用户需求随时运行,软件运行平台采用目前非常成熟的虚拟化接术,在客户端,可以产生多种虚拟环境,如Windows、linux,甚至是浏览器等,用户可以根据自己的喜好来选择;在服务器端,可以把大规模的服务器系统虚拟化为单一处理单元和连续的存储单元,降低用户端的管理复杂程度。

云计算软件运行的最底层的硬件系统和基础软件系统则由专业的计算机信息系统集成商统一维护管理,对用户来说,完全可以不关心底层软硬件的细节。

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