  Most businesses rely on a significant stack of software to perform their
daily operations. This software is business-critical as defects in this
software have major impacts on revenue and customer satisfaction. The primary
means for verification of this software is testing. We conducted an extensive
analysis of Java software packages to evaluate their unit-testability. The
results show that code in software repositories is typically split into
portions of very trivial code, non-trivial code that is unit-testable, and code
that cannot be unit-tested easily. This brings up interesting considerations
regarding the use of test coverage metrics and design for testability, which is
crucial for testing efficiency and effectiveness. Lack of unit-testability is
an obstacle to applying tools that perform automated verification and test
generation. These tools cannot make up for poor testability of the code and
have a hard time in succeeding or are not even applicable without first
improving the design of the software system.
