源自监测系统的警报的机器学习决策指导的制作方法

文档序号:19350608发布日期:2019-12-06 21:21阅读:147来源:国知局
源自监测系统的警报的机器学习决策指导的制作方法



背景技术:

自动化的综合测试和监测是减少各种软件系统中的bug(漏洞)的数量的重要工具。但是,随着这些软件系统的复杂性不断增加并分布在许多不同的平台上,组件之间的互操作性会遭受间歇性故障的影响。在某些情况下,故障可能是与软件相关的问题。例如,随着将新软件实施到系统中,开发人员可能会无意中将一个或多个bug引入到系统中。在这种情况下,开发人员可能需要识别bug并为软件提供一个或多个更新。在其它情况下,故障可能与网络和/或硬件问题有关。在发生这些错误时,它们可能表现为bug,但实际上却是误报(falsepositive)。由于这些故障不是由新实施的代码引起的,因此开发人员可能会花费不必要的时间来调查这些故障。

关于这些和其它一般考虑,描述了一些示例。另外,虽然讨论了相对具体的问题,但是应当理解,这些示例并不应当仅限于解决背景技术中确定的具体问题。



技术实现要素:

概括地说,本公开内容涉及用于确定软件系统中的检测到的问题或故障是编程引起的bug的结果还是由于某种其它原因的系统和方法。当检测到软件系统出现故障或其它问题时,本文所描述的系统将指导开发人员的决策过程,并帮助他们识别和解决软件问题(例如,由于在软件系统中增加源代码而导致的bug),而不是跟踪并尝试纠正误报。因此,本文所描述的系统允许开发人员更高效地花费时间。随着问题获得解决,与各种检测到的问题相对应的数据(例如,问题的原因、问题的解决方式等等)将反馈到系统中,以提供更佳的指导和更准确的模型。

因此,本文描述了一种用于自动地确定计算系统中的检测到的问题是否是bug的方法。该方法包括:接收关于检测到的问题的信息,将关于检测到的问题的信息存储在存储设备中。针对所检测到的问题生成特征向量并进行分析,以确定所检测到的问题是bug的概率。在一些例子中,该分析是至少部分地基于特征向量。当概率高于阈值时,将检测到的问题报告给客户端设备。

还描述了一种系统,该系统包括至少一个处理单元和存储计算机可执行指令的存储器,当所述计算机可执行指令由所述至少一个处理单元执行时,使该系统执行用于确定软件系统中的检测到问题是bug还是误报的方法。该方法包括:接收关于检测到的问题的信息,将检测到的问题的特征图谱(fingerprint)与先前检测到的问题的一个或多个特征图谱进行比较,以确定所检测到的问题是否是新的。当确定所检测到的问题是新的时,将关于检测到的问题的信息存储在存储设备中。此外,还将关于检测到的问题的信息提供给特征生成组件,该特征生成组件针对所检测到的问题生成特征向量。然后,可以将该特征向量提供给评估组件,该评估组件分析特征向量以确定所检测到的问题是bug的概率。然后,可以将检测到的问题的排序列表提供给客户端设备。

本公开内容还描述了一种存储计算机可执行指令的计算机可读存储介质,当所述计算机可执行指令由处理单元执行时,使所述处理单元执行一种方法,该方法包括:使用与检测到的问题相关联的信息,针对所检测到的问题生成特征向量,并将该特征向量提供给评估组件的一个或多个模型。评估组件的所述一个或多个模型可以分析特征向量以确定所检测到的问题是bug的概率。然后,报告所检测到的问题的发生。一旦报告了所检测到的问题,就可以接收对检测到的问题的修复。当接收到时,使用针对所检测到的问题的修复来更新所述一个或多个模型中的至少一个模型。

提供本概括部分以便用简化的形式介绍将在以下的详细描述中进一步描述的概念选择。本概括部分并不是旨在标识本发明的关键特征或本质特征,也不是用于限制本发明的保护范围。

附图说明

参照下面的附图来描述非限制性和非详尽的示例。

图1根据示例,示出了用于评估和排序在软件系统中出现的警报的系统。

图2根据示例,示出了用于评估和排序在软件系统中出现的问题的方法。

图3根据示例,示出了用于自动地解决软件系统中出现的问题的方法。

图4根据示例,示出了用于接收针对检测到的问题的反馈的方法。

图5是可以实现本公开内容的方面的计算设备的示例性物理部件的框图。

图6a和图6b是可以实现本公开内容的方面的移动计算设备的简化框图。

图7是可以实现本公开内容的方面的分布式计算系统的简化框图。

图8示出了用于执行本公开内容的一个或多个方面的平板计算设备。

具体实施方式

在下面的详细描述中,参考构成本发明的一部分的附图进行,并且通过说明性的特定实施例或例子的方式进行示出。可以对这些方面进行组合,可以利用其它方面,并且可以在不脱离本公开内容的基础上进行结构改变。可以将示例实施成方法、系统或设备。因此,示例可以采用硬件实现、完全软件实现或者组合软件和硬件方面的实现的形式。因此,以下的详细描述不应被视为具有限制意义,并且本公开内容的保护范围由所附权利要求书及其等同物进行界定。

软件系统的自动测试和监测是软件开发过程的组成部分。本公开内容描述了确定软件系统中的检测到的问题或故障是bug还是误报的系统和方法。

例如,在任何时间点,许多不同的软件组件可能会经受各种测试过程,以断定一个软件组件的更改是否对另一个组件产生负面影响和/或该更改是否对整个系统产生负面影响。在一些情况下,可以在构建新软件和/或修改现有的软件组件时,测试各种软件组件的集成。

但是,由于自动地测试组件集成的自动化实验室的复杂性,可能会出现虚假和间歇性问题。在一些情况下,这些问题会破坏某些组件之间的集成,并导致误报的报告。可能将这种误报作为bug或警报传送回开发人员。当报告这些问题时,开发人员可能要花费宝贵的时间来尝试修复由于自身故障而发生的错误。

