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 poses challenges in minimizing tests while achieving coverage. Automating regression testing can help address these challenges.