Software visualization studies techniques and methods for graphically representing different aspects of software. Its main goal is to enhance, simplify, and clarify the mental representation that a software engineer has of a computer system. For many years, visualization in 2D space has been actively studied, but in the last decade, researchers have begun to explore new 3D representations for visualizing software. In this article, we present an overview of current research in the area, describing several major aspects like visual representations, interaction issues, evaluation methods, and development tools. We also perform a survey of some representative tools to support different tasks, i.e., software maintenance and comprehension, requirements validation, and algorithm animation for educational purposes, among others. Finally, we conclude by identifying future research directions.