cunit能做小学英语单元测试分析的静态分析吗

C开发中的单元测试(Cunit) - linux先生 - 博客园
C开发中的单元测试
最近在写C代码的过程中,感觉自己在重复一项必不可少的环节,就是自测代码,这使我想起以前在写JAVA时的Junit带来的快捷和方便,于是马上行动,经百度、谷歌几轮后,发现Cunit工具,看名字,就可猜到它与Junit同属一宗。网上的相关内容也都非常雷同,这里不再详述,有兴趣的话,可以直奔官方文档:
经过仔细观赏,要借用Cunit来提高自己的编码效率和质量,有必要先搞清它的几项要点:首先仔细观察下图:
可以看出Cunit也是有组织的,呵呵,主要分几个角色,Registry,Suite及Test方法。可以通过下面例子,体会到这种组织关系。按官方文档说明,使用Cunit的主要步骤有:1) Write functions for tests (and suite init/cleanup if necessary). 2) Initialize the test registry - CU_initialize_registry() 3) Add suites to the test registry - CU_add_suite() 4) Add tests to the suites - CU_add_test() 5) Run tests using an appropriate interface, e.g. CU_console_run_tests 6) Cleanup the test registry - CU_cleanup_registry
本人英文不咋地,就不献丑翻译了,直接用英文理解吧(要努力用英文).下面我们结合一个小实例,来体验一下Cunit的便利吧(学编程,最有效的方式还是自己动手)先编写一个具体两个简单功能的函数,然后写Testcase来测试它。文件主要有:1) strformat.h :字符串功能函数的接口文件2)strformat.c :字符串功能函数的实现3)testcase.c : 测试用例及Cunit运行环境4)makefile : 下面直奔代码:代码:strformat.h
1 /* strformat.h ---
* Filename: strformat.h
* Description: 字符串操作头文件
* Author: magc
* Maintainer:
* Created: 一
8月 20 22:57:19 2012 (+0800)
* Version:
* Last-Updated: 六
8月 25 10:31:30 2012 (+0800)
Update #: 15
* Keywords:
* Compatibility:
18 /* Commentary:
* 为的是体验Cunit而临时写的几项功能函数,没有多大实际意义,仅仅是为了写测试类
24 /* Change Log:
29 /* Code: */
31 #ifndef _strformat_h
32 #define _strformat_h
34 typedef char * string;
36 /*************************************************************************
37 *功能描述:返回字符串的长度
38 *参数列表:
39 *返回类型:
40 **************************************************************************/
41 int string_lenth(string word);
42 /*************************************************************************
43 *功能描述:返回字符串的大写形式
44 *参数列表:
45 *返回类型:
46 **************************************************************************/
47 string to_Upper(string word);
48 /*************************************************************************
49 *功能描述:连接字符串
50 *参数列表:
51 *返回类型:
52 **************************************************************************/
53 string add_str(string word1 ,string word2);
60 /* strformat.h ends here */
代码:strformat.c
1 /* strformat.c ---
* Filename: strformat.c
* Description: 字符串操作
* Author: magc
* Maintainer:
* Created: 一
8月 20 22:56:36 2012 (+0800)
* Version:
* Last-Updated: 六
8月 25 10:33:07 2012 (+0800)
Update #: 33
* Keywords:
* Compatibility:
18 /* Commentary:
* 此代码仅为体验Cunit而临时撰写。
24 /* Change Log:
29 /* Code: */
30 #include &assert.h&
31 #include &ctype.h&
32 #include &errno.h&
33 #include &limits.h&
34 #include &string.h&
35 #include &stdarg.h&
36 #include &stdlib.h&
37 #include &stdio.h&
38 #include "strformat.h"
41 /**************************************************************************
42 函数名称:字符串相加
43 功能描述:
44 输入参数:
46 **************************************************************************/
47 string add_str(string word1 ,string word2){
return (strcat(word1, word2));
51 /**************************************************************************
52 函数名称:将字符串转换成大写格式
53 功能描述:
54 输入参数:
56 **************************************************************************/
57 string to_Upper(string word){
for(i = 0;word[i] !='\0' ;i++){
if(word[i]&'z' && word[i]&'a'){
word[i] -= 32;
68 /**************************************************************************
69 函数名称:字符串长度
70 功能描述:
71 输入参数:
73 **************************************************************************/
74 int string_lenth(string word){
for(i = 0 ;word[i] != '\0';i++){
82 /* strformat.c ends here */
测试代码: testcase.c
1 /* testcase.c ---
* Filename: testcase.c
* Description: 测试实例
* Author: magc
* Maintainer:
* Created: 一
8月 20 23:08:53 2012 (+0800)
* Version:
* Last-Updated: 五
8月 24 16:09:40 2012 (+0800)
Update #: 135
* Keywords:
* Compatibility:
18 /* Commentary:
* 当前文件用来定义测试方法,suite,及registry信息,若测试方法有变化,只需要修改当前文件即可。
* 第一步:书写测试函数的代码,建议以"test_"为前缀。
* 第二步:将测试方法归类,即将相似功能的测试方法放到一个数组里,以便把它们指定给一个suite
* 第三步:创建suite,可按功能或模块,生成多个test suite,
* 第四步:书写测试方法的总调用方法,AddTests(),用来统一启动测试方法。
26 /* Change Log:
31 /* Code: */
32 #include &assert.h&
33 #include &ctype.h&
34 #include &errno.h&
35 #include &limits.h&
36 #include &string.h&
37 #include &stdarg.h&
38 #include &stdlib.h&
39 #include &stdio.h&
41 #include &CUnit/Basic.h&
42 #include &CUnit/Console.h&
43 #include &CUnit/CUnit.h&
44 #include &CUnit/TestDB.h&
45 #include "strformat.h"
47 /**************************************************************************
48 函数名称:测试string_lenth()方法
49 功能描述:
50 输入参数:
52 **************************************************************************/
53 void test_string_lenth(void){
string test = "Hello";
int len = string_lenth(test);
CU_ASSERT_EQUAL(len,5);
59 /**************************************************************************
60 函数名称:测试方法to_Upper()
61 功能描述:
62 输入参数:
64 **************************************************************************/
66 void test_to_Upper(void){
char test[] = "Hello";
CU_ASSERT_STRING_EQUAL(to_Upper(test),"HELLO");
72 /**************************************************************************
73 函数名称:测试方法 add_str()
74 功能描述:
75 输入参数:
77 **************************************************************************/
78 void test_add_str(void){
char test1[] = "Hello!";
char test2[] = "MGC";
CU_ASSERT_STRING_EQUAL(add_str(test1,test2),"Hello!MGC");
85 /**************************************************************************
86 数组名称:将多个测试方法打包成组,以供指定给一个Suite
87 功能描述:每个suite可以有一个或多个测试方法,以CU_TestInfo数组形式指定
88 **************************************************************************/
89 // CU_TestInfo是Cunit内置的一个结构体,它包括测试方法及描述信息
90 CU_TestInfo testcase[] = {
{"test_for_lenth:",test_string_lenth
{"test_for_add:",test_add_str
CU_TEST_INFO_NULL
96 CU_TestInfo testcase2[] = {
{"test for Upper :",test_to_Upper
CU_TEST_INFO_NULL
101 /**************************************************************************
102 函数名称:suite初始化过程
103 功能描述:
104 输入参数:
106 **************************************************************************/
107 int suite_success_init(void){
112 /**************************************************************************
113 函数名称:suite清理过程,以便恢复原状,使结果不影响到下次运行
114 功能描述:
115 输入参数:
117 **************************************************************************/
118 int suite_success_clean(void){
122 //定义suite数组,包括多个suite,每个suite又会包括若干个测试方法。
123 CU_SuiteInfo suites[] = {
{"testSuite1",suite_success_init,suite_success_clean,testcase},
{"testsuite2",suite_success_init,suite_success_clean,testcase2},
CU_SUITE_INFO_NULL
129 /**************************************************************************
130 函数名称:测试类的调用总接口
131 功能描述:
132 输入参数:
134 **************************************************************************/
135 void AddTests(){
assert(NULL != CU_get_registry());
assert(!CU_is_test_running());
if(CUE_SUCCESS != CU_register_suites(suites)){
exit(EXIT_FAILURE);
144 /*************************************************************************
145 *功能描述:运行测试入口
146 *参数列表:
147 *返回类型:
148 **************************************************************************/
150 int RunTest(){
if(CU_initialize_registry()){
fprintf(stderr, " Initialization of Test Registry failed. ");
exit(EXIT_FAILURE);
AddTests();
/**** Automated Mode *****************
CU_set_output_filename("TestMax");
CU_list_tests_to_file();
CU_automated_run_tests();
//************************************/
/***** Basice Mode *******************
CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();
//************************************/
/*****Console Mode ********************
CU_console_run_tests();
//************************************/
CU_cleanup_registry();
return CU_get_error();
178 /*************************************************************************
179 *功能描述:测试类主方法
180 *参数列表:
181 *返回类型:
182 **************************************************************************/
184 int main(int argc, char * argv[])
RunTest();
194 /* testcase.c ends here */
注:1)注意结合上面Cunit的组织结构图,理解Cunit中几个角色的关系(CU_TestInfo,CU_SuiteInfo各以数组的形式,将多个Test和Suite组织起来)。2)Cunit有几种运行模式,如automated,basic,console,有的是可以交互的,有的是没有交互,直接出结果的。
代码:makefile
IINC=-I/usr/local/include/CUnit
LIB=-L/usr/local/lib/
strformat.c testcase.c
gcc -o test $(INC) $(LIB)
$^ -lcunit -static
注:1)Cunit安装很简单,从官方地址上下载源代码后,在本机依次执行 ./configure make& sudo make install安装成功后相关的库及头文件安装到默认路径下。编译时添加选项:-I/usr/local/include/CUnit-L/usr/local/lib/就如makefile中的一样。
下面我们欣赏一下Cunit的常见几种运行模式1)Automated Mode先将testcase.c中156~159代码放开注释,此时便是以automated模式运行,此模块没有交互能力,直接生成XML格式的报表,先make,然后运行后,在当前目录下生成两个报表TestMax-Listing.xml和TestMax-Results.xml(前者是测试用例的列表,后者是测试用例的测试结果) ,但这两个文件是不能直接观看的,要查看这两个文件,需要使用如下xsl和dtd文件:CUnit-List.dtd和CUnit-List.xsl用于解析列表文件, CUnit-Run.dtd和CUnit-Run.xsl用于解析结果文件。这四个文件在CUnit包里面有提供,安装之后在$(PREFIX) /share/CUnit目录下,默认安装的话在/home/lirui/local/share/CUnit目录下。在查看结果之前,需要把这六 个文件:TestMax-Listing.xml, TestMax-Results.xml, CUnit-List.dtd, CUnit-List.xsl, CUnit-Run.dtd, CUnit-Run.xsl拷贝到一个目录下,然后用浏览器打开两个结果的xml文件就可以了。如下图所示:
2) Console Mode在testcase.c中将其它模式代码注释掉,放开168行代码,便转换成Console模式了。console模式支持交互,如支持运行,查看错误等操作,如下图所示:
从上图即可看出,输入R来运行,输入F来查看错误用例,输入Q来退出
这种模式在实际中是很实用的。
3)Basic Mode在testcase.c中将其它模式的代码注释掉,放到163~164行代码,便转换成Basic模式,这种是不支持交互的,直接打印出运行结果。
可以看出,这种模式也是比较简单快捷的
另外对于这种写测试代码的重复工作,可以想办法减小重复,还好,我用的是Emacs写代码,可以借助强大的msf-abbrev 来定义一个testcase的模板,每次写测试时,可以直接引入,既简单又快捷,使自己将有限的精力集中到更核心的部分。(假如你不知我在说什么,就当没看到这部分,直接闪过)
小结:以后写代码过程中,若需要测试函数的功能,就可以采用如下步骤:1)创建一个专门的测试类,用msf-abbrev模板快捷创建内容,2) 添加测试函数3) 将测试函数按组放到CU_TestInfo数组中,并指定给一个Suite4)根据自己需要,定义CU_SuiteInfo数组。5)在RunTest()中定义运行模式。6)在main函数中调用RunTest(),默认生成的testcase中有一个main函数,若不与其它冲突,直接在这里调用即可。(若main冲突,则砍掉不需要的那个)
阅读(...) 评论()软件测试复习 | twiceYuan
Jun 10, 2015
软件测试按阶段划分可分为:单元测试、集成测试、系统测试、验收测试。
因果图方法是一种有效的软件测试的方法,适合于描述对于多种条件的组合、相应产生多个动作形式的测试用例设计。
面向对象是一种软件开发的思想,在整个软件生命周期都要遵循这种思想,根据软件生命周期的各个阶段,可以将面向对象测试分为:面向对象分析测试、面向对象设计测试、面向对象编程测试。
软件测试可以分为:分析学派、标准学派、质量学派、上下文驱动学派和敏捷学派。
冒烟测试是指对一个新的版本进行系统大规模的测试之前,先验证一下软件的基本功能能否实现,是否具备可测性。
软件度量是指根据一定的规则,将数字或符号赋予系统、构件、过程等实体的特定属性,从而能清晰的理解该软件实体及其属性的量化表示。
黑盒测试技术中的功能测试方法主要有:等价类划分、边界值分析方法、错误推测方法、因果图法、场景法、判定表驱动法、正交试验法、功能图法等多种。
自动化测试工具QuickTestPro进行测试的一般步骤:录制脚本,编辑脚本,执行测试,分析结果。
软件本地化是指将一个软件产品按特定国家或语言市场进行全面定制的过程,在发布时需要有针对性的进行测试。
采用Selenium IDE进行Web功能测试的一般流程:录制脚本,编辑脚本,执行测试,分析结果。
修改了旧代码以后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误,这称为回归测试。
PC-Lint是一个面向C/C++的代码静态检查工具,是一个更加严格的编译器。
CUint、CPPUnit、JUint、Visual Unit都是单元测试工具,其中CUnit测试C语言代码,CPPUnit测试C++代码,JUnit测试java代码,Visual Unit测试C/C++代码,CUnit、CPPUnit、Junit是测试框架,我们需要根据框架提供的接口编写测试程序,而Visual Unit则是一个完整的独立的测试程序。
在进行集成测试时,为了隔离单元,根据被测试单元的接口,需要开发相应的驱动程序和桩程序。
静态测试包括对产品的需求和设计规格说明书的评审、对程序代码的审查以及静态分析等。
基于模型的测试是利用模型来生成相应的测试用例,然后根据实际结构和原先预想结果的差异来测试系统。
代码评审也称代码复查,是指通过阅读代码来检查源代码与编译标准的符合性以及代码质量的活动。
白盒测试中逻辑覆盖由弱到强的6中覆盖标准是语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
负载压力测试时软件测试中一个重要的环节,其中 LoadRunner 是 IBM 公司著名的压力测试工具。
集成测试中,根据组装模块的方式分为非渐增式和渐增式两种,渐增式又分为:自底向上和自顶向下两种方式。集成测试:每个模块完成单元测试后,需要按照设计确定的结构将它们连接起来进行集成测试也称为综合测试。
Web系统客户端兼容性测试关注的内容有:性能测试,连接测试,导航测试,界面测试,兼容性测试,帮助文档测试。
基于缺陷分析的产品质量评估方法有:经典的种子公式,基于缺陷清除率的估算方法,软件产品性能评估技术。
容错性测试的概念:容错性测试主要检查系统的容错能力,检查软件在异常条件下自身是否具有防护性的措施或者某种灾难性恢复手段。如当系统出错时,能否在指定时间间隔内修正错误并重启系统。
回归测试是在程序有修改的情况下保证原有功能正常的一种测试策略和方法,不但要检验软件所进行的修改是否正确,还要保证修改不影响原有功能的正确性。
自动化测试实现的原理:通过特定的程序模拟人员对软件系统的操作过程,首先,识别用户界面元素及捕获、键盘鼠标的输入,将操作转换为测试工具可执行的脚步,然后对脚步进行修改和优化,最后,通过测试工具运行测试脚本,将司机输出记录和预期结果进行对比分析。
软件驱动开发,全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新兴的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。
主动测试:测试人员主动向被测试对象发送请求、或借助数据、事件驱动被测试对象的行为,从而验证被测试对象的反应或输出结果。
被动测试:软件产品运行在实际环境中,测试人员不干预产品的运行,而是被动的监控产品的运行,通过一定的被动机制来获得系统的运行数据。
软件测试和调试是两个概念,测试的目的是找出存在的错误,调试的目的是定位发现的错误并修改程序以修正错误;调试是测试之后的活动,测试和调试在目标、方法和思路上都有所不同;测试从一个已知的条件开始,使用预先定义的过程,有预知的结果;调试从一个未知的条件开始,结束的过程不可预知;测试过程可以实现设计,进度可实现确定,调试不能描述过程或持续时间。
白盒测试——逻辑覆盖法
白盒测试——基本路径测试法
黑盒测试——等价类划分法
黑盒测试——判定表法您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
智能电视多媒体播放器自动化测试研究和实现.pdf 66页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
独 创 声 明
本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的
研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其
他人已经发表或撰写过的研究成果,也不包含未获得 (注:如没有其他需要特别
声明的,本栏可空)或其他教育机构的学位或证书使用过的材料。与我一同工作
的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。
学位论文作者签名:
签字日期:
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,并同意以下
1、学校有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许
论文被查阅和借阅。
2、学校可以将学位论文的全部或部分内容编入有关数据库进行检索,可以
采用影印、缩印或扫描等复制手段保存、汇编学位论文。同时授权清华大学“中
国学术期刊(光盘版)电子杂志社”用于出版和编入 CNKI 《中国知识资源总库》,
授权中国科学技术信息研究所将本学位论文收录到《中国学位论文全文数据库》。
(保密的学位论文在解密后适用本授权书)
学位论文作者签名:
导师签字:
签字日期:
签字日期:
智能电视多媒体播放器自动化测试研究与实现
随着计算机软件技术和互联网的发展,智能家电异军突起,给人们生活带来
变革性冲击。在美国CES 消费电子展上,带智能控制的电视新品备受瞩目。“三
网融合”技术使三屏互联,电视产品从传统的“看电视”向“用电视”、“玩电视”
转变,成为一个开放的业务承载平台,是千家万户的智能娱乐终端。
智能电视强大的功能需要坚挺的硬件和软件系统支撑,电视智能化加速了电
视产品的更新换代,同时也对其软件系统和硬件配置提出了更高的要求。电视产
品的软件质量问题是开发人员和用户共同关注的焦点;电视软件的缺陷问题无法
根除,但可以通过加强软件测试提高产品的质量和可靠性。我国是世界电视机生
产大国、消费大国和出口大国,智能电视的质量保证是一个非常重要且极为消耗
人力、物力和财力的劳动密集型工作。随着人们软件危机意识的增强,软件测试
技术得到了越来越多的重视。目前,智能电视的软件测试主要依赖于手工测试,
测试工作量大、周期长、成本高,且因为人为因素无法保证测试的科学性和严密
性。而软件自动化测试通过编写测试脚本模拟手工测试步骤,实现自动或半自动
测试,可以消除手工测试中的人为错误,执行一些手工测试不可能或很难完成的
工作,有效利用资源,大大提高测试的准确性和测试效率。自动化测试是智能电
视软件测试发展的一个趋势。我国智能电视软件自动化测试的发展还处在初级阶
段,如何科学实现自动化测试是目前软件测试的研究热点。
本文深入研究了软件测试技术的基本概念和常用的测试策略,针对广泛使用
的黑盒测试和白盒测试方法进行了深入探索。本文的工作重点是:结合实际工作
项目,利用Robotium
自动化测试工具设计和实现了智能电视多媒体播放器模块
的黑盒测试,以及基于CUnit 单元测试框架的多媒体播放器自动化白盒测试。此
外,利用JUnitReport 测试报告自动生成工具,记录Robotium
自动化测试用例执
行结果;并利用样式表XSL 和CSS 对测试报告XML 文件进行可视化设计。
关键词:多媒体播放器;自动化测试;测试用例;
正在加载中,请稍后...热门关键词:
热门关键词:
川铭教育 成都自动化测试培训机构
学费:咨询 优惠价格:咨询
开课时间:4-25
学时:月 浏览量:
授课机构:
上课地点:成都市武侯区新南路8号(万高集团)万高都市欣城B座12楼
课程咨询:028-
自动化测试:有以下套餐,您可以根据您的需要选择相应的自动化测试套餐。
QTP Mercury的著名的自动化功能测试工具Quick Test Professional&
LoadRunner――进行性能测试的自动化工具
QC/TD――进行缺陷和变更管理的自动化工具
VSS――进行项目版本管理的工具
Logiscope――是一款软件质量控制(QA工具,可进行自动化静态代码分析,动态测试)
&Splint――静态代码检查工具(开源)
&JUNIT――JAVA单元检查工具(开源)
&CUNIT――C语言单元测试工具(开源)
&TD――缺陷和变更跟踪管理工具
IBM Rational Robot――功能测试工具
Clear Quest――缺陷和变更跟踪工具
JMeter――Web应用系统进行整体的性能测试(开源)
Eclipse――进行程序理解、代码静态分析的一款自动化工具(开源)
IBM Rational Rose RealTime ―― 用于实时/嵌入式环境的模型驱动开发工具
IBM Rational TeamTest ―― 实现性能和功能自动测试
IBM Rational Test RealTime――用于实时/嵌入式产品的全面测试和运行时检测工具
IBM Rational TestManager――开放的、可扩展的测试管理工具软件
Rational Performance Tester Extension for SOA Quality――用于 Web 服务性能测试和问题分析的单一工具 一款负载和性能测试及问题分析工具。
阅读上一篇:阅读下一篇:
本培训机构相关资讯
??????????
培训机构联系方式
本培训机构其他课程
???????????????
如何选择一对一课外辅导班?
  如果您的孩子在学习上存在这样那样的问题,您不妨拨打一个400免费咨询电话,找教育专家聊聊,也许仅仅几分钟的免费电话就将改变您孩子的未来。点击您所在市查询本地名师一对一辅导400免费咨询电话:  
【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】
三百六十行,欢迎各培训机构加盟}

我要回帖

更多关于 静态方法的单元测试 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信