A simple and clear regression testing definition is:
Testing carried out to ensure that changes to a website or application have not broken previously working functionalities or created unexpected side effects.
Regression testing is necessary because new bug fixes and features can include code that has bugs itself, or that reintroduces problems that were previously fixed. In addition, software can be "brittle," with solutions that address a limited-use case but are insufficient as the code base grows and the software's intended purposes expand.
Depending on the engineering approach, regression testing can be carried out at the end of development, throughout development, or even after deployment to find out what needs to be done for the next version of the website or application. Often, last-minute bug fixes introduce bugs of their own, creating issues to be resolved in the next release.
Smoke Testing This is preliminary testing to ensure that the program still runs and that all major functionalities are still intact. Often, the testing is done by the development team rather than QA and testing in order to make sure they're handing over a viable product. The major difference between smoke testing and standard regression testing is the depth and scope of the tests -- how far you investigate to determine whether the application is in working order.
Functional Regression Testing This is intensive, in-depth testing of a particular functionality within the application from a variety of angles and in a variety of scenarios. Functional regression testing is usually applied to areas of the application that need special attention -- features that are critical or frequently used, or parts of the code base that are especially complex or have contained a large number of bugs.
External Regression Testing This is performed when the application has been adapted to a different environment. Examples include porting the application to a different operating system or platform; using the application on a newer version of the operating system, platform, or device; and using a localized version of the application intended for a different language or country.