Studying Application–Library Interaction and Behavior with LibTrac
The boundary between programs and libraries is an appealing location for injecting faults during testing: the cost of doing so is low, and one can emulate a wide range of errors. Several tools exist, but using them faces the challenge of deciding exactly which library calls to fail, when, and in what way. The space of possibilities is vast, and the choice of injection scenario can substantially influence test effectiveness. We present LibTrac, a tool for studying the program/library boundary for the purpose of choosing fault injection scenarios. LibTrac can answer questions like: What classes of library functions does a program use? How does the program behave when these calls fail? Are there usage patterns that are more common than others? Unlike similar tools (like ltrace), LibTrac is lightweight and does not influence the behavior of the studied program. We expect LibTrac to be useful to anyone who is considering incorporating library-level fault injection in their software testing strategy. To illustrate LibTrac's effectiveness, we report the results of studying 13 real-world systems with LibTrac.