Thursday, July 31, 2008

Quality By Software Engineering Perspective

Attributes of a Good Quality Software:

1) A good quality software product:
Is the one which meets all the requirements when viewed through customer’s perspective. Hence the prime definition of software quality is meeting customer needs or understanding customer requirements, expectations and exceeding these expectations. If using the software product satisfies the customer, then it is a good quality product otherwise it is not.

2) Customer needs are not always translated into his requirements:
Although the software creation team tries their level best to accurately capture the customer needs into customer requirements; in spite of all these efforts, sometimes the developers fail in their endeavor due to 1) Lack of accurate communication of the exact needs by the customer 2) Misunderstanding of the requirements as captured by the developers.

3) A Software Free from Bugs or Defects may not always be a Quality product:
Quality of a software product is not merely the absence of bugs / defects in it. Even if it has been developed without any bugs; however if it is difficult to learn and tiresome to operate, then it can’t be called a quality product.

4) A Software may be termed as a Quality product in spite of presence of some Bugs or Defects in it:
Acceptance of few known bugs in the software is a subjective term depending upon the nature of the bugs. If the software product is released to the customer very well within the constraints of budget, time & resources, & it contains some known open bugs, which will not cause any loss to the customer; then also it can be termed as a quality product. However for critical products aim of ensuring 100% or zero defect approach becomes necessary.

5) Maintaining quality of a software product is not only the responsibility of software testers:
Producing right quality software product is the responsibility of everyone involved in the chain including the customer. Role of a software tester is to identify the deviations and report them to the development team effectively.

Software Tester has a prime role to validate the correctness, reliability, usability and interoperability of the product and report the deviations.

Software tester may not be able to validate certain important quality related factors like maintainability, reusability, flexibility & portability etc. etc.

6) Software tester should endeavor to detect bugs in the software right from the beginning itself:
As the software moves into advanced stages of its development, the cost of fixing the bugs in it also keeps on increasing exponentially.

For example, If during an advanced stage of system testing of software, any bug is found in its basic design itself, this could lead to an extremely costly process of fixing the bug. In addition to this may necessitate amendments in the design & the basic code itself.

Hence detection & rectification of bugs during initial stages of design are quite economical.

7) Software Quality Factors are essential attributes, absence of which can pose threat to the success of the software:
For any software product following are the important quality factors, the priority and importance of which may vary from software product to product. For example, factors like flexibility and reusability gain prime importance, if the software under development needs to be changed quite frequently.

#) Flexibility: An effort required to modify an operational program.

#) Reusability: Extent to which a program can be used in other applications.

#) Correctness: Extent to which the program satisfies the desired requirements.

#) Reliability: Extent to which the program can be expected to perform its intended functions with desired precision.

#) Efficiency: The amount of computing resources and code required by the program to perform a particular function.

#) Integrity: Extent to which unauthorized persons get prevented / controlled from accessing the software or its data.

#) Usability: Effort required in learning, operating, preparing inputs, and interpreting the outputs of a software program.

#) Maintainability: Effort required in locating and fixing an error in an operational program.

#) Testability: Effort required in testing a program to ensure that it performs in accordance with its intended function.

#) Portability: Effort required to transfer the software from hardware of one configuration to the other.

#) Interoperability: Effort required to couple one system with the other.

8) Cost of software quality refers to the total expenditure incurred on firstly preventing the errors, secondly identifying the errors and lastly correcting these errors:
Cost of quality can be brought down if the software developers are extra vigilant in developing their application and before passing it into testing phase & endeavor to ensure that the application is either free of defects or has bare minimum number of defects. However such activities aimed at preventing errors from going into the product involve additional efforts & costs. This calls for added concentration on building efficient process of development and keeping on continuously improving it by identifying weaknesses therein. The benefits of such extra efforts may not be immediate, however in the long run cost of software quality ought to come down significantly.

9) Cost of fixing a software bug is possible to be brought down, if the bug is able to be detected during the early stages of development:
As the software moves into advanced stages of its development, the cost of fixing the bugs in it also keeps on increasing exponentially. Hence practice of life cycle testing becomes necessary.

10) Apart from testing of the software product, repeated inspections, design reviews & code walkthroughs are effective quality control measures.

No comments: