Software testing and Quality Assurance

software-testing-11

This article is an introduction to software testing and quality assurance. It defines the software quality concept and talks about the relation between testing and quality assurance.

Testing is done on any product either software or hardware to ensure that this product is qualified to perform its job. So we can consider testing as a way to perform quality assurance.
A product is qualified if it can perform all the jobs required from it in a way that makes the customer happy. The quality of a product is a changeable aspect that changes by changing the customers who will use this product.
When talking about software testing and quality assurance, this just mean that the product we are working on and testing is a software system.
According to Feigenbaum [https://en.wikipedia.org/wiki/Software_quality], Software quality is defined as following; “Quality is a customer determination, not an engineer’s determination, not a marketing determination, nor a general management determination. It is based on the customer’s actual experience with the product or service, measured against his or her requirements — stated or unstated, conscious or merely sensed, technically operational or entirely subjective — and always representing a moving target in a competitive market”.
As we said there are no strict measures for a qualified software but there are general characteristics that when exist in a software product, we can predict that this product will be qualified. These characteristics are Functionality, Reliability, Usability, Efficiency, Maintainability and Portability.

Functionality simply means that the software performs the functions required from it.

Reliability means that we can rely on the results obtained from that software and be sure that they are right. It also means that the software is always there when I need it (doesn’t frequently crash or go down).

Usability describes how easy the software system is to learn, deal with and use (i.e. requires fast learning curve)

Efficiency in general describes the process of using the least amount of input to produce the largest amount of output. In case of a software system, the input may include (processing time (for the software user), development time (for the software development team), money (paid by the software customer as fees or the software vendor as costs), infrastructure required to start using the software, efforts (done by the vendor to publish the software or by the customers to use the software). The output may be represented as profits gained by the vendors and the customers when using this software. [http://www.investopedia.com/terms/e/efficiency.asp]

Maintainability describes the ease with which a software system can be modified either to correct discovered faults or to improve its performance. [https://msdn.microsoft.com/en-us/library/bb896744.aspx].

Portability ensures that the software can still work efficiently in different environments like different platforms and operating systems.
Software testing is a verification process for software quality assessment and improvement by repeating a Test – Find defects – Fix cycle during the development of the software system.

References:
Software Testing and Quality Assurance Theory and Practice, Kshirasagar Naik, Priyadarshi Tripathy.