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

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

 

云计算简介

 

wiki对云计算的定义与介绍是:云端运算,是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。云计算描述了一种基于互联网的新的IT服务增加、使用和交付模式。

所以我们大概可以提取出关于云计算的这么几个关键词:互联网、共享资源、终端、服务模式。所以云计算做的事应该就是——有人(资源拥有者)通过互联网以某种模式给大家(终端)提供服务。

但仅靠这几个关键字不足以了解云计算,我们还需要知道它的更多细节,例如可以通过云计算共享哪些资源、有哪些服务模式?对于服务模式,美国国家标准和技术研究院的云端运算定义中明确了三种服务模式:

软体即服务SaaS):消费者使用应用程序,但并不掌控作业系统、硬体或运作的网络基础架构。

平台即服务PaaS):消费者使用主机操作应用程序。消费者掌控运作应用程式的环境(也拥有主机部分掌控权),但并不掌控作业系统、硬体或运作的网络基础架构。平台通常是应用程式基础架构。

基础设施即服务IaaS):消费者使用“基础运算资源”,如处理能力、储存空间、网络元件或中介软体。消费者能掌控作业系统、储存空间、已部署的应用程式及网络元件(如防火墙、负载平衡器等),但并不掌控云端基础架构。

由此也可知道共享的资源主要是硬件和软件资源,硬件方面可以提供有众多计算节点组成的足以媲美超级计算机的并行计算系统,软件方面可以提供多样的开发环境与应用软件。所以有人这样比喻云计算:终端就是家里的水龙头,当你要水时,只需要打开水龙头而不需要建一个自来水厂。对于你来说,只要交钱,除了需要拧开水龙头,其他的就不必关心,自然有人为你做好,这一部分就是“云”。

 

传统软件工程

 

软件工程就是以系统性的、规范化的、可定量的过程化方法去开发和维护软件,即将工程化方法应用与软件。根据不同时期的需要,将工程划分为前后几个步骤,一般包含以下几个阶段:可行性研究与计划、需求分析、概要设计、详细设计、代码实现、组装测试、确认测试、使用维护。在每一步中都有详尽的文档说明,例如:可行性研究报告、项目开发计划、软件需求说明书、用户手册、操作手册、测试分析报告、项目开发总结报告等。这些文档既是对开发过程的详细说明,又可在发生错误时快速定位。通过这样层层推进,工程的开发过程非常条理清晰,开发出来的产品也比较稳定。总体来说,在传统软件工程中,每一步都中规中矩,团队分工明确,按部就班地完成既定任务。

 

云计算的软件开发方式

 

要探讨云计算对传统软件工程的影响,我认为得了解在云计算条件下软件工程应该怎样进行。

华为软件云Devcloud就是一个云端开发平台,它有这样一段介绍:云计算、大数据、移动应用等新技术不断发展,驱动软件生产力变革。现在有很多人选择在云端开发,多语言混合编程成为常态,软件架构要求更灵活,向基于容器的微服务化架构演进。开放的工具平台和完整的研发生态越来越重要……Devcloud融合敏捷、精益、DevOps等先进研发理念,打造开放完整的云端开发平台,打造四大核心竞争力:敏捷、安全、社交、智能。

 

上图是华为软件云的网站界面,可以看到他提供项目管理、配置管理、代码检查、编译构建、测试管理、发布管理这些服务。

Coding.net是另一个另一个云端软件开发平台,它对云端开发的定义更加清晰与独特。Coding是一种P2D(Project to Developer)模式,即:有需求者通过Coding平台发布项目开发任务,Coding通过大数据分析匹配出一波程序员,供发布者挑选其一或其数,被“淘”的程序员将在Coding平台完成开发任务,并最终获得赏金报酬。这看起来并很不新奇,因为已经有猪八戒网等威客网早已在做类似发布,甚至淘宝网上也有这样的服务。但Coding的独特之处在于它利用大数据分析适合工程开发的程序员,此外它还提供一整套云端开发工具,开发人员只需要一个浏览器就可以利用WebIDE进行开发,完全不必在本地进行开发环境配置等工作,还可以在上面发布信息互相交流,可以进行进度监控,代码托管、审查、优化、运行等一整套开发过程。下图是Coding.net主页:

 

