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

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

 

“云计算”这个词现在应当说很火,我们在作为用户在享受着各种云服务;提供云计算平台、设施、服务的公司也越来越多;而甚至在我国,云计算也被拉上了国家战略层面。而传统的软件工程在这样一个新技术的影响下势必会产生变化,同时也不可避免地要面临一些挑战。

 

首先来明确一下什么是云计算,维基百科上给的解释是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备(Cloud computing is a type of Internet-based computing that provides shared computer processing resources and data to computers and other devices on demand)。不过我觉得美国国家标准与技术研究院(NIST)的定义要更加准确,它定义云计算为一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。云计算的服务架构不同于一般企业按照 “应用―中间件/数据库―操作系统―硬件服务器”紧耦合模式部署的资源架构,由IaaS、PaaS和SaaS 构成。通过标准架构体系的中间件,屏蔽不同操作系统间的差异性,在虚拟化硬件和操作系统上提供可靠的稳定的业务保障。总的来说,我以为云计算代表了通过互联网作为商品提供的大规模的计算能力,数据存储,还有软件服务等等。而云计算带来的运算能力,存储能力的提升还有高度的互联网化,会给我们的软件开发,给传统的软件工程带来什么样的影响,就是本文要讨论的话题。

 

说完云计算,再来看看什么是软件工程。软件的发展大体上经历了程序、软件产品和软件服务3 个阶段。早期的计算机系统以硬件为主,在硬件上搭配规模不大的程序,程序开发的流程较为简单,开发效率依赖于程序员的个人才智。随着计算机性能的提升和应用的扩展,软件的比重不断提高。无论是从规模还是从复杂程度上,都超越了个人的设计开发能力。工程化的设计思想及其相关的技术方法逐渐开始在开发中显得愈加重要。1968 年“软件工程”的概念被首次提出。软件工程强调的可维护性和文档化以及对软件生命周期系统化的管理使软件成为一种产品。软件产品的出现使得软件与硬件分离,成为独立的研究体系。在软件开发方法上逐渐形成了分析、设计、编码、运行、维护的一般流程。软件涉及的关系主体方面也基本形成了软件开发商与用户的二元格局。在软件工程提出后的几十年间,开发方法和设计思想不断创新,但是这一基本流程和格局没有太大变化。所以我们知道“软件工程”的出现是为了解决“软件危机”(指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象),而上文提到云计算提供的种种变化可能某种程度上导致了所谓的“软件危机”,所以当云计算的概念被提出、重视、普及,我们传统的软件工程是一定会受到影响的。

 

我们都经历过一个**的课程叫做面向对象,这个课其实在后期给了我们一些传统软件工程的概念。而在云计算的模式下,软件工程在面向对象的基础上进一步抽象化,提升到面向服务的层次(也就是将业务流整体分成子业务流,对子业务流级别的模块进行组织设计,并最终形成软件系统整体)。面向服务的开发模式延伸出的云计算下的软件工程基本特性表现在:第一、构件的成熟度提高,软件的可复用程度得到提升,减少软件开发错误,提高软件的可信性。另一方面则可以缩短开发时间,提高开发的绩效。根据国内著名PaaS提供商800APP 提供的信息,云计算模式下开发时间可以缩减1/3~1/10。第二、开发者面向业务应用,需求工程成为重点。在PaaS 的平台中,开发者有可能写很少的代码甚至不需要代码,而只需按照业务流程对平台中提供的各类资源进行设计和组织即可。这种模式下,需求与开发具有了同等的语境,同时需求在软件工程中的地位也将更加重要。第三、云计算下的软件工程打破了软件开发商与用户的二元格局,第三方云计算中心的作用更加重要。云计算模式下的软件开发和运行环境基本上都是由云计算中心来架构的,这些资源按照开发者的要求进行配置。

 

从上面的分析中我们可以很容易地感受到云计算带给软件工程的便利,尤其是对于软件的开发者与测试者。这也很大程度的降低了软件工程的开发门槛。比如我们提到过的PaaS,在这个层次当中云计算平台提高了抽象程度,也在开发者一端省去了硬件设施架构、运行环境调试等工作,只需一个浏览器和一些简单的工具就可以实施开发,开发完成之后的测试以及运行和维护也全部由云计算中心负责。降低了编码量及难度,并且能让多种模块之间组合的更加完善。关于这一点,我曾经有幸去到一个做PaaS的公司叫做Anchora安尚云信。他们集成了不同的IaaS技术,并且为开发者提供平台及多种API等开发工具,并且同时也提供了经济、敏捷的部署和运维。所以举个例子,向我这样的一个没什么能力的学生,也可以通过云计算平台,开发和维护一个软件产品,也更容易去迅速找到一批的开发者参与到我的大规模的软件工程项目中来。

 

最后,不得不提到的是云计算影响下软件工程可能面临的问题。像已有的软件项目起代码迁移时需要的成本;还有更重要的一点,是在当下云计算技术并不十分完善的情况下,所面临的安全问题。在云计算的时代,一个云端服务器出现问题,就有可能会导致存储并且运行在这个平台上的大量数据和服务出现问题。像亚马逊的AWS据我所知在一年前就出现过大规模宕机的情况。而信息泄露的问题也是同理,自云计算技术普及以来,对于云平台的信息安全问题的讨论就一直存在。这也是云计算和云计算影响下的软件工程都需要面对并解决的问题。

 

总而言之,软件工程软在云计算的影响下提升了软件架构的开放性、软件对象的多样性、软件过程的动态性,也实现了开发组织的社会化、开发人员的大众化、资源部署的虚拟化。当然虽然是存在了一些问题,其是否能破解所谓的“软件危机”也并不可知。但不可否认的是云计算在提高效率、降低成本等方面都发挥了作用,在目前以及将来都会对软件开发产生深远且积极的影响。

 

参考文献:

《wikipedia》-cloud computing词条

https://en.wikipedia.org/wiki/Cloud_computing

《论云计算对软件工程的影响》 史杰,解继丽,史少华  《昆明学院学报》, 2011, 33(6):67-68

《云计算现状与发展趋势分析》 胡慧,王辉http://www.rjdk.org/qikan/manage/wenzhang/2009-09-001.pdf

报道《李未院士:云计算挑战传统软件工程理论》http://cio.it168.com/a2012/0524/1352/000001352416.shtml

《浅谈云计算时代的软件开发技术》

http://wenku.baidu.com/link?url=Knchb3CqJsr6Wfi6gd1xRw3w0WO7ES7SaX2KEOwxZ4XPv8KfSPVm3mYyFPi1YEbS_GNT_O9hvPwk-cCIA3yLO5Ymgv0XZ9iBwUrVkJ73mau

posted @ 2016-10-23 20:09  JJFlying  阅读(242)  评论(0编辑  收藏  举报