Synchronization makes available specified amount of time for an object to process prior to moving on to the next step.
Wait is like forcing the QTP to wait for a specified amount of time while synchronization is not a 'forced' wait e.g. whenever a specific page loads QTP moves forward in case of synchronization, but in case of wait, if the wait is for 10 seconds and a webpage loads in 3 seconds then it still waits for 7 seconds.
Synchronization is there to take care of the timing problems between QTP and the AUT. Examples where synchronization can be used:
For a web page to load.
For a button to become enabled or disabled.
For client-server communications to finish.
Synchronization is possible in many ways:
We can insert a synchronization point for example for a progress bar to reach 100%. QTP will generate a WaitProperty statement in the Expert View in case of synchronization.
We can use Exist or Wait statements. Exist statements always return a Boolean (0 or 1) value.
We can also modify the default amount of time that QTP waits for a Web page to load.
(Browser Navigation Timeout, File(menu)-> Settings-> Web tab)
When working with tests, we can increase the default timeout settings for a test to instruct QuickTest to allow more time for objects to appear.
(Object Synchronization Timeout, File(menu)-> Settings-> Run tab)
Synchronization is enabled only during recording.
I will be talking about Sync, Wait, WaitProperty-->result of synchronization).