Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

非手続き型言語における機械的計測可能で客観的なテスト充分性の指標

プログラムをテストするときに、テストの充分性を示す指標として、C0とかC1とかのカバレッジ(コードカバレッジ)がよく使われます。

C0やC1は、実行されたことがない順次処理や、分岐したことがない分岐処理が、プログラム中に残っていないか計測するための指標です。なので、C0やC1は、順次処理と分岐の組み合わせでできている *1 手続き型言語に対しては、意味のある指標だと言えます *2

C0やC1の利点として、客観性が高いことが挙げられます。ソフトウェアの機能に対するテスト観点の網羅性(テストカバレッジ)などは、ソフトウェアに対する理解の度合いや、ソフトウェアの機能の数えかたといった、計測者の主観によって指標値が変わってしまいますが、C0やC1はそういった影響を受けません。また別の利点として、機械的に計測が可能である点が挙げられます。テストカバレッジを計測する場合、テストケースとソフトウェアの機能一覧とを人間が対応づける必要がありますが、C0やC1はソースコードと直接対応付けられ機械的に計測が可能です。

一方、C0やC1の別の欠点として、順次処理や分岐を直接記述しない非手続き型言語ーたとえばSQL正規表現ーでは、C0やC1を計測できなかったり、たとえ計測できたとしても指標として意味を成さなかったりします。かといって、テストカバレッジには客観性の点に問題があります。

そこで本研究では、非手続き型言語に対してテストの充分性を示す、機械的計測可能で客観性の高い指標を提案します……という論文があれば是非読みたいんだけど、誰か知りませんか。

*1:繰返しは分岐の特殊なケースとして扱います。

*2:もちろんC0やC1では計測できない充分性もあります。ここでは、テストの充分性を表す一つの観点として辻褄の合う説明ができる、ということを指して、C0やC1が「意味のある指標」であると言っています。