• Documents
  • Authors
  • Tables
  • Log in
  • Sign up
  • MetaCart
  • DMCA
  • Donate

CiteSeerX logo

Advanced Search Include Citations
Advanced Search Include Citations

Rostra: A Framework for Detecting Redundant Object-Oriented Unit Tests. In (2004)

by T Xie, D Marinov, D Notkin
Venue:ASE,
Add To MetaCart

Tools

Sorted by:
Results 1 - 10 of 98
Next 10 →

CUTE: A Concolic Unit Testing Engine for C

by Koushik Sen, Darko Marinov, Gul Agha - IN ESEC/FSE-13: PROCEEDINGS OF THE 10TH EUROPEAN , 2005
"... In unit testing, a program is decomposed into units which are collections of functions. A part of unit can be tested by generating inputs for a single entry function. The entry function may contain pointer arguments, in which case the inputs to the unit are memory graphs. The paper addresses the pro ..."
Abstract - Cited by 480 (22 self) - Add to MetaCart
In unit testing, a program is decomposed into units which are collections of functions. A part of unit can be tested by generating inputs for a single entry function. The entry function may contain pointer arguments, in which case the inputs to the unit are memory graphs. The paper addresses the problem of automating unit testing with memory graphs as inputs. The approach used builds on previous work combining symbolic and concrete execution, and more specifically, using such a combination to generate test inputs to explore all feasible execution paths. The current work develops a method to represent and track constraints that capture the behavior of a symbolic execution of a unit with memory graphs as inputs. Moreover, an efficient constraint solver is proposed to facilitate incremental generation of such test inputs. Finally, CUTE, a tool implementing the method is described together with the results of applying CUTE to real-world examples of C code.
(Show Context)

Citation Context

...enerate test inputs. The simplest, and yet often very effective, techniques use random generation of (concrete) test inputs [4,8,10,21,22]. Some recent tools use bounded-exhaustive concrete execution =-=[5, 12, 29]-=- that tries all values from user-provided domains. These tools can achieve high code coverage, especially for testing data structure implementation. However, they require the user to carefully choose ...

Feedback-directed random test generation

by Carlos Pacheco, Shuvendu K. Lahiri, Michael D. Ernst, Thomas Ball - In ICSE , 2007
"... We present a technique that improves random test generation by incorporating feedback obtained from executing test inputs as they are created. Our technique builds inputs incrementally by randomly selecting a method call to apply and finding arguments from among previously-constructed inputs. As soo ..."
Abstract - Cited by 188 (17 self) - Add to MetaCart
We present a technique that improves random test generation by incorporating feedback obtained from executing test inputs as they are created. Our technique builds inputs incrementally by randomly selecting a method call to apply and finding arguments from among previously-constructed inputs. As soon as an input is built, it is executed and checked against a set of contracts and filters. The result of the execution determines whether the input is redundant, illegal, contract-violating, or useful for generating more inputs. The technique outputs a test suite consisting of unit tests for the classes under test. Passing tests can be used to ensure that code contracts are preserved across program changes; failing tests (that violate one or more contract) point to potential errors that should be corrected. Our experimental results indicate that feedback-directed random test generation can outperform systematic and undirected random test generation, in terms of coverage and error detection. On four small but nontrivial data structures (used previously in the literature), our technique achieves higher or equal block and predicate coverage than model checking (with and without abstraction) and undirected random generation. On 14 large, widely-used libraries (comprising 780KLOC), feedback-directed random test generation finds many previously-unknown errors, not found by either model checking or undirected random generation. 1
(Show Context)

Citation Context

... that determines whether two objects have the same concrete representation (the same values for all their fields), or a user could specify more sophisticated computations to determine object equality =-=[30]-=-. Null. Null dereference exceptions caused by using null as an argument are often uninteresting, and usually point to the (possibly intentional) absence of a null check on the arguments. However, when...

Symstra: A framework for generating object-oriented unit tests using symbolic execution

