首页 > 代码库 > 云计算对传统软件工程的影响
云计算对传统软件工程的影响
云计算对传统软件工程的影响
云计算是什么?美国国家标准与技术研究院(NIST)给出了定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。
云计算是并行计算、分布式计算和网格计算的发展,或者说是这些计算科学概念的商业实现。【1】它具有三大形式分别为基础设施即服务(IaaS),平台即服务(PaaS)和软件即服务(SaaS)。其中,基础设施即服务是指用户可以从云计算平台获得基础设施的服务比如租用硬件服务器。平台即服务是指云计算向用户提供平台比如操作系统或云计算服务的开发平台,使用户可以减少硬件投入,从而降低费用。软件即服务是指在云计算环境下,软件厂商把软件部署在服务器上,用户可以按需向厂商租用软件,这样用户就无需购买软件,同时由于厂商会对软件进行统一的维护,用户使用起来也会更加的方便。云计算具有超大规模,虚拟化,高可靠性,通用性,高可伸缩性,按需服务,及其廉价等特点。它将计算作为一种资源进行出售,用户可以像购买水电一样获得计算资源,从而避免了计算资源的闲置导致的资源浪费,同时方便了用户使用。云计算的出现构建了不同的软件开发环境,改变了用户获得服务的方式。传统的软件工程在云计算环境下势必要做出改变,开发者们也可以利用云计算环境改进软件开发过程,云计算对传统软件工程有很多影响,主要体现在以下几个方面:
软件复用程度提高
在传统软件工程中,开发时间与开发结果的可信性往往是矛盾的。若是开发时间较短,即软件的分析,编写及测试等所经历的时间很少,软件可能不满足用户的需求,软件错误率也很可能升高,软件的质量不高。而要开发高质量的软件,就需要大量的时间进行需求分析,软件设计,代码编写及软件测试等。二者好像是不可兼得的。而在云计算下的软件工程中构件的成熟度提高。而构件可以在更高抽象层次上实现大粒度的软件复用。【2】一方面,这些被复用的软件往往是修改和完善得十分成熟的软件,更具有可信性。而使用这些构件编写软件能够减少开发错误,提高软件质量。而另一方面,由于有许多现成的成熟构件可以使用而不用进行重复的代码编写,软件的开发时间也会缩短。云计算在这两个方面同时具有优势。同时,由于在面向服务的软件工程中构件的成熟度提高了,开发人员在编写软件时就有了更多的可用构件来进行选择,软件对象更加多样化了。
软件过程的动态性
从生命周期特点看,传统的软件生命周期模型是串行的,本质都是瀑布模型的变形,这样的生命周期模型更易于控制,可以保证在确定时间有确定的结果,而在云计算环境下软件开发不再是一个封闭的,全局控制的流程,而是存在多个并发和自治的流程,在一个项目中自底向上自顶向下有机集成。【3】 也就是说,在传统的软件工程中,为了保证确定的结果,传统软件的开发必须遵循相应的流程,否则可能导致无法进行进一步开发。而在云计算环境下,由于大量构件及结构的封装性很好,很容易进行复用,软件的架构可以从已经存在的成熟架构中直接选择,软件的详细部分也可以使用大量的成熟构件或代码,同时由于云计算环境下各构件的耦合性大大降低,软件的各个构件完全可以独立并发的进行开发,从而使软件过程更加的自由,可以多个流程同时进行。
开发组织的社会化
传统的软件开发往往局限于单个组织内部。【4】由于交流的困难以及无法及时同步开发进度,组织之外的人往往很难加入到项目当中。而在云计算环境下,同一项目的开发人员可以通过操作云服务器方便的完成软件的开发部署工作,使得软件开发不再局限于单一组织。许多组织可以共同完成一个项目,软件开发变得更加开放。同时,云计算为开源软件的发展提供了极大的便利,任何人都可以方便的在云上找到开源项目并进行优化,项目因为更多人的参与变得更加完善。
开发人员的大众化
传统的软件开发需要对开发人员进行大量培训从而掌握软件开发的基本知识,同时需要很多资金来搭建开发环境,使软件开发的门槛较高。而云计算的出现极大的降低了软件开发的门槛,使得越来越多的人可以在云计算平台上进行软件开发。云计算使用了大量的廉价服务器以及云计算往往是超大规模所带来的规模效应,还有云计算按需付费的特点,使得云计算的资源十分廉价。在云计算环境下可以用较少的金钱获得很多的计算资源。并且,云计算允许用户租用软件进行开发,从而进一步降低了资金投入。这对于中小企业和独立开发者来说是十分友好的。它们不需要大量的前期投入就可以进行软件开发并通过云计算平台将它们的产品推向市场,软件开发变得更加容易。另外,云计算中心负责架构软件开发和运行环境,软件开发者无需进行硬件设施架构和运行环境调试等工作,只需要一个浏览器就可以开始开发了,软件开发变得更加简单。还有,在云计算平台上拥有大量的学习资源,开发人员可以方便的进行学习并与他人交流提升自己的开发水平。而且,云计算平台上还有大量可以直接使用的成熟构件,即使没有很多开发经验的人也可以通过直接使用这些控件完成自己的软件。
资源部署的虚拟化
虚拟化是指将计算机中的各种实体资源经过抽象、转换后呈现出来,从而打破实体资源间的障碍,使用户更好的使用这些资源。云计算正是具有虚拟化的特点,它支持用户在任意位置,使用各种终端获取服务,用户无需知道应用具体的运行位置。计算软件运行的最底层的硬件系统和基础软件系统对用户来说是透明的,由云计算服务的提供商进行统一的维护和管理。因此在云计算环境下无需关心硬件资源,可以把更多的精力关注到软件本身,从而提高软件的质量。另外,在传统软件工程中,用户需要购买大量的服务器来应付软件资源使用的高峰期,这些服务器在平时可能都是处于闲置的状态导致资源的浪费和成本增加。而云计算环境下由于资源是虚拟的使得它的伸缩性较好,用户可以根据自己的需要动态的租用资源。在高峰期租用更多的资源而过期即可退租。从而避免了资源的浪费,同时降低了成本。
云计算作为一门新技术,虽然已经取得了广泛的应用,但还没有达到非常成熟的地步,云计算环境下究竟如何进行软件开发,还需要不断的探索和研究。虽然云计算能否带领软件工程走向新的阶段还未可知,但它的确在很多方面促进了软件工程的进步。因此推广云计算是十分重要的,软件工程可能因此得到进一步变革。
【1】 云计算的概念和内涵 中国云计算
【2】 史杰,解继丽,史少华,《论云计算对软件工程的影响》
【3】 张勇,《云计算环境下软件工程模式初探》
【4】 张强,《云计算时代的软件复用》
云计算对传统软件工程的影响