I strongly recommend you use more answers than just mine, because I've only done it one way and don't know the benefits of the others.
But in my company, we script everything (no wizards) - XMLAs to update Analysis, TSQL to add tables / update data, other TSQL to do programmability, and a program we wrote to deploy RDLs, gifs, etc. to reporting services.
There's some effort to put this in place, but once you have it you can programmatically apply changes to any environment (dev, UAT, prod, DR, etc.) and know that the deployment was done correctly in all places.
The other benefit is that you check in your update scripts to source control, which lets you see who changed what over time. You don't get that with a UI based update mechanism.