Results 1 -
6 of
6
Infrastructure Support for Controlled Experimentation with Software Testing and Regression Testing Techniques
, 2004
"... Where the development, understanding, and assessment of software testing and regression testing techniques are concerned, controlled experimentation is an indispensable research methodology. Obtaining the infrastructure necessary to support rigorous controlled experimentation with testing techniques ..."
Abstract
-
Cited by 24 (8 self)
- Add to MetaCart
Where the development, understanding, and assessment of software testing and regression testing techniques are concerned, controlled experimentation is an indispensable research methodology. Obtaining the infrastructure necessary to support rigorous controlled experimentation with testing techniques, however, is difficult and expensive. As a result, progress in experimentation with testing techniques has been slow, and empirical data on the costs and effectiveness of testing techniques remains relatively scarce. To help address this problem, we have been designing and constructing infrastructure to support controlled experimentation with software testing and regression testing techniques. This paper reports on the challenges faced by researchers experimenting with testing techniques, including those that inform the design of our infrastructure. The paper then describes the infrastructure that we are creating in response to these challenges, and that we are now making available to other researchers, and discusses the impact that this infrastructure has and can be expected to have on controlled experimentation with testing techniques.
Automatically Generating Back Ends for a Portable Assembly Language Using Declarative Machine Descriptions
"... We show how to generate the back end of an optimizing compiler from a formal description of the syntax and semantics of machine instructions. Our generated back ends for x86, ARM, and PowerPC perform as well as their hand-written counterparts. Automatic generation is enabled by two new ideas: a mode ..."
Abstract
- Add to MetaCart
We show how to generate the back end of an optimizing compiler from a formal description of the syntax and semantics of machine instructions. Our generated back ends for x86, ARM, and PowerPC perform as well as their hand-written counterparts. Automatic generation is enabled by two new ideas: a model of machine-level computation that reduces back-end generation to the problem of finding implementations of about a hundred simple, machine-level operations; and an algorithm that finds these implementations by combining machine instructions. 1.
Automatically Generating Back Ends Using Declarative Machine Descriptions
"... Despite years of work on retargetable compilers, creating a good, reliable back end for an optimizing compiler still entails a lot of hard work. Moreover, a critical component of the back end—the instruction selector—must be written by a person who is expert in both the compiler’s intermediate code ..."
Abstract
- Add to MetaCart
Despite years of work on retargetable compilers, creating a good, reliable back end for an optimizing compiler still entails a lot of hard work. Moreover, a critical component of the back end—the instruction selector—must be written by a person who is expert in both the compiler’s intermediate code and the target machine’s instruction set. By generating the instruction selector from declarative machine descriptions we have (a) made it unnecessary for one person to be both a compiler expert and a machine expert, and (b) made creating an optimizing back end easier than ever before. Our achievement rests on two new results. First, finding a mapping from intermediate code to machine code is an undecidable problem. Second, using heuristic search, we can find mappings for machines of practical interest, in at most a few minutes of CPU time. Our most significant new idea is that heuristic search should be controlled by algebraic laws. Laws are used not only to show when a sequence of instructions implements part of an intermediate code, but also as the primary heuristic for limiting the search: we drop a sequence of instructions not when it gets too long or when it computes too complicated a result, but when too much reasoning will be required to show that the result computed might be useful. 1.
Defects Detection in Imperative Language and C # Applications – Towards Evaluation Approach
"... Abstract—An imperative language such as C++ is a familiar object oriented programming that is widely used for reusability and increased ability to enlighten with other languages. The objective of software testing is to uncover as many errors as possible with a minimum cost. Testing is not confined o ..."
Abstract
- Add to MetaCart
Abstract—An imperative language such as C++ is a familiar object oriented programming that is widely used for reusability and increased ability to enlighten with other languages. The objective of software testing is to uncover as many errors as possible with a minimum cost. Testing is not confined only to the detection of bugs, it also assists with the evaluation of the functional properties of the software. A piece of software can be tested to increase the confidence by exposing potential flaws or deviations from the user’s requirements. Unit testing is to authenticate incorrectness and succeed when an error is detected. This work addresses the detection of defects in C# applications, which leads to logical error. Logical errors occur when the code does not perform the way it is intended to perform. The detection and elimination of the logical bug is one of the aims of testing. These errors are very difficult to track since the compiler does not provide assistance. One of the reasons for Errors is the presence of unintended characters. A missing or an incorrect piece of code is a defect and it remains undetected until an event activates it. When the code performs unit test, automatically each and individual line of code attempts the syntax checking. It helps to detect and remove all logical and syntactical defects from a given piece of code; unit testing is the most essential technique which can be used for executing the code with checking process. To catch all kinds of defects in the coding phase, the unit tests take a place on C++ and C # applications. This work includes the defects occur due to unintended characters, wrong usage of data member and formal parameter and a missing argument indicator in console-based applications of C#. In addition to that, the interface anomaly and inheritance anomaly are also detected. Because of enrichment, the comparison has been made on the object oriented source code such as C++ with C # applications. By this approach instantly, unit testing improves the quality of the code in terms of reducing the programmer’s burden, time and effort.
Automatically Generating Instruction Selectors Using Declarative Machine Descriptions
"... Despite years of work on retargetable compilers, creating a good, reliable back end for an optimizing compiler still entails a lot of hard work. Moreover, a critical component of the back end—the instruction selector—must be written by a person who is expert in both the compiler’s intermediate code ..."
Abstract
- Add to MetaCart
Despite years of work on retargetable compilers, creating a good, reliable back end for an optimizing compiler still entails a lot of hard work. Moreover, a critical component of the back end—the instruction selector—must be written by a person who is expert in both the compiler’s intermediate code and the target machine’s instruction set. By generating the instruction selector from declarative machine descriptions we have (a) made it unnecessary for one person to be both a compiler expert and a machine expert, and (b) made creating an optimizing back end easier than ever before. Our achievement rests on two new results. First, finding a mapping from intermediate code to machine code is an undecidable problem. Second, using heuristic search, we can find mappings for machines of practical interest in at most a few minutes of CPU time. Our most significant new idea is that heuristic search should be controlled by algebraic laws. Laws are used not only to show when a sequence of instructions implements part of an intermediate code, but also to limit the search: we drop a sequence of instructions not when it gets too long or when it computes too complicated a result, but when too much reasoning will be required to show that the result computed might be useful.

