1. プログラミング言語の比較1
表. 代表的な手続き型・オブジェクト指向プログラミング言語
(*) C言語は関数ポインタを引数や戻り値として渡せる
言語 手続き型(P) 静的(S) / クラス 引数の 戻り値 クロー
/ 宣言型(D) 動的(D)型付け と継承 関数 の関数 ジャー
Pascal P S No No Yes No
COBOL85 P S No No No No
Fortan90 P S No Yes Yes No
C99 P S No Yes(*) Yes(*) No
C++11 P S Yes Yes Yes Yes
C# 4.0 P S Yes Yes Yes Yes
D 2.0 P S Yes Yes Yes Yes
Objective-C 2.0 P S Yes Yes Yes Yes
Java 7 P S Yes No No No
2012/12/3 博士論文 予備公聴会 1
2. プログラミング言語の比較2
表. 代表的なスクリプト言語
(*) JavaScriptはプロトタイプを用いてクラスや継承を表現可能
言語 手続き型(P) 静的(S) / クラス 引数の 戻り値 クロー
/ 宣言型(D) 動的(D)型付け と継承 関数 の関数 ジャー
JavaScript P D Yes(*) Yes Yes Yes
CoffeeScript P D Yes Yes Yes Yes
TypeScript P S Yes Yes Yes Yes
Perl P D Yes Yes Yes Yes
PHP 5.3 P D Yes Yes Yes Yes
Python P D Yes Yes Yes Yes
Ruby P D Yes Yes Yes Yes
Lua P D No Yes Yes Yes
Groovy P D Yes Yes Yes Yes
2012/12/3 博士論文 予備公聴会 2
3. プログラミング言語の比較3
表. 代表的な関数型・宣言型プログラミング言語
言語 手続き型(P) 静的(S) / クラス 引数の 戻り値 クロー
/ 宣言型(D) 動的(D)型付け と継承 関数 の関数 ジャー
Lisp P D No Yes Yes Yes
Scheme P D No Yes Yes Yes
ML P S No Yes Yes Yes
Scala P S Yes Yes Yes Yes
Kotlin P S Yes Yes Yes Yes
Nemerle P S Yes Yes Yes Yes
Haskell D S No Yes Yes Yes
SQL D S No No No No
Prolog D D No No No No
2012/12/3 博士論文 予備公聴会 3
4. 他言語と連携可能な言語一覧1
The Next Big
JVM Language 表. JVM上で動作する言語
(*) Google Web Toolkitを用いて部分的にJavaScriptへ変換可能
言語 JVM .NET Framework JavaScript 互換性の
上で動作 上で動作 への変換 高い言語
Java Yes No Yes(*)
Scala Yes Yes No
Kotlin Yes Planned Yes
Xtend Yes No No
Ceylon Yes No Yes
Fantom Yes Yes Yes
Gosu Yes No No
Clojure Yes No No Lisp
Jython Yes No No Python
JRuby Yes No No Ruby
2012/12/3 博士論文 予備公聴会 4
5. 他言語と連携可能な言語一覧2
表. .NET Framework上で動作する言語
(*) JSILやSharpKitを用いて部分的にJavaScriptへ変換可能
言語 JVM .NET Framework JavaScript 互換性の
上で動作 上で動作 への変換 高い言語
C# No Yes Yes(*)
F# No Yes No
Visual Basic No Yes No
C++/CLI No Yes No
Nemerle No Yes Yes
IronPython No Yes No Python
IronRuby No Yes No Ruby
IronScheme No Yes No Scheme
プロデル No Yes No
クロガネ No Yes No
2012/12/3 博士論文 予備公聴会 5
6. 他言語と連携可能な言語一覧3
表. JavaScriptに変換可能な言語
*) HaxeはC++, PHP, C#など様々な言語へ変換可能
言語 JVM .NET Framework JavaScript 互換性の
上で動作 上で動作 への変換 高い言語
CoffeeScript No No Yes
TypeScript No No Yes
Dart No No Yes
Haxe(*) Yes Yes Yes ActionScript
JSX No No Yes
万が一間違いがあったら @exKAZUu
までご一報下さい m(__)m
2012/12/3 博士論文 予備公聴会 6
7. テストカバレッジ測定ツールの比較
ツール 測定の 階層的 無償 命令 分岐 条件 分岐条件 対応言語
仕組み 表示 網羅 網羅 網羅 網羅
Cobertura Binary Yes Yes Yes Yes No No Java
EMMA Binary Yes Yes Yes Yes No No Java
Java,
JCover Code Yes No Yes Yes No No
Groovy
Clover Code Yes No Yes Yes No No Java
Agitar Binary Yes No Yes Yes No No Java
OpenCover Processor Yes Yes Yes Yes No No C#
NCover Source Yes No Yes Yes No No C#
dotCover Binary Yes No Yes No No No C#
gcov Compiler No Yes Yes Yes No No C++
COVTOOL Code No Yes Yes No No No C++
Bullseye Code Yes No Yes Yes Yes Yes C++
2012/12/3 博士論文 予備公聴会 7
8. テストカバレッジ測定ツールの比較
ツール 測定の 階層的 無償 命令 分岐 条件 分岐 対応言語
仕組み 表示 網羅 網羅 網羅 条件
網羅
Intel Code
Compiler Yes No Yes No No No Java
Coverage Tool
Squish Coco Code Yes No Yes Yes Yes Yes Java
C++,
TCAT Code Yes No No Yes No No
Java
C++, C#
Parasoft Test Code Yes No Yes Yes Yes Yes
Java
C++, C#
PurifyPlus Binary Yes No Yes Yes Yes Yes
Java
Semantic C++, C#
Code Yes No Yes Yes No No
Designs Java など
Coverage C++, C#
Code Yes No Yes Yes No No
Validator Java など
2012/12/3 博士論文 予備公聴会 8
9. テストカバレッジ測定ツールの比較
ツール 測定の 階層的 無償 命令 分岐 条件 分岐 対応言語
仕組み 表示 網羅 網羅 網羅 条件
網羅
ScriptCover Code No Yes Yes No No No JavaScript
Coverage.py Processor No Yes Yes Yes No No Python
rcov Processor Yes Yes Yes No No No Ruby
SimpleCov Processor Yes Yes Yes No No No Ruby
Devel::Cover Processor Yes Yes Yes Yes Yes No Perl
xdebug Code Yes Yes Yes No No No PHP
LuaCov Processor No Yes Yes No No No Lua
• ツール間に測定基準・対応言語の差異
• メトリクス測定では測定基準の差異が問題に(*)
*) Rüdiger Lincke, Jonas Lundberg and Welf Löwe: “Comparing Software Metrics Tools,” ISSTA '08 Proceedings
of the 2008 international symposium on Software testing and analysis, pp. 131-142, 2008.
2012/12/3 博士論文 予備公聴会 9