1) Testing occurs throughout the entire software development life cycle according to the chosen model. Common models include waterfall, V-model, iterative development, and agile development.
2) Testing is organized into different levels - component, integration, system, and acceptance testing. It also targets different aspects - functionality, non-functional characteristics, structure, and changes.
3) During maintenance, additional testing is needed to test modifications to the system and ensure no unintended regressions occurred due to changes in code or environment. Impact analysis and regression testing are important maintenance testing activities.
Related topics: