I talked a bit about versioning of Adaptive forms and what makes it so complex here: Re: Version history is not created for AEM forms
If you require a version history to be always usable then I would suggest not using shared form fragments. Once a fragment is shared between two forms then you lose the ability to restore a form backwards in time since restoring it will restore the fragment and then affect any other forms that rely on that fragment. You could treat all forms as one backup version meaning restoring a single form will also restore all forms, then at least your forms that share fragments will be consistent to a known point in time, but this may not be desirable.
The simplest way, is as you suggest by using form backup or just Downloading the Form [1]. If you are not using code (Git + Maven) to create your Form source of truth, then I would keep a copy of the form and all of its assets by downloading and adding a date to the file name.
You can also create these packages using the Package Manager GUI [2] and then take regular versioned copies of them manually using Package Manager or even automatically using cron, curl and the AEM API to build and export the packages to a repository [3].
[1] Adobe Experience Manager Help | Importing and exporting assets to AEM Forms
[2] How to Work With Packages
[3] http://www.aemcq5tutorials.com/tutorials/adobe-cq5-aem-curl-commands/#AEM%20Package%20Management%20cURL%20commands