Change, being a fact of life, is inevitable even in software systems. On its own part, software has become both omnipresent and vital in our information-based society which is highly dependent on computers and software. Software need to be updated regularly to ensure preservation and maintenance of their values. There is therefore the need for software to evolve. In this paper, the concept and importance of evolution are explained while emphasis is laid on Lehman’s laws and perspectives of software evolution. Also, the relationships and differences between software maintenance and software evolution are brought to the fore. The laws highlighted that a software system must be frequently modified; otherwise it gradually becomes less adequate in use. It is pointed out that software lifecycle undergoes a number of distinct stages. There is a review of various software development models. Despite the challenges facing software evolution, the emerging trends are open source software evolution and unanticipated software evolution.