CN102169450A - 在ide中提示程序修改对程序性能的影响的方法和装置 - Google Patents
在ide中提示程序修改对程序性能的影响的方法和装置 Download PDFInfo
- Publication number
- CN102169450A CN102169450A CN2010101177301A CN201010117730A CN102169450A CN 102169450 A CN102169450 A CN 102169450A CN 2010101177301 A CN2010101177301 A CN 2010101177301A CN 201010117730 A CN201010117730 A CN 201010117730A CN 102169450 A CN102169450 A CN 102169450A
- Authority
- CN
- China
- Prior art keywords
- function
- performance index
- program
- modification
- performance
- 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
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种用于在IDE中提示影响程序性能的程序修改的方法和装置,该方法包括:在IDE中,检测开发人员对程序进行的修改;确定修改发生的代码位置;获取该程序先前的性能分析数据;根据所述先前的性能分析数据以及所述修改发生的代码位置评估所述修改对程序性能的影响;以及根据所述评估的结果向开发人员提示。本发明使得开发人员在编辑源代码时就可以知道其编辑可能产生的性能问题,从而可做出改正,而不必等到性能分析阶段之后,这样就极大地缩短了开发周期。
Description
技术领域
本发明涉及计算机领域,具体涉及集成开发环境(IDE),更具体涉及一种在IDE中向开发人员提示程序修改对程序性能的影响的方法和装置。
背景技术
软件开发通常是在IDE中进行的。传统的软件开发周期是编辑源代码、构建(build)、测试和进行性能分析(profiling)。通过性能分析,可发现性能瓶颈等性能问题。为解决发现的性能问题,开发人员将重新编辑源代码、构建、测试和进行性能分析。图1示出了一个IDE的结构示意图。如图所示,该IDE包括编辑模块、构建模块、测试模块、性能分析模块和图形用户界面,其中开发人员可通过上述模块对程序进行编辑、构建、测试和性能分析,并在该过程中产生和存储构建结果、测试结果和性能分析数据。图2示出了一个传统的软件开发周期,其中由编辑、构建、测试和性能分析中顺序构成了一个完整的循环,在性能分析阶段可发现性能瓶颈,并重新进行编辑,从而进入下一轮循环。
在上述性能问题解决模式中,在编辑阶段引入的性能问题将在性能分析阶段被发现,并通过下一轮的编辑源代码来解决。这种模式的问题是周期很长,因为测试和性能分析通常要运行一段时间。此外,这种模块还会产生性能回归问题,即开发人员很可能在修改源代码时引入新的性能问题;而开发人员常常意识不到其修改造成的性能问题。这是由于程序通常是复杂的,因此开发人员很难评估其代码修改的整体性能影响;此外,在协作开发时,开发人员仅知道其自己负责的模块,而不知道其他开发人员负责的模块;更重要的是,开发与测试和性能分析通常是分开的。即使一些IDE带有集成的性能分析器,开发人员仍然需要等待一段时间才能获得性能分析结果,然后才能检查产生性能瓶颈和性能回归的位置,并试图加以解决。这种性能问题解决模式显然是低效率的。
发明内容
根据本发明的一个方面,提供了一种用于在IDE中提示影响程序性能的程序修改的方法,包括:在IDE中,检测开发人员对程序进行的修改;确定修改发生的代码位置;获取该程序先前的性能分析数据;根据所述先前的性能分析数据以及所述修改发生的代码位置评估所述修改对程序性能的影响;以及根据所述评估的结果向开发人员提示。
根据本发明的另一个方面,提供了一种用于在IDE中提示影响程序性能的程序修改的装置,包括:修改检测模块,用于在IDE中,检测开发人员对程序进行的修改;位置确定模块,用于确定修改发生的代码位置;性能分析数据获取模块,用于获取该程序先前的性能分析数据;性能影响评估模块,用于根据所述先前的性能分析数据以及所述修改发生的代码位置评估所述修改对程序性能的影响;以及提示模块,用于根据所述评估的结果向开发人员提示。
本发明的优点包括:开发人员在编辑源代码时就可以知道其编辑可能产生的性能问题,从而可及时做出改正,而不必等到性能分析阶段之后,这样就可避免性能回归,并极大地缩短了开发周期。
附图说明
所附权利要求中阐述了被认为是本发明的特点的创造性特征。但是,通过参照附图阅读下面对说明性实施例的详细说明可更好地理解发明本身以及其优选使用模式、目标、特征以及优点,在附图中:
图1示出了一个IDE的结构示意图;
图2示出了一个传统的软件开发周期;
图3示出了根据本发明的实施例的用于在IDE中提示影响程序性能的程序修改的方法;
图4示出了根据本发明的实施例的根据先前的性能分析数据以及修改发生的代码位置评估修改对程序性能的影响的步骤的具体流程;
图5示出了根据本发明的一个实施例的评估修改的代码导致的修改所在函数的性能相关指标变化量(即机器指令数变化量)的步骤的具体执行流程;
图6示出了根据本发明的另一个实施例的评估修改的代码导致的修改所在函数的性能相关指标变化量(即机器指令时钟周期数变化量)的步骤的具体执行流程;
图7示出了根据本发明的实施例的用于在IDE中提示影响程序性能的程序修改的装置。
具体实施方式
本发明的基本思想是在IDE中或与IDE一起提供一个新的装置,其用于分析程序的先前的性能分析数据,并在开发人员修改程序时,向开发人员提示其修改可能造成性能损失。
下面参照附图来说明本发明的实施例。在下面的说明中,阐述了许多具体细节以便更全面地了解本发明。但是,对于本技术领域内的技术人员明显的是,本发明的实现可不具有这些具体细节中的一些。此外,应当理解的是,本发明并不限于所介绍的特定实施例。相反,可以考虑用下面的特征和要素的任意组合来实施本发明,而无论它们是否涉及不同的实施例。因此,下面的方面、特征、实施例和优点仅作说明之用而不应被看作是所附权利要求的要素或限定,除非权利要求中明确提出。
现参照图3,其示出了根据本发明的实施例的用于在IDE中提示影响程序性能的程序修改的方法。
如图所示,该方法包括以下步骤:
在步骤301,在IDE中,检测开发人员对程序进行的修改。
在步骤302,确定修改发生的代码位置。根据本发明的实施例,该步骤包括确定修改的代码所在的函数。该步骤假设对程序的所有修改均发生在程序的现有函数的内部;对于在现有函数外部的修改,例如在现有函数外部增加一个新的函数,必然在某个现有函数内部增加一个对该新增函数的调用,因此该步骤仅确定该新增调用所在的函数,而不会确定该新增函数本身。在C等语言中,可以定义宏,而宏可以被函数调用。修改现有的宏或添加新的宏也会导致调用该宏的函数性能的变化。因此,该确定修改的代码所在的函数的步骤也包括确定调用了修改的宏或新添加的宏的所有函数。
应注意的是,本文中的“函数”一词是指程序中完成特定功能的相对独立的任何代码片段,包括不同程序语言中的子例程、方法、过程、子程序等等。
在步骤303,获取该程序先前的性能分析数据。如本领域中所知的,性能分析数据是在程序的性能分析阶段所产生的,其包括在程序的若干次先前运行过程中的各种性能数据以及性能相关数据,例如程序中各函数在若干次程序运行过程中所消耗的处理器时钟周期数统计值等性能指标、各函数所包含的机器指令数或机器指令时钟周期数等性能相关指标、以及各函数在若干次程序运行过程中的调用频率等。下表示出了性能分析数据的示例结构:
表1性能分析数据的示例结构
函数ID | 性能相关指标 | 性能指标1 | 性能指标2 | ... | 性能指标n | 调用频率 |
其中,函数ID为程序中函数的标识;性能相关指标为函数本身的与性能相关的因素,例如该函数的静态机器指令数、机器指令时钟周期数等;性能指标1...性能指标n为函数在程序若干次运行过程中产生的实际性能指标,例如所消耗的处理器时钟周期的总数或平均值等;调用频率为函数在程序的若干次运行过程中被调用的频率或百分比。
上述性能分析数据可以是直接由性能分析过程产生的,也可以是从由性能分析过程产生的数据中提取的。
在步骤304,根据先前的性能分析数据以及修改发生的代码位置评估修改对程序性能的影响。根据本发明的实施例,该步骤304包括:根据先前性能分析数据评估修改造成的其所在函数的性能指标的预期变化,以及根据函数的性能指标的预期变化评估修改对程序性能的影响。其中,所述根据先前性能分析数据评估所述修改造成的其所在函数的性能指标的预期变化包括:评估所述修改造成的其所在函数的性能相关指标的变化;以及根据所述性能相关指标的变化评估所述修改造成的其所在函数的性能指标的预期变化。并且其中,所述根据所述函数的性能指标的预期变化评估所述修改对程序性能的影响包括:根据所述函数的性能指标的预期变化与程序的全部函数的性能指标之和的比率以及所述函数在程序运行中被调用的频率评估所述修改对程序性能的影响。
在步骤305,根据所述评估的结果向开发人员提示。
现参照图4,其示出了根据本发明的实施例的根据先前的性能分析数据以及修改发生的代码位置评估修改对程序性能的影响的该步骤304的具体流程。如图所示,该流程包括如下步骤:
在步骤401,根据在步骤302确定的修改所在函数的函数ID,从性能分析数据中获取该函数的性能指标PerformanceIndex及性能相关指标PerformanceRelevantIndex。所述性能指标PerformanceIndex可以是该函数在程序的若干次先前运行中所占用的处理器时钟周期数的统计值,例如处理器时钟周期数之和或者每一次运行的平均值。所述性能相关指标可以是该函数所包含的机器指令数,也可以是该函数所包含的机器指令时钟周期数。
在步骤402,评估修改的代码导致的该函数的性能相关指标变化量PerformanceRelevantIndex_Add。
在步骤403,计算:
其中,PerformanceIndex和PerformanceReleventIndex分别为在步骤401中获得的修改所在函数的性能指标和性能相关指标,PerformanceRelevantIndex_Add为在步骤402中获得的性能相关指标变化量。p所表示的是根据修改所造成的其所在函数的性能相关指标的变化评估的、由修改所造成的其所在函数的性能指标的预期变化。
在步骤404,计算:
其中,p为步骤403中所评估的修改所在函数的性能指标的预期变化,β为从程序的性能分析数据中获得的该函数的调用频率,例如在若干次程序运行中该函数被调用的百分比。α表示的是修改对程序整体性能的影响,它是根据修改所造成的其所在函数的性能指标的预期变化并考虑到该函数的性能指标的预期变化在程序中所有函数的性能指标之和中所占比例以及该函数的调用频率而估算的。
根据本发明的一个实施例,在步骤305,可以将步骤404中计算的α值呈现给开发人员,以向其提示其修改可能对程序性能造成的影响。根据本发明的另一实施例,也可以首先将α值与预定阈值进行比较,当α值大于阈值时向开发人员提示其修改可能对程序性能造成较大影响。应注意的是,以上各步骤是在开发人员在IDE中编辑代码的阶段进行的,这样,就可以及时对开发人员的代码编辑行为可能造成的性能影响进行提示,从而使开发人员能及时地进行性能优化,减少了性能回归,提高了开发效率。
根据本发明的一个实施例,所述性能相关指标是函数所包含的机器指令数,且所述性能相关指标变化量PerformanceRelevantIndex_Add是该函数由于代码修改而造成的机器指令数变化量FIA(Function_Instruction_Add)。现参照图5,其示出了根据本发明的该实施例的评估修改的代码导致的该函数的性能相关指标变化量(即机器指令数变化量)的步骤402的具体执行流程。
如图所示,在步骤501,逐行检测函数中被修改的代码。对于C等语言中的函数调用了修改的或新添加的宏的情况,该被修改的或新添加的宏的代码将被视为该函数本身的代码,被逐行检测。
在步骤502,判断被修改的代码是否是引入新的函数调用。
如果该判断为否,则执行步骤503。如果该判断为是,则执行步骤505。
在步骤503,计算该行代码的机器指令数LineInstruction。如本领域所知的,代码行的机器指令数可以通过对修改后的程序代码进行编译并从编译出的二进制代码而得到。
在步骤504,计算FIA=FIA+LineInstruction,假设FIA的初值为0。然后返回步骤501。如果所述修改不是简单地新增加了代码行,而是将旧的代码行修改为新的代码行,则可进一步地从上式中减去旧的代码行的机器指令数。
在步骤505,计算新函数引入的机器指令数FunInstruction。如本领域中所知的,新函数引入的机器指令数可以通过对修改后的程序代码进行编译并从编译出的二进制代码而得到,也可以通过累加新函数所包含的全部指令行的机器指令数而得到。对于所引入的新的函数调用是I/O函数调用的情况,由于相同指令数的I/O函数可能会耗费截然不同的处理器时钟数,因此优选地采用图6中所示及下文所述的另一实施例来评估修改的代码导致的函数的性能相关指标变化量。
在步骤506,计算FIA=FIA+FunInstruction。如果所述修改不是简单地增加了新的函数调用,而是将旧的函数调用修改为新的函数调用,则可进一步地从上式中减去旧函数的机器指令数。然后,返回步骤501。
以上流程迭代执行,直到函数中所有被修改的代码行被处理完毕,从而获得由代码修改造成的该函数最终的机器指令数变化量FIA。
根据本发明的另一个实施例,所述性能相关指标是函数所包含的机器指令时钟周期数,且所述性能相关指标变化量PerformanceRelevantIndex_Add是该函数由于代码修改而造成的机器指令时钟周期数变化量FCA(Function_Cycle_Add)。现参照图6,其示出了根据本发明的该实施例的评估修改的代码导致的该函数的性能相关指标变化量(即机器指令时钟周期数变化量)的步骤402的具体执行流程。
如图所示,在步骤601,逐行检测函数中被修改的代码。对于在C等语言中的函数调用了修改的或新添加的宏的情况,该被修改的或新添加的宏的代码将被视为该函数本身的代码,被逐行检测。
在步骤602,判断被修改的代码是否是引入新的函数调用。
如果该判断为否,则执行步骤603。如果该判断为是,则执行步骤605。
在步骤603,计算该行代码的机器指令时钟周期数LineCycle。如本领域中所知的,代码行的机器指令时钟周期数可通过该代码行包含的机器指令数以及每个机器指令所占用的时钟周期计算出来。
在步骤604,计算FCA=FCA+LineCycle,假设FCA的初值为0。然后返回步骤601。如果所述修改不是简单地新增加了代码行,而是将旧的代码行修改为新的代码行,则可进一步地从上式中减去旧的代码行的机器指令时钟周期数。
在步骤605,计算新函数引入的机器指令时钟周期数FunCycle。如本领域中所知的,新函数引入的机器指令时钟周期数可通过累加该新函数包含的全部指令行的机器指令时钟周期数而得到。对于所引入的新函数为I/O函数的情况,由于相同机器指令数的I/O函数所耗用的处理器时钟周期数可能差别极大,且由于I/O函数通常包含在第三方的库函数中,所以需要在第三方的库函数中,记录I/O函数所耗用的时钟周期数(这是由第三方所评估的)。这样,当由于程序修改第一次引入该I/O函数的时候,可以从第三方的库函数中获得该时钟周期数,作为该新I/O函数所引入的机器指令时钟周期数。在以后的性能分析过程中,可以进一步收集I/O函数的性能数据,即时钟周期数,来替代第三方提供的时钟周期数,用于以后的评估性能相关指标变化量。
在步骤606,计算FCA=FCA+FunCycle。如果所述修改不是简单地增加了新的函数调用,而是将旧的函数调用修改为新的函数调用,则可进一步地从上式中减去旧函数的机器指令时钟周期数。然后,返回步骤601。
以上流程迭代执行,直到函数中所有被修改的代码行被处理完毕,从而获得由代码修改造成的该函数最终的机器指令数变化量FCA。
以上描述了根据本发明的实施例的用于在IDE中提示影响程序性能的程序修改的方法。应指出的是,以上描述和图示仅为示例,而不是对本发明的限制。在本发明的其他实施例中,该方法可具有更多、更少或不同的步骤,各步骤中的细节以及各步骤之间的顺序可以与所图示和描述的不同。例如,根据本发明的一个实施例,在步骤304中,可以首先判断修改所在函数的调用频率,如果该函数的调用频率过小,例如小于0.1,则可判断对该函数的修改不会对程序性能造成显著影响,从而可忽略对该函数的评估。再例如,在以上描述中将处理器时钟周期数作为函数的性能指标,将机器指令数和机器指令时钟周期数作为函数的性能相关指标,但这仅为示例,在本发明的其他实施例中,也可以采用其他的性能指标和性能相关指标。此外,以上描述中的计算函数的性能相关指标变化量的方法,以及步骤403和404中的公式也仅为示例,其在本发明的其他实施例中可以有其他变型。
下面参照图7,其示出了根据本发明的实施例的用于在IDE中提示影响程序性能的程序修改的装置。如图所示,该装置包括:修改检测模块701,用于在IDE中,检测开发人员对程序进行的修改;位置确定模块702,用于确定修改发生的代码位置;性能分析数据获取模块703,用于获取该程序先前的性能分析数据;性能影响评估模块704,用于根据先前的性能分析数据以及修改发生的代码位置评估修改对程序性能的影响;以及提示模块705,用于根据评估的结果向开发人员提示。
根据本发明的实施例,所述确定修改发生的代码位置包括确定修改所在的函数,且先前的性能分析数据包括程序中的函数在程序的先前运行中的性能指标。
根据本发明的实施例,所述性能评估影响模块704用于:根据先前性能分析数据评估修改造成的其所在函数的性能指标的预期变化,以及根据所述函数的性能指标的预期变化评估修改对程序性能的影响。
根据本发明的实施例,根据先前性能分析数据评估修改造成的其所在函数的性能指标的预期变化包括:评估修改造成的其所在函数的性能相关指标的变化;以及根据性能相关指标的变化评估修改造成的其所在函数的性能指标的预期变化。
根据本发明的实施例,根据所述函数的性能指标的预期变化评估修改对程序性能的影响包括:根据所述函数的性能指标的预期变化与程序的全部函数的性能指标之和的比率以及所述函数在程序运行中被调用的频率评估修改对程序性能的影响。
根据本发明的实施例,所述性能指标为函数在程序的先前运行中耗用的处理器时钟周期的统计值。
根据本发明的一个实施例,所述性能相关指标为函数的机器指令数。根据本发明的另一个实施例,所述性能相关指标为函数的机器指令时钟周期数。
以上描述了根据本发明的实施例的用于在IDE中提示影响程序性能的程序修改的装置。应指出的是,以上描述和图示仅为示例,而不是对本发明的限制。在本发明的其他实施例中,该装置可具有更多、更少或不同的模块,且各模块之间的连接和包含等关系可以与所描述和图示的不同。该装置既可以作为IDE的模块位于IDE中,也可以是IDE之外并与IDE一起工作的单独的模块。
下面通过一个示例说明本发明的方法的工作过程。
例如,对于如下示例程序:
1 #include<stdio.h>2 extern int3 init_args(int argc,char*argv[])4 { |
5 //initiate the args6 }78 extern int9 search_entry(int*list,int id)10 {11 //find the ID in the list12 }1314 extern int15 main(int argc,char*argv[])16 {17 int data[100]={0};18 int ret,id=-1;1920 id=init_args(argc,argv);2122 ret=search_entry(data,id);2324 cleaup();25 } |
假设选择处理器时钟周期作为性能分析的性能指标,选择机器指令数作为性能相关指标,其性能分析数据如下表所示:
表2
函数ID | 机器指令数 | 处理器时钟周期 |
Main | 200 | 2400 |
init_args | 500 | 4000 |
search_entry | 900 | 6700 |
假设开发人员将上述示例程序修改如下:
1 #include<stdio.h>23 extern int4 init_args(int argc,char*argv[])5 {6 //initiate the args7 } |
89 extern int10 search_entry(int*list,int id)11 {12 //find the ID in the list13 }1415 extern int16 sort data(char*list)17 {18 //sort the list19 }2021 extern int22 main(int argc,char*argv[])23 {24 int data[100]={0};25 int ret,id=-1;2627 id=init_args(argc,argv);2829 printf(″Will sort the list first...\n″);30 ret=sort data(data);3132 ret=search_entry(data,id);3334 if(ret>0)35 printf(″succeed to find the ID!\n″);36 } |
在上述修改的程序中,第15行到19行是新增的函数sort_data(),第29行和第30行是新增的代码。根据附图3、4、5所示及上文中所述的流程,在步骤301检测到开发人员对程序进行了修改,在步骤302确定代码被修改位置是main函数,在步骤303获得程序先前的性能分析数据,即上表2。接着,在步骤401,从表2中获得main函数的机器指令数(即PerformanceRelevantIndex)为200,处理器时钟周期数(即PerformanceIndex)为2400;在步骤503,计算第29行的新增代码具有8条机器指令,而在步骤504,计算第30行所调用的新函数sort_data()具有420条指令。这样,就在步骤402,获得main函数的性能相关指标变化量(即机器指令变化量)PerformanceRelevantIndex_Add=8+420=428条机器指令。由于main()函数是程序入口,因此其被调用的百分比为β=100%,即main()函数总是会被调用。这样,在步骤403,计算:
这意味着main()中新增加的428机器指令将耗费5136个处理器时钟周期。
然后,在404中计算:
即新增的代码将导致原程序39%的性能损失。假设预定阈值为10%,由于39%>10%,所以提示开发人员。
本发明可以硬件、软件、或硬件与软件的结合的方式实现。本发明可以集中的方式在一个计算机系统中实现,或以分布方式实现,在这种分布方式中,不同的部件分布在若干互连的计算机系统中。适于执行本文中描述的方法的任何计算机系统或其它装置都是合适的。一种典型的硬件和软件的组合可以是带有计算机程序的通用计算机系统,当该计算机程序被加载和执行时,控制该计算机系统而使其执行本发明的方法,并构成本发明的装置。
本发明也可体现在计算机程序产品中,该程序产品包含使能实现本文中描述的方法的所有特征,并且当其被加载到计算机系统中时,能够执行所述方法。
尽管已参照优选实施例具体示出和说明了本发明,但是本领域内的那些技术人员应理解,可在形式和细节上对其进行各种改变而不会背离本发明的精神和范围。
Claims (20)
1.一种用于在IDE中提示影响程序性能的程序修改的方法,包括:
在IDE中,检测开发人员对程序进行的修改;
确定修改发生的代码位置;
获取该程序先前的性能分析数据;
根据所述先前的性能分析数据以及所述修改发生的代码位置评估所述修改对程序性能的影响;以及
根据所述评估的结果向开发人员提示。
2.根据权利要求1的方法,其中,所述确定修改发生的代码位置包括确定所述修改所在的函数,且所述先前的性能分析数据至少包括所述修改所在的函数在程序的先前运行中的性能指标。
3.根据权利要求2的方法,其中,所述根据先前的性能分析数据以及所述修改发生的代码位置评估所述修改对程序性能的影响包括:
根据所述先前性能分析数据评估所述修改造成的其所在函数的性能指标的预期变化,以及
根据所述函数的性能指标的预期变化评估所述修改对程序性能的影响。
4.根据权利要求3的方法,其中,根据所述先前性能分析数据评估所述修改造成的其所在函数的性能指标的预期变化包括:
评估所述修改造成的其所在函数的性能相关指标的变化;以及
根据所述性能相关指标的变化评估所述修改造成的其所在函数的性能指标的预期变化。
5.根据权利要求3的方法,其中,根据所述函数的性能指标的预期变化评估所述修改对程序性能的影响包括:
根据所述函数的性能指标的预期变化与程序的全部函数的性能指标之和的比率以及所述函数在程序运行中被调用的频率评估所述修改对程序性能的影响。
6.根据权利要求2的方法,其中,所述性能指标为函数在程序的先前运行中耗用的处理器时钟周期的统计值。
7.根据权利要求4的方法,其中,所述性能相关指标为函数的机器指令数。
8.根据权利要求7的方法,其中,评估所述修改造成的其所在函数的性能相关指标的变化进一步包括:确定所述函数中的所述修改;根据所述修改计算该行代码的机器指令数的变化,作为所述修改造成的其所在函数的性能相关指标的变化。
9.根据权利要求4的方法,其中,所述性能相关指标为函数的机器指令时钟周期数。
10.根据权利要求9的方法,其中,评估所述修改造成的其所在函数的性能相关指标的变化进一步包括:确定所述函数中的所述修改;根据所述修改计算该行代码的机器指令时钟周期数的变化,作为所述修改造成的其所在函数的性能相关指标的变化。
11.一种用于在IDE中提示影响程序性能的程序修改的装置,包括:
修改检测模块,用于在IDE中,检测开发人员对程序进行的修改;
位置确定模块,用于确定修改发生的代码位置;
性能分析数据获取模块,用于获取该程序先前的性能分析数据;
性能影响评估模块,用于根据所述先前的性能分析数据以及所述修改发生的代码位置评估所述修改对程序性能的影响;以及
提示模块,用于根据所述评估的结果向开发人员提示。
12.根据权利要求11的装置,其中,所述确定修改发生的代码位置包括确定所述修改所在的函数,且所述先前的性能分析数据至少包括所述修改所在的函数在程序的先前运行中的性能指标。
13.根据权利要求12的装置,其中,所述性能影响评估模块用于:
根据所述先前性能分析数据评估所述修改造成的其所在函数的性能指标的预期变化,以及
根据所述函数的性能指标的预期变化评估所述修改对程序性能的影响。
14.根据权利要求13的装置,其中,根据所述先前性能分析数据评估所述修改造成的其所在函数的性能指标的预期变化包括:
评估所述修改造成的其所在函数的性能相关指标的变化;以及
根据所述性能相关指标的变化评估所述修改造成的其所在函数的性能指标的预期变化。
15.根据权利要求13的装置,其中,根据所述函数的性能指标的预期变化评估所述修改对程序性能的影响包括:
根据所述函数的性能指标的预期变化与程序的全部函数的性能指标之和的比率以及所述函数在程序运行中被调用的频率评估所述修改对程序性能的影响。
16.根据权利要求12的装置,其中,所述性能指标为函数在程序的先前运行中耗用的处理器时钟周期的统计值。
17.根据权利要求14的装置,其中,所述性能相关指标为函数的机器指令数。
18.根据权利要求17的装置,其中,评估所述修改造成的其所在函数的性能相关指标的变化进一步包括:确定所述函数中的所述修改;根据所述修改计算该行代码的机器指令数的变化,作为所述修改造成的其所在函数的性能相关指标的变化。
19.根据权利要求12的装置,其中,所述性能相关指标为函数的机器指令时钟周期数。
20.根据权利要求19的装置,其中,评估所述修改造成的其所在函数的性能相关指标的变化进一步包括:确定所述函数中的所述修改;根据所述修改计算该行代码的机器指令时钟周期数的变化,作为所述修改造成的其所在函数的性能相关指标的变化。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101177301A CN102169450A (zh) | 2010-02-26 | 2010-02-26 | 在ide中提示程序修改对程序性能的影响的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101177301A CN102169450A (zh) | 2010-02-26 | 2010-02-26 | 在ide中提示程序修改对程序性能的影响的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102169450A true CN102169450A (zh) | 2011-08-31 |
Family
ID=44490615
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101177301A Pending CN102169450A (zh) | 2010-02-26 | 2010-02-26 | 在ide中提示程序修改对程序性能的影响的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102169450A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105183467A (zh) * | 2015-08-28 | 2015-12-23 | 北京奇艺世纪科技有限公司 | 一种消息提示方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020066077A1 (en) * | 2000-05-19 | 2002-05-30 | Leung Wu-Hon Francis | Methods and apparatus for preventing software modifications from invalidating previously passed integration tests |
US20060156286A1 (en) * | 2005-01-11 | 2006-07-13 | Morgan Fabian F | Dynamic source code analyzer |
US20060218537A1 (en) * | 2005-03-24 | 2006-09-28 | Microsoft Corporation | Method of instrumenting code having restrictive calling conventions |
CN101515248A (zh) * | 2008-02-21 | 2009-08-26 | 国际商业机器公司 | 面向对象程序的跟踪方法和系统 |
-
2010
- 2010-02-26 CN CN2010101177301A patent/CN102169450A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020066077A1 (en) * | 2000-05-19 | 2002-05-30 | Leung Wu-Hon Francis | Methods and apparatus for preventing software modifications from invalidating previously passed integration tests |
US20060156286A1 (en) * | 2005-01-11 | 2006-07-13 | Morgan Fabian F | Dynamic source code analyzer |
US20060218537A1 (en) * | 2005-03-24 | 2006-09-28 | Microsoft Corporation | Method of instrumenting code having restrictive calling conventions |
CN101515248A (zh) * | 2008-02-21 | 2009-08-26 | 国际商业机器公司 | 面向对象程序的跟踪方法和系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105183467A (zh) * | 2015-08-28 | 2015-12-23 | 北京奇艺世纪科技有限公司 | 一种消息提示方法及装置 |
CN105183467B (zh) * | 2015-08-28 | 2019-04-12 | 北京奇艺世纪科技有限公司 | 一种消息提示方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Palomba et al. | On the impact of code smells on the energy consumption of mobile applications | |
Huang et al. | Performance regression testing target prioritization via performance risk analysis | |
Blackburn et al. | Wake up and smell the coffee: Evaluation methodology for the 21st century | |
CN111104335B (zh) | 一种基于多层次分析的c语言缺陷检测方法及装置 | |
US8612944B2 (en) | Code evaluation for in-order processing | |
CN101968766A (zh) | 计算机程序实际运行时触发软件漏洞的检测系统 | |
Reichelt et al. | PeASS: A tool for identifying performance changes at code level | |
Herzig et al. | Mining cause-effect-chains from version histories | |
Dot et al. | Analysis and optimization of engines for dynamically typed languages | |
Rodriguez et al. | Using bad smell-driven code refactorings in mobile applications to reduce battery usage | |
US8117604B2 (en) | Architecture cloning for power PC processors | |
Georgiou et al. | Lost in translation: Exposing hidden compiler optimization opportunities | |
US20110214106A1 (en) | Indicating the effect of program modifications on program performance in an integrated development environment | |
Peters et al. | How does migrating to kotlin impact the run-time efficiency of android apps? | |
Li et al. | Effectively manifesting concurrency bugs in android apps | |
Unnikrishnan et al. | Optimized live heap bound analysis | |
Févotte et al. | Debugging and optimization of HPC programs with the Verrou tool | |
Carlsson et al. | Worst-case execution time analysis of disable interrupt regions in a commercial real-time operating system | |
CN112860545B (zh) | 一种软件缺陷检测方法与装置 | |
Alcocer et al. | Prioritizing versions for performance regression testing: the pharo case | |
Han et al. | Dynamic profiling-based approach to identifying cost-effective refactorings | |
Févotte et al. | Debugging and optimization of HPC programs in mixed precision with the Verrou tool | |
CN102169450A (zh) | 在ide中提示程序修改对程序性能的影响的方法和装置 | |
Molitorisz | Pattern-based refactoring process of sequential source code | |
Rieger et al. | Survey of approaches for assessing software energy consumption |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20110831 |