云计算来袭,且看传统软件工程如何应对
何为云计算?
云计算由IBM在2007年首次提出,当初备受人们质疑,但如今已成为主要的研究热点,并且由理论走向实践,成为各国各领域的重要经济增长点,并且在未来云计算有着不可估量的发展前景,为此我们必须重视这一研究热点。
云计算为什么被称为“云”计算,传言当初IT界人士喜欢在纸上画一朵云来表示互联网,因此当这一基于互联网的新一代计算方式提出时,人们便想到了用“云计算”来称呼它。但实际上,云计算的概念一直没有一个确切的统一的定义。
在维基百科上对于云计算的定义是——云计算,是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机和其他设备。云计算是继1980年代大型计算机到客户端-服务器端的大转变之后的又一次巨变。用户不需要了解“云”中基础设施的细节,不必具有相应的专业知识,也无需直接进行控制。云计算描述了一种基于互联网的新的IT服务增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展而且经常是虚拟化的资源。
而伯克利云计算白皮书的定义是——云计算包括互联网上各种服务形式的应用以及数据中心中提供这些服务的软硬件设施,应用服务即SaaS(Software as s Service软件即服务),而数据中心的软硬件设施即所谓的云。
美国标准化技术机构NIST的定义是:“云计算是一种资源利用模式,它能以方便友好,按需访问的方式通过网络访问可配置的计算机资源池,在这种模式中,可以快速供应并以最小的管理代价提供服务。”
虽然关于云计算的定义很多,都是大同小异,我的理解是,云计算是把所有的计算资源、存储资源都整合到一起,在用户需要的时候,按需分配给用户使用。这样可以最大限度地提高资源的利用率,而且可以使用户在工作中的处理能力不受自身机器性能的影响,以低廉的设施获得高效的资源。另一方面,云计算不仅仅是一种资源的使用方式,更是一种服务模式,目前知名互联网公司都推出了云计算服务,用户采用即用即付的方式支付其资源使用的费用。
而云计算的服务模式针对不同的用户也分为三个不同的层次,即IaaS、PaaS和SaaS。IaaS是基础设施即服务,即云计算服务公司提供硬件基础设施如服务器等;PaaS是平台即服务,是为软件开发者提供的,Platform as a Service,云计算平台提供硬件、操作系统、编程语言、开发库、部署工具,帮助开发者更快地开发软件服务;SaaS是软件即服务,是面对普通用户的,用户无需安装,即可通过浏览器使用云计算平台上的软件。
举例来说,如果我们需要建设一个网站,如果使用IaaS,那么云服务平台只会给我们一个服务器,需要自己安装操作系统,编写代码等工作,如果使用PaaS,则服务器中会带有服务器软件,我们需要自己编写网站程序,而如果使用SaaS,我们就可以使用开发好的网站程序,有专门的人员负责维护。
云计算虽然带来了灵活便捷的使用体验,也提高了资源的使用效率,但也存在很多不足,例如数据安全问题,网络传输问题等,需要完善的地方还有很多,但至少目前来看,云计算有着广阔的发展前景,其影响将会涉及各个领域,其中就包括软件工程领域。
传统软件工程的发展?
随着计算机科学的不断发展,软件工程作为现代计算机技术的重要支撑部分,也获得了长足的发展。但纵观整个软件工程的发展历史,其出现的时间要比计算机出现的时间晚很多。
在1950年代,就出现了最早的编程语言,但这一时期计算机程序主要用于科学计算,还没有软件的概念,程序设计主要围绕硬件进行开发,程序较小,也没有明确的分工,也没有针对于程序的文档资料。
在大概1956——1970年代,程序设计的规模不断增加,出现了软件的概念,高级编程语言不断出现,也促进了软件规模的增大,而软件行业也出现了用户和开发者这样明确的分工,整个社会对于软件数量和质量都有了巨大的需求,但是软件开发技术却没有重大的提高,导致了软件危机的发生。
此后,软件行业开始出现了较为完整的软件工程体系,人们为了解决软件危机,提高软件开发的效率和速度,开始重点研究软件开发过程中的技术手段和管理方法。与此同时,计算机硬件的性能也有了很大的提高,可以支持更为复杂的程序运行。而软件开发也逐渐由面向过程转向了面向对象的开发方法。
面向对象的开发方法一直以来都是软件行业的主流方法,经过几十年的发展,具有了一套完备的体系,包括了OOA(面向对象的分析)、OOD(面向对象的设计)、OOP(面向对象的编程)、OOT(面向对象的测试)和OOSM(面向对象的软件维护)等过程。
云计算如何改变传统软件工程?
下面说说云计算对于传统软件工程的影响。
首先,上面已经提到,云计算是将服务和资源整合到一起,而云计算又是一个线上的平台,开发者广泛分布在世界的各个地区,同时,同一个项目的开发者也可以在线上合作,因此这一优势使得开发大规模的软件变得容易,我们项目规划者可以将整个工程划分为不同的模块,由不同的开发人员同时进行开发工作,但是也可以独立地使用云端的资源进行测试。
其次,云计算时代,速度和效率成为了重要的竞争点,高质量的软件开发工作意味着投入更多的时间和精力,因此时间和质量成为一对不可调和的矛盾,因此,敏捷软件开发和迭代式的软件开发工作必将成为主流,而这就要求开发人员做好协调和文档记录工作,在每次迭代的时候都要清晰地知道整个软件开发项目处于什么样的位置。
第三,云计算时代,开发速度和效率的提升使得软件开发工作不再是一个需要时间的工作,因此,需求工程将会变得极其重要,快速发现用户的需求点成为在商业竞争中的关键。在云计算时代,尤其是SaaS的推广,即使不懂计算机的普通人也可以借互联网的东风将自己的构想实现。
第四,以往的软件开发工作是由开发者直接面向客户,而在云计算时代,云服务商的出现大大简化了开发者的工作,使得开发者免去了硬件配置工作,提高了开发者的效率,但同时也使得云服务商自己成为了介于用户和开发者之间不可或缺的一环。这一变化,将会从根本上改变原来的业务链条,使得软件开发工作更为平民化,越来越多的人都可以从事软件开发工作。
云计算作为新一代产业浪潮的驱动力,势必会对软件工程领域带来巨大的影响。虽然我们并不知道云计算将会把软件工程带到一个怎样的高度,至少目前来看,云计算的应用,大大提高了软件开发工作的效率,并且云服务商的出现也改变了传统的业务链条,我们相信,在未来一定会出现更为高效的和实用的开发模式,而软件工程也将在云计算的助力下更好地为人们服务。