Software testability for specification in statechart and for source code is suggested in this thesis. The suggested testability for specification in statechart is based on the degree of required efforts for testing, and is based on the number of test cases required for the transformed finite state machine of the statechart. The statechart is transformed into extended finite state machine by flattening the hierarchy and concurrency of the statechart and expanded into finite state machine by splitting the conditional transitions. The proposed testability measure has been applied to the statechart of the low pressurizer pressure trip function of the plant protection system and statechart of the coffee vending machine. The testability of the specification in statechart can be improved either by introducing additional outputs to the statechart or by modeling the statechart to reduce the number of test cases required for the transformed finite state machine. To reduce the number of required test cases, the statechart should be modeled to have minimum concurrency among states and to have minimum conditional transitions. The testability for source code is the likelihood that the testing will detect the fault if the software contains a fault. The proposed testability for source code is based on the fault tree analysis and entropy of the importance of the basic statements. The proposed testability for source code has been applied to the safety software modules of Core Protection Calculator System. By performing test with fault seeded software, it was shown that test cases from branch coverage and random testing detected more faults for the software with higher testability. The proposed testability measure can be used to optimize testing by assigning more efforts for modules with lower testability. Or it can be used to select appropriate output to increase the testability.