The software testing process enables the verification and validation of a software program, to ascertain it works as per the users’ expectations. Software testing provides a means to minimize errors, cut maintenance, and reduce the overall software cost. In recent years, various software development, testing tools, and techniques have emerged to enhanced software quality. In this paper, we conducted a review to examine the most utilized tools, techniques, testing challenges addressed by the research community. In total, 70 articles were selected through our study search and selection process based on our defined inclusion and exclusion criteria. Finally, the selected studies were classified based on testing tools, techniques and challenged they addressed. The result of our study shows that mutation testing is the most utilized software testing technique, in terms of programming languages choice, java is the most utilized programing language, and manual testcase generation is testing challenge addressed by most of the reviewed studies. The identified research challenges are also highlighted with direction for future work.