Alpha/beta acceptance testing is done in the early stages of developing software to avoid and/or resolve major conceptual flaws. Contract acceptance testing happens at the end of development to see if the software can be handed over to end-users. Sometimes, there is also operational acceptance testing for introducing key new functionality or major overhauls of software that has been in use for a while.