I. Introduction
Software testing is one of the software development process activities. It is a fundamental activity where faults and errors are detected to ensure the quality of the software system. Testability refers to the ease of discovering these errors and faults. Not all software systems have the same level of testability [1]. As known, software testing is one of the software maintainability characteristics and both are highly related. The high maintainable the software is, the high it will be testable. Software testing aims at delivering high-quality software systems, and software testability can facilitate this process [2]. Software testability is defined as "attributes of software that bear on the effort needed to validate the software product," as defined by ISO [3]. Another definition by ISO is the degree of efficacy and efficiency with which test criteria for a system can be defined and tests to assess whether those criteria have been satisfied [4]. IEEE defines software testability as the degree to which software supports the creation of test criteria and the execution of tests to determine if those requirements have been met [3]. All these definitions share the same goal of software testability that links it to reduced testing efforts and higher software quality. Whereas the late diagnosis of a lack of testability can be difficult and costly to repair, it can have a negative impact on the testing and maintenance effort [5].