<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>13.2.7. テスト方法 — groonga v3.0.5 documentation</title> <link rel="stylesheet" href="../../_static/groonga.css" type="text/css" /> <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../../', VERSION: '3.0.5', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../../_static/jquery.js"></script> <script type="text/javascript" src="../../_static/underscore.js"></script> <script type="text/javascript" src="../../_static/doctools.js"></script> <link rel="shortcut icon" href="../../_static/favicon.ico"/> <link rel="top" title="groonga v3.0.5 documentation" href="../../index.html" /> <link rel="up" title="13.2. groonga開発者向け情報" href="../development.html" /> <link rel="next" title="13.3. How to contribute in documentation topics" href="../documentation.html" /> <link rel="prev" title="13.2.6. リリース手順" href="release.html" /> </head> <body> <div class="header"> <h1 class="title"> <a id="top-link" href="../../index.html"> <span class="project">groonga</span> <span class="separator">-</span> <span class="description">An open-source fulltext search engine and column store.</span> </a> </h1> <div class="other-language-links"> <ul> <li><a href="../../../../ja/html/contribution/development/test.html"><img src="../../_static/jp.png" alt="日本語">日本語版はこちら</a></li> </ul> </div> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="../documentation.html" title="13.3. How to contribute in documentation topics" accesskey="N">next</a> |</li> <li class="right" > <a href="release.html" title="13.2.6. リリース手順" accesskey="P">previous</a> |</li> <li><a href="../../index.html">groonga v3.0.5 documentation</a> »</li> <li><a href="../../contribution.html" >13. How to contribute to groonga</a> »</li> <li><a href="../development.html" accesskey="U">13.2. groonga開発者向け情報</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <div class="section" id="id1"> <h1>13.2.7. テスト方法<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h1> <div class="section" id="id2"> <h2>13.2.7.1. テスト環境の構築<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h2> <div class="section" id="cutter"> <h3>13.2.7.1.1. Cutterのインストール<a class="headerlink" href="#cutter" title="Permalink to this headline">¶</a></h3> <p>groongaは、テストのフレームワークとして <a class="reference external" href="http://cutter.sourceforge.net/">Cutter</a> を用いています。</p> <p>Cutterのインストール方法は <a class="reference external" href="http://cutter.sourceforge.net/reference/ja/install.html">プラットフォーム毎のCutterのインストール方法</a> をご覧下さい。</p> </div> <div class="section" id="lcov"> <h3>13.2.7.1.2. lcovのインストール<a class="headerlink" href="#lcov" title="Permalink to this headline">¶</a></h3> <p>カバレッジ情報を計測するためには、lcov 1.6以上が必要です。DebianやUbuntuでは以下のようにしてインストールできます。:</p> <div class="highlight-none"><div class="highlight"><pre>% sudo aptitude install -y lcov </pre></div> </div> </div> <div class="section" id="clang"> <h3>13.2.7.1.3. clangのインストール<a class="headerlink" href="#clang" title="Permalink to this headline">¶</a></h3> <p>ソースコードの静的解析を行うためには、clang(scan-build)をインストールする必要があります。DebianやUbuntuでは以下のようにしてインストールできます。:</p> <div class="highlight-none"><div class="highlight"><pre>% sudo aptitude install -y clang </pre></div> </div> </div> <div class="section" id="libmemcached"> <h3>13.2.7.1.4. libmemcachedのインストール<a class="headerlink" href="#libmemcached" title="Permalink to this headline">¶</a></h3> <p>memcachedのバイナリプロトコルのテストを動作させるためには、libmemcachedの導入が必要です。squeeze以降のDebianやKarmic以降のUubntuでは以下の用にしてインストールできます。:</p> <div class="highlight-none"><div class="highlight"><pre>% sudo aptitude install -y libmemcached-dev </pre></div> </div> </div> </div> <div class="section" id="id5"> <h2>13.2.7.2. テストの動作<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h2> <p>groongaのトップディレクトリで、以下のコマンドを実行します。:</p> <div class="highlight-none"><div class="highlight"><pre>make check </pre></div> </div> </div> <div class="section" id="id6"> <h2>13.2.7.3. カバレッジ情報<a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h2> <p>groongaのトップディレクトリで、以下のコマンドを実行します。:</p> <div class="highlight-none"><div class="highlight"><pre>make coverage </pre></div> </div> <p>すると、coverageディレクトリ以下に、カバレッジ情報が入ったhtmlが出力されます。</p> <p>カバレッジには、Lines/Functions/Branchesの3つの対象があります。それぞれ、行/関数/分岐に対応します。Functionsがもっとも重要な対象です。すべての関数がテストされるようになっていることを心がけてください。</p> <p>テストがカバーしていない部分の編集は慎重に行ってください。また、テストがカバーしている部分を増やすことも重要です。</p> </div> <div class="section" id="id7"> <h2>13.2.7.4. 様々なテスト<a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h2> <p>テストは、test/unitディレクトリにおいて、./run-test.shを実行することによっても行えます。run-test.shはいくつかのオプションをとります。詳細は、./run-test.sh --helpを実行しヘルプをご覧ください。</p> <div class="section" id="id8"> <h3>13.2.7.4.1. 特定のテスト関数のみテストする<a class="headerlink" href="#id8" title="Permalink to this headline">¶</a></h3> <p>特定のテスト関数(Cutterではテストと呼ぶ)のみをテストすることができます。</p> <p>実行例:</p> <div class="highlight-none"><div class="highlight"><pre>% ./run-test.sh -n test_text_otoj </pre></div> </div> </div> <div class="section" id="id9"> <h3>13.2.7.4.2. 特定のテストファイルのみテストする<a class="headerlink" href="#id9" title="Permalink to this headline">¶</a></h3> <p>特定のテストファイル(Cutterではテストケースと呼ぶ)のみテストすることができます。</p> <p>実行例:</p> <div class="highlight-none"><div class="highlight"><pre>% ./run-test.sh -t test_string </pre></div> </div> </div> <div class="section" id="id10"> <h3>13.2.7.4.3. 不正メモリアクセス・メモリリーク検出<a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h3> <p>環境変数CUTTER_CHECK_LEAKをyesと設定すると、valgrindを用いて不正メモリアクセスやメモリリークを検出しつつ、テストを動作させることができます。</p> <p>run-test.shのみならず、make checkでも利用可能です。</p> <p>実行例:</p> <div class="highlight-none"><div class="highlight"><pre>% CUTTER_CHECK_LEAK=yes make check </pre></div> </div> </div> <div class="section" id="id11"> <h3>13.2.7.4.4. デバッガ上でのテスト実行<a class="headerlink" href="#id11" title="Permalink to this headline">¶</a></h3> <p>環境変数CUTTER_DEBUGをyesと設定すると、テストが実行できる環境が整ったgdbが実行されます。gdb上でrunを行うと、テストの実行が開始されます。</p> <p>run-test.shのみならず、make checkでも利用可能です。</p> <p>実行例:</p> <div class="highlight-none"><div class="highlight"><pre>% CUTTER_DEBUG=yes make check </pre></div> </div> </div> </div> <div class="section" id="id12"> <h2>13.2.7.5. 静的解析<a class="headerlink" href="#id12" title="Permalink to this headline">¶</a></h2> <p>scan-buildを用いて、ソースコードの静的解析を行うことができます。scan_buildというディレクトリに解析結果のhtmlが出力されます。:</p> <div class="highlight-none"><div class="highlight"><pre>% scan-build ./configure --prefix=/usr % make clean % scan-build -o ./scan_build make -j4 </pre></div> </div> <p>configureは1度のみ実行する必要があります。</p> </div> </div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <h3><a href="../../index.html">Table Of Contents</a></h3> <ul> <li><a class="reference internal" href="#">13.2.7. テスト方法</a><ul> <li><a class="reference internal" href="#id2">13.2.7.1. テスト環境の構築</a><ul> <li><a class="reference internal" href="#cutter">13.2.7.1.1. Cutterのインストール</a></li> <li><a class="reference internal" href="#lcov">13.2.7.1.2. lcovのインストール</a></li> <li><a class="reference internal" href="#clang">13.2.7.1.3. clangのインストール</a></li> <li><a class="reference internal" href="#libmemcached">13.2.7.1.4. libmemcachedのインストール</a></li> </ul> </li> <li><a class="reference internal" href="#id5">13.2.7.2. テストの動作</a></li> <li><a class="reference internal" href="#id6">13.2.7.3. カバレッジ情報</a></li> <li><a class="reference internal" href="#id7">13.2.7.4. 様々なテスト</a><ul> <li><a class="reference internal" href="#id8">13.2.7.4.1. 特定のテスト関数のみテストする</a></li> <li><a class="reference internal" href="#id9">13.2.7.4.2. 特定のテストファイルのみテストする</a></li> <li><a class="reference internal" href="#id10">13.2.7.4.3. 不正メモリアクセス・メモリリーク検出</a></li> <li><a class="reference internal" href="#id11">13.2.7.4.4. デバッガ上でのテスト実行</a></li> </ul> </li> <li><a class="reference internal" href="#id12">13.2.7.5. 静的解析</a></li> </ul> </li> </ul> <h4>Previous topic</h4> <p class="topless"><a href="release.html" title="previous chapter">13.2.6. リリース手順</a></p> <h4>Next topic</h4> <p class="topless"><a href="../documentation.html" title="next chapter">13.3. How to contribute in documentation topics</a></p> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="../../_sources/contribution/development/test.txt" rel="nofollow">Show Source</a></li> </ul> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="../../search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../../genindex.html" title="General Index" >index</a></li> <li class="right" > <a href="../documentation.html" title="13.3. How to contribute in documentation topics" >next</a> |</li> <li class="right" > <a href="release.html" title="13.2.6. リリース手順" >previous</a> |</li> <li><a href="../../index.html">groonga v3.0.5 documentation</a> »</li> <li><a href="../../contribution.html" >13. How to contribute to groonga</a> »</li> <li><a href="../development.html" >13.2. groonga開発者向け情報</a> »</li> </ul> </div> <div class="footer"> © Copyright 2009-2013, Brazil, Inc. </div> </body> </html>