1.一种用于确定增量代码的覆盖率信息的方法,包括:采用代码管理器获取待测版本代码相对于基线版本代码的增量变更文件,增量变更文件包括:变更代码行的文件名称以及变更代码行号;
基于增量变更文件,获取待测版本代码相对于基线版本代码的增量代码;所述增量代码包括语句增量代码、分支增量代码和函数增量代码;
对待测版本代码进行单元测试,得到整体代码覆盖率信息;所述整体代码覆盖率信息包括语句代码覆盖率信息、分支代码覆盖率信息和函数代码覆盖率信息;
基于整体代码覆盖率信息和增量变更文件,将增量代码的变更代码行映射至抽象语法树的行对象,所述抽象语法树用于对所述增量变更文件中的每个变更代码行进行语句解析,获取语句的行号;
遍历抽象语法树的行对象,从抽象语法树的行对象中确定增量代码的特征信息总数和增量代码的被覆盖特征信息数量,包括:遍历所述抽象语法树的行对象,响应于所述行对象所属的语句被覆盖且该语句有分支,获取所述分支上被覆盖条件数和被修改代码的总条件数,将所述增量代码的被覆盖条件数量增加所述分支上被覆盖条件数,以及将所述增量代码的总条件数量增加所述分支上被修改代码的总条件数;
采用增量代码的被覆盖特征信息数量除以增量代码的特征信息总数,得到增量代码的覆盖率信息,包括:采用所述增量代码的被覆盖条件数量除以所述增量代码的总条件数量,得到所述增量代码的分支覆盖率信息;所述覆盖率信息包括语句覆盖率信息、分支覆盖率信息和函数覆盖率信息。
2.根据权利要求1所述的方法,其中,所述行对象包括:所述变更代码行所属的语句、语句是否被覆盖标识、所在函数名、所在函数的起始行号、所在函数的有效尾行号以及所在函数是否被覆盖标识。
3.根据权利要求1‑2任意一项所述的方法,其中,所述遍历所述抽象语法树的行对象,从所述抽象语法树的行对象中确定所述增量代码的特征信息总数和所述增量代码的被覆盖特征信息数量包括:
遍历所述抽象语法树的行对象,响应于访问到的所述行对象所属的语句为新的语句,将所述增量代码的语句总数加1,响应于所述行对象所属的语句被覆盖,将所述增量代码的被覆盖语句数量加1;以及
所述采用所述增量代码的被覆盖特征信息数量除以所述增量代码的特征信息总数,得到所述增量代码的覆盖率信息包括:采用所述增量代码的被覆盖语句数量除以所述增量代码的语句总数,得到所述增量代码的语句覆盖率信息。
4.根据权利要求1‑3任意一项所述的方法,其中,所述遍历所述抽象语法树的行对象,从所述抽象语法树的行对象中确定所述增量代码的特征信息总数和所述增量代码的被覆盖特征信息数量包括:
遍历所述抽象语法树的行对象,响应于所述行对象所属的语句在新的函数内,将所述增量代码的总函数数量加1,遍历该新的函数体的起始行至有效尾行,采用所述整体代码覆盖率信息逐一判断该新的函数体的代码行是否被覆盖,响应于至少一行该新的函数体的代码行被覆盖,确定该新的函数被覆盖,将所述增量代码的被覆盖函数数量加1;
所述采用所述增量代码的被覆盖特征信息数量除以所述增量代码的特征信息总数,得到所述增量代码的覆盖率信息包括:采用所述增量代码的被覆盖函数数量除以所述增量代码的总函数数量,得到所述增量代码的函数覆盖率信息。
5.一种用于确定增量代码的覆盖率信息的装置,包括:变更文件获取单元,用于采用代码管理器获取待测版本代码相对于基线版本代码的增量变更文件,增量变更文件包括:变更代码行的文件名称以及变更代码行号;
增量代码获取单元,用于基于增量变更文件,获取待测版本代码相对于基线版本代码的增量代码;所述增量代码包括语句增量代码、分支增量代码和函数增量代码;
待测版本测试单元,用于对待测版本代码进行单元测试,得到整体代码覆盖率信息;所述整体代码覆盖率信息包括语句代码覆盖率信息、分支代码覆盖率信息和函数代码覆盖率信息;
抽象语法树映射单元,用于基于整体代码覆盖率信息和增量变更文件,将增量代码的变更代码行映射至抽象语法树的行对象,所述抽象语法树用于对所述增量变更文件中的每个变更代码行进行语句解析,获取语句的行号;
抽象语法树遍历单元,用于遍历抽象语法树的行对象,从抽象语法树的行对象中确定增量代码的特征信息总数和增量代码的被覆盖特征信息数量;
覆盖率信息确定单元,用于采用增量代码的被覆盖特征信息数量除以增量代码的特征信息总数,得到增量代码的覆盖率信息,所述覆盖率信息包括语句覆盖率信息、分支覆盖率信息和函数覆盖率信息;
所述抽象语法树遍历单元进一步用于:遍历所述抽象语法树的行对象,响应于所述行对象所属的语句被覆盖且该语句有分支,获取所述分支上被覆盖条件数和被修改代码的总条件数,将所述增量代码的被覆盖条件数量增加所述分支上被覆盖条件数,以及将所述增量代码的总条件数量增加所述分支上被修改代码的总条件数;
所述覆盖率信息确定单元进一步用于:采用所述增量代码的被覆盖条件数量除以所述增量代码的总条件数量,得到所述增量代码的分支覆盖率信息。
6.根据权利要求5所述的装置,其中,所述抽象语法树映射单元中的所述行对象包括:所述变更代码行所属的语句、语句是否被覆盖标识、所在函数名、所在函数的起始行号、所在函数的有效尾行号以及所在函数是否被覆盖标识。
7.根据权利要求5‑6任意一项所述的装置,其中,所述抽象语法树遍历单元进一步用于:遍历所述抽象语法树的行对象,响应于访问到的所述行对象所属的语句为新的语句,将所述增量代码的语句总数加1,响应于所述行对象所属的语句被覆盖,将所述增量代码的被覆盖语句数量加1;以及
所述覆盖率信息确定单元进一步用于:采用所述增量代码的被覆盖语句数量除以所述增量代码的语句总数,得到所述增量代码的语句覆盖率信息。
8.根据权利要求5‑7任意一项所述的装置,其中,所述抽象语法树遍历单元进一步用于:
遍历所述抽象语法树的行对象,响应于所述行对象所属的语句在新的函数内,将所述增量代码的总函数数量加1,遍历该新的函数体的起始行至有效尾行,采用所述整体代码覆盖率信息逐一判断该新的函数体的代码行是否被覆盖,响应于至少一行该新的函数体的代码行被覆盖,确定该新的函数被覆盖,将所述增量代码的被覆盖函数数量加1;
所述覆盖率信息确定单元进一步用于:采用所述增量代码的被覆盖函数数量除以所述增量代码的总函数数量,得到所述增量代码的函数覆盖率信息。
9.一种设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1‑4中任一所述的用于确定增量代码的覆盖率信息的方法。
10.一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如权利要求1‑4中任一所述的用于确定增量代码的覆盖率信息的方法。