Software engineering comprises several disciplines. Testing, the subject of this paper, is an important phase which is still largely unpredictable, expensive, and ad hoc. Software testing has already been framed as an optimization problem, i.e., to solve problems in software testing various optimization techniques can be used. To adequately test the software, various rules called test adequacy criteria are used. In this paper, a review of optimization techniques used in domains, test case generation, selection, minimization, and prioritization of testing, has been presented. The review is conducted by selecting quality literature from journals, conferences, workshops, and symposium. The state-of-the-art issues in software testing have been addressed by analyzing the reviewed literature on the basis of the domain of testing, test adequacy criteria, and optimization technique used. After analysis of the considered literature, authors were able to conclude the limitations of existing work, list of traditional and recently proposed adequacy criteria as well as combinations of adequacy criteria for multi-objective optimization and optimization techniques which may be used in the optimization of software testing.