251 research outputs found
SmartUnit: Empirical Evaluations for Automated Unit Testing of Embedded Software in Industry
In this paper, we aim at the automated unit coverage-based testing for
embedded software. To achieve the goal, by analyzing the industrial
requirements and our previous work on automated unit testing tool CAUT, we
rebuild a new tool, SmartUnit, to solve the engineering requirements that take
place in our partner companies. SmartUnit is a dynamic symbolic execution
implementation, which supports statement, branch, boundary value and MC/DC
coverage. SmartUnit has been used to test more than one million lines of code
in real projects. For confidentiality motives, we select three in-house real
projects for the empirical evaluations. We also carry out our evaluations on
two open source database projects, SQLite and PostgreSQL, to test the
scalability of our tool since the scale of the embedded software project is
mostly not large, 5K-50K lines of code on average. From our experimental
results, in general, more than 90% of functions in commercial embedded software
achieve 100% statement, branch, MC/DC coverage, more than 80% of functions in
SQLite achieve 100% MC/DC coverage, and more than 60% of functions in
PostgreSQL achieve 100% MC/DC coverage. Moreover, SmartUnit is able to find the
runtime exceptions at the unit testing level. We also have reported exceptions
like array index out of bounds and divided-by-zero in SQLite. Furthermore, we
analyze the reasons of low coverage in automated unit testing in our setting
and give a survey on the situation of manual unit testing with respect to
automated unit testing in industry.Comment: In Proceedings of 40th International Conference on Software
Engineering: Software Engineering in Practice Track, Gothenburg, Sweden, May
27-June 3, 2018 (ICSE-SEIP '18), 10 page
CTGEN - a Unit Test Generator for C
We present a new unit test generator for C code, CTGEN. It generates test
data for C1 structural coverage and functional coverage based on
pre-/post-condition specifications or internal assertions. The generator
supports automated stub generation, and data to be returned by the stub to the
unit under test (UUT) may be specified by means of constraints. The typical
application field for CTGEN is embedded systems testing; therefore the tool can
cope with the typical aliasing problems present in low-level C, including
pointer arithmetics, structures and unions. CTGEN creates complete test
procedures which are ready to be compiled and run against the UUT. In this
paper we describe the main features of CTGEN, their technical realisation, and
we elaborate on its performance in comparison to a list of competing test
generation tools. Since 2011, CTGEN is used in industrial scale test campaigns
for embedded systems code in the automotive domain.Comment: In Proceedings SSV 2012, arXiv:1211.587
Coyote C++: An Industrial-Strength Fully Automated Unit Testing Tool
Coyote C++ is an automated testing tool that uses a sophisticated
concolic-execution-based approach to realize fully automated unit testing for C
and C++. While concolic testing has proven effective for languages such as C
and Java, tools have struggled to achieve a practical level of automation for
C++ due to its many syntactical intricacies and overall complexity. Coyote C++
is the first automated testing tool to breach the barrier and bring automated
unit testing for C++ to a practical level suitable for industrial adoption,
consistently reaching around 90% code coverage. Notably, this testing process
requires no user involvement and performs test harness generation, test case
generation and test execution with "one-click" automation. In this paper, we
introduce Coyote C++ by outlining its high-level structure and discussing the
core design decisions that shaped the implementation of its concolic execution
engine. Finally, we demonstrate that Coyote C++ is capable of achieving high
coverage results within a reasonable timespan by presenting the results from
experiments on both open-source and industrial software
Novel Approach to Improve Concolic Testing
Concolic Testing is the combination of symbolic as well as concrete execution. It considers program variables as symbolic variables along with concrete execution path. Branch Coverage belongs to white box testing. Its objective is to demonstrate that all conditions present in a predicate can impact the estimation of predicates in a particular manner. In the area of aerospace and safety critical domains, software quality assurance is strict to specified rules and regulations that maintained in DO-178 standard. To resolve such issues, Concolic testing generates automated test cases to attain high branch and MC/DC coverage in an automated technique based on the branch coverage. Here, we consider Java programs for achieving a high percentage. We are taking Java program as input that is named as J. This Java program is supplying to JPCT (Java program code transformer) which gives the output program called transformed program J which is feed as input to JCUTE (Java Concolic tester tool) to generate test cases as well as to achieve more branch coverage percentage. Our study here is based on two steps, and one is taking Java program without the help of JPCT, and other is with the help of JPCT. The percentage coverage of branch is more in the transformed program without affecting the output with automatically adding some extra statements to the input. This resolves some of the bottleneck issues of the previous Concolic testing methods. We are getting the result experimentally show that our method achieves an average 17.21 percentage more branch coverage
- …