by Tao Xie, Darko Marinov, Wolfram Schulte, David Notkin - In TACAS , 2005
"... Abstract. Object-oriented unit tests consist of sequences of method invocations. Behavior of an invocation depends on the method’s arguments and the state of the receiver at the beginning of the invocation. Correspondingly, generating unit tests involves two tasks: generating method sequences that b ..."
Abstract - Cited by 140 (18 self) - Add to MetaCart
Abstract. Object-oriented unit tests consist of sequences of method invocations. Behavior of an invocation depends on the method’s arguments and the state of the receiver at the beginning of the invocation. Correspondingly, generating unit tests involves two tasks: generating method sequences that build relevant receiverobject states and generating relevant method arguments. This paper proposes Symstra, a framework that achieves both test generation tasks using symbolic execution of method sequences with symbolic arguments. The paper defines symbolic states of object-oriented programs and novel comparisons of states. Given a set of methods from the class under test and a bound on the length of sequences, Symstra systematically explores the object-state space of the class and prunes this exploration based on the state comparisons. Experimental results show that Symstra generates unit tests that achieve higher branch coverage faster than the existing test-generation techniques based on concrete method arguments. 1
(Show Context)

Citation Context

...ease branch coverage or throw new uncaught exceptions. 4 Evaluation This section presents our evaluation of Symstra for exploring method sequences and generating tests. We compare Symstra with Rostra =-=[34]-=-, our previous framework that generates tests using bounded-exhaustive exploration of sequences with concrete arguments. We have developed Symstra on top of Rostra, so that the comparison does not giv...

Hybrid concolic testing

by Rupak Majumdar , et al.
"... We present hybrid concolic testing, an algorithm that interleaves random testing with concolic execution to obtain both a deep and a wide exploration of program state space. Our algorithm generates test inputs automatically by interleaving random testing until saturation with bounded exhaustive symb ..."
Abstract - Cited by 137 (7 self) - Add to MetaCart
We present hybrid concolic testing, an algorithm that interleaves random testing with concolic execution to obtain both a deep and a wide exploration of program state space. Our algorithm generates test inputs automatically by interleaving random testing until saturation with bounded exhaustive symbolic exploration of program points. It thus combines the ability of random search to reach deep program states quickly together with the ability of concolic testing to explore states in a neighborhood exhaustively. We have implemented our algorithm on top of CUTE and applied it to obtain better branch coverage for an editor implementation (VIM 5.7, 150K lines of code) as well as a data structure implementation in C. Our experiments suggest that hybrid concolic testing can handle large programs and provide, for the same testing budget, almost 4 × the branch coverage than random testing and almost 2 × that of concolic testing.

Eclat: Automatic generation and classification of test inputs

by Carlos Pacheco, Michael D. Ernst - In 19th European Conference Object-Oriented Programming , 2005
"... Abstract. This paper describes a technique that selects, from a large set of test inputs, a small subset likely to reveal faults in the software under test. The technique takes a program or software component, plus a set of correct executions— say, from observations of the software running properly, ..."
Abstract - Cited by 137 (14 self) - Add to MetaCart
Abstract. This paper describes a technique that selects, from a large set of test inputs, a small subset likely to reveal faults in the software under test. The technique takes a program or software component, plus a set of correct executions— say, from observations of the software running properly, or from an existing test suite that a user wishes to enhance. The technique first infers an operational model of the software’s operation. Then, inputs whose operational pattern of execution differs from the model in specific ways are suggestive of faults. These inputs are further reduced by selecting only one input per operational pattern. The result is a small portion of the original inputs, deemed by the technique as most likely to reveal faults. Thus, the technique can also be seen as an error-detection technique. The paper describes two additional techniques that complement test input selection. One is a technique for automatically producing an oracle (a set of assertions) for a test input from the operational model, thus transforming the test input into a test case. The other is a classification-guided test input generation technique that also makes use of operational models and patterns. When generating inputs, it filters out code sequences that are unlikely to contribute to legal inputs, improving the efficiency of its search for fault-revealing inputs. We have implemented these techniques in the Eclat tool, which generates unit tests for Java classes. Eclat’s input is a set of classes to test and an example program execution—say, a passing test suite. Eclat’s output is a set of JUnit test cases, each containing a potentially fault-revealing input and a set of assertions at least one of which fails. In our experiments, Eclat successfully generated inputs that exposed fault-revealing behavior; we have used Eclat to reveal real errors in programs. The inputs it selects as fault-revealing are an order of magnitude as likely to reveal a fault as all generated inputs. 1
(Show Context)

Citation Context

