Closed connglli closed 6 years ago
这周除了邮件中列出的几点工作外,还对现在的版本(branch: counterpart, revision: 3045bdb)进行了测试,测试主要从几个方面下手:
下表为针对上述指标所列的表:
从上表可以看出,对这 15 个 App(实际只有 14 个参与计算,PocketHub 没参与)
回看 Lili 论文中所做的实验,针对上述 14 个 App,Lili 共发现了 21 个 FIC Issues(这里我假设为 api 数量),其中有 3 个 FP,误报率 0.143。可见,当前版本(branch: counterpart, revision: 3045bdb)能够发现更多的 Issues,但误报率也更高。下面总结了一些好与不好的原因:
if-else
com.github
AlarmManager.set
AsynTask.execute
AppCompatActivity.setSupportActionBar
其实误报率里的水分(有偏高的水分也有偏低的水分)很大一部分原因就是上述提到的 2/3/4,ELEGANT 把他们直接报告了出来,而实际上并不一定是开发者实际的(语义)需求。下面我也把这 15 个 App 所报出的 FIC Issues 的 API 进行了 TP 和 FP 的汇总,并列出了报告为 FP 的原因。其中 :white_check_mark: 表示 TP,:exclamation: 表示 FP,:question: 表示 TP 和 FP 都有(针对这种,我把它列为了 TP),同时列出了新发现(和目前版本已经有的)的一些第三方包。(我在考虑能不能找到一些 3rd party libs elimination 的工具进行集成)
If, in some api, some call sites of it are fixed while others are not, we classify it into TP. 1Sheeld :exclamation::exclamation: TextToSpeech.setOnUtteranceProgressListener => fixed using if (Build.VERSION.SDK_INT >= 15) :white_check_mark: AsyncTask.execute :white_check_mark: AlarmManager.set :question: Resources.getDrawable => 3rd-party libs: 2 (com.facebook, com.handmark) BankDroid :white_check_mark: Activity.onKeyDown :exclamation: AppCompatActivity.setSupportActionBar => fixed in proguard-rules.pro :white_check_mark: AsyncTask.execute AnkiDroid :white_check_mark: Activity.onKeyDown :exclamation::exclamation: TextToSpeech.setOnUtteranceProgressListener => fixed using class hierarchy :exclamation: AppCompatActivity.setSupportActionBar => fixed in proguard-rules.pro :white_check_mark: AsyncTask.execute AntennaPod :exclamation: AppCompatActivity.setSupportActionBar => fixed in proguard-rules.pro :exclamation::exclamation: AsyncTask.executeOnExecutor => fixed using if (Build.VERSION.SDK_INT >= 15) :white_check_mark: AsyncTask.execute :white_check_mark: AlarmManager.set :exclamation: Resources.getDrawable => 3rd-party libs: 1 (com.viewpagerindicator) AnySoftKeyboard :white_check_mark: AsyncTask.execute :white_check_mark: Resources.getDrawable ConnectBot :white_check_mark: MenuItem.setShowAsAction :white_check_mark: AsyncTask.execute Conversations :white_check_mark: KeyChain.getPrivateKey :white_check_mark: AlarmManager.set IrssiNotifier :white_check_mark: AsyncTask.execute :exclamation: Activity.getActionBar => 3rd-party libs: 1 (com.actionbarsherlock) K-9 Mail :white_check_mark: Activity.onKeyDown :white_check_mark: KeyChain.getPrivateKey :white_check_mark: AlarmManager.set :question: Resources.getDrawable => 3rd-party libs: 6 (com.handmark, com.bumptech, org.openintents) Kore :white_check_mark: AppCompatActivity.setSupportActionBar :exclamation: Resources.getDrawable => 3rd-party libs: 1 (com.melnykov) PacktrackDroid :white_check_mark: ConnectivityManager.getBackgroundDataSetting PocketHub ==com.github was regarded as a 3rd party, so data here is not reliable== QKSMS :white_check_mark: AppCompatActivity.setSupportActionBar :white_check_mark: AlarmManager.set :exclamation: Resources.getDrawable => 3rd-party libs: 1 (com.melnykov) Transdroid :white_check_mark: AppCompatActivity.setSupportActionBar :exclamation: Resources.getDrawable => 3rd-party libs: 2 (com.getbase) WordPress :exclamation: AppCompatActivity.setSupportActionBar => fixed in proguard.cfg :white_check_mark: ContentValues.put :question: Resources.getDrawable => 3rd-party libs: 2 (com.helpshift) newly found 3rd party libs list "com.handmark", // Android Pull-to-Refresh "com.facebook", // facebook related sdk "com.bumptech", // glide "com.viewpagerindicator", // ViewPager related "com.actionbarsherlock", // ActionBar related "org.openintents", // Intent related "com.melnykov", // FloatingActionButton related "com.helpshift" // help shift android sdk embedded 3rd party libs list "android", // android official "java", // java official "com.jakewharton", // butterknife "com.github", // github related, glide, etc. "com.squareup", // okhttp, retrofit, etc. "com.google", // google related, gson, guava, etc. "com.crashlytcics", // firebase "org.omg", // extends to java "org.w3c", // extends to java "org.xml", // extends to java "org.apache", // apache organization "com.sun", // sun "org.eclipse", // eclipse "rx" // reactivex java
If, in some api, some call sites of it are fixed while others are not, we classify it into TP.
if (Build.VERSION.SDK_INT >= 15)
newly found 3rd party libs list
"com.handmark", // Android Pull-to-Refresh "com.facebook", // facebook related sdk "com.bumptech", // glide "com.viewpagerindicator", // ViewPager related "com.actionbarsherlock", // ActionBar related "org.openintents", // Intent related "com.melnykov", // FloatingActionButton related "com.helpshift" // help shift android sdk
embedded 3rd party libs list
"android", // android official "java", // java official "com.jakewharton", // butterknife "com.github", // github related, glide, etc. "com.squareup", // okhttp, retrofit, etc. "com.google", // google related, gson, guava, etc. "com.crashlytcics", // firebase "org.omg", // extends to java "org.w3c", // extends to java "org.xml", // extends to java "org.apache", // apache organization "com.sun", // sun "org.eclipse", // eclipse "rx" // reactivex java
周报
测试结果
这周除了邮件中列出的几点工作外,还对现在的版本(branch: counterpart, revision: 3045bdb)进行了测试,测试主要从几个方面下手:
下表为针对上述指标所列的表:
Conversations-playstore
3/6/58
2/3/42
2/3/42
2/3/42
IrssiNotifier-pro
3/7/31
2/6/24
1/5/21
1/1/3
2/6/24
QKSMS-withAnalysis
3/6/20
3/3/11
2/2/9
1/1/2
3/3/11
Transdroid-full
2/8/48
2/6/16
1/4/4
1/2/12
2/6/16
WordPress-wasabi
WordPress-zalpha
3/41/227
3/41/227
3/31/55
3/31/55
2/14/32
2/14/32
1/17/23
1/17/23
3/31/55
3/31/55
RATE
RATE
测试结果解读
从上表可以看出,对这 15 个 App(实际只有 14 个参与计算,PocketHub 没参与)
测试结果分析
回看 Lili 论文中所做的实验,针对上述 14 个 App,Lili 共发现了 21 个 FIC Issues(这里我假设为 api 数量),其中有 3 个 FP,误报率 0.143。可见,当前版本(branch: counterpart, revision: 3045bdb)能够发现更多的 Issues,但误报率也更高。下面总结了一些好与不好的原因:
if-else
而 fix 掉的 issue(这里说明一点,因为现在的版本使用了内置的 icfg,所以摒弃了之前周报中提到的专门针对if-else
的比较 “狭隘” 的分析,相关的分析在 master 分支中仍然存在,但是现在我觉得这种分析继续下去会没完没了,后续是否再次加入还待考虑)com.github
)这个包前缀,这个前缀也正是很多很多 github 官方常用三方库的包前缀。AlarmManager.set
这个 API,根据官方文档,无法设置精确的时间,但使用这个 API 的开发者到底是真的需要精确的时间还是仅仅需要一个 App 特定的推动时间我们不可知,代码不可知,因此需要 "important";(2)AsynTask.execute
这个 API,根据官方文档,无法真正的实现并行化,而是一个串行化的操作,同 (1) 一样,开发者是否真的需要并行也是代码不可知的,因此需要 "important";(3) …AppCompatActivity.setSupportActionBar
,这个 API 会在三星 Galaxy 上引发问题,但解决方式是利用 proguard 配置文件,而不是代码。其实误报率里的水分(有偏高的水分也有偏低的水分)很大一部分原因就是上述提到的 2/3/4,ELEGANT 把他们直接报告了出来,而实际上并不一定是开发者实际的(语义)需求。下面我也把这 15 个 App 所报出的 FIC Issues 的 API 进行了 TP 和 FP 的汇总,并列出了报告为 FP 的原因。其中 :white_check_mark: 表示 TP,:exclamation: 表示 FP,:question: 表示 TP 和 FP 都有(针对这种,我把它列为了 TP),同时列出了新发现(和目前版本已经有的)的一些第三方包。(我在考虑能不能找到一些 3rd party libs elimination 的工具进行集成)