Quality assurance (QA) goes beyond the basic testing of software for flaws, and encompasses the entire process of software development. Although QA testing does incorporate the coding process, it also includes best practices and methodologies within other areas such as the design itself that takes place prior to coding, change and configuration management, managing subsequent releases of the software, and control over the source code. Quality assurance monitors and improves upon the end-to-end process.
QA, as a methodology for overseeing and monitoring this end-to-end process, typically relies on generally accepted standards, most notably ISO 9000 and CMMI. The QA testing tools will ensure that those standards are being adhered to at all times.
The general philosophy of quality assurance differs from standard software testing and debugging, which merely attempts to find flaws and fix them. Quality assurance is more proactive in nature, and is geared towards establishing good practices throughout the entire development lifecycle, so that flaws and bugs are less likely to exist in the first place. Software testing is of course a large part of development, but software testing is reactive as opposed to proactive. Testing examines how a system operates under controlled conditions, imposing standard and non-standard conditions to determine whether the results are appropriate or expected. To explain the difference between software testing and quality assurance, one could say that software testing is for detecting flaws, while quality assurance is for preventing flaws. In some development groups, quality assurance and testing may be the domain of a single group of developers, while in other (perhaps larger) groups, quality assurance will be a separate domain, typically assigned to a project manager.
The goal of quality assurance is of course to deliver quality software. Quality software, besides being bug-free (the result of thorough software testing), is delivered on time, meets the expectations of all parties involved including end-users, is delivered within the stated budget, and is easy to maintain and upgrade over time.
Since the definition of quality is subjective depending on who defines it, software quality assurance may take in feedback from multiple areas of the enterprise, including end-users, supervisors and managers, the IT department responsible for maintaining the software, the CFO who is in charge of paying for its development, or, in the case of commercial software being delivered to the public, feedback from the media, VARs and other resellers, and customers.