エンピリカルとは
エンピリカル(empirical)って何ですか?という質問をいただくことが増えてきた。エンピリカルソフトウェア工学に関する質問に対しては「技術や手法を開発するだけでなく、実際の開発にあてはめ、技術や手法の適用効果や限界を検証すること」と回答している。
ソフトウェア工学に関わらず、エンピリカルな検証が必要なものはたくさんある。システム開発をされている方ならば一度は経験があると思うがパフォーマンスチューニングやフィールドテストはそのうちの1つだ。利用状況を想定して、システムやソフトウェアを設計するところが上述の「技術や手法の開発」にあたり、実際の環境におき、実データにあてはめてパラメータチューニングしたり模擬データで検証したりして、設計を変更するのが「実際の開発にあてはめ・・適用効果や限界を検証すること」に対応する。
身近に感じていただけたのではないだろうか。
書籍「ソフトウェア開発におけるエンピリカルアプローチ」によると「観察や実験を通じて技術を検証する」と意訳されている。ソフトウェア工学にはエンピリカルな検証が必要な分野とそれほど必要ない分野がある。たとえば、プログラミング言語やソフトウェアの形式的仕様記述はソフトウェア工学の範疇にある研究分野といえるが、エンピリカルな検証が相対的に小さい部類に入るだろう。これらをどういう分野でどのように使うかという話になると一転してエンピリカルな検証が必要になるのだが。
たとえば、ここで紹介したコードクローンによる類似不具合の検索はエンピリカルな検証なしには成り立たない類のものだ。ソースコードの静的解析(ソースコードメトリクス)もエンピリカルな検証が必須といえるだろう。
私はこの分野のやり方が気に入っている。技法や手法を考え、理論上の特徴、効果を明らかにし、実際の環境でうまくいくかを試しながら技法や手法を洗練し、知見を積み上げていく。地味だが説得力のある方法といえるだろう。
今日2008/6/13はこのオルタナティブブログの3周年記念だそうだ(詳しくはこちらへ)。私にとって大事なテーマの紹介をこの記念日に書いて、祝福の意としたいと思う。