CN102147764A - 测试代码质量评估 - Google Patents

测试代码质量评估 Download PDF

Info

Publication number
CN102147764A
CN102147764A CN201110037410XA CN201110037410A CN102147764A CN 102147764 A CN102147764 A CN 102147764A CN 201110037410X A CN201110037410X A CN 201110037410XA CN 201110037410 A CN201110037410 A CN 201110037410A CN 102147764 A CN102147764 A CN 102147764A
Authority
CN
China
Prior art keywords
code
test
test code
application
quality
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.)
Granted
Application number
CN201110037410XA
Other languages
English (en)
Other versions
CN102147764B (zh
Inventor
J·A·穆哈斯凯
R·沃格里内茨
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of CN102147764A publication Critical patent/CN102147764A/zh
Application granted granted Critical
Publication of CN102147764B publication Critical patent/CN102147764B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

测试环境可包括被用来测试应用程序代码的测试代码的质量评估。若干质量评估可以从对已编译或源代码形式的测试代码的分析来确定,包括评估测试代码作出的描述性断言、依赖关系评估、秩复杂度评估、返回值断言、可变参数断言、以及测试有效性历史。质量评估还可包括与应用程序代码相关的测试代码分析,包括异常捕捉、边界条件、对返回值的断言以及其他评估。测试代码评估可以与测试代码一起呈现在用户界面中,并且可被用来管理应用程序的测试过程。测试代码评估可被集成到具有图形用户界面的代码开发应用程序。

Description

测试代码质量评估
技术领域
本发明涉及代码质量评估。
背景技术
应用程序代码是可以是计算机应用程序的一部分的源代码。应用程序代码通常被用作软件产品的一部分并且可作为可执行计算机代码来编译和传送(ship)。
测试代码可被用来测试应用程序代码。一般而言,测试代码不像应用程序代码那样被传送给客户或最终用户,而是可被用来锻炼应用程序代码来标识该应用程序代码中的隐错。隐错可以是应用程序代码执行的不合需要的任何操作。一些隐错可能是严重的,如使得应用程序崩溃或停止操作,而其他隐错可以是微小的,如笨拙地处理不正确的输入。
测试代码有效性的一个度量是源代码或程序被测试的‘覆盖度’或程度。一个简单度量是由测试代码执行的应用程序代码的可执行块或命令的百分比。其他度量可包括函数覆盖度、语句覆盖度、分支覆盖度以及条件覆盖度。在应用程序代码开发期间,这些度量通常用来测量应用程序代码对发布和传送的适合性。
发明内容
测试环境可包括被用来测试应用程序代码的测试代码的质量评估。若干质量评估可以从对已编译或源代码形式的测试代码的分析来确定,包括评估测试代码作出的描述性断言、依赖关系评估、秩复杂度评估、返回值断言、可变参数断言、以及测试有效性历史。质量评估还可包括与应用程序代码相关地分析测试代码,包括异常捕捉、边界条件、对返回值的断言以及其他评估。测试代码评估可以与测试代码一起呈现在用户界面中,并且可被用来测量对源代码所执行的测试的质量。测试代码评估可被集成到具有图形用户界面的代码开发应用程序。
提供本发明内容是为了以简化的形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。
附图说明
在附图中:
图1是示出了测试代码评估***可在其中操作的环境的一实施方式的图示。
图2是质量测试代码健康度量的示例实施方式的图示。
图3是示出用于分析测试代码的方法的实施方式的流程图。
图4是示出用于使用应用程序代码来分析测试代码的方法的实施方式的流程图。
图5是示出具有测试代码分析结果的用户界面的一实施方式的图示。
具体实施方式
一种用于测试应用程序代码的***可以评估测试代码来确定该测试代码的质量度量。该质量度量可以用比常规测试覆盖度分析更有用的方式来给出测试代码的有效性的简单评估。该***可以通过源代码分析和已编译或中间代码的分析来自动地评估测试代码,并可以使用可标识该测试代码的‘质量’的若干规则。
在一应用程序开发环境中,测试代码可以从应用程序代码自动生成或被手动地创作成单位测试。测试代码可被应用程序开发者或测试工程师进一步修改和编辑以具有各种断言并覆盖不同的场景。单位测试中的每一个可以在应用程序开发环境内与示出测试代码组件的质量水平的质量图标或其他显示一起显示。在对应用程序代码执行测试代码时,测试结果可以与可从测试代码的质量导出的质量度量一起显示。
本说明书通篇中,在所有附图的描述中,相同的附图标记表示相同的元素。
在将元素称为“连接”或“耦合”的时候,这些元素可以直接连接或耦合在一起,或者也可以存在一个或多个中间元素。相反,在将元素称为“直接连接”或“直接耦合”的时候,不存在中间元素。
本发明可被具体化为设备、***、方法、和/或计算机程序产品。因此,本发明的部分或全部能以硬件和/或软件(包括固件、常驻软件、微码、状态机、门阵列等)来具体化。此外,本发明可以采用其上包含有供指令执行***使用或结合其使用的计算机可使用或计算机可读程序代码的计算机可使用或计算机可读存储介质上的计算机程序产品的形式。在本文的上下文中,计算机可使用或计算机可读介质可以是可包含、存储、传递、传播、或传输程序以供指令执行***、装置或设备使用或结合其使用的任何介质。
计算机可使用或计算机可读介质可以是,例如,但不限于,电、磁、光、电磁、红外、或半导体***、装置、设备或传播介质。作为示例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。
计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据这样的信息的任意方法或技术来实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁带盒、磁带、磁盘存储或其他磁性存储设备、或能用于存储所需信息且可以由指令执行***访问的任何其他介质。注意,计算机可使用或计算机可读介质可以是其上打印有程序的纸张或其他合适的介质,因为程序可以经由例如对纸张或其他介质的光学扫描而电子地被捕获,随后如有必要被编译、解释,或以其他合适的方式处理,并随后存储在计算机存储器中。
通信介质通常以诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并包括任意信息传送介质。术语“已调制数据信号”可以被定义为其一个或多个特征以在该信号中编码信息的方式被设定或更改的信号。作为示例而非限制,通信介质包括有线介质,如有线网络或直接有线连接,以及诸如声学、射频(RF)、红外线及其他无线介质之类的无线介质。上述的任意组合也应包含在计算机可读介质的范围内。
当本发明在计算机可执行指令的一般上下文中具体化时,该实施方式可以包括由一个或多个***、计算机、或其他设备执行的程序模块。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能可以在各个实施方式中按需进行组合或分布。
图1是示出***代码开发的实施方式100的图示。实施方式100是可被用来编写、编辑、测试并调试计算机可执行代码的设备的简化示例。
图1的示图示出***的各个功能组件。在某些情况下,组件可以是硬件组件、软件组件、或硬件和软件的组合。某些组件可以是应用层软件,而其他组件可以是操作***层组件。在某些情况下,一个组件到另一个组件的连接可以是紧密连接,其中两个或更多个组件在单个硬件平台上操作。在其他情况下,连接可以通过跨长距离的网络连接来进行。每个实施方式可以使用不同的硬件、软件、以及互连体系结构来实现所描述的功能。
实施方式100是可被用来开发软件、固件或其他可执行代码的***的示例。在实施方式100的***上开发的最终产品可被称为应用程序代码。如在本说明书和权利要求书中使用的,应用程序代码是由测试代码测试的软件产品。如在本说明书和权利要求书中使用的,测试代码是锻炼应用程序代码的软件。一般而言,测试代码不与应用程序代码一起传送并且在执行应用程序时不使用。
软件开发***可被用来生成测试代码,并且随后该测试代码可被自动地评估以确定该测试代码的质量度量。在许多情况下,该测试代码可被手动地创作并随后被评估以生成质量度量。对该测试代码的分析可以确定该测试代码的各个特征或方面,以便可以确立质量度量。
使用可对该测试代码执行的各种分析,该质量度量可被用来确定测试代码有多么‘好’。质量度量可被用来标识测试代码的可能具有缺陷的各部分并在测试结果中给出某一确信度量。
例如,可以向在分析上得分高的测试代码给出高质量度量。在对应用程序代码执行时,测试代码的结果可被认为是应用程序代码质量的良好表示。相反,具有差质量度量的测试代码的结果可能是有问题的。
设备102可以是具有硬件组件104和软件组件106的通用计算机。设备102可以具有可被用来开发应用程序代码并可由程序员或应用程序开发人员使用的若干工具。
在一些实施方式中,设备102可以类似于应用程序旨在其上执行的设备。如此,设备102可以表示个人计算机或其他类似设备。
在其他实施方式中,设备102可以是可在不同的设备上执行的软件或固件的开发平台。例如,设备102可被用来开发并测试可以在诸如蜂窝电话或具有计算机处理器的其他设备等另一类型的计算机设备上执行的软件。在这样的实施方式中,设备102可包括模拟预期设备的操作的仿真器或模拟器。这样的仿真器可以允许在安装并在预期设备硬件上运行之前测试并执行应用程序代码。
硬件组件104可包括可以使用随机存取存储器110和非易失性存储112的处理器108。硬件组件104可以具有网络接口114以及用户界面116。
在实施方式100的示例中,硬件组件104可以表示通用个人计算机。在其他实施方式中,硬件组件104可以是台式计算机或服务器计算机。一些实施方式可以是诸如膝上型计算机、笔记本计算机、或甚至蜂窝电话、个人数字助理等便携式设备,或其他设备。
软件组件106可包括若干不同类型的软件可在其上操作的操作***118。
可执行代码120可以是可在操作***内直接执行的任何类型的代码。在一些情况下,可执行代码120可以是可包括可由处理器108直接执行的命令的机器码。在其他情况下,可执行代码120可以是可在由汇编程序处理之后执行的汇编码。
一些软件组件可以使用中间代码120来定义。中间代码120可以是被编译成中间表示并随后可使用即时编译器124来进一步编译并由执行引擎126执行的源代码。中间代码122在受管(managed)代码应用程序中或其中可使用若干不同的编程语言的应用程序中是有用的。
应用程序开发***128可具有被用于编写、编辑、测试、调试以及发布应用程序的元素中的许多元素。在实施方式100的示例中,应用程序开发***128的特征可被示为其中程序员可以在单个应用程序中执行许多不同操作的大型应用程序或编程环境的一部分。在其他实施方式中,所描述的各组件可以是独立地执行的分开的应用程序。
在一些实施方式中,应用程序开发***128的各部分可由其他设备来执行。例如,服务器设备可被用来将代码编译成可执行代码。在另一示例中,另一设备可被用来执行应用程序代码和测试代码。这样的示例可针对具有应用程序代码旨在用于其上的专用处理器或硬件的设备。
应用程序开发***的许多实施方式或应用程序开发***128中的各组件可具有图形用户界面。图形用户界面可被用来浏览代码,编写并编辑代码,以及从各组件的许多不同功能中进行选择。
在一些实施方式中,应用程序开发***128的各部分中的一些或全部可以使用命令行或其他界面来执行。
许多应用程序开发***128可具有编辑器130、编译器132以及执行环境134。编辑器130可以允许用户查看、编写并编辑代码,包括应用程序代码和测试代码。编译器132可以将源代码编译成可使用执行环境134来执行的可执行代码。
执行环境134可以类似于在操作***环境中运行已编译代码。执行环境134可包括可提供与执行操作***环境中不可用代码有关的详细信息的一些调试和跟踪功能。
一组测试组件138可被用来开发并测试应用程序代码140。测试组件138可包括用于创建并分析测试代码142的各种组件。测试代码142可以锻炼应用程序代码140来揭示应用程序代码140中的任何缺陷并确保应用程序代码140如预期的那样执行。
一些实施方式可以具有可从应用程序代码140创建各种测试代码元素的测试代码生成器144。例如,测试代码生成器144可以创建可使得应用程序代码内的命令或函数得到锻炼的单位测试。单位测试可以锻炼应用程序代码140的一小部分,如短函数、子例程、或单独的命令。
在一些实施方式中,测试代码生成器144可以创建可由程序员修改或改变以全面地锻炼应用程序代码的该部分的测试代码的各部分。在这样的实施方式中,测试代码生成器144可以创建诸如单位测试等测试的外壳,并且程序员可以执行一些编辑或编写测试代码的一小部分来完成测试。
测试代码142可包括可以测试应用程序140的一被隔离的部分的单位测试。在大型应用程序中,可以创建数百或甚至数千单位测试来测试应用程序的各部分。单位测试可以确保应用程序代码140的各小部分如预期的那样执行,并可在单个类内操作并且无需外部组件。
测试代码142可包括集成测试,其中应用程序代码140内的各软件模块或组件可以作为一个组来组合并测试。集成测试可以在单个测试中测试应用程序代码140的大型子集。在许多情况下,可以创建多个集成测试来测试不同的使用场景或测试例。集成测试可包括测试进程之间以及其他事件中的通信。
测试代码142还可包括***测试,这可将应用程序代码140作为单个单位来进行测试。***测试可以在各种使用场景中在高级别上锻炼应用程序代码140。许多这样的测试可以将应用程序代码140当作‘黑盒’,提供输入并期待特定输出。***测试可包括性能测试、功能测试、错误处理测试、负载测试、压力测试、可靠性测试、恢复和故障转移(failover)测试、以及许多其他类型的测试。
可以剪裁测试代码142以适应应用程序代码140的类型。一个示例可以是在飞机中的航空计算机中操作的软件。这样的软件可以在人类生命处于危险之中时操作,测试代码142可以被非常详细并严格地制作。在另一示例中,简单的游戏应用程序可具有游戏制造商可能希望在发货之前维持的特定质量标准。在又一示例中,出于安全性起见,可以严格地测试处理健康记录或其他个人信息的软件应用程序。
测试代码评估器146可以使用测试策略148分析测试代码142以确定测试代码142的质量评估。测试代码评估器146可以分析测试代码142来寻找断言、断言内的描述、秩复杂度、依赖关系、以及其他因素。从这些和其他分析中,可为各单独的测试以及为整个测试代码142创建质量测试代码健康度量。
质量测试代码健康度量可以与测试代码142内的各单独的测试中的每个测试一起显示。健康度量可被用来指示哪些测试满足以及哪些测试不满足测试策略148中定义的标准。可以对不满足这些标准的那些测试加上标志以进行改进或进一步开发。
测试策略148可以定义可在应用程序代码140的开发期间使用的最佳实践或测试标准。测试策略148可以定义由测试代码评估器146应用的一些规则来确定测试代码142是否符合最佳实践。
在一些实施方式中,测试策略148可包括针对各测试标准的若干组规则。这些规则可由程序员选择,使得程序员可以集中于测试代码142的特定方面。例如,程序员可以选择断言相关测试并可以不选择其他度量。在这种情况下,测试代码评估器146可以分析测试代码142以寻找适用于断言的测试的子集,而不分析其他类型的潜在问题。
可为所开发的不同类型的应用程序软件并为编程团队或公司的内部管理来创建一组测试策略148。测试策略148可以定义测试代码评估器146可用来验证遵从性的测试代码的各种特性。在一些情况下,不同类型的应用程序代码140可以确定测试策略148。
应用程序代码评估器152可以用与测试代码142类似的方式来评估应用程序代码140。代码设计策略154可以描述应用程序代码评估器152对应用程序代码140所执行的分析。
应用程序代码评估器152可以检查应用程序代码140来确定与代码设计策略154的遵从性。代码设计策略154可以包括与如何构造应用程序代码140相关的策略,如定义模块性策略、注释和文档编制策略、函数的输入和输出参数的检查、以及许多其他类型的分析。
在一些实施方式中,测试代码评估器146和应用程序代码评估器152可以是同一应用程序或可执行代码,但可以使用测试策略148和代码设计策略154来对测试代码142和应用程序代码140分别执行不同类型的检查和分析。
测试代码评估器146和应用程序代码评估器152的输出可被组合以产生用于测试结果的质量度量。例如,可以通过分析应用程序代码140中的函数来确定一组测试代码的完成度或覆盖度,并将所述函数与测试代码142进行匹配来确定是否所有应用程序函数都具有匹配的测试例程。
在另一示例中,测试代码142所产生的测试结果可以由测试代码142的质量来评定资格。例如,具有差质量测试代码健康度量的测试代码可不利地影响应用程序代码的总体评估。在该示例中,对应用程序代码140执行的很差地构造的测试代码142可生成测试结果。测试结果可以显示在质量测试代码健康度量的旁边,它可指示测试代码142不满足测试策略148中定义的基本标准。这样的指示可以否定测试结果。相反,肯定的质量测试代码健康度量可以向测试结果给出高可信性。
测试代码执行器150可以对应用程序代码140执行测试代码142以生成测试结果。一些实施方式可以按包括可收集测试执行期间的各种监视信息的各种调试特征的方式来执行测试代码。调试特征可在应用程序开发***128内被打开和关闭,并且可以在应用程序开发***128外部执行应用程序时存在或不存在。
在一些实施方式中,测试结果可以存储在通过网络154到达的隐错数据库158中并可以位于远程服务器156上。隐错数据库158可以捕捉得自测试代码执行器150的任何故障或问题。隐错数据库158可以具有用于标识应用程序代码140内的隐错并跟踪对隐错的修复的机制。这样的***可被用来管理应用程序代码140的代码开发项目,并且在管理开发应用程序代码140的不同部分上工作的程序员团队时是有用的。
应用程序开发***128可包括可被用来显示质量测试代码健康度量连同其他质量度量的用户界面136。在本说明书中稍后呈现的实施方式500中示出了一个示例。
图2是实施方式200的示图,示出了用于分析测试代码和应用程序代码以生成质量测试健康代码度量的顺序。实施方式200是可用来分析应用程序代码和测试代码、随后对这两者一起分析并最后分析测试结果以确定测试代码的质量测量的方法的总体概览。
测试代码202和应用程序代码204可在应用程序代码开发期间的任何点处测试。在许多情况下,实施方式200的过程可以在应用程序代码204的开发期间执行数百或数千次。在非常复杂的应用程序中,实施方式200的过程可以消耗很长的时间并且可以例如在代码开发一天之后的每天晚上执行。
在许多情况下,实施方式200的过程可以对应用程序的一小部分执行,如可以由单个程序员或一小队程序员开发的部分。在这种情况下,实施方式200的过程可以相对快速地执行,并且可被用来在周期性的基础上生成质量测试代码健康度量以帮助开发人员创建测试代码来测试应用程序代码。
可以使用采用代码设计策略208的代码设计分析工具206来分析应用程序代码204。该分析可以检查应用程序代码204与各设计实践的遵从性,以使得该代码可以是可维护的、可读的,并可以遵循各功能设计标准。该分析的结果可以是一组代码遵从性度量210。
可使用测试策略214的测试代码分析工具212可以类似地分析测试代码202。测试策略214可以分析测试代码202与测试代码标准的遵从性,测试代码标准可以与代码设计策略208中定义的代码设计标准不同。
具体而言,测试代码分析工具212可以评估测试代码202的断言和与断言相关联的描述。另外,可以分析测试代码的秩复杂度和额外依赖关系。
测试代码分析工具212可以将测试代码202作为源代码或已编译代码来评估。在一些情况下,已编译代码可以是中间代码。
在框216,可以使用测试代码和应用程序代码来执行附加分析。这一分析还可使用测试策略214并可以标识应用程序代码204中的特征以确定测试代码202的各部分是否覆盖这些特征。框216的分析的输出是测试代码遵从性。
测试执行器202可以对应用程序代码204执行测试代码202以产生测试结果222。可以执行结果分析224并使用测试代码遵从性218生成质量测试代码健康度量226。
实施方式200的操作仅仅是可生成质量测试代码健康度量的一种方法。质量测试代码健康度量可由测试代码分析212生成并被反映在测试代码遵从性218中。在一些实施方式中,这些附加质量测试代码健康度量可被捕捉、存储并显示给用户。在其他实施方式中,可以生成一组总体度量,如质量测试代码健康度量226中所反映的。
图3是示出用于分析测试代码的方法的实施方式300的流程图。实施方式300是可由诸如实施方式100的测试代码评估器146等测试代码评估器执行的方法的示例。
其他实施方式可以使用不同的顺序、附加或更少的步骤以及不同的名称或术语来实现类似的功能。在一些实施方式中,各种操作或一组操作可以按同步或异步的方式与其他操作并行执行。在此选择的这些步骤被挑选来以简化的形式示出操作的一些原理。
实施方式300是可对测试代码执行的分析的更详细的图示。实施方式300的分析类似于实施方式200中示出的分析,但可按不同的顺序示出。
在框302,可开发应用程序代码。
在框304,可开发测试代码以对应用程序代码执行各种测试。测试代码可包括单位测试、集成测试、***测试以及任何其他类型的测试。在框306,可分析每一测试。
在框308,分析测试代码内的每一输入、输出以及可变参数。
在框310,如果没有对该参数的断言,则在框312,将该测试标记为缺少断言。
在框316,检查断言的描述。在框318,如果该描述不包含描述性文本,则在框320,将该测试标记为缺少描述性文本。可以通过检查测试来确定断言描述是否与可作为默认描述的自动地生成的断言描述不同来简单地确定该描述性文本。这样的改变可以指示人类程序员可能已经修改了该描述。
在一些实施方式中,可以通过确定特定关键词存在、该文本至少包含最少数量的词语、该描述与测试中的任何其他描述不同、或其他组织准则来验证该描述性文本.
在框324,可以评估测试的秩复杂度。秩复杂度可以是通过测试的源代码的独立路径的数量的测量。具有高秩复杂度的测试可以指示比具有低秩复杂度的测试更高的复杂度并且可能更低的可靠性。较高的秩复杂度可以指示测试代码可能更难以维护并且对外部改变较没有回复力。
在框326,可以评估测试的依赖关系。具有高数量的依赖关系的测试可以比具有较少数量的依赖关系的测试更不可靠。
在框328,可以查询隐错数据库以确定当前测试所检测到的故障。隐错数据库可以返回检测到的故障的总数以及这些故障是否被确定为应用程序代码或测试代码中的问题。一致地返回应用程序代码中的故障以及很少或没有返回测试代码中的故障的测试可具有高置信度。
在框330,可创建测试的质量测试代码健康度量。可通过一组规则、一种算法、或其他机制来评估断言的存在、断言的质量、秩复杂度、依赖关系和使用历史以确定质量测试代码健康度量。在许多情况下,质量测试代码健康度量可以是简单的“高”、“中”或“低”置信度。其他实施方式可以使用具有更多或更少值的范围。
在框322,质量测试代码健康度量可以在用户界面中显示在测试的旁边。质量测试代码健康度量可以向开发人员给出可被用来标识可能不合标准的测试的简单指示符。
图4是示出用于根据应用程序代码来分析测试代码的方法的实施方式400的流程图。实施方式400是可由测试代码评估器,诸如实施方式100的测试代码评估器146,执行的方法的示例。
其他实施方式可以使用不同的顺序、附加或更少的步骤以及不同的名称或术语来实现类似的功能。在一些实施方式中,各种操作或一组操作可以按同步或异步的方式与其他操作并行执行。在此选择的这些步骤被挑选来以简化的形式示出操作的一些原理。
实施方式400示出可以执行以基于应用程序代码(除测试代码之外)来确定质量度量的一些分析。在一些情况下,实施方式400可以是实施方式300的继续。
在框402,可分析应用程序代码。在框404,可标识应用程序可扔出的所有异常,并且在框406,可将所扔出的异常与测试代码进行匹配,并且可以记录任何未测试的异常。
在框408,可标识函数的所有参数并标识这些函数的所有边界条件。在框410,可将这些参数和边界条件与测试代码进行匹配并可记录任何未测试的参数或边界条件。
在框412,可以标识应用程序代码中的所有可调用函数。在框414,单独地分析这些函数。在框416,如果不存在对该函数的测试,则在框418,将该函数标记为未测试的。如果在框418存在测试并且在框420没有断言返回值,则在框422,将该函数标记为缺少断言。如果在框416存在测试并且在框420断言了返回值,则该过程可返回框414以处理另一函数。
在框424,标识应用程序代码的具有高秩复杂度的各部分。在框426,检查测试代码以确定测试代码是否锻炼应用程序代码中的该部分中的每一独立路径。高秩复杂度应用程序代码的测试代码可以使用比具有较低秩复杂度的应用程序代码的其他类似大小的块更彻底的测试。
在框428,可标识应用程序代码的依赖关系。在框430,对于应用程序代码的各高依赖关系部分,可以确定这些区域的测试覆盖度。
到现在为止在实施方式400中执行的应用程序代码和测试代码的所有分析可被用来确定质量测试覆盖度度量。质量测试覆盖度度量可被显示在应用程序代码的该部分的旁边,使得程序员可以快速地标识应用程序代码的可从附加测试代码开发中获益的这些区域。
在框434,可将质量测试覆盖度度量与来自实施方式300的质量测试代码健康度量相组合以生成质量测试度量。质量测试度量可以表示应用程序的测试状况(regime)的总体‘健康’。
在框436,可以显示各测试度量。
图5是示出用户界面的示例实施方式500的示图。实施方式500仅仅是可在用户界面中如何显示质量度量的一个示例。
实施方式500是可合并编辑器、编译器以及测试执行器的应用程序开发***的示例。实施方式500可具有程序员可通过其编写应用程序代码、创建测试代码并对该应用程序代码执行该测试代码以生成测试结果的图形用户界面。测试结果可被浏览、查看、保存并用来标识应用程序代码或测试代码中的问题区域。可以使用应用程序开发***内的各位置中的图标来显示在本说明书中讨论的质量度量。
窗口502具有标题504和若干窗口。编辑窗口506可包含代码并可被用来编写并编辑应用程序代码和测试代码。在实施方式500的示例中,可以选择一组选项卡508之一来打开“Classl.cs(类1)”或“TestClassl.cs(测试类1)”。
测试视图窗口510可以显示各种测试代码元素。与测试代码元素一起的是可反映测试代码的分析结果的质量测试代码度量图标512。在实施方式500的示例中,“SubtractTest(减去测试)”可以与指示‘良好’状况的暗或绿图标一起示出。“AddTest(添加测试)”可以与指示‘差’状况的‘x’或红图标一起示出。“ItsJustMathTest(仅是数学测试)”可与指示中间状况的中等或黄图标一起示出。“ItsJustMathTest”可以是包含“SubtractTest”和“AddTest”的类,并且“ItsJustMathTest”的图标可以反映其中包含的测试的总体状况。
测试结果窗口514可以在对应用程序代码执行测试代码时示出应用程序代码的测试结果。
测试结果窗口514可包含框516中的应用程序代码的分层结构视图连同测试覆盖度518。测试覆盖度518可以反映在对应用程序代码执行测试代码时该测试代码锻炼了应用程序代码的多少块。
测试质量图标520可以反映对应用程序代码的该部分执行的每一组测试的质量测试代码度量。在一些情况下,测试质量图标520可以表示对应用程序代码执行的若干不同测试代码组件的聚集。
测试故障522可以表示在测试代码的最后一次运行中遇到的故障的数量。
应用程序代码质量度量524可以是将测试结果522、测试覆盖度518以及测试质量520相组合以表示应用程序代码的当前状况的质量应用程序代码健康度量。
以上对本主题的描述是出于说明和描述的目的而提出的。它不旨在穷举本主题或将本主题限于所公开的精确形式,且鉴于以上教导其他修改和变型都是可能的。选择并描述实施方式来最好地解释本发明的原理及其实践应用,从而使本领域的其他技术人员能够在各种实施方式和各种适于所构想的特定用途的修改中最好地利用本发明的技术。所附权利要求书旨在包括除受现有技术所限的范围之外的其他替换实施方式。

Claims (20)

1.一种可在计算机处理器上操作的应用程序开发***,所述应用程序开发***包括:
对应用程序代码执行测试代码以生成测试结果的测试代码执行***,所述测试代码具有多个测试代码组件,所述测试代码组件中的每一个可单独执行;
确定所述测试代码组件中的每一个的质量测试代码健康度量的测试代码评估器;以及
将所述测试代码组件与所述质量测试代码健康度量的指示符一起显示在其上的用户界面。
2.如权利要求1所述的***,其特征在于,还包括:
能够编辑所述测试代码和所述应用程序代码的代码编辑器。
3.如权利要求2所述的***,其特征在于,还包括:
检查所述应用程序代码并生成所述测试代码组件的至少一部分的自动测试代码生成器。
4.如权利要求3所述的***,其特征在于,所述测试代码评估器评估所述测试代码中定义的断言。
5.如权利要求4所述的***,其特征在于,所述断言通过一种方法来评估,所述方法包括:
确定第一测试代码组件所覆盖的应用程序代码块;
标识来自所述块的每一输出以确定输出的数量;
检查所述第一测试代码组件以确定与所述输出相对应的数量的断言;以及
使用所述数量的断言和所述数量的输出来确定质量测试代码健康度量。
6.如权利要求1所述的***,其特征在于,所述测试代码评估器检查所述测试代码的依赖关系栈并至少部分地从所述依赖关系栈中生成质量测试代码健康度量。
7.如权利要求1所述的***,其特征在于,所述测试代码评估器确定第一测试代码组件的秩复杂度并至少部分地使用所述秩复杂度来生成所述第一测试代码组件的质量测试代码健康度量。
8.如权利要求1所述的***,其特征在于,所述测试代码评估器还确定包括所述测试代码健康度量的测试结果度量。
9.如权利要求8所述的***,其特征在于,所述测试结果度量是从测试覆盖度和所述测试代码健康度量来确定的。
10.如权利要求9所述的***,其特征在于,所述测试覆盖度包括来自所述应用程序代码的输出的断言。
11.如权利要求10所述的***,其特征在于,所述测试覆盖度包括来自所述应用程序代码的所扔出的异常的异常处理。
12.如权利要求11所述的***,其特征在于,所述测试覆盖度与包括同所述测试结果度量相对应的颜色的指示符一起显示在所述用户界面上。
13.一种在计算机处理器上执行的方法,所述方法包括:
接收要测试的应用程序代码;
接收被设计来测试所述应用程序代码的测试代码,所述测试代码包括所述应用程序代码的单位测试;
执行所述测试代码的自动评估以确定所述单位测试中的每一个的质量测试代码健康度量;以及
显示所述单位测试中的每一个的所述质量测试代码健康度量。
14.如权利要求13所述的方法,其特征在于,还包括:
基于所述质量测试代码健康度量中的每一个来生成总体测试代码健康度量。
15.如权利要求13所述的方法,其特征在于,还包括:
对所述应用程序代码执行所述测试代码以生成测试结果;以及
显示所述测试结果连同所述质量测试代码健康度量。
16.如权利要求15所述的方法,其特征在于,所述测试代码还包括集成测试。
17.如权利要求16所述的方法,其特征在于,所述测试代码还包括***测试。
18.一种可在计算机处理器上操作的应用程序开发***,所述应用程序开发***包括:
可通过其显示源代码的编辑器;
用于将所述源代码编译成已编译代码的编译器;
在所述计算机处理器上执行所述已编译代码的执行环境;
对应用程序代码执行测试代码以生成测试结果的测试代码执行***,所述测试代码具有多个测试代码组件,所述测试代码组件中的每一个可单独执行,所述测试代码组件包括单位测试;
通过分析所述测试代码组件来确定所述测试代码组件中的每一个的质量测试代码健康度量的测试代码评估器;以及
所述测试代码组件可与所述质量测试代码健康度量的指示符一起显示在其上的用户界面。
19.如权利要求18所述的***,其特征在于,所述测试代码评估器分析所述测试代码组件中的至少一个的源代码版本。
20.如权利要求19所述的***,其特征在于,所述测试代码评估器分析所述测试代码组件中的至少一个的已编译代码版本。
CN201110037410.XA 2010-02-08 2011-01-31 测试代码质量评估 Active CN102147764B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/701,628 US8561021B2 (en) 2010-02-08 2010-02-08 Test code qualitative evaluation
US12/701,628 2010-02-08

Publications (2)

Publication Number Publication Date
CN102147764A true CN102147764A (zh) 2011-08-10
CN102147764B CN102147764B (zh) 2016-06-22

Family

ID=44354652

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110037410.XA Active CN102147764B (zh) 2010-02-08 2011-01-31 测试代码质量评估

Country Status (2)

Country Link
US (1) US8561021B2 (zh)
CN (1) CN102147764B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104956372A (zh) * 2013-02-28 2015-09-30 惠普发展公司,有限责任合伙企业 使用运行时和静态代码分析来确定动态安全扫描的覆盖率
CN106598852A (zh) * 2016-12-05 2017-04-26 广州唯品会信息科技有限公司 软件测试方法及***
CN109976999A (zh) * 2017-12-28 2019-07-05 北京京东尚科信息技术有限公司 测试用例覆盖率的度量方法和度量装置
CN110309054A (zh) * 2019-05-22 2019-10-08 平安科技(深圳)有限公司 代码有效性测试方法、计算设备及存储介质
CN110858141A (zh) * 2018-08-23 2020-03-03 西门子股份公司 分层架构软件中代码评估方法、装置及存储介质
CN112182572A (zh) * 2020-08-25 2021-01-05 通号城市轨道交通技术有限公司 一种城轨联锁软件代码静态度量方法及***
CN113094252A (zh) * 2019-12-23 2021-07-09 腾讯科技(深圳)有限公司 测试用例生成方法、装置、计算机设备及存储介质

Families Citing this family (44)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9015671B2 (en) * 2006-12-27 2015-04-21 The Mathworks, Inc. Integrating program construction
EP2381366A1 (en) * 2010-04-20 2011-10-26 Siemens Aktiengesellschaft Method for estimating testing efforts for software unit testing
DE102011006215A1 (de) * 2010-11-09 2012-05-10 Siemens Aktiengesellschaft Verfahren und Vorrichtung zum Ermitteln einer Qualitätsbewertung eines Softwarecodes mit Ermittlung der Bewertungsabdeckung
JP5767471B2 (ja) * 2010-12-24 2015-08-19 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation テストの網羅性を評価する装置及び方法
CN102955736B (zh) * 2011-08-31 2015-03-04 百度在线网络技术(北京)有限公司 软件产品质量预警方法和***
JP5785474B2 (ja) * 2011-10-27 2015-09-30 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation プログラムのデバッグ方法、デバッグ装置、およびデバッグ支援gui
US20130132933A1 (en) * 2011-11-17 2013-05-23 Microsoft Corporation Automated compliance testing during application development
CN102819492B (zh) * 2012-08-02 2015-03-04 中山大学 一种基于Android的关键字驱动自动化测试框架
US9015654B2 (en) * 2012-08-13 2015-04-21 Bitbar Technologies Oy System for providing test environments for executing and analysing test routines
US9208062B1 (en) 2012-08-14 2015-12-08 Amazon Technologies, Inc. Promotion determination based on aggregated code coverage metrics
CN103793315B (zh) * 2012-10-29 2018-12-21 Sap欧洲公司 监视和改善软件开发质量方法、***和计算机可读介质
US9098631B2 (en) * 2013-01-07 2015-08-04 Appvance Inc. Methods, devices, systems, and non-transitory machine-readable medium for performing an automated calibration for testing of a computer software application
US8959486B2 (en) * 2013-01-09 2015-02-17 International Business Machines Corporation Automatic regression testing based on cyclomatic complexity
US9052980B2 (en) * 2013-02-20 2015-06-09 Bmc Software, Inc. Exception based quality assessment
CN105009056A (zh) * 2013-02-27 2015-10-28 惠普发展公司,有限责任合伙企业 确定图形用户界面控制实例的事件覆盖度量和输入覆盖度量
US9703679B2 (en) * 2013-03-14 2017-07-11 International Business Machines Corporation Probationary software tests
US10360140B2 (en) 2013-11-27 2019-07-23 Entit Software Llc Production sampling for determining code coverage
US20150186253A1 (en) * 2013-12-30 2015-07-02 Microsoft Corporation Streamlined performance testing for developers
WO2015199656A1 (en) * 2014-06-24 2015-12-30 Hewlett-Packard Development Company, L.P. Determining code complexity scores
WO2016048395A1 (en) * 2014-09-26 2016-03-31 Hewlett Packard Enterprise Development Lp Determining test application effectiveness
US9823904B2 (en) * 2014-12-18 2017-11-21 International Business Machines Corporation Managed assertions in an integrated development environment
US9703552B2 (en) * 2014-12-18 2017-07-11 International Business Machines Corporation Assertions based on recently changed code
US9747082B2 (en) 2014-12-18 2017-08-29 International Business Machines Corporation Optimizing program performance with assertion management
US9678855B2 (en) 2014-12-30 2017-06-13 International Business Machines Corporation Managing assertions while compiling and debugging source code
US10733520B2 (en) 2015-05-13 2020-08-04 Microsoft Technology Licensing, Llc Making a prediction regarding development of a software product
CN105446860B (zh) * 2015-11-11 2017-12-15 上海欣方智能***有限公司 基于异步并发机制的压力测试***和测试方法
CN105446862B (zh) * 2015-11-20 2019-04-23 深圳市迪菲特科技股份有限公司 一种存储设备的io性能的测试***及方法
CN105446880A (zh) * 2015-11-23 2016-03-30 北京思德泰科科技发展有限公司 一种基于Linux图形界面的互联网彩票自助终端的自动测试方法
US20170300318A1 (en) * 2016-04-18 2017-10-19 Accenture Global Solutions Limited Identifying low-quality code
US10078578B2 (en) * 2016-05-16 2018-09-18 International Business Machines Corporation Analytically selecting which tests are to be executed in a continuous delivery process
WO2018085289A1 (en) * 2016-11-02 2018-05-11 Chef Software, Inc. Compliance enforcement tool for computing environments
CN106528427A (zh) * 2016-11-24 2017-03-22 上海携程商务有限公司 代码质量检查方法和***
CN107480070A (zh) * 2017-08-24 2017-12-15 中国银行股份有限公司 一种测试结果统计分析方法及装置
US10671519B2 (en) * 2018-04-27 2020-06-02 Microsoft Technology Licensing, Llc Unit testing for changes to version control
US10545855B1 (en) * 2018-09-28 2020-01-28 Microsoft Technology Licensing, Llc Software testing assurance through inconsistent treatment detection
CN109388577A (zh) * 2018-10-31 2019-02-26 江苏电力信息技术有限公司 一种以质量检测数值方式驱动的软件项目管理方法
US11422926B2 (en) * 2019-04-16 2022-08-23 Red Hat, Inc. Managing test coverage for a software application
US10769058B1 (en) * 2019-05-30 2020-09-08 Capital One Services, Llc Generic serverless performance testing framework
US11106460B2 (en) 2019-09-03 2021-08-31 Electronic Arts Inc. Software change tracking and analysis
US11144315B2 (en) 2019-09-06 2021-10-12 Roblox Corporation Determining quality of an electronic game based on developer engagement metrics
US11494291B2 (en) 2019-12-20 2022-11-08 UiPath, Inc. System and computer-implemented method for analyzing test automation workflow of robotic process automation (RPA)
US11481311B2 (en) * 2020-06-10 2022-10-25 Sap Se Automatic evaluation of test code quality
US11785015B2 (en) 2021-02-24 2023-10-10 Bank Of America Corporation Information security system for detecting unauthorized access requests
CN113190448B (zh) * 2021-05-06 2022-11-04 网易(杭州)网络有限公司 测试代码更新方法及装置、电子设备、存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050166094A1 (en) * 2003-11-04 2005-07-28 Blackwell Barry M. Testing tool comprising an automated multidimensional traceability matrix for implementing and validating complex software systems
US20070180429A1 (en) * 2006-01-30 2007-08-02 Microsoft Corporation Context based code analysis
CN101089826A (zh) * 2006-06-12 2007-12-19 国际商业机器公司 创建容错和自适应图形用户接口测试自动化的方法和***

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5778169A (en) * 1995-08-07 1998-07-07 Synopsys, Inc. Computer system having improved regression testing
US6395534B1 (en) * 1999-03-31 2002-05-28 Council Of Scientific And Industrial Research White rot-lignin-modifying fungus Flavodon flavus and a process for removing dye from dye containing water or soil using the fungus
US7801158B2 (en) * 2000-10-16 2010-09-21 Verizon Communications Inc. Congestion and thru-put visibility and isolation
US7003766B1 (en) * 2001-06-19 2006-02-21 At&T Corp. Suite of metrics for software quality assurance and product development
US6907378B2 (en) * 2002-09-26 2005-06-14 Agilent Technologies, Inc. Empirical data based test optimization method
US8117591B1 (en) * 2005-01-07 2012-02-14 Interactive TKO, Inc. Graphical model for test case viewing, editing, and reporting
US7603660B2 (en) * 2005-06-01 2009-10-13 Microsoft Corporation Code coverage test selection
US7801912B2 (en) * 2005-12-29 2010-09-21 Amazon Technologies, Inc. Method and apparatus for a searchable data service
US8448144B2 (en) * 2008-04-02 2013-05-21 International Business Machines Corporation Testing software applications with progress tracking
US20090265694A1 (en) * 2008-04-18 2009-10-22 International Business Machines Corporation Method and system for test failure analysis prioritization for software code testing in automated test execution
US20100004947A1 (en) * 2008-07-01 2010-01-07 Michael Nadeau System and Method for Providing Health Management Services to a Population of Members
US8090567B1 (en) * 2009-02-26 2012-01-03 Xilinx, Inc. Self-disabling simulation models using limits on assertions
US8375357B2 (en) * 2009-05-18 2013-02-12 National Instruments Corporation Graphical data flow web application repository with version control

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050166094A1 (en) * 2003-11-04 2005-07-28 Blackwell Barry M. Testing tool comprising an automated multidimensional traceability matrix for implementing and validating complex software systems
US20070180429A1 (en) * 2006-01-30 2007-08-02 Microsoft Corporation Context based code analysis
CN101089826A (zh) * 2006-06-12 2007-12-19 国际商业机器公司 创建容错和自适应图形用户接口测试自动化的方法和***

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104956372A (zh) * 2013-02-28 2015-09-30 惠普发展公司,有限责任合伙企业 使用运行时和静态代码分析来确定动态安全扫描的覆盖率
US10699017B2 (en) 2013-02-28 2020-06-30 Micro Focus Llc Determining coverage of dynamic security scans using runtime and static code analyses
CN106598852A (zh) * 2016-12-05 2017-04-26 广州唯品会信息科技有限公司 软件测试方法及***
CN109976999A (zh) * 2017-12-28 2019-07-05 北京京东尚科信息技术有限公司 测试用例覆盖率的度量方法和度量装置
CN109976999B (zh) * 2017-12-28 2022-09-06 北京京东尚科信息技术有限公司 测试用例覆盖率的度量方法和度量装置
CN110858141A (zh) * 2018-08-23 2020-03-03 西门子股份公司 分层架构软件中代码评估方法、装置及存储介质
CN110309054A (zh) * 2019-05-22 2019-10-08 平安科技(深圳)有限公司 代码有效性测试方法、计算设备及存储介质
WO2020232906A1 (zh) * 2019-05-22 2020-11-26 平安科技(深圳)有限公司 代码有效性测试方法、计算设备及存储介质
CN110309054B (zh) * 2019-05-22 2021-08-31 平安科技(深圳)有限公司 代码有效性测试方法、计算设备及存储介质
CN113094252A (zh) * 2019-12-23 2021-07-09 腾讯科技(深圳)有限公司 测试用例生成方法、装置、计算机设备及存储介质
CN113094252B (zh) * 2019-12-23 2023-09-29 腾讯科技(深圳)有限公司 测试用例生成方法、装置、计算机设备及存储介质
CN112182572A (zh) * 2020-08-25 2021-01-05 通号城市轨道交通技术有限公司 一种城轨联锁软件代码静态度量方法及***

Also Published As

Publication number Publication date
US8561021B2 (en) 2013-10-15
CN102147764B (zh) 2016-06-22
US20110197176A1 (en) 2011-08-11

Similar Documents

Publication Publication Date Title
CN102147764B (zh) 测试代码质量评估
Nair et al. An extended systematic literature review on provision of evidence for safety certification
CN101802792B (zh) 用于测试航空器上的***的操作软件的有效性的自动脚本生成方法及用于实现该方法的设备
Ahamed Studying the feasibility and importance of software testing: An Analysis
Bierig et al. Essentials of Software Testing
Abdeen et al. An approach for performance requirements verification and test environments generation
Nelson et al. What makes a code review trustworthy?
Meyer Dependable software
Uludağ et al. Integration of systems design and risk management through model‐based systems development
Scott et al. Testing existing software for safety-related applications. Revision 7.1
Denger et al. High quality statecharts through tailored, perspective-based inspections
Carvalho et al. Towards an embedded software component quality verification framework
Smith et al. State of the Practice for Lattice Boltzmann Method Software
KR20190136352A (ko) 소프트웨어 검사 장치 및 방법
Machado Fault model-based variability testing
Schuster Certification of software tools used in safety-critical software development
Guevara-Vega et al. Software Test Management to Improve Software Product Quality
Tahbildar et al. Teaching Automated Test Data Generation Tools for C, C++, and Java Programs
Canny et al. On the Importance of Supporting Multiple Stakeholders Points of View for the Testing of Interactive Systems
Richardson Improving Accessibility and Efficiency of Analytic Provenance Tools for Reverse Engineering
Hartwick Test planning
Feather et al. Planning for V&V of the Mars Science Laboratory rover software
Grable et al. Understanding the domain of the Army's CTS
Sljivo et al. Guided Integration of Formal Verification in Assurance Cases
Jones Evidence Management in Programatica

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150727

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20150727

Address after: Washington State

Applicant after: Micro soft technique license Co., Ltd

Address before: Washington State

Applicant before: Microsoft Corp.

C14 Grant of patent or utility model
GR01 Patent grant