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

Posted on 2016-10-19 22:01  Reway  阅读(207)  评论(0)    收藏  举报

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

1 传统软件工程发展

在计算机发展初期,硬件通常用来执行单一的程序,而某个程序通常只是为了单一的硬件设计的,可以说早期软件依赖于硬件,软件的发展落后于硬件,当硬件的通用早已成为家常便饭时,软件的通用性还是受到了很大限制,这就为之后的软件危机埋下了隐患。

随着软件需求变得越来越复杂,软件工程量急剧增加,软件维护难度越来越大,项目失败率越来越高,在这种软件危机的背景下,传统软件工程应该运而生。

“瀑布式”生命周期模型是传统软件工程的代表之一,它是软件危机爆发后出现的第一个生命周期模型,它提出了“分析  设计  编码  测试  维护”的开发模式,之后又有人在此基础上提出了快速原型法、螺旋模型、喷泉模型等。

“瀑布式”生命周期模型等出现后,软件工程出现了第二个发展方向,即PO(面向过程的开发或结构化方法)以及结构化的分析、设计和相应的测试方法,这种方法侧重与对软件开发过程中分析、设计的方法的研究。[1]

到了现代,面向对象的分析、设计方法(OOAOOD)开始成为主流。随之而来的是面向对象建模语言(以UML为代表)、软件复用、基于组件的软件开发等新的方法和领域。这些方法将软件的开发过程更加抽象化,使软件的开发过程更加贴近于实际。

2 云计算的概念和内涵

“云计算”听上去很高大上,然而,它的概念是什么呢?对于“云计算”专家给出的定义是:云计算是通过网络提供可伸缩的廉价的分布式计算能力”。首先谈一下我的理解,云计算就是将大量分散的数据资源、软件资源进行整合,通过规范化的平台为用户提供服务。举一个不太恰当的例子。

比如,我是一家航空公司,目前公司开发出了一种新的机型准备生产,然而,公司的生产能力有限不可能做到所有的飞机都由我一家公司生产。这时候我首先会将所有需要的零件编号,然后通知所有零件厂商,将需要的零件清单拿给他们,供应商从他们所拥有的零件中挑选出所有我需要的零件,将编号相同的零件归类并上报给我,之后,我会联系加工厂,为他们提供飞机图纸,于是加工厂就能将飞机零件组装成一个完整的飞机。与此同时,我只需为供应商更换零件清单,为加工厂提供不同的图纸,我就能生产其他型号的飞机。

如今互联网可以说无处不在,对于一个互联网公司你很难定义他的边界、他的服务范围到底是什么,互联网上的数据资源就如同“云”一样边界模糊、规模动态可伸缩,你很难弄清数据在哪,但它确实存在于某处。

这种资源池称为“云”,它通常是一些可以自我维护和管理的虚拟计算资源,例如一些大型服务器集群。用户无需担心“云计算”服务器如何运行,它能进行自我管理,用户只要申请某些需求,它就能自动提取相应的数据,支持各种应用程序的运转。

云计算之所以称为“云”还因为云计算的鼻祖之一Amazon公司将大家曾经称为网格计算的东西,取了一个新名称“弹性计算云”(Elastic Computing Cloud),并取得了商业上的成功。

云计算是一种商业计算模型,它是并行计算(Parallel Computing)、分布式计算(Distributed Computing)和网格计算(Grid Computing)的发展,或者说是这些计算科学概念的商业实现,云计算是虚拟化(Virtualization)、效用计算(Utility Computing)、将基础设施作为服务IaaS(Infrastructure as a Service)、将平台作为服务PaaS(Platform as a Service)和将软件作为服务SaaS(Software as a Service)等概念混合演进并跃升的结果。它将计算任务分布在大量计算机构成的资源池上,使用户能够按需获取计算力、存储空间和信息服务。[2]

 

 

1

 

上图是阿里云双十一的数据可视化,阿里通过将大数据做成可视化工具来为电商们提供服务。

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

3.1 软件架构的开放性

