CN117441157A - 软件更新器 - Google Patents
软件更新器 Download PDFInfo
- Publication number
- CN117441157A CN117441157A CN202280038984.5A CN202280038984A CN117441157A CN 117441157 A CN117441157 A CN 117441157A CN 202280038984 A CN202280038984 A CN 202280038984A CN 117441157 A CN117441157 A CN 117441157A
- Authority
- CN
- China
- Prior art keywords
- code
- updated
- handler
- strings
- string
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 87
- 238000004891 communication Methods 0.000 claims description 67
- 230000008569 process Effects 0.000 claims description 34
- 230000004044 response Effects 0.000 claims description 3
- 239000003795 chemical substances by application Substances 0.000 description 114
- 238000012545 processing Methods 0.000 description 55
- 230000014509 gene expression Effects 0.000 description 54
- 230000006870 function Effects 0.000 description 46
- 238000010586 diagram Methods 0.000 description 17
- 230000003068 static effect Effects 0.000 description 17
- 238000004458 analytical method Methods 0.000 description 16
- 238000011161 development Methods 0.000 description 14
- 230000005540 biological transmission Effects 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 238000010276 construction Methods 0.000 description 3
- 238000012552 review Methods 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 241000257303 Hymenoptera Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000004020 conductor Substances 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000005022 packaging material Substances 0.000 description 1
- 238000003908 quality control method Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
- Saccharide Compounds (AREA)
Abstract
在一些方面,提供了一种用于使用规则引擎更新软件的方法。规则引擎根据一组规则来选择用于更新文件的多个代码串中的未更新的代码串的处理程序。该组规则将处理程序与更新唯一的未更新的代码串相关联。规则引擎还指示处理程序扫描多个代码串,基于扫描识别与处理程序唯一相关联的未更新的代码串,并且更新未更新的代码串。规则引擎进一步从处理程序接收与处理程序唯一相关联的未更新的代码串是已更新的代码串的指示。另外,规则引擎至少生成已更新的代码串以用于在显示屏上显示。
Description
优先权主张
本申请要求2021年6月1日提交的题为“SOFWARE UPDATER”的美国专利申请序列号17/336,260的优先权和权益,所述申请的全部内容通过引用并入本文,如同在下文中完整阐述一样,并且用于所有适用目的。
技术领域
下面讨论的技术总体涉及软件,并且更具体地涉及用于更新和修改软件。
背景技术
软件开发者持续地实施用于软件的新的长期支持(LTS)发布。LTS可以包括产品生命周期管理策略,其中计算机软件的稳定发布被维护比标准版次更长的时间段。LTS通常可以为开源软件保留,其中LTS描述支持时间比软件的标准版次长数月或数年的软件版次。每个新的LTS可以包括一个或多个新的应用程序编程接口(API)。API可以是定义多个软件应用程序或混合硬件-软件中介之间的交互的接口。API可以定义可以进行的召用或请求的类型、如何进行这些、应使用的数据格式以及要遵循的约定。API还可以提供扩展机制,使得用户可以以各种方式、不同程度地扩展现有功能。
在一些方面,新的LTS可以不包括先前LTS中包括的一个或多个API。换句话说,当创建新的LTS时,可以删除来自先前LTS的一个或多个API。因此,当执行利用已删除的API的代码时,该代码可能会失败。此外,通常,一旦发布下一个版本,就可能会放弃对软件的非LTS版本的软件支持。虽然对LTS的软件支持可能会更长,但LTS支持可能限于最新的LTS,而先前LTS则不受支持。在一些方面,软件开发者可能偶尔会犯编码错误,从而导致性能、稳定性和/或安全性故障。附加地或替代地,一些第三方库可能会定期发布新的版本。这些新的版本可以包含新的API、删除的旧的API、性能修复和安全性修复。
发明内容
下面呈现了本公开的一个或多个方面的发明内容,以便提供对此类方面的基本理解。本发明内容并不是对本公开的所有预期特征的广泛概述,并且既不旨在识别本公开的所有方面的关键或必要元素,也不旨在勾画本公开的任何或所有方面的范围。其唯一目的是以作为稍后呈现的更详细描述的序言的形式呈现本公开的一个或多个方面的一些概念。
在一些方面,提供了一种规则引擎。规则引擎包括存储器。规则引擎还包括与存储器进行电子通信的一个或多个处理器。一个或多个处理器被配置为根据一组一个或多个规则来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序。一组一个或多个规则将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。一个或多个处理器还被配置为指示一个或多个处理程序中的至少一个处理程序:扫描多个代码串;基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串;并且更新由至少一个处理程序识别的至少一个未更新的代码串。一个或多个处理器进一步被配置为从至少一个处理程序接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示。另外,一个或多个处理器被配置为至少生成已更新的代码串以用于在显示屏上显示。
在一些方面,在选择一个或多个处理程序之前,一个或多个处理器进一步被配置为:从扫描器接收与文件相关联的多个代码串,其中多个代码串中的每一个包括扫描的代码串;并且识别多个代码串中的一个或多个未更新的代码串。在一些方面,从扫描器接收与文件相关联的多个代码串包括:从扫描器接收多个代码串中的一个或多个未更新的代码串的指示,并且识别多个代码串中的一个或多个未更新的代码串基于该指示。在一些方面,指示一个或多个处理程序中的至少一个处理程序更新至少一个未更新的代码串包括指示至少一个处理程序更新以下项中的至少一项:未更新的代码串的语法、未更新的代码串的变量、或未更新的代码串的对象。在一些方面,指示一个或多个处理程序中的至少一个处理程序更新至少一个未更新的代码串包括指示一个或多个处理程序中的至少一个处理程序将至少一个未更新的代码串从代码的初始版本更新为代码的更新版本。在一些方面,更新版本包括紧接在代码的初始版本之前的代码的版本。在一些方面,更新版本包括代码的最新版本。
在一些方面,提供了一种由规则引擎实施的方法。该方法包括根据一组一个或多个规则来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序。一组一个或多个规则将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。该方法还包括指示一个或多个处理程序中的至少一个处理程序:扫描多个代码串,基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串;并且更新由至少一个处理程序识别的至少一个未更新的代码串。该方法进一步包括:从至少一个处理程序接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示。另外,该方法包括至少生成已更新的代码串以用于在显示屏上显示。
在一些方面,提供了一种规则引擎的非暂时性处理器可读存储介质。非暂时性处理器可读存储介质具有存储在其上的一个或多个计算机可执行指令。一个或多个计算机可执行指令在由处理电路执行时使得处理电路根据一组一个或多个规则来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序。一组一个或多个规则将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。一个或多个计算机可执行指令在由处理电路执行时还使得处理电路指示一个或多个处理程序中的至少一个处理程序:扫描多个代码串,基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串;并且更新由至少一个处理程序识别的至少一个未更新的代码串。一个或多个计算机可执行指令在由处理电路执行时进一步使得处理电路从至少一个处理程序接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示。另外,一个或多个计算机可执行指令在由处理电路执行时进一步使得处理电路至少生成已更新的代码串以用于在显示屏上显示。
在一些方面,提供了一种规则引擎。规则引擎包括用于根据一组一个或多个规则来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序的构件。一组一个或多个规则将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。规则引擎还包括用于指示一个或多个处理程序中的至少一个处理程序:扫描多个代码串,基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串;并且更新由至少一个处理程序识别的至少一个未更新的代码串的构件。规则引擎进一步包括用于从至少一个处理程序接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示的构件。另外,规则引擎包括用于至少生成已更新的代码串以用于在显示屏上显示的构件。
在一些方面,提供了一种处理程序。规则引擎包括存储器。规则引擎还包括与存储器进行电子通信的一个或多个处理器。一个或多个处理器被配置为从规则引擎接收对与文件相关联的多个代码串的访问。多个代码串包括一个或多个未更新的代码串。一个或多个处理器还被配置为扫描多个代码串。一个或多个处理器进一步被配置为基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串。另外,一个或多个处理器被配置为更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示。一个或多个处理器还被配置为向规则引擎传输一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的第一指示以用于在显示屏上显示。
在一些方面,一个或多个处理器进一步被配置为从规则引擎接收处理程序属于一组至少一个处理程序的第二指示,该一组至少一个处理程序基于一组一个或多个规则被选择用于更新一个或多个未更新的代码串中的至少一个未更新的代码串,该一组一个或多个规则将一组至少一个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。在一些方面,响应于接收到第二指示,一个或多个处理器进一步被配置为:扫描多个代码串,基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串,并且更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示。在一些方面,更新至少一个未更新的代码串包括更新以下项中的至少一项:至少一个未更新的代码串的语法、至少一个未更新的代码串的变量、或至少一个未更新的代码串的对象。在一些方面,更新至少一个未更新的代码串包括将至少一个未更新的代码串从代码的初始版本更新为代码的更新版本。在一些方面,更新版本包括紧接在代码的初始版本之前的代码的版本。在一些方面,更新版本包括代码的最新版本。
在一些方面,提供了一种由处理程序实施的方法。该方法包括:从规则引擎接收对与文件相关联的多个代码串的访问,其中该多个代码串包括一个或多个未更新的代码串。该方法还包括扫描多个代码串。该方法进一步包括基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串。另外,该方法包括更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示。该方法还包括向规则引擎传输一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的第一指示以用于在显示屏上显示。
在一些方面,提供了一种处理程序的非暂时性处理器可读存储介质。非暂时性处理器可读存储介质具有存储在其上的一个或多个计算机可执行指令。一个或多个计算机可执行指令在由处理电路执行时使得处理电路从规则引擎接收对与文件相关联的多个代码串的访问。多个代码串包括一个或多个未更新的代码串。一个或多个计算机可执行指令在由处理电路执行时还使得处理电路扫描多个代码串。一个或多个计算机可执行指令在由处理电路执行时进一步使得处理电路基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串。另外,一个或多个计算机可执行指令在由处理电路执行时进一步使得处理电路更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示。一个或多个计算机可执行指令在由处理电路执行时还使得处理电路向规则引擎传输一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的第一指示以用于在显示屏上显示。
在一些方面,提供了一种处理程序。处理程序包括用于从规则引擎接收对与文件相关联的多个代码串的访问的构件。多个代码串包括一个或多个未更新的代码串。处理程序还包括用于扫描多个代码串的构件。处理程序进一步包括用于基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串的构件。另外,处理程序包括用于更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示的构件。处理程序还包括用于向规则引擎传输一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的第一指示以用于在显示屏上显示的构件。
在审阅下面的详细描述后,这些和其他方面将变得更充分地理解。在结合附图审阅以下具体示例性示例的描述后,其他方面、特征和示例对于本领域普通技术人员来说将变得显而易见。虽然可以相对于下面的某些示例和附图来讨论特征,但是所有示例都可以包括本文中讨论的有利特征中的一个或多个。换言之,虽然一个或多个示例可以被讨论为具有某些有利特征,但是也可以根据本文所讨论的各种示例来使用此类特征中的一个或多个。以类似的方式,虽然示例性示例可以在下面被讨论为设备、系统或方法示例,但是此类示例性示例可以在各种设备、系统和方法中实施。
附图说明
图1是图示根据一些方面的用于更新和修改软件的示例系统的概念图。
图2是图示根据一些方面的用于更新和修改软件的示例系统的概念图。
图3A图示根据一些方面的用于更新代码的消息输出的概念示例。
图3B图示根据一些方面的用于更新代码的消息输出的概念示例。
图3C图示根据一些方面的用于更新代码的消息输出的概念示例。
图4A图示根据一些方面的静态分析扫描器包装器数据消息输入的概念示例。
图4B图示根据一些方面的静态分析扫描器包装器数据消息输入的概念示例。
图5图示根据一些方面的示例更新器系统。
图6图示根据一些方面的被包括在项目文件中的扫描器包装器消息的概念示例。
图7图示根据一些方面的与一级处理程序一起使用的规则的概念示例。
图8图示根据一些方面的已更新的项目文件的概念示例。
图9A图示根据一些方面的简单更新器处理程序的概念示例。
图9B图示根据一些方面的将由简单更新器处理程序900更新的输入代码的概念示例。
图9C图示根据一些方面的先前由简单更新器处理程序900更新的输出代码的概念示例。
图10A图示根据一些方面的二级API更新器处理程序的概念示例。
图10B图示根据一些方面的将由简单API更新器处理程序更新的输入代码的概念示例。
图10C图示根据一些方面的先前由简单API更新器处理程序更新的输出代码的概念示例。
图11A图示根据一些方面的用于使用三级处理程序进行更新的输入代码的概念示例。
图11B图示根据一些方面的在使用三级处理程序更新输入代码之后的输出代码的概念示例。
图12A图示根据一些方面的用于使用三级处理程序进行更新的输入代码的概念示例。
图12B图示根据一些方面的在使用三级处理程序更新输入代码之后的输出代码的概念示例。
图13A图示根据一些方面的用于使用三级处理程序进行更新的输入代码的概念示例。
图13B图示根据一些方面的在使用三级处理程序更新输入代码之后的输出代码的概念示例。
图14A图示根据一些方面的用于使用四级处理程序进行更新的输入代码的概念示例。
图14B图示根据一些方面的在使用第四级处理程序更新输入代码之后的输出代码的概念示例。
图15A图示根据一些方面的用于使用五级处理程序进行更新的输入代码的概念示例。
图15B图示根据一些方面的在使用第四级处理程序更新输入代码之后的输出代码的概念示例。
图16是图示根据一些方面的用于采用处理系统的规则引擎的硬件实施方式的示例的框图。
图17是根据一些方面的由规则引擎实施的用于更新一个或多个代码串的方法的流程图。
图18是根据一些方面的由规则引擎实施的用于更新一个或多个代码串的方法的流程图。
图19是图示根据一些方面的用于采用处理系统的处理程序的硬件实施方式的示例的框图。
图20是根据一些方面的由处理程序实施的用于更新一个或多个代码串的方法的流程图。
图21是根据一些方面的由处理程序实施的用于更新一个或多个代码串的方法的流程图。
具体实施方式
下面结合附图阐述的详细描述旨在作为各种配置的描述,而不旨在表示可以实践本文描述的概念的仅有配置。详细描述包括为了提供对各种概念的透彻理解的目的的具体细节。然而,对于本领域技术人员来说显而易见的是,可以再没有这些具体细节的情况下实践这些概念。在一些情况下,众所周知的结构和部件以框图形式示出以避免模糊此类概念。
软件开发者持续地实施用于软件的新的长期支持(LTS)发布。LTS可以包括产品生命周期管理策略,其中计算机软件的稳定发布被维护比标准版次更长的时间段。LTS通常可以为开源软件保留,其中LTS描述支持时间比软件的标准版次长数月或数年的软件版次。每个新的LTS可以包括一个或多个新的应用程序编程接口(API)。API可以是定义多个软件应用程序或混合硬件-软件中介之间的交互的接口。API可以定义可以进行的召用或请求的类型、如何进行这些、应使用的数据格式以及要遵循的约定。API还可以提供扩展机制,使得用户可以以各种方式、不同程度地扩展现有功能。
在一些方面,新的LTS可以不包括先前LTS中包括的一个或多个API。换句话说,当创建新的LTS时,可以删除来自先前LTS的一个或多个API。因此,当执行利用已删除的API的代码时,该代码可能会失败。此外,通常,一旦发布下一个版本,就可能会放弃对软件的非LTS版本的软件支持。虽然对LTS的软件支持可能会更长,但LTS支持可能限于最新的LTS,而先前LTS则不受支持。在一些方面,软件开发者可能偶尔会犯编码错误,从而导致性能、稳定性和/或安全性故障。附加地或替代地,一些第三方库可能会定期发布新的版本。这些新的版本可以包含新的API、删除的旧的API、性能修复和安全性修复。
在一些方面,软件开发者可以确定哪些API已经改变并且可以确定用于替换的API。软件开发者可以定位用于更新的代码、确定如何更新代码以及对代码实施更新。在一些方面,软件开发操作团队和/或软件安全性操作团队可以用静态分析工具扫描源代码、针对所定位的问题开票、与软件开发团队就所定位的问题进行分类。软件开发团队可以识别故障,确定如何修复它们,并实施恰当的解决方案。实施恰当的解决方案后,软件开发者可以执行完整的回归测试。
图1是图示根据一些方面的用于更新和修改软件的示例系统100的概念图。如图1所示,系统100可以包括经由一个或多个电子通信信道106通信地耦合到一个或多个用户设备104的前端入口服务器102。一个或多个通信信道106可以是由互联网使用的通信信道。例如,第一用户设备104a可以经由第一电子通信信道106a与前端入口服务器102进行电子通信,并且第二用户设备104b可以经由第二电子通信信道106b与前端入口服务器102进行电子通信。一个或多个用户设备104可以包括服务器、计算机、手持设备、其组合等中的至少一个。在一些方面,前端入口服务器102可以包括控制机器人,诸如JENKINSTM控制机器人或类似的控制机器人。前端入口服务器102可以为系统100提供用户接口。例如,前端入口服务器102可以包括用于一个或多个网络浏览器的HTTP接口、提供一个或多个作业的状态、提供对一个或多个作业(例如,执行一个或多个代码串的任务)的控制。前端入口服务器102还可以提供用于停止和/或开始一个或多个作业的触发器。例如,前端入口服务器102可以提供定时触发器以当一个或多个预定持续时间期满时、当特定时间发生时和/或当代码的执行被启动时,停止和/或开始作业。作为另一示例,前端入口服务器102可以提供事件触发器以在事件发生后停止和/或开始一个或多个作业。作为又一示例,前端入口服务器102可以提供用于运行代码流(例如,更新器代码)进出系统100的控制。例如,一个或多个用户设备104可以将一个或多个代码串传送到系统100以用于更新和/或修改,如本文进一步描述的。前端入口服务器102可以控制系统100接收一个或多个代码串的时间和/或速率。
在一些方面,前端入口服务器102可以包括一个或多个经配置的用户和一个或多个经配置的管理员。用户中的每一个和管理员中的每一个可以与个人相关联并且可以提供一组唯一的更新权限、项目访问权限和/或安全性权限。例如,一些管理员可以具有完全访问权或有限访问权。同样,一些用户可以具有完全访问权或有限访问权。
系统100可以包括一个或多个代理108,诸如至少第一代理108a和第二代理108b。如图1所示,第一代理108a和第二代理108b中的每一个可以经由代理通信信道(诸如第一代理通信信道110a和第二代理通信信道110b)通信地耦合到前端入口服务器102。在一些方面,代理通信信道可以包括安全外壳(SSH)协议通信信道。例如,第一代理108a可以经由第一代理通信信道110a通信地耦合到前端入口服务器102,并且第二代理108b可以经由第二代理通信信道110b通信地耦合到前端入口服务器102。代理可以是具有一个或多个处理器和存储器的独立计算系统,可以驻留在安全区域112(例如,非军事区域(DMZ)、周边网络、屏蔽子集)中,并且包括软件包装器(例如,JAVA包装器)以用于执行从前端入口服务器102接收的代码。例如,代理可以开启(例如,执行)与接收到的代码相关联的命令以及从前端入口服务器102读取数据和向前端入口服务器102写入数据。
在一些方面,每个个体代理可以经由互联网在一个或多个储存库(例如,GITHUBTM、GITLABTM、与GIT相关联的储存库)(诸如第一储存库114a和第二储存库114b)内进行电子通信以用于访问代码。例如,第一代理108a可以经由第一储存库通信信道116a从第一储存库114a接收一个或多个代码串,和/或经由第二储存库通信信道116b从第二储存库114b接收一个或多个代码串。作为另一示例,第二代理108b可以从第一储存库114a和/或第二储存库114b接收一个或多个代码串。在接收到一个或多个代码串后,第一代理108a可以将一个或多个代码串的状态传输到前端入口服务器102。第一代理108a还可以从前端入口服务器102接收作业控制引导和/或一个或多个凭证。第一代理108a可以使用一个或多个凭证来将对一个或多个代码串的更新推送到第一储存库114a和/或第二储存库114b中。类似地,在接收到一个或多个代码串后,第二代理108b可以将一个或多个代码串的状态传输到前端入口服务器102。第二代理108b还可以从前端入口服务器102接收作业控制引导和/或一个或多个凭证。第二代理108b可以使用一个或多个凭证来将对一个或多个代码串的更新推送到第一储存库114a和/或第二储存库114b中。在一些方面,一个或多个代理108中的至少一个代理可以是(例如,包括)如本文进一步描述的更新器代理。
系统100还可以包括更新器系统118。更新器系统118可以经由一个或多个相应更新器系统通信信道电子通信地耦合到一个或多个代理中的每一个。如图1所示,更新器系统118可以经由第一更新器系统通信信道120a电子通信地耦合到第一代理108a并且经由第二更新器系统通信信道120b电子通信地耦合到第二代理108b。第一防火墙122可以沿着一个或多个更新器系统通信信道中的每一个定位。第一防火墙122可以被配置为允许相应更新器系统接收仅源自安全区域112的数据和/或凭证。
如本文进一步描述的,更新器系统118可以包含更新器代码并且可以被配置为根据一组一个或多个规则更新与文件(例如,项目文件)相关联的多个代码串中的一个或多个未更新的代码串。更新器系统118还可以扫描多个代码串,基于扫描多个代码串来识别一个或多个未更新的代码串中的至少一个未更新的代码串,并且更新至少一个未更新的代码串。更新器系统118可以进一步被配置为至少生成已更新的代码串以用于在第一用户设备104a和/或第二用户设备104b的显示屏上显示。
如本文所述,安全区域112可以由包括多个代理108的区域来定义。在一些方面,安全区域112可以由位于馈入和/或馈出多个代理108的通信信道上的一个或多个防火墙来定义。例如,安全区域112可以由第一防火墙122、第二防火墙124和第三防火墙126来定义。在一些方面,安全区域112可以由位于馈入和/或馈出至少包括前端入口服务器102和多个代理108的组的通信信道上的一个或多个防火墙来定义。例如,安全区域112可以由第一防火墙122、第三防火墙126和第四防火墙来定义128。此外,系统100可以包括由第一防火墙122、第二防火墙124、第三防火墙126或第四防火墙128中的至少一个定义的多个安全区域。更新器系统118可以在由第一防火墙122定义的其自己的安全区域内。
图2是图示根据一些方面的用于更新和修改软件的示例系统200的概念图。图2可以包含图1的一个或多个元件/特征,包括例如经由电子通信信道206与用户设备204进行电子通信的前端入口服务器202、驻留在安全区域212中并且经由代理通信信道210与前端入口服务器202进行电子通信的一个或多个代理208,以及经由更新器系统通信信道218和第一防火墙220与一个或多个代理208进行电子通信的更新器系统216(例如更新器引擎)。储存库222还可以经由储存库通信信道224与一个或多个代理208进行电子通信。
如图2所示,系统200还可以包括经由联系通信信道228与一个或多个代理208进行电子通信的联系服务器226。联系服务器226还经由内部开发服务器通信信道232与内部开发服务器230进行电子通信,经由中央储存库通信信道236与中央储存库234进行电子通信,并且经由公共储存库通信信道240与公共储存库238进行电子通信。在一些方面,内部开发服务器230可以包括来自内部开发者的文件以执行更新器系统216。来自内部开发者的文件可以包括扫描器、包装器二进制文件以及可执行文件(例如,外部和/或第三方包装器扫描器、定制包装器扫描器)。扫描器接收来自一个或多个弃用扫描器的输出,包装该输出,并对输出进行格式化以用于传输到更新器系统216并由更新器系统216使用。该输出可以用于更新器代理250与更新器系统216之间的通信。
在一些情况下,在接收到包含一个或多个文件(每个文件具有一个或多个代码串)的项目文件后,一个或多个代理208可以搜查遍及互联网的服务器和数据库以识别用于构建项目文件的一个或多个辅助文件。然而,一个或多个代理208可以依赖于联系服务器226,而不是依赖于遍及互联网的服务器和数据库来识别一个或多个辅助文件。在一些方面,联系服务器226可以包括二进制文件(例如,用于计算机执行的位)、公共储存库的代码和索引、扫描器二进制文件/可执行文件等。一个或多个代理208可以使用二进制文件而不是源代码来扫描项目文件中的一个或多个代码串。在一些方面,一个或多个用户设备204可以具有对联系服务器226的访问权(例如,有限访问权)。然而,与一个或多个代理208不同,一个或多个用户设备204可能无法访问(例如,限制访问)被包含在联系服务器226中的扫描器二进制文件。
在一些方面,联系服务器226可以向一个或多个代理208传输查询,以用于接收与获得用于构建项目文件的一个或多个辅助文件有关的信息。附加地或替代地,一个或多个代理208可以向联系服务器226传输与获得用于构建项目文件的一个或多个辅助文件有关的信息。联系服务器226可以接收一个或多个构建文件的指示,以用于获得用于构建项目文件的一个或多个辅助文件。在一些方面,联系服务器222可以被配置为确定与指示中识别的一个或多个构建文件相关联的一个或多个辅助文件。例如,一个或多个代理208可以生成用于使用(例如,执行)编译的代码和源代码的工作空间。通常,工作空间可以包括项目文件的源文件、构建文件(例如,构建脚本)、第三方库(例如,用于日志子系统的库)以及用于构建项目工件的生成器中的一个或多个。一个或多个代理208可以从储存库222经由储存库通信信道224接收项目文件(例如,具有带有开源代码的文件的开源项目、一个或多个私人或公司项目等),该项目文件具有一个或多个文件,每个文件具有一个或多个代码串。一个或多个代理208可以将具有一个或多个文件(每个文件具有一个或多个代码串)的项目文件插入到工作空间中。
应当理解,在一些方面,一个或多个用户设备204中的每一个可以与个体用户前端入口服务器252相关联。如图2所示,一个或多个用户设备204经由前端入口服务器通信信道254与相应用户前端入口服务器252进行电子通信。用户前端入口服务器252可以经由储存库桥通信信道256和储存库通信信道224与储存库222进行电子通信。用户前端服务器252中的每一个可以具有前端入口服务器202和/或图1所图示的前端入口服务器102的一个或多个特征。例如,使用用户前端入口服务器252的用户设备204可以能够访问来自联系服务器226的二进制文件和/或来自储存库222的数据。作为另一个示例,当更新器代理250将已更新的代码推送到储存库222时,用户前端入口服务器252可以启动其自己的构建、扫描和质量控制检查。
然后,一个或多个代理208可以对项目文件执行构建。例如,一个或多个代理208可以利用来自项目文件的一个或多个构建文件并执行构建文件以构建项目文件。当构建项目文件时,使用至少一个构建文件的一个或多个代理208可以指示联系服务器226获得构建项目文件可能需要的一个或多个辅助文件。联系服务器226可以确定需要哪些辅助文件来构建项目文件,并且可以经由中央储存库通信信道236从中央储存库234获得辅助文件,并且经由公共储存库通信信道240从公共储存库238获得辅助文件。在接收到由联系服务器226确定的用于构建项目文件的一个或多个辅助文件后,联系服务器226可以存储一个或多个辅助文件以供后续访问和/或使用。
在一个或多个代理208构建项目文件的同时,一个或多个代理208也可以扫描项目文件的每个文件内的一个或多个代码串中的每一个。例如,当构建项目文件时,一个或多个代理208可以请求联系服务器226向一个或多个代理208提供由执行一个或多个内部开发过程的内部开发服务器230生成的一个或多个扫描器。联系服务器226可以经由内部开发服务器通信信道232从内部开发服务器230接收多个扫描器,并且将多个扫描器存储在联系服务器的储存库中。联系服务器226可以识别多个扫描器中的适合于项目文件的一个或多个扫描器,并将一个或多个扫描器提供到一个或多个代理208以用于扫描。同时,前端入口服务器202可以监测项目文件的构建和扫描,并且报告项目文件的构建状态和/或扫描状态以用于在用户设备204的显示屏上显示。构建状态可以包括识别用于更新代码的一个或多个阶段和/或用于完成一个或多个任务或项目的一个或多个剩余时间。
在一个或多个代理208扫描项目文件的每个文件中的一个或多个代码串中的每一个之后,一个或多个代理208可以将项目文件传输到更新器系统216以更新项目文件内的一个或多个未更新的代码串,如本文所述。在更新器系统216执行一个或多个未更新的代码串的更新之后,一个或多个代理208可以接收具有已更新的代码串的项目文件并将已更新的项目文件写入工作空间中以用于执行和/或在用户设备204的显示屏上显示。在一些方面,一个或多个代理208可以经由储存库通信信道将更新推送到储存库222。在一些方面,在一个或多个代理208将具有更新的项目文件推送到储存库222之前,一个或多个代理208可以重新执行项目文件的构建并执行项目文件的一个或多个测试。
在一个或多个代理208在将项目文件发送到更新器系统216之前扫描项目文件的情况下,由更新器系统216用于将项目文件中的一个或多个未更新的代码串更新为项目文件中的一个或多个已更新的代码串所利用的处理时间和电力被大大减少,因为如本文所述的更新器系统216以及与更新器系统216协同工作的其他设备可以减少执行更新所需的扫描的数量。应当理解,虽然描述包含一个或多个代理208对一个项目文件执行构建和扫描的示例,但是本领域普通技术人员将理解,一个或多个代理208可以对多个项目文件执行构建和扫描。例如,一个或多个代理208可以包括一个或多个处理器,这些处理器可被节流以考虑构建和扫描单个项目文件或多个项目文件以及增加或减少一个或多个代理208的吞吐量。
如本文所述,安全区域212可以由包括一个或多个代理208的区域来定义。在一些方面,安全区域212可以由位于馈入和/或馈出一个或多个代理208的通信信道上的一个或多个防火墙来定义。例如,安全区域212可以由第一防火墙220、第二防火墙242和第三防火墙244来定义。在一些方面,安全区域212可以由位于馈入和/或馈出包括前端入口服务器202、一个或多个代理208、联系服务器226和内部开发服务器230中的至少一个的组的通信信道上的一个或多个防火墙来定义。例如,安全区域212可以由第一防火墙220、第四防火墙246和第五防火墙248来定义。此外,系统100可以包括由第一防火墙220、第二防火墙242、第三防火墙244、第四防火墙246或第五防火墙248中的至少一个定义的多个安全区域。更新器系统216可以在由第一防火墙220定义的其自己的安全区域内。
在一些方面,一个或多个代理208可以包括更新器代理250。更新器代理250可以是更新器系统216的客户端。更新器代理250可以被配置为确定要调用哪些扫描器、调用用于调用适当的扫描器的一个或多个适当的映射包装器、整理更新器系统216的扫描器的结果、连接到更新器系统216并且将扫描器产生的结果上传到更新器系统216、从更新器系统216接收已更新的文件(如果有的话,包括但不限于代码))并且将更新写入/保存到适当的源文件,并且调用报告器以写出活动报告,包括用于处理的计费成本(如果有的话)。更新器代理250可以由配置文件和命令行选项来控制。使用允许更新器代理250插入到各种构建系统中的包装器,诸如MAVENTM(实施的)和GRADLETM(设计的增强)。
更新器代理250还可以使用一个或多个扫描器来扫描项目文件的每个文件内的一个或多个代码串中的每一个。例如,当构建项目文件时,更新器代理250可以请求联系服务器226向更新器代理250提供由执行一个或多个内部开发过程的内部开发服务器230生成的一个或多个扫描器。联系服务器226可以经由内部开发服务器通信信道232从内部开发服务器230接收多个扫描器,并且将多个扫描器存储在联系服务器的储存库中。联系服务器226可以识别多个扫描器中的适合于项目文件的一个或多个扫描器,并且将一个或多个扫描器提供到更新器代理250以用于扫描。联系服务器230可以具有或者可以检索各自与不同的任务或焦点相关联的多个扫描器。扫描器中的每一个可以包括映射包装器,该映射包装器将相应扫描器的输出转换成适合更新器系统216解析和动作的格式。扫描器包装器可以由更新器代理250管理,该更新器代理250整理来自扫描器包装器的输出以及任何附加数据,诸如源代码和构建文件。
通常,扫描器可以由第三方供应,诸如OPENJDKTM、SONAR SOURCETM等。在一些方面,例如用于GRADLETM构建文件、MAVENTM构建文件和ANTTM构建文件的扫描器可以由独立或单独的软件开发团队编写。在一些方面,扫描器可以包括弃用扫描器(例如,JAVATM弃用扫描器)。弃用扫描器可以包括开发套件工具(例如,JAVATM开发套件(JDK)工具“jdeprscan”)和相关联的映射包装器的组合。在一些方面,映射包装器可以针对开放开发套件工具进行校准。
弃用扫描器可以被配置为搜索编译文件(例如,JAVATM文件)以查找对已从文件源(例如,JAVATM)中弃用的类、方法和属性的调用。然后弃用扫描器可以向调用者报告发现的问题。弃用扫描器映射包装器可以调用弃用扫描器(例如,“jdeprscan”),将扫描器的输出格式化为可以由更新器系统216经由处理器扫描解析器(例如,jdepProcessorScanParser)解析的格式,并且定位由扫描器识别的一个或多个源文件并将其附接到数据包以用于发送到更新器系统216。
图3A、图3B和图3C图示根据一些方面的用于更新代码的消息输出300的概念示例。消息输出300可以是从更新器代理250传输到更新器系统216(例如,更新器系统216的规则引擎)的消息。图3A所示的消息输出300的部分可以包含与要更新和/或修改的代码文件相关联的细节以及要更新和/或修改的代码文件的一部分。图3B所示的消息输出300的部分可以包含与要更新和/或修改的代码文件相关联的细节。图3C所示的消息输出300的部分可以包含要更新和/或修改的代码文件的一部分、要更新和/或修改的代码文件的文件名称和目录条目、正在被更新和/或修改的代码文件的名称、由各种扫描器识别的问题的收集列表(例如,“结果”),以及用于更新器系统216(例如,更新系统216的规则引擎)的操作的各种操作信息。在一些方面,消息输出300可以来自开源项目,诸如OpenSource JAXB-RI项目。开源项目可以包括“class com/sun/xml/xsom/impl/parser/state/ersSet使用弃用的方法java/lang/Integer::<init>(I)V”并且从图2的更新器代理250输出到更新器系统216。在一些方面,存储在存储器中的数据和关系可以被转换成适合从更新器代理250通过网络连接(例如,图2的更新器系统通信信道218)传输以用于由更新器系统216接收的json格式。
在一些方面,一个或多个扫描器可以包括静态分析扫描器。静态分析扫描器可以包括相关联的映射包装器。静态分析扫描器可以被配置为使得更新器代理250从静态分析服务器下载规则和配置,扫描代码以查找对规则的违反和初始处理,并且将包括项目源代码的结果发送到静态分析引擎以用于由系统用户(软件开发者、管理者、Q/A测试者、自动化系统,诸如Jenkins/Travis/Spinnaker等)进行附加处理、存储和最终审阅。在一些方面,静态分析扫描器可以是SONARQUBETM扫描器或者可替代地是可比较的扫描器。在一些方面,弃用扫描器包装器代码300可以包括输出弃用扫描器包装器代码。
图4A和图4B图示根据一些方面的静态分析扫描器包装器数据消息输入400的概念示例。在一些示例中,静态分析扫描器包装器数据消息输入400可以是SONARQUBETM扫描器包装器、JLINTTM扫描器包装器和/或LINTTM扫描器包装器中的至少一个。在一些方面,静态分析扫描器包装器数据消息输入400可以调用静态分析扫描器并且随后向静态分析扫描器服务器查询“修饰的”扫描结果。“修饰的”扫描结果可以从图2的更新器代理250发送到更新器系统216。在一些方面,存储在存储器中的数据和关系可以被转换成适合于通过网络连接(例如,图2的更新器系统通信信道218)传输以用于由更新器系统216接收的格式。静态分析扫描器包装器数据消息输入400在被静态分析包装器接收之后,可以被解析并映射成相同或相似的格式,如关于图3A、图3B和图3C中所图示的消息输出300所示。
在一些方面,一个或多个扫描器可以包括更新扫描器。在一些方面,更新扫描器可以是MAVENTM更新扫描器。更新扫描器可以被配置为将项目文件的第三方库依赖性更新为第三方库的当前版本。例如,更新扫描器可以被配置为将项目文件从spring v4更新(例如,升级)到spring v5、从struts v2更新(例如,升级)到struts v3等。各种项目(例如,开源项目)可能出于各种原因(包括安全性、性能、稳定性等)例行发布更新。在一些方面,更新扫描器可以被配置为使得更新器代理250扫描构建pom.xml文件(例如,MAVENTM构建pom.xml文件)以确定项目的依赖性。更新扫描器还可以使得更新器代理250将依赖性的列表发送到更新器系统216以用于确定哪些依赖性是过时的。在一些方面,更新扫描器可以使得更新器代理250从更新器系统216接收过时的依赖性的列表,并且扫描编译的类文件以查找对过时的依赖性的使用。另外,在一些方面,更新扫描器可以被配置为使得更新器代理250将带有对过时的引用和(一个或多个)过时的pom.xml的引用的源代码发送到更新器代理250以确定并应用适当的更新。
在一些方面,一个或多个扫描器可以包括升级扫描器。在一些方面,升级扫描器可以是MAVENTM升级扫描器。在一些方面,MAVENTM升级扫描器可以用于将项目文件从MAVENTM构建系统转换为GRADLETM构建系统。在一些方面,MAVENTM升级扫描器可以是来自Make&Ant升级扫描器的升级/改进。升级扫描器可以被配置为使得代理208(例如,升级器代理)解决某些构建系统(例如,Make&Ant构建系统)的第三方库问题的依赖性管理。在一些方面,升级扫描器可以与标准项目目录布局相关联。
在一些方面,更新扫描器可以被配置为使得代理208将项目的第三方库依赖性更新为第三方库的当前版本。在一些方面,更新扫描器可以是GRADLETM更新扫描器。更新扫描器可以被配置为使得代理208将项目从spring v4更新为spring v5、从struts v2更新为struts v3等。各种项目(例如,开源项目)可能出于各种原因(包括安全性、性能、稳定性等)例行发布更新。在一些方面,更新扫描器可以被配置为使得代理208扫描构建文件(例如,一个或多个GRADLETM build.gradle文件)来确定项目的依赖性。更新扫描器还可以使得代理208将依赖性的列表发送到更新器系统216以用于确定哪些依赖性是过时的。在一些方面,更新扫描器可以使得代理208从更新器系统216接收过时的依赖性的列表并且扫描编译的类文件以查找对过时的依赖性的使用。另外,在一些方面,更新扫描器可以被配置为使得代理208将带有对过时的引用和过时的构建文件的引用的源代码发送到更新器系统216以确定并应用适当的更新。
在一些方面,除了被弃用并最终从代码(例如,JAVATM语言)中删除的API之外,还可以例行地添加新的API。例如,可以添加哈希图API作为哈希表API的更快版本、添加for-each作为更高效的for循环、添加lambda以用于更快执行代码等。升级扫描器(例如,JAVATM升级扫描器)可以被配置为使得代理208识别新的语言语法可以用于更新最初使用旧的样式创建的代码的区域。在一些方面,由于主要编码员的专业知识以及ORACLETM决定大约每六(6)个月发布JAVATM的一个新版本,该版本与JAVATM的先前版本不完全向后兼容,所以选择JAVATM及相关技术。然而,针对API弃用以及安全性和稳定性问题两者,各种扫描器已经可用于其他语言。SONARQUBETM可以支持可以由代理208和更新器系统216容易地处置的多种语言。
图5图示根据一些方面的示例更新器系统500。更新器系统500可以包括与图1所图示的更新器系统118和/或图2所图示的更新器系统216相同或相似的一个或多个特征。如图5所示,更新器系统500可以包括至少一个规则引擎502和经由处理程序储存库通信信道506与规则引擎502进行电子通信的处理程序储存库504。处理程序储存库504可以包括多个处理程序504。例如,多个处理程序可以包括第一处理程序508a、第二处理程序508b、第三处理程序508c和第四处理程序508d。在一些方面,更新器系统500还可以包括经由更新器系统通信信道512和防火墙514与规则引擎502进行电子通信的更新器代理510。更新器代理510可以与图2的代理208、图2的更新器代理250、图1的第一代理108a和/或图1的第二代理108b相同或至少相似。更新器系统通信信道512可以与图2的更新器系统通信信道218和/或图1的更新器系统通信信道120b相同或至少相似。防火墙514可以与图2所图示的第一防火墙220和/或图1的第一防火墙122相同或至少相似。
在一些方面,规则引擎502可以是多核处理器并且包括16吉字节(GB)或更基本系统随机存取存储器(RAM)。更新器代理510可以包括具有多核线程系统和一(1)GB或更大的RAM的分级系统。在一些方面,规则引擎502可以部署在云网络中。规则引擎502可以被配置为根据一组一个或多个规则来选择用于更新与文件(例如,项目文件)相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序508。例如,规则引擎502可以从更新器代理510接收合并的项目文件(例如,合并的输出)。可以从一个或多个扫描器包装和整理项目文件,如本文所述。关于拥有该项目的客户的附加信息可以从企业资源规划(ERP)系统加载。
规则引擎502可以被配置为接收项目文件的一个或多个代码串。一个或多个代码串可以包括一个或多个未更新的代码串。在接收到一个或多个代码串后,规则引擎502可以选择用于更新一个或多个未更新的代码串的一个或多个处理程序。规则引擎502可以使用具有项目文件中包括的一个或多个规则的一个或多个扫描器包装器消息来选择用于更新一个或多个未更新的代码串的一个或多个处理程序508。例如,在选择一个或多个处理程序508之前,规则引擎502可以从扫描器接收与项目文件相关联的多个代码串。多个代码串中的每一个可以包括扫描的代码串,每个扫描的代码串具有一个或多个扫描器包装器消息,该扫描器包装器消息包含将一个或多个处理程序508中的每一个与更新至少一个唯一的未更新的代码串相关联的一个或多个规则。扫描的代码串可以使得规则引擎502能够识别多个代码串中的一个或多个未更新的代码串以用于更新。在一些方面,规则引擎502可以从扫描器接收与项目文件相关联的多个代码串,这可以包括规则引擎502从扫描器接收多个代码串中的一个或多个未更新的代码串的指示并且基于该指示来识别多个代码串中的一个或多个未更新的代码串。
图6图示根据一些方面的被包括在项目文件中的扫描器包装器消息600的概念示例。如图6所示,扫描器包装器消息600包含多个字段名称602。名称为“classDef”的第一字段604可以识别源文件或项目文件的内容。名称为“results”的第二字段606可以提供来自各种扫描器中的一个或多个的经解析的输出的整理列表,并且可以包括用于处理的附加细节。名称为“resultsentry”的第三字段608可以指示第二字段606(名称为“results”)可以具有一个或多个结果条目。每个条目可以具有被包括在与该条目相关联的第四字段610中的附加数据。结果条目的值可以由规则引擎502匹配以确定要调用多个处理程序508中的哪个处理程序。扫描器包装器消息600还可以包括附加字段。这些附加字段可以用于通信层,以用于重新组装内部数据对象以进行处理(第三方库、主要转换库(例如,由DROOLSTM使用的主要JSON转换库)等),用于由更新器代理510确定将已更新的输出写回到哪些源文件,用于DROOLSTM以用于由DROOLSTM、报告系统、计费系统等进行内部处理和处置。虽然以上描述提供了DROOLSTM系统,但是应当理解,DROOLSTM系统仅仅是由规则引擎502实施或被包含在规则引擎502内的示例系统,并且可以附加地或替代地实施或使用其他相同或类似的系统。
在从更新器代理510接收到项目文件后,规则引擎502可以使用经配置的规则以确定应该在项目文件的哪些源文件上调用哪一个或多个处理程序508,一个或多个处理程序508中的每一个何时可以被调用,以及一个或多个处理程序508中的每一个被调用的顺序。在一些方面,规则引擎502可以基于每规则/处理程序来选择每个处理程序508。在一些方面,规则可以触发多个处理程序。在一些方面,所选择的(例如,调用的)处理程序可以调用附加处理程序。在一些方面,规则还可以设置当给定规则的处置完成时要调用的其他规则的条件。规则引擎502可以在选择期间为每个处理程序提供信息,包括导致调用处理程序的结果、被调用的规则的名称、要修改的源文件等。在一些方面,规则引擎502还可以在选择每个处理程序期间为计费系统提供信息,包括被调用的一个或多个规则、被选择的一个或多个处理程序、由处理程序更新的实例的数量、更新器系统500正在处理的项目文件名称、源文件名称、每个所选择的处理程序的投入水平等。
图7图示根据一些方面的与一级处理程序一起使用的规则700的概念示例。规则700可以用于选择多个处理程序508中的用于更新项目文件的一个或多个代码串的一个或多个处理程序。在一些方面,规则700可以与一级处理程序一起使用。如图7所示,规则700可以包括规则名称702(例如,“java/lang/Integer::<init>(I)V”)、搜索串704(例如,“news\\s+(?:java\\.lang\\.)?Integer\\(“),诸如基于正则表达式(正则表达式)的风格化搜索串,以及替换串706(例如,“Integer.valueOf”),诸如风格化替换串。
规则引擎502还可以被配置为指示一个或多个处理程序中的至少一个处理程序508扫描多个代码串,基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串,并且更新由至少一个处理程序识别的至少一个未更新的代码串。例如,多个处理程序508可以包括各种不同的处理程序。在一些方面,一个或多个处理程序可以包括核心/基本处理程序API,诸如规则动作处理程序(“核心处理程序”)。核心处理程序可以处置对项目文件的源代码的更新。核心处理程序可以根据由规则引擎502确定的一个或多个规则来更新项目文件的一个或多个代码串。核心处理程序通常由规则引擎502通过触发的规则的动作节段来调用,尽管核心处理程序可以附加地或替代地由其他处理程序调用。在一些方面,一个或多个处理程序可以包括更新接口处理程序。更新接口处理程序提供一致的API,以用于访问一组不同的类,这些类可以用于为特定问题集提供解决方案。更新接口处理程序可以定义由规则引擎502调用的所有核心处理程序需要实施的一个或多个方法。在一些方面,规则引擎502指示一个或多个处理程序中的至少一个处理程序508更新至少一个未更新的代码串可以包括指示至少一个处理程序508更新以下项中的至少一项:未更新的代码串的语法、未更新的代码串的变量、或未更新的代码串的对象。
在一些方面,在从规则引擎502接收到指令后,处理程序508中的一个或多个可以从规则引擎接收对与文件相关联的多个代码串的访问,其中多个代码串可以是包括一个或多个未更新的代码串。一个或多个处理程序508还可以扫描多个代码串,基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串,并且更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示。例如,当核心处理程序从规则引擎502接收到调用以更新项目文件的一个或多个代码串(例如,项目文件的源代码)时,核心处理程序可以接收一个或多个目标参数和一个或多个扫描结果参数。一个或多个目标参数可以包括表示正在处理的源代码文件的一个或多个对象并且可以包括源代码文件的内容。一个或多个扫描结果参数可以包括来自扫描器的经解析和修饰的输出消息。一个或多个扫描结果参数可以用作“查找关键字”以确定正在处理哪个规则以及来自扫描器和源文件的任何相关联的信息。在一些方面,核心处理程序可以不返回任何内容,因为更新目标包括所应用的适用更新。
在一些方面,规则引擎502指示一个或多个处理程序中的至少一个处理程序更新至少一个未更新的代码串可以包括规则引擎502指示一个或多个处理程序中的至少一个处理程序将至少一个未更新的代码串从代码的初始版本更新为代码的更新版本。例如,代码的初始版本可以是代码的先前版本(例如,不是代码的最新版本的代码的版本)并且代码的更新版本可以是代码的最新版本。在一些方面,代码的更新版本可以是与代码的初始版本紧邻的代码的下一个版本的代码的版本。
在一些方面,更新处理程序可以彼此共享某些基本功能。抽象更新器(例如,抽象更新器类)可以使用利用共享/公共功能定义的共享“基本”类(例如,标准OOP主体)。在一些方面,抽象更新器构造器可以被子类/实施类使用并且仅由子类/实施类访问,因此具有受保护的范围。为了更新代码,抽象更新器构造器可以使用规则参数(例如,串)和难度参数(例如,由整数指示)、搜索串参数和替换串参数。规则参数可以用于记录目的并且可以包括正在处置的规则的名称。难度参数可以包括正在处理的规则的难度,并且可以由规则引擎502或者以特定处理程序级别来定义。搜索串参数可以包括可以被转换为JAVATM正则表达式的风格化正则表达式,以用于搜索目标源文件以查找需要修改的源代码。风格化可以包括必须在替换代码中使用的变量所在的位置。替换串参数可以包括用于替换所选择的源代码的风格化代码串。风格化可以包括从所选择的代码读取的变量要被插入的位置。
抽象更新器构建搜索串处理程序可以将风格化搜索串转换为正则表达式(例如,JAVATM正则表达式)串,该正则表达式串能够从搜索源文件中的所选择的文本/代码选择任何定义的变量或方法召用。为了更新代码,抽象更新器构建搜索串处理程序可以使用搜索串(string)参数和仅代码类型(仅JAVATM)(布尔值)参数。搜索串(string)参数可以包括用于构建用于搜索源文件的模式对象(例如,正则表达式模式对象、JAVATM正则表达式模式对象)的风格化搜索串。仅代码类型(布尔值)参数可以包括是否仅允许在代码类型(例如,JAVATM标识符)中有效的字符的指示。当搜索标识符(诸如变量名称或类名称)时,可以使用仅代码类型参数。抽象更新器构建搜索串处理程序可以返回正则表达式(例如,JAVATM正则表达式),其可以用于构建模式对象以用于从源文件中扫描和选择源代码。
抽象更新器构建搜索模式处理程序可以将风格化搜索串转换为正则表达式(例如,JAVATM正则表达式)模式对象,该正则表达式模式对象能够从搜索源文件中的所选择的文本/代码中选择任何定义的变量或方法召用。为了更新代码,抽象更新器构建搜索模式处理程序可以使用搜索串(string)参数和仅代码类型(仅JAVATM)(布尔值)参数。搜索串(string)参数可以包括用于构建用于搜索源文件的模式对象(例如,正则表达式模式对象、JAVATM正则表达式模式对象)的风格化搜索串。仅代码类型(布尔值)参数可以包括是否仅允许在代码类型(例如,JAVATM标识符)中有效的字符的指示。当搜索标识符(诸如变量名称或类名称)时,可以使用仅代码类型参数。抽象更新器构建搜索模式处理程序可以返回仅代码类型模式对象(例如,JAVATM模式对象),以用于从源文件扫描和选择源代码。
抽象更新器获取客户信息处理程序可以加载正在处理的项目的计费和其他详细信息。为了更新代码,抽象更新器获取客户信息处理程序可以不包括任何参数。相关信息(诸如客户的查找代码)可以从处理程序状态加载。抽象更新器处置规则处理程序可以是更新处理程序处置规则的实施方式并且可以在更新器处理程序接口中定义。抽象更新器处置规则处理程序可以将处理程序的状态设置为适当的预处置和后处置。此外,抽象更新器处置规则处理程序可以在适当时将已更新的源代码文本存储在目标中。抽象更新器确实处置规则处理程序可以是实施次/子类要实施的API。子实施方式可以处置对源代码的实际更新。抽象更新器确实处置规则处理程序可以包括扫描结果参数,该扫描结果参数可以是来自扫描器的经解析和修饰的输出消息。该消息可以用作正在处理规则的“查找关键字”以及来自扫描器的任何相关联的信息,并且在某些情况下可以用作源文件。抽象更新器确实处置规则处理程序可以用于更新处理程序和目标的状态(用源代码)。抽象更新器确实处置规则处理程序可以不返回任何内容,因为更新处理程序和目标可能已经应用了适用的更新。当更新处理完成时,抽象更新器完成处置处理程序可以由处理程序实施方式设置。默认情况下,抽象更新器完成处置处理程序可以返回“真”,但在特殊情况需要时可以通过实施处理程序来超控。抽象更新器完成处置处理程序可以返回布尔值,例如,该处理程序是否已完成对规则的处理或者是否需要附加处理(或由另一个处理器处置)。如果抽象更新器被跳过处理程序必须跳过处理程序被定义为可调用的任何代码,则抽象更新器被跳过处理程序可以由处理程序实施方式设置。当变量需要用于更新但无法定位在所供应的源文件中时,这可以是可能的。如果该处理程序必须跳过处置给定源文件中的已触发的规则,则抽象更新器被跳过处理程序可以返回布尔值。
搜索串(string)参数可以包括风格化搜索串,以构建用于搜索源文件的模式对象(例如,正则表达式模式对象、JAVATM正则表达式模式对象)。仅代码类型(布尔值)参数可以包括是否仅允许在代码类型(例如,JAVATM标识符)中有效的字符的指示。当搜索标识符(诸如变量名称或类名称)时,可以使用仅代码类型参数。抽象更新器构建搜索模式可以返回仅代码类型模式对象(例如,JAVATM模式对象),以用于从源文件扫描和选择源代码。
更新处理程序可以是更新处理程序接口的实施方式,并且可以从抽象更新器处理程序扩展并且与抽象更新器处理程序共享功能。更新处理程序可以由规则引擎502调用以处置规则的动作。例如,更新处理程序可以从外部数据库(例如,储存库)接收计费信息、客户细节和/或运行模式(例如,范围/报价vs更新)。作为另一示例,更新处理程序可以从规则引擎502接收关于被调用的规则、被处理的客户和/或包含要更新的源代码的对象的信息。作为又一示例,更新处理程序可以向规则引擎502发送已更新的代码、所应用的更新的数量的计数、每次更新的速率、和/或调用的样本。
在一些方面,处理程序可以按级分组。例如,一级处理程序(诸如简单更新器处理程序)可以是执行保留一个或多个变量的内容的简单搜索和替换的更新器处理程序。当简单的搜索和替换代码就足够时,可以使用简单更新器处理程序。图9A图示根据一些方面的简单更新器处理程序900的概念示例。简单更新器处理程序900可以包括规则名称902(例如,“java/lang/Integer::<init>(I)V”)、搜索表达式904(例如,“news\\s+(?:java\\.lang\\.)?Integer\\(%VAR%\\)”,诸如风格化搜索表达式,以及替换表达式906(例如,“Integer.valueOf\\(%VAR%\\)”),诸如风格化替换串。图9B图示根据一些方面的将由简单更新器处理程序900更新的输入代码930的概念示例。如图9B所示,输入代码930包括搜索到的代码串的第一实例932、搜索到的代码串的第二实例934、搜索到的代码串的第三实例936、以及搜索到的代码串的第四实例938。图9C图示根据一些方面的先前由简单更新器处理程序900更新的输出代码950的概念示例。如图9C所示,输出代码950包括替换表达式的第一实例952、替换表达式的第二实例954、替换表达式的第三实例956、以及替换表达式的第四实例958。简单更新处理程序900可以接收输入930并且更新输入代码930以产生输出代码950。例如,简单更新处理程序900可以将搜索表达式的第一实例932更新为替换表达式的第一实例952,将搜索表达式的第二实例934更新为替换表达式的第二实例954,将搜索表达式的第三实例936更新为替换表达式的第三实例956,并且将搜索表达式的第四实例938更新为替换表达式的第四实例958。
在一些方面,简单更新器处理程序900可以对源代码文件中与定义的搜索表达式904相匹配的串模式进行智能搜索。搜索表达式904可以在被调用的规则中定义,并且可以被传递到一个或多个处理程序508。当已经找到与搜索表达式匹配的代码节段时,可以识别和选择一个或多个变量(例如,如果在搜索表达式904中定义了任何变量)。然后选择匹配的源代码(例如,代码串)进行替换。然后构建用于替换匹配的代码串(例如,代码段)的代码串,其中根据需要将任何识别到的变量插入到替换代码段中。然后,原始代码段被生成的代码段906替换。在一些方面,当原始代码段被生成的代码段906替换时,替换计数可以递增。
在一些方面,例如,可以重复前述过程,直到找不到更多匹配。一旦替换完成,已更新的代码可以存储在先前传递的保持源代码的对象中。该对象还可以用计数以及任何其他信息进行更新,以供以后处理和显示。
作为另一个示例,二级处理程序(诸如简单API更新器处理程序),类似于简单更新器处理程序,可以实施搜索和替换,但是还可以对所选择的源代码中的目标对象的对象类型执行基本检查。在一些方面,简单API更新器处理程序可以搜索目标API的使用,但还可以在修改源代码之前检查该调用被附接到适当类型的对象。图10A图示根据一些方面的二级API更新器处理程序1000的概念示例。在一些方面,简单API更新器处理程序1000可以是2级处理程序。简单API更新器处理程序1000可以包括规则名称1002(例如,“java/io/File::toURL()Ljava/net/URL”)、搜索表达式1004(例如,“%VAR%\\.toURL\\(\\)”),诸如风格化搜索表达式、替换表达式1006(例如,“%VAR%.toURI().toURL()")”),诸如风格化替换串,以及对象类型1008(例如,“File”)。图10B图示根据一些方面的将由简单API更新器处理程序1000更新的输入代码1030的概念示例。如图10B所示,输入代码1030包括搜索表达式的第一实例1032、搜索表达式的第二实例1034以及对象类型1036。图10C图示根据一些方面的先前由简单API更新器处理程序1000更新的输出代码1050的概念示例。如图10C所示,输出代码1050包括搜索表达式的实例1052、对象类型1054和替换表达式的实例1056。简单API更新处理程序1000可以接收输入1030并更新输入代码1030以产生输出代码1050。例如,简单API更新处理程序1000可以将搜索表达式的实例1032更新为替换表达式的实例1055。
在一些方面,简单更新器处理程序1000可以经由定义的搜索表达式1004对API的使用进行智能搜索。当已经找到与搜索表达式1004匹配的代码节段时,可以识别和选择一个或多个变量(如果在搜索表达式1004中定义了任何变量)。可以识别正在调用API的一个或多个变量,并且可以执行智能搜索以确定对象类型1008。搜索可以包括检查文件的源代码中的定义。如果无法确定对象类型1008,或者无法确定对象类型1008是匹配类型,则可以跳过更新并且可以搜索下一次使用。如果调用API的对象类型1008与期望的对象类型1008匹配,则可以选择具有API调用的代码进行替换。然后可以构建用于替换匹配的代码段的代码串,其中根据需要将任何识别到的一个或多个变量插入到替换代码段中。然后可以用生成的代码段来替换原始代码段,并且替换计数可以递增。
在一些方面,例如,可以重复前述过程,直到找不到更多匹配。一旦替换完成,已更新的代码可以存储在先前传递的保持源代码的对象中。该对象还可以用计数以及任何其他信息进行更新,以供以后处理和显示。
作为另一个示例,对于三级处理程序,诸如大十进制处理程序(例如,java.math.BigDecimalHandler),若干API可能已被弃用,但可能尚未被标记为删除。新的API可以利用最近才在语言java.math.RoundingMode中定义的对象(例如,JAVATM对象)的使用。因此,目标源文件可能需要更新导入,并且可能需要比简单搜索和替换更重要的修改。
对于三级处理程序,被替换的API可以具有一个或多个参数,其中一个或多个可以例如使用查找或以其他方式计算的原始参数值被替换为不同的值或对象。处理程序可以确定要替换哪个参数,并随后计算该新的参数。图11A图示根据一些方面的用于使用三级处理程序进行更新的输入代码1100的概念示例。如图11A所示,输入代码1100可以包括对象类型1102(例如,“BigDecimal”)和搜索表达式1104(例如,“bd.setScale(5,BigDecimal.ROUND_HALF_UP)”),诸如风格化搜索表达式。图11B图示根据一些方面的在使用三级处理程序更新输入代码1100之后的输出代码1150的概念示例。如图11B所示,输出代码1150可以包括对象类型1152(例如,“BigDecimal”)和替换表达式1154(例如,“RoundingMode.HALF_UP”),诸如风格化替换表达式。图12A图示根据一些方面的用于使用三级处理程序进行更新的输入代码1200的概念示例。如图12A所示,输入代码1200可以包括对象类型1202(例如,“BigDecimal”)和搜索表达式1204(例如,“bd.setScale(5,3);”),诸如风格化搜索表达式。图12B图示根据一些方面的在使用三级处理程序更新输入代码1200之后的输出代码1250的概念示例。如图12B所示,输出代码1250可以包括对象类型1252(例如,“BigDecimal”)和替换表达式1254(例如,“RoundingMode.valueOf(3))”),诸如风格化替换表达式。图13A图示根据一些方面的用于使用三级处理程序进行更新的输入代码1300的概念示例。如图13A所示,输入代码1300可以包括对象类型1302(例如,“BigDecimal”)和搜索表达式1304(例如,“bd.setScale(5,getRoundingMode())”),诸如风格化搜索表达式。图13B图示根据一些方面的在使用三级处理程序更新输入代码1300之后的输出代码1350的概念示例。如图13B所示,输出代码1350可以包括对象类型1352(例如,“BigDecimal”)以及替换表达式1354(例如,“RoundingMode.valueOf(getRoundingMode())”),诸如风格化替换表达式。
在一些方面,三级处理程序可以经由生成的搜索表达式来执行对API的使用的智能搜索。当发现与搜索表达式匹配的代码节段时,可以识别并选择一个或多个变量(如果存在的话)。可以识别正在调用API的变量,并且可以执行智能搜索以确定类型是例如“BigDecimal”。搜索可以包括检查文件的源代码中的定义。如果无法确定对象类型,或者无法确定对象类型是匹配类型,则跳过更新并搜索下一次使用。如果调用API的对象类型匹配(在本例中为“BigDecimal”),则可以选择具有API调用的代码进行替换。然后可以构建用于替换匹配的代码段的串,其中根据需要将任何识别到的变量插入到替换代码段中。作为替换的一部分,可以确定所需的“RoundingMode”的调用。在一些方面,然后可以用生成的代码段来替换原始代码段,并且替换计数可以递增。
在一些方面,例如,可以重复前述过程,直到找不到更多匹配。一旦替换完成,已更新的代码可以存储在先前传递的保持源代码的对象中。该对象还可以用计数以及任何其他信息进行更新,以供以后处理和显示。
对于四级处理程序(例如,AccessibleObjectIsAccessibleHandler),例如,在JAVATM版本9中,API“java/lang/reflect/AccessibleObject::isAccessible()Z”可能已被弃用,并替换为“java/lang/reflect/AccessibleObject::canAccess(object)Z。”旧的API可能未采用参数,并且可能未在可以传递到API的对象上调用。四级处理程序可能需要确定应将源代码中的什么对象传递到新的API,并且如果是这样,则可以使用所确定的源对象来生成新的代码。图14A图示根据一些方面的用于使用四级处理程序进行更新的输入代码1400的概念示例。如图14A所示,输入代码1400可以包括搜索表达式1402(例如,“field.isAccessible()”),诸如风格化搜索表达式。图14B图示根据一些方面的在使用四级处理程序更新输入代码1400之后的输出代码1450的概念示例。如图14B所示,输出代码1450可以包括搜索表达式1452(例如,“source”),诸如风格化搜索表达式,以及替换表达式1454(例如,“canAccess(source))”),诸如风格化替换表达式。在一些方面,可以识别对弃用的API的召用。可以识别用于调用对象的变量的名称,并且随后可以识别该变量的声明。从该变量声明,可以确定对用于召用的源对象的引用。然后可以将引用作为参数传递到替换代码中的新的API。应当注意,在某些情况下,不可以(例如,不应该)传递源对象。四级处理程序可以识别这些条件并替代地传递“空”值。
对于五级处理程序(例如,SQLSlammerHandler),例如在JAVATM中,可能不适当地使用SQL语句。SQL“PreparedStatements”至少可以在编码员使用SQL语句的某些情况下使用。应该注意的是,此类问题可能不是弃用问题,而可能是可以由静态代码分析器(包括SONARQUBETM)检测到的安全性、性能和“代码味道”问题。扫描器(诸如SONARQUBETM扫描器)可以在结果和报告中包括一个或多个行号以及一个或多个字符偏移。图15A图示根据一些方面的用于使用五级处理程序进行更新的输入代码1500的概念示例。如图15A所示,输入代码1500可以包括搜索表达式1502(例如,“Statement s=connection.createStatement()”),诸如风格化搜索表达式、第一对象类型1504(例如,“newUserName”),以及第二对象类型1506(例如,“+userId”)。在一些方面,第一对象类型1504可以是第一变量名称并且第二对象类型可以是第二变量名称。图15B图示根据一些方面的在使用四级处理程序更新输入代码1500之后的输出代码1550的概念示例。如图15B所示,输出代码1550可以包括不同的SQL对象java.sql.PreparedStatement、新的SQL命令串、第一对象类型1504(例如,“newUserName”)和第二对象类型1506(例如,“userId”)。在一些方面,可以识别语句创建的位置。可以用识别和选择的一个或多个变量来识别SQL查询。然后可以用插入在一个或多个变量的适当的位置的“?”生成针对准备好的语句的SQL查询。然后可以生成调用适当的设置召用的代码。一旦生成了替换代码,就可以将替换代码插入源代码文件中的有问题的代码的位置。在一些方面,输出代码1550可以包括对语句类型的改变,如第一已更新的代码串1552中所示(例如,“ps=connection.prepareStatement(“Update name=?where id=?”))。例如,图15A的输入代码1500包括语句类型“statement s”。在更新输入代码1500以产生输出代码1550之后,如图15B所示,语句类型被改变为“finalPreparedStatement ps”。在一些方面,第一已更新的代码串1552可以包括输入串(例如,“(“Update name=?whereid=?”)”)。附加地或替代地,输出代码1550可以包括输入串从多个串片段到一个串的改变,如第二已更新的代码串1554中所示。在一些方面,一个或多个变量名称可以从输入代码1500改变为输出代码1550。例如,如图15A所示,第一对象类型1504可以包括第一变量名称(例如,“newUserName”)并且第二对象类型1506可以包括第二变量名称(例如,“userId”)。在更新一个或多个代码串之后,已更新的代码1550的第一变量名称和/或第二变量名称可以已被更新为“?”如图15B所示。
在一些方面,可以提供报告。报告器可以收集由规则引擎502发送到更新器代理510的数据,并且可以将发送的数据格式化(例如,以PDF形式)以用于在计算机屏上或经由打印输出进行一般查看。默认情况下,发送的数据可以保存到本地硬盘以用于显示和检索。通常,报告器的输入可以是来自更新器代理510的规则引擎502的输出,并且输出可以是UpdateReport、ScopeReviewReport、OpenSourceReport或ExecutionReport中的一个或多个。在一些方面,“UpdateReport”、ScopeReviewReport、OpenSourceReport和/或ExecutionReport中的一个或多个可以图示对项目文件的一个或多个代码串从代码的初始版本到代码的最终或更新版本的一个或多个改变、修改和/或更新。
在一些方面,在一个或多个处理程序508更新由一个或多个处理程序中的至少一个处理程序识别的至少一个未更新的代码串之后,规则引擎502可以从一个或多个处理程序508接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示。在一些方面,一个或多个处理程序508可以使用该指示向规则引擎502提供已更新的代码串。例如,一旦每个所选择的处理程序完成处理,规则引擎502就可以从一个或多个处理程序接收已更新的源文件,并将已更新的源文件发送回更新器代理510,以供更新器代理510将项目文件写回到项目源(例如,图2的储存库222、图1的第一储存库114a、图1的第二储存库114b)。然后可以审阅和/或重新编译这些文件以产生项目文件的更新版本。在一些方面,规则引擎502可以生成项目文件的更新版本以用于在显示屏上显示。随后,项目文件的更新版本可以显示在显示屏上以用于查看。例如,规则引擎502可以将包括具有已更新的源代码的项目文件的处理和记账数据发送到更新器代理510,以用于报告目的。附加地或替代地,规则引擎502可以将计费和处理数据发送到ERP系统以用于跟踪和记录目的。根据配置,规则引擎502可以访问ERP系统以确定是否应当实际应用更新,或者是否应当针对近似报价来估计近似投入水平。
图8图示根据一些方面的已更新的项目文件800的概念示例。已更新的项目文件可以经由更新器系统通信信道512和防火墙514从规则引擎502发送到更新器代理510。如图8所示,已更新的项目文件800包括一个或多个更新802,其包括第一更新804、第二更新806和第三更新808。在一些方面,一个或多个更新802中的每一个可以是相同的更新,诸如“Integer,valueOf”。替代地,一个或多个更新802中的至少一个更新可以是唯一更新的或与剩余的一个或多个更新不同的更新。
在一些方面,一组一个或多个规则可以将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。例如,多个处理程序508中的每一个可以基于每个规则来创建。规则可以由结果的内容触发,其中每个结果触发零个或更多个规则。在一些方面,并非所有结果都可以具有为其配置的规则和/或处理程序。没有规则或处理程序的结果可以被称为“跳过”结果。当处理程序508可用时,可以将所讨论的相关联的结果条目放入“进行中”列表中,直到处理完成。
图16是图示根据一些方面的用于采用处理系统1614的规则引擎1600的硬件实施方式的示例的框图。例如,规则引擎1600可以对应于本文在图1、图2和图5中的任何一个或多个中示出和描述的任何实体。
规则引擎1600可以用包括一个或多个处理器1604的处理系统1614来实施。处理器1604的示例包括微处理器、微控制器、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、可编程逻辑设备(PLD)、状态机、门控逻辑、分立硬件电路和被配置为执行贯穿本公开描述的各种功能的其他合适的硬件。在各种示例中,规则引擎1600可以被配置为执行本文描述的功能中的任何一个或多个。也就是说,如在规则引擎1600中使用的处理器1604可以用于实施本文描述的过程中的任何一个或多个。在一些情况下,处理器1604可以经由基带或调制解调器芯片来实施,并且在其他实施方式中,处理器1604本身可以包括与基带或调制解调器芯片有区别且不同的多个设备(例如,在此类场景中,它可以协同工作以实现本文讨论的方面)。如上所述,在实施方式中可以使用基带调制解调器处理器之外的各种硬件布置和部件,包括射频链、功率放大器、调制器、缓冲器、交织器、加法器/求和器等。
在该示例中,处理系统1614可以用通常由总线1602表示的总线架构来实施。取决于处理系统1614的具体应用和总体设计约束,总线1602可以包括任何数量的互连总线和桥。总线1602将包括一个或多个处理器(总体上由处理器1604表示)和计算机可读介质(总体上由计算机可读存储介质1606表示)的各种电路通信地耦合在一起。总线1602还可以链接各种其他电路,诸如定时源、外围设备、电压调节器和功率管理电路,这些电路在本领域是公知的,并且因此将不再进一步描述。总线接口1608提供总线1602和收发器1610之间的接口。网络接口1610提供用于通过传输介质(例如,数据接口)与各种其他装置通信的构件。在一些方面,网络接口1610可以用于接收包含一个或多个未更新的代码串的数据文件。在一些方面,网络接口1610可以用于传输包含一个或多个已更新的代码串的数据文件。还可以提供用户接口1612(例如,键盘、显示器、扬声器、麦克风、操纵杆)。在一些方面,用户接口1612可以用于显示包含一个或多个未更新的代码串的数据文件的代码。在一些方面,用户接口1612可以用于显示包含一个或多个已更新的代码串的数据文件的代码。
处理器1604负责管理总线1602和一般处理,包括执行存储在计算机可读存储介质1606上的软件。软件在由处理器1604执行时使得处理系统1614执行本文针对任何特定装置描述的各种功能。计算机可读存储介质1606还可以用于存储在执行软件时由处理器1604操纵的数据。
处理系统中的一个或多个处理器1604可以执行软件。软件应广义地解释为意味着指令、指令集、代码、代码段、程序代码、程序、子程序、软件模块、应用程序、软件应用程序、软件包、例程、子例程、对象、可执行文件、执行线程、过程、函数等等,无论是称为软件、固件、中间件、微代码、硬件描述语言还是其他。软件可以驻留在计算机可读存储介质1606上。
计算机可读存储介质1606可以是非暂时性计算机可读介质。通过示例的方式,非暂时性计算机可读介质包括磁存储设备(例如,硬盘、软盘、磁条)、光盘(例如,压缩盘(CD)或数字多功能盘(DVD))、智能卡、闪存设备(例如卡、棒或密钥驱动器)、随机存取存储器(RAM)、只读存储器(ROM)、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)、寄存器、可移除盘以及用于存储可以由计算机访问和读取的软件和/或指令的任何其他合适的介质。计算机可读存储介质1606可以驻留在处理系统1614中、处理系统1614外部、或者跨包括处理系统1614的多个实体分布。计算机可读存储介质1606可以体现在计算机程序产品中。通过示例的方式,计算机程序产品可以包括封装材料中的计算机可读介质。本领域技术人员将认识到如何根据特定应用和施加在整个系统上的总体设计约束来最好地实施贯穿本公开呈现的所描述的功能。
在本公开的一些方面,处理器1604可以包括被配置用于各种功能的选择电路系统。例如,处理器1604可以包括选择电路系统1640,其被配置为根据一组一个或多个规则来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序。一组一个或多个规则可以将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。选择电路系统1640可以被配置为执行存储在计算机可读存储介质1606中的选择指令1650以实施本文描述的功能中的一个或多个的任何一个。
处理器1604还可以包括指示电路系统1642,其被配置为指示一个或多个处理程序中的至少一个处理程序扫描多个代码串、基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串,并且更新由至少一个处理程序识别的至少一个未更新的代码串。指示电路系统1642可以被配置为执行存储在计算机可读存储介质1606中的指示指令1652以实施本文描述的功能中的一个或多个的任何一个。
处理器1604可以进一步包括接收电路系统1644,其被配置为从至少一个处理程序接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示。接收电路系统1644还可以被配置为从扫描器接收与文件相关联的多个代码串。多个代码串中的每一个可以包括扫描的代码串。接收电路系统1644可以被配置为执行存储在计算机可读存储介质1606中的接收指令1654以实施本文描述的功能中的一个或多个的任何一个。
处理器1604可以进一步包括生成电路系统1646,其被配置为至少生成已更新的代码串以用于在显示屏上显示。生成电路系统1646可以被配置为执行存储在计算机可读存储介质1606中的生成指令1656以实施本文描述的功能中的一个或多个的任何一个。
处理器1604可以包括进一步识别电路系统1648,其被配置为识别多个代码串中的一个或多个未更新的代码串。识别电路系统1648可以被配置为执行存储在计算机可读存储介质1606中的识别指令1658以实施本文描述的功能中的一个或多个的任何一个。
图17是根据一些方面的由规则引擎实施的用于更新一个或多个代码串的方法的流程图1700。如下所述,在本公开的范围内的特定实施方式中可以省略一些或全部图示的特征,并且一些图示的特征可能不是对于所有方面的实施都必需的。在一些示例中,该方法可以由如本文中所描述的并且在图16中所图示的规则引擎1600、由处理器或处理系统、或者由用于执行所描述的功能的任何合适的构件来执行。
在框1702处,规则引擎1600可以根据一组一个或多个规则来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序。在一些方面,一组一个或多个规则将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。在框1704处,规则引擎1600可以指示一个或多个处理程序中的至少一个处理程序扫描多个代码串、基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串,并且更新由至少一个处理程序识别的至少一个未更新的代码串。
在一些方面,指示一个或多个处理程序中的至少一个处理程序更新至少一个未更新的代码串可以包括指示至少一个处理程序更新以下项中的至少一项:未更新的代码串的语法、未更新的代码串的变量或未更新的代码串的对象。在一些方面,指示一个或多个处理程序中的至少一个处理程序更新至少一个未更新的代码串的规则引擎1600可以指示一个或多个处理程序中的至少一个处理程序将至少一个未更新的代码串从代码的初始版本更新为代码的更新版本。例如,
在框1706处,规则引擎1600可以从至少一个处理程序接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示。例如,
在一些方面,规则引擎1600从扫描器接收与文件相关联的多个代码串可以包括:从扫描器接收多个代码串中的一个或多个未更新的代码串的指示。在一些方面,更新版本可以包括紧接在代码的初始版本之前的代码的版本。在一些方面,更新版本可以包括代码的最新版本。
在框1708处,规则引擎1600可以至少生成已更新的代码串以用于在显示屏上显示。在一些示例中,在选择一个或多个处理程序之前,规则引擎1600可以从扫描器接收与文件相关联的多个代码串,其中多个代码串中的每一个包括扫描的代码串。在一些方面,规则引擎1600从扫描器接收与文件相关联的多个代码串可以包括:从扫描器接收多个代码串中的一个或多个未更新的代码串的指示。在一些方面,在选择一个或多个处理程序之前,规则引擎可以进一步识别多个代码串中的一个或多个未更新的代码串。在一些方面,规则引擎1600识别多个代码串中的一个或多个未更新的代码串可以基于该指示。
在一个配置中,第一UE 1600包括用于执行关于图17描述的各种功能和过程的构件。在一个方面,前述构件可以是图16所示的被配置为执行由前述构件叙述的功能的处理器1604。在另一方面,前述构件可以是被配置为执行由前述构件叙述的功能的电路或任何装置。
当然,在上述示例中,处理器1604中包括的电路系统仅作为示例提供,并且用于执行所描述的功能的其他构件可以被包括在本公开的各个方面内,包括但不限于存储在计算机可读存储介质1606中的指令,或者在图1、图2和图5中的任一个中描述并且利用例如本文中关于图17描述的过程和/或算法的任何其他合适的装置或构件。
图18是根据一些方面的由规则引擎实施的用于更新一个或多个代码串的方法的流程图1800。如下所述,在本公开的范围内的特定实施方式中可以省略一些或全部图示的特征,并且一些图示的特征可能不是对于所有方面的实施都必需的。在一些示例中,该方法可以由如本文中所描述的并且在图16中所图示的规则引擎1600、由处理器或处理系统、或者由用于执行所描述的功能的任何合适的构件来执行。
在框1802处,规则引擎1600可以从扫描器接收与文件相关联的多个代码串。多个代码串中的每一个可以包括扫描的代码串。在一些方面,规则引擎1600可以在规则引擎1600选择一个或多个处理程序之前从扫描器接收与文件相关联的多个代码串。在一些方面,规则引擎1600从扫描器接收与文件相关联的多个代码串可以包括:从扫描器接收多个代码串中的一个或多个未更新的代码串的指示。
在框1804处,规则引擎1600可以识别多个代码串中的一个或多个未更新的代码串。在一些方面,规则引擎1600可以在选择一个或多个处理程序之前识别多个代码串中的一个或多个未更新的代码串。在框1806处,规则引擎1600可以根据一组一个或多个规则来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序。在一些方面,一组一个或多个规则将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。在框1808处,规则引擎1600可以指示一个或多个处理程序中的至少一个处理程序扫描多个代码串、基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串,并且更新由至少一个处理程序识别的至少一个未更新的代码串。
在一些方面,指示一个或多个处理程序中的至少一个处理程序更新至少一个未更新的代码串可以包括指示至少一个处理程序更新以下项中的至少一项:未更新的代码串的语法、未更新的代码串的变量或未更新的代码串的对象。在一些方面,指示一个或多个处理程序中的至少一个处理程序更新至少一个未更新的代码串的规则引擎1600可以指示一个或多个处理程序中的至少一个处理程序将至少一个未更新的代码串从代码的初始版本更新为代码的更新版本。
在框1810处,规则引擎1600可以从至少一个处理程序接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示。在一些方面,规则引擎1600从扫描器接收与文件相关联的多个代码串可以包括:从扫描器接收多个代码串中的一个或多个未更新的代码串的指示。在一些方面,更新版本可以包括紧接在代码的初始版本之前的代码的版本。在一些方面,更新版本可以包括代码的最新版本。在一些方面,规则引擎1600识别多个代码串中的一个或多个未更新的代码串可以基于该指示。在框1812处,规则引擎1600可以至少生成已更新的代码串以用于在显示屏上显示。
在一个配置中,第一UE 1600包括用于执行关于图17描述的各种功能和过程的构件。在一个方面,前述构件可以是图16所示的被配置为执行由前述构件叙述的功能的处理器1604。在另一方面,前述构件可以是被配置为执行由前述构件叙述的功能的电路或任何装置。
当然,在上述示例中,处理器1604中包括的电路系统仅作为示例提供,并且用于执行所描述的功能的其他构件可以被包括在本公开的各个方面内,包括但不限于存储在计算机可读存储介质1606中的指令,或者在图1、图2和图5中的任一个中描述并且利用例如本文中关于图16描述的过程和/或算法的任何其他合适的装置或构件。
图19是图示根据一些方面的用于采用处理系统1914的处理程序1900的硬件实施方式的示例的框图。例如,处理程序1900可以是图1、图2和图5中的任何一个或多个所图示的任何设备。在一些示例中,处理程序1900可以是第一处理程序508a、第二处理程序508b、第三处理程序508c、或第四处理程序508d中的任何一个或多个。
根据本公开的各个方面,元件、元件的任何部分、或者元件的任何组合可以用包括一个或多个处理器1904的处理系统1914来实施。处理系统1914可以基本上与图16图示的处理系统1614相同,包括总线接口1908、总线1902、处理器1904和计算机可读存储介质1906。此外,处理程序1900可以包括与本文在图16中描述的那些基本上类似的用户接口1912和网络接口1910。也就是说,处理程序1900中使用的处理器1904可以用于实施本文描述的过程中的任何一个或多个。
在本公开的一些方面,处理器1904可以包括被配置用于各种功能的电路系统。例如,处理器1904可以包括接收电路系统1940,其被配置为从规则引擎接收对与文件相关联的多个代码串的访问。多个代码串可以包括一个或多个未更新的代码串。接收电路系统1940还可以被配置为从规则引擎接收处理程序属于一组至少一个处理程序的指示(例如第二指示),该一组至少一个处理程序基于一组一个或多个规则被选择用于更新一个或多个未更新的代码串中的至少一个未更新的代码串,该一组一个或多个规则将一组至少一个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。接收电路系统1940可以被配置为执行存储在计算机可读存储介质1906中的接收指令1950以实施本文描述的功能中的一个或多个的任何一个。
处理器1904还可以包括扫描电路系统1942,其被配置为扫描多个代码串。扫描电路系统1942可以被配置为执行存储在计算机可读存储介质1906中的扫描指令1952以实施本文描述的功能中的一个或多个的任何一个。
处理器1904可以进一步包括识别电路系统1944,其被配置为例如基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串。识别电路系统1944还可以被配置为执行存储在计算机可读存储介质1906中的识别指令1954以实施本文描述的功能中的一个或多个的任何一个。
另外,处理器1904可以包括更新电路系统1946,其被配置为更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示。更新电路系统1946可以被配置为执行存储在计算机可读存储介质1906中的更新指令1956以实施本文描述的功能中的一个或多个的任何一个。
处理器1904还可以包括传输电路系统1948,其被配置为向规则引擎传输一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示(例如,第一指示)以用于在显示屏上显示。传输电路系统1948可以被配置为执行存储在计算机可读存储介质1906中的传输指令1958以实施本文描述的功能中的一个或多个的任何一个。
图20是根据一些方面的由处理程序1900实施的用于更新一个或多个代码串的方法的流程图1200。如下所述,在本公开的范围内的特定实施方式中可以省略一些或全部图示的特征,并且一些图示的特征可能不是对于所有方面的实施都必需的。在一些示例中,该方法可以由如上所述的并且在图19中所图示的规则引擎1900、由处理器或处理系统、或者由用于执行所描述的功能的任何合适的构件来执行。
在框2002处,处理程序1900可以从规则引擎接收对与文件相关联的多个代码串的访问。多个代码串可以包括一个或多个未更新的代码串。在框2004处,处理程序1900可以扫描多个代码串。在框2006处,处理程序1900可以基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串。在一些方面,处理程序1900可以基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串。在框2008处,处理程序1900可以更新由处理程序1900识别的至少一个未更新的代码串以用于在显示屏上显示。在框2010处,处理程序1900可以向规则引擎传输一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的第一指示以用于在显示屏上显示。
在一个配置中,处理程序1900包括用于执行关于图20描述的各种功能和过程的构件。在一个方面,前述构件可以是图19所示的被配置为执行由前述构件叙述的功能的处理器1904。在另一方面,前述构件可以是被配置为执行由前述构件叙述的功能的电路或任何装置。
当然,在上述示例中,处理器1904中包括的电路系统仅作为示例提供,并且用于执行所描述的功能的其他构件可以被包括在本公开的各个方面内,包括但不限于存储在计算机可读存储介质1906中的指令,或者在图1、图2和图5中的任一个中描述并且利用例如本文中关于图19描述的过程和/或算法的任何其他合适的装置或构件。
图21是根据一些方面的由处理程序1900实施的用于更新一个或多个代码串的方法的流程图2100。如下所述,在本公开的范围内的特定实施方式中可以省略一些或全部图示的特征,并且一些图示的特征可能不是对于所有方面的实施都必需的。在一些示例中,该方法可以由如上所述的并且在图19中所图示的规则引擎1900、由处理器或处理系统、或者由用于执行所描述的功能的任何合适的构件来执行。
在框2102处,处理程序1900可以从规则引擎接收对与文件相关联的多个代码串的访问。多个代码串可以包括一个或多个未更新的代码串。在框2104处,处理程序1900可以从规则引擎接收处理程序1900属于一组至少一个处理程序的第二指示,该一组至少一个处理程序基于一组一个或多个规则被选择用于更新一个或多个未更新的代码串中的至少一个未更新的代码串,该一组一个或多个规则将一组至少一个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。在框2106处,处理程序1900可以扫描多个代码串。在框2108处,处理程序1900可以基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串。在一些方面,处理程序1900可以基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串。
在框2110处,处理程序1900可以更新由处理程序1900识别的至少一个未更新的代码串以用于在显示屏上显示。在框2112处,处理程序1900可以向规则引擎传输一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的第一指示以用于在显示屏上显示。
在一个配置中,处理程序1900包括用于执行关于图21描述的各种功能和过程的构件。在一个方面,前述构件可以是图19所示的被配置为执行由前述构件叙述的功能的处理器1904。在另一方面,前述构件可以是被配置为执行由前述构件叙述的功能的电路或任何装置。
当然,在上述示例中,处理器1904中包括的电路系统仅作为示例提供,并且用于执行所描述的功能的其他构件可以被包括在本公开的各个方面内,包括但不限于存储在计算机可读存储介质1906中的指令,或者在图1、图2和图5中的任一个中描述并且利用例如本文中关于图21描述的过程和/或算法的任何其他合适的装置或构件。
在第一方面,提供了一种规则引擎。规则引擎包括存储器以及与存储器进行电子通信的一个或多个处理器。一个或多个处理器被配置为根据一组一个或多个规则来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序,其中一组一个或多个规则将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联。一个或多个处理器还被配置为指示一个或多个处理程序中的至少一个处理程序:扫描多个代码串;基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串;并且更新由至少一个处理程序识别的至少一个未更新的代码串。一个或多个处理器进一步被配置为从至少一个处理程序接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示。另外,一个或多个处理器被配置为至少生成已更新的代码串以用于在显示屏上显示。
在第二方面,单独或与第一方面组合,在选择一个或多个处理程序之前,一个或多个处理器进一步被配置为:从扫描器接收与文件相关联的多个代码串,其中多个代码串中的每一个包括扫描的代码串;并且识别多个代码串中的一个或多个未更新的代码串。
在第三方面,单独或与第一和第二方面中的一个或多个组合,从扫描器接收与文件相关联的多个代码串包括:从扫描器接收多个代码串中的一个或多个未更新的代码串的指示,并且识别多个代码串中的一个或多个未更新的代码串基于该指示。
在第四方面,单独或与第一至第三方面中的一个或多个组合,指示一个或多个处理程序中的至少一个处理程序更新至少一个未更新的代码串包括指示至少一个处理程序更新以下项中的至少一项:未更新的代码串的语法、未更新的代码串的变量、或未更新的代码串的对象。
在第五方面,单独或与第一至第四方面中的一个或多个组合,指示一个或多个处理程序中的至少一个处理程序更新至少一个未更新的代码串包括指示一个或多个处理程序中的至少一个处理程序将至少一个未更新的代码串从代码的初始版本更新为代码的更新版本。
在第六方面,单独或与第一至第五方面中的一个或多个组合,更新版本包括紧接在代码的初始版本之前的代码的版本。
在第七方面,单独或与第一至第六方面中的一个或多个组合,更新版本包括代码的最新版本。
在第八方面,提供了一种处理程序。处理程序包括存储器以及与存储器进行电子通信的一个或多个处理器。一个或多个处理器被配置为从规则引擎接收对与文件相关联的多个代码串的访问,其中多个代码串包括一个或多个未更新的代码串。一个或多个处理器还被配置为扫描多个代码串。一个或多个处理器进一步被配置为基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串。另外,一个或多个处理器被配置为更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示。一个或多个处理器还被配置为向规则引擎传输一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的第一指示以用于在显示屏上显示。
在第九方面,单独或与第八方面组合,一个或多个处理器进一步被配置为从规则引擎接收处理程序属于一组至少一个处理程序的第二指示,该一组至少一个处理程序基于一组一个或多个规则被选择用于更新一个或多个未更新的代码串中的至少一个未更新的代码串,该一组一个或多个规则将一组至少一个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联;并且响应于接收到第二指示,扫描多个代码串,基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串,并且更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示。
在第十方面,单独或与第八和第九方面组合,更新至少一个未更新的代码串包括更新以下项中的至少一项:至少一个未更新的代码串的语法、至少一个未更新的代码串的变量、或至少一个未更新的代码串的对象。
在第十一方面,单独或与第八至第十方面组合,更新至少一个未更新的代码串包括将至少一个未更新的代码串从代码的初始版本更新为代码的更新版本。
在第十二方面,单独或与第八至第十一方面组合,更新版本包括紧接在代码的初始版本之前的代码的版本。
在第十三方面,单独或与第八至第十二方面组合,更新版本包括紧接在代码的初始版本之前的代码的版本。
在第三十三方面,单独或与第二十七至第三十二方面组合,更新版本包括代码的最新版本。
在一个配置中,一种规则引擎包括:用于根据一组一个或多个规则(一组一个或多个规则将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联)来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序的构件;用于指示一个或多个处理程序中的至少一个处理程序:扫描多个代码串,基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串,并且更新由至少一个处理程序识别的至少一个未更新的代码串的构件;用于从至少一个处理程序接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示的构件;以及用于至少生成已更新的代码串以用于在显示屏上显示的构件。
在一个方面,前述用于根据一组一个或多个规则(一组一个或多个规则将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联)来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序的构件;用于指示一个或多个处理程序中的至少一个处理程序:扫描多个代码串,基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串,并且更新由至少一个处理程序识别的至少一个未更新的代码串的构件;用于从至少一个处理程序接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示的构件;以及用于至少生成已更新的代码串以用于在显示屏上显示的构件可以是图16所示的被配置为执行由前述构件叙述的功能的(一个或多个)处理器1604。例如,前述用于根据一组一个或多个规则(一组一个或多个规则将一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联)来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序的构件可以包括图16中的选择电路系统1640。作为另一示例,前述用于指示一个或多个处理程序中的至少一个处理程序:扫描多个代码串,基于扫描多个代码串来识别一个或多个未更新的代码串中的与至少一个处理程序唯一相关联的至少一个未更新的代码串,并且更新由至少一个处理程序识别的至少一个未更新的代码串的构件可以包括图16所示的指示电路系统1642。作为又一示例,前述用于从至少一个处理程序接收与至少一个处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的指示的构件可以包括图16所示的接收电路系统1644以及网络接口1610。作为又一示例,前述用于至少生成已更新的代码串以用于在显示屏上显示的构件可以包括图16所示的生成电路系统1646。在另一方面,前述构件可以是被配置为执行由前述构件叙述的功能的电路或任何装置。
在一个配置中,一种处理程序包括用于从规则引擎接收对与文件相关联的多个代码串(其中多个代码串包括一个或多个未更新的代码串)的访问的构件;用于扫描多个代码串的构件;用于基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串的构件;用于更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示的构件;以及用于向规则引擎传输一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的第一指示以用于在显示屏上显示的构件。
在一个方面,前述用于从规则引擎接收对与文件相关联的多个代码串(其中多个代码串包括一个或多个未更新的代码串)的访问的构件;用于扫描多个代码串的构件;用于基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串的构件;用于更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示的构件;以及用于向规则引擎传输一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的第一指示以用于在显示屏上显示的构件可以是图19所示的被配置为执行由前述构件叙述的功能的(一个或多个)处理器1904。例如,前述用于从规则引擎接收对与文件相关联的多个代码串(其中多个代码串包括一个或多个未更新的代码串)的访问的构件可以包括图19所示的接收电路系统1940以及网络接口1910。作为另一示例,前述用于扫描多个代码串的构件可以包括图19所示的扫描电路系统1942。作为又一示例,前述用于基于扫描多个代码串来识别一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串的构件可以包括图19所示的识别电路系统1944。作为又一示例,前述用于更新由处理程序识别的至少一个未更新的代码串以用于在显示屏上显示的构件可以包括图19所示的更新电路系统1946。作为又一示例,前述用于向规则引擎传输一个或多个未更新的代码串中的与处理程序唯一相关联的至少一个未更新的代码串是已更新的代码串的第一指示以用于在显示屏上显示的构件可以包括图19所示的传输电路系统1948以及网络接口1910。在另一方面,前述构件可以是被配置为执行由前述构件叙述的功能的电路或任何装置。
在本公开内,词语“示例性”用于意味着“用作示例、实例或说明”。本文中描述为“示例性”的任何实施方式或方面不一定被解释为比本公开的其他方面优选或有利。同样,术语“方面”并不要求本公开的所有方面都包括所讨论的特征、优点或操作模式。本文使用的术语“耦合”是指两个对象之间的直接或间接耦合。例如,如果对象A物理触摸对象B,并且对象B触摸对象C,则对象A和C仍可以被视为彼此耦合——即使它们没有直接物理触摸彼此。例如,即使第一对象从未与第二对象直接物理接触,第一对象也可以耦合到第二对象。术语“电路”和“电路系统”被广泛使用,并且旨在包括:电气设备和导体的硬件实施方式,当连接和配置时,它们能够执行本公开中描述的功能,而不限于电子电路的类型;以及信息和指令的软件实施方式,当由处理器执行时,它们能够执行本公开中描述的功能。
图1-图21所图示的部件、步骤、特征和/或功能中的一个或多个可以重新布置和/或组合成单个部件、步骤、特征或功能,或者体现在若干部件、步骤或功能中。还可以添加附加阶段、部件、步骤和/或功能而不脱离本文公开的新颖特征。图1-图20中所图示的装置、设备和/或部件可以被配置为执行本文描述的方法、特征或步骤中的一个或多个。本文描述的新颖算法还可以有效地在软件中实施和/或嵌入在硬件中。
应当理解,所公开的方法中的步骤的具体顺序或层次是示例性过程的说明。基于设计偏好,应当理解,可以重新布置方法中的步骤的具体顺序或层次。所附方法权利要求以样本顺序呈现各个步骤的阶段,并且并不意味着限于所呈现的具体顺序或层次,除非其中具体叙述。
提供先前的描述以使本领域的任何技术人员能够实践本文描述的各个方面。对这些方面的各种修改对于本领域技术人员来说将是显而易见的,并且本文中定义的一般原理可以应用于其他方面。因此,权利要求不旨在限制于本文所示的方面,而是符合与权利要求的语言一致的完整范围,其中以单数引用阶段并不旨在表示“一个且仅一个”(除非具体如此说明),而是表示“一个或多个”。除非另有具体说明,否则术语“一些”是指一个或多个。提及项目列表中的“至少一个”的短语是指这些项目的任意组合,包括单个成员。作为示例,“a、b或c中的至少一个”旨在涵盖:a;b;c;a和b;a和c;b和c;以及a、b和c。本领域普通技术人员已知或以后将知道的贯穿本公开所描述的各个方面的阶段的所有结构和功能等同物均通过引用明确地并入本文,并且旨在由权利要求涵盖。此外,本文所公开的任何内容均不旨在献给公众,无论此类公开是否在权利要求中明确记载。
Claims (20)
1.一种规则引擎,其包括:
存储器;以及
与所述存储器进行电子通信的一个或多个处理器,其中所述一个或多个处理器被配置为:
根据一组一个或多个规则来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序,其中所述一组一个或多个规则将所述一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联,
指示所述一个或多个处理程序中的至少一个处理程序:
扫描所述多个代码串,
基于扫描所述多个代码串来识别所述一个或多个未更新的代码串中的与所述至少一个处理程序唯一相关联的至少一个未更新的代码串,并且
更新由所述至少一个处理程序识别的所述至少一个未更新的代码串,
从所述至少一个处理程序接收与所述至少一个处理程序唯一相关联的所述至少一个未更新的代码串是已更新的代码串的指示,并且
至少生成所述已更新的代码串以用于在显示屏上显示。
2.根据权利要求1所述的规则引擎,其中,在选择所述一个或多个处理程序之前,所述一个或多个处理器进一步被配置为:
从扫描器接收与所述文件相关联的所述多个代码串,其中所述多个代码串中的每一个包括扫描的代码串;并且
识别所述多个代码串中的所述一个或多个未更新的代码串。
3.根据权利要求2所述的规则引擎,其中,
从所述扫描器接收与所述文件相关联的所述多个代码串包括:从所述扫描器接收所述多个代码串中的所述一个或多个未更新的代码串的指示;并且
识别所述多个代码串中的所述一个或多个未更新的代码串基于所述指示。
4.根据权利要求1所述的规则引擎,其中,指示所述一个或多个处理程序中的所述至少一个处理程序更新所述至少一个未更新的代码串包括:
指示所述至少一个处理程序更新以下项中的至少一项:
所述未更新的代码串的语法,
所述未更新的代码串的变量,或者
所述未更新的代码串的对象。
5.根据权利要求1所述的规则引擎,其中,指示所述一个或多个处理程序中的所述至少一个处理程序更新所述至少一个未更新的代码串包括:
指示所述一个或多个处理程序中的所述至少一个处理程序将所述至少一个未更新的代码串从所述代码的初始版本更新为所述代码的更新版本。
6.根据权利要求5所述的规则引擎,其中,所述更新版本包括紧接在所述代码的所述初始版本之前的所述代码的版本。
7.根据权利要求5所述的规则引擎,其中,所述更新版本包括所述代码的最新版本。
8.一种由规则引擎实施的方法,其包括:
根据一组一个或多个规则来选择用于更新与文件相关联的多个代码串中的一个或多个未更新的代码串的一个或多个处理程序,其中所述一组一个或多个规则将所述一个或多个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联;
指示所述一个或多个处理程序中的至少一个处理程序:
扫描所述多个代码串,
基于扫描所述多个代码串来识别所述一个或多个未更新的代码串中的与所述至少一个处理程序唯一相关联的至少一个未更新的代码串,并且
更新由所述至少一个处理程序识别的所述至少一个未更新的代码串,从所述至少一个处理程序接收与所述至少一个处理程序唯一相关联的所述至少一个未更新的代码串是已更新的代码串的指示,并且
至少生成所述已更新的代码串以用于在显示屏上显示。
9.根据权利要求8所述的方法,其中,在选择所述一个或多个处理程序之前,所述方法进一步包括:
从扫描器接收与所述文件相关联的所述多个代码串,其中所述多个代码串中的每一个包括扫描的代码串;并且
识别所述多个代码串中的所述一个或多个未更新的代码串。
10.根据权利要求9所述的方法,其中,
从所述扫描器接收与所述文件相关联的所述多个代码串包括:从所述扫描器接收所述多个代码串中的所述一个或多个未更新的代码串的指示;并且
识别所述多个代码串中的所述一个或多个未更新的代码串基于所述指示。
11.根据权利要求8所述的方法,其中,指示所述一个或多个处理程序中的所述至少一个处理程序更新所述至少一个未更新的代码串包括:
指示所述至少一个处理程序更新以下项中的至少一项:
所述未更新的代码串的语法,
所述未更新的代码串的变量,或者
所述未更新的代码串的对象。
12.根据权利要求8所述的方法,其中,指示所述一个或多个处理程序中的所述至少一个处理程序更新所述至少一个未更新的代码串包括:
指示所述一个或多个处理程序中的所述至少一个处理程序将所述至少一个未更新的代码串从所述代码的初始版本更新为所述代码的更新版本。
13.根据权利要求12所述的方法,其中,所述更新版本包括紧接在所述代码的所述初始版本之前的所述代码的版本。
14.根据权利要求12所述的方法,其中,所述更新版本包括所述代码的最新版本。
15.一种由处理程序实施的方法,其包括:
从规则引擎接收对与文件相关联的多个代码串的访问,其中所述多个代码串包括一个或多个未更新的代码串;
扫描所述多串代码;
基于扫描所述多个代码串来识别所述一个或多个未更新的代码串中的与所述处理程序唯一相关联的至少一个未更新的代码串;
更新由所述处理程序识别的所述至少一个未更新的代码串以用于在显示屏上显示;以及
向所述规则引擎传输所述一个或多个未更新的代码串中的与所述处理程序唯一相关联的所述至少一个未更新的代码串是已更新的代码串的第一指示以用于在所述显示屏上显示。
16.根据权利要求15所述的方法,进一步包括:
从所述规则引擎接收所述处理程序属于一组至少一个处理程序的第二指示,所述一组至少一个处理程序基于一组一个或多个规则被选择用于更新所述一个或多个未更新的代码串中的所述至少一个未更新的代码串,所述一组一个或多个规则将所述一组至少一个处理程序中的每一个与更新至少一个唯一的未更新的代码串相关联;以及
响应于接收到所述第二指示:
扫描所述多个代码串,
基于扫描所述多个代码串来识别所述一个或多个未更新的代码串中的与所述处理程序唯一相关联的所述至少一个未更新的代码串,以及
更新由所述处理程序识别的所述至少一个未更新的代码串以用于在显示屏上显示。
17.根据权利要求15所述的方法,其中,更新所述至少一个未更新的代码串包括:
至少更新以下项中的一项:
所述至少一个未更新的代码串的语法,
所述至少一个未更新的代码串的变量,或者
所述至少一个未更新的代码串的对象。
18.根据权利要求15所述的方法,其中,更新所述至少一个未更新的代码串包括:
将所述至少一个未更新的代码串从所述代码的初始版本更新为所述代码的更新版本。
19.根据权利要求18所述的方法,其中,所述更新版本包括紧接在所述代码的所述初始版本之前的所述代码的版本。
20.根据权利要求18所述的方法,其中,所述更新版本包括所述代码的最新版本。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/336,260 | 2021-06-01 | ||
US17/336,260 US11782701B2 (en) | 2021-06-01 | 2021-06-01 | Software updater |
PCT/US2022/031655 WO2022256350A1 (en) | 2021-06-01 | 2022-05-31 | Software updater |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117441157A true CN117441157A (zh) | 2024-01-23 |
Family
ID=84193061
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202280038984.5A Pending CN117441157A (zh) | 2021-06-01 | 2022-05-31 | 软件更新器 |
Country Status (7)
Country | Link |
---|---|
US (1) | US11782701B2 (zh) |
EP (1) | EP4330809A1 (zh) |
KR (2) | KR102668611B1 (zh) |
CN (1) | CN117441157A (zh) |
AU (1) | AU2022286923B2 (zh) |
CA (1) | CA3220687A1 (zh) |
WO (1) | WO2022256350A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230195354A1 (en) * | 2021-12-22 | 2023-06-22 | Micron Technology, Inc. | Adaptive scans of memory devices of a memory sub-system |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7620948B1 (en) * | 2003-08-29 | 2009-11-17 | Adobe Systems Incorporated | Client side software updating |
US20160004528A1 (en) * | 2014-07-03 | 2016-01-07 | Oracle International Corporation | Efficient application patching in heterogeneous computing environments |
US20180196723A1 (en) * | 2017-01-06 | 2018-07-12 | Microsoft Technology Licensing, Llc | Integrated application issue detection and correction control |
US20180307480A1 (en) * | 2017-04-25 | 2018-10-25 | Microsoft Technology Licensing, Llc | Updating a code file |
CN109800005A (zh) * | 2018-12-06 | 2019-05-24 | 广州西山居世游网络科技有限公司 | 一种客户端热更新方法及装置 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2333864B (en) * | 1998-01-28 | 2003-05-07 | Ibm | Distribution of software updates via a computer network |
US7062765B1 (en) * | 1999-05-25 | 2006-06-13 | Realnetworks, Inc. | System and method for updating information via a network |
US7409685B2 (en) * | 2002-04-12 | 2008-08-05 | Hewlett-Packard Development Company, L.P. | Initialization and update of software and/or firmware in electronic devices |
US20030182414A1 (en) * | 2003-05-13 | 2003-09-25 | O'neill Patrick J. | System and method for updating and distributing information |
WO2004097643A2 (en) * | 2003-04-29 | 2004-11-11 | University Of Strathclyde | Monitoring software |
EP1569109A1 (en) * | 2004-02-27 | 2005-08-31 | Research In Motion Limited | A system and method for mapping between message and data domains using a metadata defined mapping |
US7934210B1 (en) * | 2004-03-26 | 2011-04-26 | Adobe Systems Incorporated | System and method for updating one or more programs and their environment |
US7975020B1 (en) * | 2005-07-15 | 2011-07-05 | Amazon Technologies, Inc. | Dynamic updating of rendered web pages with supplemental content |
US8522228B1 (en) * | 2006-03-31 | 2013-08-27 | Vmware, Inc. | Updating software on dormant disks |
US9032387B1 (en) * | 2011-10-04 | 2015-05-12 | Amazon Technologies, Inc. | Software distribution framework |
KR20150088059A (ko) * | 2014-01-23 | 2015-07-31 | 삼성전자주식회사 | 어플리케이션 관리 방법 및 그 방법을 처리하는 전자 장치 |
US10761835B1 (en) * | 2014-05-30 | 2020-09-01 | Apptimize Llc | Run-time application modification |
US10146522B1 (en) * | 2015-03-10 | 2018-12-04 | Twitter, Inc. | Live code updates |
US9870213B2 (en) * | 2015-08-06 | 2018-01-16 | Sap Se | Unified consumption experience for software installation |
US10083025B2 (en) * | 2015-11-20 | 2018-09-25 | Google Llc | Dynamic update of an application in compilation and deployment with warm-swapping |
GB201710831D0 (en) * | 2017-07-05 | 2017-08-16 | Jones Maria Francisca | Method and apparatus to transfer data from a first computer state to a different computer state |
US20190196805A1 (en) * | 2017-12-21 | 2019-06-27 | Apple Inc. | Controlled rollout of updates for applications installed on client devices |
US10747510B1 (en) * | 2019-06-04 | 2020-08-18 | Apptimize Llc | Application runtime modification |
-
2021
- 2021-06-01 US US17/336,260 patent/US11782701B2/en active Active
-
2022
- 2022-05-31 WO PCT/US2022/031655 patent/WO2022256350A1/en active Application Filing
- 2022-05-31 KR KR1020237041185A patent/KR102668611B1/ko active IP Right Grant
- 2022-05-31 CA CA3220687A patent/CA3220687A1/en active Pending
- 2022-05-31 CN CN202280038984.5A patent/CN117441157A/zh active Pending
- 2022-05-31 AU AU2022286923A patent/AU2022286923B2/en active Active
- 2022-05-31 EP EP22816743.3A patent/EP4330809A1/en active Pending
- 2022-05-31 KR KR1020247016639A patent/KR20240093798A/ko unknown
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7620948B1 (en) * | 2003-08-29 | 2009-11-17 | Adobe Systems Incorporated | Client side software updating |
US20160004528A1 (en) * | 2014-07-03 | 2016-01-07 | Oracle International Corporation | Efficient application patching in heterogeneous computing environments |
US20180196723A1 (en) * | 2017-01-06 | 2018-07-12 | Microsoft Technology Licensing, Llc | Integrated application issue detection and correction control |
US20180307480A1 (en) * | 2017-04-25 | 2018-10-25 | Microsoft Technology Licensing, Llc | Updating a code file |
CN109800005A (zh) * | 2018-12-06 | 2019-05-24 | 广州西山居世游网络科技有限公司 | 一种客户端热更新方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
KR102668611B1 (ko) | 2024-05-27 |
EP4330809A1 (en) | 2024-03-06 |
KR20240093798A (ko) | 2024-06-24 |
US20220382540A1 (en) | 2022-12-01 |
AU2022286923B2 (en) | 2024-08-01 |
AU2022286923A1 (en) | 2023-11-30 |
KR20240014472A (ko) | 2024-02-01 |
CA3220687A1 (en) | 2022-12-08 |
WO2022256350A1 (en) | 2022-12-08 |
US11782701B2 (en) | 2023-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11163731B1 (en) | Autobuild log anomaly detection methods and systems | |
US10095499B2 (en) | Optimization for multi-project package manager | |
US10481903B2 (en) | On-demand database service system, method, and computer program product for validating a developed application | |
US11561784B2 (en) | Versioning of pipeline templates for continuous delivery of services on datacenters configured in cloud platforms | |
US8087013B2 (en) | Assisted migration in a data processing environment | |
US8327351B2 (en) | Application modification framework | |
US8244780B1 (en) | Parameter oriented automated database command | |
US8078914B2 (en) | Open error-handling system | |
US20160246702A1 (en) | Using emulation to disassociate verification from stimulus in functional test | |
US10922216B1 (en) | Intelligent automation test workflow | |
US11392366B1 (en) | Optimized compilation of pipelines for continuous delivery of services on datacenters configured in cloud platforms | |
US7158965B1 (en) | Method and apparatus for providing help content corresponding to the occurrence of an event within a computer | |
CN117441157A (zh) | 软件更新器 | |
US9116713B1 (en) | System and method for expression evaluation in a distributed networking environment | |
Linderud | Reproducible builds: Break a log, good things come in trees | |
CN115374083A (zh) | 数据源的切换方法、装置、电子设备及存储介质 | |
US11341022B2 (en) | Runtime performance introspection | |
CN114860202A (zh) | 项目运行方法、装置、服务器及存储介质 | |
CN105302604A (zh) | 应用程序的版本更新方法及装置 | |
Martin | Writing Operators withthe Controller-Runtime Library | |
CN116662303A (zh) | 应用程序变更策略生成方法及装置 | |
Seifzadeh et al. | A Performance-based Approach to Automatic Redeployment of Enterprise Software Applications | |
Senellart | D5. 2 Intelligent and adaptive content acquisition V1 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40104932 Country of ref document: HK |