Software Quality Assurance
Software Quality Assurance
Assurance
Uditha Landekumbura
Bsc. in Software Engineering
SCQF Level 7,8,9
EQF 5,6
Module Outline
Fault: A defect or flaw in the code or design caused by an error. The fault may
remain latent until triggered.
Failure: The visible or functional consequence of a fault when the system does not
perform as expected during execution.
IEEE Definitions
Joseph M. Juran
“Quality consists of those product features which meet the needs of customers
and thereby provide product satisfaction. Quality consists of freedom from
deficiencies” (Juran, 1988)
Pressman’s definition
Key Aspects of Software Quality
Functionality:
This dimension assesses whether the software performs its intended functions correctly
and completely, meeting all specified requirements. It includes factors like suitability,
accuracy, interoperability, and compliance with standards.
Reliability:
Reliability measures the software's ability to perform its required functions under stated
conditions for a specified period. This includes factors like fault tolerance, recoverability,
and consistency of performance.
Usability:
Usability reflects how easy and user-friendly the software is. This includes aspects such as
the intuitiveness of the user interface, user satisfaction, and the learning curve required to
effectively use the software.
Efficiency:
Efficiency refers to how well the software utilizes system resources, including response
times, processing times, and resource consumption. It assesses how the software
performs in terms of speed and resource utilization.
Maintainability:
Maintainability denotes how easily the software can be modified, updated, or repaired. This
involves evaluating factors such as modularity, readability, and ease of diagnosing faults.
Portability:
Portability assesses the ease with which the software can be transferred from one
environment to another. This includes its ability to run on different platforms or with
different systems.
Security:
Security focuses on the software’s ability to protect data and maintain functionality despite
malicious attacks or accidental failures. This involves aspects like confidentiality, integrity,
availability, and authentication.
Testability:
Testability is the extent to which software can be tested to ensure its quality. It reflects how
easily the software can be subjected to tests for functionality, performance, and security.
Importance of Software Quality
User Satisfaction: High-quality software meets user expectations, leading to
increased satisfaction and trust.
SQA focuses not only on the product itself but also on the processes used to
develop and maintain it. Its primary goal is to prevent defects and ensure that
the software development process consistently produces high-quality
software.
Software Quality Assurance vs. Software Quality
Control
SQA Example:
An SQA team performs an audit of the software development process to
ensure that all steps are followed as per the defined methodology (e.g., Agile,
Waterfall). They might also recommend improvements to reduce the
likelihood of introducing defects in future releases.
SQC Example:
A quality control engineer performs testing on a software application before
it is released to production. The engineer identifies several bugs, reports
them to the development team, and ensures the issues are resolved before
release.
Software Quality Assurance (SQA):
SQA is a preventive process. It focuses on the overall software
development life cycle (SDLC) to ensure that all processes, methods, and
activities used in software development meet defined quality standards.
The goal is to prevent defects before they occur by optimizing and
improving the development process itself.
Software Quality Control (SQC):
SQC is a detective process. It involves identifying and fixing defects after
they have occurred, focusing specifically on the product. SQC verifies
whether the final software meets the specified requirements and quality
standards through testing and inspection activities.
Key Components of Software Quality Assurance
Process Definition and Improvement:
SQA involves defining, standardizing, and improving the processes used to create
software, ensuring they are followed correctly and optimized over time.
Standards Compliance:
SQA ensures that the software development process and the final product
comply with industry standards, regulations, and internal guidelines (e.g., ISO
9000, CMMI).
Testing and Validation:
Testing is a critical part of SQA. It includes verifying that the software behaves as
expected and validating that it meets user needs. This can involve various testing
techniques, such as unit testing, integration testing, system testing, and user
acceptance testing (UAT).
Documentation:
Proper documentation of the development process, quality procedures, and test results
is essential for tracking quality issues, changes, and improvements over time.
Periodic audits and peer reviews are conducted to ensure compliance with defined
processes, identify issues early, and maintain accountability for quality at all levels of
development.
SQA relies on software metrics (e.g., defect rates, code coverage, performance
metrics) to monitor and assess quality throughout the development process. These
metrics provide insights into the software's quality and the effectiveness of processes.
Objectives of Software Quality Assurance
Prevention of Defects:
SQA emphasizes preventing defects rather than just detecting and fixing them
later. By improving processes and implementing preventive measures, SQA
reduces the likelihood of errors and faults in the software.
Continuous Improvement:
SQA promotes continuous assessment and improvement of development
processes, ensuring that quality increases with each iteration of development.
Customer Satisfaction:
By ensuring the software meets user requirements and functions correctly, SQA
directly contributes to higher customer satisfaction and confidence in the
software product.
Cost Reduction:
Risk Mitigation:
SQA helps identify and mitigate risks associated with software failures, reducing
the likelihood of financial loss, data breaches, or system outages.
Aspect Software Quality Assurance (SQA) Software Quality Control (SQC)
Process Standardization:
SQA ensures that software development processes within software engineering
adhere to standardized procedures, whether following Agile, Waterfall, or DevOps
methodologies. This guarantees consistency and reliability across development
projects.
Early Defect Prevention:
By embedding quality assurance activities throughout the software engineering
life cycle, SQA helps prevent defects from being introduced in the early stages of
development (e.g., requirements, design). This leads to fewer errors in coding and
testing stages.
Risk Management:
SQA helps identify potential risks early in the software development process by
enforcing thorough reviews, audits, and testing procedures. It ensures that
software engineers consider risks like security vulnerabilities, performance
bottlenecks, or integration issues before they escalate into critical failures.
Continuous Improvement:
SQA helps software engineers avoid common mistakes, leading to fewer bugs in
the final product and reducing the need for rework.
Ensuring that the software meets all requirements and quality benchmarks leads
to a product that users can trust and rely on, ultimately boosting customer
satisfaction.
Addressing defects early through SQA practices lowers the overall cost of fixing
issues during later stages of development, saving time and resources.
SQA Tools and Techniques in Software Engineering
Tools like Selenium, JUnit, and TestNG help automate the testing process,
ensuring consistent and efficient validation of code.
Platforms like GitHub, Gerrit, and Crucible facilitate peer code reviews, allowing
software engineers to detect and fix errors early.
Static Analysis Tools:
Tools like SonarQube and Checkmarx perform static code analysis to detect
potential defects, security vulnerabilities, and performance bottlenecks.
Tools like JMeter and LoadRunner help test how well the software performs under
various workloads, ensuring that scalability and performance meet expectations.
Software Quality Standards
Software Quality Standards are internationally or organizationally recognized
guidelines, specifications, and best practices that define the required
characteristics and benchmarks for software quality. These standards ensure
that software products and development processes meet minimum quality
criteria related to functionality, reliability, performance, usability, and security.
This standard helps developers and organizations ensure that software meets
user needs and adheres to specific quality benchmarks.
1. Quality Model
2. External Metrics
3. Internal Metrics
4. Quality in Use Metrics
1. Quality Model
The core part of ISO/IEC 9126 is its Quality Model, which breaks down software
quality into six main characteristics, each of which has sub-characteristics. These
characteristics provide a structured way to evaluate software quality based on
functionality, reliability, usability, and more.
The Six Main Quality Characteristics
01) Functionality:
The ability of the software to provide functions that meet stated and implied
needs when used under specified conditions.
03) Usability: The effort required to learn, operate, and use the software effectively.
Understandability: How easily can users understand the software’s functionalities?
Learnability: How easy is it for users to learn to use the software?
Operability: Can users efficiently operate and control the software?
04) Efficiency:
The relationship between the performance of the software and the amount of resources used.
Time Behavior: How fast does the software respond and process requests?
Resource Utilization: How efficiently does the software use system resources?
05) Maintainability:
The ease with which the software can be modified to fix defects, improve performance, or adapt
to a changing environment.
Analyzability: How easily can issues be diagnosed?
Changeability: How easily can the software be modified?
Stability: How stable is the software after modifications?
Testability: How easily can the software be tested?
06) Portability:
The ease with which the software can be transferred from one environment to
another.
3. Internal Metrics
Internal metrics assess the software’s quality from a developer’s perspective,
analyzing the code, architecture, and other internal components. These metrics
are often used to measure how maintainable and testable the software is
during the development process.
4. Quality in Use Metrics
These metrics measure the user experience when interacting with the software,
focusing on effectiveness, efficiency, satisfaction, and freedom from risk. This
category helps assess how well the software meets its intended purpose from the
end-user's perspective.
ISO/IEC 25010 – Systems and Software Quality Model
This standard defines a comprehensive model for software and system
product quality. It describes eight main characteristics that define quality:
● Functional suitability: How well the software performs its intended
functions.
● Performance efficiency: Response time, resource usage, and scalability.
● Compatibility: Ability to work in diverse environments or with other
systems.
● Usability: Ease of use and learnability for the user.
● Reliability: Stability and fault tolerance.
● Security: Protecting data and ensuring access control.
● Maintainability: How easily the software can be modified, fixed, or
improved.
● Portability: Ability to transfer the software across different platforms.
ISO/IEC 90003 – Software Engineering Guidelines for Quality
This standard provides guidelines for applying ISO 9001 to software development.
It offers a comprehensive framework for developing, managing, and maintaining
software with an emphasis on meeting customer and regulatory requirements.
Software quality processes play a vital role in the Software Development Life
Cycle (SDLC) by integrating quality checks and balances at every stage of
development, from requirements gathering to maintenance.
Software Quality Management (SQM)
SQM defines the principles, practices, and procedures required to ensure the
quality of the software throughout its life cycle. It integrates quality planning,
quality assurance, and quality control activities, focusing on continuous
improvement to meet customer satisfaction and compliance with standards.
SQM Comprises Four Subcategories
01) Quality Planning:
The process of identifying which quality standards are relevant to the project and
determining how to meet them.
Key Activities:
Importance: Quality planning ensures that quality is considered early in the project,
preventing issues that may arise in later stages.
02) Quality Assurance (QA):
Key Activities:
Product Assurance
Product Assurance ensures that the end product, the software itself, meets
the required quality standards and specifications. This involves verifying that
the product functions as intended, is free from defects, and satisfies user
needs.
Methods and Supporting Technologies
01) Audit
An audit is a formal review of processes, products, or systems conducted to
verify adherence to standards, procedures, and regulations. It provides an
independent assessment of how well the development process is being
followed.
Product Assurance: Embedded methods can also monitor the final product’s
behavior in real-time, detecting issues like memory leaks, performance
bottlenecks, or incorrect functionality during execution.
03) Assessment
Assessments evaluate both the process and product to ensure they meet
quality objectives. This involves analyzing the effectiveness of processes and
the quality of deliverables at key milestones.
Analysis involves systematically examining both the process and the product
to identify defects, weaknesses, or areas for improvement. It is used to
diagnose issues and refine the development process.
Process Assurance: Process analysis looks at metrics and data from the
development lifecycle to understand where bottlenecks or inefficiencies exist.
This helps improve future project workflows.
Statistical Process Control (SPC): Uses metrics and statistical methods to monitor
and control the development process.
Failure Mode and Effect Analysis (FMEA): Analyzes potential failure points in the
product and assesses their impact on system performance.
Chapter 05 - Software Metrics
Software Metrics are quantitative measures used to assess various aspects of
software development and performance. They provide insight into the quality,
efficiency, and effectiveness of the software development process and the software
product itself.
Importance of Software Metrics
Quality Improvement: Metrics help identify areas of improvement in both the
software and the development process.
Performance Monitoring: They provide a way to track project progress and
performance over time.
Decision Making: Metrics offer objective data to guide decision-making regarding
resource allocation, timelines, and project scope.
Classification of Software Metrics
01) Product Metrics
Product Metrics measure attributes of the software product itself. They focus
on the software's functionality, complexity, performance, and reliability.
● Size Metrics: Measure the physical size of the software.
Example: Lines of Code (LOC), Function Points (FP).
● Complexity Metrics: Assess how difficult the software is to understand
and maintain.
Example: Cyclomatic Complexity (measures the control flow of the
program).
● Quality Metrics: Evaluate aspects like defects, maintainability, and
reliability.
Example: Time to Fix Defects, Cycle Time (total time taken to develop a feature).
● External metrics: External metrics are the metrics used for measuring
properties that are viewed to be of greater importance to the user, e.g.,
portability, reliability, functionality, usability, etc.
● Hybrid metrics: Hybrid metrics are the metrics that combine product, process,
and resource metrics. For example, cost per FP where FP stands for Function
Point Metric.
Advantage of Software Metrics