跨动态边界的运行时分析的可视化的制作方法

文档序号:6423144阅读:163来源:国知局
专利名称:跨动态边界的运行时分析的可视化的制作方法
跨动态边界的运行时分析的可视化背景各种工具和技术被用于计算机程序分析。部分或完全自动化的程序分析可以帮助进行程序优化、程序验证、程序实现(初始创建和/或后续修改)、程序缺陷检测、程序移植(porting)、以及其他努力。在分析计算机程序的行为时,给定方法可以检查和/或利用类型系统、源代码注释、模型检验、体系结构图表、性能配置文件(profile)、探测工具 (instrumentation)、程序切片、继承/依存关系图、和/或其他工具和技术。在程序分析中采用的两种不同的方法是动态程序分析和静态程序分析。动态程序分析是通过在真实和/或虚拟处理器上执行程序来执行的。可以选择测试输入以产生感兴趣的程序行为来进行动态分析;在一些情况下,也可使用来自实况生产服务器的输入。诸如代码覆盖等技术可以帮助确保获得被测试的程序的可能行为的代表性样本。然而,用来获得动态测试数据的探测工具可以更改被测试程序的执行速度和/或其他特性。静态代码分析是在不执行被分析的程序的情况下执行的。静态分析可以针对源代码、中间代码或其他目标代码、或这两者执行。例如,静态分析的深度和广度在只考虑各单独语句和声明的分析与考虑程序的完整源代码的分析之间变化。概述一些软件应用程序对提供不同角色、使用不同的技术、来自不同的供应商、和/或在其他方面彼此不同的片段进行组合。结果,可以定义软件应用程序的各部分之间的边界。 然而,用来生成体系结构图表的分析工具通常不能自动地跨越这些边界,因而开发人员缺少可帮助改进或改编该应用程序的信息。本文描述的一些实施例提供用于使用运行时所生成的数据来将各软件体系结构图表进行相关以提供横跨运行时确定边界的增强体系结构图表的一种或多种方法。“运行时确定边界”是在体系结构中至少部分地由在运行时作出并且因此不服从纯粹静态程序分析的决策所定义的边界。运行时确定边界的一些示例包括客户机-服务器边界、机器-机器边界、数据库-查询程序边界、web服务提供者-消费者边界、工厂调用程序-实例边界、 接口调用-实现类边界、以及反射边界。本文提供的一些方法定位软件体系结构中的运行时确定边界,获取程序(即软件体系结构的实例)的执行的运行时信息,以及将该运行时信息与静态软件体系结构图表进行相关。例如,运行时信息可以与顺序图表、分层图表、活动图表、类图表、和/或依存关系图表相关。相关可以通过例如标识类型的实例、通过跟踪注入到通信信道的标识符、通过使用因果关系挂钩、和/或通过将离开调用程序的消息与进入被调用程序的消息进行比较来实现。本文描述的方法产生对跨运行时确定边界的执行历史进行记录(document)的增强体系结构图表。程序随后可被再次执行,并且可以产生第二增强体系结构图表以记录跨运行时确定边界的第二执行历史。这两个增强体系结构图表的比较可帮助开发人员更好地理解该程序。类似地,可以执行该程序的不同版本,并且该运行时信息可以被用来产生横跨运行时确定边界的另一增强体系结构图表。元数据也可被附加到数据源并且跨运行时确定边界来传播。给出的示例仅是说明性的。本概述并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。相反,提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的某些概念。本发明用权利要求书来定义,且在本概述与权利要求书冲突的情况下,应以权利要求书为准。


