记录阿里巴巴QA架构组成长点滴。2008年关键词为效率,技术,影响力!QA/测试架构师定义:开发和设计测试框架测试库;纵横全局的考虑产品的功能,设计复杂的测试系统;负责研发某一项特定的测试技术;为公司考虑如何提高测试效率。领导公司测试技术的发展和测试策略上的方向,关注整个公司的测试部门的问题,前瞻性的考虑未来的版本的测试策略和技术。测试架构师计划/设计测试平台,关注着产品的测试过程,提供咨询服务,影响到公司内的测试机构测试社区,以及开发机构等,对产品各个方面施加深远而正确的影响,最终提高整体软件质量。

gcov和lcov对linux c++分析代码覆盖率

上一篇 / 下一篇  2008-07-09 16:19:17 / 个人分类:搜索引擎测试

gcov伴随gcc发布。gcc编译加入-fprofile-arcs -ftest-coverage参数生成二进制程序,执行测试用例生成代码覆盖率信息。

fprofile-arcs参数使gcc创建一个程序的流图,之后找到适合图的生成树。只有不在生成树中的弧被操纵(instrumented):gcc添加了代码来清点这些弧执行的次数。当这段弧是一个块的唯一出口或入口时,操纵工具代码(instrumentation code)将会添加到块中,否则创建一个基础块来包含操纵工具代码。gcov主要使用.gcno.gcda两个文件。
.gcno
是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息。
.gcda
是由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息。

Gcov执行函数覆盖、语句覆盖和分支覆盖。

Lcov则是上的gcov结果展现的一个前端,可从http://ltp.sourceforge.net/coverage/lcov.php下载。可以将覆盖率信息转换成html展现。

安装lcovsu - root;make install

Makefile在编译和link环节都加入-fprofile-arcs -ftest-coverage选项

GCC = g++  -fprofile-arcs -ftest-coverage

.SUFFIXES: .o .cpp

iquery: $(LIBS) TestQuery.o

       $(GCC) $(LDPATH) -g      -o $@ TestQuery.o -lsearch -lupdate -lbuild -lstore -lanalysis -lconfig -ldocument -lmxml -lonline -lutility -ldictionary -lpublic -lpthread -lrt

.cpp.o:

       $(GCC) -c -g $(INCLUDE) -DLINUX   -o $@ $<

       

 

执行完iquery命令行。

[search@b2b_search_211 core]$./iquery  -f ~/eragon_yb/conf/se.conf -s "offer_gb?q=mp3"

     

对于apache module的代码覆盖率分析,必须是启动apache httpd进程,执行查询最后退出apache httpd进程才能收集到信息。

 

[search@b2b_search_211 core]$ ll

总用量36120

drwxrwxr-x 4 search search    4096 7 8 19:23 cpp

-rwxrwxr-x 1 search search 8742605 7 8 20:06 ibuild

-rwxrwxr-x 1 search search 13490318 7 8 20:06 idelete

-rwxrwxr-x 1 search search 13711848 7 8 20:06 iquery

-rw-rw-r-- 1 search search    3115 7 8 20:04 Makefile

drwxrwxr-x 3 search search    4096 7 8 19:23 test

-rw-rw-r-- 1 search search     893 612 18:18 TestAnalysis.cpp

-rw-rw-r-- 1 search search   10551 612 18:18 TestBuild.cpp

-rw-rw-r-- 1 search search   15080 7 8 20:06 TestBuild.gcno

-rw-rw-r-- 1 search search  115808 7 8 20:06 TestBuild.o

-rw-rw-r-- 1 search search    1143 612 18:18 TestConfig.cpp

-rw-rw-r-- 1 search search    5366 612 18:18 TestDelete.cpp

-rw-rw-r-- 1 search search   11204 7 8 20:06 TestDelete.gcno

-rw-rw-r-- 1 search search  252064 7 8 20:06 TestDelete.o

 

 

生成:TestQuery.gcdaTestQuery.gcno

 

[search@b2b_search_211 core]$ gcov TestQuery.cpp

File `TestQuery.cpp'

Lines executed:22.32% of 336

TestQuery.cpp:creating `TestQuery.cpp.gcov'

 

 

[search@b2b_search_211 core]$ ll

总用量36620

