随着互联网技术的飞速发展和普及,网络和计算基础设施的大量建设,分布式计算、集群管理、海量数据存储等相关理论和技术的成熟,从2006年概念的提出到现在,云计算仅用十年时间就以爆炸式地发展,广泛实现和应用于计算机科学和信息技术产业的诸多领域。其中,就包括软件开发行业的中流砥柱——软件工程。云计算对于计算和存储的崭新模式和强大能力给软件工程构建了不同以往的开发环境,改善和提高了传统软件工程的许多方法和性能,甚至为传统软件工程的一些难题提出了解决方案或者可能性,也会带来新的潜在的问题。下面,我们就来具体看一看云计算对传统软件工程的影响。

       首先,我们需要对云计算有一定程度的了解。云是对互联网的形象比喻,也指可以自我维护和管理的虚拟计算资源。融合并发展了分布式计算、并行计算、网格计算、虚拟化、效用计算、网络存储、负载均衡、热备份冗余等计算机和网络技术[1]的云计算,是一种基于网络的服务。云计算包括IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)3个层次的服务。3个层次中IaaS通过虚拟化和智能化技术自动为用户分配计算和存储资源,为用户提供基本的计算和存储能力;PaaS为用户提供了软件开发环境,包括相应的服务器资源和大量的高集成度、可复用、可共享的中间构件;SaaS将软件实例统一部署和运行在应用服务提供商的服务器上,通过网络向用户直接提供服务。云计算具有超大规模的服务器群,拥有前所未有的计算和储存能力,这种能力近似线性地正比于服务器规模,非常易于扩展。云计算还拥有前所未有的性价比,构成云的节点往往是成本低廉的设备,集中管理、互联共享、按需分配的模式大大提高了资源使用率。对于用户来说,使用云计算是简单、便捷的,只需网络和能够连入网络的任何终端,即可使用云计算提供的服务。

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

图一

       云计算下,软件开发的整体环境有了极大的、正向的改变。因此,以最大程度优化软件开发过程、提高软件产品质量为目标的软件工程在诸多方面自然也需要随之改变,具体如下。

  (1)软件复用程度得到提高。PaaS提供了大量的高开放性和成熟度的程序构件,编程人员利用已有构件和代码块编写软件,新的软件又将成为后续软件开发所能利用的构件。如此,构件成熟度不断提高,可以在更高抽象层次上实现大粒度的软件复用。

  (2)软件工程面向服务,开发人员面向业务应用,需求工程成为重点。云计算下,软件工程在面向对象的基础上进一步抽象化,提升到面向服务的层次[2]开发人员可能只需编写很少的代码,主要根据软件的业务逻辑对PaaS平台提供的各类资源进行设计和组织。这种模式下,需求和开发具有了相同的语义。开发人员关注的焦点不再是需求和设计的协调,而是如何覆盖用户需求和提供满足需求的业务应用,需求分析和功能模型将占据软件开发工作量的较大比例。

  (3)软件工程成本降低。云计算本身具有价格低廉、按需计费的特点。使用云计算对环境的要求也很低,网络和任何能够连入网络的终端即可。开发人员无需准备硬件设备,云计算能够提供性能强大的虚拟设备;甚至可以忽略空间限制,完全在线开发,省去了空间成本;云计算还可以对项目进行管理,大大减少了开发和维护的成本。

  (4)开发流程更加灵活。在一个项目中,软件开发不再是一个封闭的、全局控制的流程,而是存在多个并发和自治的、自底向上和自顶向下有机集成的流程的综合[3]

  (5)软件升级成为常态,生命周期模型不同以往。云计算环境下,软件的开发速率提升,维护成本降低,与用户的交互更加紧密。软件部署后,交付的往往是中间版。开发人员根据软件运行情况和用户反馈,不断升级软件,敏捷开发思想被提倡。软件开发的生命周期模型以并发模型、多重螺旋模型为主流,传统软件工程的瀑布模型、迭代模型的使用越来越少,自主性更高,也更难以控制。

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

图二

  (6)软件体系结构是完全分布式的。云计算极大地降低了软件子结构之间的耦合程度,客户端,服务端,管理端,开发端,测试端等以完全并发的、独立的方式部署在不同服务器群上,分别由多方管理与合作。各个开发商可能只负责软件结构的一两个子部分,涉及面小了,研发质量和升级速度就会随之提高。

  (7)软件工程的工程业务和商业价值的格局成三足鼎立之势。云计算打破了传统软件工程中软件开发商与用户的二元关系格局。取而代之的是云计算中心、软件开发商与用户的三元关系格局。云计算中心根据开发商的要求配置和架构了软件开发、测试、运行和维护的虚拟环境和硬件环境,用户也通过云计算中心使用软件服务。云计算中心将开发者与用户联系起来,面对开发者是工具箱,面对用户又是百宝箱,对两方都大有裨益。如此重要的地位使其具有了极高的商业价值,许多信息技术公司,如Google、IBM等,都已经构建了或私用或对外服务的大型云计算中心。

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

图三

  (8)云计算为软件危机提供了解决的思路和可能性。绩效与可靠的矛盾关系一直是软件危机的根源所在,云计算在这两方面同时具有的优势无疑为缓解软件危机带来了希望[2]云计算构建了虚拟、智能、强大的计算、存储、开发、测试的平台,又提倡软件复用的理念,明显提高了开发和测试的速度。根据国内著名PaaS提供商800APP提供的信息,云计算模式下开发时间可以缩 减1 /3~1 /10[4]。随着软件复用程度的提高,软件的可靠性又可以得到有效提升。软件结构各个部分的分治管理,又提高了修改和维护软件的力度,使软件始终保持最新、最佳的状态,提高了软件的质量。开发的绩效和可靠性以共同发展。

  (9)开发商开发、用户使用依靠云计算为载体的软件产品成为趋势。云计算为载体的软件产品对用户来说是透明的,用户看到的只有服务,不需要看到软件本身,这对于用户使用来说是极方便的、极友好的。用户愿意使用,就会有更多开发商愿意开发。

  云计算对软件工程及其相关行业来说,既是机遇,也是挑战。云计算的推广需要大量的资金和技术的支持。对于大型的软件开发企业来讲,可以通过构建企业私有云来完成这一嬗变;对于众多的中小企业来讲,通常需要依靠公共云。将用户的大量数据存储在云上,信息安全又是一个大问题,很难保证企业或者黑客不会利用这些信息威胁用户,分布式存储给信息泄露带来了更大的可能性。如何提高云计算的安全性,是云计算研究的一个亟待解决的问题。

  虽然云计算已经应用广泛,但它毕竟是一门新技术,需要不断发展和调整。即使有争议,云计算对于软件工程无疑是利大于弊的。当前来说,云计算影响和改变了传统软件工程的内在结构和外在表现;放眼未来,云计算是软件工程突破瓶颈的关键之匙,会带领软件工程进入新的阶段,进入云计算式软件工程的阶段。用一句流行语结束这篇博文:云计算式软件工程,我看行。

 

参考文献:

[1] 《云计算的概念和内涵》,2014-02-24。

[2] 史杰,解继丽,史少华,《论云计算对软件工程的影响》,联创亚信科技有限公司,天津,30020。

[3] 张勇,《云计算环境下软件工程模式初探》,北方自动控制技术研究所,太原,030006。

[4] 中国云计算服务网,800APP平台[EB/OL],[2011-09-10]。