Hi
check this link for free tools
http://www.sqlservercentral.com/articles/Tools/64908/.
You will also find T-SQL code for the same if your search this site.
The best way of doing this is to generate the alter script for each database modification at the time of modification and then apply it to testing/production.
What we do is generate the alter script for each modification, keep a record of it in a XL file. XL File and the change(alter) script is kept in VSS. For each release we mark whether the change script has been applied to testing/production or not.
"Keep Trying"