Rosetta Stone has, so far, been the best, precisely because it relies on immersion.
The downside is that I think the situations are traveler centric, and overly simplistic.
To my mind, the best way I've improved is by memorizing "scripts" of common interactions. For example, ordering coffee, or memorizing answers to the common questions people ask me about myself.
I've never said "The boy jumps over the water," in any language, but I have said, "I'd like a double espresso with hot water on the side, no milk or sugar" or "I'll be at home at 2 pm" many times. As I add scripts, my vocab improves.
Most fluent immigrants I've spoken to say that watching a ton of TV in the language was a massive help.