Istanbul
コードを事前に書き換える(インストルメント)方式
各行・分岐・関数に__cov_xxx.s[0]++のようなカウンタ挿入コードを差し込む
BabelプラグインやWebpack loader(babel-plugin-istanbul)でビルド時に変換
歴史が長く、レポート形式(lcov/html/text)が事実上の標準
オーバーヘッドが大きい(コードが膨らむ)。ただし計測の粒度や挙動が安定
純粋なJSなので どのブラウザでも動く(Firefoxでも動く)
イメージ
code:js
// 元
if (x > 0) foo();
// 計装後(雑なイメージ)
foo();
}