如今,云这种概念已经越来越深入人心,似乎云已经成了我们生活的一部分。那么,这种近几年兴起的技术,是否对我们传统的一些行业有所影响。
首先了解一下软件工程的概念。软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。工程是科学和数学的某种应用,通过这一应用,使自然界的物质和能源的特性能够通过各种结构、机器、产品、系统和过程,是以最短的时间和精而少的人力做出高效、可靠且对人类有用的东西。而软件工程作为一种工程,则是应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程。
云计算,是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。云计算描述了一种基于互联网的新的IT服务增加、使用和交付模式。它是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。用最简单的一句话来解释就是“客户端将运算任务交给服务器(云端),服务器运算完成之后,再将运算结果交还给客户端”。
那么,云计算到底对传统软件工程有什么影响呢?或者说,将云计算与软件工程相结合,会有什么优势。根据所查的资料来看,有如下几个优势:
1、软件架构的开放性
云计算是分布式处理,并行处理,网格计算的发展,是一个具有连续性的软件开发的分布式模型,这种开放式的软件结构给了我们软件开发者一个崭新的多元软件开发环境。云计算提供了方便,对应需求的网络接口去共享一个可操作的资源池。云计算让消费者(用户或程序),一些开发者打开了未来网络以一种超级计算机的姿态出现,依赖于云计算的特点,比如资源池和虚拟化,按需服务和随处可取的接口。传统的数据中心模式的软件开发会给公司带来很多麻烦,不光是落后的栈式软件环境在更新一个软件库的时候就会导致整个系统的崩溃,这种复杂的结构也让很多开发模式只可以应用在拥有大量人力的大企业,小型企业难以保证数据中心的稳定性使得很多新公司难以展开进一步扩张。云计算改变了这个局势,不再受限于硬件环境的严格要求,企业可以自己使用网络上的资源,环境由资源提供者来自行解决,将生产和生产环境的难题剥离,塑造一个崭新的行业和技术。
2、软件对象的多样性
简而言之,就是可以将云计算应用于许多不同类型的软件。它能够使合作研究开发,电子商务,健康护理,网格应用,企业计算设施,军用应用和国家网络安全这样的大型分布式系统应用的快速发展成为可能。云计算更多的是一种服务,对于各个云计算服务公司来说,服务得更好,公司才能生存。这也就保证了云端资源的质量。所以对于软件开发者,完全不用担心用于软件开发的构件质量问题。面对一个需求,软件开发者可以在云端茫茫的构件中选择能更好地满足需求的构件。在这样的条件下,就可以保证软件对象的多样性。
3、软件过程的动态性
动态基础设施(Dynamic infrastructure)可以通过提供基础商业连续性和高可用性的需求加速了云计算和网格计算。以前,都是通过个人电脑进行管理。而这种技术,软件开发所需的构件和资源都在云端,软件开发的过程变得更加灵活,对于一个应用,软件部署、运行管理、维护和开发过程都是并发的,因此也就可能会出现这种情况:第一次软件部署可能只是一个很简单的功能,由于云计算大大降低了软件构件之间的耦合程度,在软件开发各个过程并发进行的情况下,软件可能在很短的时间只能就可以升级到可以实现很复杂的功能,而且这个发展方向的容错性很强。
4、开发组织的社会化
我们不再局限于传统开发几个人自己做自己的,再用移动硬盘互相拷贝的方式,有了云服务和云计算,我们可以利用云来分享,同样的,你的同伴也不再局限于你认识的人,感兴趣的人自然会投入进你的项目。基于云计算的软件开发让用户放弃了对应用程序的部分控制权和自治权,将这部分控制权和自治权交由云平台运营商来掌握,也就是说软件的组织管理不再仅仅是开发者的任务了。另一方面,对于一个开源项目,得益于云端资源的共享性,对世界各地的开发者来说,一个项目的开发过程是透明的,因此一个项目可以有来自不同区域的开发者来参与开发,可能这只是出于对技术的热爱,而不是对利益的追求。
5、开发人员的大众化
云的普及使开发者不再只是有工作的技术人员,业余爱好者或者其他行业的从业人员也可以参与自己感兴趣的项目的开发工作之中。最著名的例子就是github,在一个软件工程的实施过程中,不仅同组内的人员可以随时更新其他人负责部分的代码,如果这个项目很有价值,还会吸引各路大牛的挑错和指导。一些初学者的门槛也变低了,可以通过阅读其他人的代码来学习技巧,开发人员逐渐的平民化,大众化。
6、资源部署的虚拟化
现如今的软件开发,资源一般有人力资源、软件资源和硬件资源,在云资源高度虚拟化的情况下,通过云计算的三种模式IaaS(基础设施即服务)、PaaS(平台即服务)和SaaS(软件即服务),软件资源和硬件资源都可以通过云端轻松获得,对于软件开发者来说,剩下要考虑的资源只剩下人力资源。虽然虚拟化和云计算并非是捆绑技术,但二者可以通过优势互补为用户提供更优质的服务。云计算方案使用虚拟化技术使整个IT基础设施的 资源部署更灵活。反过来,虚拟化方案也可以引入云计算的理念,为用户提供按需使用的资源和服务。在一些特定业务中,云计算和虚拟化是分不开的,只有同时应 用两项技术,服务才能顺利开展。
总的来说,云计算服务器为开发人员提供了更加宽广的开发平台,在这之上开发人员可以更加高效地构建应用,而传统的软件工程行业则会受到诸多的限制使得开发过程没有现在这样高效便捷。云计算应用于软件工程,可以使得我们开发人员可以专注于业务的实现而从复杂的运行环境中抽身出来,使得软件变得更加可靠。
[1] wiki百科,云计算词条
[2]《云计算之道》 邹恒明著 P44-P45
[3] 张勇. 云计算环境下软件工程模式初探[A]. 太原: 北方自动控制技术研究所,2009