...ore fault-revealing inputs than exhaustive generation (bottom plots). In future work, we plan to investigate exhaustive generation combined with techniques for avoiding generation of duplicate inputs =-=[28, 29]-=-. 6 Related Work The most closely related work to ours is the Jov [30] and JCrasher [9] tools, which share the goal of selecting, from a randomly-generated set of candidate inputs, a set most likely t...

Test input generation for Java containers using state matching

by Willem Visser, Corina S. Păsăreanu, Radek Pelánek - In ISSTA , 2006
"... The popularity of object-oriented programming has led to the wide use of container libraries. It is important for the reliability of these containers that they are tested adequately. We describe techniques for automated test input generation of Java container classes. Test inputs are sequences of me ..."
Abstract - Cited by 75 (4 self) - Add to MetaCart
The popularity of object-oriented programming has led to the wide use of container libraries. It is important for the reliability of these containers that they are tested adequately. We describe techniques for automated test input generation of Java container classes. Test inputs are sequences of method calls from the container interface. The techniques rely on state matching to avoid generation of redundant tests. Exhaustive techniques use model checking with explicit or symbolic execution to explore all the possible test sequences up to predefined input sizes. Lossy techniques rely on abstraction mappings to compute and store abstract versions of the concrete states; they explore underapproximations of all the possible test sequences. We have implemented the techniques on top of the Java PathFinder model checker and we evaluate them using four Java container classes. We compare state matching based techniques and random selection for generating test inputs, in terms of testing coverage. We consider basic block coverage and a form of predicate coverage- that measures whether all combinations of a predetermined set of predicates are covered at each basic block. The exhaustive techniques can easily obtain basic block coverage, but cannot obtain good predicate coverage before running out of memory. On the other hand, abstract matching turns out to be a powerful approach for generating test inputs to obtain high predicate coverage. Random selection performed well except on the examples that contained complex input spaces, where the lossy abstraction techniques performed better.
(Show Context)

Citation Context

...elem values are not the same). Heap shapes are represented in a normalized form, as sequences of integers (depicted in rectangles in Figure 4), and are obtained through a process called linearization =-=[18, 32]-=-. The linearization of an object (e.g. the tree root) starts from the root and traverses the heap in depth first search order; it assigns a unique identifier to each object and it backtracks when it d...

An empirical comparison of automated generation and classification techniques for object-oriented unit testing

by Carlos Pacheco, Tao Xie, Darko Marinov, Michael D. Ernst - In ASE 06: Automated Software Engineering , 2006
"... Testing involves two major activities: generating test inputs and determining whether they reveal faults. Automated test generation techniques include random generation and symbolic execution. Automated test classification techniques include ones based on uncaught exceptions and violations of operat ..."
Abstract - Cited by 39 (12 self) - Add to MetaCart
Testing involves two major activities: generating test inputs and determining whether they reveal faults. Automated test generation techniques include random generation and symbolic execution. Automated test classification techniques include ones based on uncaught exceptions and violations of operational models inferred from manually provided tests. Previous research on unit testing for object-oriented programs developed three pairs of these techniques: model-based random testing, exception-based random testing, and exception-based symbolic testing. We develop a novel pair, model-based symbolic testing. We also empirically compare all four pairs of these generation and classification techniques. The results show that the pairs are complementary (i.e., reveal faults differently), with their respective strengths and weaknesses. 1.
(Show Context)

Citation Context

...es for primitive arguments. Visser et al. [26] used the Java PathFinder model checker [25] to systematically explore the object-state space of the class under test, concretely or symbolically. Rostra =-=[32]-=- concretely explores the object-state space in a similar way, while Symstra [33] uses symbolic execution and prunes state exploration based on the symbolic-state comparisons. More recently, several te...

Automatic Testing of Software with Structurally Complex Inputs

by Darko Marinov , 2005
"... Modern software pervasively uses structurally complex data such as linked data structures. The standard approach to generating test suites for such software, manual generation of the inputs in the suite, is tedious and error-prone. This dissertation proposes a new approach for specifying properties ..."
Abstract - Cited by 35 (9 self) - Add to MetaCart
Modern software pervasively uses structurally complex data such as linked data structures. The standard approach to generating test suites for such software, manual generation of the inputs in the suite, is tedious and error-prone. This dissertation proposes a new approach for specifying properties of structurally complex test inputs; presents a technique that automates generation of such inputs; describes the Korat tool that implements this technique for Java; and evaluates the effectiveness of Korat in testing a set of data-structure implementations. Our approach allows the developer to describe the properties of valid test inputs using a familiar implementation language such as Java. Specifically, the user provides an imperative predicate—a piece of code that returns a truth value—that returns true if the input satisfies the required property and false otherwise. Korat implements our technique for solving imperative predicates: given a predicate and a bound on the size of the predicate’s inputs, Korat automatically generates the bounded-exhaustive
(Show Context)