本文所描述的系统被配置为扫描源自于自动化实验室的每个报告的bug或警报,并为开发人员提供关于开发人员应优先考虑哪些bug和/或警报的决策支持。该系统还可以自动地解决假定的或者以其它方式确定为误报的问题。

例如,当检测到问题、故障或其它警报(在本文中统称为“问题”)时,将从自动化实验室向存储层发送关于该问题的信息。特征生成组件访问存储组件,然后使用所存储的信息来针对该问题生成特征向量。然后,将特征向量发送到评估组件,评估组件包含用于预测或以其它方式确定特定问题是误报还是实际上是bug的各种模型。

如本文所使用的,术语“bug”是指软件bug。例如,软件bug可以是由于源代码的改变或者添加而造成的计算机程序或系统中的错误,其导致计算机程序或系统产生错误的结果、非预期的结果,和/或以不一致、非预期或意外的方式表现。如本文中所使用的,短语“误报”是错误地指示所检测到的问题是诸如本文所规定的bug的结果。

如下面将解释的,评估组件中的每个模型可以与存储组件和特征生成组件交互,并且随着新数据变得可用而进行更新和训练。例如,一旦模型确定了问题是否为bug的概率,就将该信息发送给开发人员。虽然本文使用术语“概率”,但是评估组件中的模型可以被配置为对检测到的问题进行排序,或者提供关于确定问题是否为bug的某种其它指示。例如,可以给予每个问题一个分数(例如,置信度分数或某种其它分数)。如果则该分数高于(或低于)阈值,则其可以指示问题是开发人员引入的bug还是某种其它间歇性问题。

开发人员检查问题并确定问题是否是bug,提供对该bug的修复(例如,更新源代码),并将该信息提供回系统。可以使用该信息来更新训练模型和/或特征生成组件,使得它们随着时间的推移变得更加准确。

下面将参照图1到图4,更详细地描述这些和其它示例。

图1根据示例,示出了用于评估和排序在软件系统中出现的问题的系统100。举例而言,软件系统可以包括一起工作以执行功能的各种模块和组件。这些例子包括操作系统、应用程序(例如,文字处理应用程序、电子表格应用程序、互联网浏览器等等)、云计算环境等等。

随着时间的流逝,开发人员可能会更新软件系统或软件系统的各个组件。在执行更新时,可以对软件系统的各个组件进行测试(单独地或者与其它软件和/或硬件组件一起),以确定对一个组件的更新是否会对软件系统的另一个组件和/或软件系统整体产生负面影响。