云计算作为一种新兴的商业模式,作为未来商业的潮流之一有诸多好处,但是如何让如此便捷的技术深入人们的生活呢?这就需要降低云计算的门槛,云计算降低门槛的方式之一就是架构的开放性,具体包括IaaS能力开放架构、PaaS能力开放架构、SaaS能力开放架构。IaaS开放架构主要是将存储能力开放,云计算基础架构中最核心的元素是分布式文件系统,在构建分布式存储系统时一般采用对象存储技术,这些对象一般是对外开放的,用户通过接口能够轻松访问数据。PaaS能力开放架构主要是将服务平台对外开放。服务平台采用虚拟化的业务云托管与部署,它具有灵活性、低成本的优势。平台构建好后将服务对外开放,对这些服务采取在线托管模式并为用户提供服务接口。SaaS能力开放架构允许用户开发基于大数据的应用,这不仅使用户分销了云计算平台,也能分销诸如移动能力、存储、建站、开发沙箱等附加功能。总之,软件架构的开放性使得云计算的成本降低,人们能方便的了解自己需要的信息,云计算成为人们生产生活中的重要工具。[3]

3.2 软件对象的多样性

在利用云计算的软件开发过程中一般采用面向对象的编程思想将已经封装好的模块进行组装,就好比之前的例子中提到的,我是飞机厂商,我想要组装一架飞机,这时我会按照图纸从零件的供应商那里调配所需的零件,这些零件都是封装好的,我并不需要了解零件生产的具体过程。在开发过程中采用面向对象的思想,这样做不仅提高了软件开发的安全性,减少了软件测试的成本,也极大程度上实现了程序的复用,提高了软件对象的多样性。

3.3 软件过程的动态性

在利用云计算进行软件开发的过程中你可以在任何一台电脑上登入使用云端服务,而一个朋友或同事也可以登入并和你一起在一样的文件上工作。就如同组装飞机一样,将一架飞机分成若干个部分,这些部分同时开工,一家加工厂可以组装飞机头部,而另一家组装机身,另一家组装机翼,都完成以后就形成了一架完整的飞机,在这个过程中不是按照瀑布模型那样环环相扣,而是多个线程同时进行。现在基于云计算的程序开发软件已经的得到了应用,例如Google推出的Google Docs是能够协同操作的一种办公室型态云计算服务。有些服务甚至还可以让人在全球不同的地点登入服务并同时在一样的文件上工作。

3.4 开发人员的大众化

利用云计算软件开发不再是一个封闭的、全局控制的流程,而是存在多个并发开发、自治开发的过程。在开发阶段需求分析部分将占很大的比重,总体设计架构可以选用已有的架构,详细的程序和功能开发也可以用已有的模块代替。在开发过程中用户和开发人员的界限不再分明,用户可以根据自己的需求制定自己需要的软件,软件的开发者和使用者可以是同一个人。

3.5 开发组织的社会化

由于云计算软件开发过程中用户能够面向需求开发,开发组织能够购买云计算服务,因此,开发组织无需购买永久性的软件使用权,只需在开发周期内租用相应服务以满足开发需求,这样不仅可以大大降低软件的开发费用,更重要的是提高了软件的复用性并且降低了软件测试的成本,这对于社会上的开发组织特别是中小企业来说,将大大降低在硬件设施和软件工具等方面的支出。

3.6 资源部署的虚拟化

云就是平台中对虚拟资源的管理主要是虚拟机资源的管理,考虑到虚拟机所处的不同状态,可以将对虚拟机的资源管理分为三种:创建虚拟机的资源管理、启动虚拟机的资源管理及迁移虚拟机的资源管理。创建虚拟机时,实际上只是完成虚拟机文件的创建,虚拟机所需要的CPU、内存等资源暂时还未分配;当创建共享类型的虚拟机时,云管理平台在分配资源时采用的是轮询方式,轮询从虚拟机服务器组中选择一台服务器来创建虚拟机。启动虚拟机时的资源管理策略目的是将虚拟机启动到合适的服务器上,以提高云计算平台资源池中资源的利用率;举例来说,如果正在做仿真实验的大量机器负载都不是很大,则可以将这些机器启动子一个服务器上,从而节约IT费用;当这些机器的工作负载比较大时,完全可以再将它们尽可能多地部署到多台服务器上,以实现负载均衡;这样的资源调度策略可以满足不同用户的资源调度需求。

4 参考资料

[1] 软件工程的发展历史 百度文库

[2] 云计算的概念和内涵  中国云计算网 2014-02-24

[3] 云计算的开放架构设计 百度文库