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

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

  回顾软件技术发展的历史,最明显的趋势是软件变得越来越复杂,计算越来越繁琐,存储和处理的信息越来越多,软件危机就是用户对于软件功能的要求太多,以至于超过了软件技术能够满足的程度,从而使得软件产品在原有基础上不断改动增需,软件变得越来越复杂,以至于开发组织越来越难。从最初的机器指令开始发展到面向对象再到如今新兴的云计算,目的都是让软件开发变得越来越简单,越来越能迎合用户的要求。

  要说云计算对软件工程的影响,首先来了解了解云计算。云计算,用最简单的一句话来解释就是“客户端将运算任务交给服务器(云端),服务器运算完成之后,再将运算结果交还给客户端”。具体说,就是客户端(这里的客户端可以是个人也可以是企业)在某种情况下,本地的资源不足以支持要进行的运算,就运用线上已有的成熟的资源和数据来为自己完成自己的需求。这样的模式有三个好处,第一,由于不受本地资源的限制,客户端可以有更广阔的资源库,可以说享有现有的所有种类的资源。第二,对于做云计算的企业来说伸缩性更好,如果市场需求大则投入更多,反之减少投入。第三,pay as you go,也就是你取多少付多少,再也不用想为了一个简简单单的事情而专门买一个服务器。这里对云计算也就不再做深究,理解云计算的基本原理和特征即可。

  云计算,与其说是一项技术,不如说是一种服务,就像IT界的自来水公司一样,为来自四面八方的运用提供自己能提供的服务,对于传统软件工程也是如此,云可以为传统软件工程提供更加广泛的资源。云计算对软件工程的具体影响如下。

  1.软件体系结构化

  与传统的软件工程相比,基于云计算的软件工程的体系结构变得更加构件化以及开放性更大。在软件即服务(SaaS)模式下,云计算抽象了传统开发和集成中的低端任务,提供了标准化的、即装即用的解决方案。在云端,我们可以找到很多构件作为我们要开发的软件的一部分,而这些构件会在不断的使用中改进,变得越来越成熟。同时,新开发出的软件可以作为以后要开发的更加复杂的软件的构件。这样,软件危机可以在一定程度上得到缓解。在这种软件开发模式下,软件的体系结构基本上是完全处于分布式的,一个软件由客户端、服务端、管理端、开发端、测试端等各个不同的构件有机结合,也就是说,不同的软件完全可能享有共同的构件,这也使得应用之间没有了严格的物理边界。

  2.软件更具多样性

  前文中已经说过,云计算更多的是一种服务,对于各个云计算服务公司来说,服务得更好,公司才能生存。这也就保证了云端资源的质量。所以对于软件开发者,完全不用担心用于软件开发的构件质量问题。面对一个需求,软件开发者可以在云端茫茫的构件中选择能更好地满足需求的构件。在这样的条件下,就可以保证软件对象的多样性。

  3.软件动态开发

  与传统软件工程相比,基于云计算的软件工程不再是瀑布模型的,并发模型、多重螺旋模型将成为主流。在软件部署之后,每个阶段交付的都是中间版本,软件升级会变得越来越频繁。随之而来的,是软件开发过程的高度并发状态和高度动态性。由于软件开发所需的构件和资源都在云端,软件开发的过程变得更加灵活,对于一个应用,软件部署、运行管理、维护和开发过程都是并发的,因此也就可能会出现这种情况:第一次软件部署可能只是一个很简单的功能,由于云计算大大降低了软件构件之间的耦合程度,在软件开发各个过程并发进行的情况下,软件可能在很短的时间只能就可以升级到可以实现很复杂的功能,而且这个发展方向的容错性很强。

  4.更多人参与开发

  微软公司《云应用开发》一书的前言中写到:“用户只需要在每个记账周期内致富自己在该周期内所使用的IT资源所产生的费用,云计算平台的运营商则负责管理和维护整个IT架构,这样,用户就可以集中所有经历,利用自己对核心领域专业知识的掌握来构建和布置自己的应用程序”。可以看到,基于云计算的软件开发让用户放弃了对应用程序的部分控制权和自治权,将这部分控制权和自治权交由云平台运营商来掌握,也就是说软件的组织管理不再仅仅是开发者的任务了。另一方面,对于一个开源项目,得益于云端资源的共享性,对世界各地的开发者来说,一个项目的开发过程是透明的,因此一个项目可以有来自不同区域的开发者来参与开发,可能这只是出于对技术的热爱,而不是对利益的追求。

  5.软件开发更加简单

  在传统的软件开发过程中,程序员的编程能力极为重要,只有很好的编程能力才能对不同需求提出解决方案。但在基于云计算的软件开发中,几乎所有解决方案都可以在云端找到,因此编程能力似乎显得不是那么重要了,而更重要的是如何来更好的构建和布置自己所要开发的应用程序。用户、开发人员之间不再有明确的角色划分,在一定情况下,软件开发者、服务提供者和软件使用者可以是同一个人,而软件开发工具由云计算服务商提供,软件开发者只需要在开发周期内向服务商支付一定的软件服务费用即可。在这样的大环境下,人人都可以是开发人员。

  6.资源虚拟化

  Wiki对云计算的定义是:云计算是一种通过internet以服务的方式提供动态可伸缩的虚拟化资源的计算模式。可以看到,计算资源虚拟化是云计算技术的核心,通过虚拟化技术使得上层的软件应用和底层的软件实现分离,由于资源都在云端,用户可以随时随地访问这些云端资源。现如今的软件开发,资源一般有人力资源、软件资源和硬件资源,在云资源高度虚拟化的情况下,通过云计算的三种模式IaaS(基础设施即服务)、PaaS(平台即服务)和SaaS(软件即服务),软件资源和硬件资源都可以通过云端轻松获得,对于软件开发者来说,剩下要考虑的资源只剩下人力资源。

  当前在云计算越来越普及的大环境下,软件开发模式必然要做出相应的改变,这种改变很可能会大大缓解软件危机,然而并不能彻底杜绝软件危机,当然完全解决软件危机也是不大可能的。但可以肯定的是,随着云计算的发展,我相信软件开发会进入一个全新的时代。

 

参考文献:

[1] wiki百科,云计算词条

[1]《云计算之道》 邹恒明著 P44-P45

[2] [2] 张勇. 云计算环境下软件工程模式初探[A]. 太原: 北方自动控制技术研究所,2009

[3] 《物联网与智慧农业》-王玉洁著  P38-P39

posted @ 2016-10-18 14:45  cybin  阅读(723)  评论(0编辑  收藏  举报