Code recommendation has been an indispensable feature of IDE (Integrated Development Environment) for modern software developers. Android developers especially require code recommendation support to ensure high development efficiency and quality, as Android applications are developed based on Android application framework and thus are more pattern-based. Many techniques and tools have been developed to support code recommendation in different ways. However, it is not clear how these techniques and tools can be used in Android development and whether Android development can be well supported by them. In this paper, we present a qualitative review on code recommendation techniques and tools with the focus of support for Android development. We first categorize code recommendation techniques and tools reported in literatures and then evaluate them towards the requirements of Android development. The evaluation results enable us to draw a comprehensive image of how code recommendation benefits Android development and also the deficiencies of state-of-the-art code recommendation techniques in meeting specific requirements of Android development. Based on the evaluation, a comprehensive discussion is presented to suggest possible improvement and future research directions of code recommendation techniques.
{"title":"How Is Code Recommendation Applied in Android Development: A Qualitative Review","authors":"Junwei Wu, Liwei Shen, Wunan Guo, Wenyun Zhao","doi":"10.1109/SATE.2016.12","DOIUrl":"https://doi.org/10.1109/SATE.2016.12","url":null,"abstract":"Code recommendation has been an indispensable feature of IDE (Integrated Development Environment) for modern software developers. Android developers especially require code recommendation support to ensure high development efficiency and quality, as Android applications are developed based on Android application framework and thus are more pattern-based. Many techniques and tools have been developed to support code recommendation in different ways. However, it is not clear how these techniques and tools can be used in Android development and whether Android development can be well supported by them. In this paper, we present a qualitative review on code recommendation techniques and tools with the focus of support for Android development. We first categorize code recommendation techniques and tools reported in literatures and then evaluate them towards the requirements of Android development. The evaluation results enable us to draw a comprehensive image of how code recommendation benefits Android development and also the deficiencies of state-of-the-art code recommendation techniques in meeting specific requirements of Android development. Based on the evaluation, a comprehensive discussion is presented to suggest possible improvement and future research directions of code recommendation techniques.","PeriodicalId":344531,"journal":{"name":"2016 International Conference on Software Analysis, Testing and Evolution (SATE)","volume":"45 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125121339","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Fault localization aims to use testing information from executed test cases to help locate the fault position. However, obtaining testing information (including test results and coverage information) is expensive because it needs much manual effort. How to orderly choose and execute a small number of test cases, and in the meantime achieve a good effectiveness of fault localization in the case of unknowing testing information is still a challenge for us. In this paper, we propose a new test case prioritization algorithm for fault localization, which is based on the rank changes of suspicious values of program elements. Test case which can maximize the improvements of suspicious ranks of program elements may assign the highest priority for execution. A set of empirical studies have been designed and conducted on Siemens programs and four medium-sized programs. The results show that our algorithm can help reduce the debugging effort in terms of the percentage of statements needed to be inspected to locate faults in both single-fault and multi-fault programs.
{"title":"Test Case Prioritization Approach to Improving the Effectiveness of Fault Localization","authors":"Wenhao Fu, Huiqun Yu, Guisheng Fan, Xiang Ji","doi":"10.1109/SATE.2016.17","DOIUrl":"https://doi.org/10.1109/SATE.2016.17","url":null,"abstract":"Fault localization aims to use testing information from executed test cases to help locate the fault position. However, obtaining testing information (including test results and coverage information) is expensive because it needs much manual effort. How to orderly choose and execute a small number of test cases, and in the meantime achieve a good effectiveness of fault localization in the case of unknowing testing information is still a challenge for us. In this paper, we propose a new test case prioritization algorithm for fault localization, which is based on the rank changes of suspicious values of program elements. Test case which can maximize the improvements of suspicious ranks of program elements may assign the highest priority for execution. A set of empirical studies have been designed and conducted on Siemens programs and four medium-sized programs. The results show that our algorithm can help reduce the debugging effort in terms of the percentage of statements needed to be inspected to locate faults in both single-fault and multi-fault programs.","PeriodicalId":344531,"journal":{"name":"2016 International Conference on Software Analysis, Testing and Evolution (SATE)","volume":"9 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126125523","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
In software testing, Coincidental Correct (CC) test case, which implement the faulty statement but with a correct output, has been investigated with a negative effects on coverage-based fault localization. Coincidental correct test case identification and manipulation had been studied and many identification methods are proposed, in which clustering based method is widely used. In this paper, a machine learning based fuzzy classification technique is proposed. We first present an approach to identify truly CC test cases for single fault version programs. Then KNN algorithm is adopted to classify the remaining passed test cases and three types of modified fuzzy suspiciousness metrics are presented based on three proposed CC test cases manipulation strategies. Empirical studies are conducted on 102 faulty versions of six programs, and the results indicate that the proposed approach makes the recall and false positive of CC test cases are 82% and 5% in average. In addition, the proposed fuzzy CC test cases manipulation strategies can improve the effectiveness of fault localization.
{"title":"Identify Coincidental Correct Test Cases Based on Fuzzy Classification","authors":"Zheng Li, Meiying Li, Yong Liu, Jingyao Geng","doi":"10.1109/SATE.2016.19","DOIUrl":"https://doi.org/10.1109/SATE.2016.19","url":null,"abstract":"In software testing, Coincidental Correct (CC) test case, which implement the faulty statement but with a correct output, has been investigated with a negative effects on coverage-based fault localization. Coincidental correct test case identification and manipulation had been studied and many identification methods are proposed, in which clustering based method is widely used. In this paper, a machine learning based fuzzy classification technique is proposed. We first present an approach to identify truly CC test cases for single fault version programs. Then KNN algorithm is adopted to classify the remaining passed test cases and three types of modified fuzzy suspiciousness metrics are presented based on three proposed CC test cases manipulation strategies. Empirical studies are conducted on 102 faulty versions of six programs, and the results indicate that the proposed approach makes the recall and false positive of CC test cases are 82% and 5% in average. In addition, the proposed fuzzy CC test cases manipulation strategies can improve the effectiveness of fault localization.","PeriodicalId":344531,"journal":{"name":"2016 International Conference on Software Analysis, Testing and Evolution (SATE)","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131664382","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Software defect prediction plays an important role in software testing. We can build the prediction model based on historical data. However, for a new project, we cannot be able to build a good prediction model due to lack of historical data. Therefore, researchers have proposed the cross-project defect prediction (CPDP) methods to share the historical data among different projects. In practice, there may be the problems of instance distribution differences and feature redundancy in cross-project datasets. To investigate which is more important for CPDP, instance or feature, we take instance filter and feature selection as examples to show their efficiency for CPDP. Our experiments are conducted on NASA and PROMISE datasets, and the results indicate that feature selection performs better than instance filter in improving the performance of CPDP. We can conclude that feature could be more important than instance for CPDP.
{"title":"Which Is More Important for Cross-Project Defect Prediction: Instance or Feature?","authors":"Qiao Yu, Shujuan Jiang, Junyan Qian","doi":"10.1109/SATE.2016.22","DOIUrl":"https://doi.org/10.1109/SATE.2016.22","url":null,"abstract":"Software defect prediction plays an important role in software testing. We can build the prediction model based on historical data. However, for a new project, we cannot be able to build a good prediction model due to lack of historical data. Therefore, researchers have proposed the cross-project defect prediction (CPDP) methods to share the historical data among different projects. In practice, there may be the problems of instance distribution differences and feature redundancy in cross-project datasets. To investigate which is more important for CPDP, instance or feature, we take instance filter and feature selection as examples to show their efficiency for CPDP. Our experiments are conducted on NASA and PROMISE datasets, and the results indicate that feature selection performs better than instance filter in improving the performance of CPDP. We can conclude that feature could be more important than instance for CPDP.","PeriodicalId":344531,"journal":{"name":"2016 International Conference on Software Analysis, Testing and Evolution (SATE)","volume":"93 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131860983","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Code smells are used to describe code structures that may cause detrimental effects on software and should be refactored. Previous studies show that some code smells have significant effect on faults. However, how to refactor code smells to reduce bugs still needs more concern. We investigate the possibility of prioritizing code smell refactoring with the help of fault prediction results. We also investigate the possibility of improving the performance of fault prediction by using code smell detection results. We use Cohen's Kappa statistic to report agreements between results of code smell detections and fault predictions. We use fault prediction result as an indicator to guide code smell refactoring. Our results show that refactoring Blob, Long Parameter List, and Refused Parent Be Request may have a good chance to detect and fix bugs, and some code smells are particularly useful for improving the recall of fault prediction.
代码气味用于描述可能对软件造成有害影响的代码结构,应该对其进行重构。以前的研究表明,某些代码气味对错误有显著的影响。然而,如何重构代码气味以减少bug仍然需要更多的关注。我们研究了在故障预测结果的帮助下对代码气味重构进行优先级排序的可能性。我们还研究了利用代码气味检测结果提高故障预测性能的可能性。我们使用Cohen的Kappa统计来报告代码气味检测结果和故障预测之间的一致性。我们使用故障预测结果作为指标来指导代码气味重构。我们的结果表明,重构Blob、Long Parameter List和Refused Parent Be Request可能有很好的机会检测和修复bug,并且一些代码气味对于提高故障预测的召回率特别有用。
{"title":"Do We Have a Chance to Fix Bugs When Refactoring Code Smells?","authors":"Wanwangying Ma, Lin Chen, Yuming Zhou, Baowen Xu","doi":"10.1109/SATE.2016.11","DOIUrl":"https://doi.org/10.1109/SATE.2016.11","url":null,"abstract":"Code smells are used to describe code structures that may cause detrimental effects on software and should be refactored. Previous studies show that some code smells have significant effect on faults. However, how to refactor code smells to reduce bugs still needs more concern. We investigate the possibility of prioritizing code smell refactoring with the help of fault prediction results. We also investigate the possibility of improving the performance of fault prediction by using code smell detection results. We use Cohen's Kappa statistic to report agreements between results of code smell detections and fault predictions. We use fault prediction result as an indicator to guide code smell refactoring. Our results show that refactoring Blob, Long Parameter List, and Refused Parent Be Request may have a good chance to detect and fix bugs, and some code smells are particularly useful for improving the recall of fault prediction.","PeriodicalId":344531,"journal":{"name":"2016 International Conference on Software Analysis, Testing and Evolution (SATE)","volume":"171 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130027466","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
The rapidly increasing application of software makes for the growing requirement of software quality. In key areas like aviation, aerospace and communication, a tiny software failure may brings serious consequences. Once the defects in the one or more software entities are triggered, the software faults may propagate to the extra entities and result in the partial failure of the software or even the system-wide failure. Therefore, to reduce software failure rate and assure software quality, the software fault propagation laws and influences on the software system demand more attention to be detected and controlled in the early phase. So in this paper, the complex network theories and methods are introduced into the fault propagation research of the structured software. By constructing the complex network model of structured software and abstracting the software faults into the status of nodes in the network, the software fault propagation laws and influence factors are analyzed, and the structured software fault propagation model is built.
{"title":"Research on Relations between Software Network Structure and Fault Propagation","authors":"J. Ai, Linzhi Huang, Fei Wang, Jiaming Wang","doi":"10.1109/SATE.2016.18","DOIUrl":"https://doi.org/10.1109/SATE.2016.18","url":null,"abstract":"The rapidly increasing application of software makes for the growing requirement of software quality. In key areas like aviation, aerospace and communication, a tiny software failure may brings serious consequences. Once the defects in the one or more software entities are triggered, the software faults may propagate to the extra entities and result in the partial failure of the software or even the system-wide failure. Therefore, to reduce software failure rate and assure software quality, the software fault propagation laws and influences on the software system demand more attention to be detected and controlled in the early phase. So in this paper, the complex network theories and methods are introduced into the fault propagation research of the structured software. By constructing the complex network model of structured software and abstracting the software faults into the status of nodes in the network, the software fault propagation laws and influence factors are analyzed, and the structured software fault propagation model is built.","PeriodicalId":344531,"journal":{"name":"2016 International Conference on Software Analysis, Testing and Evolution (SATE)","volume":"40 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"134059974","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Crash reproduction, which spends much time of developers in reading and understanding source code, is a crucial yet time-consuming task in program debugging. To reduce the time and resource cost, automatic techniques of test generation have been proposed. These techniques aim to automatically generate test cases to reproduce the scenario of a crashed project. Unfortunately, due to the lack of a detailed comprehension of the source code, a generated test case may fail in reproducing an expected crash. In this paper, we propose an automatic approach to reproducible bug detection. This approach predicts whether a crash is difficult to reproduce or not via training a classifier based on historical reproducible crash data. If a crash is difficult to reproduce, it is better to assign the crash to a developer, instead of using an automatic technique of test generation. Our work can help to prioritize crashes and to save the cost of developers. Preliminary experiments show that our approach effectively detects reproducible crashes via evaluating 45 crashes.
{"title":"Automatic Reproducible Crash Detection","authors":"Yongfeng Gu, J. Xuan, T. Qian","doi":"10.1109/SATE.2016.15","DOIUrl":"https://doi.org/10.1109/SATE.2016.15","url":null,"abstract":"Crash reproduction, which spends much time of developers in reading and understanding source code, is a crucial yet time-consuming task in program debugging. To reduce the time and resource cost, automatic techniques of test generation have been proposed. These techniques aim to automatically generate test cases to reproduce the scenario of a crashed project. Unfortunately, due to the lack of a detailed comprehension of the source code, a generated test case may fail in reproducing an expected crash. In this paper, we propose an automatic approach to reproducible bug detection. This approach predicts whether a crash is difficult to reproduce or not via training a classifier based on historical reproducible crash data. If a crash is difficult to reproduce, it is better to assign the crash to a developer, instead of using an automatic technique of test generation. Our work can help to prioritize crashes and to save the cost of developers. Preliminary experiments show that our approach effectively detects reproducible crashes via evaluating 45 crashes.","PeriodicalId":344531,"journal":{"name":"2016 International Conference on Software Analysis, Testing and Evolution (SATE)","volume":"13 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116436820","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Powering is an important operation in many computation intensive workloads. This paper investigates the performance of different styles to calculate the powering operations from the application level. A series of small benchmark codes that calculate the powering operations in different ways are designed. Their performance is evaluated on Intel Xeon CPU under Intel compilation environments. The results show that the number of floating-point operations and the related runtime are sensitive to the value of the exponent Y and how it is used. When Y is an immediate integer number whose value is known at compile time, the cost of powering is much less than the situation when Y is an integer variable whose value is known at runtime. When Y is defined as a real variable, the cost of powering is always high, be it equals to an integer number or not. Based on the investigations, performance optimizations are applied to a kernel subroutine from a real-world supersonic combustion simulation code, which intensively involves powering operations. The result shows that the performance of that subroutine is improved for 13.25 times on the Intel Xeon E5-2692 CPU.
{"title":"Benchmarking the Powering Computations for Application Tuning","authors":"Yonggang Che, Chuanfu Xu, Zhenghua Wang","doi":"10.1109/SATE.2016.7","DOIUrl":"https://doi.org/10.1109/SATE.2016.7","url":null,"abstract":"Powering is an important operation in many computation intensive workloads. This paper investigates the performance of different styles to calculate the powering operations from the application level. A series of small benchmark codes that calculate the powering operations in different ways are designed. Their performance is evaluated on Intel Xeon CPU under Intel compilation environments. The results show that the number of floating-point operations and the related runtime are sensitive to the value of the exponent Y and how it is used. When Y is an immediate integer number whose value is known at compile time, the cost of powering is much less than the situation when Y is an integer variable whose value is known at runtime. When Y is defined as a real variable, the cost of powering is always high, be it equals to an integer number or not. Based on the investigations, performance optimizations are applied to a kernel subroutine from a real-world supersonic combustion simulation code, which intensively involves powering operations. The result shows that the performance of that subroutine is improved for 13.25 times on the Intel Xeon E5-2692 CPU.","PeriodicalId":344531,"journal":{"name":"2016 International Conference on Software Analysis, Testing and Evolution (SATE)","volume":"15 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127186907","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
As Android is one of the most popular open source mobile platforms, ensuring security and privacy of Android applications is very important. Android provides a permission mechanism which requires developers to declare sensitive resources their applications need, and users need to agree with this request when they install (for Android API level 22 or lower) or run (for Android API level 23) these applications. Although Android provides very good official documents to explain how to properly use permissions, unfortunately misuses even for the most popular permissions have been reported. Recently, Karim et al. propose an association rule mining based approach to better infer permissions that an API needs. In this work, to improve the effectiveness of the prior work, we propose an approach which is based on collaborative filtering technique, one of popular techniques used to build recommendation systems. Our approach is designed based on the intuition that apps that have similar features - inferred from the APIs that they use - usually share similar permissions. We evaluate the proposed approaches on 936 Android apps from F-Droid, which is a repository of free and open source Android applications. The experimental results show that our proposed approaches achieve significant improvement in terms of the precision, recall, F1-score and MAP of the top-k results over Karim et al.'s approach.
{"title":"What Permissions Should This Android App Request?","authors":"Lingfeng Bao, D. Lo, Xin Xia, Shanping Li","doi":"10.1109/SATE.2016.13","DOIUrl":"https://doi.org/10.1109/SATE.2016.13","url":null,"abstract":"As Android is one of the most popular open source mobile platforms, ensuring security and privacy of Android applications is very important. Android provides a permission mechanism which requires developers to declare sensitive resources their applications need, and users need to agree with this request when they install (for Android API level 22 or lower) or run (for Android API level 23) these applications. Although Android provides very good official documents to explain how to properly use permissions, unfortunately misuses even for the most popular permissions have been reported. Recently, Karim et al. propose an association rule mining based approach to better infer permissions that an API needs. In this work, to improve the effectiveness of the prior work, we propose an approach which is based on collaborative filtering technique, one of popular techniques used to build recommendation systems. Our approach is designed based on the intuition that apps that have similar features - inferred from the APIs that they use - usually share similar permissions. We evaluate the proposed approaches on 936 Android apps from F-Droid, which is a repository of free and open source Android applications. The experimental results show that our proposed approaches achieve significant improvement in terms of the precision, recall, F1-score and MAP of the top-k results over Karim et al.'s approach.","PeriodicalId":344531,"journal":{"name":"2016 International Conference on Software Analysis, Testing and Evolution (SATE)","volume":"5 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127017724","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}