本节书摘来自华章出版社《软件工程方法与实践》一 书中的第1章,第1.2节,作者窦万峰,更多章节内容可以访问“华章计算机”公众号查看。
1.2 什么是软件
既然软件工程的主角是软件开发,那么在现代社会中,软件担任的究竟是一种什么样的角色呢?我们使用的大部分软件同时担任着两个角色,既是软件产品,又是软件工具。软件产品是指为最终用户使用并带来益处的具有商业价值的软件系统。软件工具是指开发其他软件的软件系统。我们可以利用这些软件系统存储信息或进行信息的变换等。
1.2.1 软件的定义与特性
什么是软件?软件是计算机系统中与硬件相对应的另一部分,是一系列程序、数据及其相关文档的集合。程序、数据和文档称为软件的三要素,如图1-1所示。
程序是按照特定顺序组织的计算机数据和指令的集合。
数据是使程序能正常执行的数据结构。
文档是与程序的开发、维护和使用有关的资料。
计算机软件的核心是程序,而文档则是软件不可分割的组成部分。
要理解软件的真正含义,需要了解软件有哪些特征。与软件相对应的是硬件,在计算机的体系结构中,人们当初利用智慧创造的硬件是有物理形态的。现在,人们利用结构化的思想创造出的软件是逻辑的而不是有固有形态的实体,所以,计算机软件和硬件有着截然不同的特征。
复杂性。软件是一个庞大的逻辑系统,比人类构造的其他产品更复杂,甚至硬件的复杂性和软件比起来也是微不足道的。此外,软件主要是依靠人脑的“智力”构造出来的,多种人为因素使得软件难以统一化,更增加了其复杂性。软件的复杂性使得软件产品难以理解、难以生产、难以维护,更难以对生产过程进行管理。
一致性。软件必须和运行它的硬件保持一致,这是由软件对硬件的依赖所决定的,一般采用软件顺应硬件接口,而不是硬件顺应软件的方案。如果硬件系统是“现存”的,软件必须和现有硬件系统接口保持一致。此外,由于计算机的软件和硬件具有功能互换性,所以也可能出现用软件来替代硬件接口的功能。
退化性。软件与硬件相比不存在磨损和老化的问题。事实上,软件不会磨损,但它会因缺陷和过时而退化,因此,软件在其生命周期中需要进行多次的维护,直至被淘汰。
易变性。软件在生产过程中,甚至在投入运行之后,也可以再改变。软件必须能够经历变化并容易改变,这也是软件产品的特有属性。软件易变性的好处是:改变软件往往可以收到改变或者完善系统功能的效果;修改软件比更换硬件容易,使得软件具有了易维护、易移植、易复用的特征。但这种动态的变化难以预测且难以控制,可能对软件的质量产生负面影响。
移植性。软件的运行受计算机系统的影响,不同的计算机系统平台可能会导致软件无法正常运行,即软件的移植性。好的软件在设计时就要考虑到软件如何应用到不同的系统平台。
高成本。软件的开发是一个复杂的过程,需要耗费大量的开发成本和管理成本,导致软件的成本比较高。
1.2.2 软件技术的演化
软件的发展经历了一个演化的过程,自从20世纪40年代产生了世界第一台计算机后,伴随而生的就是程序或软件。软件的演化大致经历了以下四个阶段。
第一阶段。1946年到20世纪60年代初是计算机软件发展的初期,一般称为程序设计阶段,其主要特征是程序生产方式为个体手工方式。
第二阶段。20世纪60年代初到70年代初是计算机软件发展的第二个阶段,也称为程序阶段。在这个阶段,软件工程学科诞生了。程序的规模已经发展得很大了,软件开发需要多人分工协作,软件的开发方式由个体生产发展为小组生产。但是,由于小组生产的开发方式基本上沿用了软件发展早期所形成的个体化的开发方式,软件的开发与维护费用以惊人的速度增加,导致许多软件产品后来根本不能维护,最终导致软件危机的出现。
第三阶段。20世纪70年代中期至80年代中期是计算机软件发展的第三个阶段,一般称为软件工程阶段。在这个阶段,软件工程师把工程化的思想加入软件的开发过程中,用工程化的原则、方法和标准来开发和维护软件。
第四阶段。从20世纪80年代中期至今,面向对象的方法学受到了人们的重视,促进了软件业的飞速发展,软件产业在世界经济中已经占有举足轻重的地位,这个阶段一般称为面向对象阶段。
20世纪末开始流行的Internet给人们提供了一种全球范围的信息基础设施,形成了一个资源丰富的计算平台,未来如何在Internet平台上进一步整合资源,形成巨型的、高效的、可信的虚拟环境,使所有资源能够高效、可信地为所有用户服务,成为软件技术的研究热点。
Internet平台具有一些传统软件平台不具备的特征:分布性、结点的高度自治性、开放性、异构性、不可预测性、连接环境的多样性等。这对软件工程的发展提出了新的问题,软件工程需要新的理论、方法和技术和平台来应对这个问题。目前投入很大精力研究的中间件技术就是这方面的典型代表。Internet和基于Internet应用的快速发展与普及,使计算机软件所面临的环境开始从静态封闭逐步走向开放、动态和多变。软件系统为了适应这样一种发展趋势,将会逐步呈现出柔性、多目标、连续反应式的网构(NetWare)软件系统的形态。
随着Internet的发展与应用,出现了“互联网+”的新概念。“互联网+”是创新2.0下的互联网发展的新业态,是知识社会创新2.0推动下的互联网形态演进及其催生的经济社会发展新形态。“互联网+”催生了一系列软件及其平台的需求。近几年来,“互联网+”已经改变了多个行业,当前大众耳熟能详的电子商务、互联网金融(ITFIN)、在线旅游、在线影视、在线房产等行业都是“互联网+”的杰作。
随着宽带无线接入技术和移动终端技术的飞速发展,人们迫切希望能够随时随地乃至在移动过程中都能方便地从互联网获取信息和服务,移动互联网应运而生并迅猛发展。然而,移动互联网在移动终端、接入网络、应用服务、安全与隐私保护等方面还面临着一系列的挑战。其基础理论与关键技术的研究,对于国家信息产业整体发展具有重要的现实意义。