综和以上两个例子,可以看到现在的云端开发提供的主要是PaaS服务,即将软件开发工具搬到云端,让开发者通过互联网进行开发,这让软件开发在工具层面变得十分便捷。但开发基本还是遵循传统软件工程过程,并且融合了敏捷开发等软件开发思想。

 

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

 

接下来结合云计算和云端软件开发特点从以下几方面总结一下云计算对传统软件工程的影响。

软件架构的开放性

软件架构是一个整体概念,是软件系统的草图,包括硬件、操作系统、网络环境、从立项到维护之间的所有过程(需求、设计、编码、部署、维护、功能迭代等),它的责任是保护软件的可用性、可扩展性,可伸缩性,安全等等一系列指标。

而开放的软件架构需要有这样几个特点:1、可移植性。各种计算机应用系统可在具有开放结构特性的各种计算机系统间进行移植,不论这些计算机是否同种型号、同种机型。2、可互操作性。如计算机网络中的各结点机都具有开放结构的特性,则该网上各结点机间可相互操作和资源共享,不论各结点机是否同种型号、同种机型。3、可剪裁性。如某个计算机系统是具有开放结构特性的,则在该系统的低档机上运行的应用系统应能在高档机上运行,原在高档机上运行的应用系统经剪裁后也可在低档机上运行。4、易获得性。在具有开放结构特性的机器上所运行的软件环境易于从多方获得,不受某个来源所控制。

在云计算环境下,硬件、数据规模跟过去都有很大的不同,云计算可调用的的资源丰富,符合易获得性,而其本身又具有计算虚拟性,服务架构由IaaS,PaaS和SaaS 构成,可以通过标准架构体系的中间件,屏蔽不同操作系统间的差异性,在虚拟化硬件和操作系统上提供可靠的稳定的业务保障,符合可移植性、可裁剪性与可互操作性,所以可以很好的满足软件架构的开放性。

此外,当软件需要面对巨大的大数据时,开发思维应该更加开阔,比如说现在的一些用户量巨大的社交软件,在设计时必须考虑如何对数据进行处理,这是十分困难的,但是可以利用用户的一些力量,比如让用户在上传图片是提前进行分类就可以在后续存储或处理时省去很大力气。

软件对象的多样性

面向对象软件工程方法的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,将问题分解抽象成一个个易于理解的对象,因此,这样的程序易于理解和维护。在云计算的模式下,软件工程在面向对象的基础上进一步抽象化,提升到面向服务的层次。面向服务也就是将业务流整体分成子业务流,对子业务流级别的模块进行组织设计,并最终形成软件系统整体。面向服务使软件在IT系统结构层次结构系统中更加接近应用。这样,就可以利用云平台中成熟的可重用模块对软件进行组装即可满足客户需求。

软件过程的动态性

随着需求在软件开发中的比重增大,需求调整会更多地影响软件开发,软件的动态调整也会越来越频繁,但是由于软件开发的模块化,满足不同的需求会更加简单方便。

开发组织的社会化与开发人员的大众化

随着云计算的发展,网络会慢慢地从通信工具演变为计算中心,随着资源的大众化,软件开发会越来越简单,使用者也会成为设计者、开发者、维护者,软件不再是一部分人的专利。开发组织也不会仅限于相对专业的固定开发团队,在网络上可以方便地寻找开发伙伴。当然,对于一些基本规范、框架设计等工作,仍然需要专业的人士处理,但是云平台促成的大众化软件工程活动仍是必然。

资源部署的虚拟化

对于云计算的资源部署,可以以Coding进行分析,对于开发者,所需要的仅仅是一个浏览器,硬件和软件资源都由Coding提供。对于客户的任务,服务系统将其分拆成无数个较小的子程序,再由多部伺服器所组成的庞大系统搜寻、运算分析之后将处理结果回传给使用者。所有资源都在虚拟的云端。

 

参考文献

[1]https://zh.wikipedia.org/wiki/%E9%9B%B2%E7%AB%AF%E9%81%8B%E7%AE%97

[2]浅谈云计算时代的软件开发技术

[3]http://www.csdn.net/article/a/2012-05-24/2805927

[4]面向对象软件工程方法的特点及发展.燕玉林

[5]http://developer.51cto.com/art/201506/480286.htm

[6]http://www.hwclouds.com/devcloud/

posted @ 2016-10-20 18:26  14061015  阅读(212)  评论(0编辑  收藏  举报