你的位置:首页 > ASP.net教程

[ASP.net教程]云计算对传统软件工程的影响



  既然我们要讨论这个问题,那就先要明确两个概念“云计算”,“传统软件工程”和一个“影响作用”。
首先是“传统软件工程”,通过查阅资料,对传统软件工程的基本印象如下:

  传统软件工程采用的一是结构化泛型,基本阶段按顺序如下:需求阶段、规格说明阶段、设计阶段、实现阶段、集成阶段、维护阶段、退役等,这是一种适用于代码量适中的传统软件开发方式。与其相对的是面向对象的软件工程方法,相比于前者,它解决了结构化方法在软件规模越变越大时遭遇的维护困难缺陷,并提高了软件的复用性。


好,差不多明确了传统软件工程之后,接下来的重点就要面对“云计算”这个新概念了:

  “云计算是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。”

然后云计算当前的定义也多到不胜枚举,其中广泛为人接受的一种是美国国家标准与技术研究院(NIST)定义:

  “云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。”

这些定义无疑是全面的、明确的,然而如果要为初次接触云计算的人(比如笔者)所理解的话,比较理想的定义就像这样:

  假设我是一个准地主,我有自己的私有土地,土地需要耕种,我需要雇佣一些奴隶来干活,正常情况下,一个土豪地主是买好多奴隶,一直为自己工作,那么这些奴隶就是该地主的人力资源,然而我是准地主,我土地并不是那么多,我只是在收获时节缺乏劳动力,那么我就不能再购买奴隶了,不然平时还得管吃管住,好了,那我怎么办呢?假设同村还有个大土豪地主王老五,他有很多个奴隶(多的不行),那么我就可以和老王商量商量:“哎,能不能在这两天农忙的时候借我些苦力啊,我这忙不过来啊,你放心好了,忙完付给你钱!”,然后老王爽快的答应了。这其中,奴隶是地主的私人资源,我和老王的人际关系就是可交互的网络访问,这些计算资源,哦不,劳力资源是可以被快速提供的(找个主管领过来就行了),投入很少的管理工作与服务商进行很少交互(我假设这群苦力有个头头,我跟他说你把你这班人管好,我中午给你加鸡腿或者我直接告诉老王,您把您的人调教好,下次我表哥托人带的腊肉一定给您送过来),这样这个过程模式就是所谓的云计算(云苦力)了。

