Techniques |
Applicability |
TCS
|
Industry Motivation
Industry Evaluation
Industry Author
|
</tr>
</table> -->
Experiment subject(s) |
Industrial Partner |
Programming Language |
TizenRT (877 TCs)
Industrial proprietary, medium scale |
Samsung (South Korea) |
C |
Effectiveness Metrics |
Efficiency Metrics |
Other Metrics |
Selection/reduction count/percentage, Testing time
|
Total/End-to-end time
|
|
Information Approach |
Algorithm Approach |
Open Challenges |
Change-based
|
Graph-based
|
improve safety; evaluate on other projects; "optimize the transfer time by incrementally patching previously transferred binaries"
|
Abstract
Regression testing - running tests after code modifications - is widely practiced in industry, including at Samsung. Regression Test Selection (RTS) optimizes regression testing by skipping tests that are not affected by recent code changes. Recent work has developed robust RTS tools, which mostly target managed languages, e.g., Java and C#, and thus are not applicable to large C projects, e.g., TizenRT, a lightweight RTOS-based platform. We present Selfection, an RTS tool for projects written in C; we discuss the key challenges to develop Selfection and our design decisions. Selfection uses the objdump and readelf tools to statically build a dependency graph of functions from binaries and detect modified code elements. We integrated Selfection in TizenRT and evaluated its benefits if tests are run in an emulator and on a supported hardware platform (ARTIK 053). We used the latest 150 revisions of TizenRT available on GitHub. We measured the benefits of Selfection as the reduction in the number of tests and reduction in test execution time over running all tests at each revision (i.e., RetestAll). Our results show that Selfection can reduce, on average, the number of tests to 4.95% and end-to-end execution time to 7.04% when tests are executed in the emulator, and to 5.74% and 26.82% when tests are executed on the actual hardware. Our results also show that the time taken to maintain the dependency graph and detect modified functions is negligible.