MIRACLE
メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

吉岡 弘隆 - よしおか ひろたか

日本OSS推進フォーラム ステアリングコミッティ委員
OSDL Board of Directorsを歴任
カーネル読書会主宰

2000年6月、ミラクル・リナックスの創業に参加。
95年~98年、米国OracleにてOracle RDBMSの開発をおこなっていた。
98年にNetscapeのソースコード公開(Mozilla)に衝撃をうけ、オープンソースの世界に飛びこみ、ついには会社も立ち上げてしまう。
2008年6月取締役CTOを退任し一プログラマとなった。

ミラクル関連リンク

なかのひと

サイト検索

2010年8月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

« リグレッションテスト | メイン | 日本Ruby会議 »

テストカバレージ

先日Ottawa Linux Symposiumに論文のproposalがとおったという話を書いたが、論文を鋭意執筆中である。今回crackerjackというリグレッションテストのフレームワークをうちの若手のkyagiさんがばりばり作ったのであるが、それから呼ぶbtraxというカバレージ測定ツールがこれまた凄い。これは日立の藤原さんというハッカーが実装したのだけどなかなか金銭ではなく琴線に触れるツールである。

ハッカーのバイブル、IA-32 Intel Architecture Software Developer's Manual, Volume 3: System Programming Guideの15章はおなじみのDebugging and Performance Monitoringである。わたしもhardmeterを実装する時は読みに読んだ。マニュアルがボロボロになるまで読んだ。お疲れ様、マニュアルである。

Intelのマニュアルは4半期から半年に一回くらいアップデートしていて手元にあるハードコピーは16版目のやつだ。

15.5からLast Branch Recordingのお話である。Pentium 4/Intel Xeonプロセッサは分岐、割り込み、例外を記録するハードウェアメカニズムを持つ。LBR(Last Branch Record)に最後の分岐、割り込み、例外の情報を記録する。このブランチレコードにはどこから(branch-from)と、どこへ(branch-to)の命令アドレスの情報を保持する。そしてその情報をBTM(Branch trace messages)としてシステムバスに流す。そのBTMをメモリ常駐のBTS(Branch Trace Sotre)に保持する。というような仕組みである。

さて、ハードウェアが分岐命令についていろいろ情報を提供してくれるというのはわかった。

これを使うとどんなことができるのか。

例えば、if (A) then x else y; みたいなコードがあってxを実行したのか、yを実行したのかのトレースがとれる。

テストプログラムの網羅性を議論する時、条件分岐で、どっちのパスも実行、試験した方がいいわけだが、そのカバレージを測定できるのである。

テストカバレージでC0カバレージというのは、命令網羅率とも言われていて、命令を実行したかしなかったかを問う。if(A) then x;みたいな文については条件Aが成立した時に命令を網羅したことになる。

テストカバレージでC1カバレージというのは、条件網羅率とも言われていて、条件(真と偽がある)を網羅したかを問う。if(A) then x;は条件Aが成立した時だけではなく条件Aが成立しなかった時も実行しないと網羅率100%にならない。

高級言語レベルでの網羅率測定はgcovなどのツールを利用すれば簡単に測定できる。linux kernelのカバレージを測定するためにはパッチが必要でLTP(linux test project)のcoverage 分析プロジェクトというのがgcov-kernelパッチを公開している。http://sourceforge.net/project/showfiles.php?group_id=3382
http://ltp.sourceforge.net/coverage/lcov.php
しかし、いかんせんカーネルパッチというのが敷居が高い、お手軽ではない。

そこでbtraxである。btraxは、カーネルパッチも必要ないし、別途カーネルを構築する必要もないので日頃利用しているカーネルの分岐網羅性などを測定するのにうってつけである。

さらに今回のbtraxは機械命令レベルでの分岐網羅性を計測するのでgcc/gcovよりも粒度がより小さい(すごい)。しかもハードウェアレベルで計測するのでオーバヘッドが小さいはづである(多分)。

ソースコードとの対比をすれば未実行のところが一目瞭然である。
Gettimeofdaycovhtml http://btrax.sourceforge.jp/


こーゆー良いツールはどしどし紹介して利用したいと思う。

トラックバック

このページのトラックバックURL:
http://www.typepad.jp/t/trackback/4447/6914797

このページへのトラックバック一覧 テストカバレージ:

» 日本Ruby会議 トラックバック ユメのチカラ
日本Ruby会議2007というのが開催されるのだが、昨年はそのチケットが5分で完 [続きを読む]

コメント

>さらに今回のbtraxは機械命令レベルでの分岐網羅性を計測するのでgcc/gcovよりも粒度がより小さい(すごい)。しかもハードウェアレベルで計測するのでオーバヘッドが小さいはづである(多分)。

と書いたのですが、粒度は同じで、オーバヘッドに関してもbtraxは大きいとのことなので、訂正します。(藤原さん、情報ありがとうございます)

gcovツールを使用したいのですが、記載されているパッチを投入したのですが、うまく動作しません。

パッチが違うのか、手順が間違っているのか判断できない状況です。

手順をを含めて、gcovツールの使用を教えてください。

高級言語レベルでの網羅率測定はgcovなどのツールを利用すれば簡単に測定できる。linux kernelのカバレージを測定するためにはパッチが必要でLTP(linux test project)のcoverage 分析プロジェクトというのがgcov-kernelパッチを公開している。http://sourceforge.net/project/showfiles.php?group_id=3382
http://ltp.sourceforge.net/coverage/lcov.php

コメントを投稿

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.