提到云计算,我相信IT行业的人都不会陌生。云计算的官方定义是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。通俗一点的理解就是用户付费使用云端虚拟化资源,将原本需要在本地计算机上的计算(包括网络,存储,应用软件,服务)通过网络利用远程的分布式服务器进行解决。云计算借助网络和虚拟化等技术,实现了对软硬件资源的集中化,动态化和弹性化的管理,建立了从硬件资源到软件应用的整体合一化的全新服务模式。
如果不能对云计算的服务架构做出一些了解是不能在这里阐明其对传统软件工程的影响。云计算的服务内容包括三个部分。首先是Iaas,即基础架构即服务。基础架构及服务是为用户提供基础计算和存储能力,简单点来讲就是通过虚拟化和智能化技术为用户分配一定的硬件设施。其次就是Paas,即平台即服务。平台即服务顾名思义即提供平台,实际上是将软件开发的平台作为一种服务,以最后一种服务的模式提交给用户,在我看来,平台即服务其实就是提供一个可供用户操作的平台,即web操作系统,可以将私人电脑中的资源上传至云平台,这个平台可以由多个开发者共同使用,无需管理与控制云基础设施,这样有利于软件开发者及时更新自己的开发进程,能够更好的与其他合作者进行交流,对于项目经理则可以通过这个平台及时了解开发进度,便于更好的布置开发任务。最后就是Saas,即软件即服务。软件即服务就是厂商通过Internet提供软件的模式,厂商将软件部署在自己的服务器上,此时用户不必需要为购买软件而只需支付一定的租金即可在网络上使用自己需要的软件,用户也不必对软件进行维护,服务提供商会全权管理和维护软件,大大节省了用户的开销。
传统的软件工程大致分为,总体规划,需求分析,设计,程序编码,程序测试和程序维护这么几个部分。主要是利用结构化的开发方法进行软件的开发,这样的开发方式导致代码的复用性较差,当系统对外界的接口发生变动时,可能会对整个系统结构造成很大的变动,难以扩充新的功能接口。与此同时,由于软件的可修改性较差,在进行维护时十分困难,造成维护成本变大,可维护性比较差。当然结构化的开发方法也不是一无是处,它从系统整体出发,保证了系统的整体性和目标一致性,严格区分开发的阶段性,每一阶段的成果便是下一阶段开始的依据,便于管理和控制。
面向对象思想的出现实现了软件工程的又一次飞跃,面向对象的软件工程大致分为,面向对象分析,面向对象设计,面向对象编程和面向对象测试四个部分。面向对象的开发方式更能自然的反映客观事物,所以在编写程序的时候更加容易,可以从现实中的事物出发,进行适当的抽象。与此同时面向对象可以使工程更加模块化,使各模块之间影响较小,具有较高的独立性,这样在需要修改某一部分时不会影响其他模块的正常工作。
随着云计算技术的成熟,面向服务的开发方法也开始渐渐流行了起来,面向服务的开发方法相比于面向对象的开发方法,它的耦合度更低,内聚性更强,它可以屏蔽不同硬件,不同系统,不同编程语言之间的差异,采用统一的标准。尽管在实现单一服务时,采用的任然是面向对象的方法,但在整体上它却不是面向对象的。传统的开发模式是多个程序员在各自的计算机上进行代码的编写,独立性太强。云计算的出现改善了这样的情况,它可以为一个项目提供一个软件开发的平台,并为其分配一定的虚拟化的资源,其中包括硬件资源和软件资源,这样使得软件开发的团队性更强,平台所有人都可以使用其所提供的资源,打破了资源的局限性,同时提高了资源的利用效率。与此同时,软件的设计和开发不再受时间以及地点的限制,任何时间任何地点,只要你能接入互联网,那么你就可以登录平台进行设计开发,使用云端资源。
与此同时,云计算对于敏捷开发是非常好的补充和发展,给敏捷开发带来一定的影响。敏捷开发追求效率,要尽可能早的做代码继承和环境部署,这样很依赖物理资源,在配置服务器和安装必要的软件设施时会有一定的延迟,这使得敏捷开发在实践中成为一个串行的活动。而通过云计算平台,可以按需快速的配置服务器和其他软硬件设施,使得成为一个并行的活动,提高开发的效率。云计算可以提供“无限”数量的测试和开发使用的服务器,可以更容易获得线上测试环境验证开发人员的代码。由于云计算的虚拟化,开发人员如果想到某个功能可能不错,团队可以迅速产生一个开发实例进行开发,而不需要等待下一个阶段的开发,这使得软件构建更加迅速,也鼓励了开发人员的创新和实验。云实例和虚拟化能够恨到程度地提高持续集成和交付。构建和自动化测试需要一定的时间,在这之后敏捷开发团队有可能会为在自动化测试中失败的测试修复代码,在所有测试通过之前,他们需要反复的修改代码,而如果其团队在其自己的云环境下,拥有大量的虚拟机可以提高持续的集成和交付的速度。
我也大致在微软的Azure和阿里云中了解了一些他们各自提供的服务,如下图。阿里云和微软Azure将各项服务分配的相当的细致,我们可以利用这些产品迅速布置出我们所需要的环境。在软件开发的过程中,我们可以直接购买这些云平台提供的服务,从而节省时间。
阿里云提供的机器学习服务,这项服务可以在阿里云的数加平台免费体验。这项服务可以通过拖拉组件来构造一个实验模型,从而可以使一个不懂机器学习算法的人也可以构造一个机器学习的模型分析数据,这大大简化了开发人员的开发过程。
在使用了云计算技术之后,使得用户变得简单,需要何种资源,直接获取即可。我想要讲的就是另一类软件工程——群体软件工程。李未院士曾提到,由于传统软件工程设计的计划性、封闭性等原因,在面对未来物联网超大规模系统的超量挑战,如大量的感知和受控设备,、千万量级传感器、海量计算和通讯进程、超量的非结构化动态数据等,李未院士解决办法就是群体模式。面对超量的信息系统,采用群体的研发,群体竞争的研发方式。如此方式,开发从封闭走向开放,开放人员由精英走向大众,正如TopCoder,采用竞争性群体软件开发模式,25万名开发人员加入。美国在线委托TopCoder开发通信后端系统,他任命了两名职员做设计师和项目经理,他们组织了少数人员把这个系统分成52个部分,按照传统软件工程的来法要一年完成,但是TopCoder仅仅用了五个月就完成了,而且质量还很高,最终产品完全达到客户要求,并且程序中每一千行代码平均只有0.98个漏洞,低于业内要求他们每千行六个漏洞标准。所以做的很好,很成功。云计算为群体软件工程提供了很好的开发条件,群体软件工程也有了用武之地,对传统的软件工程还是有一定的影响。
云计算下的软件工程,由于使用面向服务的开发方法,软件的可复用性很强,减少开发时间。其次,开发人员在这种模式下只需写一小部分的代码甚至是不写代码,只需要按照流程对平台的资源进行部署即可。当然云计算下的软件工程也在目前来说不可能完全取代传统的软件工程,他们各自都有优劣,云计算下的软件工程在提高效率和降低成本方面发挥着重要的作用,但其不能囊括软件工程的所有领域,在某些领域中,云计算下的软件工程时不适用的。
参考文献
[1]谷铁涛.两类软件工程的浅析——传统软件工程和面向对象软件工程
[2]史杰,解继丽,史少华——论软件工程对云计算的影响