Software is usually expected to be modified over the course of its productive life. The process of converting one correct program into a different correct program is extremely challenging.