《软件工程方法与实践》—— 1.2 什么是软件

简介: 既然软件工程的主角是软件开发,那么在现代社会中,软件担任的究竟是一种什么样的角色呢?我们使用的大部分软件同时担任着两个角色,既是软件产品,又是软件工具。软件产品是指为最终用户使用并带来益处的具有商业价值的软件系统。

本节书摘来自华章出版社《软件工程方法与实践》一 书中的第1章,第1.2节,作者窦万峰,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.2 什么是软件

既然软件工程的主角是软件开发,那么在现代社会中,软件担任的究竟是一种什么样的角色呢?我们使用的大部分软件同时担任着两个角色,既是软件产品,又是软件工具。软件产品是指为最终用户使用并带来益处的具有商业价值的软件系统。软件工具是指开发其他软件的软件系统。我们可以利用这些软件系统存储信息或进行信息的变换等。

1.2.1 软件的定义与特性

什么是软件?软件是计算机系统中与硬件相对应的另一部分,是一系列程序、数据及其相关文档的集合。程序、数据和文档称为软件的三要素,如图1-1所示。


8c055e9e9f8d2536c572b59188262a95af0e1de4

程序是按照特定顺序组织的计算机数据和指令的集合。
数据是使程序能正常执行的数据结构。
文档是与程序的开发、维护和使用有关的资料。
计算机软件的核心是程序,而文档则是软件不可分割的组成部分。
要理解软件的真正含义,需要了解软件有哪些特征。与软件相对应的是硬件,在计算机的体系结构中,人们当初利用智慧创造的硬件是有物理形态的。现在,人们利用结构化的思想创造出的软件是逻辑的而不是有固有形态的实体,所以,计算机软件和硬件有着截然不同的特征。
复杂性。软件是一个庞大的逻辑系统,比人类构造的其他产品更复杂,甚至硬件的复杂性和软件比起来也是微不足道的。此外,软件主要是依靠人脑的“智力”构造出来的,多种人为因素使得软件难以统一化,更增加了其复杂性。软件的复杂性使得软件产品难以理解、难以生产、难以维护,更难以对生产过程进行管理。
一致性。软件必须和运行它的硬件保持一致,这是由软件对硬件的依赖所决定的,一般采用软件顺应硬件接口,而不是硬件顺应软件的方案。如果硬件系统是“现存”的,软件必须和现有硬件系统接口保持一致。此外,由于计算机的软件和硬件具有功能互换性,所以也可能出现用软件来替代硬件接口的功能。
退化性。软件与硬件相比不存在磨损和老化的问题。事实上,软件不会磨损,但它会因缺陷和过时而退化,因此,软件在其生命周期中需要进行多次的维护,直至被淘汰。
易变性。软件在生产过程中,甚至在投入运行之后,也可以再改变。软件必须能够经历变化并容易改变,这也是软件产品的特有属性。软件易变性的好处是:改变软件往往可以收到改变或者完善系统功能的效果;修改软件比更换硬件容易,使得软件具有了易维护、易移植、易复用的特征。但这种动态的变化难以预测且难以控制,可能对软件的质量产生负面影响。
移植性。软件的运行受计算机系统的影响,不同的计算机系统平台可能会导致软件无法正常运行,即软件的移植性。好的软件在设计时就要考虑到软件如何应用到不同的系统平台。
高成本。软件的开发是一个复杂的过程,需要耗费大量的开发成本和管理成本,导致软件的成本比较高。

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)、在线旅游、在线影视、在线房产等行业都是“互联网+”的杰作。
随着宽带无线接入技术和移动终端技术的飞速发展,人们迫切希望能够随时随地乃至在移动过程中都能方便地从互联网获取信息和服务,移动互联网应运而生并迅猛发展。然而,移动互联网在移动终端、接入网络、应用服务、安全与隐私保护等方面还面临着一系列的挑战。其基础理论与关键技术的研究,对于国家信息产业整体发展具有重要的现实意义。

相关文章
|
弹性计算 固态存储 大数据
2024阿里云服务器租用价格表(一年/按月/按小时报价明细)
阿里云服务器2024年最新租用价格表显示,轻量应用服务器2核2G3M带宽一年82元(约6.8元/月),2核4G4M带宽轻量服务器一年298元。新老用户共享99元一年的2核2G3M带宽ECS经济型e实例服务器与199元一年的企业专享2核4G5M带宽ECS u1实例服务器优惠。4核16G10M带宽游戏服务器70元/月,8核32G10M带宽160元/月。GPU服务器如gn6v和gn6i等提供新用户专享折扣。续费折扣方面,续费一年享有7.5折,续费五年则有3折优惠。按小时计费的云服务器ECS实例中,如ecs.u1-c1m4.large(2核8G)每小时0.45元。
30814 17
|
物联网 Shell Swift
NPU推理&微调大模型实战
本文为魔搭社区轻量级训练推理工具SWIFT微调实战教程系列
|
机器学习/深度学习 人工智能 自然语言处理
【AI系统】AI的领域、场景与行业应用
本文概述了AI的历史、现状及发展趋势,涵盖AI系统的初步设计原则,并深入探讨了AI在计算机视觉、自然语言处理和音频处理三个领域的具体应用。同时,文中还介绍了AI在金融、医疗、教育、互联网及自动驾驶等行业中的广泛应用,强调了AI基础设施的重要性及其对企业竞争力的影响。通过阅读本文,读者不仅可以获得系统的AI知识,还能激发对AI系统研究的兴趣,掌握相关的设计原则与方法。
653 1
对灵敏度分析技术进行建模(Matlab代码实现)
对灵敏度分析技术进行建模(Matlab代码实现)
653 0
|
存储 分布式计算 Hadoop
分布式计算框架在大规模数据处理中的应用
【8月更文第18天】随着大数据时代的到来,对海量数据进行有效的存储、处理和分析变得越来越重要。传统的单机系统已经无法满足PB级别数据集的需求。分布式计算框架,如Apache Hadoop和Apache Spark,成为了处理这些大规模数据集的重要工具。
1048 0
|
机器学习/深度学习 搜索推荐 数据挖掘
矩阵运算与分解:NumPy的高级应用
【4月更文挑战第17天】NumPy是Python数值计算基础库,支持高效矩阵运算和分解。本文介绍了NumPy的矩阵加减、乘法以及特征值、奇异值和Cholesky分解,并展示了它们在机器学习(如线性回归、PCA)、图像处理和科学计算中的应用。通过掌握这些高级功能,用户能更有效地处理矩阵数据,解决各种计算和分析任务。
|
JavaScript 前端开发
We‘re sorry but xxxxxx doesn‘t work properly without JavaScript enabled.
We‘re sorry but xxxxxx doesn‘t work properly without JavaScript enabled.
|
缓存 负载均衡 应用服务中间件
Nginx服务器之负载均衡策略(6种)
Nginx服务器之负载均衡策略(6种)
1176 0
|
机器学习/深度学习 算法 开发者
回归模型的显著性检验-1| 学习笔记
快速学习回归模型的显著性检验-1。
回归模型的显著性检验-1| 学习笔记
|
机器学习/深度学习 数据采集 弹性计算
使用阿里云服务器能做什么?十大用途来了
阿里云服务器可以干什么?服务器的用途有很多,常见的有网站、小程序、视频服务器、手机APP等,例如微信基于腾讯云服务器,淘宝基于阿里云服务器,阿里云百科来说下阿里云服务器十大用途:
4682 0
使用阿里云服务器能做什么?十大用途来了