【软件】软件综述

视频号

微信公众号

知识星球

Chinese, Simplified

软件是一组用于操作计算机和执行特定任务的指令、数据或程序。它与描述计算机物理方面的硬件相反。软件是一个通用术语,用于指在设备上运行的应用程序、脚本和程序。它可以被认为是计算机的可变部分,而硬件是不变的部分。

软件的两个主要类别是应用软件和系统软件。应用程序是满足特定需求或执行任务的软件。系统软件设计用于运行计算机硬件,并为应用程序提供运行平台。

其他类型的软件包括编程软件,它提供软件开发人员所需的编程工具;中间件,位于系统软件和应用程序之间;以及操作计算机设备和外围设备的驱动程序软件。

早期的软件是为特定的计算机编写的,并与运行的硬件一起销售。20世纪80年代,软件开始在软盘上销售,后来在CD和DVD上销售。如今,大多数软件都是通过互联网购买并直接下载的。软件可以在供应商网站或应用程序服务提供商网站上找到。

软件示例和类型

在各种类型的软件中,最常见的类型包括以下几种:

  • 应用软件。最常见的软件类型,应用软件是为用户或在某些情况下为另一应用程序执行特定功能的计算机软件包。应用程序可以是自包含的,也可以是为用户运行应用程序的一组程序。现代应用程序的例子包括办公套件、图形软件、数据库和数据库管理程序、网络浏览器、文字处理器、软件开发工具、图像编辑器和通信平台。
  • 系统软件。这些软件程序设计用于运行计算机的应用程序和硬件。系统软件协调硬件和软件的活动和功能。此外,它控制计算机硬件的操作,并为所有其他类型的软件提供工作环境或平台。操作系统是系统软件的最佳示例;它管理所有其他计算机程序。系统软件的其他示例包括固件、计算机语言翻译器和系统实用程序。
  • 驱动程序软件。这种软件也被称为设备驱动程序,通常被认为是一种系统软件。设备驱动程序控制连接到计算机的设备和外围设备,使它们能够执行特定任务。每个连接到计算机的设备都需要至少一个设备驱动程序才能正常工作。示例包括任何非标准硬件附带的软件,包括特殊的游戏控制器,以及启用标准硬件的软件,如USB存储设备、键盘、耳机和打印机。
  • 中间件。术语中间件描述了在应用程序和系统软件之间或两种不同类型的应用程序软件之间进行中介的软件。例如,中间件使Microsoft Windows能够与Excel和Word进行通信。它还用于将远程工作请求从具有一种操作系统的计算机中的应用程序发送到具有不同操作系统的应用程序。它还使较新的应用程序能够与旧的应用程序协同工作。
  • 编程软件。计算机程序员使用编程软件编写代码。编程软件和编程工具使开发人员能够开发、编写、测试和调试其他软件程序。编程软件的例子包括汇编程序、编译器、调试器和解释器。

Diagram of the software stack

软件是如何工作的?

所有软件都提供了计算机工作所需的方向和数据,并满足了用户的需求。然而,这两种不同的类型——应用软件和系统软件——以截然不同的方式工作。

应用软件

应用软件由许多程序组成,这些程序为最终用户执行特定功能,例如编写报告和浏览网站。应用程序还可以为其他应用程序执行任务。计算机上的应用程序不能单独运行;它们需要计算机的操作系统以及其他支持系统的软件程序才能工作。

这些桌面应用程序安装在用户的计算机上,并使用计算机内存执行任务。它们占用了电脑硬盘上的空间,不需要互联网连接即可工作。但是,桌面应用程序必须遵守其运行的硬件设备的要求。

另一方面,网络应用程序只需要访问互联网即可工作;它们不依赖于硬件和系统软件来运行。因此,用户可以从具有网络浏览器的设备启动网络应用程序。由于负责应用程序功能的组件在服务器上,用户可以从Windows、Mac、Linux或任何其他操作系统启动应用程序。

系统软件

系统软件位于计算机硬件和应用软件之间。用户不直接与系统软件交互,因为系统软件在后台运行,处理计算机的基本功能。该软件协调系统的硬件和软件,以便用户可以运行高级应用软件来执行特定操作。系统软件在计算机系统启动时执行,并在系统打开时继续运行。

