CN113360410A - 一种c代码软件的测试方法与可读存储介质 - Google Patents
一种c代码软件的测试方法与可读存储介质 Download PDFInfo
- Publication number
- CN113360410A CN113360410A CN202110811194.3A CN202110811194A CN113360410A CN 113360410 A CN113360410 A CN 113360410A CN 202110811194 A CN202110811194 A CN 202110811194A CN 113360410 A CN113360410 A CN 113360410A
- Authority
- CN
- China
- Prior art keywords
- test
- function
- code
- application program
- test case
- 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
- 238000010998 test method Methods 0.000 title claims abstract description 14
- 238000012360 testing method Methods 0.000 claims abstract description 132
- 238000013515 script Methods 0.000 claims description 13
- 238000000034 method Methods 0.000 claims description 8
- 238000013101 initial test Methods 0.000 abstract description 3
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 230000006872 improvement Effects 0.000 description 4
- 230000008676 import Effects 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
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)
Abstract
本发明提供了一种C代码软件的测试方法,包括以下步骤:S1、编制应用程序,使用户通过操作界面完成测试;S2、将采用C代码的C文件导入到该应用程序;S3、通过该应用程序将导入的C文件进行解析,得到要测试的函数,实现测试对象的自动识别;S4、该应用程序自动识别测试函数所调用的子函数,以及测试函数内部所有的判定条件,并辅助测试用例的编制;S5、该应用程序将编制完的测试用例自动导入,转化为测试代码,自动运行测试,得出测试结果。本发明还提供了一种可读存储介质。本发明的有益效果是:实现了C代码的自动解析;实现了初版测试用例的自动生成,降低了因为覆盖率修改测试用例的频次。
Description
技术领域
本发明涉及测试方法,尤其涉及一种C代码软件的测试方法与可读存储介质。
背景技术
现有的C代码测试工具如google test和unittest,需要用户自己理解和解析C代码,编写测试用例,然后编写测试代码将测试用例的测试对象、测试输入以及期望结果转化并加载到google test 或unittest框架中,再进行编译运行。
目前的C代码测试存在以下问题:
1)C代码被测试函数逻辑复杂,调用子函数偏多,现有技术需要用户解析代码,耗费时间长,且容易产生被调用子函数识别遗漏未进行插桩处理,从而导致编译运行不通过,反复修改测试代码。
2)C代码测试有路径覆盖率的要求,需要编译运行完才能得到测试用例覆盖率,造成测试用例的反复修改和运行测试,以满足覆盖率的要求。
发明内容
为了解决现有技术中的问题,本发明提供了一种C代码软件的测试方法与可读存储介质。
本发明提供了一种C代码软件的测试方法,包括以下步骤:
S1、编制应用程序,使用户通过操作界面完成测试;
S2、将采用C代码的C文件导入到该应用程序;
S3、通过该应用程序将导入的C文件进行解析,得到要测试的函数,实现测试对象的自动识别;
S4、该应用程序自动识别测试函数所调用的子函数,以及测试函数内部所有的判定条件,并辅助测试用例的编制;
S5、该应用程序将编制完的测试用例自动导入,转化为测试代码,自动运行测试,得出测试结果。
作为本发明的进一步改进,所述测试方法还包括步骤S6、该应用程序自动将测试结果导出,并生成测试结果报告和覆盖率报告。
作为本发明的进一步改进,在步骤S3中,通过代码解析工具读取C文件和头文件,调用gcc编译器进行预编译并存储在字符串中,通过词法解析器和语法分析器,将字符串进行处理,生成标记节点并以节点构建抽象语法树,通过遍历语法树节点,识别函数名和变量名,然后生成函数调用图和流程图,并提取函数内部形参、函数使用的全局变量。
作为本发明的进一步改进,在步骤S4中,根据代码解析工具生成的函数调用关系、判定条件以及函数使用变量,测试用例生成脚本生成excel版本的测试用例。
作为本发明的进一步改进,生成的测试用例包含了变量声明、桩函数、被测函数、函数调用、测试输入、期望输出以及测试结果。
本发明还提供了一种可读存储介质,所述可读存储介质中存储有执行指令,所述执行指令被处理器执行时用于实现如上述中任一项所述的测试方法。
本发明的有益效果是:实现了C代码的自动解析;实现了初版测试用例的自动生成,降低了因为覆盖率修改测试用例的频次。
附图说明
图1是本发明一种C代码软件的测试方法的流程图。
图2是本发明一种C代码软件的测试方法的函数调用图。
具体实施方式
下面结合附图说明及具体实施方式对本发明作进一步说明。
如图1至图2所示,一种C代码软件的测试方法,包括以下过程:
1)编制应用程序,使用户通过操作界面完成测试。
2)应用程序将导入的C文件进行解析,得到要测试的函数,实现测试对象的自动识别。
3)应用程序自动识别测试函数所调用的子函数,以及测试函数内部所有判定条件,辅助测试用例的编制。
4)应用程序将编制完的测试用例自动导入,转化为测试代码,自动运行测试得出测试结果。
5)应用程序自动将测试结果导出并生成测试结果报告和覆盖率报告。
通过编写应用程序,实现从C代码导入到测试报告生成的全自动化,如图1所示。
为了实现C代码解析功能,开发了代码解析工具。解析工具读取C文件和头文件,调用gcc编译器进行预编译并存储在字符串中。通过词法解析器和语法分析器,将字符串进行处理,生成标记节点并以节点构建抽象语法树。通过遍历语法树节点,识别函数名和变量名,然后生成函数调用图、流程图,如图2所示,并提取函数内部形参、函数使用的全局变量。
为了实现测试用例自动生成,开发了测试用例生成脚本。根据解析工具生成的函数调用关系、判定条件以及函数使用变量,测试用例生成脚本生成excel版本的初版测试用例。通过判定条件的识别,可提升生成测试用例的路径覆盖率。生成的测试用例包含了变量声明、桩函数、被测函数、函数调用、测试输入、期望输出以及测试结果。用户可根据需要补充测试输入和修改桩函数代码,并重新导入修改后的测试用例。
为了实现测试代码自动生成和编译运行,开发了测试代码生成和编译工具。此工具处理excel版本测试用例,并生成测试代码。此测试代码通过调用google test的函数接口,与google test共同构成了可编译运行的工程。此工具可将整个工程进行编译生成exe可执行文件,并自动运行生成测试结果,最后以xml格式进行保存。
为了实现测试覆盖率功能和生成测试报告,开发了脚本。此脚本可调用gcov生成xml格式的测试覆盖率结果,测试覆盖率包括语句覆盖和分支覆盖。此脚本可将xml格式的测试执行结果和覆盖率结果转化为html格式的测试报告。
为了实现测试覆盖率功能和生成测试报告,开发了脚本。此脚本可调用gcov生成xml格式的测试覆盖率结果,测试覆盖率包括语句覆盖和分支覆盖。此脚本可将xml格式的测试执行结果和覆盖率结果转化为html格式的测试报告。
为了压缩测试工具的运行时间,对测试代码编译部分进行了优化。将其中的google test框架部分编译成lib文件,极大压缩了测试工具的运行时间。
为了实现自动化回归测试,在测试工具预留了接口。可通过批处理脚本在后台进行自动化大量测试用例的逐步导入和运行。结合windows的定时任务功能,可实现自动化回归测试。
本发明提供的一种C代码软件的测试方法,有以下特点:
1.通过C代码解析脚本,实现了C文件的自动解析,得出测试函数,调用子函数以及所有判定条件。
2.通过自动脚本,实现了测试用例的导入,并将其转化为测试代码,进行自动运行,自动生成测试报告和覆盖率报告。对显示屏的显示区进行严格划分,仪表主机无需分析和处理网联的具体显示内容,只需将网联显示区空出来,然后叠加网联显示内容。
与现有技术相比,本发明提供的一种C代码软件的测试方法,具有以下进步:
一、降低了用户编写测试用例的难度,降低了因为测试用例问题,测试反复编译运行的频次,实现自动生成测试用例模板,用户仅需修改测试数据和桩函数即可。
二、用户无需编写测试代码,点击操作按钮,自动得到测试结果报告和覆盖率报告,大大节省了测试时间。
三、可自动进行回归测试,节省了测试时间。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (6)
1.一种C代码软件的测试方法,其特征在于,包括以下步骤:
S1、编制应用程序,使用户通过操作界面完成测试;
S2、将采用C代码的C文件导入到该应用程序;
S3、通过该应用程序将导入的C文件进行解析,得到要测试的函数,实现测试对象的自动识别;
S4、该应用程序自动识别测试函数所调用的子函数,以及测试函数内部所有的判定条件,并辅助测试用例的编制;
S5、该应用程序将编制完的测试用例自动导入,转化为测试代码,自动运行测试,得出测试结果。
2.根据权利要求1所述的C代码软件的测试方法,其特征在于:所述测试方法还包括步骤S6、该应用程序自动将测试结果导出,并生成测试结果报告和覆盖率报告。
3.根据权利要求1所述的C代码软件的测试方法,其特征在于:在步骤S3中,通过代码解析工具读取C文件和头文件,调用gcc编译器进行预编译并存储在字符串中,通过词法解析器和语法分析器,将字符串进行处理,生成标记节点并以节点构建抽象语法树,通过遍历语法树节点,识别函数名和变量名,然后生成函数调用图和流程图,并提取函数内部形参、函数使用的全局变量。
4.根据权利要求3所述的C代码软件的测试方法,其特征在于:在步骤S4中,根据代码解析工具生成的函数调用关系、判定条件以及函数使用变量,测试用例生成脚本生成excel版本的测试用例。
5.根据权利要求4所述的C代码软件的测试方法,其特征在于:生成的测试用例包含了变量声明、桩函数、被测函数、函数调用、测试输入、期望输出以及测试结果。
6.一种可读存储介质,其特征在于:所述可读存储介质中存储有执行指令,所述执行指令被处理器执行时用于实现如权利要求1至5中任一项所述的测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110811194.3A CN113360410A (zh) | 2021-07-19 | 2021-07-19 | 一种c代码软件的测试方法与可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110811194.3A CN113360410A (zh) | 2021-07-19 | 2021-07-19 | 一种c代码软件的测试方法与可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113360410A true CN113360410A (zh) | 2021-09-07 |
Family
ID=77539761
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110811194.3A Pending CN113360410A (zh) | 2021-07-19 | 2021-07-19 | 一种c代码软件的测试方法与可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113360410A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114089960A (zh) * | 2021-10-11 | 2022-02-25 | 阿里云计算有限公司 | 对象处理方法以及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1983209A (zh) * | 2005-12-14 | 2007-06-20 | 中兴通讯股份有限公司 | 一种软件单元测试自动化系统及其方法 |
CN109299003A (zh) * | 2018-08-31 | 2019-02-01 | 苏州洞察云信息技术有限公司 | 一种面向复杂软件的全自动测试用例驱动生成系统 |
CN109580251A (zh) * | 2018-12-28 | 2019-04-05 | 上汽通用五菱汽车股份有限公司 | 一种基于nedc油耗工况的后桥效率测试方法 |
CN110543421A (zh) * | 2019-08-31 | 2019-12-06 | 华南理工大学 | 基于测试用例自动生成算法的单元测试自动执行方法 |
CN110928760A (zh) * | 2018-09-20 | 2020-03-27 | 杭州海康汽车技术有限公司 | 一种嵌入式系统中的单元测试方法与装置 |
-
2021
- 2021-07-19 CN CN202110811194.3A patent/CN113360410A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1983209A (zh) * | 2005-12-14 | 2007-06-20 | 中兴通讯股份有限公司 | 一种软件单元测试自动化系统及其方法 |
CN109299003A (zh) * | 2018-08-31 | 2019-02-01 | 苏州洞察云信息技术有限公司 | 一种面向复杂软件的全自动测试用例驱动生成系统 |
CN110928760A (zh) * | 2018-09-20 | 2020-03-27 | 杭州海康汽车技术有限公司 | 一种嵌入式系统中的单元测试方法与装置 |
CN109580251A (zh) * | 2018-12-28 | 2019-04-05 | 上汽通用五菱汽车股份有限公司 | 一种基于nedc油耗工况的后桥效率测试方法 |
CN110543421A (zh) * | 2019-08-31 | 2019-12-06 | 华南理工大学 | 基于测试用例自动生成算法的单元测试自动执行方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114089960A (zh) * | 2021-10-11 | 2022-02-25 | 阿里云计算有限公司 | 对象处理方法以及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11036614B1 (en) | Data control-oriented smart contract static analysis method and system | |
CN108628635B (zh) | 获取参数名和局部变量名的方法、装置、设备及存储介质 | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
US9164744B2 (en) | Method and system for program building | |
US20110271258A1 (en) | Software Development Tool | |
US20110271250A1 (en) | Software Development Tool | |
Cardoso et al. | Performance‐driven instrumentation and mapping strategies using the LARA aspect‐oriented programming approach | |
CN110673854A (zh) | Sas语言编译方法、装置、设备及可读存储介质 | |
CN111222141B (zh) | 一种汽车电控单元代码漏洞分析方法和系统 | |
CN109542446A (zh) | 一种编译系统、方法及编译器 | |
CN114036072B (zh) | 一种支持自动化检测程序缺陷的方法和系统 | |
CN110347588B (zh) | 软件验证方法、装置、计算机设备和存储介质 | |
Bertolotti et al. | On the granularity of linguistic reuse | |
CN113360410A (zh) | 一种c代码软件的测试方法与可读存储介质 | |
Cristiá et al. | A language for test case refinement in the Test Template Framework | |
Fritzson et al. | Metamodelica–a symbolic-numeric modelica language and comparison to julia | |
Porkoláb | Functional programming with C++ template metaprograms | |
Bedadala et al. | Generation of Call Graph for Java Higher Order Functions | |
CN113641594B (zh) | 跨端自动化测试方法以及相关装置 | |
CN113448874B (zh) | 一种单元测试脚本的生成方法及装置 | |
Aubert et al. | pymwp: A Static Analyzer Determining Polynomial Growth Bounds | |
Salari et al. | Automating test generation of industrial control software through a plc-to-python translation framework and pynguin | |
Zeiß | A refactoring tool for TTCN-3 | |
Krishna et al. | Codellm-Devkit: A Framework for Contextualizing Code LLMs with Program Analysis Insights | |
Gupta et al. | Optimal code compiling in C |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210907 |