软件

一个图,显示了如何用户与之互动应用程序软件在典型台式电脑。应用软件层与操作系统,反过来与硬件。箭头表示信息流。

软件是一组电脑程序并关联文档数据.[1]这与硬件,从中构建系统并实际执行工作。

最低的编程水平可执行代码由组成机器语言个人支持的指示处理器 - 尤其是一个中央处理器(CPU)或图形处理单元(GPU)。机器语言由二进制值表示处理器说明那将计算机的状态从其先前的状态改变。例如,指令可能会更改计算机中特定存储位置中存储的值,该效果无法直接观察到用户。指示也可以调用其中之一输入或输出操作,例如在计算机屏幕上显示一些文本;引起状态变化,应可见用户。处理器执行除非指示“跳”到不同的指令,或者是中断由操作系统。截至2022年, 最多个人计算机手机设备和服务器具有多个执行单元的处理器或者多个处理器执行计算在一起,因此计算已成为更多同时活动比过去。

大多数软件都写在高级编程语言。对于程序员而言,它们更容易,更有效,因为他们更接近天然语言比机器语言。[2]高级语言使用编译器或一个口译员或两者的组合。软件也可以用低级写组装语言,与计算机的机器语言指令有很强的对应关系,并使用汇编器.

历史

一个算法因为那是第一件软件是由艾达·洛夫拉斯(Ada Lovelace)在19世纪,计划分析引擎.[3]她创造了证明显示引擎如何计算Bernoulli号码.[3]由于证明和算法,她被认为是第一个计算机程序员。[4][5]

关于软件的第一个理论,在我们今天知道的计算机创建之前,是由我们提出的艾伦·图灵(Alan Turing)在1936年的论文中在可计算的数字上,并应用于ientscheidungsproblem(决策问题)。[6]最终导致了计算机科学和软件工程学术领域的创建;两个字段研究软件及其创建。计算机科学是计算机和软件的理论研究(图灵的论文是计算机科学的一个示例),而软件工程是工程原理在软件开发中的应用。[7]

2000年,耶鲁大学法学院的图书馆员弗雷德·夏皮罗(Fred Shapiro)发表了一封信,揭示了约翰·怀尔德·图基(John Wilder Tukey)1958年的论文“具体数学教学”[8][9]包含在搜索中发现的“软件”一词的最早使用Jstor的电子档案,早于OED引用了两年。[10]这使许多人凭借这个术语来归功于Tukey,尤其是在同年发表的ob告中,[11]尽管Tukey从未因任何此类造币而声称荣誉。1995年,保罗·尼克特(Paul Niquette)声称他最初是在1953年10月创造了这个任期的,尽管他找不到任何支持他主张的文件。[12]在工程背景下,“软件”一词最早的出版物是1953年8月,理查德·C·卡哈特(Richard R. Carhart)兰德公司研究备忘录。[13]

类型

搅拌机, 一个免费软件程序

在几乎所有计算机平台上,可以将软件分为几个类别。

目的或使用域

基于目标,计算机软件可以分为:

  • 应用程序软件使用计算机系统执行超出计算机本身基本操作的特殊功能。有许多不同类型的应用程序软件,因为可以使用现代计算机执行的任务范围是如此之大 - 请参见软件列表.
  • 系统软件管理硬件行为,以提供用户要求的基本功能,或者其他软件可以正确运行(如果有的话)。系统软件还设计用于为运行应用程序软件提供平台,[14]它包括以下内容:
    • 操作系统是管理资源并为其他“顶部”运行的软件提供通用服务的软件集合。监督计划引导加载程序贝壳窗口系统是操作系统的核心部分。实际上,操作系统捆绑了其他软件(包括应用程序软件),以便用户可以使用只有一个操作系统的计算机进行一些工作。
    • 设备驱动程序操作或控制连接到计算机的特定类型的设备。每个设备至少需要一个相应的设备驱动程序;由于计算机通常至少具有至少一个输入设备和至少一个输出设备,因此计算机通常需要多个设备驱动程序。
    • 公用事业是旨在协助用户维护和照顾其计算机的计算机程序。
  • 恶意软件, 或者恶意软件是为损害或破坏计算机而开发的软件。恶意软件与计算机相关的犯罪密切相关,尽管某些恶意程序可能被设计为实用的笑话.

