Regression testing is testing performed after changes to a system to detect whether new errors were introduced or old bugs have reappeared. It should be done after changes to requirements, new features added, defect fixes, or performance improvements. There are various strategies for regression testing including re-running all tests, test selection, test prioritization, and focusing on areas like frequently failing tests or recently changed code. While regression testing helps ensure system quality, managing large test suites over time can be challenging. Automating regression testing helps address these challenges.