In common scenario, we need at least 3 farms: for development, for test and for production. But for small company, it's quite often that we only have one production farm. And it's not so easy build a development or test farm based on it.
Although you can just backup and restore the site collection to the new farm, but if some sub system as "Project Server 2010" get involved, that doesn't work.
Here is how I do it for simple farm under the same domain.
1. Install a new SharePoint farm on 2 machines. One for sql server, one for SharePoint;
Don't start up any application service.
Remove unnecessary databases except "SharePoint_Config" and "SharePoint_Admin_xxxxxx".
Remove all folders under "C:\inetpub\wwwroot\wss\VirtualDirectories" on the new SharePoint server.
2. On the old SharePoint server, do a full farm backup through Central Admin;
The backup files need to be an UNC path like "\\server\sharedfolder". We need to grant the read, write and change rights of that folder to "everyone".
3. Restore the backup through the Central Admin of the new farm.
Change the server name and the database server name.
4. Start up application services
Here is a tricky one. Although the "Service Applications" are running:
Their actual services may not be running.
We need to make them consistent with the old server.
These settings are not part of the farm backup.
5. Change applicaiton service associations
6. Deploy relevant files in the file system.
Include all dlls in GAC, user controls and features in SharePoint folder, etc.
If there is no customized part (everything is out of the box), we can ignore this part.