将参考附图来给出更具体的描述。这些附图仅示出了所选方面,且因此未完全确定覆盖或范围。图1是示出具有至少一个处理器、至少一个存储器、诸如应用程序等软件体系结构的至少一个实例并具有可存在于多个网络节点上的操作环境中的其他项的计算机系统并且还示出配置的存储介质实施例的框图;图2是示出用于将软件体系结构的静态信息和运行时信息进行相关的示例方法的示图;图3是示出一些过程的步骤和配置的存储介质实施例的流程图;图4示出适于进行本文所教导的相关的静态体系结构图表的示例;图5示出适于进行本文所教导的相关的、图形式的静态体系结构的示例;图6示出通过将运行时信息与图4的静态体系结构图表进行相关来产生的增强体系结构图表;图7示出跨运行时确定边界的增强体系结构图表,它是通过将运行时信息与图4 的静态体系结构图表以及其他静态信息进行相关来产生的;以及图8示出跨运行时确定边界的增强体系结构图表,它是通过将运行时信息与图形式的静态信息进行相关来产生的。
具体实施例方式概览当前软件应用程序使用各种技术和方法来帮助解除给定应用程序的各部分的耦合。解耦技术/方法的一些示例包括web服务以及其他远程过程/调用技术、数据库调用、 以及工厂模式。本文还描述了和/或开发人员也熟悉解耦组件的其他示例。解耦创建应用程序的各部分之间或不同的应用程序之间的明确定义的一组边界。在运行时通过诸如订单处理组件调用外部信用卡处理服务、库存系统调用库存数据库以检索数量信息、基于系统配置来创建图形用户界面(⑶I)等动作以及许多其他动作,跨越这些边界。为了理解该应用程序以使得它可被改进或维护,从现有应用程序生成体系结构图表通常是有用的,并且有时是至关重要的。然而,生成这样的图表通常因为上述边界而不完整。用来生成这些图表的静态分析工具没有适当的方式来自动地跨越这些系统边界并将结果进行记录。例如,在以上示例中的第一示例中,静态图表将示出订单处理系统内的所有调用,但没有示出对信用卡处理服务的调用及其后续处理。同样,在第二示例中,静态图表将示出库存逻辑,但不能示出数据库调用和任何后续处理。在第三示例中,代码的静态分析将不足以完全描绘创建哪一 GUI。
本文描述的一些实施例提供一组特征,该组特征便于并支持生成跨经解耦的系统边界的体系结构图表。这些特征可以在开发工具中提供,如Microsoft Visual Studio Team System解决方案的一个版本,以及其他已授权工具(微软公司的标记)。这些特征中的一些包括对正在运行的应用程序的动态记录和跟踪、对应用程序的源代码的静态分析 (例如,从源代码生成顺序图表)、探测现有代码来产生运行时踪迹、能够将以上踪迹归并成一个数据图的分析引擎、以及使用这样的数据图来生成增强体系结构图表。各对应能力的一些示例在以下场景中示出。用户参与对要被分析的应用程序的一些或所有部分的动态记录。用户运行该应用程序以提供运行时数据以供分析。在运行该应用程序时,一实施例生成适当的日志和踪迹。这些踪迹可包含标识符,例如类型、方法、以及服务的统一资源标识符(URI)和其他ID。或者,可从对应用程序执行的仿真收集运行时数据的部分或全部,例如通过在硬件或软件仿真器上运行该应用程序。如本文所使用的,“执行”以产生运行时数据包括两种可能性,即实况执行和/或仿真执行。分析引擎构造踪迹和 /或其他运行时数据的数据图,并使用标识符将跨系统边界的调用缝合在一起。该实施例使用数据图来构造增强体系结构图表,例如与运行时信息相关并且由该运行时信息在视觉上增强的顺序图表。一些实施例为诸如类型、方法、以及这些方法之间的调用等应用程序人工产物提供公共寻址方案。这一寻址方案可由静态和动态分析代码来共享。一些实施例提供使用该共享的寻址方案来将这些多个图链接在一起的过程。在自动化链接不可能的情况下,一些实施例帮助用户将这些各种人工产物缝合在一起。现在将参考诸如附图中示出的示例性实施例,且此处将使用具体语言来描述这些实施例。但是相关领域且拥有本发明的技术人员将想到的、此处所示的特征的更改和进一步修改以及此处所示的原理的其他应用应被认为是在权利要求书的范围内。各术语的意义在本发明中阐明,因此权利要求书应仔细注意这些阐明来阅读。给出了具体示例,但是相关领域的技术人员将理解,其他示例也落入所使用的术语的意义内, 且在一个或多个权利要求的范围内。各术语不必在此具有与其一般使用中、特定行业的使用中、或特定字典或字典集的使用中相同的意义。与各种措辞一起使用附图标记来帮助显示术语的宽度。给定一段文本中省略附图标记并不一定意味着该附图的内容没有被该文本讨论。发明人声称并行使其对于其自己的词典编纂的权利。各术语此处可在详细描述和/ 或申请文件的别处显式或隐式地定义。如本文所使用的,“计算机系统”可包括例如一个或多个服务器、主板、处理节点、 个人计算机(便携式或非便携式)、个人数字助理、蜂窝或移动电话、和/或提供至少部分地由指令控制的一个或多个处理器的其他设备。指令可以采用存储器和/或专用电路中的软件的形式。具体而言,尽管可以想到许多实施例在工作站或膝上型计算机上运行,但其他实施例可以在其他计算设备上运行,且任何一个或多个此类设备可以是给定实施例的一部分。“多线程化”计算机系统是支持多个执行线程的计算机系统。术语“线程”应被理解为包括能够或经历同步的任何代码,并且可用另一名称来称呼,如“任务”、“过程”或“协同例程”。线程可以并行地、顺序地、或以并行执行(例如,多处理)和顺序执行(例如,时间片)的组合来运行。以各种配置设计了多线程化环境。执行线程可以并行地运行,或者线程可以被组织供并行执行但实际顺序地轮流执行。多线程化可以例如通过在多处理环境中在不同核上运行不同线程、通过对单个处理器核上的不同线程进行时间分片、或通过时间分片和多处理器线程化的某种组合来实现。线程上下文切换可以例如由内核的线程调度器、由用户空间信号、或由用户空间和内核操作的组合来发起。线程可轮流在共享数据上操作,或者每一线程可以例如在其自己的数据上操作。“逻辑处理器”或“处理器”是单个独立的硬件线程处理单元。例如,每一个核运行两个线程的超线程化四核芯片具有8个逻辑处理器。处理器可以是通用的,或者它们可以针对诸如图形处理、信号处理、浮点算术处理、加密、I/O处理等特定用途来定制。“多处理器”计算机是具有多个逻辑处理器的计算机系统。多处理器环境以各种配置出现。在一给定配置中,所有处理器可以在功能上是等价的,而在另一配置中,某些处理器可以借助具有不同硬件能力、不同软件分配或两者而不同于其他处理器。取决于配置,处理器可在单个总线上彼此紧耦合,或者它们可以是松耦合的。在某些配置中,处理器共享中央存储器,在某些配置中它们各自具有其自己的本地存储器,且某些配置中存在共享和本地存储器两者。“内核”包括操作系统、系统管理程序、虚拟机、以及类似的硬件接口软件。“代码”意味着处理器指令、数据(包括常量、变量和数据结构)或指令和数据两
者ο“自动”意味着通过使用自动化(例如,由软件针对此处讨论的具体操作配置的通用计算硬件),与不使用自动化相对。具体而言,“自动”执行的步骤并不是在纸张上用手执行或在人的脑海中执行的;它们是用机器来执行的。贯穿本文,对任选的复数的使用意味着存在一个或多个所指示的特征。例如, “(诸)图表”意味着“一个或多个图表”或等效于“至少一个图表”。贯穿本文,除非明确地另外规定,否则对过程中的步骤的任何引用假定该步骤可以由感兴趣的一方直接执行和/或由该方通过干预机器和/或干预实体来间接执行,且仍在该步骤的范围内。即,感兴趣的一方对步骤的直接执行并不是必需的,除非直接执行是明确规定的要求。例如,涉及感兴趣的一方的诸如向目的地“传送”、“发送”或“传递”等动作的步骤可涉及某一其他方的诸如转发、复制、上传、下载、编码、解码、压缩、解压、加密、解密等居间动作,但仍被理解为由该感兴趣的一方直接执行。只要参考了数据或指令,就理解这些项目配置了计算机可读存储器,从而将其变换为特定物品,而非简单地存在于纸张上、人的脑海中、或作为例如线路上的瞬时信号。操作环境参考图1,用于一个实施例的操作环境100可包括计算机系统102。计算机系统 102可以是多处理器计算机系统,也可以不是。操作环境可包括给定计算机系统中的一个或多个机器,它们可以群集的、客户机-服务器联网的、和/或对等联网的。人类用户104可以通过使用显示器、键盘和其他外围设备106来与计算机系统102 交互。系统管理员、开发人员、工程技术人员、以及最终用户各自都是特定类型的用户104。 代表一个或多个人来行动的自动化代理也可以是用户104。存储设备和/或联网设备在某些实施例中可被认为是外围设备。图1中未示出的其他计算机系统可以使用经由例如网络接口设备到网络108的一个或多个连接来与计算机系统102或与另一系统实施例交互。
计算机系统102包括至少一个逻辑处理器110。如其他合适的系统等计算机系统 102还包括一个或多个计算机可读非瞬态存储介质112。介质112可以是不同的物理类型。 介质112可以是易失性存储器、非易失性存储器、固定在原处的介质、可移动介质、磁介质、 光介质、和/或其他类型的非瞬态介质(与诸如仅传播信号的线路等瞬态介质形成对比)。 具体地,诸如CD、DVD、记忆棒或其他可移动非易失性存储介质等配置的介质114在被插入或以其他方式安装时可以变为计算机系统的功能部分,从而使得其内容可被存取来供处理器110使用。可移动的配置的介质114是计算机可读存储介质112的一个示例。计算机可读存储介质112的某些其他示例包括内置RAM、ROM、硬盘、和不可由用户104容易地移动的其他存储设备。介质114用可由处理器110执行的指令116来配置;“可执行”在此以宽泛的意义使用来包括机器代码、可解释代码、以及在例如虚拟机上运行的代码。介质114还用通过指令116的执行创建、修改、引用和/或以其他方式使用的数据118来配置。指令116和数据118配置它们所在的介质114 ;当该存储器是给定计算机系统的功能部分时,指令116和数据118还配置该计算机系统。在某些实施例中,数据118的一部分代表了诸如产品特性、 库存、物理测量、设置、图像、读数、目标、量等的真实项目。如本文讨论的,这样的数据也被转换,例如通过相关、注入、标记、跟踪、视觉化、导出、绑定、开发、执行、修改、显示、创建、加载、和/或其他操作。软件体系结构120对软件应用程序的组件、依存关系、动作、交互、结果、和/或其他方面进行记录,该软件体系结构120本身可以是其他软件应用程序的一部分或包括其他软件应用程序。记录可包括用统一建模语言和/或用其他格式编写的体系结构图表122、以及例如手册、版本历史、说明书、和/或部分和完整实现的形式的体系结构实例124。给定实例124通常包括源代码和/或目标代码126、类型128的可解析定义和实现、通信信道130 的可解析定义和实现、数据源132的可解析定义和实现、以及软件开发的其他常见事件。图中示出的以软件体系结构实例124、其他软件、以及其他项作为形式的应用程序可部分或整个地驻留在一个或多个介质112内,从而配置这些介质。例如,操作环境也可以包括显示器 134,以及其他硬件,例如,总线、电源、和加速器。给定操作环境100可包括集成开发环境(IDE) 136,其向开发人员提供了一组协调的软件开发工具。具体而言,对于一些实施例,合适的操作环境中的一些包括或帮助创建被配置成支持程序开发的Microsoft Visiml Studio 开发环境(微软公司的标记)。一些合适的操作环境包括Java 环境(Sun Microsystems公司的标记),并且一些操作环境包括利用诸如C++或C#(“C-a!arp”)等语言的环境,但本文的教导适用于各种各样的程序设计语言、程序设计模型、以及程序,以及一般适用于使用静态程序分析、动态程序分析、或这两者的努力。—些项目在图1中以轮廓形式示出以强调它们不是所示操作环境的必需部分,但可以与在此讨论的操作环境中的项目进行互操作。在任何附图或任何实施例中,不能得出不采用轮廓形式的项目就一定是不需要的。系统图2示出适于与一些实施例一起使用的静态-动态相关的一些方面。如本文所教导的,相关工具202将静态和动态信息进行相关以产生增强体系结构图表204。增强体系结构图表204可以横跨“运行时确定边界”206 (即,暗示在运行时作出的决策的边界),并且因此不容易服从纯粹静态程序分析。增强体系结构图表204可以将与诸如体系结构图表216 和静态分析所产生的图218等静态结构214相关的执行历史208 (例如,代码路径212、变量值)和/或其他运行时信息210 (例如,版本信息、所加载的动态库)视觉化。诊断元数据 220也可被利用,并且可能被显示在增强体系结构图表204中。通过相关工具202而非通过正常执行所分析的应用程序来生成元数据220和/或将元数据220附加到数据源132。参考图1和2,一些实施例提供了具有逻辑处理器110和存储器介质112的计算机系统102,该存储器介质由电路、固件和/或软件来配置以如此处所描述的通过将静态和运行时信息进行相关来对它们进行变换。在一些实施例中,能与逻辑处理器进行通信的存储器保持增强体系结构图表204。图表204通过驻留在存储器中来对存储器进行配置。增强体系结构图表204至少对应用程序222的执行历史208进行记录,即对软件体系结构120 的实例1 进行记录。具体而言,图表204对应用程序的跨运行时确定边界206的执行历史进行记录。在给定实施例中,增强体系结构图表204可包括并横跨以下运行时确定边界206 中的至少一个客户机-服务器边界、机器-机器边界、数据库-查询_程序边界、web_服务 _提供者_web_服务_消费者边界、工厂_调用程序-工厂_实例边界、接口 _调用-实现 _类边界、反射边界;在此使用“_”只是为方便起见,帮助对描述边界206的不同各方的文本进行视觉标识。增强体系结构图表204可包括以下软件体系结构图表中的一个或多个 顺序图表、分层图表、活动图表、类图表、依存关系图表。在一些实施例中,增强体系结构图表204包括与来自执行历史的运行时信息相关的突出显示的代码路径212。例如,图6示出增强图表204,其中代码路径212使用编号和增加的线宽来突出显示。虽然图6示例中未示出,但在一些实施例中,图表204包括用于向用户示出跨越运行时确定边界206所采取的实际代码路径212的突出显示。相关工具202 可被用来对边界206进行桥接。图表204可通过将静态和运行时分析结果进行组合来构建。 代码路径212可以与运行时信息相关。在某些实施例中,诸如人类用户I/O设备(屏幕、键盘、鼠标、图形输入板、话筒、扬声器、运动传感器等)等外围设备106将存在,以用于与一个或多个处理器110和存储器进行通信。然而,一实施例还可被深嵌入在系统中,使得没有人类用户104直接与该实施例交互。软件进程可以是用户104。在某些实施例中,该系统包括通过网络连接的多个计算机。联网接口设备可使用诸如例如存在于计算机系统中的分组交换网络接口卡、无线收发机、或电话网络接口等组件来提供对网络108的接入。然而,一实施例也可通过直接存储器存取、可移动非易失性介质、或其他信息存储-检索和/或传输方法来通信,或者计算机系统中的一实施例可以在不与其他计算机系统通信的情况下操作。过程图3以流程图300示出了某些方法实施例。在某些实施例中,附图中所示的过程可以例如,由在脚本控制下的相关工具202、IDE 136和/或其他软件来自动,执行,需要极少或不需要用户输入。各过程可以部分地自动执行,且部分地手动执行,除非另外指明。在给定实施例中,可以重复一过程的零个或多个所示步骤,可能对不同参数或数据进行操作。一实施例中的各步骤也可按与图3中列出的从上到下次序不同的次序来完成。各步骤可以串行地、以部分重叠的方式、或完全并行地执行。遍历流程图300来指示在一过程期间执行的步骤的次序可以在过程的一种执行与过程的另一种执行之间变化。流程图遍历次序也可在一个过程实施例与另一过程实施例之间变化。各步骤可被省略、组合、重命名、重组合、或采用其他方式,而不脱离所示流程,只要所执行的过程是可操作的且符合至少一个权利要求。此处提供了各示例来帮助说明该技术的各方面,但是本文中给出的示例并未描述所有可能的实施例。各实施例不限于此处提供的具体实现、排列、显示、特征、方法或情形。 给定实施例可以例如包括另外的或不同的特征、机制和/或数据结构,并且还可另外脱离此处提供的示例。在边界定位步骤302,一实施例定位运行时确定边界206。例如,可以使用一些静态分析工具、通过GUI的用户输入、运行时信息、和/或其他机制来实现步骤302。在运行时信息获取步骤304,一实施例获取运行时信息210,例如通过在文件或 RAM中定位该信息。例如,可以使用剖析器、探测工具、其他动态分析工具、通过GUI的用户输入、和/或其他机制来实现步骤304。如本文讨论的,在相关步骤306期间,一实施例将诸如静态结构214等静态分析信息与运行时信息210进行相关。可以使用例如类型实例标识的结果、“染色”注入的结果、消息比较的结果、和/或本文所述的其他技术的结果来实现步骤306。在相关步骤306,给定实施例可以使用一个或多个直接相关336、间接相关338、和 /或用户标识的相关340。这些类别在此是为方便起见提供的,在此讨论的技术的其他视图可以对特定相关工具和技术进行不同的分类。记住,用户标识的相关340是用户标识的并且随后可被用来与静态图表缝合在一起的各体系结构组件之间的运行时连接。在一些实施例中,用户可以使用一组技术来标识跨边界206的相关340。一种技术将跨体系结构图表的各视觉元素进行相关。例如,用户可以选择一个顺序图表上的PlaceOrder (下订单)方法,并使用用户界面视觉姿势将它链接到另一个图表上的SubmitOrder (提交订单)方法。这一用户标识的相关340随后可被用来将两个图表直接缝合在一起,并影响基于运行时的分析来生成在后继生成时已将这两种方法链接在一起的图表。另一种技术将源代码中的各项进行相关。例如,通过使用源代码中的一组属性,用户可以指示PlaceOrder方法间接调用SubmitOrder方法。这一用户标识的相关340随后将被用来生成其中自动发生缝合的图表。又一种技术使用相关340中的用户定义的模式来将各项进行相关。例如,用户可以输入一模式,该模式指示如果每一次分析都检测到对接口 OrderStrategy (订单策略)的调用,则该分析应当将该接口与使用诸如“AsyncOrderStrategy (同步订单策略),,等名称匹配*OrderStrategy (*是词汇通配符)的对指定系统中的任何类的任何PlaceOrder调用进行链接。又一种技术将兴趣集中于指定存储区域或设备,例如存储器或数据库。例如,用户可以将数据库中的OrderItem(订单项)表标记为用户标识的相关340的一部分,使得在分析发现改变该表的两个分开的调用的情况下,该分析将这些调用进行相关。间接相关338是各组件通过“第三方”(通常是数据存储)组件彼此交互的方式。例如,如果组件A将一订单条目记录写入数据库,并且组件B取回该订单条目来履行订单, 则组件A和B的静态图表可被连接。在一些情况下,数据库的静态图表还可作为增强体系结构图表204的一部分来连接。数据存储跟踪是间接相关338技术,它可如下地进行。当组件A在运行时存储数据时(在存储器存储、文件存储、数据库存储、或任何其他数据存储介质112中),该数据可被加标签、染色、或以其他方式标识其源。当组件B在运行时取回数据时,可以确定A与B之间的关联。另外,可以确定A、B与数据存储之间的关联。直接相关336工具和技术的若干示例在以下讨论,即,类型标识、标识符跟踪、因果关系挂钩、消息内容比较、消息时间比较。直接相关技术的另一示例是通信基础结构跟踪在两个组件之间的通信机制的给定实现是内置跟踪时,该内置跟踪输出(在运行时创建)可被用来连接各静态图表。在边界类别确定步骤308期间,一实施例确定与所定位的边界206 —致的至少一个类别336。给定边界可以与一个以上类别一致,例如边界可以既是web提供者-消费者边界又是机器-机器边界。可以使用静态信息来对一些边界进行分类,例如,如果静态分析标识数据库查询,则该边界可被假定为数据库-查询程序边界。一些边界可由开发人员通过 ⑶I手动进行分类。也可从运行时信息标识一些边界。例如,考虑具有web客户机和web服务器的系统。从在简单对象访问协议(SOAP)请求离开客户端应用程序并随后进入服务器应用程序时捕捉的运行时信息中,可以作出相关306和运行时边界的分类化。在这种情况下,边界可被置于web服务消费者-提供者类别。进程间通信提供另一示例。在将消息写到信道(套接字、管道,等等)时和在从信道读取消息时,可以捕捉运行时信息,相关和分类化可被完成。在这种情况下,边界可被置于进程间通信类别。在体系结构表示步骤310,一实施例通过获取、准备、显示、和/或以其他方式利用软件体系结构图表来表示软件体系结构120。取决于上下文,所讨论的图表可以是静态图表 122或增强图表204。在图表比较步骤312期间,一实施例比较两个或更多个增强体系结构图表204。与本文讨论的一些其他步骤一样,比较步骤312可以从系统观点或用户观点来看待。S卩,取决于上下文,比较312可由在工具202的控制下(使用处理器110和存储器)自动地比较图表204的系统来完成,和/或比较312可由操作工具202的用户104完成。取决于实施例和开发人员的指令,可以比较增强图表的任何方面。例如,实际代码路径212、边界206处的数据值、边界206的交叉/非交叉、和/或动态地加载的组件可被比较312。在元数据附加步骤314期间,一实施例(或指导一实施例的用户)将元数据202 附加到应用程序数据源132。元数据可以采取属性、消息、消息内容附录、标识符、和/或其他数据的形式,该元数据在应用程序222的正常执行中不存在而是改为出于诊断的目的来附加的。可以使用常见的动态分析工具和技术来附加元数据。在类型标识步骤316期间,一实施例标识一个或多个类型128实例。将应用程序的不同部分中的类型实例进行匹配可以在相关306期间执行,以帮助使用运行时信息 210(即,运行时确定的类型实例)来将各静态图表122缝合在一起。步骤316可以使用解析、表查找、和/或其他常见机制来完成。在标识符跟踪步骤318期间,工具202从应用程序中的一个位置到另一位置来跟踪被工具202注入到通信信道130流的标识符。注入的标识符可被看作元数据220的示例。可以在相关306期间执行在注入的标识符行进到应用程序的各不同部分时对该注入的标识符的跟踪,以帮助使用运行时信息210(即,标识符跨越边界206时的路径)来将各静态图表122缝合在一起。标识符注入在本文中有时被称为“染色注入”,并且可以使用常见机制来实现。在使用因果关系挂钩步骤320期间,一实施例在相关306期间使用因果关系挂钩 338。步骤320可以使用例如美国专利第7四3256号中提供的教导来实现,该专利通过这一引用结合于此。在消息内容比较步骤322期间,一实施例将调用程序处的消息内容与被调用程序处的消息内容进行比较,以帮助在相关306期间通过使用运行时信息210( S卩,消息跨越边界206时的路径)来将各静态图表122缝合在一起。内容比较可以帮助将消息彼此区分, 从而使得跟踪给定消息的路径成为可能。在消息时间比较步骤324期间,一实施例将调用程序处的消息时间与被调用程序处的消息时间进行比较,以帮助在相关306期间通过使用运行时信息210( S卩,消息跨越边界206时的路径)来将各静态图表122缝合在一起。由关于传输等待时间的实验数据或假设来进行补充的时间比较可帮助将消息彼此区分,从而使得跟踪给定消息的路径成为可能。在静态结构获取步骤3 期间,一实施例获取静态体系结构214,例如通过在网络中、在本地文件系统中、或在RAM中找出该结构。例如,如果工具202生成静态图表122,则步骤3 可以使用由相关工具202生成的文件名或其他URI来实现。即使工具202与先前由与工具202不同的某一软件生成的静态图表一起工作,步骤326也可使用来自用户104 的输入来实现。在增强体系结构图表导出步骤3 期间,一实施例从静态信息和运行时信息导出增强体系结构图表204。导出步骤3 —般对应于相关步骤306,而不管术语方面的差异。 在此使用两个术语来帮助说明所提供的教导的不同方面。具体而言,“相关”可被理解为强调如何导出增强图表204,而“导出”可被理解为强调在增强图表204中什么被相关。在视觉呈现步骤330期间,一实施例在视觉上呈现增强图表204,例如通过将图表 204显示在显示器134上或打印输出。在元数据位置指示步骤332期间,一实施例指示例如在视觉呈现步骤330期间元数据220的应用内的一个或多个位置。所指示的元数据可被附加到数据源,和/或例如可以是被跟踪318的注入的标识符。描述图表的某一方面的元数据可以来自各种源,例如,用户、其他代码分析工具、其他描述或文档。在存储器配置步骤334期间,存储器介质112由相关工具202、增强体系结构图表 204、或以其他方式结合本文讨论的静态-运行时信息相关来配置。上述步骤及其相互关系在下文中结合各种实施例来更详细地讨论。一些实施例提供使用运行时生成的数据来将各软件体系结构图表进行相关的过程。该过程利用设备中的能与至少一个逻辑处理器进行通信的存储器。该过程包括定位 302软件体系结构中的运行时确定边界206。软件体系结构至少部分地由至少一个软件体系结构图表122来表示310 (例如,由顺序图表、分层图表等表示)。该过程获取针对304软件体系结构的实例124的至少一个执行的运行时信息210 (函数级和/或其他),并将运行时信息的至少一部分与至少一个软件体系结构图表进行相关306。该过程随后产生对跨运行时确定边界的执行历史进行记录的增强体系结构图表204。在一些实施例中,定位步骤302确定308运行时确定边界适合以下类别336中的至少一个类别客户机-服务器边界、机器-机器边界、数据库-查询_程序边界、web_服务_提供者_web_服务_消费者边界、工厂_调用程序-工厂_实例边界、接口 _调用-实现_类边界、反射边界。然而,这些不一定是仅有的可能边界206。也可使用不同的边界类别206。运行时确定边界类别的一些其他示例包括订单处理组件-外部信用卡处理服务边界、库存系统-库存数据库边界、GUI创建程序-系统配置边界、由利用最终用户所选择的数据库的代码所定义的边界、以及由利用从数据库中查找端点的web服务的代码所定义的边界。给定边界206可以属于一个或多个类别336。在一些实施例中,该过程比较312两个或更多个图表204。例如,一个过程包括以上定位、获取、以及相关步骤,并且还包括获取针对304软件体系结构的同一实例的另一执行的运行时信息,将该运行时信息的至少一部分与至少一个软件体系结构图表进行相关 306,从而产生对跨运行时确定边界的执行历史进行记录的另一增强体系结构图表,并随后比较312这两个增强体系结构图表。作为另一示例,一个过程包括以上的原始定位、获取、 以及相关步骤,并且还包括获取304软件体系结构的不同实例的执行的运行时信息,将该运行时信息的至少一部分与至少一个软件体系结构图表进行相关306,从而产生对跨运行时确定边界的执行历史进行记录的另一增强体系结构图表,并随后比较312这两个增强体系结构图表。常见机制可被用于静态分析,以将元数据附加到体系结构图表或程序图的各节点,并使用该数据来进行静态确认。然而,在本文提供的一些实施例中,一过程将元数据220 附加314到数据源132,并且执行元数据跨运行时确定边界206的传播。例如,一过程可将元数据附加到数据源来指示332信任其中的数据的位置。更一般地,取决于开发人员想要知道关于被分析的程序的什么信息,所附加314 的元数据220的类型可以广泛变化。元数据可以指示数据的源以及该源是否可被信任。元数据可以指示关于数据的值的一些事情,例如它是否为空(例如,基于用于空的条件块测试)。元数据可以指示与分配数据的方式有关的一些事情,例如它是被垃圾收集的还是需要被消费者显式地释放。与其中分析不跨越运行时边界的纯粹静态空间不同,一些实施例跨越边界206将所附加的元数据携带到没有静止地连接的第二体系结构图表/程序图。一旦使用运行时信息通过相关将各图表进行了连接,则可以将该元数据附加到图表/图中的节点并将其跨越运行时边界206流传送。在一些实施例中,可以使用所附加的元数据来检测受污染的数据流。在将跨边界 206的各系统进行相关306之后,可具有封装了整个应用程序的控制流程图。随后可以将任何控制流程/数据流分析从每一分立组件内扩展到整个应用程序。例如,如果不能信任的数据进入一个组件(例如,作为URL查询参数)并随后被跨越边界传送到第二组件,则一实施例可继续以将该数据标记为不能被在第二组件中完成的任何数据流分析所信任,而非对该数据作出假设。在该数据被传递通过应用程序222中的各组件时,元数据允许该实施例保留该不能信任的指定,以得到更完整的应用程序分析。同样,如果数据传递通过已知的净化函数,则可以附加元数据220以将该数据标记为能信任的,并在应用程序分析中保留该指定。因此,一实施例可以避免对推测上不能信任而实际上能信任的数据的使用进行报在一些实施例中,相关步骤306包括标识316类型实例。例如,可以基于类型名、 基于类型内容、使用在执行期间记录的对象标识符、和/或基于类型的数量来标识316所调用的类型的实例。在一些实施例中,相关步骤306包括跟踪318使用常见的“染色注入”机制被注入到通信信道的标识符。在一些实施例中,相关306包括使用因果关系挂钩338。在一些实施例中,相关306包括将离开调用程序的消息的内容与进入被调用程序的消息的内容进行比较322,并且在一些实施例中,将离开调用程序的消息的时间与进入被调用程序的消息的时间进行比较324。一些实施例执行相关过程,包括获取针对304软件体系结构的实例的执行的运行时信息、获取3 包含关于软件体系结构的静态信息的静态体系结构、从运行时信息和静态信息(增强体系结构图表记录实例的跨运行时确定边界的执行历史)导出3 增强体系结构图表、以及在以下至少一个中在视觉上呈现330增强体系结构图表显示器、打印输
出ο例如,一个实施例获取3 静态跨越体系结构图表形式的静态体系结构214,即表示软件体系结构在运行时确定边界206的相对两侧上的各部分的图表。随后,该实施例(至少部分地;可涉及其他动作)通过修改静态跨越体系结构图表包括该图表与软件体系结构的实例的运行时信息之间的相关,来导出3 增强体系结构图表。作为另一示例,一个实施例获取3 表示软件体系结构在运行时确定边界206的第一侧的第一部分的第一静态体系结构图表122以及表示软件体系结构在运行时确定边界206的第二侧的第二部分的第二静态体系结构图表122的形式的静态体系结构。随后,该实施例(至少部分地;可涉及其他动作)通过使用软件体系结构的实例的运行时信息210 将这些图表进行组合,来导出3 增强的体系结构图表。作为又一示例,一个实施例基于对软件体系结构的实例的静态分析来获取3 静态数据图218形式的静态体系结构。随后,该实施例(至少部分地;可涉及其他动作)通过修改静态数据图以反映软件体系结构的实例的运行时信息210,并随后基于该经修改的数据图生成增强体系结构图表,来导出3 增强体系结构图表204。配置的介质一些实施例包括配置的计算机可读存储介质112。介质112可包括盘(磁、光或其他)、RAM、EEPROM或其他ROM、和/或其他可配置存储器,包括在特定的非瞬态计算机可读介质(与线路和其他传播信号介质形成对比)。配置的存储介质可以特别地是诸如⑶、DVD 或闪存等可移动存储介质114。可以是可移动或不可移动并且可以是易失性或非易失性的通用存储器可被配置成使用数据118和指令116形式的从可移动介质114和/或诸如网络连接等另一源读取的诸如相关工具202和/或增强体系结构图表204等项目来形成配置的介质的实施例。配置的介质112能够使计算机系统执行用于通过此处揭示的导出增强体系结构图表204来变换数据的过程步骤。图1到3因而帮助示出配置的存储介质实施例和过程实施例,以及系统和过程实施例。具体而言,图3所示或此处另外教示的过程步骤中的任一个可用于帮助配置存储介质来形成配置的介质实施例。其他示例以下提供其他细节和设计考虑。如同此处的其他示例一样,在一给定实施例中,所描述的特征可个别和/或组合地使用,或完全不使用。本领域的技术人员将理解,实现细节可涉及诸如具体API和具体样本程序等具体代码,因此不需要出现在每一实施例中。本领域的技术人员还将理解,讨论细节时所使用的程序标识符和某些其他术语是特定于实现的,且因此不需要属于每一实施例。然而,尽管它们不一定需要存在于此,但仍提供了这些细节,因为它们可通过提供上下文来帮助某些读者,和/或可示出此处讨论的技术的许多可能实现中的几个。对于使用运行时生成的数据来将各静态软件图表进行相关的方法,首先考虑以下内容。可以使用诸如基于对代码的建模和解释的控制流程分析等常见的静态代码探查机制来生成静态软件图表。诸如Microsoft Visual Studio 2010环境中的顺序图表等工具和诸如Microsoft FxCop工具和Microsoft PREfast工具等静态代码分析工具利用静态分析技术(微软公司的标记)。一般而言,静态代码探查对在不执行查询的情况下不能被确认的控制作出假定, 如条件语句的结果或循环的迭代次数。另外,对于松耦合的系统,静态代码分析在不运行程序的情况下不能知道该系统最终将使用什么类、数据、和/或服务。例如,考虑以下代码
权利要求
1.一种使用运行时生成的数据来将各软件体系结构图表进行相关的方法,该方法被用于设备中的可与至少一个逻辑处理器进行通信的存储器中,该方法包括以下步骤定位(302)软件体系结构中的运行时确定边界,所述软件体系结构至少部分地由至少一个软件体系结构图表来表示;获取(304)所述软件体系结构的实例的至少一个执行的运行时信息;以及将所述运行时信息的至少一部分与至少一个软件体系结构图表进行相关(306),从而产生对跨所述运行时确定边界的执行历史进行记录的增强体系结构图表。
2.如权利要求1所述的方法,其特征在于,所述定位步骤包括确定(308)所述运行时确定边界适合以下类别中的至少一个客户机-服务器边界;机器-机器边界;数据库-查询_程序边界;web_服务_提供者-web_服务_消费者边界;工厂_调用程序-工厂_实例边界;接口_调用-实现_类边界;进程间通信边界;反射边界。
3.如权利要求1所述的方法,其特征在于,还包括由以下软件体系结构图表中的至少一个来表示(310)所述软件体系结构顺序图表; 分层图表; 活动图表; 类图表; 依存关系图表。
4.如权利要求1所述的方法,其特征在于,还包括获取(304)针对所述软件体系结构的同一实例的另一执行的运行时信息; 将所述运行时信息的至少一部分与所述至少一个软件体系结构图表进行相关(306), 从而产生对跨所述运行时确定边界的执行历史进行记录的另一增强体系结构图表;以及将这两个增强体系结构图表进行比较(312)。
5.如权利要求1所述的方法,其特征在于,还包括获取(304)针对所述软件体系结构的不同实例的执行的运行时信息; 将所述运行时信息的至少一部分与所述至少一个软件体系结构图表进行相关(306), 从而产生对跨所述运行时确定边界的执行历史进行记录的另一增强体系结构图表;以及将这两个增强体系结构图表进行比较(312)。
6.如权利要求1所述的方法,其特征在于,还包括将元数据附加到(314)数据源,并跨所述运行时确定边界来传播所述元数据。
7.如权利要求1所述的方法,其特征在于,所述相关步骤还包括以下步骤中的至少一个基于类型名来标识(316)被调用的类型的实例;基于类型内容来标识(316)被调用的类型的实例; 通过在执行期间记录的对象标识符来标识(316)类型的实例; 基于类型的数量来标识(316)类型的实例; 基于通信基础结构跟踪来标识(316)类型的实例。
8.如权利要求1所述的方法,其特征在于,所述相关步骤还包括以下步骤中的至少一个跟踪(318)注入到通信信道中的标识符;跟踪(318)由第一组件存储在存储介质中并由第二组件从该存储介质取回的数据; 使用(320)因果关系挂钩;将离开调用程序的消息的内容与进入被调用程序的消息的内容进行比较(322); 将离开调用程序的消息的时间与进入被调用程序的消息的时间进行比较(324)。
9.一种用数据和指令配置的计算机可读非瞬态存储介质,所述指令在被至少一个处理器执行时使(诸)处理器执行一种相关方法,所述方法包括以下步骤获取(304)针对软件体系结构的实例的执行的运行时信息; 获取(326)包含关于所述软件体系结构的静态信息的静态体系结构; 从所述运行时信息和所述静态信息导出(328)增强体系结构图表,所述增强体系结构图表记录所述实例的跨运行时确定边界的执行历史;以及在以下至少一个中在视觉上呈现(330)所述增强体系结构图表显示器、打印输出。
10.如权利要求9所述的配置的介质,其特征在于,所述方法包括获取(326)表示所述软件体系结构在所述运行时确定边界的第一侧的第一部分的第一静态体系结构图表以及表示所述软件体系结构在所述运行时确定边界的第二侧的第二部分的第二静态体系结构图表的形式的静态体系结构;以及至少部分地通过使用所述软件体系结构的实例的运行时信息将这些图表进行组合来导出(328)增强体系结构图表。
11.如权利要求9所述的配置的介质,其特征在于,所述方法包括基于对所述软件体系结构的实例的静态分析来获取(326)静态数据图形式的静态体系结构;以及至少部分地通过修改所述静态数据图以反映所述软件体系结构的实例的运行时信息, 并随后基于该经修改的数据图生成增强体系结构图表,来导出(328)所述增强体系结构图表。
12.如权利要求9所述的配置的介质,其特征在于,所述导出步骤还包括以下步骤中的至少三个基于类型名来标识(316)被调用的类型的实例;基于类型内容来标识(316)被调用的类型的实例;通过在执行期间记录的对象标识符来标识(316)类型的实例;基于类型的数量来标识(316)类型的实例;基于通信基础结构跟踪来标识(316)类型的实例;跟踪(318)注入到通信信道中的标识符;跟踪(318)由第一组件存储在存储介质中并由第二组件从该存储介质取回的数据;使用用户标识的相关(340); 使用(320)因果关系挂钩;将离开调用程序的消息的内容与进入被调用程序的消息的内容进行比较(322); 将离开调用程序的消息的时间与进入被调用程序的消息的时间进行比较(324)。
13.一种计算机系统,包括 逻辑处理器(110);可与所述逻辑处理器进行通信的存储器(112);驻留在所述存储器中的增强体系结构图表O04),所述增强体系结构图表记录软件体系结构的实例(124)的跨运行时确定边界O06)的执行历史。
14.如权利要求13所述的系统,其特征在于,所述增强体系结构图表(204)包括并跨越以下运行时确定边界O06)中的至少一个客户机-服务器边界;机器-机器边界;数据库-查询_程序边界;web_服务_提供者-web_服务_消费者边界;工厂_调用程序-工厂_实例边界;接口_调用-实现_类边界;反射边界。
15.如权利要求13所述的系统,其特征在于,所述增强体系结构图表包括与来自所述执行历史的运行时信息(210)相关的被突出显示的代码路径012)。
全文摘要
通过将运行时和静态信息进行相关来导出增强软件体系结构图表,从而允许执行图表跨越运行时确定边界。运行时确定边界由在运行时作出的决策来定义,例如客户机-服务器边界、机器-机器边界、数据库-查询程序边界、web服务提供者-消费者边界、工厂调用程序-实例边界、接口调用-实现类边界、以及反射边界。相关可以涉及例如标识类型的实例、跟踪注入到通信信道的标识符、使用因果关系挂钩、和/或将离开调用程序的消息与进入被调用程序的消息进行比较。
文档编号G06F9/44GK102236549SQ201110106238
公开日2011年11月9日 申请日期2011年4月18日 优先权日2010年4月20日
发明者B·克劳福德, S·杜塔 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1