执行的性质或领域

  • 桌面应用程序网络浏览器微软办公软件libreofficeWordPerfect, 也手机药片应用程序(称为“应用”)。
  • JavaScript脚本是传统上嵌入的软件网页当加载网页时,直接在Web浏览器内运行,而无需Web浏览器插件。如果软件要幺翻译成JavaScript,也可以在Web浏览器中运行其他编程语言的软件,或者如果安装该语言的Web浏览器插件;后者最常见的例子是ActionScript脚本,由Adobe Flash插入。
  • 服务器软件, 包含:
  • 插件扩展是扩展或修改另一个软件功能的软件,并要求使用该软件以进行功能。[15]
  • 嵌入式软件居住为固件嵌入式系统,用于一次用途或几种用途的设备汽车电视(尽管一些嵌入式设备(例如无线芯片组)可以他们自己成为普通的非安装计算机系统(例如PC或智能手机)的一部分。[16]在嵌入式系统上下文中,有时在系统软件和应用程序软件之间没有明确的区别。但是,一些嵌入式系统运行嵌入式操作系统,并且这些系统确实保留了系统软件和应用程序软件之间的区别(尽管通常只有一个固定的应用程序始终运行)。
  • 微代码是一种特殊的,相对模糊的嵌入式软件,告诉处理器本身如何执行机器代码,因此它实际上比机器代码较低。它通常与处理器制造商专有,并且他们向用户提供任何必要的校正微型软件更新(比运输替换处理器硬件便宜得多)。因此,普通程序员不会期望能够处理它。

编程工具

编程工具也是以程序或应用程序形式的软件开发人员用于创建,调试维持,或其他支持软件。[17]

软件是用一种或多种编程语言编写的;有许多编程语言存在,每个都有一个实现,每个实现都由其自己的一组编程工具组成。这些工具可能是相对独立的程序,例如编译器调试者口译员链接器, 和文本编辑器,可以组合完成任务;否则他们可能会形成综合开发环境(IDE),结合了此类独立工具的大部分或全部功能。IDE可以通过调用相关的单个工具或以新的方式重新实现其功能来做到这一点。IDE可以使执行特定任务更容易,例如在特定项目中的文件中搜索。许多编程语言实现提供了使用单个工具或IDE的选项。

话题

建筑学

使用现代通用计算机的人(相反嵌入式系统模拟计算机超级计算机)通常会看到执行各种任务的三层软件:平台,应用程序和用户软件。

  • 平台软件: 这平台包括固件设备驱动程序, 一个操作系统,通常是图形用户界面总共允许用户与计算机及其交互外围设备(相关设备)。平台软件通常与计算机捆绑在一起。在个人电脑通常,一个人将具有更改平台软件的能力。
  • 应用程序软件应用程序软件是大多数人在想到软件时想到的。典型的示例包括办公套房和视频游戏。应用软件通常是从计算机硬件分开购买的。有时,应用程序与计算机捆绑在一起,但这并没有改变它们作为独立应用程序运行的事实。应用程序通常是操作系统的独立程序,尽管它们通常是针对特定平台量身定制的。大多数用户将编译器,数据库和其他“系统软件”视为应用程序。
  • 用户写的软件最终用户开发量身定制系统以满足用户的特定需求。用户软件包括电子表格模板和文字处理器模板。甚至电子邮件过滤器也是一种用户软件。用户自己创建此软件,并且经常忽略它的重要性。根据将用户编写的软件集成到默认的应用程序软件包中的能力,许多用户可能不知道原始软件包之间的区别以及同事添加的内容。

执行

计算机软件必须“加载”到计算机的贮存(如那个硬盘或者记忆)。软件加载后,计算机就能执行软件。这涉及通过系统软件从应用程序软件传递指令到最终将指令作为机器代码接收的硬件。每种指令都会导致计算机执行操作 - 移动数据,执行计算,或更改控制流指示。

数据移动通常是从内存中的一个地方到另一个位置。有时,它涉及在内存和寄存器之间移动数据,从而在CPU中启用高速数据访问。移动数据,尤其是大量数据可能是昂贵的;有时通过将“指针”用于数据来避免这种情况。计算包括简单的操作,例如增加可变数据元素的值。更复杂的计算可能涉及许多操作和数据元素。

质量和可靠性

软件质量非常重要,尤其是商业的和系统软件。如果软件有故障,它可以删除一个人的作品,崩溃计算机并执行其他意外的事情。错误和错误称为“错误“通常在Alpha和Beta测试中发现。软件通常也是所谓的受害者软件老化,由看不见的错误组合导致的渐进性降解。

发现并通过软件测试。但是,软件测试很少(如果曾经)放大每个错误。一些程序员说,“每个程序至少还有一个错误”(卢巴斯基定律)。[18]在里面瀑布软件开发方法,通常采用单独的测试团队,但在较新的方法中,共同称为敏捷软件开发,开发人员经常进行所有自己的测试,并定期向用户/客户展示软件以获取反馈。可以通过测试软件单位测试回归测试以及其他方法,或最常见的是自动完成的方法,因为要测试的代码量可能很大。包含命令软件的程序使硬件工程和系统操作可以更轻松地一起运行。

执照

该软件的许可使用户有权在许可环境中使用该软件,并且免费软件许可证,还授予其他权利,例如制作副本的权利。

专有软件可以分为两种类型:

  • 免费软件,其中包括“免费试用”软件或“免费增值“软件(过去,术语共享软件通常用于免费试用/免费增值软件)。顾名思义,尽管在免费试用或免费增值软件的情况下,免费软件可以免费使用,但有时仅在有限的时间内或功能有限。[19]
  • 可获得费用的软件,只能合法地购买许可证。[20]

开源软件随附免费的软件许可证,授予收件人修改和重新分配软件的权利。[21]

专利

软件专利,与其他类型的专利,从理论上讲应该给发明人一个独家,时限的许可证有关如何实施的详细想法(例如算法)一块软件,或一块软件的组成部分。有关软件可能有用的事物的想法和用户要求,不应该是可专利的,具体实施(即实施专利的实际软件包)也不应该是可专利的 - 后者已经被版权覆盖,通常是自动的。因此,软件专利应该涵盖需求和具体实施之间的中间区域。在某些国家 /地区,要求声称的发明对物理世界产生影响的要求也可能是对软件专利保持有效的要求的一部分 - 尽管全部有用的软件对物理世界有影响,这一要求可能开放以进行辩论。同时,美国版权法已应用于软件代码撰写的各个方面。[22]

软件专利在软件行业中引起了争议,许多人对其有不同的看法。争议的根源之一是,在实践中,在实践中,上述初始想法和专利之间的分歧似乎并未受到专利律师的荣誉 - 例如面向方面的编程(AOP),据称要求对任何编程工具实施了AOP的想法,无论是否实施。另一个争议的来源是对创新的影响,许多杰出的专家和公司认为软件是一个快速发展的领域,软件专利仅创造了巨大的额外诉讼成本和风险,实际上是削弱了创新。在有关美国境外软件专利的辩论中,已经提出了大型美国公司和专利律师可能是允许或继续允许软件专利的主要受益人。

设计和实施

软件的设计和实施因软件的复杂性而异。例如,设计和创建Microsoft Word比设计和开发花费更多的时间Microsoft记事本因为前者俱有更多的基本功能。

软件通常在综合开发环境(IDE)喜欢IntellijMicrosoft Visual Studio可以简化过程和编译软件。如不同部分所述,通常在现有软件的顶部创建软件,应用程序接口(API)基础软件提供的GTK+,Javabeans或摇摆。图书馆(API)可以按其目的进行分类。例如,春季框架用于实施企业应用程序, 这Windows表单库用于设计图形用户界面(GUI)应用程序,例如Microsoft Word和Windows Communication Foundation用于设计网页服务。设计程序时,它依赖于API。例如,Microsoft Windows桌面应用程序可能会在。网Windows表单库喜欢form1.close()form1.show()[23]关闭或打开应用程序。没有这些API,程序员就需要完全编写这些功能。公司喜欢Oracle微软提供自己的API,以便使用其编写许多应用程序软件库它们通常有很多API。

数据结构哈希表数组, 和二进制树, 和算法QuickSort,对于创建软件很有用。

计算机软件具有经济特征,使其设计,创建和分销与大多数其他经济产品不同。[指定][24][25]

创建软件的人称为程序员软件工程师或软件开发人员,术语都具有相似的含义。程序员的更多非正式术语也存在,例如“编码器”和“黑客” - 尽管使用后一个单词可能会引起混乱,因为它经常习惯于表示非法闯入计算机系统的人.

也可以看看

参考

  1. ^“ ISO/IEC 2382:2015”.ISO。 2020年9月3日。检索5月26日2022.[软件包括]信息处理系统的所有程序,程序,规则和相关文档。
  2. ^“编译器构造”.存档来自2013年11月2日的原始内容。
  3. ^一个b埃文斯2018,p。 21。
  4. ^Fuegi,J。;弗朗西斯,J。(2003)。“ Lovelace&Babbage以及1843年'笔记'的创建"(PDF).计算史的年鉴.25(4):16–26。doi10.1109/MAHC.2003.1253887.S2CID 40077111。存档原本的(PDF)2020年2月15日。
  5. ^Staf,《卫报》(2012年12月10日)。“由Google Doodle尊敬的Ada Lovelace”.守护者。检索11月25日2018.{{}}:CS1维护:url-status(链接)
  6. ^图灵,艾伦·马西森(Alan Mathison)(1936)。“在可计算的数字上,并应用于ientscheidungsproblem”(PDF).数学杂志.58:230–265。存档(PDF)从2022年10月9日的原件。检索8月28日2022.
  7. ^洛尔格·帕纳斯(Lorge Parnas),大卫(1984年11月1日)。“软件工程原理”.信息:信息系统和运营研究.22(4):303–316。doi10.1080/03155986.1984.11731932.ISSN 0315-5986.
  8. ^Tukey,约翰·怀尔德(John Wilder)(1958年1月)。“具体数学的教学”。美国数学月度.泰勒和弗朗西斯有限公司/美国数学协会.65(1):1–9,2。doi10.2307/2310294.ISSN 0002-9890.Jstor 2310294.代码子 Ammyae.[…]今天,“软件”包括精心计划的解释性例程,编译器和自动化编程的其他方面至少对现代电子计算器至少与其“硬件”的管子,晶体管,电线,磁带等一样重要。[…]
  9. ^Beebe,Nelson H. F.(2017年8月22日)。“第一章 - 整数算术”。数学功能计算手册 - 使用MATHCW便携式软件库进行编程(1 ed。)。美国犹他州盐湖城:施普林格国际出版社。 pp。969,1035。doi10.1007/978-3-319-64110-2.ISBN 978-3-319-64109-6.LCCN 2017947446.S2CID 30244721.
  10. ^夏皮罗,弗雷德(2000)。“软件一词的起源:JSTOR电子期刊档案中的证据”(PDF).IEEE计算历史.22(2):69–71。doi10.1109/mahc.2000.887997。存档原本的(PDF)2003年6月5日。检索6月25日2013.
  11. ^莱昂哈特(David)(2000年7月28日)。“约翰·图基(John Tukey),85岁,统计学家;创建了'软件'一词".纽约时报。检索9月24日2012.
  12. ^Niquette,R。Paul(2006),软词:“软件”一词的出处ISBN 1-58922-233-4存档来自2019年8月8日的原始,检索8月18日2019
  13. ^理查德·卡哈特(Carhart)(1953年)。电子可靠性问题当前状态的调查(PDF)。加利福尼亚州圣莫尼卡:兰德公司。 p。 69。存档(PDF)来自2022年10月9日的原件。[…]将从第二节召回。1.6该术语人员被定义为包括与硬件直接接触的人,从生产到现场使用,即组装,检查,打包,运输,货运,手柄,安装,安装,操作和维护电子设备的人。在这些阶段中的任何一个中,人员失败都可能导致非手术齿轮。与硬件因素一样,关于这些软件或人为因素的可靠性几乎没有定量数据:人员造成了多少故障,为什么发生以及可以采取什么措施来消除错误。[…]
  14. ^“系统软件”。密西西比大学。存档原本的2001年5月30日。
  15. ^希望,电脑。“什么是插件?”.www.computerhope.com。检索1月26日2022.{{}}:CS1维护:url-status(链接)
  16. ^“嵌入式软件 - 技术和趋势”。IEEE计算机协会。2009年5月至6月。存档来自2013年10月28日的原始。检索11月6日2013.
  17. ^“什么是编程工具? - 来自Techopedia的定义”.techopedia.com。检索1月26日2022.{{}}:CS1维护:url-status(链接)
  18. ^“脚本记录情报书的例子”.github。 2018年5月9日。存档从2015年11月6日的原始。检索11月6日2015.
  19. ^“免费软件与共享软件 - 差异和比较|差异”.www.diffen.com。检索1月26日2022.{{}}:CS1维护:url-status(链接)
  20. ^莫林,安德鲁;Urban,Jennifer;Sliz,Piotr(2012年7月26日)。“科学家程序员软件许可的快速指南”.PLOS计算生物学.8(7):E1002598。Bibcode2012PLSCB ... 8E2598M.doi10.1371/journal.pcbi.1002598.ISSN 1553-7358.PMC 3406002.PMID 22844236.
  21. ^“解释开源软件”.Ionos DigitalGuide。检索1月26日2022.{{}}:CS1维护:url-status(链接)
  22. ^GerardoConDíaz,“机器中的文本:美国版权法和许多软件本质,1974- 1978年,”技术和文化57(2016年10月),753–79。
  23. ^“ MSDN库”.Microsoft.com.存档来自2010年6月11日的原始。检索6月14日2010.
  24. ^v。Engelhardt,Sebastian(2008)。“软件的经济特性”.耶拿经济研究论文.2(2008–045)。存档来自2016年1月5日的原件。
  25. ^卡明斯基,丹(1999年3月2日)。“为什么开源是软件的最佳经济范式”.dankaminsky.com.存档从2012年5月22日的原始。检索11月19日2021.{{}}:CS1维护:日期和年(链接)

来源

外部链接