Once the application code is modified (for example after fixing a defect or some enhancement is done), we need to test and ensure the existing functionalities are working fine. This is called regression testing. For example if a new text box is added to a web page. Then we have to ensure the look and feel is not disturbed after introducing the text box also other fields which were already there in the page is working as expected. This is called regression testing.
after a defect is found by testers and then it will be fixed by developers, it is again tested to confirm that the original defect is actually fixed. Retesting is done to make sure that the test cases which were failed earlier due to some defect is now passing after the defect is fixed.