设计和实施

软件开发生命周期是项目经理用来描述与设计软件相关的阶段和任务的框架。设计生命周期中的第一步是规划工作,然后分析将使用软件的个人的需求,并创建详细的需求。在最初的需求分析之后,设计阶段旨在指定如何满足这些用户需求。

下一步是实现,完成开发工作,然后进行软件测试。维护阶段包括保持系统运行所需的任何任务。

软件设计包括对将要实现的软件结构、数据模型、系统组件之间的接口以及软件工程师可能使用的算法的描述。

软件设计过程将用户需求转换为计算机程序员可以用来进行软件编码和实现的形式。软件工程师迭代地开发软件设计,在开发过程中添加细节并更正设计。

不同类型的软件设计包括以下内容:

  • 架构设计。这是基础设计,它使用建筑设计工具确定了系统的整体结构、主要组件及其相互关系。
  • 高级设计。这是设计的第二层,重点是如何以软件堆栈支持的模块形式实现系统及其所有组件。高级设计描述了数据流与系统的各种模块和功能之间的关系。
  • 详细设计。第三层设计的重点是指定体系结构所需的所有实现细节。

Diagram of the software development lifecycle

如何保持软件质量

软件质量衡量软件是否同时满足其功能和非功能需求。

  • 功能需求确定了软件应该做什么。它们包括技术细节、数据操作和处理、计算或任何其他指定应用程序目标的特定功能。
  • 非功能需求——也称为质量属性——决定了系统应该如何工作。非功能需求包括可移植性、灾难恢复、安全性、隐私和可用性。
  • 软件测试检测并解决软件源代码中的技术问题,并评估产品的整体可用性、性能、安全性和兼容性,以确保其满足要求。

软件质量的维度包括以下特征:

  • 无障碍。不同人群,包括需要语音识别和屏幕放大镜等自适应技术的个人,能够舒适地使用该软件的程度。
  • 兼容性。软件适用于各种环境,例如不同操作系统、设备和浏览器。
  • 效率。软件在不浪费精力、资源、精力、时间或金钱的情况下运行良好的能力。
  • 功能。软件执行其指定功能的能力。
  • 可安装性。软件在指定环境中安装的能力。
  • 本地化。软件可以使用的各种语言、时区和其他此类功能。
  • 可维护性。修改软件以添加和改进功能、修复错误等的容易程度。
  • 性能。软件在特定负载下的执行速度。
  • 便携性。软件易于从一个位置转移到另一个位置的能力。
  • 可靠性。软件在特定条件下在规定的时间段内执行所需功能而没有任何错误的能力。
  • 可扩展性。衡量软件响应处理需求变化而提高或降低性能的能力。
  • 安全。该软件能够防止未经授权的访问、侵犯隐私、盗窃、数据丢失、恶意软件等。
  • 可测试性。测试软件是多么容易。
  • 可用性。使用这个软件是多么容易。

为了在部署后保持软件质量,开发人员必须不断地对其进行调整,以满足新的客户需求并处理客户发现的问题。这包括改进功能、修复错误和调整软件代码以防止出现问题。一个产品在市场上能持续多久取决于开发人员满足这些维护要求的能力。

在执行维护时,开发人员可以进行四种类型的更改,包括:

  • 纠正。用户经常发现并报告开发人员必须修复的错误,包括编码错误和其他使软件无法满足其要求的问题。
  • 自适应。开发人员必须定期对其软件进行更改,以确保其与不断变化的硬件和软件环境兼容,例如当新版本的操作系统问世时。
  • 完美。这些是改进系统功能的更改,例如改进用户界面或调整软件代码以提高性能。
  • 预防性的。这些更改是为了防止软件出现故障,并包括重组和优化代码等任务。

现代软件开发

DevOps是一种将软件开发和IT运营团队聚集在一起的组织方法。它促进了这两个群体之间的沟通与合作。该术语还描述了使用自动化和可编程基础设施的迭代软件开发实践的使用。在我们的DevOps终极指南中了解全貌。

