首页 > 最新文献

2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)最新文献

英文 中文
Non-Semantics-Preserving Transformations for Higher-Coverage Test Generation Using Symbolic Execution 使用符号执行生成高覆盖率测试的非语义保留转换
Hayes Converse, Oswaldo Olivo, S. Khurshid
Symbolic execution is a well-studied method that has a number of useful applications, including generation of high-quality test suites that find many bugs. However, scaling it to real-world applications is a significant challenge, as it depends on the often expensive process of solving constraints on program inputs. Our insight is that when the goal of symbolic execution is test generation, non-semantics-preserving program transformations can reduce the cost of symbolic execution and the tests generated for the transformed programs can still serve as quality suites for the original program. We present five such transformations based on a few different program simplification heuristics that are designed to lower the cost of symbolic execution for input generation. As enabling technology we use the KLEE symbolic execution engine and the LLVM compiler infrastructure. We evaluate our transformations using a suite of small subjects as well as a subset of the well-studied Unix Coreutils. In a majority of cases, our approach reduces the time for symbolic execution for input generation and increases code coverage of the resultant suite.
符号执行是一种经过充分研究的方法,它有许多有用的应用,包括生成能够发现许多错误的高质量测试套件。然而,将其扩展到实际应用程序是一个重大挑战,因为它依赖于解决程序输入约束的通常昂贵的过程。我们的见解是,当符号执行的目标是测试生成时,非语义保留程序转换可以减少符号执行的成本,并且为转换后的程序生成的测试仍然可以作为原始程序的质量套件。我们基于几种不同的程序简化启发式方法提出了五种这样的转换,这些方法旨在降低输入生成的符号执行成本。作为启用技术,我们使用了KLEE符号执行引擎和LLVM编译器基础结构。我们使用一组小主题以及经过充分研究的Unix coretils子集来评估我们的转换。在大多数情况下,我们的方法减少了输入生成的符号执行时间,并增加了结果套件的代码覆盖率。
{"title":"Non-Semantics-Preserving Transformations for Higher-Coverage Test Generation Using Symbolic Execution","authors":"Hayes Converse, Oswaldo Olivo, S. Khurshid","doi":"10.1109/ICST.2017.29","DOIUrl":"https://doi.org/10.1109/ICST.2017.29","url":null,"abstract":"Symbolic execution is a well-studied method that has a number of useful applications, including generation of high-quality test suites that find many bugs. However, scaling it to real-world applications is a significant challenge, as it depends on the often expensive process of solving constraints on program inputs. Our insight is that when the goal of symbolic execution is test generation, non-semantics-preserving program transformations can reduce the cost of symbolic execution and the tests generated for the transformed programs can still serve as quality suites for the original program. We present five such transformations based on a few different program simplification heuristics that are designed to lower the cost of symbolic execution for input generation. As enabling technology we use the KLEE symbolic execution engine and the LLVM compiler infrastructure. We evaluate our transformations using a suite of small subjects as well as a subset of the well-studied Unix Coreutils. In a majority of cases, our approach reduces the time for symbolic execution for input generation and increases code coverage of the resultant suite.","PeriodicalId":112258,"journal":{"name":"2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)","volume":"7 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-03-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131593476","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}
引用次数: 8
The Theory of Composite Faults 复合断层理论
Rahul Gopinath, Carlos Jensen, Alex Groce
Fault masking happens when the effect of one fault serves to mask that of another fault for particular test inputs. The coupling effect is relied upon by testing practitioners to ensure that fault masking is rare. It states that complex faults are coupled to simple faults in such a way that a test data set that detects all simple faults in a program will detect a high percentage of the complex faults. While this effect has been empirically evaluated, our theoretical understanding of the coupling effect is as yet incomplete. Wah proposed a theory of the coupling effect on finite bijective (or near bijective) functions with the same domain and co-domain and assuming a uniform distribution for candidate functions. This model, however, was criticized as being too simple to model real systems, as it did not account for differing domain and co-domain in real programs, or for the syntactic neighborhood. We propose a new theory of fault coupling for general functions (with certain constraints). We show that there are two kinds of fault interactions, of which only the weak interaction can be modeled by the theory of the coupling effect. The strong interaction can produce faults that are semantically different from the original faults. These faults should hence be considered as independent atomic faults. Our analysis shows that the theory holds even when the effect of the syntactic neighborhood of the program is considered. We analyze numerous real-world programs with real faults to validate our hypothesis.
对于特定的测试输入,当一个故障的影响用来掩盖另一个故障的影响时,就会发生故障屏蔽。测试从业者依靠耦合效应来确保故障掩蔽是罕见的。它指出,复杂故障以这样一种方式耦合到简单故障,即检测程序中所有简单故障的测试数据集将检测到高百分比的复杂故障。虽然这种效应已经得到了实证评估,但我们对耦合效应的理论理解尚不完整。Wah提出了有限双射(或近双射)函数的耦合效应理论,这些函数具有相同的域和上域,候选函数假设均匀分布。然而,这个模型被批评为过于简单,无法对实际系统建模,因为它没有考虑到实际程序中的不同域和上域,也没有考虑到语法邻域。提出了一种新的一般函数(具有一定约束条件)的故障耦合理论。我们证明了有两种故障相互作用,其中只有弱相互作用可以用耦合效应理论来建模。强相互作用会产生与原断层在语义上不同的断层。因此,这些错误应该被认为是独立的原子错误。我们的分析表明,即使考虑到程序的句法邻域的影响,该理论仍然成立。为了验证我们的假设,我们分析了许多具有真实故障的现实世界程序。
{"title":"The Theory of Composite Faults","authors":"Rahul Gopinath, Carlos Jensen, Alex Groce","doi":"10.1109/ICST.2017.12","DOIUrl":"https://doi.org/10.1109/ICST.2017.12","url":null,"abstract":"Fault masking happens when the effect of one fault serves to mask that of another fault for particular test inputs. The coupling effect is relied upon by testing practitioners to ensure that fault masking is rare. It states that complex faults are coupled to simple faults in such a way that a test data set that detects all simple faults in a program will detect a high percentage of the complex faults. While this effect has been empirically evaluated, our theoretical understanding of the coupling effect is as yet incomplete. Wah proposed a theory of the coupling effect on finite bijective (or near bijective) functions with the same domain and co-domain and assuming a uniform distribution for candidate functions. This model, however, was criticized as being too simple to model real systems, as it did not account for differing domain and co-domain in real programs, or for the syntactic neighborhood. We propose a new theory of fault coupling for general functions (with certain constraints). We show that there are two kinds of fault interactions, of which only the weak interaction can be modeled by the theory of the coupling effect. The strong interaction can produce faults that are semantically different from the original faults. These faults should hence be considered as independent atomic faults. Our analysis shows that the theory holds even when the effect of the syntactic neighborhood of the program is considered. We analyze numerous real-world programs with real faults to validate our hypothesis.","PeriodicalId":112258,"journal":{"name":"2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)","volume":"608 ","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-03-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114049450","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}
引用次数: 26
Coveringcerts: Combinatorial Methods for X.509 Certificate Testing 覆盖证书:X.509证书测试的组合方法
Kristoffer Kleine, D. Simos
Correct behaviour of X.509 certificate validation code in SSL/TLS implementations is crucial to ensure secure communication channels. Recently, there have been major efforts in testing these implementations, namely frankencerts and mucerts, which provide new ways to generate test certificates which are likely to reveal errors in the implementations of X.509 validation logic. However, it remains a significant challenge to generate effective test certificates. In this paper, we explore the applicability of a prominent combinatorial method, namely combinatorial testing, for testing of X.509 certificates. We demonstrate that combinatorial testing provides the theoretical guarantees for revealing errors in the certificate validation logic of SSL/TLS implementations. Our findings indicate that the introduced combinatorial testing constructs, coveringcerts, compare favorably to existing testing methods by encapsulating the semantics of the validation logic in the input model and employing combinatorial strategies that significantly reduce the number of tests needed. Besides the foundations of our approach, we also report on experiments that indicate its practical use.
在SSL/TLS实现中,X.509证书验证码的正确行为对于确保通信通道的安全至关重要。最近,在测试这些实现(即franencerts和mucerts)方面进行了大量工作,它们提供了生成测试证书的新方法,这些测试证书可能会揭示X.509验证逻辑实现中的错误。然而,生成有效的测试证书仍然是一个重大挑战。在本文中,我们探讨了一种突出的组合方法的适用性,即组合测试,用于测试X.509证书。我们证明了组合测试为揭示SSL/TLS实现的证书验证逻辑中的错误提供了理论保证。我们的研究结果表明,通过将验证逻辑的语义封装在输入模型中,并采用显著减少所需测试数量的组合策略,引入的组合测试结构(coveringts)优于现有的测试方法。除了我们的方法的基础之外,我们还报告了表明其实际用途的实验。
{"title":"Coveringcerts: Combinatorial Methods for X.509 Certificate Testing","authors":"Kristoffer Kleine, D. Simos","doi":"10.1109/ICST.2017.14","DOIUrl":"https://doi.org/10.1109/ICST.2017.14","url":null,"abstract":"Correct behaviour of X.509 certificate validation code in SSL/TLS implementations is crucial to ensure secure communication channels. Recently, there have been major efforts in testing these implementations, namely frankencerts and mucerts, which provide new ways to generate test certificates which are likely to reveal errors in the implementations of X.509 validation logic. However, it remains a significant challenge to generate effective test certificates. In this paper, we explore the applicability of a prominent combinatorial method, namely combinatorial testing, for testing of X.509 certificates. We demonstrate that combinatorial testing provides the theoretical guarantees for revealing errors in the certificate validation logic of SSL/TLS implementations. Our findings indicate that the introduced combinatorial testing constructs, coveringcerts, compare favorably to existing testing methods by encapsulating the semantics of the validation logic in the input model and employing combinatorial strategies that significantly reduce the number of tests needed. Besides the foundations of our approach, we also report on experiments that indicate its practical use.","PeriodicalId":112258,"journal":{"name":"2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)","volume":"21 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-03-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125111357","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}
引用次数: 15
Symbolic Complexity Analysis Using Context-Preserving Histories 使用上下文保存历史的符号复杂性分析
K. S. Luckow, Rody Kersten, C. Pasareanu
We propose a technique based on symbolic execution for analyzing the algorithmic complexity of programs. The technique uses an efficient guided analysis to compute bounds on the worst-case complexity (for increasing input sizes) and to generate test values that trigger the worst-case behaviors. The resulting bounds are fitted to a function to obtain a prediction of the worst-case program behavior at any input sizes. Comparing these predictions to the programmers' expectations or to theoretical asymptotic bounds can reveal vulnerabilities or confirm that a program behaves as expected. To achieve scalability we use path policies to guide the symbolic execution towards worst-case paths. The policies are learned from the worst-case results obtained with exhaustive exploration at small input sizes and are applied to guide exploration at larger input sizes, where un-guided exhaustive exploration is no longer possible. To achieve precision we use path policies that take into account the history of choices made along the path when deciding which branch to execute next in the program. Furthermore, the history computation is context-preserving, meaning that the decision for each branch depends on the history computed with respect to the enclosing method. We implemented the technique in the Symbolic PathFinder tool. We show experimentally that it can find vulnerabilities in complex Java programs and can outperform established symbolic techniques.
我们提出了一种基于符号执行的技术来分析程序的算法复杂度。该技术使用有效的指导分析来计算最坏情况复杂性的界限(用于增加输入大小),并生成触发最坏情况行为的测试值。将结果边界拟合到一个函数中,以获得在任何输入大小下最坏情况下程序行为的预测。将这些预测与程序员的期望或理论渐近边界进行比较可以揭示漏洞或确认程序的行为符合预期。为了实现可扩展性,我们使用路径策略将符号执行引导到最坏情况路径。这些策略是从在小输入规模下穷举探索获得的最坏结果中学习到的,并应用于指导在更大输入规模下的探索,在这种情况下,非引导穷举探索不再是可能的。为了达到精确,我们使用路径策略,在决定程序中下一步执行哪个分支时,考虑沿着路径所做选择的历史。此外,历史计算是上下文保留的,这意味着每个分支的决策取决于相对于封闭方法计算的历史。我们在Symbolic PathFinder工具中实现了这项技术。我们通过实验证明,它可以发现复杂Java程序中的漏洞,并且可以优于已建立的符号技术。
{"title":"Symbolic Complexity Analysis Using Context-Preserving Histories","authors":"K. S. Luckow, Rody Kersten, C. Pasareanu","doi":"10.1109/ICST.2017.13","DOIUrl":"https://doi.org/10.1109/ICST.2017.13","url":null,"abstract":"We propose a technique based on symbolic execution for analyzing the algorithmic complexity of programs. The technique uses an efficient guided analysis to compute bounds on the worst-case complexity (for increasing input sizes) and to generate test values that trigger the worst-case behaviors. The resulting bounds are fitted to a function to obtain a prediction of the worst-case program behavior at any input sizes. Comparing these predictions to the programmers' expectations or to theoretical asymptotic bounds can reveal vulnerabilities or confirm that a program behaves as expected. To achieve scalability we use path policies to guide the symbolic execution towards worst-case paths. The policies are learned from the worst-case results obtained with exhaustive exploration at small input sizes and are applied to guide exploration at larger input sizes, where un-guided exhaustive exploration is no longer possible. To achieve precision we use path policies that take into account the history of choices made along the path when deciding which branch to execute next in the program. Furthermore, the history computation is context-preserving, meaning that the decision for each branch depends on the history computed with respect to the enclosing method. We implemented the technique in the Symbolic PathFinder tool. We show experimentally that it can find vulnerabilities in complex Java programs and can outperform established symbolic techniques.","PeriodicalId":112258,"journal":{"name":"2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)","volume":"7 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-03-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115447775","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}
引用次数: 25
Private API Access and Functional Mocking in Automated Unit Test Generation 自动化单元测试生成中的私有API访问和功能模拟
Andrea Arcuri, G. Fraser, René Just
Not all object oriented code is easily testable: Dependency objects might be difficult or even impossible to instantiate, and object-oriented encapsulation makes testing potentially simple code difficult if it cannot easily be accessed. When this happens, then developers can resort to mock objects that simulate the complex dependencies, or circumvent object-oriented encapsulation and access private APIs directly through the use of, for example, Java reflection. Can automated unit test generation benefit from these techniques as well? In this paper we investigate this question by extending the EvoSuite unit test generation tool with the ability to directly access private APIs and to create mock objects using the popular Mockito framework. However, care needs to be taken that this does not impact the usefulness of the generated tests: For example, a test accessing a private field could later fail if that field is renamed, even if that renaming is part of a semantics-preserving refactoring. Such a failure would not be revealing a true regression bug, but is a false positive, which wastes the developer's time for investigating and fixing the test. Our experiments on the SF110 and Defects4J benchmarks confirm the anticipated improvements in terms of code coverage and bug finding, but also confirm the existence of false positives. However, by ensuring the test generator only uses mocking and reflection if there is no other way to reach some part of the code, their number remains small.
并非所有面向对象的代码都容易测试:依赖对象可能很难或甚至不可能实例化,而面向对象的封装使得测试潜在的简单代码变得困难,如果它不容易被访问的话。发生这种情况时,开发人员可以求助于模拟复杂依赖关系的模拟对象,或者绕过面向对象的封装,通过使用(例如Java反射)直接访问私有api。自动化的单元测试生成也能从这些技术中获益吗?在本文中,我们通过扩展EvoSuite单元测试生成工具来研究这个问题,该工具具有直接访问私有api和使用流行的Mockito框架创建模拟对象的能力。但是,需要注意的是,这不会影响生成的测试的有用性:例如,如果对私有字段进行重命名,访问该字段的测试可能会失败,即使重命名是保留语义的重构的一部分。这样的失败不会揭示真正的回归错误,而是一个误报,这会浪费开发人员调查和修复测试的时间。我们在SF110和Defects4J基准测试上的实验证实了在代码覆盖率和bug发现方面的预期改进,但也证实了误报的存在。然而,通过确保测试生成器只在没有其他方法到达代码的某些部分时使用模拟和反射,它们的数量仍然很小。
{"title":"Private API Access and Functional Mocking in Automated Unit Test Generation","authors":"Andrea Arcuri, G. Fraser, René Just","doi":"10.1109/ICST.2017.19","DOIUrl":"https://doi.org/10.1109/ICST.2017.19","url":null,"abstract":"Not all object oriented code is easily testable: Dependency objects might be difficult or even impossible to instantiate, and object-oriented encapsulation makes testing potentially simple code difficult if it cannot easily be accessed. When this happens, then developers can resort to mock objects that simulate the complex dependencies, or circumvent object-oriented encapsulation and access private APIs directly through the use of, for example, Java reflection. Can automated unit test generation benefit from these techniques as well? In this paper we investigate this question by extending the EvoSuite unit test generation tool with the ability to directly access private APIs and to create mock objects using the popular Mockito framework. However, care needs to be taken that this does not impact the usefulness of the generated tests: For example, a test accessing a private field could later fail if that field is renamed, even if that renaming is part of a semantics-preserving refactoring. Such a failure would not be revealing a true regression bug, but is a false positive, which wastes the developer's time for investigating and fixing the test. Our experiments on the SF110 and Defects4J benchmarks confirm the anticipated improvements in terms of code coverage and bug finding, but also confirm the existence of false positives. However, by ensuring the test generator only uses mocking and reflection if there is no other way to reach some part of the code, their number remains small.","PeriodicalId":112258,"journal":{"name":"2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)","volume":"45 4 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-03-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116083927","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}
引用次数: 39
Using Delta Debugging to Minimize Stress Tests for Concurrent Data Structures 使用增量调试最小化并发数据结构的压力测试
Jing Xu, Yu Lei, R. Carver
Concurrent data structures are often tested under stress to detect bugs that can only be exposed by some rare interleavings of instructions. A typical stress test for a concurrent data structure creates a number of threads that repeatedly invoke methods of the target data structure. After a failure is detected by a stress test, developers need to localize the fault causing the failure. However, the execution trace of a failed stress test may be very long, making it time-consuming to replay the failure and localize the fault. In this paper, we present an approach to minimizing stress tests for concurrent data structures. Our approach is to create a smaller test that still produces the same failure by removing some of the threads and/or method invocations in the original stress test. We apply delta debugging to identify the threads and method invocations that are essential for causing the failure. Other threads and method invocations are removed to create a smaller stress test. To increase the chance of triggering the original failure during the execution of the new stress test, we force the new execution to replay the original failed execution trace when possible, and try to guide the execution back to the failed trace when the execution diverges. We describe a tool called TestMinimizer and report the results of an empirical study in which TestMinimizer was applied to 16 real-life concurrent data structures. The results of our evaluation showed that TestMinimizer can effectively and efficiently minimize the stress tests for these concurrent data structures.
并发数据结构经常在压力下进行测试,以检测只有一些罕见的指令交错才能暴露的错误。针对并发数据结构的典型压力测试会创建许多线程,这些线程会重复调用目标数据结构的方法。在压力测试检测到故障后,开发人员需要定位导致故障的故障。但是,失败的压力测试的执行跟踪可能非常长,使得重播失败和定位故障非常耗时。在本文中,我们提出了一种最小化并发数据结构压力测试的方法。我们的方法是创建一个较小的测试,通过删除原始压力测试中的一些线程和/或方法调用,仍然会产生相同的失败。我们应用增量调试来识别导致故障的关键线程和方法调用。删除其他线程和方法调用以创建较小的压力测试。为了增加在执行新压力测试期间触发原始失败的机会,我们在可能的情况下强制新执行重播原始失败的执行跟踪,并在执行偏离时尝试将执行引导回失败的跟踪。我们描述了一个名为TestMinimizer的工具,并报告了一个实证研究的结果,其中TestMinimizer被应用于16个现实生活中的并发数据结构。我们的评估结果表明,TestMinimizer可以有效地最小化这些并发数据结构的压力测试。
{"title":"Using Delta Debugging to Minimize Stress Tests for Concurrent Data Structures","authors":"Jing Xu, Yu Lei, R. Carver","doi":"10.1109/ICST.2017.11","DOIUrl":"https://doi.org/10.1109/ICST.2017.11","url":null,"abstract":"Concurrent data structures are often tested under stress to detect bugs that can only be exposed by some rare interleavings of instructions. A typical stress test for a concurrent data structure creates a number of threads that repeatedly invoke methods of the target data structure. After a failure is detected by a stress test, developers need to localize the fault causing the failure. However, the execution trace of a failed stress test may be very long, making it time-consuming to replay the failure and localize the fault. In this paper, we present an approach to minimizing stress tests for concurrent data structures. Our approach is to create a smaller test that still produces the same failure by removing some of the threads and/or method invocations in the original stress test. We apply delta debugging to identify the threads and method invocations that are essential for causing the failure. Other threads and method invocations are removed to create a smaller stress test. To increase the chance of triggering the original failure during the execution of the new stress test, we force the new execution to replay the original failed execution trace when possible, and try to guide the execution back to the failed trace when the execution diverges. We describe a tool called TestMinimizer and report the results of an empirical study in which TestMinimizer was applied to 16 real-life concurrent data structures. The results of our evaluation showed that TestMinimizer can effectively and efficiently minimize the stress tests for these concurrent data structures.","PeriodicalId":112258,"journal":{"name":"2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)","volume":"92 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-03-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115673301","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}
引用次数: 0
Broadcast vs. Unicast Review Technology: Does It Matter? 广播与单播评论技术:重要吗?
Foundjem Armstrong, Foutse Khomh, Bram Adams
Code review is the process of having other team members examine changes to a software system in order to evaluate their technical content and quality. Over the years, multiple tools have been proposed to help software developers conduct and manage code reviews. Some software organizations have been migrating from broadcast review technology to a more advanced unicast review approach such as Jira, but it is unclear if these unicast review technology leads to better code reviews. This paper empirically studies review data of five Apache projects that switched from broadcast based code review to unicast based, to understand the impact of review technology on review effectiveness and quality. Results suggest that broadcast based review is twice faster than review done with unicast based review technology. However, unicast's review quality seems to be better than that of the broadcast based. Our findings suggest that the medium (i.e., broadcast or unicast) technology used for code reviews can relate to the effectiveness and quality of reviews activities.
代码审查是让其他团队成员检查对软件系统的更改,以评估其技术内容和质量的过程。多年来,已经提出了多种工具来帮助软件开发人员进行和管理代码审查。一些软件组织已经从广播评审技术迁移到更先进的单播评审方法,比如Jira,但是这些单播评审技术是否会带来更好的代码评审还不清楚。本文实证研究了五个Apache项目从基于广播的代码审查转向基于单播的代码审查的审查数据,以了解审查技术对审查有效性和质量的影响。结果表明,基于广播的审查比基于单播的审查快两倍。然而,单播的评论质量似乎比基于广播的要好。我们的发现表明,用于代码审查的媒介(例如,广播或单播)技术可以与审查活动的有效性和质量相关。
{"title":"Broadcast vs. Unicast Review Technology: Does It Matter?","authors":"Foundjem Armstrong, Foutse Khomh, Bram Adams","doi":"10.1109/ICST.2017.27","DOIUrl":"https://doi.org/10.1109/ICST.2017.27","url":null,"abstract":"Code review is the process of having other team members examine changes to a software system in order to evaluate their technical content and quality. Over the years, multiple tools have been proposed to help software developers conduct and manage code reviews. Some software organizations have been migrating from broadcast review technology to a more advanced unicast review approach such as Jira, but it is unclear if these unicast review technology leads to better code reviews. This paper empirically studies review data of five Apache projects that switched from broadcast based code review to unicast based, to understand the impact of review technology on review effectiveness and quality. Results suggest that broadcast based review is twice faster than review done with unicast based review technology. However, unicast's review quality seems to be better than that of the broadcast based. Our findings suggest that the medium (i.e., broadcast or unicast) technology used for code reviews can relate to the effectiveness and quality of reviews activities.","PeriodicalId":112258,"journal":{"name":"2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)","volume":"48 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-03-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125869843","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}
引用次数: 15
Automated Random Testing in Multiple Dispatch Languages 多调度语言的自动随机测试
Simon M. Poulding, R. Feldt
In programming languages that use multiple dispatch, a single function can have multiple implementations, each of which may specialise the function's operation. Which one of these implementations to execute is determined by the data types of all the arguments to the function. Effective testing of functions that use multiple dispatch therefore requires diverse test inputs in terms of the data types of the input's arguments as well as their values. In this paper we describe an approach for generating test inputs where both the values and types are chosen probabilistically. The approach uses reflection to automatically determine how to create inputs with the desired types, and dynamically updates the probability distribution from which types are sampled in order to improve both the test efficiency and efficacy. We evaluate the technique on 247 methods across 9 built-in functions of Julia, a technical computing language that applies multiple dispatch at runtime. In the process, we identify three real faults in these widely-used functions.
在使用多分派的编程语言中,一个函数可以有多个实现,每个实现都可以专门化该函数的操作。执行哪一种实现由函数所有参数的数据类型决定。因此,使用多重分派的函数的有效测试需要根据输入参数及其值的数据类型进行不同的测试输入。在本文中,我们描述了一种生成测试输入的方法,其中值和类型都是概率选择的。该方法使用反射来自动确定如何创建具有所需类型的输入,并动态更新采样类型的概率分布,以提高测试效率和有效性。我们在Julia的9个内置函数中的247个方法上评估了该技术,Julia是一种技术计算语言,在运行时应用多个调度。在此过程中,我们发现了这些广泛使用的函数中的三个实际故障。
{"title":"Automated Random Testing in Multiple Dispatch Languages","authors":"Simon M. Poulding, R. Feldt","doi":"10.1109/ICST.2017.37","DOIUrl":"https://doi.org/10.1109/ICST.2017.37","url":null,"abstract":"In programming languages that use multiple dispatch, a single function can have multiple implementations, each of which may specialise the function's operation. Which one of these implementations to execute is determined by the data types of all the arguments to the function. Effective testing of functions that use multiple dispatch therefore requires diverse test inputs in terms of the data types of the input's arguments as well as their values. In this paper we describe an approach for generating test inputs where both the values and types are chosen probabilistically. The approach uses reflection to automatically determine how to create inputs with the desired types, and dynamically updates the probability distribution from which types are sampled in order to improve both the test efficiency and efficacy. We evaluate the technique on 247 methods across 9 built-in functions of Julia, a technical computing language that applies multiple dispatch at runtime. In the process, we identify three real faults in these widely-used functions.","PeriodicalId":112258,"journal":{"name":"2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)","volume":"99 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124884847","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}
引用次数: 5
Test Design as Code: JCUnit 作为代码的测试设计:JCUnit
Hiroshi Ukai, Xiao Qu
In a development process where testing is highly automated, there is a major challenge to cope with issues such as huge test size and test stability. In this paper, we propose a model-based testing (MBT) tool called JCUnit, which generates a test suite from a model given as a Java class. Unlike other tools, it is designed to generate small and stable test suites and supports various popular models. With this tool, developers can apply MBT approach to their products without learning domain-specific language of proprietary MBT tools. Moreover, features such as portability and pluggability make it useful in a wide range of phases from unit testing to system testing. As a result, the efforts required in practical software testing will be reduced.
在测试高度自动化的开发过程中,处理诸如巨大的测试规模和测试稳定性等问题是一个主要的挑战。在本文中,我们提出了一个名为JCUnit的基于模型的测试(MBT)工具,它从一个作为Java类给出的模型生成一个测试套件。与其他工具不同,它被设计为生成小而稳定的测试套件,并支持各种流行的模型。有了这个工具,开发人员可以将MBT方法应用到他们的产品中,而无需学习专有MBT工具的特定领域语言。此外,诸如可移植性和可插拔性等特性使其在从单元测试到系统测试的广泛阶段中都很有用。因此,实际软件测试所需的工作将会减少。
{"title":"Test Design as Code: JCUnit","authors":"Hiroshi Ukai, Xiao Qu","doi":"10.1109/ICST.2017.58","DOIUrl":"https://doi.org/10.1109/ICST.2017.58","url":null,"abstract":"In a development process where testing is highly automated, there is a major challenge to cope with issues such as huge test size and test stability. In this paper, we propose a model-based testing (MBT) tool called JCUnit, which generates a test suite from a model given as a Java class. Unlike other tools, it is designed to generate small and stable test suites and supports various popular models. With this tool, developers can apply MBT approach to their products without learning domain-specific language of proprietary MBT tools. Moreover, features such as portability and pluggability make it useful in a wide range of phases from unit testing to system testing. As a result, the efforts required in practical software testing will be reduced.","PeriodicalId":112258,"journal":{"name":"2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)","volume":"51 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"123319502","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}
引用次数: 4
Automated and Scalable Mutation Testing 自动化和可扩展的突变测试
T. Chekam
Symbolic execution and mutation testing have been demonstrated to be effective in revealing program defects. Despite their potential, their application cost, scalability and robust operation are obstacles to their practical use. Symbolic execution has the problem of path explosion, which results from the vast number of program paths, while mutation testing involves a large number of program variants to be analysed and executed. Both these problems result in scalability issues when applied in real world programs. These problems are to by addressed by the present research. The key point to be addressed is the design of few but effective mutations. These will be selected based on symbolic execution. The present research will 1) evaluate the level of con?dence or the guarantees that can be established by mutation testing, 2) design a technique to effectively detect useful mutants, 3) automate the whole mutation testing process.
符号执行和突变测试已被证明在揭示程序缺陷方面是有效的。尽管它们具有潜力,但它们的应用成本、可扩展性和健壮性是它们实际应用的障碍。符号执行有路径爆炸的问题,这是由大量的程序路径造成的,而突变测试涉及到大量的程序变体来分析和执行。这两个问题在应用于实际程序时都会导致可伸缩性问题。这些问题在本研究中有待解决。要解决的关键问题是设计少量但有效的突变。将根据符号执行来选择这些选项。本研究将1)评估欺骗的程度;2)设计一种技术来有效地检测有用的突变体,3)自动化整个突变检测过程。
{"title":"Automated and Scalable Mutation Testing","authors":"T. Chekam","doi":"10.1109/ICST.2017.74","DOIUrl":"https://doi.org/10.1109/ICST.2017.74","url":null,"abstract":"Symbolic execution and mutation testing have been demonstrated to be effective in revealing program defects. Despite their potential, their application cost, scalability and robust operation are obstacles to their practical use. Symbolic execution has the problem of path explosion, which results from the vast number of program paths, while mutation testing involves a large number of program variants to be analysed and executed. Both these problems result in scalability issues when applied in real world programs. These problems are to by addressed by the present research. The key point to be addressed is the design of few but effective mutations. These will be selected based on symbolic execution. The present research will 1) evaluate the level of con?dence or the guarantees that can be established by mutation testing, 2) design a technique to effectively detect useful mutants, 3) automate the whole mutation testing process.","PeriodicalId":112258,"journal":{"name":"2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)","volume":"16 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-03-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129587851","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}
引用次数: 2
期刊
2017 IEEE International Conference on Software Testing, Verification and Validation (ICST)
全部 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