本节书摘来自华章出版社《实践者的研究方法》一书中的第1章,第1.2节,作者[美] 罗杰 s. 普莱斯曼(roger s. pressman),更多章节内容可以访问云栖社区“华章计算机”公众号查看。
<b></b>
<b>1.2 软件的变更本质</b>
<b>四大类软件不断演化,在行业中占有主导地位。这四类软件在十几年前还处于初级阶段。</b>
1.2.1 webapp
万维网(www)的早期(大约从1990年到1995年),web站点仅包含链接在一起的一些超文本文件,这些文件使用文本和有限的图形来表示信息。随着时间的推移,一些开发工具(例如xml、java)扩展了html(超级文本标记语言)的能力,使得web工程师在向客户提供信息的同时也能提供计算能力。基于web的系统和应用软件(我们将这些总称为webapp)诞生了。
今天,webapp已经发展成为成熟的计算工具,这些工具不仅可以为最终用户提供独立的功能,而且已经同公司数据库和业务应用系统集成在一起了。
十年前,webapp“演化为一种混合体,介于印刷出版和软件开发之间、市场和计算之间内部通信和外部关系之间以及艺术和技术之间。”[pow98],但是,如1.1.2节所述,当前webapp在很多应用类型中提供了丰富的计算能力。
在过去的十多年中,语义web技术(通常指web 3.0)已经演化为成熟的企业和消费者应用软件,包括“提供新功能的语义数据库,这些新功能需要web链接、灵活的数据表示以及外部访问api(应用编程接口)。”[hen10]成熟的关系型数据结构导致了全新的webapp,允许以多种方式访问不同的信息,这在以前是不可能做到的。
1.2.2 移动app
术语app已经演化为在移动平台(例如ios、android或windows mobile)上专门设计的软件。在大多数情况下,移动app包括用户接口,用户接口利用移动平台所提供的独特的交互机制,基于web资源的互操作性提供与app相关的大量信息的访问,并具有本地处理能力,以最适合移动平台的方式收集、分析和格式化信息。此外,移动app提供了在平台中的持久存储能力。
认识到移动webapp与移动app之间的微妙差异是非常重要的。移动webapp允许移动设备通过针对移动平台的优点和弱点专门设计的浏览器获取基于web内容的访问。移动app可以直接访问设备的硬件特性(例如加速器或者gps定位),然后提供前面所述的本地处理和存储能力。随着时间的推移,移动浏览器会变得更加成熟,并可获取对设备级硬件和信息的访问,这将使得移动webapp和移动app之间的区别变得模糊。
1.2.3 云计算
云计算包括基础设施或“生态系统”,它能使得任何用户在任何地点都可以使用计算设备来共享广泛的计算资源。云计算的总体逻辑结构如图1-3所示。

如图所示,计算设备位于云的外部,可以访问云内的各种资源。这些资源包括应用软件、平台和基础设施。最简单的形式是,外部计算设备通过web浏览器或类似的软件访问云。云提供对存储在数据库或其他数据结构中的数据的访问。此外,设备可访问可执行的应用软件,可以用这种应用程序代替计算设备上的app。
云计算的实现需要开发包含前端和后端服务的体系结构。前端包括客户(用户)设备和应用软件(如浏览器),用于访问后端。后端包括服务器和相关的计算资源、数据存储系统(如数据库)、服务器驻留应用程序和管理服务器。通过建立对云及其驻留资源的一系列访问协议,管理服务器使用中间件对流量进行协调和监控。[str08]
可以对云体系结构进行分段,以提供不同级别的访问,从公共访问到只对授权用户提供访问的私有云体系结构。
1.2.4 产品线软件
美国卡内基·梅隆大学软件工程研究所(sei)将软件产品线定义为“一系列软件密集型系统,可以共享一组公共的可管理的特性,这些特性可以满足特定市场或任务的特定需求,并以预定的方法从一组公共的核心资源开发出来。”[sei13]以某种方式使软件产品相互关联,可见,软件产品线的概念并不是新概念。但是,软件产品线的思想提供了重要的工程影响力,软件产品线都使用相同的底层应用软件和数据体系结构来开发,并使用可在整个产品线中进行复用的一组软件构件来实现。
软件产品线共享一组资源,包括需求(第8章)、体系结构(第13章)、设计模式(第16章)、可重用构件(第14章)、测试用例(第22、23章)及其他的软件工程工作产品。本质上,软件产品线是对很多产品进行开发的结果,在对这些产品进行工程设计时,利用了产品线中所有产品的公共性。