软件许可和专利

软件许可证是一种具有法律约束力的文件,限制软件的使用和分发。

通常,软件许可证在不侵犯版权的情况下为用户提供一个或多个软件副本的权利。许可证概述了协议各方的责任,并可能对软件的使用方式进行限制。

软件许可条款和条件通常包括软件的合理使用、责任限制、保证、免责声明和保护,如果软件或其使用侵犯了他人的知识产权。

许可证通常用于专有软件,该软件仍然是创建该软件的组织、团体或个人的财产;或者免费软件,用户可以运行、研究、更改和分发软件。开放源代码是一种协作开发的软件,其源代码是免费提供的。有了开源软件许可证,用户可以运行、复制、共享和更改类似于免费软件的软件。

在过去的二十年里,软件供应商已经从一次性销售软件许可证转向了软件即服务订阅模式。软件供应商将软件托管在云中,并向客户提供,客户支付订阅费并通过互联网访问软件。

尽管版权可以阻止其他人复制开发人员的代码,但版权不能阻止他们在不复制的情况下独立开发相同的软件。另一方面,专利使开发人员能够阻止另一个人使用开发人员在专利中声称的软件的功能方面,即使该另一个人独立开发了该软件。

一般来说,技术含量越高的软件,获得专利的可能性就越大。例如,如果一个软件产品创建了一种新的数据库结构或增强了计算机的整体性能和功能,它就可以获得专利。

软件历史

“软件”一词直到20世纪50年代末才被使用。在此期间,尽管正在创建不同类型的编程软件,但它们通常无法商业化。因此,用户——大多数是科学家和大型企业——往往不得不编写自己的软件。

以下是软件历史的简要时间表:

  • 1948年6月21日。计算机科学家Tom Kilburn在英国曼彻斯特大学为曼彻斯特婴儿电脑编写了世界上第一个软件。
  • 20世纪50年代初。通用汽车公司为IBM 701电子数据处理机创造了第一个操作系统。它被称为通用汽车操作系统。
  • 1958年,统计学家John Tukey在一篇关于计算机编程的文章中创造了软件一词。
  • 20世纪60年代末。软盘在20世纪80年代和90年代被引入并用于分发软件。
  • 1971年11月3日。AT&T发布了Unix操作系统的第一版。
  • 1977年,苹果公司发布了Apple II,消费者软件开始腾飞。
  • 1979年,VisiCorp为Apple II发布了VisiCalc,这是第一款用于个人电脑的电子表格软件。
  • 1981年,微软发布了MS-DOS操作系统,许多早期的IBM计算机都在该操作系统上运行。IBM开始销售软件,普通消费者可以使用商业软件。
  • 20世纪80年代。硬盘成为个人电脑的标准配置,制造商开始将软件捆绑在电脑中。
  • 1983年,Richard Stallman的GNU(GNU不是Unix)Linux项目发起了自由软件运动,旨在创建一个类似Unix的操作系统,其源代码可以自由复制、修改和分发。
  • 1984年,Mac操作系统发布,运行苹果的Macintosh系列。
  • 1980年代中期。发布了包括AutoDesk AutoCAD、Microsoft Word和Microsoft Excel在内的关键软件应用程序。
  • 1985.Microsoft Windows 1.0发布。
  • 1989年,CD-ROM成为标准,它比软盘能容纳更多的数据。大型软件程序可以快速、轻松且相对便宜地分发。
  • 1991年,作为开源Linux操作系统基础的Linux内核发布。
  • 1997年,DVD被引入,并且能够比CD容纳更多的数据,这使得将捆绑的程序(如Microsoft Office Suite)放在一个磁盘上成为可能。
  • 1999年。Salesforce.com使用云计算开创了互联网上的软件交付。
  • 2000年,软件即服务(SaaS)一词开始流行起来。
  • 2007年,IPhone推出,移动应用程序开始站稳脚跟。
  • 2010年至今。随着用户从互联网和云端购买和下载软件,DVD正变得过时。供应商转向基于订阅的模式,SaaS已经变得很普遍。
本文地址
https://architect.pub/software-summarize
SEO Title
software summarize