Citation Context

...t to use it at the abstract level, without considering the concrete data representation that the implementation uses. In such context, it is redundant to test with equivalent structure as test inputs =-=[116]-=-. There are basically two approaches to describe equivalent structures [116]: (1) provide an abstraction function that maps each structure into an element of some other domain, for example trees into ...

Call Stack Coverage for GUI Test-Suite Reduction

by Scott Mcmaster, Atif Memon - In Proceedings of the 17 th IEEE International Symposium on Software Reliability Engineering (ISSRE 2006 , 2006
"... Graphical user interfaces (GUIs) are used as frontends to most of today’s software applications; testing GUIs for functional correctness is needed to ensure the overall correctness of these applications. The eventdriven nature of GUIs presents new challenges for testing. One important challenge is t ..."
Abstract - Cited by 35 (5 self) - Add to MetaCart
Graphical user interfaces (GUIs) are used as frontends to most of today’s software applications; testing GUIs for functional correctness is needed to ensure the overall correctness of these applications. The eventdriven nature of GUIs presents new challenges for testing. One important challenge is test suite reduction. Conventional reduction techniques/tools based on static analysis are not easily applicable due to the increased use of multi-language GUI implementations, callbacks for event handlers, virtual function calls, reflection, and multi-threading. Moreover, many existing techniques ignore event handlers from libraries, and fail to consider the context in which a handler executes. Consequently, they yield GUI test suites with seriously impaired fault-detection ability. This paper presents a new reduction technique based on the call stack coverage criterion. Call stacks may be collected for any executing program with very little overhead. An empirical study involving three large GUI-based applications shows that call stack based reduction provides an excellent tradeoff between reduction in test suite size and loss of fault-detection effectiveness. 1.
(Show Context)

Citation Context

...ional coverage maximization approach. Again we feel that the context-preserving nature of call stack coverage would make it an excellent criterion on which to cluster test cases. The Rostra framework =-=[20]-=- collects method sequences on a given object in an object-oriented system. The sequences are then used as coverage criteria for test suite reduction (among other applications). Unlike Rostra, our call...

Search based software testing of object-oriented containers

by Andrea Arcuri, Xin Yao - Information Sciences , 2008
"... Automatic software testing tools are still far from ideal for real world Object-Oriented (OO) Software. The use of nature inspired search algorithms for this problem has been investigated recently. Testing complex data structures (e.g., containers) is very challenging since testing software with sim ..."
Abstract - Cited by 32 (12 self) - Add to MetaCart
Automatic software testing tools are still far from ideal for real world Object-Oriented (OO) Software. The use of nature inspired search algorithms for this problem has been investigated recently. Testing complex data structures (e.g., containers) is very challenging since testing software with simple states is already hard. Because containers are used in almost every type of software, their reliability is of utmost importance. Hence, this paper focuses on the difficulties of testing container classes with nature inspired search algorithms. We will first describe how input data can be automatically generated for testing Java Containers. Input space reductions and a novel testability transformation are presented to aid the search algorithms. Different search algorithms are then considered and studied in order to understand when and why a search algorithm is effective for a testing problem. In our experiments, these nature inspired search algorithms seem to give better results than the traditional techniques described in literature. Besides, the problem of minimising the length of the test sequences is also addressed. Finally, some open research questions are given.
(Show Context)

Citation Context

...rom algebraic specifications of the functions. Korat [8] and TestEra [31] use isomorphic generation of data structures, but need predicates that represent constraints on these data structures. Rostra =-=[59]-=- uses bounded exhaustive exploration with concrete values. On the other hand, tools that exploit the symbolic execution [25] include for example Symstra[60], Symclat [15], the work of Buy et al. [9] a...

Powered by: Apache Solr
  • About CiteSeerX
  • Submit and Index Documents
  • Privacy Policy
  • Help
  • Data
  • Source
  • Contact Us

Developed at and hosted by The College of Information Sciences and Technology

© 2007-2019 The Pennsylvania State University