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は、スキルの高い開発者の人的リソースが限られている場合に便利な指標であると言えます。

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

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

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

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