通过突变和人工选择的自动软件生成
背景技术:1.软件开发是一个复杂的过程,需要至少一种编程语言的重要知识和关于软件可以被部署在其上的计算设备的知识。复杂的软件可能需要一整个熟练的软件程序员团队来实现该软件。存在针对用于简化和自动化软件开发过程的新的和批准的机制的很多重要的领域。
技术实现要素:2.根据本公开的第一方面的计算设备包括处理器和计算机可读介质。计算机可读介质存储可执行指令,用于使处理器执行包括以下各项的操作:访问不满足目标软件对象的一个或多个功能要求的候选软件对象的初始版本;对候选软件对象的初始版本的可执行二进制对象代码进行突变以生成候选软件对象的第一中间版本;通过执行候选软件对象的第一中间版本和自动化测试集合来测试候选软件对象的第一中间版本以确定候选软件对象的第一中间版本是否满足一个或多个功能要求中的至少一个功能要求,并确定候选软件输出的第一中间版本的输出是否对应于预定的输出集合,自动化测试集合为候选软件对象的第一中间版本提供预定的输入集合;以及通过候选软件对象的连续中间版本对候选软件对象继续进行突变和测试,直到候选软件对象的版本满足一个或多个功能要求中的全部,其中候选软件的每个连续中间版本满足未由候选软件对象的先前版本满足的至少一个功能要求。
3.根据本公开的第二方面的方法由用于自动生成目标软件对象的数据处理系统执行,包括经由处理器访问不满足目标软件对象的一个或多个功能要求的候选软件对象的初始版本;经由处理器对候选软件对象的初始版本的可执行二进制对象代码进行突变,以生成候选软件对象的第一中间版本;经由处理器通过执行候选软件对象的第一中间版本和自动化测试集合来测试候选软件对象的第一中间版本以确定候选软件对象的第一中间版本是否满足一个或多个功能要求中的至少一个功能要求,并确定候选软件输出的第一中间版本的输出是否对应于预定的输出集合,自动化测试集合为候选软件对象的第一中间版本提供预定的输入集合;以及通过候选软件对象的连续中间版本对候选软件对象继续进行突变和测试,直到候选软件对象的版本满足一个或多个功能要求中的所有功能要求,其中候选软件的每个连续中间版本满足未由候选软件对象的先前版本满足的至少一个功能要求。
4.根据本公开的第三方面的存储器设备存储指令,该指令当在计算设备的处理器上执行时,使计算设备通过以下操作来自动生成目标软件对象:访问不满足目标软件对象的一项或多项功能要求的候选软件对象的初始版本;对候选软件对象的初始版本的可执行二进制对象代码进行突变以生成候选软件对象的第一中间版本;通过执行候选软件对象的第一中间版本和自动化测试集合来测试候选软件对象的第一中间版本以确定候选软件对象的第一中间版本是否满足一个或多个功能要求中的至少一个功能要求,并确定候选软件输出的第一中间版本的输出是否对应于预定的输出集合,自动化测试集合为候选软件对象的第一中间版本提供预定的输入集合;以及通过候选软件对象的连续中间版本对候选软件对
象继续进行突变和测试,直到候选软件对象的版本满足一个或多个功能要求中的全部功能要求,其中候选软件的每个连续中间版本满足未由候选软件对象的先前版本满足的至少一个功能要求。
5.提供本发明内容是为了以简化形式介绍概念的选择,这些概念将在下面的详细描述中进一步描述。本发明内容并非旨在识别所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。此外,要求保护的主题不限于解决在本公开的任意部分中指出的任意或所有缺点的实现。
附图说明
6.附图仅以示例的方式而非以限制的方式描绘了根据本教导的一种或多种实现。在附图中,类似的附图标记指代相同或相似的元件。此外,应当理解,附图不一定按比例绘制。
7.图1呈现了用于自动生成程序代码的系统的组件的功能图;
8.图2a和2b示出了使用突变和人工选择的自动化程序可执行程序代码的示例;
9.图3呈现了用于使用突变和人工选择来生成程序代码的示例过程的流程图;
10.图4是示出了示例软件架构的框图,其各个部分可以与本文描述的各种硬件架构结合使用,其可以实现本文描述的特征中的任意一个;以及
11.图5是示出了被配置为从机器可读介质读取指令并执行本文描述的特征中的任意一个的组件的框图。
具体实施方式
12.在以下详细描述中,通过示例的方式阐述了许多具体细节,以便提供对相关教导的透彻理解。然而,应该明显的是,可以在没有这些细节的情况下实践本教导。在其他情况下,众所周知的方法、过程、组件和/或电路已经在没有细节的相对较高的水平上进行了描述,以便于避免使本教导的方面不必要地模糊。
13.图1图示了可以在数据处理系统上实现的示例计算环境100。数据处理系统可以包括单个计算设备,或者图1中所示的组件的功能可以跨多个计算设备分布。数据处理系统可以包括可以被体现为例如服务器计算机、客户端计算机、个人计算机(pc)、平板计算机、膝上型计算机的独立机器。其他类型的计算设备也可用于执行本文公开的自动化软件开发技术。
14.示例计算环境100包括突变单元110、人工选择单元120、测试环境115、目标软件对象的功能要求135、功能要求测试140、基础软件对象105、候选软件对象125和目标软件对象130。突变单元110、人工选择单元120或两者可以被实现为被存储在数据处理系统的持久存储器中的处理器可执行程序代码。
15.示例计算环境100可用于通过突变和人工选择的过程来自动生成可执行程序代码。生物系统可以通过突变和自然选择来发展出新的生命形式。突变将改变引入生命形式的生物系统。当那些最能适应于在环境压力中生存的生命形式继续生存,而那些不适应于在这些环境压力中生存的生命形式灭绝时,自然选择就会发生。本文公开的技术使用这些概念通过突变和人工选择的过程来自动生成可执行程序代码。如本文所使用的,突变表示软件对象被改变以创建新的候选软件对象的过程。如本文所用,人工选择指示通过突变所
生成的候选软件对象被测试以确定候选软件对象是否可执行以及候选软件对象是否满足目标软件对象的一个或多个功能要求的过程。
16.为了使用该过程生成新软件,可以首先为目标软件对象开发功能要求集合。功能要求定义要生成的目标软件对象的功能。软件对象的功能可以根据(多个)输入和(多个)输出来被定义。如果提供了特定的一个或多个输入,则预期特定的一个输出或多个输出。定义要开发的软件的功能要求是软件开发中的常见做法。
17.功能要求可用于开发测试用例,测试用例可用于确定候选软件对象是否可以执行特定功能要求。可以开发测试输入和预期输出的集合来测试特定的功能要求。这些测试可以被形式化为可执行脚本或程序代码的集合,这些可执行脚本或程序代码的集合可以由人工选择单元120自动执行,以测试开发中的软件是否按期望执行。
18.在传统的软件开发过程中,程序员将接收软件的功能要求并设计和实现软件的源代码。源代码是人类可读的指令集合,其可以被编译或解释为计算机可执行目标代码或机器代码。编写源代码非常耗时,并且需要其中软件被开发的计算机语言的广泛知识以及有关为其开发软件的计算设备的知识。即使是简单程序的软件也可能需要大量代码行。复杂程序的软件可能包括数千行程序代码,并且可能需要程序员团队来开发。一旦编写完成,程序代码可能会经过多轮测试,以确保程序代码按预期执行。
19.本文公开的技术消除了程序员或程序员团队编写程序代码的需要。而是可以定义针对“目标软件对象”的功能要求集合,并且可以通过突变和人工选择的迭代过程来自动地生成目标软件对象的可执行程序代码,这将在以下示例中详细描述。目标软件对象130可以是独立程序或者可以是程序套件的组件。突变单元110可以执行本文公开的自动化软件开发技术的突变方面,并且人工选择单元120可以执行这些技术的人工选择方面。
20.突变单元110可以访问基础软件对象105并且还可以访问突变单元配置参数145。基础软件对象110可以是可执行程序对象的外壳,其可以用作在其上突变可以被执行的框架。基础软件对象105可以是可移植可执行(pe)格式或其他可执行格式。突变单元配置信息145可以包括识别基础软件对象105的文件格式的信息。突变单元110可以能够对多种不同的可执行文件格式进行操作。基础软件对象105可以从基础软件对象的库中选择,基础软件对象库包括适合在各种计算环境中使用的各种不同文件格式。突变单元配置参数145可以包括基础软件对象库中基础软件对象105的标识符,并且突变单元110可以访问基础软件对象库以获得基础软件对象105的副本。库可以被实现为数据库或数据处理系统的持久存储器中的其他数据存储库。库可以提供允许用户从库中添加、修改和/或删除基础软件对象的用户界面。突变单元110还可以提供允许用户创建、查看、修改或删除突变单元配置参数145的用户界面。用户界面还可以允许用户为要开发的多个目标软件对象130中的每一个创建突变单元配置参数145的版本。
21.突变单元配置参数145可以提供基础软件对象105可以位于其中的计算环境的存储器位置。突变单元配置参数145还可以提供关于基础软件对象105的底层结构的信息,诸如基础软件对象105的各个段或分段的大小和/或偏移量。例如基础软件对象105可以包括头部段和代码段,并且突变单元配置参数145可以指示这些分段被定位的位置。头部段可以包括诸如将由基础软件对象105使用的库、导入地址表等的信息。突变单元110在对基础软件对象105或候选软件对象125进行突变时不改变在头部段中包括的信息。
22.可执行软件由表示程序代码、数据和软件的其他组件的位值序列组成。突变单元110可以通过改变基础软件对象105的可执行代码段的位来突变基础软件对象105以生成候选软件对象125。在一些实现中,基础软件对象105可以以空白可执行代码段开始,并且突变单元110可以生成该段的可执行程序代码。在其他实现中,基础软件对象105可以包括一些可执行程序代码,其可能已经满足要开发的目标软件对象130的功能要求中的一个或多个。在这样的实现中,突变单元110可以保护在基础软件对象105中已经包括的功能代码分段并且在基础软件对象105的代码段的第二分段中开始突变过程。突变单元配置参数145可以指定基础软件对象105包括第一代码分段,第一代码分段包括功能可执行代码。突变单元配置参数145可以指示基础软件对象105的代码段内开始突变过程的偏移量。现有功能代码将不会被突变单元110改变,同时仍然提供使用本文公开的突变和人工选择技术向基础软件对象105添加附加功能的机会。
23.突变单元110可以对基础软件对象105进行突变以生成候选软件对象125。候选软件对象125可以由突变单元110输出到测试环境115。突变单元110可以替代地将候选软件对象125输出到向人工选择单元120,或人工选择单元120可以访问候选软件对象125并将候选软件对象125复制到测试环境115的存储器位置。测试环境115可以是隔离的计算环境,其中候选软件对象125的功能可以在不受任意其他软件影响的情况下被测试。在一些实现中,测试环境115可以被实现为虚拟机,该虚拟机可以模拟目标软件对象打算在其上被使用的计算设备的属性。
24.突变单元110可以通过一系列按位置换来突变基础软件对象105或候选软件对象125的代码段。如关于前述示例所讨论的,可执行程序代码仅由以特定序列的位值一和位值零的序列组成,该特定序列定义了可执行程序代码的指令、数据和其他组件。可能有多种方法可以实现相同的功能。因此,可能有可以执行期望的功能的多于一个的位值序列。
25.突变单元110使用软件可以被简化为位模式的思想来生成候选软件对象125。候选软件对象125的代码段最初可以是空白的,并且突变单元110可以顺序地逐步通过特定长度的每个可能的位序列,以及(1)将候选软件对象125的代码段的分段设置为该二进制序列;(2)将候选软件对象125放入测试环境115或将候选软件对象125提供给人工选择单元120;(3)向人工选择单元115发送信号以测试候选软件对象125;(4)从人工选择单元115接收测试结果。突变单元110可以响应于人工选择单元115指示候选软件对象125满足一个或多个附加功能要求,锁定正被置换的代码段的分段的内容。否则,突变单元110可以通过选择要测试的下一个位序列并将候选二进制软件对象125的代码段的分段的值设置为该值来对先前被突变的代码段的分段继续进行突变。突变过程可用于生成满足目标软件对象的一个或多个功能要求的全功能目标软件对象130,而不需要程序员编写任意程序代码。
26.人工选择单元120可以访问与目标软件对象130相关联的功能要求测试140。功能要求测试140可以被存储在计算环境100的数据库或其他持久存储器中。功能要求测试140可以是可执行程序代码或脚本的集合,其用于测试候选软件对象125以确定候选软件对象125是否:(1)可执行,以及(2)满足与目标软件对象130相关联的功能要求中的一个或多个功能要求。功能要求测试140可以包括针对目标软件对象140的每个功能要求的一个或多个测试的集合。人工选择单元120可以执行与每个功能要求相关联的一个或多个测试以确定候选软件对象125是否满足那个功能要求。每个测试可以提供可以提供给候选软件对象的
一个或多个输入的集合,以及与这些输入相关联的一个或多个预期输出的集合。
27.如果候选软件对象125为与功能要求相关联的每个测试生成(多个)预期输出,则人工选择单元125可以确定候选软件对象125满足该功能要求。如果候选软件对象125满足与目标软件对象相关联的所有功能要求,则人工选择单元125可以采用候选软件对象125作为全功能软件对象并将候选软件对象125作为目标软件对象130输出。
28.如果候选软件对象125满足与目标软件对象130相关联的功能要求中的一个或多个功能要求的子集,则人工选择单元120可以向突变单元110发送候选软件对象125满足一个或多个功能要求的信号。突变单元110可以对候选软件对象125继续进行突变,但是突变单元110可以锁定候选软件对象125的代码段的第一分段的当前内容,以防止功能代码被该代码段的进一步突变无意中破坏。突变单元110然后可以开始突变代码段的第二分段以尝试生成满足至少一个附加功能要求的可执行代码。
29.如果候选软件对象125不满足与目标软件对象130相关联的任意功能要求。候选软件对象125可以被人工选择单元125丢弃。人工选择单元120可以向突变单元110发送候选软件对象125应该继续被突变而不锁定被突变的代码段的分段的信号。
30.如果候选软件对象125满足突变和人工选择的先前迭代中的至少一个功能要求,并且候选软件对象125现在满足当前迭代中的至少一个附加功能要求但不是目标软件对象130的所有功能要求,则人工选择单元120可以向突变单元110发送信号,指示候选软件对象具有应该被保护的附加功能。突变单元110可以保护候选软件对象125的代码段的该分段免于额外的突变,并且突变单元110可以对候选软件对象125的代码段的新分段继续进行突变。在图2a和2b中图示了该过程的示例,这将在下面详细讨论。
31.图2a和2b图示了使用突变和人工选择的自动化程序可执行程序代码的示例,其图示了在前面的示例中讨论的概念。在这些示例中,对基础软件对象205执行突变和人工选择过程以生成目标软件对象270。基础软件对象205包括头部段210和代码段215。头部段210包括可包括库文件信息、导入地址表和/或支持可执行代码段的其他信息。头部不被突变单元110改变。基础软件对象205可以包括除了头部段之外或代替头部段的其他段,这取决于基础软件对象205的格式,并且突变单元110不会改变这些段。基础软件对象205中的代码段215在该示例中是空白的,这意味着基础软件对象205中已经不存在起作用的可执行程序代码,并且基础软件对象205用作突变单元110可以在其上操作的空框架。
32.为了说明这些概念,图2a和2b中说明的示例说明了仅具有三个功能要求的简单计算器程序对象的自动化生成:(1)加法功能;(2)减法功能;(3)乘法功能。该示例的功能要求非常简单,以说明本文公开的突变和人工选择概念。
33.与这些功能要求中的每一个相关联的测试可以被定义并被添加到功能要求测试140,其可以由人工选择单元120执行以确定候选软件对象是否满足目标软件对象130的功能要求中的任意一个功能要求。例如用户可以开发一系列测试输入和预期输出来测试计算器应用的每个功能要求。测试可以被开发为脚本或简单的可执行程序,这些脚本或简单的可执行程序向候选软件对象提供测试输入集合,并针对这些测试输入集合中的每一个从候选软件对象获取输出。人工选择单元120可以比较来自候选软件对象的输出以确定输出是否与每个测试的预期输出相匹配。此示例中的预期输出是简单的数值,但功能要求可以指定更复杂的输出。例如目标软件对象可以接收输入数据,并且与本示例中讨论的简单数学
计算相比,对输入数据执行更复杂的计算、更改或其他处理。
34.候选软件对象220a图示了突变单元110的输出的示例。候选软件对象220a包括可以与基础软件对象205的头部段210完全相同的头部段225a,和可以与基础软件对象205的代码段215完全相同的代码段230a。候选软件对象220a包括生成的代码分段235a。生成的代码分段235a由突变单元110生成的位集合组成。生成的代码分段235a可能已经通过突变单元110的多次突变迭代生成。候选软件对象220a可以通过人工选择单元120进行测试来确定候选软件对象220a是否满足与目标软件对象130相关联的功能要求中的一个或多个。
35.在这个示例中,人工选择单元120可以对候选软件对象220a执行功能要求测试140,以确定候选软件对象220a是否满足目标软件对象130的至少一个功能要求。在这个示例中,候选软件对象220a满足第一功能要求,诸如计算器应用的添加要求,并且作为响应,人工选择单元120可以向突变单元110发送以下指示:候选软件对象220a满足与目标软件对象270相关联的第一功能要求,但是还有额外的功能要求要被满足。
36.突变单元110可以基于候选软件对象220a生成新的候选软件对象220b。突变单元110可以将所生成的代码分段235a标记为功能代码分段240b,以指示其中的程序代码段满足目标软件对象130的功能要求并且应该被保留以防止额外的突变。在这个示例中,突变单元可以对候选软件对象220b继续进行突变,因为候选软件对象220b仍然没有满足计算器应用的功能要求中的两个。
37.突变单元110突变候选软件对象220b以产生候选软件对象220c。功能代码分段242c包括来自先前突变迭代的功能代码分段242b的内容。突变单元110保护功能代码分段240c并开始突变由生成的代码分段235c表示的第二代码分段的内容。由于候选软件对象220b首先被突变,因此生成的代码235c可以包括突变单元110的一次或多次突变迭代。
38.人工选择单元120可以对候选软件对象220c执行功能要求测试140以确定候选软件对象220c是否满足目标软件对象130的至少一个附加功能要求。在该示例中,候选软件对象220c满足第二功能要求,诸如对计算器应用的减法要求。人工选择单元120可以向突变单元110发送候选软件对象220c满足第二功能要求的指示。
39.突变单元110可以基于候选软件对象220c生成候选软件对象220d。突变单元110可以将从候选软件中生成的代码分段235c标记为第二功能代码分段242d。因此,与目标软件对象130的前两个功能要求相关联的程序代码已经被满足,并且突变单元110已经保护了包括该代码的代码段的部分免于进一步突变。
40.突变单元110然后可以进一步突变候选软件对象220d以产生候选软件对象220e。候选软件对象220e包括生成的代码分段235e。人工选择单元120可以对候选软件对象220e执行功能要求测试140,以确定候选软件对象220e是否满足目标软件对象130的至少一个附加功能要求。在本示例中,候选软件对象220e满足第三功能要求,对计算器应用的乘法要求。人工选择单元120可以向突变单元110发送候选软件对象220e满足第三功能要求和最终功能要求的指示。突变单元110可基于候选软件对象220e生成目标软件对象270。目标软件对象270满足在该示例中为目标软件对象定义的所有功能要求。
41.可以将目标软件对象270添加到软件数据库或数据存储库。目标软件对象270可以从数据库或数据存储库中下载或复制,并且可以被部署到一个或多个计算设备。目标软件对象270可以是软件套件的组件并且可以与软件套件的已经使用本文公开的突变和人工选
择技术来成功地生成的其他组件一起被存储。
42.图3是示出了由数据处理系统执行的示例过程300的实现的流程图,其用于使用突变和人工选择来生成程序代码。在一些示例中,过程300中的一些或全部可以组合结合图1和2a-2b讨论的任意特征来执行。过程300可以由数据处理系统实现,诸如在前面的示例中描述的通信平台或图4中所示的示例软件架构400和/或图5中所示的示例机器500,并且可以由在数据处理系统上执行的消息传递应用执行。
43.过程300可以包括第一操作310,其中候选软件对象(本文也称为基础软件对象)的初始版本不满足目标软件对象的一个或多个功能要求。如在前面的示例中所讨论的,可以选择具有基本上空白或空且其中不包括可执行代码的代码段的基础软件对象。在其他实现中,基础软件对象可以包括一些功能性可执行程序代码。在代码段包括一些功能性可执行程序代码的实现中,突变单元110可以在突变基础软件对象时保护现有功能代码。
44.过程300可以包括第二操作320,第二操作320包括突变候选软件对象的初始版本的可执行二进制对象代码以生成候选软件对象的第一中间版本。如在前面的示例中所讨论的,突变单元110可以突变二进制对象的代码段以生成候选软件对象的新版本,该候选软件对象的新版本可以被人工选择单元120测试以确定候选软件对象的新版本是否满足目标软件对象的一项或多项功能要求。
45.过程300可以包括第三操作330,第三操作330包括测试候选软件对象的第一中间版本以确定候选软件对象的第一中间版本是否满足一个或多个功能要求中的至少一个。可以通过执行候选软件对象的第一中间版本和自动化功能测试集合来执行测试,自动化功能测试集合向候选软件对象的第一中间版本提供预定的输入集合,并确定候选软件输出的第一中间版本的输出是否对应于预定的输出集合。功能测试可以由用户基于目标软件对象的功能要求来定义。用户可以为每个功能要求定义测试集合,其中输入集合被提供给候选软件对象的中间版本。如果候选软件对象的中间版本的输出对应于输入的预期值,则候选对象的中间版本满足该测试。如果满足与功能要求相关的所有测试,则候选软件对象的第一中间版本满足该功能要求。人工选择单元120向突变单元110发送指示候选软件对象的第一中间版本满足功能要求的信号。突变单元120可以保护包括功能代码的代码段的部分免于进一步突变并且创建可以继续被突变和测试的候选软件对象的第二中间版本。
46.过程300可以包括第四操作340,该第四操作340包括通过候选软件对象的连续中间版本对候选软件对象继续进行突变和测试,直到候选软件对象的版本满足一个或多个功能要求中的全部功能要求。候选软件的每个连续中间版本满足候选软件对象的先前版本不满足的至少一个功能要求。通过迭代过程,可以开发复杂的可执行程序代码,而不需要用户编写程序代码来执行目标软件对象的功能。软件开发过程是一个迭代过程,其中可以通过突变和人工选择的每次迭代添加附加功能,直到获得目标软件对象的期望功能。
47.结合图1-3描述的系统、设备和技术的详细示例在本文中呈现以说明本公开及其益处。这样的使用示例不应被解释为对本公开的逻辑过程实施例的限制,也不应将用户界面方法与本文所描述的那些的变体视为在本公开的范围之外。应当理解,对显示或呈现项目(诸如但不限于在显示设备上呈现图像、经由一个或多个扬声器呈现音频和/或振动设备)的引用包括发布指令、命令和/信号,导致或合理预期会导致设备或系统显示或呈现该项目。在一些实施例中,图1-3中描述的各种特征在各自的模块中实现,这些模块也可以被
称为和/或包括逻辑、组件、单元和/或机制。模块可以构成软件模块(例如在机器可读介质上体现的代码)或硬件模块。
48.在一些示例中,硬件模块可以机械地、电子地或利用其任意合适的组合来实现。例如硬件模块可以包括被配置为执行某些操作的专用电路或逻辑。例如硬件模块可以包括专用处理器,诸如现场可编程门阵列(fpga)或专用集成电路(asic)。硬件模块还可以包括由软件临时配置以执行某些操作的可编程逻辑或电路,并且可以包括用于这种配置的机器可读介质数据和/或指令的一部分。例如硬件模块可以包括在可编程处理器内涵盖的软件,该可编程处理器被配置为执行软件指令集合。应当理解,以机械方式、在专用和永久配置的电路中或在临时配置的电路(例如由软件配置)中实现硬件模块的决定可能受成本、时间、支持和工程考虑的驱动。
49.因此,短语“硬件模块”应理解为涵盖能够执行某些操作并且可以以某种物理方式被配置或布置的有形实体,即物理上被构造、永久地被配置(例如硬连线)和/或临时地被配置(例如被编程)为以某种方式操作或执行本文描述的某些操作的实体。如本文所用,“硬件实现的模块”指的是硬件模块。考虑到硬件模块临时地被配置(例如被编程)的示例,每个硬件模块不需要在任意一个时间实例上被配置或实例化。例如在硬件模块包括通过软件被配置为成为专用处理器的可编程处理器的情况下,该可编程处理器可以在不同的时间分别被配置为不同的专用处理器(例如包括不同的硬件模块)。软件可以相应地配置一个或多个处理器,例如以在一个时间实例构成特定硬件模块并且在不同时间实例构成不同的硬件模块。使用一个或多个处理器实现的硬件模块可以被称为“处理器实现的”或“计算机实现的”。
50.硬件模块可以向其他硬件模块提供信息以及从其他硬件模块接收信息。因此,所描述的硬件模块可以被认为是通信耦合的。在多个硬件模块同时存在的情况下,可以通过硬件模块中的两个或多个硬件模块之间的信号传输(例如通过适当的电路和总线)来实现通信。在多个硬件模块在不同时间被配置或实例化的实施例中,这些硬件模块之间的通信可以例如通过在多个硬件模块可以访问的存储器设备中信息的存储和检索来实现。例如一个硬件模块可以执行操作并将输出存储在存储设备中,然后另一个硬件模块可以访问存储设备以检索和处理存储的输出。
51.在一些示例中,方法的操作中的至少一些操作可以由一个或多个处理器或处理器实现的模块来执行。此外,一个或多个处理器还可操作以支持“云计算”环境中的相关操作的性能或作为“软件即服务”(saas)。例如至少一些操作可以由多台计算机(作为包括处理器的机器的示例)和/或在多台计算机之间执行,其中这些操作可经由网络(例如互联网)和/或经由一个或多个软件接口(例如应用程序接口(api))访问。某些操作的性能可以分布在处理器之间,不仅驻留在单个机器内,而且部署在多台机器上。处理器或处理器实现的模块可以位于单个地理位置(例如在家庭或办公室环境中,或服务器场内),或者可以分布在多个地理位置。
52.图4是示出示例软件架构402的框图400,其各个部分可以与本文描述的各种硬件架构结合使用,这些硬件架构可以实现任意上述特征。图4是软件架构的非限制性示例,并且应当理解,可以实现许多其他架构以促进本文描述的功能。软件架构402可以在诸如图5的机器500的硬件上执行,其包括处理器510、存储器530和输入/输出(i/o)组件550等等。代
表性硬件层404被示出并且可以代表例如图5的机器500。代表硬件层404包括处理单元406和相关联的可执行指令408。可执行指令408代表软件架构402的可执行指令,包括本文描述的方法、模块等的实现。硬件层404还包括存储器/存储装置410,其还包括可执行指令408和伴随数据。硬件层404还可以包括其他硬件模块412。处理单元408持有的指令408可以是存储器/存储装置410持有的指令408的一部分。
53.示例软件架构402可以被概念化为层,每个层提供各种功能。例如软件架构402可以包括层和组件,诸如操作系统(os)414、库416、框架418、应用420和表示层444。在操作上,应用420和/或层内的其他组件可以调用api调用424到其他层并接收相应的结果426。所示的层本质上是代表性的,并且其他软件架构可以包括附加的或不同的层。例如一些移动或专用操作系统可能不提供框架/中间件418。
54.os 414可以管理硬件资源并提供公共服务。os 414可以包括例如内核428、服务430和驱动程序432。内核428可以充当硬件层404和其他软件层之间的抽象层。例如内核428可以负责存储器管理、处理器管理(例如调度)、组件管理、联网、安全设置等。服务430可以为其他软件层提供其他公共服务。驱动程序432可以负责控制底层硬件层404或与底层硬件层404对接。例如取决于硬件和/或软件配置,驱动程序432可以包括显示驱动程序、相机驱动程序、存储器/存储装置驱动程序、外围设备驱动程序(例如经由通用串行总线(usb))、网络和/或无线通信驱动程序、音频驱动程序等。
55.库416可以提供可以由应用420和/或其他组件和/或层使用的公共基础设施。库416通常提供供其他软件模块使用以执行任务的功能,而不是直接与os 414交互。库416可以包括可以提供诸如存储器分配、字符串操作、文件操作的功能的系统库434(例如c标准库)。此外,库416可以包括api库436,诸如媒体库(例如支持图像、声音和/或视频数据格式的呈现和操作)、图形库(例如用于在显示器上渲染2d和3d图形的opengl库)、数据库库(例如sqlite或其他关系数据库函数)和web库(例如可能提供web浏览功能的webkit)。库416还可以包括多种其他库438,以为应用420和其他软件模块提供许多功能。
56.框架418(有时也称为中间件)提供了可以由应用420和/或其他软件模块使用的更高级别的公共基础设施。例如框架418可以提供各种图形用户界面(gui)功能、高级资源管理或高级定位服务。框架418可以为应用420和/或其他软件模块提供广泛的其他api。
57.应用420包括内置应用440和/或第三方应用442。内置应用440的示例可以包括但不限于联系人应用、浏览器应用、位置应用、媒体应用、消息应用和/或游戏应用。第三方应用442可以包括由除特定平台的供应商之外的实体所开发的任意应用。应用420可以使用经由os 414、库416、框架418和表示层444可用的功能来创建用户界面以与用户交互。
58.一些软件架构使用虚拟机,如虚拟机448所示。虚拟机448提供执行环境,其中应用/模块可以像在硬件机器(诸如例如图5的机器500)上执行一样执行。虚拟机448可以由主机os(例如os 414)或管理程序托管,并且可以具有管理虚拟机448的操作和与主机操作系统的互操作的虚拟机监视器446。可能不同于虚拟机外部的软件架构402的软件架构在虚拟机448内执行,诸如os 414、库452、框架454、应用456和/或表示层458。
59.图5是示出示例机器500的组件的框图,该示例机器500被配置为从机器可读介质(例如机器可读存储介质)读取指令并执行本文描述的任意特征。示例机器500是计算机系统的形式,其中可以执行用于使机器500执行本文描述的任意特征的指令516(例如以软件
组件的形式)。因此,指令516可用于实现本文所述的模块或组件。指令516使未编程和/或未配置的机器500作为被配置为执行所描述的特征的特定机器进行操作。机器500可以被配置为作为独立设备操作或可以耦合(例如联网)到其他机器。在联网的部署中,机器500可以在服务器-客户端网络环境中以服务器机器或客户端机器的身份运行,或者作为对等或分布式网络环境中的节点运行。机器500可以体现为例如服务器计算机、客户端计算机、个人计算机(pc)、平板计算机、膝上型计算机、上网本、机顶盒(stb)、游戏和/或娱乐系统、智能手机、移动设备、可穿戴设备(例如智能手表)和物联网(iot)设备。此外,虽然仅图示了单个机器500,但术语“机器”包括单独或联合执行指令516的机器的集合。
60.机器500可以包括处理器510、存储器530和i/o组件550,它们可以经由例如总线502通信地耦合。总线502可以包括经由各种总线技术和协议来耦合机器500的各种元件的多条总线。在示例中,处理器510(包括例如中央处理单元(cpu)、图形处理单元(gpu)、数字信号处理器(dsp)、asic或其合适的组合)可以包括可以执行指令516和处理数据的一个或多个处理器512a到512n。在一些示例中,一个或多个处理器510可以执行由一个或多个其他处理器510提供或识别的指令。术语“处理器”包括多内核处理器,该多内核处理器包括可以同时执行指令的内核。尽管图5显示了多个处理器,但机器500可以包括具有单个内核的单个处理器、具有多个内核的单个处理器(例如多内核处理器)、每个具有单个内核的多个处理器、每个具有多个内核的多个处理器核心、或其任意组合。在一些示例中,机器500可以包括分布在多台机器之间的多个处理器。
61.存储器/存储装置530可以包括主存储器532、静态存储器534或其他存储器以及存储单元536,其均可以诸如经由总线502被处理器510访问。存储单元536和存储器532、534存储体现本文描述的任意一个或多个功能的指令516。存储器/存储530还可以存储用于处理器510的临时、中间和/或长期数据。指令516在其执行期间还可以完全或部分地驻留在存储器532、534内、存储单元536内、处理器510中的至少一个内(例如,命令缓冲器或高速缓冲存储器内)、i/o组件550中的至少一个的存储器内或其任何合适的组合。因此,存储器532、534、存储单元536、处理器510中的存储器和i/o组件550中的存储器是机器可读介质的示例。
62.如本文所用,“机器可读介质”是指能够临时或永久存储使机器500以特定方式操作的指令和数据的设备,并且可以包括但不限于随机访问存储器(ram)、只读存储器(rom)、缓冲存储器、闪存、光存储介质、磁存储介质和设备、高速缓存、网络可访问或云存储、其他类型的存储和/或其任意合适的组合。术语“机器可读介质”适用于单个介质或多种介质的组合,用于存储指令(例如指令516)以供机器500执行,使得指令在由机器500的一个或多个处理器510执行时使机器500执行本文描述的特征中的一个或多个。因此,“机器可读介质”可以指单个存储设备,以及包括多个存储装置或设备的“基于云”的存储系统或存储网络。术语“机器可读介质”不包括信号本身。
63.i/o组件550可以包括适用于接收输入、提供输出、产生输出、发送信息、交换信息、捕获测量等的多种硬件组件。特定机器中包括的特定i/o组件550将取决于机器的类型和/或功能。诸如移动电话的移动设备可能包括触摸输入设备,而无头服务器或iot设备可能不包括这样的触摸输入设备。图5中所示的i/o组件的特定示例绝不是限制性的,其他类型的组件可以被包括在机器500中。i/o组件550的分组仅仅是为了简化这个讨论,并且分组绝不
是限制性的。在各种示例中,i/o组件550可以包括用户输出组件552和用户输入组件554。用户输出组件552可以包括例如用于显示信息的显示组件(例如液晶显示器(lcd)或投影仪)、声学组件(例如扬声器)、触觉组件(例如振动电机或力反馈装置)和/或其他信号发生器。用户输入组件554可以包括例如字母数字输入组件(例如键盘或触摸屏)、定点组件(例如鼠标设备、触摸板或其他定点工具)和/或触觉输入组件(例如提供位置和/或触摸力或触摸手势的物理按钮或触摸屏)被配置为接收各种用户输入,诸如用户命令和/或选择。
64.在一些示例中,i/o组件550可以包括生物特征组件556、运动组件558、环境组件560和/或位置组件562,以及广泛的其他物理传感器组件。生物特征组件556可以包括例如检测身体表情(例如面部表情、声音表达、手或身体姿势,或眼睛跟踪)、测量生物信号(例如心率或脑电波)和识别一个人(例如经由语音、视网膜、指纹和/或基于面部的识别)。运动组件558可以包括例如加速度传感器(例如加速度计)和旋转传感器(例如陀螺仪)。环境组件560可以包括例如照明传感器、温度传感器、湿度传感器、压力传感器(例如气压计)、声学传感器(例如用于检测环境噪声的麦克风)、接近传感器(例如附近物体的红外感应)和/或可提供与周围物理环境相对应的指示、测量或信号的其他组件。位置组件562可以包括例如位置传感器(例如全球定位系统(gps)接收器)、高度传感器(例如可以从中得出高度的气压传感器)和/或方向传感器(例如磁力计)。
65.i/o组件550可以包括通信组件564,实现多种技术,可操作以经由相应的通信耦合572和582将机器500耦合到(多个)网络570和/或(多个)设备580。通信组件564可以包括一个或多个网络接口组件或与(多个)网络570对接的其他合适的设备。通信组件564可以包括例如适于提供有线通信、无线通信、蜂窝通信、近场的组件通信(nfc)、蓝牙通信、wi-fi和/或经由其他方式的通信。(多个)设备580可以包括其他机器或各种外围设备(例如经由usb耦合)。
66.在一些示例中,通信组件564可以检测标识符或包括适于检测标识符的组件。例如通信组件564可以包括射频识别(rfid)标签阅读器、nfc检测器、光学传感器(例如一维或多维条形码或其他光学代码)和/或声学检测器(例如用于识别标记的音频信号的麦克风)。在一些示例中,可以基于来自通信组件562的信息来确定位置信息,诸如但不限于经由互联网协议(ip)地址的地理位置、经由wi-fi、蜂窝、nfc、蓝牙或其他无线站识别和/或信号三角测量的位置。
67.虽然已经描述了各种实施例,但该描述旨在是示例性的,而不是限制性的,并且应当理解,在实施例的范围内的更多实施例和实现是可能的。尽管在附图中示出了许多可能的特征组合并且在该详细描述中进行了讨论,但是所公开的特征的许多其他组合也是可能的。除非特别限制,任意实施例的任意特征都可以与任意其他实施例中的任意其他特征或元素组合使用或替代任意其他实施例中的任意其他特征或元素。因此,应当理解,本公开中所示和/或讨论的任意特征可以以任意合适的组合一起实现。因此,除了根据所附权利要求及其等同物之外,实施例不受限制。此外,可以在所附权利要求的范围内进行各种修改和改变。
68.虽然前面已经描述了被认为是最好的模式的内容和/或其他示例,但是应当理解,可以在其中进行各种修改,并且可以以各种形式和示例来实现本文公开的主题,并且这些教导可以应用在许多应用中,本文仅描述了其中的一些。所附权利要求旨在对落入本教导
的真实范围内的任意和所有应用、修改和变化提出权利要求。
69.除非另有说明,否则在本说明书中,包括在随后的权利要求中提出的所有测量值、值、额定值、位置、大小、尺寸和其他规格,都是近似的,而不是精确的。它们旨在具有与它们所涉及的功能以及它们所涉及的领域中的惯例一致的合理范围。
70.保护范围仅由以下权利要求限制。当根据本说明书和随后的审查历史进行解释时,该范围旨在并且应该被解释为与权利要求中使用的语言的普通含义一致,并且涵盖所有结构和功能等价物。尽管如此,权利要求中的任意一项均不旨在涵盖未能满足《专利法》第101、102或103条要求的主题,也不应以这种方式解释它们。特此否认对此类主题的任意意外涵盖。
71.除上文所述外,任意已陈述或说明的内容均不旨在或不应被解释为使任意组件、步骤、特征、对象、利益、优势或等同物奉献给公众,无论是否权利要求书中是否提及。
72.应当理解,本文使用的术语和表达具有与这些术语和表达相对于它们对应的相应的调查和研究领域所赋予的普通含义,除非本文另外阐述了特定含义。诸如第一和第二等关系术语可仅用于将一个实体或动作与另一个区分开来,而不必要求或暗示此类实体或动作之间的任意实际此类关系或顺序。术语“包括”、“包含”或其任意其他变体旨在涵盖非排他性包含,使得包括元素列表的过程、方法、物品或设备不仅包括那些元素,而且可能包括未明确列出的其他元素或此类过程、方法、物品或设备所固有的元素。在没有进一步限制的情况下,以“一”或“一个”开头的元素不排除在包括该元素的过程、方法、物品或设备中存在其他相同元素。
73.提供公开的摘要以允许读者快速确定技术公开的性质。提交的理解是它不会被用来解释或限制权利要求的范围或含义。此外,在上述具体实施方式中,可以看出,为了简化公开内容,在各种示例中将各种特征组合在一起。该公开方法不应被解释为反映权利要求需要比每个权利要求中明确列举的更多特征的意图。相反,如以下权利要求所反映的,发明主题不在于单个公开示例的所有特征。因此,以下权利要求在此并入具体实施方式中,每个权利要求作为单独要求保护的主题独立存在。