-rw-rw-r-- 1 search search    7024 7 8 20:08 allocator.h.gcov

drwxrwxr-x 4 search search    4096 7 8 19:23 cpp

-rw-rw-r-- 1 search search   12827 7 8 20:08 GlobalDef.h.gcov

-rwxrwxr-x 1 search search 8742605 7 8 20:06 ibuild

-rwxrwxr-x 1 search search 13490318 7 8 20:06 idelete

-rw-rw-r-- 1 search search   44797 7 8 20:08 ios_base.h.gcov

-rw-rw-r-- 1 search search    4638 7 8 20:08 iostream.gcov

-rwxrwxr-x 1 search search 13711848 7 8 20:06 iquery

-rw-rw-r-- 1 search search  128499 7 8 20:08 locale_facets.tcc.gcov

-rw-rw-r-- 1 search search    3115 7 8 20:04 Makefile

-rw-rw-r-- 1 search search   12684 7 8 20:08 MemCache.h.gcov

-rw-rw-r-- 1 search search   10158 7 8 20:08 MemPool.h.gcov

-rw-rw-r-- 1 search search    6524 7 8 20:08 new_allocator.h.gcov

-rw-rw-r-- 1 search search    5742 7 8 20:08 new.gcov

-rw-rw-r-- 1 search search    1844 7 8 20:08 QueryCache.h.gcov

-rw-rw-r-- 1 search search   44015 7 8 20:08 stl_algobase.h.gcov

-rw-rw-r-- 1 search search    8328 7 8 20:08 stl_construct.h.gcov

-rw-rw-r-- 1 search search   44016 7 8 20:08 stl_function.h.gcov

-rw-rw-r-- 1 search search   31113 7 8 20:08 stl_multiset.h.gcov

-rw-rw-r-- 1 search search   62978 7 8 20:08 stl_tree.h.gcov

-rw-rw-r-- 1 search search   10365 7 8 20:08 Svector.h.gcov

 

[search@b2b_search_211 core]$ cat TestQuery.cpp.gcov

 

       -:  47:static int nAverageDocSize = 1024;        

function _ZN9QueryStatC1EPKcxi called 0 returned 0% blocks executed 0%

   #####:  53:   QueryStat(const char* szQuery, n64_t d, n32_t docs){

   #####:  54:       query = szQuery;

   #####:  55:       dual = d;

   #####:  56:       docnum = docs;

       -:  57:   }

       -:  58:};

       -:  59:struct CmpQueryStat{

function _ZN12CmpQueryStatclERK9QueryStatS2_ called 0 returned 0% blocks executed 0%

   #####:  60:   bool operator()(const QueryStat& a, const QueryStat& b){

   #####:  61:       return a.dual < b.dual;

       -:  62:   };

       -:  63:};

        1: 534:}

        

      #####表示未执行的行

      

[search@b2b_search_211 core]$

[search@b2b_search_211 core]$ ll *gcov*

 

收集覆盖率数据生成app.info文件

[search@b2b_search_211 core]$  lcov --directory .  --capture --output-file app.info

Capturing coverage data from .

Found gcov version:3.4.6

Scanning . for .gcda files ...

Found 1 data files in .

Processing ./TestQuery.gcda

Finished .info-file creation

 

转换成html格式

[search@b2b_search_211 core]$genhtml -o results app.info

Reading data file app.info

Found 18 entries.

Found common filename prefix "/home/search/isearch_yb/src"

Writing .css and .png files.

Generating output.

Processing file cpp/core/basis/GlobalDef.h

Processing file cpp/core/search/QueryCache.h

...

Writing directory view page.

Overall coverage rate: 117 of 514 lines (22.8%)

 

results目录tar cvf打包szwindows,打开

总体报告:

 

单个cpp文件的覆盖率:

 

 

还可以看到具体的行执行情况

 

 

另外再运行一组更丰富的查询日志,测试结果截然不同。

 


TAG: gcov lcov linux gcc 代码覆盖率统计 图表 搜索引擎测试

 

评分:0

我来说两句

日历

« 2024-04-17  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 154117
  • 日志数: 163
  • 文件数: 1
  • 建立时间: 2008-02-26
  • 更新时间: 2008-12-10

RSS订阅

Open Toolbar