首页 > 最新文献

2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)最新文献

英文 中文
Assessing the Threat of Untracked Changes in Software Evolution 评估软件演进中未跟踪变更的威胁
Pub Date : 2018-05-27 DOI: 10.1145/3180155.3180212
André C. Hora, Danilo Silva, M. T. Valente, R. Robbes
While refactoring is extensively performed by practitioners, many Mining Software Repositories (MSR) approaches do not detect nor keep track of refactorings when performing source code evolution analysis. In the best case, keeping track of refactorings could be unnecessary work; in the worst case, these untracked changes could significantly affect the performance of MSR approaches. Since the extent of the threat is unknown, the goal of this paper is to assess whether it is significant. Based on an extensive empirical study, we answer positively: we found that between 10 and 21% of changes at the method level in 15 large Java systems are untracked. This results in a large proportion (25%) of entities that may have their histories split by these changes, and a measurable effect on at least two MSR approaches. We conclude that handling untracked changes should be systematically considered by MSR studies.
虽然重构被实践者广泛地执行,但许多挖掘软件存储库(MSR)方法在执行源代码演化分析时没有检测或跟踪重构。在最好的情况下,跟踪重构可能是不必要的工作;在最坏的情况下,这些未跟踪的更改可能会显著影响MSR方法的性能。由于威胁的程度是未知的,本文的目标是评估它是否显著。基于广泛的实证研究,我们给出了肯定的回答:我们发现,在15个大型Java系统中,方法级别的更改中有10%到21%没有被跟踪。这导致很大一部分(25%)实体的历史可能因这些变化而分裂,并且对至少两种MSR方法产生了可测量的影响。我们的结论是,MSR研究应该系统地考虑处理未跟踪的变化。
{"title":"Assessing the Threat of Untracked Changes in Software Evolution","authors":"André C. Hora, Danilo Silva, M. T. Valente, R. Robbes","doi":"10.1145/3180155.3180212","DOIUrl":"https://doi.org/10.1145/3180155.3180212","url":null,"abstract":"While refactoring is extensively performed by practitioners, many Mining Software Repositories (MSR) approaches do not detect nor keep track of refactorings when performing source code evolution analysis. In the best case, keeping track of refactorings could be unnecessary work; in the worst case, these untracked changes could significantly affect the performance of MSR approaches. Since the extent of the threat is unknown, the goal of this paper is to assess whether it is significant. Based on an extensive empirical study, we answer positively: we found that between 10 and 21% of changes at the method level in 15 large Java systems are untracked. This results in a large proportion (25%) of entities that may have their histories split by these changes, and a measurable effect on at least two MSR approaches. We conclude that handling untracked changes should be systematically considered by MSR studies.","PeriodicalId":6560,"journal":{"name":"2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)","volume":"12 1","pages":"1102-1113"},"PeriodicalIF":0.0,"publicationDate":"2018-05-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"78196053","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}
引用次数: 21
Augusto: Exploiting Popular Functionalities for the Generation of Semantic GUI Tests with Oracles Augusto:利用oracle开发生成语义GUI测试的流行功能
Pub Date : 2018-05-27 DOI: 10.1145/3180155.3180162
L. Mariani, M. Pezzè, D. Zuddas
Testing software applications by interacting with their graphical user interface (GUI) is an expensive and complex process. Current automatic test case generation techniques implement explorative approaches that, although producing useful test cases, have a limited capability of covering semantically relevant interactions, thus frequently missing important testing scenarios. These techniques typically interact with the available widgets following the structure of the GUI, without any guess about the functions that are executed. In this paper we propose Augusto, a test case generation technique that exploits a built-in knowledge of the semantics associated with popular and well-known functionalities, such as CRUD operations, to automatically generate effective test cases with automated functional oracles. Empirical results indicate that Augusto can reveal faults that cannot be revealed with state of the art techniques.
通过与图形用户界面(GUI)交互来测试软件应用程序是一个昂贵且复杂的过程。当前的自动测试用例生成技术实现了探索性的方法,尽管产生了有用的测试用例,但是覆盖语义相关交互的能力有限,因此经常错过重要的测试场景。这些技术通常按照GUI的结构与可用的小部件进行交互,而无需猜测所执行的函数。在本文中,我们提出了Augusto,这是一种测试用例生成技术,它利用与流行的和众所周知的功能(如CRUD操作)相关的语义的内置知识,用自动化的功能预言机自动生成有效的测试用例。实证结果表明,奥古斯托可以揭示现有技术无法揭示的断层。
{"title":"Augusto: Exploiting Popular Functionalities for the Generation of Semantic GUI Tests with Oracles","authors":"L. Mariani, M. Pezzè, D. Zuddas","doi":"10.1145/3180155.3180162","DOIUrl":"https://doi.org/10.1145/3180155.3180162","url":null,"abstract":"Testing software applications by interacting with their graphical user interface (GUI) is an expensive and complex process. Current automatic test case generation techniques implement explorative approaches that, although producing useful test cases, have a limited capability of covering semantically relevant interactions, thus frequently missing important testing scenarios. These techniques typically interact with the available widgets following the structure of the GUI, without any guess about the functions that are executed. In this paper we propose Augusto, a test case generation technique that exploits a built-in knowledge of the semantics associated with popular and well-known functionalities, such as CRUD operations, to automatically generate effective test cases with automated functional oracles. Empirical results indicate that Augusto can reveal faults that cannot be revealed with state of the art techniques.","PeriodicalId":6560,"journal":{"name":"2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)","volume":"24 1","pages":"280-290"},"PeriodicalIF":0.0,"publicationDate":"2018-05-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"74603349","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}
引用次数: 40
A Combinatorial Approach for Exposing Off-Nominal Behaviors 一种揭露非名义行为的组合方法
Pub Date : 2018-05-27 DOI: 10.1145/3180155.3180204
Kaushik Madala, Hyunsook Do, Daniel Aceituna
Off-nominal behaviors (ONBs) have been a major concern in the areas of embedded systems and safety-critical systems. To address ONB problems, some researchers have proposed model-based approaches that can expose ONBs by analyzing natural language requirements documents. While these approaches produced promising results, they require a lot of human effort and time. In this paper, to reduce human effort and time, we propose a combinatorial–based approach, Combinatorial Causal Component Model (Combi-CCM), which uses structured requirements patterns and combinations generated using the IPOG algorithm. We conducted an empirical study using several requirements documents to evaluate our approach, and our results indicate that the proposed approach can reduce human effort and time while maintaining the same ONB exposure ability obtained by the control techniques.
非名义行为(onb)一直是嵌入式系统和安全关键系统领域关注的主要问题。为了解决ONB问题,一些研究人员提出了基于模型的方法,可以通过分析自然语言需求文档来暴露ONB。虽然这些方法产生了有希望的结果,但它们需要大量的人力和时间。在本文中,为了减少人力和时间,我们提出了一种基于组合的方法,组合因果组件模型(Combi-CCM),它使用使用IPOG算法生成的结构化需求模式和组合。我们使用几个需求文档进行了实证研究来评估我们的方法,我们的结果表明,我们提出的方法可以减少人力和时间,同时保持与控制技术相同的ONB暴露能力。
{"title":"A Combinatorial Approach for Exposing Off-Nominal Behaviors","authors":"Kaushik Madala, Hyunsook Do, Daniel Aceituna","doi":"10.1145/3180155.3180204","DOIUrl":"https://doi.org/10.1145/3180155.3180204","url":null,"abstract":"Off-nominal behaviors (ONBs) have been a major concern in the areas of embedded systems and safety-critical systems. To address ONB problems, some researchers have proposed model-based approaches that can expose ONBs by analyzing natural language requirements documents. While these approaches produced promising results, they require a lot of human effort and time. In this paper, to reduce human effort and time, we propose a combinatorial–based approach, Combinatorial Causal Component Model (Combi-CCM), which uses structured requirements patterns and combinations generated using the IPOG algorithm. We conducted an empirical study using several requirements documents to evaluate our approach, and our results indicate that the proposed approach can reduce human effort and time while maintaining the same ONB exposure ability obtained by the control techniques.","PeriodicalId":6560,"journal":{"name":"2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)","volume":"15 1","pages":"910-920"},"PeriodicalIF":0.0,"publicationDate":"2018-05-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"73318076","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}
引用次数: 10
Perses: Syntax-Guided Program Reduction 语法引导的程序简化
Pub Date : 2018-05-27 DOI: 10.1145/3180155.3180236
Chengnian Sun, Yuanbo Li, Qirun Zhang, Tianxiao Gu, Z. Su
Given a program P that exhibits a certain property ψ (e.g., a C program that crashes GCC when it is being compiled), the goal of program reduction is to minimize P to a smaller variant P? that still exhibits the same property, i.e., ψ(P'). Program reduction is important and widely demanded for testing and debugging. For example, all compiler/interpreter development projects need effective program reduction to minimize failure-inducing test programs to ease debugging. However, state-of-the-art program reduction techniques — notably Delta Debugging (DD), Hierarchical Delta Debugging (HDD), and C-Reduce — do not perform well in terms of speed (reduction time) and quality (size of reduced programs), or are highly customized for certain languages and thus lack generality. This paper presents Perses, a novel framework for effective, efficient, and general program reduction. The key insight is to exploit, in a general manner, the formal syntax of the programs under reduction and ensure that each reduction step considers only smaller, syntactically valid variants to avoid futile efforts on syntactically invalid variants. Our framework supports not only deletion (as for DD and HDD), but also general, effective program transformations. We have designed and implemented Perses, and evaluated it for two language settings: C and Java. Our evaluation results on 20 C programs triggering bugs in GCC and Clang demonstrate Perses's strong practicality compared to the state-of-the-art: (1) smaller size — Perses's results are respectively 2% and 45% in size of those from DD and HDD; and (2) shorter reduction time — Perses takes 23% and 47% time taken by DD and HDD respectively. Even when compared to the highly customized and optimized C-Reduce for C/C++, Perses takes only 38-60% reduction time.
给定一个程序P,它表现出某种属性ψ(例如,一个C程序在编译时使GCC崩溃),程序缩减的目标是将P最小化到一个较小的变量P?仍然表现出相同的性质,即ψ(P')程序精简对于测试和调试来说是非常重要的,也是广泛需要的。例如,所有编译器/解释器开发项目都需要有效的程序缩减,以最小化导致失败的测试程序,从而简化调试。然而,最先进的程序缩减技术——特别是增量调试(DD)、分层增量调试(HDD)和C-Reduce——在速度(缩减时间)和质量(缩减程序的大小)方面表现不佳,或者是针对某些语言高度定制的,因此缺乏通用性。本文提出了Perses,一个有效的、高效的、通用的程序缩减的新框架。关键的见解是以一般的方式利用约简程序的形式语法,并确保每个约简步骤只考虑较小的、语法上有效的变体,以避免在语法上无效的变体上做无谓的努力。我们的框架不仅支持删除(如DD和HDD),还支持一般的、有效的程序转换。我们已经设计并实现了Perses,并在两种语言设置下对其进行了评估:C和Java。我们对在GCC和Clang中触发bug的20个C程序的评估结果表明,与最先进的程序相比,Perses具有强大的实用性:(1)更小的尺寸- Perses的结果分别是来自DD和HDD的2%和45%;(2)更短的还原时间——Perses的还原时间分别为DD和HDD的23%和47%。即使与针对C/ c++的高度定制和优化的C- reduce相比,Perses也只需要38-60%的减少时间。
{"title":"Perses: Syntax-Guided Program Reduction","authors":"Chengnian Sun, Yuanbo Li, Qirun Zhang, Tianxiao Gu, Z. Su","doi":"10.1145/3180155.3180236","DOIUrl":"https://doi.org/10.1145/3180155.3180236","url":null,"abstract":"Given a program P that exhibits a certain property ψ (e.g., a C program that crashes GCC when it is being compiled), the goal of program reduction is to minimize P to a smaller variant P? that still exhibits the same property, i.e., ψ(P'). Program reduction is important and widely demanded for testing and debugging. For example, all compiler/interpreter development projects need effective program reduction to minimize failure-inducing test programs to ease debugging. However, state-of-the-art program reduction techniques — notably Delta Debugging (DD), Hierarchical Delta Debugging (HDD), and C-Reduce — do not perform well in terms of speed (reduction time) and quality (size of reduced programs), or are highly customized for certain languages and thus lack generality. This paper presents Perses, a novel framework for effective, efficient, and general program reduction. The key insight is to exploit, in a general manner, the formal syntax of the programs under reduction and ensure that each reduction step considers only smaller, syntactically valid variants to avoid futile efforts on syntactically invalid variants. Our framework supports not only deletion (as for DD and HDD), but also general, effective program transformations. We have designed and implemented Perses, and evaluated it for two language settings: C and Java. Our evaluation results on 20 C programs triggering bugs in GCC and Clang demonstrate Perses's strong practicality compared to the state-of-the-art: (1) smaller size — Perses's results are respectively 2% and 45% in size of those from DD and HDD; and (2) shorter reduction time — Perses takes 23% and 47% time taken by DD and HDD respectively. Even when compared to the highly customized and optimized C-Reduce for C/C++, Perses takes only 38-60% reduction time.","PeriodicalId":6560,"journal":{"name":"2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)","volume":"36 1","pages":"361-371"},"PeriodicalIF":0.0,"publicationDate":"2018-05-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"73348748","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}
引用次数: 80
Towards Refactoring-Aware Regression Test Selection 面向重构感知回归测试选择
Pub Date : 2018-05-27 DOI: 10.1145/3180155.3180254
Kaiyuan Wang, Chenguang Zhu, Ahmet Çelik, Jongwook Kim, D. Batory, Miloš Gligorić
Regression testing checks that recent project changes do not break previously working functionality. Although important, regression testing is costly when changes are frequent. Regression test selection (RTS) optimizes regression testing by running only tests whose results might be affected by a change. Traditionally, RTS collects dependencies (e.g., on files) for each test and skips the tests, at a new project revision, whose dependencies did not change. Existing RTS techniques do not differentiate behavior-preserving transformations (i.e., refactorings) from other code changes. As a result, tests are run more frequently than necessary. We present the first step towards a refactoring-aware RTS technique, dubbed Reks, which skips tests affected only by behavior-preserving changes. Reks defines rules to update the test dependencies without running the tests. To ensure that Reks does not hide any bug introduced by the refactoring engines, we integrate Reks only in the pre-submit testing phase, which happens on the developers' machines. We evaluate Reks by measuring the savings in the testing effort. Specifically, we reproduce 100 refactoring tasks performed by developers of 37 projects on GitHub. Our results show that Reks would not run, on average, 33% of available tests (that would be run by a refactoring-unaware RTS technique). Additionally, we systematically run 27 refactoring types on ten projects. The results, based on 74,160 refactoring tasks, show that Reks would not run, on average, 16% of tests (max: 97% and SD: 24%). Finally, our results show that the Reks update rules are efficient.
回归测试检查最近的项目变更不会破坏以前的工作功能。虽然回归测试很重要,但是当变更频繁时,回归测试的成本很高。回归测试选择(RTS)通过只运行结果可能受更改影响的测试来优化回归测试。传统上,RTS为每个测试收集依赖项(例如,在文件上),并在依赖项没有改变的新项目修订时跳过测试。现有的RTS技术并不能将保留行为的转换(即重构)与其他代码更改区分开来。因此,测试的运行频率比必要的要高。我们向重构感知RTS技术迈出了第一步,称为Reks,它跳过了仅受行为保留变化影响的测试。Reks定义了在不运行测试的情况下更新测试依赖的规则。为了确保Reks不会隐藏重构引擎引入的任何错误,我们只在提交前测试阶段集成Reks,这发生在开发人员的机器上。我们通过测量测试工作中的节省来评估Reks。具体来说,我们在GitHub上重现了37个项目的开发人员执行的100个重构任务。我们的结果表明,Reks平均不会运行33%的可用测试(这将由不了解重构的RTS技术运行)。此外,我们在10个项目上系统地运行了27种重构类型。基于74160个重构任务的结果显示,Reks平均不会运行16%的测试(最大值:97%,标准差:24%)。最后,我们的结果表明Reks更新规则是有效的。
{"title":"Towards Refactoring-Aware Regression Test Selection","authors":"Kaiyuan Wang, Chenguang Zhu, Ahmet Çelik, Jongwook Kim, D. Batory, Miloš Gligorić","doi":"10.1145/3180155.3180254","DOIUrl":"https://doi.org/10.1145/3180155.3180254","url":null,"abstract":"Regression testing checks that recent project changes do not break previously working functionality. Although important, regression testing is costly when changes are frequent. Regression test selection (RTS) optimizes regression testing by running only tests whose results might be affected by a change. Traditionally, RTS collects dependencies (e.g., on files) for each test and skips the tests, at a new project revision, whose dependencies did not change. Existing RTS techniques do not differentiate behavior-preserving transformations (i.e., refactorings) from other code changes. As a result, tests are run more frequently than necessary. We present the first step towards a refactoring-aware RTS technique, dubbed Reks, which skips tests affected only by behavior-preserving changes. Reks defines rules to update the test dependencies without running the tests. To ensure that Reks does not hide any bug introduced by the refactoring engines, we integrate Reks only in the pre-submit testing phase, which happens on the developers' machines. We evaluate Reks by measuring the savings in the testing effort. Specifically, we reproduce 100 refactoring tasks performed by developers of 37 projects on GitHub. Our results show that Reks would not run, on average, 33% of available tests (that would be run by a refactoring-unaware RTS technique). Additionally, we systematically run 27 refactoring types on ten projects. The results, based on 74,160 refactoring tasks, show that Reks would not run, on average, 16% of tests (max: 97% and SD: 24%). Finally, our results show that the Reks update rules are efficient.","PeriodicalId":6560,"journal":{"name":"2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)","volume":"13 1","pages":"233-244"},"PeriodicalIF":0.0,"publicationDate":"2018-05-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"84984320","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}
引用次数: 23
A Temporal Permission Analysis and Enforcement Framework for Android Android的临时权限分析和执行框架
Pub Date : 2018-05-27 DOI: 10.1145/3180155.3180172
Alireza Sadeghi, Reyhaneh Jabbarvand, Negar Ghorbani, H. Bagheri, S. Malek
Permission-induced attacks, i.e., security breaches enabled by permission misuse, are among the most critical and frequent issues threatening the security of Android devices. By ignoring the temporal aspects of an attack during the analysis and enforcement, the state-of-the-art approaches aimed at protecting the users against such attacks are prone to have low-coverage in detection and high-disruption in prevention of permission-induced attacks. To address the aforementioned shortcomings, we present TERMINATOR, a temporal permission analysis and enforcement framework for Android. Leveraging temporal logic model checking, TERMINATOR's analyzer identifies permission-induced threats with respect to dynamic permission states of the apps. At runtime, TERMINATOR's enforcer selectively leases (i.e., temporarily grants) permissions to apps when the system is in a safe state, and revokes the permissions when the system moves to an unsafe state realizing the identified threats. The results of our experiments, conducted over thousands of apps, indicate that TERMINATOR is able to provide an effective, yet non-disruptive defense against permission-induced attacks. We also show that our approach, which does not require modification to the Android framework or apps' implementation logic, is highly reliable and widely applicable.
权限引发的攻击,即由权限滥用导致的安全漏洞,是威胁Android设备安全的最严重和最常见的问题之一。由于在分析和实施过程中忽略了攻击的时间方面,旨在保护用户免受此类攻击的最先进方法在检测方面的覆盖率很低,而在预防许可引发的攻击方面则容易出现高中断。为了解决上述缺点,我们提出了TERMINATOR,一个用于Android的临时权限分析和执行框架。利用时间逻辑模型检查,TERMINATOR的分析器根据应用程序的动态许可状态识别许可引起的威胁。在运行时,TERMINATOR的执行者在系统处于安全状态时选择性地租用(即,临时授予)权限给应用程序,并在系统移动到实现已识别威胁的不安全状态时撤销权限。我们对数千个应用程序进行的实验结果表明,TERMINATOR能够提供有效且非破坏性的防御,以抵御许可引发的攻击。我们还表明,我们的方法,不需要修改Android框架或应用程序的实现逻辑,是高度可靠和广泛适用的。
{"title":"A Temporal Permission Analysis and Enforcement Framework for Android","authors":"Alireza Sadeghi, Reyhaneh Jabbarvand, Negar Ghorbani, H. Bagheri, S. Malek","doi":"10.1145/3180155.3180172","DOIUrl":"https://doi.org/10.1145/3180155.3180172","url":null,"abstract":"Permission-induced attacks, i.e., security breaches enabled by permission misuse, are among the most critical and frequent issues threatening the security of Android devices. By ignoring the temporal aspects of an attack during the analysis and enforcement, the state-of-the-art approaches aimed at protecting the users against such attacks are prone to have low-coverage in detection and high-disruption in prevention of permission-induced attacks. To address the aforementioned shortcomings, we present TERMINATOR, a temporal permission analysis and enforcement framework for Android. Leveraging temporal logic model checking, TERMINATOR's analyzer identifies permission-induced threats with respect to dynamic permission states of the apps. At runtime, TERMINATOR's enforcer selectively leases (i.e., temporarily grants) permissions to apps when the system is in a safe state, and revokes the permissions when the system moves to an unsafe state realizing the identified threats. The results of our experiments, conducted over thousands of apps, indicate that TERMINATOR is able to provide an effective, yet non-disruptive defense against permission-induced attacks. We also show that our approach, which does not require modification to the Android framework or apps' implementation logic, is highly reliable and widely applicable.","PeriodicalId":6560,"journal":{"name":"2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)","volume":"1 1","pages":"846-857"},"PeriodicalIF":0.0,"publicationDate":"2018-05-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"89627559","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}
引用次数: 32
Towards Practical Program Repair with On-demand Candidate Generation 实现按需候选生成的实用程序修复
Pub Date : 2018-05-27 DOI: 10.1145/3180155.3180245
Jinru Hua, Mengshi Zhang, Kaiyuan Wang, S. Khurshid
Effective program repair techniques, which modify faulty programs to fix them with respect to given test suites, can substantially reduce the cost of manual debugging. A common repair approach is to iteratively first generate candidate programs with possible bug fixes and then validate them against the given tests until a candidate that passes all the tests is found. While this approach is conceptually simple, due to the potentially high number of candidates that need to first be generated and then be compiled and tested, existing repair techniques that embody this approach have relatively low effectiveness, especially for faults at a fine granularity. To tackle this limitation, we introduce a novel repair technique, SketchFix, which generates candidate fixes on demand (as needed) during the test execution. Instead of iteratively re-compiling and re-executing each actual candidate program, SketchFix translates faulty programs to sketches, i.e., partial programs with "holes", and compiles each sketch once which may represent thousands of concrete candidates. With the insight that the space of candidates can be reduced substantially by utilizing the runtime behaviors of the tests, SketchFix lazily initializes the candidates of the sketches while validating them against the test execution. We experimentally evaluate SketchFix on the Defects4J benchmark and the experimental results show that SketchFix works particularly well in repairing bugs with expression manipulation at the AST node-level granularity compared to other program repair techniques. Specifically, SketchFix correctly fixes 19 out of 357 defects in 23 minutes on average using the default setting. In addition, SketchFix finds the first repair with 1.6% of re-compilations (#compiled sketches/#candidates) and 3.0% of re-executions out of all repair candidates.
有效的程序修复技术,根据给定的测试套件修改有缺陷的程序来修复它们,可以大大减少手工调试的成本。一种常见的修复方法是迭代地首先生成具有可能的错误修复的候选程序,然后根据给定的测试验证它们,直到找到通过所有测试的候选程序。虽然这种方法在概念上很简单,但是由于需要首先生成大量的候选错误,然后进行编译和测试,因此包含这种方法的现有修复技术的有效性相对较低,特别是对于细粒度的错误。为了解决这个限制,我们引入了一种新的修复技术,SketchFix,它在测试执行期间按需生成候选修复。SketchFix不是迭代地重新编译和重新执行每个实际的候选程序,而是将有缺陷的程序转换为草图,即有“漏洞”的部分程序,并编译每个草图一次,这可能代表数千个具体的候选程序。考虑到候选空间可以通过利用测试的运行时行为大大减少,SketchFix在根据测试执行进行验证时惰性地初始化草图的候选空间。我们在缺陷4j基准上对SketchFix进行了实验评估,实验结果表明,与其他程序修复技术相比,SketchFix在AST节点级粒度上修复表达式操作的错误方面表现得特别好。具体来说,使用默认设置,SketchFix平均在23分钟内正确修复了357个缺陷中的19个。此外,在所有修复候选程序中,SketchFix发现第一次修复只需要重新编译1.6%(#已编译的草图/#候选程序)和重新执行3.0%。
{"title":"Towards Practical Program Repair with On-demand Candidate Generation","authors":"Jinru Hua, Mengshi Zhang, Kaiyuan Wang, S. Khurshid","doi":"10.1145/3180155.3180245","DOIUrl":"https://doi.org/10.1145/3180155.3180245","url":null,"abstract":"Effective program repair techniques, which modify faulty programs to fix them with respect to given test suites, can substantially reduce the cost of manual debugging. A common repair approach is to iteratively first generate candidate programs with possible bug fixes and then validate them against the given tests until a candidate that passes all the tests is found. While this approach is conceptually simple, due to the potentially high number of candidates that need to first be generated and then be compiled and tested, existing repair techniques that embody this approach have relatively low effectiveness, especially for faults at a fine granularity. To tackle this limitation, we introduce a novel repair technique, SketchFix, which generates candidate fixes on demand (as needed) during the test execution. Instead of iteratively re-compiling and re-executing each actual candidate program, SketchFix translates faulty programs to sketches, i.e., partial programs with \"holes\", and compiles each sketch once which may represent thousands of concrete candidates. With the insight that the space of candidates can be reduced substantially by utilizing the runtime behaviors of the tests, SketchFix lazily initializes the candidates of the sketches while validating them against the test execution. We experimentally evaluate SketchFix on the Defects4J benchmark and the experimental results show that SketchFix works particularly well in repairing bugs with expression manipulation at the AST node-level granularity compared to other program repair techniques. Specifically, SketchFix correctly fixes 19 out of 357 defects in 23 minutes on average using the default setting. In addition, SketchFix finds the first repair with 1.6% of re-compilations (#compiled sketches/#candidates) and 3.0% of re-executions out of all repair candidates.","PeriodicalId":6560,"journal":{"name":"2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)","volume":"20 1","pages":"12-23"},"PeriodicalIF":0.0,"publicationDate":"2018-05-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"88533090","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}
引用次数: 118
ConflictJS: Finding and Understanding Conflicts Between JavaScript Libraries 发现和理解JavaScript库之间的冲突
Pub Date : 2018-05-27 DOI: 10.1145/3180155.3180184
Jibesh Patra, Pooja N. Dixit, Michael Pradel
It is a common practice for client-side web applications to build on various third-party JavaScript libraries. Due to the lack of namespaces in JavaScript, these libraries all share the same global namespace. As a result, one library may inadvertently modify or even delete the APIs of another library, causing unexpected behavior of library clients. Given the quickly increasing number of libraries, manually keeping track of such conflicts is practically impossible both for library developers and users. This paper presents ConflictJS, an automated and scalable approach to analyze libraries for conflicts. The key idea is to tackle the huge search space of possible conflicts in two phases. At first, a dynamic analysis of individual libraries identifies pairs of potentially conflicting libraries. Then, targeted test synthesis validates potential conflicts by creating a client application that suffers from a conflict. The overall approach is free of false positives, in the sense that it reports a problem only when such a client exists. We use ConflictJS to analyze and study conflicts among 951 real-world libraries. The results show that one out of four libraries is potentially conflicting and that 166 libraries are involved in at least one certain conflict. The detected conflicts cause crashes and other kinds of unexpected behavior. Our work helps library developers to prevent conflicts, library users to avoid combining conflicting libraries, and provides evidence that designing a language without explicit namespaces has undesirable effects.
客户端web应用程序在各种第三方JavaScript库上构建是一种常见的做法。由于JavaScript中缺少名称空间,这些库都共享相同的全局名称空间。因此,一个库可能会无意中修改甚至删除另一个库的api,从而导致库客户端出现意外行为。考虑到库数量的快速增长,手动跟踪这些冲突对于库开发人员和用户来说实际上是不可能的。本文介绍了ConflictJS,这是一种自动化的、可扩展的冲突库分析方法。关键思想是分两个阶段处理可能冲突的巨大搜索空间。首先,对单个库进行动态分析,确定可能存在冲突的库对。然后,目标测试合成通过创建一个存在冲突的客户端应用程序来验证潜在的冲突。整个方法没有误报,也就是说,只有当这样的客户机存在时,它才会报告问题。我们使用ConflictJS来分析和研究951个真实库之间的冲突。结果显示,四分之一的图书馆存在潜在的冲突,166家图书馆至少卷入了一种冲突。检测到的冲突会导致崩溃和其他类型的意外行为。我们的工作帮助库开发人员防止冲突,帮助库用户避免组合冲突的库,并提供证据证明设计没有显式名称空间的语言会产生不良影响。
{"title":"ConflictJS: Finding and Understanding Conflicts Between JavaScript Libraries","authors":"Jibesh Patra, Pooja N. Dixit, Michael Pradel","doi":"10.1145/3180155.3180184","DOIUrl":"https://doi.org/10.1145/3180155.3180184","url":null,"abstract":"It is a common practice for client-side web applications to build on various third-party JavaScript libraries. Due to the lack of namespaces in JavaScript, these libraries all share the same global namespace. As a result, one library may inadvertently modify or even delete the APIs of another library, causing unexpected behavior of library clients. Given the quickly increasing number of libraries, manually keeping track of such conflicts is practically impossible both for library developers and users. This paper presents ConflictJS, an automated and scalable approach to analyze libraries for conflicts. The key idea is to tackle the huge search space of possible conflicts in two phases. At first, a dynamic analysis of individual libraries identifies pairs of potentially conflicting libraries. Then, targeted test synthesis validates potential conflicts by creating a client application that suffers from a conflict. The overall approach is free of false positives, in the sense that it reports a problem only when such a client exists. We use ConflictJS to analyze and study conflicts among 951 real-world libraries. The results show that one out of four libraries is potentially conflicting and that 166 libraries are involved in at least one certain conflict. The detected conflicts cause crashes and other kinds of unexpected behavior. Our work helps library developers to prevent conflicts, library users to avoid combining conflicting libraries, and provides evidence that designing a language without explicit namespaces has undesirable effects.","PeriodicalId":6560,"journal":{"name":"2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)","volume":"45 1","pages":"741-751"},"PeriodicalIF":0.0,"publicationDate":"2018-05-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"79016874","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}
引用次数: 37
Inferring Hierarchical Motifs from Execution Traces 从执行轨迹推断分层主题
Pub Date : 2018-05-27 DOI: 10.1145/3180155.3180216
Saba Alimadadi, A. Mesbah, K. Pattabiraman
Program comprehension is a necessary step for performing many software engineering tasks. Dynamic analysis is effective in producing execution traces that assist comprehension. Traces are rich sources of information regarding the behaviour of a program. However, it is challenging to gain insight from traces due to their overwhelming amount of data and complexity. We propose a generic technique for facilitating comprehension by inferring recurring execution motifs. Inspired by bioinformatics, motifs are patterns in traces that are flexible to small changes in execution, and are captured in a hierarchical model. The hierarchical nature of the model provides an overview of the behaviour at a high-level, while preserving the execution details and intermediate levels in a structured manner. We design a visualization that allows developers to observe and interact with the model. We implement our approach in an open-source tool, called Sabalan, and evaluate it through a user experiment. The results show that using Sabalan improves developers' accuracy in performing comprehension tasks by 54%.
程序理解是执行许多软件工程任务的必要步骤。动态分析在生成有助于理解的执行轨迹方面是有效的。跟踪是关于程序行为的丰富信息源。然而,由于它们的数据量和复杂性,从跟踪中获得洞察力是具有挑战性的。我们提出了一种通用技术,通过推断反复出现的执行主题来促进理解。受到生物信息学的启发,基序是对执行中的微小变化具有灵活性的痕迹模式,并在分层模型中捕获。模型的层次结构本质提供了对行为的高层概述,同时以结构化的方式保留了执行细节和中间级别。我们设计了一个可视化,允许开发人员观察模型并与之交互。我们在一个名为Sabalan的开源工具中实现了我们的方法,并通过用户实验对其进行了评估。结果表明,使用Sabalan可以使开发人员执行理解任务的准确性提高54%。
{"title":"Inferring Hierarchical Motifs from Execution Traces","authors":"Saba Alimadadi, A. Mesbah, K. Pattabiraman","doi":"10.1145/3180155.3180216","DOIUrl":"https://doi.org/10.1145/3180155.3180216","url":null,"abstract":"Program comprehension is a necessary step for performing many software engineering tasks. Dynamic analysis is effective in producing execution traces that assist comprehension. Traces are rich sources of information regarding the behaviour of a program. However, it is challenging to gain insight from traces due to their overwhelming amount of data and complexity. We propose a generic technique for facilitating comprehension by inferring recurring execution motifs. Inspired by bioinformatics, motifs are patterns in traces that are flexible to small changes in execution, and are captured in a hierarchical model. The hierarchical nature of the model provides an overview of the behaviour at a high-level, while preserving the execution details and intermediate levels in a structured manner. We design a visualization that allows developers to observe and interact with the model. We implement our approach in an open-source tool, called Sabalan, and evaluate it through a user experiment. The results show that using Sabalan improves developers' accuracy in performing comprehension tasks by 54%.","PeriodicalId":6560,"journal":{"name":"2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)","volume":"96 1","pages":"776-787"},"PeriodicalIF":0.0,"publicationDate":"2018-05-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"79937776","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}
引用次数: 21
Hybrid Regression Test Selection 混合回归检验选择
Pub Date : 2018-05-27 DOI: 10.1145/3180155.3180198
Lingming Zhang
Regression testing is crucial but can be extremely costly. Regression Test Selection (RTS) aims to reduce regression testing cost by only selecting and running the tests that may be affected by code changes. To date, various RTS techniques analyzing at different granularities (e.g., at the basic-block, method, and file levels) have been proposed. RTS techniques working on finer granularities may be more precise in selecting tests, while techniques working on coarser granularities may have lower overhead. According to a recent study, RTS at the file level (FRTS) can have less overall testing time compared with a finer grained technique at the method level, and represents state-of-the-art RTS. In this paper, we present the first hybrid RTS approach, HyRTS, that analyzes at multiple granularities to combine the strengths of traditional RTS techniques at different granularities. We implemented the basic HyRTS technique by combining the method and file granularity RTS. The experimental results on 2707 revisions of 32 projects, totalling over 124 Million LoC, demonstrate that HyRTS outperforms state-of-the-art FRTS significantly in terms of selected test ratio and the offline testing time. We also studied the impacts of each type of method-level changes, and further designed two new HyRTS variants based on the study results. Our additional experiments show that transforming instance method additions/deletions into file-level changes produces an even more effective HyRTS variant that can significantly outperform FRTS in both offline and online testing time.
回归测试是至关重要的,但可能非常昂贵。回归测试选择(RTS)旨在通过只选择和运行可能受代码更改影响的测试来减少回归测试的成本。到目前为止,已经提出了在不同粒度(例如,在基本块、方法和文件级别)上分析的各种RTS技术。处理更细粒度的RTS技术在选择测试时可能更精确,而处理更粗粒度的技术可能开销更低。根据最近的一项研究,与方法级别的细粒度技术相比,文件级别的RTS (FRTS)可以节省更少的总体测试时间,并且代表了最先进的RTS。在本文中,我们提出了第一种混合RTS方法,HyRTS,它在多个粒度上进行分析,以结合传统RTS技术在不同粒度上的优势。我们通过结合方法和文件粒度RTS来实现基本的HyRTS技术。通过对32个项目2707次修订,总计超过1.24亿LoC的实验结果表明,HyRTS在选择测试比例和离线测试时间方面明显优于最先进的FRTS。我们还研究了每种方法水平变化的影响,并根据研究结果进一步设计了两种新的HyRTS变体。我们的其他实验表明,将实例方法的添加/删除转换为文件级更改会产生更有效的HyRTS变体,在离线和在线测试时间内都能显著优于FRTS。
{"title":"Hybrid Regression Test Selection","authors":"Lingming Zhang","doi":"10.1145/3180155.3180198","DOIUrl":"https://doi.org/10.1145/3180155.3180198","url":null,"abstract":"Regression testing is crucial but can be extremely costly. Regression Test Selection (RTS) aims to reduce regression testing cost by only selecting and running the tests that may be affected by code changes. To date, various RTS techniques analyzing at different granularities (e.g., at the basic-block, method, and file levels) have been proposed. RTS techniques working on finer granularities may be more precise in selecting tests, while techniques working on coarser granularities may have lower overhead. According to a recent study, RTS at the file level (FRTS) can have less overall testing time compared with a finer grained technique at the method level, and represents state-of-the-art RTS. In this paper, we present the first hybrid RTS approach, HyRTS, that analyzes at multiple granularities to combine the strengths of traditional RTS techniques at different granularities. We implemented the basic HyRTS technique by combining the method and file granularity RTS. The experimental results on 2707 revisions of 32 projects, totalling over 124 Million LoC, demonstrate that HyRTS outperforms state-of-the-art FRTS significantly in terms of selected test ratio and the offline testing time. We also studied the impacts of each type of method-level changes, and further designed two new HyRTS variants based on the study results. Our additional experiments show that transforming instance method additions/deletions into file-level changes produces an even more effective HyRTS variant that can significantly outperform FRTS in both offline and online testing time.","PeriodicalId":6560,"journal":{"name":"2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)","volume":"74 1","pages":"199-209"},"PeriodicalIF":0.0,"publicationDate":"2018-05-27","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"86448504","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}
引用次数: 93
期刊
2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)
全部 Acc. Chem. Res. ACS Applied Bio Materials ACS Appl. Electron. Mater. ACS Appl. Energy Mater. ACS Appl. Mater. Interfaces ACS Appl. Nano Mater. ACS Appl. Polym. Mater. ACS BIOMATER-SCI ENG ACS Catal. ACS Cent. Sci. ACS Chem. Biol. ACS Chemical Health & Safety ACS Chem. Neurosci. ACS Comb. Sci. ACS Earth Space Chem. ACS Energy Lett. ACS Infect. Dis. ACS Macro Lett. ACS Mater. Lett. ACS Med. Chem. Lett. ACS Nano ACS Omega ACS Photonics ACS Sens. ACS Sustainable Chem. Eng. ACS Synth. Biol. Anal. Chem. BIOCHEMISTRY-US Bioconjugate Chem. BIOMACROMOLECULES Chem. Res. Toxicol. Chem. Rev. Chem. Mater. CRYST GROWTH DES ENERG FUEL Environ. Sci. Technol. Environ. Sci. Technol. Lett. Eur. J. Inorg. Chem. IND ENG CHEM RES Inorg. Chem. J. Agric. Food. Chem. J. Chem. Eng. Data J. Chem. Educ. J. Chem. Inf. Model. J. Chem. Theory Comput. J. Med. Chem. J. Nat. Prod. J PROTEOME RES J. Am. Chem. Soc. LANGMUIR MACROMOLECULES Mol. Pharmaceutics Nano Lett. Org. Lett. ORG PROCESS RES DEV ORGANOMETALLICS J. Org. Chem. J. Phys. Chem. J. Phys. Chem. A J. Phys. Chem. B J. Phys. Chem. C J. Phys. Chem. Lett. Analyst Anal. Methods Biomater. Sci. Catal. Sci. Technol. Chem. Commun. Chem. Soc. Rev. CHEM EDUC RES PRACT CRYSTENGCOMM Dalton Trans. Energy Environ. Sci. ENVIRON SCI-NANO ENVIRON SCI-PROC IMP ENVIRON SCI-WAT RES Faraday Discuss. Food Funct. Green Chem. Inorg. Chem. Front. Integr. Biol. J. Anal. At. Spectrom. J. Mater. Chem. A J. Mater. Chem. B J. Mater. Chem. C Lab Chip Mater. Chem. Front. Mater. Horiz. MEDCHEMCOMM Metallomics Mol. Biosyst. Mol. Syst. Des. Eng. Nanoscale Nanoscale Horiz. Nat. Prod. Rep. New J. Chem. Org. Biomol. Chem. Org. Chem. Front. PHOTOCH PHOTOBIO SCI PCCP Polym. Chem.
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
0
微信
客服QQ
Book学术公众号 扫码关注我们
反馈
×
意见反馈
请填写您的意见或建议
请填写您的手机或邮箱
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
现在去查看 取消
×
提示
确定
Book学术官方微信
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术
文献互助 智能选刊 最新文献 互助须知 联系我们:info@booksci.cn
Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。
Copyright © 2023 Book学术 All rights reserved.
ghs 京公网安备 11010802042870号 京ICP备2023020795号-1