在系统100中,可以在自动化实验室105中执行和测试要测试的软件系统(包括其所有组件和相关联的硬件(例如,联网设备、数据库、服务器等等)。如上面所简短描述的,自动化实验室可以在构建新软件和/或修改现有软件组件时,连续地测试软件系统的各种软件组件。

举例而言,自动化实验室包括一个或多个监测器110。监测器110检测在测试过程中是否出现了问题。在一些情况下,不同的监测器110监测软件系统的不同部分。例如,第一监测器可以覆盖软件系统的一个或多个软件组件,而第二监测器覆盖与软件系统相关联或以其它方式与之交互的一个或多个硬件组件。自动化实验室105可以被配置为连续地执行各种测试用例。在其它实现中,自动化实验室105可以被配置为按需地运行测试用例。

如果自动化实验室中的一个或多个监测器110检测到问题,则将关于问题115的原始信息发送到数据馈送组件120。举例而言,数据馈送组件120被配置为处理所产生的或者以其它方式从自动化实验室105中检测到的所有问题115。

一旦接收到问题115,数据馈送组件120就将关于问题115的信息转换为便于存储的结构化模式。在一些情况下,由数据馈送组件120处理的关于问题115的信息包括堆栈跟踪、崩溃转储等等。除了该信息之外,数据馈送组件120还可以接收关于自动化实验室105的当前状态的信息。

根据该信息,数据馈送组件120可以确定发生问题115的上下文。例如,数据馈送组件120可以确定正在测试的源代码的构建版本号、当前时间和日期、主机正在运行的操作系统的版本以及其它这样的信息。

数据馈送组件120还可以被配置为经由归类(binning)功能,生成各种问题115的特征图谱(fingerprint)。一旦建立了问题115的特征图谱,就将其与已经报告给数据馈送组件120的其它问题115的特征图谱进行比较。如果确定当前问题115是新问题,则存储关于该问题115的信息及其特征图谱。在一些情况下,归类允许生成的软件系统中可能存在的各种问题115的各种时间统计信息(例如,每周、每月和终身命中的数目)。

如果确定问题115是新问题,则数据馈送组件120将关于该问题115的信息推送到问题分析组件125。问题分析组件125分析该信息,确定该问题115是bug还是误报的概率,并使用该信息来训练其评估模型。

在一些情况下,问题分析组件125包括存储层130或者与存储层130相关联。存储层130从数据馈送组件120接收关于问题115的信息。在一些例子中,存储层130可以是可扩展的并且可编辑的。存储层130还可以被配置为存储关于检测到的各种问题的开发者反馈、以及开发者提供的任何接收到的反馈和相关联的反馈。存储层130还可以允许系统100的各个开发人员和/或组件对所存储的数据执行范围内的查询(例如,对子集的查询)。

问题分析组件125还包括特征生成组件140。特征生成组件140包括一个或多个特征生成器145。每个特征生成器145被配置为生成与特定问题115相关联的特征向量150。

在一些实例中,软件系统中可能存在许多不同类别的问题。例如,一个或多个bug可能与不同的软件组件和/或一个或多个不同的开发团队有关。此外,各种问题115可能表现出不同的行为。因此,特征生成组件140中的每个特征生成器145可以被专门配置用于每种类型的问题。这样,特征生成组件可以包括许多不同的特征生成器145。

例如,每个特征生成器145可以被配置为查找与特定问题115相关的信息。如果在问题信息135中找到与特定问题相关的信息,则生成与该特定问题相关联的特征向量。例如,特定的特征生成器可以被配置为对该工作“错误”和“存储器”在堆栈跟踪中发生了多少次进行计数。因此,如果特征生成器接收到“存储器位置1中的存储器错误”的堆栈跟踪,则特征生成器生成的特征向量将为“[1,2]”,这是因为发生一次词“错误”和发生两次词“存储器”。但是,如果堆栈跟踪为空或不存在,则所获得的特征向量可以为“[0,0]”。一旦生成特征向量,就将该信息传递到评估组件。

在一些情况下,每个特征生成器145可以从存储层130中获取各个数据点。每个特征生成器145还可以至少部分地基于特征生成器145的配置,对该数据执行一个或多个变换。

例如,如果特征生成器145被配置为查找特定类型的问题或者与特定软件组件或硬件组件相关联,则特征生成器145可以对该数据执行指定类型的变换。这样的变换的例子可以是归一化、从堆栈跟踪中对某些关键词的出现进行计数、归类、或者以其它方式从存储层130中可用的原始数据中提取或生成特征的次数。特征生成器145使用变换后的信息来生成特征向量150。

一旦生成了特征向量150,就将特征向量150传递给评估组件155。评估组件155包括一个或多个模型160。在一些例子中,每个模型160与特定特征生成器145具有一一对应关系。

例如,每个特征生成器145负责生成一个模型160的特征向量。用此方式,系统100可以由高度准确的域特定模型160组成。此外,由于不同的特征生成器145可以由不同的工程团队独立地开发和试验(假定它们是从存储层130读取的),因此这提高了系统100的灵活性。

虽然提及了一对一的对应关系,但是特征生成器145可以向许多不同的模型160提供特征向量150。类似地,单个模型160可以从各种不同的特征生成器145接收特征向量150。

在本文所描述的例子中,评估组件155用于确定概率或以其它方式预测所接收的特征向量150是与bug相关联还是与误报相关联。例如,模型160可以被配置为确定每个问题是bug或间歇性噪音的概率,预测该问题是否属于给定的团队等等。举例而言,这可能取决于使用系统100的开发人员知道哪些类别的bug源自于其自动化实验室105。这样,开发人员可以基于个体需要来创建和/或更新他们自己的模型160和特征生成器145。

在一些情况下,可能会出现以下问题,即无法配备评估组件155中的模型160以基于特征向量150中包含的信息来处理预测。在这种情况下,系统100可以通知开发人员,并允许创建另一个模型160和/或特征生成器145。

部署在评估组件155中的每个模型160也能够与存储层130和特征生成组件140进行交互。这样,当提供各种更新和/或反馈时,以及当新的训练数据变得可用时,可以对每个模型160进行更新和重新训练。

在一些实例中,评估组件155中的每个特征生成器145和每个模型160彼此独立地操作。这样,可以在任何时间训练每个特征生成器145和/或每个模型160。另外,每个模型160可以是不同类型的模型。例如,一个模型可以是分批训练的支持向量机(svm)排序器,而另一个模型可以是以在线方式训练的k近邻(knn)排序器。

一旦评估组件155的一个或多个模型160分析了特征向量150,就会生成预测165并将其提供给客户端组件170。客户端组件170可以包括一个或多个客户端175。所述一个或多个客户端175中的每一个客户端175可以与上面所描述的各种其它组件进行交互。

例如,第一客户端可以被配置为与特定的模型和特征生成器进行交互,而第二客户端可以被配置为与不同的模型和特征生成器进行交互。第一客户端可以被配置为检查新问题(例如,尚未由开发人员检查的问题),并使用模型160来预测该问题是误报或bug的概率。然后,该客户端175可以向开发人员提供最有可能是bug的活动问题的优先列表。

同样,第二客户端可以被配置为与存储层130交互,并搜索仍未解决的bug或其它问题115。第二客户端可以请求其关联的特征生成器145以创建特征向量150,并将该特征向量提供给相关联的模型160。如上所述,模型160确定关于检测到的问题115是bug还是误报的概率。也可以将该信息发送给如上所述的开发人员。

当开发人员访问系统100时,开发人员可以选择一个或多个bug进行调查。在调查期间,开发人员可以确定所检测到的问题115是bug,并提供对该bug的修复。然后,将该信息(在图1中显示为反馈180)发送到存储层130并存储在存储层130中。还可以将反馈180提供给特征生成组件140中的各种特征生成器145和/或评估组件中的模型160。

在一些实例中,开发人员可能确定报告的问题115是误报。在这些情况下,还将关于问题115的反馈180(例如,指示问题115不是由开发人员引起的bug的反馈)返回给存储层130。

在一些实例中,客户端175还可以将反馈直接提供给与该问题相关联的特征生成器145和/或模型160。例如并且如上所述,每个特征生成器145和/或模型160可以与特定问题115相关联,或者以其它方式被配置为处理特定问题115。因此,当在稍后的时间检测到相同问题或类似问题时,可以关于如何处理问题115以及确定所检测到的问题115是bug还是误报,对特征生成器145和/或模型160进行更佳地训练。在其它情况下,可以将关于特定问题的信息存储在存储层130中。如果出现相同或类似的问题,则将关于该问题的信息与存储层130中的问题信息进行比较,然后将其传递给无状态特征生成和评估流程。在一些实例中,无状态特征生成和评估流程可以类似于本文所描述的操作流程。

下面是如何使用上述系统100的例子。虽然描述了细节,但是这些仅意在作为示例,并且可以在许多不同的场景中使用系统100。

在该例子中,一个团队的开发人员可以开发分析文档的软件。该软件的分析组件以及该组件的测试涉及多个不同的机器和软件。例如,文档的测试语料库可以托管在存储服务器上。搜寻器(crawler)可能正在向存储服务器运行,并且被配置为从文档中提取文本。一旦提取了文本,就可以将该文本传递到分析组件。该系统还可以包括运行数据库系统的另一个服务器,其中数据库系统存储来自分析组件的结果。

在该例子中,软件开发团队利用上述系统100。例如,当在自动化实验室中检测到问题时,将关于该问题的信息发送到存储层(例如,存储层130)。特征生成器(例如,特征生成组件140的特征生成器145)从已经被认为对检测误报有效的信息中提取数据。例如,特征生成器可以提取关于以下的信息:该问题已经发生(例如,生命周期命中)的总数、每个问题在最近一个月发生(例如,上个月命中)的总数、每个问题在上周发生(例如,上周命中)的次数、该问题上次发生的构建版本号以及该问题的最终解决方案(例如,该问题是否已解决或者确定该问题是不可复制的)。

虽然提及了特定信息,但这仅是为了举例目的。因此,特征生成器可能未提取出所陈述的那么多信息,也可能没有提取其它信息。

一旦收集了该信息,就可以对该信息中的一些进一步归一化。例如,上周的命中数和上个月的命中数可以除以生命周期命中总数。可以使用这些数字来确定时间趋势,例如特定问题在上周是否比在其前几周发生得更多。

特征生成组件使用该信息来生成特征向量,并将其提供给评估组件(例如,评估组件155)中的模型(例如,模型160)。如上所述,该模型然后确定该问题是bug还是误报的概率。在该例子中,该模型的输出是为每个新问题(例如,以前尚未由开发人员识别、研究和/或解决的问题)分配其是误报的概率。然后,该模型将这些预测呈现给客户端(例如,客户端175)。然后,客户端可以将新问题提交给软件开发团队。在一些情况下,可以使用由该模型确定的概率,对问题进行排序。

开发人员可以选择一个问题,进行调查,然后将该问题识别为bug或者将该问题识别为误报。如果开发人员确定该问题是bug,则开发人员将修复该bug,并在存储层中更新与所检测到的问题相关联的问题条目。如果开发人员确定该问题不是bug(例如,该问题是误报),则将该信息也反馈到存储层中,以便系统将来可以从中学习。

下面是关于本文所描述的系统如何工作的另一个例子。在该例子中,软件开发团队中的开发人员可以打开或以其它方式访问客户端(或者可以直接访问存储层),并向存储层查询尚未解决的问题(例如,尚未解决的bug、认为的误报或者认为的不可复制)。将这些问题馈送到特征生成组件,该组件将输出用于这些问题的一组特征向量。

将特征向量馈送到模型评估组件,从而产生该问题是误报或bug的概率。可以根据是真实问题的可能性,对问题进行排序(或者可以以其它方式进行排序,例如,出现问题的最长时间、出现问题的次数等等)。

开发人员选择一个问题(例如,最有可能是bug的问题)并进行调查。如果开发人员确定该问题是bug,则开发人员将修复该bug。将使用以下信息来更新存储层中的问题条目:该问题是bug,并且执行了修复。如果开发人员确定该问题为误报,则也将该信息反馈到存储层,以便系统将来可以从中学习。然后,开发人员可以选择一个新的问题,然后重复该周期。

通过在基于计算机的分析中同时使用人工干预和知识,上述过程可以用于提高系统100的准确性。这样,开发人员可以在处理每个问题时,提高训练数据的质量。在一些情况下,可以在不同的时间以不同的频率训练系统内的模型。例如,模型的训练可能取决于将反馈合并到模型中的频率,并且还可能取决于模型的类型以及问题的修复速度。例如,在在线算法中,可以立即合并每个新的反馈项。相反,可以以每小时一次、每天一次、每周一次等等的方式,重新生成以批处理计算方式构建的模型。

在一些实例中,上述系统100可以用于自动地关闭在本质上认为是间歇性或虚假的问题。在一些情况下,可以至少部分地基于概率确定来进行该确定。例如,系统的客户端可以将每个问题为误报的概率与确定的阈值进行比较。如果超过了阈值,则客户端更新存储层中的问题条目以表示该问题是不可复制的。在一些情况下,该确定可以是基于开发人员的先前确定。

在一些情况下,并且为了防止系统在没有人工干预的情况下继续评估问题,可以以某种方式对问题进行标记,使得这些问题不包含在用于训练新模型的数据集中。但是,由于问题的存储层表示可以在稍后时间进行编辑,因此可以构建工具,以允许开发人员同意系统做出的决定和/或纠正自动确定所产生的任何错误。在任何一种情况下,接受或校正数据的决定都可以用于训练模型和/或特征生成器。

虽然已经针对自动化实验室来描述了该系统,但是上述系统100也可以集成在任何其它系统内。同样,系统100可以从外部观察另一个系统。在另一个例子中,可以在单个软件系统上使用多个系统(例如,集成系统和外部系统)。

同样,可以将系统100实现成:运行在单个主机上的富客户端、服务器端系统(例如,作为web界面的产品)或其任何组合(例如,具有服务器后端和更瘦的客户端前端)。

图2根据示例,示出了用于评估和排序在软件系统中出现的问题的方法200。在一些例子中,诸如上面参照图1所描述的系统100可以使用方法200。

方法200开始于操作210,在操作210中,检测与检测到的问题相关联的数据,并将其提供给系统。在该例子中,操作210还可以用于确定该问题是新问题,还是先前已经检测到该问题。诸如如上所述的数据馈送组件可以将关于该问题的信息提供给系统。另外,关于该问题的信息可以存储在数据存储组件中。

一旦接收到关于问题的数据,流程就转到操作220,并将该数据提供给特征生成组件。特征生成组件分析该信息,并基于将信息发送到的模型来生成特征向量,其中该特征向量描述、识别问题或者以其它方式与问题相关联。例如,特征生成组件可以包括一个或多个特征生成器,其用于确定在信息中是否存在特定的词、在信息中存在特定错误的次数等等。然后,特征生成器生成诸如如上所述的特征向量。

在操作230中,将特征向量提供给评估组件。在一些例子中,评估组件具有一个或多个模型,这些模型评估特征向量并确定特征向量识别bug或者与bug相关联的概率。该模型可以被配置为查找特定类型的bug。这样,该模型可以接收专门为该类型的模型生成的特征向量。

因此,多个不同的模型可以分别分析特征向量,这些特征向量是专门为该模型创建的,但源于同一问题。也就是说,可以将问题信息发送到多个特征生成器,每个特征生成器为其关联的模型生成特定的特征向量。在其它例子中,特征生成组件可以用于基于接收到的问题信息来确定应当使用哪个特征生成器来创建特征向量。

在操作240中,将概率确定提供给客户端设备。在一些情况下,客户端中可能存在一个以上的问题。在这种情况下,可以基于某些标准,来列出或排列所报告问题的顺序。例如,可以按以下顺序来列出问题:检测到的问题是bug的概率、检测到的问题是误报的概率、出现问题的时间长度等等。

在操作250中,确定是否已经接收到针对特定问题的反馈。例如,可以确定开发人员是否已选择特定问题,分析该问题以确认该问题是bug还是误报,并且如果该问题是bug,则提供对该问题的修复。如果没有接收到反馈,则流程可以返回到操作210,并且重复操作。

但是,如果已经选择了问题并且已经解决了问题,或者已经确定问题是误报(例如,由开发人员提供)并且已经提供了反馈,则流程转到操作260。在操作260中,可以使用该反馈来训练系统的各个组件。例如,可以使用该反馈来训练评估组件中的模型和/或特征生成组件中的各种特征生成器。反馈以及关于问题的信息也可以存储在系统的存储层中。

图3根据示例,示出了用于自动地解决在软件系统中出现的问题的方法300。在一些情况下,诸如上面参照图1所描述的系统100可以使用方法300。

方法300开始于操作310,在操作310中,接收有关检测到的问题是否是bug的概率(或者其它排序和/或评分指标)。在其它实现中,在操作310中接收的概率可以是该问题是误报的概率。在任何一种情况下,该概率都可以由与评估组件相关联的模型来接收。

然后,流程转到操作320,在操作320中,将在操作310中接收到的概率与概率阈值进行比较。在一些情况下,可以由开发人员设置概率阈值。在其它情况下,系统可以至少部分地基于开发人员提供的反馈来自动地调整概率阈值。例如,如果系统确定问题是bug,并且开发人员随后确认该确定,则可以相应地改变概率阈值(例如,升高或降低)。如果开发人员必须更正该确定,则也可以更改概率阈值。

在一些情况下,每种类型的问题可能与不同的概率阈值相关联。在这种情况下,可以基于从开发人员收到的反馈,来调整与特定问题相关的概率阈值。在其它情况下,不论系统报告并自动解决的问题类型如何,所有报告的问题都可以与相同的概率阈值相关联并进行调整。

然后,流程转到操作330,确定该概率是否超过概率阈值。如果概率确实超过阈值,则流程转到操作340,并且以上面关于图2所描述的方式将该问题报告给开发人员。然后,流程转到操作370,将任何开发人员反馈提供给系统,并用于训练模型和/或特征生成器,例如如上所述。

但是,如果确定概率不超过阈值(例如,确定所检测到的问题不是bug),则在操作350中,系统自动地解决该问题。然后,流程转到操作360,对该问题进行标记或以其它方式进行标记,以指示开发人员可能想查看该问题的解决方案。然后,流程转到操作370,可以将从开发人员接收到的任何反馈(例如,肯定反馈和/或否定反馈)提供给系统,并使用其来训练系统的各种组件,例如上文所述。

图4示出了用于接收针对检测到的问题的反馈的方法400。在一些情况下,方法400可以由上面所描述的系统100使用。此外,方法400可以由向开发人员提供问题信息的客户端设备使用。

方法400开始于操作410,在操作410中,客户端设备接收问题信息的排序列表。在一些情况下,由诸如评估组件155之类的评估组件接收问题信息的排序列表。在其它情况下,可以从与系统相关联的存储设备中存储的问题信息中,接收问题信息列表。

可以根据任何数量的因素,对该列表进行排序。例如,可以基于问题是bug的概率、问题是误报的概率、检测到问题的日期、检测的频率等等,对列表进行排序。在其它情况下,可以以随机顺序、先进先出顺序、后进先出顺序等等,来呈现问题列表。

一旦接收到问题信息,流程就转到操作420,并将该问题列表提供给开发人员。一旦接收到,客户端设备可以接收对特定问题的选择(操作430),并且响应于该选择,提供关于该问题的其它信息(操作440)。例如,客户端设备可以提供问题的时间和日期、在哪个模块或组件中检测到问题、问题源自的源代码的区域等等。

然后,流程转到操作450,在操作450中,接收关于该问题的反馈。在一些情况下,一旦开发人员研究了该问题,开发人员就可以提供反馈。例如,反馈可以确认该问题是bug,指示该问题不是系统所指示的bug,确认该问题是误报,或者指示该问题不是系统所指示的误报。在一些情况下,反馈还可以包括源代码更正、源代码更新或者关于如何解决问题的其它反馈。

一旦接收到反馈,流程就转到操作460,将该反馈提供给系统。在一些情况下,可以使用反馈来训练系统的各个组件。例如,可以使用反馈来训练或更新评估组件的一个或多个模型,创建评估组件的一个或多个模型,训练或更新特征生成组件的一个或多个特征生成器和/或创建特征生成组件的一个或多个特征生成器。在一些情况下,也可以将反馈存储在系统的存储设备中。

一旦接收到反馈,就可以重复该方法或该方法的一些部分。例如,如

图4中所示,一旦接收到反馈,流程就可以返回到操作430,在操作430中,开发人员选择列表中的另一个问题,然后重复该过程。

在一些实例中,当开发人员正在研究选定的问题时,可能会检测到其它问题或将其提供给客户端设备。在这种情况下,可能会不断地更新问题信息的排序列表。在其它情况下,可以定期地、按需地或其任何组合的方式,将问题信息列表提供给客户端设备。

图5到图8以及相关联的描述提供了可以实现本公开内容的方面的各种操作环境的讨论。但是,参照图5到图8所示出和讨论的设备和系统只是用于举例和说明目的,而不是对本文所描述的可以用于实现本公开内容的方面的众多数量的电子设备配置进行限制。

图5是示出可以实现本公开内容的方面的电子设备500的物理部件(即,硬件)的框图。下面所描述的电子设备500的组件可以具有用于自动地识别软件套集中的问题的计算机可执行指令,诸如上面所描述的。

在基本配置中,电子设备500可以包括至少一个处理单元510和系统存储器515。根据电子设备的配置和类型,系统存储器515可以包括但不限于:易失性存储(如,随机存取存储器)、非易失性存储(如,只读存储器)、闪存或者这些存储器的任意组合。系统存储器515可以包括操作系统525和适合于识别诸如本文所描述的各种问题的一个或多个程序模块520。

例如,操作系统525可以适合于对电子设备500的操作进行控制。此外,本公开内容的例子可以结合图形库、其它操作系统或者任何其它应用程序来实现,并且不受限于任何特定的应用或系统。在图5中,通过位于虚线530之内的那些部件来示出该基本配置。

电子设备500可以具有另外的特征或功能。例如,电子设备500还可以包括另外的数据存储设备(可移动和/或不可移动),比如磁盘、光盘或磁带。在图5中通过移动存储设备535和非移动存储设备540的方式,来示出这种另外的存贮设备。

如上所述,在系统存储器515中,可以存储多个程序模块和数据文件。当在处理单元510上执行时,程序模块520(例如,可以包括系统100的特征生成模块505或组件、评估模块507或组件等等)可以执行包括但不限于如本文所描述的方面的处理。

此外,本公开内容的例子可以使用包括离散电子元件的电子电路来实现,封装或者集成为包含逻辑门、使用微处理器的电路的电子芯片,或者实现在包含电子元件或微处理器的单一芯片上。例如,可以经由片上系统(soc)来实现本公开内容的例子,其中,图5中所示出的部件里的每一个或大部分可以集成到单一集成电路上。这种soc设备可以包括一个或多个处理单元、图形单元、通信单元、系统虚拟化单元和各种应用功能,所有这些作为单一集成电路集成(或者“烧”)到芯片基底上。

当经由soc进行操作时,本文所描述的功能(关于客户端切换协议的能力)可以经由与电子设备500的其它部件集成在单一集成电路(芯片)上的专用逻辑来进行操作。此外,本公开内容的例子还可以使用能够执行诸如与(and)、或(or)和非(not)之类的逻辑操作的其它技术来实现,其包括但不限于:机械、光、流体和量子技术。此外,还可以在通用计算机或者任何其它电路或系统中实现本公开内容的例子。

此外,电子设备500还可以具有诸如键盘、跟踪板、鼠标、笔、声音或语音输入设备、触摸、力和/或滑动输入设备等等之类的一个或多个输入设备545。此外,还可以包括诸如显示器、扬声器、打印机等等之类的输出设备550。前述的设备只是示例性的,可以使用其它设备。电子设备500可以包括允许与其它电子设备560进行通信的一个或多个通信连接555。适当通信连接555的例子包括但不限于:射频(rf)发射机、接收机和/或收发机电路;通用串行总线(usb)、并口和/或串口。

如本文所使用的术语计算机可读介质可以包括计算机存储介质。计算机存储介质可以包括利用存储信息(如,计算机可读指令、数据结构或程序模块)的任何方法或技术来实现的易失性和非易失性、可移动和不可移动介质。

系统存储器515、可移动存储设备535和不可移动存储设备540都是计算机存储介质的例子(即,存储器存贮)。计算机存储介质可以包括ram、rom、电可擦除只读存储器(eeprom)、闪存或其它存储器技术、cd-rom、数字多用途光盘(dvd)或其它光存储技术、盒式磁带、磁带、磁盘存储或其它磁存储设备、或者可以用于存储信息并能由电子设备500进行存取的任何其它制品。任何这种计算机存储介质可以是电子设备500的一部分。计算机存储介质不包括载波波形或者其它传播或调制的数据信号。

通信介质可以通过计算机可读指令、数据结构、程序模块、或者调制的数据信号(如,载波波形或其它传输机制)中的其它数据来体现,并包括任何信息传送介质。术语“调制的数据信号”可以描述信号,其具有以对信号中的信息进行编码的方式来设置或改变的一个或多个特征。举例而言,但非做出限制,通信介质可以包括诸如有线网络或直接有线连接之类的有线介质、以及诸如声波、射频(rf)、红外线和其它无线介质之类的无线介质。

图6a和图6b示出了可以使用其来实现本公开内容的例子的移动电子设备600(例如,移动电话、智能电话、可穿戴计算机(例如,智能手表)、平板计算机、膝上型计算机等等)。参见图6a,该图示出了用于实现各方面的移动电子设备600的一个方面。

在基本配置中,移动电子设备600是具有输入单元和输出单元的手持计算机。通常,移动电子设备600包括显示器605和用于允许用户向该移动电子设备600输入信息的一个或多个输入按键610。移动电子设备600的显示器605也可以充当为输入设备(例如,接受触摸和/或力输入的显示器)。

如果包括的话,可选的侧输入单元615也允许另外的用户输入。侧输入单元615可以是旋转开关、按键或者任何其它类型的手工输入单元。在替代的方面,移动电子设备600可以合并更多或更少的输入单元。例如,在一些例子中,显示器605可以不是触摸屏。在另一个替代的实施例中,移动电子设备600是便携式电话系统,例如,蜂窝电话。此外,移动电子设备600还可以包括可选的键盘635。可选的键盘635可以是物理键盘或者在触摸屏显示器上生成的“软”键盘。

在各个例子中,输出单元包括用于显示图形用户界面(gui)的显示器605、视觉指示器620(例如,发光二极管)和/或音频换能器625(例如,扬声器)。在一些方面,移动电子设备600合并振动换能器,以向用户提供触觉反馈。在另一个方面,移动电子设备600合并输入和/或输出端口,例如,音频输入(如,麦克风插孔)、音频输出(如,耳机插孔)和视频输出(如,hdmi端口),以向外部设备发送信号或者从外部设备接收信号。

图6b是示出移动计算设备的一个方面的架构的框图。也就是说,移动电子设备600可以合并系统(即,架构)602来实现一些方面。在一个实施例中,将系统640实现成能够运行一个或多个应用(例如,浏览器、电子邮件、日历、联系人管理器、消息客户端、游戏、媒体客户端/播放器、内容选择和共享应用等等)的“智能电话”。在一些方面,将系统640集成为计算设备,例如,集成的个人数字助理(pda)和无线电话。

一个或多个应用程序650可以装载到存储器645中,在操作系统655上运行或者关联操作系统655来运行。这些应用程序的例子包括电话拨号程序、电子邮件程序、个人信息管理(pim)程序、文字处理程序、电子表格程序、互联网浏览器程序、消息程序等等。

此外,系统640还包括位于存储器645中的非易失性存贮区域660。非易失性存贮区域660可以用于存储当系统640关闭时,不应当丢失的持久信息。

应用程序650可以使用和存储非易失性存贮区域660中的信息,例如,电子邮件或者电子邮件应用程序所使用的其它消息等等。此外,同步应用(没有示出)也位于系统640上,并被编程为与位于主机计算机上的相应同步应用程序进行交互,以保持非易失性存贮区域660中存储的信息与主机计算机处存储的相应信息相同步。

系统640具有电源665,其中电源665可以实现成一个或多个电池。此外,电源665还可以包括外部电源,例如,ac适配器或者对电池进行补充或充电的供电对接支座。

此外,系统640还可以包括用于执行发送和接收无线电频率通信的功能的无线电接口层670。无线电接口层670有助于经由通信载波或服务提供商,实现系统640和“外部世界”之间的无线连接。在操作系统655的控制之下,进行去往和来自无线电接口层670的传输。换言之,可以经由操作系统655将无线电接口层670接收的通信传播到应用程序650,反之亦然。

可以使用视觉指示器620来提供视觉通知,和/或可以使用音频接口675来经由音频换能器(例如,图6a中所示的音频换能器625)提供可听见的通知。在所示出的实施例中,视觉指示器620是发光二极管(led),音频换能器625可以是扬声器。这些设备可以直接地耦合到电源665,使得当被激活时,它们仍保持通知机制所指示的持续时间(即使处理器685和其它部件关闭以节省电池电量)。可以对led进行编程以无限期地保持开启,直到用户采取动作来指示该设备的开机状态为止。

音频接口675用于向用户提供可听见的信号和从用户接收可听见的信号(例如,诸如如上所述的语音输入)。例如,除了耦合到音频换能器625之外,音频接口675还可以耦合到麦克风以接收可听见的输入,例如以便促进电话会话。根据本公开内容的例子,麦克风还可以服务成音频传感器,以有助于通知的控制,如下面所描述的。

此外,系统640还可以包括视频接口680,后者实现外围设备630(例如,板上摄像头)的操作以记录静止图像、视频流等等。

实现系统640的移动电子设备600可以具有另外的特征或功能。例如,该移动电子设备600还可以包括诸如磁盘、光盘或磁带之类的其它数据存储设备(可移动和/或不可移动)。在图6b中,通过非易失性存贮区域660的方式来示出这种另外的存贮。

由移动电子设备600生成或捕捉并经由系统640来存储的数据/信息,可以本地地存储在移动电子设备600上(如上所述),或者该数据可以存储在任意数量的存储介质上,其中该设备可以经由无线电接口层670或者经由移动电子设备600和与该移动电子设备600相关联的单独计算设备(例如,诸如互联网的分布式计算网络中的服务器计算机)之间的有线连接来访问该任意数量的存储介质。应当理解的是,移动电子设备600可以经由无线电接口层670或者经由分布式计算网络,来访问该数据/信息。类似地,该数据/信息可以根据公知的数据/信息传送和存储方式(其包括电子邮件和协作式数据/信息共享系统),在电子设备之间进行容易地传送以进行存储和使用。

应当理解的是,为了说明本文给出的方法和系统而描述了图6a和图6b,其并非旨在将本公开内容限制于特定的步骤顺序或者硬件或软件组件的特定组合。

图7示出了系统700的架构的一个方面,其中该系统700用于使用诸如本文所描述的软件系统来自动地报告检测到的问题。系统700可以包括通用电子设备710(例如,个人计算机)、平板电子设备715或移动电子设备720,如上所述。这些设备中的每一个可以包括并用于接收报告的问题和/或提供反馈725,如上所述。

在一些方面,通用电子设备710(例如,个人计算机)、平板电子设备715或移动电子设备720中的每一个可以接收各种其它类型的信息或内容,其中这些信息或内容目录服务745、web门户750、邮箱服务755、即时消息存储760或社交网络服务765进行存储或者发送。

在各方面,可以通过网络730向服务器705上的问题识别系统735(或者问题识别系统的部件)提供问题和/或反馈725(但问题识别系统735也可以是本地系统)。

举例而言,上面所描述的各方面可以体现在通用电子设备710(例如,个人计算机)、平板电子设备715和/或移动电子设备720(例如,智能电话)中。电子设备的这些例子中的任何一个除了可以从存储740获得内容或者向存储740提供内容。

应当理解的是,为了说明本文给出的方法和系统而描述了图7,其并非旨在将本公开内容限制于特定的步骤顺序或者硬件或软件组件的特定组合。

图8示出了可以执行本文所公开的一个或多个方面的示例性平板电子设备800。此外,本文所描述的方面和功能可以在分布式系统(例如,基于云的计算系统)上操作,其中应用功能、存储器、数据存储和获取以及各种处理功能可以通过分布式计算网络(例如,互联网或内联网)彼此进行远程地操作。可以经由板载电子设备显示器或者经由与一个或多个电子设备相关联的远程显示单元来显示用户界面和各种类型的信息。例如,可以在墙面上显示和交互用户界面和各种类型的信息,其中在墙面上投影用户界面和各种类型的信息。与可以实践本发明的例子的多个计算系统的交互包括:键击输入、触摸屏输入、语音或其它音频输入、手势输入(在相关联的电子设备装备有检测(例如,摄像机)功能以捕获和解释用于控制电子设备的功能的用户手势时)等等。

应当理解的是,为了说明本文给出的方法和系统而描述了图8,其并非旨在将本公开内容限制于特定的步骤顺序或者硬件或软件组件的特定组合。

如上所述,本文公开了一种用于自动地确定计算系统中的检测到的问题是否是bug的方法,该方法包括:接收关于检测到的问题的信息;将关于所检测到的问题的信息存储在存储设备中;针对所检测到的问题生成特征向量;分析所述特征向量以确定所检测到的问题是bug的概率,其中所述分析是至少部分地基于所述特征向量;以及当所述概率高于阈值时,将所检测到的问题报告给客户端设备。在另外的例子中,该方法包括:接收对所检测到的问题的修复。在另外的例子中,该方法包括:至少部分地基于所接收的对所检测到的问题的修复来更新所述分析。在另外的例子中,该方法包括:将所述修复与所检测到的问题相关联;以及将所述修复存储在所述存储设备中。在另外的例子中,该方法包括:相对于一个或多个另外的检测到的问题,对所检测到的问题进行优先排序。在另外的例子中,该方法包括:生成特征向量包括:对关于所检测到的问题的所述信息执行一个或多个变换。在另外的例子中,所述一个或多个变换是从包括以下各项的组中选择的:归一化、从堆栈跟踪中对关键词的出现进行计数、以及归类。

此外,还描述了一种系统,该系统包括:至少一个处理单元;以及存储计算机可执行指令的存储器,当所述计算机可执行指令由所述至少一个处理单元执行时,使该系统执行用于检测软件系统中的问题的出现的方法,该方法包括:接收关于检测到的问题的信息;将所检测到的问题的特征图谱与先前检测到的问题的一个或多个特征图谱进行比较,以确定所检测到的问题是否是新的;当确定所检测到的问题是新的时,用于:将关于所检测到的问题的所述信息存储在存储设备中;将关于所检测到的问题的所述信息提供给特征生成组件,该特征生成组件针对所检测到的问题生成特征向量;将该特征向量提供给评估组件,该评估组件分析特征向量以确定所检测到的问题是bug的概率;提供检测到的问题的排序列表。在另外的例子中,所述评估组件与一个或多个模型相关联,其中所述一个或多个模型中的每个模型被配置为至少部分地基于接收的特征向量中包含的信息来评估所述特征向量。在另外的例子中,所述存储器存储用于接收对所检测到的问题的修复的指令。在另外的例子中,所述存储器存储用于将所述修复与所检测到的问题进行关联的指令。在另外的例子中,所述存储器存储用于至少部分地基于所述修复,来更新所述评估组件的一个或多个模型的指令。在另外的例子中,所述排序列表的顺序是基于所确定的概率。在另外的例子中,所述存储器存储用于鉴于先前检测到的问题,向所检测到的问题分配优先级的指令。在另外的例子中,所述存储器存储用于当确定所检测到的问题不是bug时,将关于所检测到的问题的信息存储在所述存储设备中的指令。

此外,还描述了一种存储计算机可执行指令的计算机可读存储介质,当所述计算机可执行指令由处理单元执行时,使所述处理单元执行一种方法,该方法包括:使用与检测到的问题相关联的信息,针对所检测到的问题生成特征向量;将所述特征向量提供给评估组件的一个或多个模型;使所述评估组件的所述一个或多个模型分析所述特征向量以确定所检测到的问题是bug的概率;报告所检测到的问题的所述发生;接收对所检测到的问题的修复;以及使用针对所检测到的问题的修复来更新所述一个或多个模型中的至少一个模型。在另外的例子中,所述存储器存储用于将所述修复存储在存储设备中的指令。在另外的例子中,所述存储器存储用于将所述修复与所检测到的问题进行关联的指令。在另外的例子中,所述存储器存储用于保存关于所检测到的问题的所述信息的指令。在另外的例子中,所述存储器存储用于确定所述一个或多个模型中的哪个模型被配置为分析所述特征向量的指令。

本申请中提供的一个或多个方面的描述和说明,并非是旨在以任何方式来限制或者限定所要求的本公开内容的保护范围。本申请中提供的方面、例子和细节被认为足以传达拥有所主张的本发明,并使他人能够制造和使用所主张的本发明的最佳模式。所主张的本发明不应被解释为限于本申请中提供的任何方面、例子或者细节。不管是以组合方式还是单独地进行示出和描述,各种特征(包括结构和方法)旨在进行选择性地包括或者省略,以产生具有一组特定特征的实施例。在提供本申请的描述和说明之后,本领域普通技术人员可以预想落入本申请所体现的更广泛方面的通用发明构思的精神之内的变型、修改和替代方面,而不脱离所主张的本发明的更广泛的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1