You've listed the typical approaches I've seen. Though with cloud options you might add a fourth. I'm personally seeing testing done on separate branches of entire (all-in-one) environments. This might not apply to most Production setups, though.
The documentation (requires login) confirms your thoughts in terms of:
- DTAP - Dev, Test, Acceptance, and Production diagram with a DB restore from Production to Acceptance
- Flow - Simpler diagram, with content managers only adding content to Production
Other Useful Features
Also consider Bundles, Tasks, and Virtual Folders to manage and track what might be in development.
- Tasks could simply inform or ask certain groups of your changes
- Virtual Folders can show recently updated items (I'll use this when working on test or training environments to double check what I've updated)
- Consider Bundles to explicitly manage content ports as Nuno describes, also see a Release Management example from Will Price (for porting developer items up)
I don't find the amount of content a problem with Content Porter, but rather the dependencies, especially if Production and Staging differ in Organizational Items, Schemas, Keywords, etc. I see this getting easier with Bundles, the API, and having certain publication dependencies relaxed (e.g. users don't need parent Publication Permissions as described in this post).