SQLiteのテストコードは4567万8000行! 本体のコードは6万7000行

2010年4月22日

軽量なリレーショナルデータベースとして人気のSQLite。そのWebサイトに掲載されている「How SQLite Is Tested」の内容が、海外のプログラマなどのあいだで話題になっています。

3月に公開された最新バージョンのSQLite 3.6.23。本体のソースコードは約6万7200行(67.2KSLOC、Kilo Source Lines of Code:空行やコメントを除いた行数)なのに対し、テストコードはなんと4567万8300行(45678.3KSLOC)だと紹介されているのです! これはテストコードが本体の約679倍もの大きさだということになります。

100%のブランチカバレッジ

SQLiteコアのライブラリをテストするテストコードとして、以下の3つが紹介されています。

TCL Tests
TCL Testsはもっとも古いテストコードで、TCL scripting languageで記述されています。テストコードは1万4700行(14.7KSLOC)、536ファイルから構成されており、2万5400のテストケースが記述されています。それぞれのテストケースはパラメータ化されており複数回実行されるため、全体では220万回のテストを実行します。

TH3
TH3テストはCで書かれていて、SQLiteコアのライブラリに対して100%のブランチカバレッジ(すべての分岐に対してテストを行う)を実行します。TH3は公開されているインターフェイスのみを用いたテストです。テストコードは60万2900行(602.9KSLOC)で2万9644のテストケースが記述されています。それぞれのテストケースは徹底的にパラメータ化されており、全体で150万回のテストを実行します。

SQL Logic Test
SQL Logic Test(SLTテスト)は大量のSQL文のテストを、SQLiteとPostgreSQL、MySQL、SQL Server、Oracle 10gなどほかのデータベースに対して実行し、同じ結果が得られるかどうかをテストします。このテストは1.12GBのテストデータを用いて、720万回のクエリを実行します。

このほか、「Out-of-Memoryテスト」「I/O Errorテスト」「Crashテスト」「Compound failureテスト」、不正な入力値などによって問題が起きないかをチェックする「Fuzzテスト」として「SQL Fuzz」「Malformed Database Files」「Boundary Valueテスト」などもあり、さらにリグレッションテスト、リソースリーク検知など、さまざまなテストが行われています。

テストコードが製品の進化に役立つ

それにしてもなんと緻密なテストコードなのでしょうか。「Experience with full test coverage」(フルテストカバレッジの経験)という章では、このフルカバレッジなテストコードが製品を進化させる際のバグの排除にとても役立っていると書いてあります。

The developers of SQLite have found that full coverage testing is an extremely productive method for preventing the introduction of new bugs as the system evolves.

テストコードの重要性は多くの優れたプログラマが共通して口にすることですが、これだけ徹底的にテストコードを作り込んでいる例を見ると、ソフトウェアの品質を確保するというのはかくも大変な作業なのだなと思わされます。

関連記事

あわせて読みたい

プログラミング言語 殿堂入り システム開発




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本