If your device is not yet rooted, an alternative to Alex's suggestion of Titanium Backup (which I'd second otherwise) would be to use adb backup
(creating a backup file for each app separately is important here, as adb restore
just works per backup file, not per app), or one of its frontends. There's also the possibility to do that directly on the device, using e.g. Helium Backup.
Please also take a look at the backup tag-wiki for more information.