狠狠撸

狠狠撸Share a Scribd company logo
静的型システムがコード品質に与える影響を調べたい.
そのため,バグを含むJavaScriptのコードに対して
静的型付けを行い,静的型チェッカーを実行し,
エラー報告したバグの割合を調査した.
概要
?JavaScriptに対する静的型付けはホットなトピック
?現実世界のバグに対する大規模な調査である
?静的,動的型システムの比較論文は珍しくない
所感
担当者: 三宅 皐 (mii@fse.cs.ritsumei.ac.jp)
ICSE’17勉強会 (2017年8月24日) 24-2
研究目的
function addNumbers(x, y) {
return x + y;
}
console.log(addNumbers(3, “0”)); // print “30”
静的型システムによって,バグがどのくらいの割合で
開発者に報告されるのかを知りたい
動的型付け言語
JavaScript
function addNumbers(x:number, y:number) {
return x + y;
}
console.log(addNumbers(3, “0”)); // Error
静的型付け言語
Closure, TypeScript, Flow
JavaScriptに対して,段階的に型付けできる静的型システムを用いて,
バグを含むJavaScriptのコードに対して型付けし,型チェックを行う
実験手法
Bug
Identification
Type
Checking
Manual
Type Annotation
Projects
Issue Pages
Commit Logs
Buggy Programs
Annotated Programs
no
Detectable Bugs
著者ら3人が,バグレポート及び
修正プログラムを元に,修正された
レキシカルスコープを特定
スコープ内で型付けを行う
Issue Page
c1 c2 c3
Buggy
Program
Commit Log
Bug Fix!
①
リファクタリング,機能強化等の
バグ修正でないものは手動で除去
② ③
評価 GitHubにあるJavaScriptプロジェクトから,
ランダムに400のバグを選択
Flow 0.30または,TypeScript 2.0を用いた結果,
バグはどれだけエラー報告されるか
?FlowおよびTypeScriptの型チェックに
よって,15%のバグを防ぐことができた
?型チェックで検出できなかったバグのうち,
55%は仕様の実装ミスに起因するエラー
?2番目に多かったのは,間違ったURLなど,
文字列の内容のミスによって発生するエラー
(Fig. 6)
(Fig. 7)
Research Question:
Weitzら[1]によって
文字列型に対する
型システムについて
研究が行われている
[1] K Weitz et al.
“A type system for format strings”
ISSTA 2014

More Related Content

Similar to ICSE 2017 勉強会 To Type or Not to Type: Quantifying Detectable Bugs in JavaScript (9)

TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
?
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
Seiji Noro
?
キャッチアップJavaScriptビルド - ビルドから見るJSの今/2016春
キャッチアップJavaScriptビルド -ビルドから見るJSの今/2016春キャッチアップJavaScriptビルド -ビルドから見るJSの今/2016春
キャッチアップJavaScriptビルド - ビルドから見るJSの今/2016春
Kondo Hitoshi
?
Windows ストアアプリから使かえるセンサーAPIとデバイスAPI
Windows ストアアプリから使かえるセンサーAPIとデバイスAPIWindows ストアアプリから使かえるセンサーAPIとデバイスAPI
Windows ストアアプリから使かえるセンサーAPIとデバイスAPI
Osamu Monoe
?
デブサミ関西2013【础4】コード品质は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【础4】コード品质は曖昧なままか(安竹由起夫氏)デブサミ関西2013【础4】コード品质は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【础4】コード品质は曖昧なままか(安竹由起夫氏)
Developers Summit
?
【厂罢础颁2017】テスト自动化システム 成长记
【厂罢础颁2017】テスト自动化システム 成长记【厂罢础颁2017】テスト自动化システム 成长记
【厂罢础颁2017】テスト自动化システム 成长记
友隆 浅黄
?
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
[GrapeCity Web TECH FORUM 2018]グレープシティJavaScript製品のご紹介 活用のコツと開発のポイント
Developer Solutions事業部 メシウス株式会社 (旧グレープシティ株式会社)
?
闯惭别迟别谤を奥别产でしか设定できないサーバの设定自动化に使う
闯惭别迟别谤を奥别产でしか设定できないサーバの设定自动化に使う闯惭别迟别谤を奥别产でしか设定できないサーバの设定自动化に使う
闯惭别迟别谤を奥别产でしか设定できないサーバの设定自动化に使う
隆行 神戸
?
大规模なギョームシステムに贬补虫别を採用してみた话
大规模なギョームシステムに贬补虫别を採用してみた话大规模なギョームシステムに贬补虫别を採用してみた话
大规模なギョームシステムに贬补虫别を採用してみた话
terurou
?
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
?
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
Seiji Noro
?
キャッチアップJavaScriptビルド - ビルドから見るJSの今/2016春
キャッチアップJavaScriptビルド -ビルドから見るJSの今/2016春キャッチアップJavaScriptビルド -ビルドから見るJSの今/2016春
キャッチアップJavaScriptビルド - ビルドから見るJSの今/2016春
Kondo Hitoshi
?
Windows ストアアプリから使かえるセンサーAPIとデバイスAPI
Windows ストアアプリから使かえるセンサーAPIとデバイスAPIWindows ストアアプリから使かえるセンサーAPIとデバイスAPI
Windows ストアアプリから使かえるセンサーAPIとデバイスAPI
Osamu Monoe
?
デブサミ関西2013【础4】コード品质は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【础4】コード品质は曖昧なままか(安竹由起夫氏)デブサミ関西2013【础4】コード品质は曖昧なままか(安竹由起夫氏)
デブサミ関西2013【础4】コード品质は曖昧なままか(安竹由起夫氏)
Developers Summit
?
【厂罢础颁2017】テスト自动化システム 成长记
【厂罢础颁2017】テスト自动化システム 成长记【厂罢础颁2017】テスト自动化システム 成长记
【厂罢础颁2017】テスト自动化システム 成长记
友隆 浅黄
?
闯惭别迟别谤を奥别产でしか设定できないサーバの设定自动化に使う
闯惭别迟别谤を奥别产でしか设定できないサーバの设定自动化に使う闯惭别迟别谤を奥别产でしか设定できないサーバの设定自动化に使う
闯惭别迟别谤を奥别产でしか设定できないサーバの设定自动化に使う
隆行 神戸
?
大规模なギョームシステムに贬补虫别を採用してみた话
大规模なギョームシステムに贬补虫别を採用してみた话大规模なギョームシステムに贬补虫别を採用してみた话
大规模なギョームシステムに贬补虫别を採用してみた话
terurou
?

ICSE 2017 勉強会 To Type or Not to Type: Quantifying Detectable Bugs in JavaScript

Editor's Notes

  • #2: 本研究では,静的型システムがコード品質に与える影響を調べます. 影響調査を行うため,バグを含むJavaScriptのコードに対して静的型付けを行い,静的型チェッカーを実行そ,エラー報告したバグの割合を調査します. 所感としては, ただ,研究テーマとしては,
  • #3: まずはじめに,動的型付け言語としてJavaScriptという言語があり,この言語はWebアセンブリとして人気の言語です. この言語に対して静的型付けを行うための言語が幾つか存在します. このような言語の静的型システムを用いることによって,バグがどのくらいの割合で開発者に報告されるのかを調査します. 調査のために,JavaScriptに対して,段階的に型付けできる静的型システムを用いて,バグを含むJavaScriptのコードに対して型付けし,型チェックを行います.
  • #4: 調査を行うための実験は3つにわかれています. はじめに,Github上にあるJavaScriptで書かれたプロジェクトから,バグを集めてきます. バグ収集では,IssuePageとCommit Logを用いてバグを含むプログラムを特定します. 収集したバグを含むコードに対して,手動で型付けを行っていきます. そして,型付けを行ったプログラムに対して型チェックを行い,バグを報告するかどうかを確認します
  • #5: 評価では,静的型付け言語であるFlowとTypeScriptによって型付けした結果,バグはどれだけエラー報告されるかを確認しています. GitHub上にあるJavaScriptプロジェクトからランダムに400のバグを選択し,型付けを行った結果,15%のバグを型チェックによって発見することができました. また,型チェックによって検出できなかったバグのうち,55%は仕様の実装ミスに起因するエラーでした. また,2番めに多かったのは,間違ったURLや不正なSQLクエリ等の文字列の内容のミスによって起因するエラーでした. これはString型が静的型システムに対して不透明であることに起因しているのですが,これについてはWeitzらによって研究が進められているとのことでした.