让我们再回过头来审视一下前面的定义,是不是好像有点感觉了?接下来我们继续从各个方面开始讨论“云计算”带给传统软件工程的变革和影响。

  • 软件架构的开放性

  既然我们已经用上了“云计算”,那么相比于以前“内部软件开发小组”式的传统软件工程,软件的开放性得到了前所未有的提高,这样软件构件的复用性也随之提高,成熟的体系,设计构件以及代码,在分布式的计算模式下,可以被不同的“云下”开发者所使用,甚至是不同的软件开发团队之间。继续借用前面的例子,我临时借用的奴隶本来就具有成熟的耕作技术,我不必再花费额外的精力去教这些人如何耕作,或者是这个奴隶这次在我这里干活学会了如何护养花园,那么下次别的准地主向王老五租用劳力时,也不必再去教花园护养。

  • 软件对象多样性

  上面提到面向对象软件工程方法,其中的对象是一个抽象的概念,结构化范型中数据和方法是独立开来的,而在面向对象方法中,它将把数据和方法结合起来,封装在一起,所以从一开始人们在分析阶段就可以将对象提取出来,在设计阶段进行对比,从而进行程序实现,它的阶段之间的变化比结构化设计要平缓,从而减少了错误的数量。通俗的讲,比如我还是那个准地主,我想扩大一下家族产业,我要养猪,从结构化的视角来看,首先需求和目标是什么?我要养猪。好开始设计,我要在哪养,和谁养,养什么猪,怎么养等,设计完毕动手吧。而面向对象不同,在分析阶段它需要进行对象提取,先建立一个养猪事业的对象,资源需要有什么?种猪,技术,设备,市场。方法呢?构造方法:种猪引进,从哪引、引哪种、引多少…… 培养方法:……等等。然后开始实现。返回来看,结构化与面向对象相比之下,阶段之间的跳跃性比较大,容易偏离或者错误。而且对象是将方法数据封装在一起,更适合成熟构件的设计,这将更能增加构件的复用性,比如我把养猪事业分成构件,可以出这么几本书《种猪选择指南》《养猪的关键技术》《如何把握猪肉市场》……等等,这样其他人可以复用前人已有的经验,减少时间花费。

  • 软件过程的动态性

  一个软件团队在开发的过程中,项目所需的资源,比如开发人员,设备,数据等都是动态变化的,那么在“云计算”中,这种动态性更为显著,因为系统是分布式的,对于资源的控制要比传统方式上更为复杂一些,首先是同步问题,并行性固然是一个优点,而相对而言的同步问题也需要投入更多的精力。就好比我在大山里钻出一个隧道,如果从一头开始打,那么我需要勘测好路线一直打就好,而如果从两头同时前进,那么对准确度的要求就特别高,而在软件项目中,往往不止从两头开始。另一方面是人员资源的流动,通常说一个程序员走了,需要两个程序员去顶替他的位置,而在已经大众化的云计算中,人员的流动可能比较频繁,因此需要利用网络交互,降低学习的门槛,让大家快速熟悉起项目来。

  • 开发组织的社会化

  你这个准地主带着一群劳力划了一块地皮说,你要在这建一个堡垒,以防附近山上的强盗土匪劫掠财物,有哪位地主参与吗,各位地主王老五,刘老六等人闻讯也带了一拨人加入,结果越干越大,附近十里八乡的乡绅土豪都来插一脚,人际关系网愈来愈大,最后把附近山上的强盗都气跑了。在云计算模式里,同样原来的单个团队,总体控制的形式已经不适用了,在各个不同的组织合作下,整个工程的向前发展是并行性的,社会上任何一个团队都能加入合作,这就是开发组织的社会化。

  • 开发人员的大众化

  假设你是地主家的主管,为了地主家族的发展和自己的未来,你提出需要承包一个超大块的土地,你申请地主说,我要一千个奴隶,地主一定劈头盖脸训斥你一顿:这么多人住哪吃哪,吃住都把我弄穷了。这可怎么办呢,你脑瓜一拍,这不是有乡里的村民吗,只要你付给村民一定的工钱作为劳务,白天他们在地里干活晚上回自己家睡觉这不是一举两得吗,所以本来对于地主来说可以作为劳动力只有归属于自己的奴隶,这下劳力大众化了,既解决的问题,又减轻了人员集中的负担,只有有序的管理他们,分配好任务,目的就达到了。开发中呢,因为云计算网络访问,所以可以有更多开发人员远程参与进来,大家坐在自己家里就把活干了,领导不愁提供吃住,工作者也省的两头跑了。

  • 资源部署的虚拟化

  什么是资源部署的虚拟化呢,在云计算的定义里,我们提到它提供了可配置的计算资源共享池,而描述这种共享资源就需要用到虚拟化的计量方式,如果你需要跑一个程序计算某个东西,需要用到远程的CPU资源,假设我们用一台主机或者一个核来描述,可能对大型计算复杂的任务有用,如果是一个小型任务,分配给他一个主机,可能有剩余的计算资源,本着资源利用率最大化和节省预算的原则,我们是能用多少买多少,所以我可以用另外的衡量方式,比如按小时计量工作量,这样对远程来说,可能并不知道自己正在使用的计算资源在现实中是几个主机几个CPU,但工作量已经被清楚地表示了出来。因此,对于“云计算”,首先是计算资源的虚拟化和云计算的弹性伸缩能力,即允许用户按需购买,用多少购多少。

  • 结语

  初识云计算,由于现在缺乏实际的项目经验,也只能空泛的谈谈了,有了经验之后再做修正,以上用通俗的语言表达了一下我所理解的“云计算”,正所谓知之为知之,不知为不知,我也就不想写一些连我自己也不懂的概念了。也希望各位看官大牛不吝赐教。

  • 参考
  1. Stephen, R, Schach. 面向对象与传统软件工程[M]. 北京:机械工业出版社, 2003.
  2. 百度百科. 云计算[Z]. Baidu: Baidu,2014.