Quality Assurance is a process that requires properly trained resources to make sure that software meets all user and maintenance requirements during the entire life-cycle. It incorporates the separate disciplines of design usability and functionality.