
What is SQA? A Complete Guide to Software Quality Assurance Definition and Process
Software Quality Assurance (SQA) is the disciplined set of processes, standards, and activities that ensure software meets defined quality attributes throughout the software development lifecycle. SQA works by embedding quality planning, process controls, reviews, audits, and continuous improvement into every SDLC phase so teams prevent defects instead of merely detecting them during testing. This guide explains SQA’s core definition, how the SQA process maps to development workflows, and practical methods for implementing SQA in Agile, DevOps, and regulated environments. Many teams struggle with unpredictable defects, slow releases, and security gaps; applying SQA reduces rework, improves reliability, and supports compliance through traceability and standards alignment. Below you will find a structured exploration: what SQA is and why it matters, the main SQA process steps and templates, contrasts with quality control and testing, quantified benefits with an EAV table, common implementation challenges and mitigation tactics, leading methodologies compared with a decision table, and the 2025 trends—automation, AI/ML, cloud SQA and DevSecOps—that are reshaping SQA practice. Throughout, the article uses SQA process language, standards references such as ISO/IEC 25010 and CMMI, and practical how-to guidance for immediate application.
What is Software Quality Assurance and Why Is It Important?
Software Quality Assurance (SQA) is a system of planned and systematic activities implemented to provide confidence that software will satisfy quality requirements and standards. SQA operates by defining quality objectives, enforcing process discipline, and verifying that development and delivery practices align with those objectives to produce reliable, secure, and maintainable software. The immediate benefits include fewer production incidents, clearer traceability for audits, and measurable reductions in rework and time-to-market. This section defines SQA, outlines its core principles, and maps its role across SDLC phases so readers can see where preventive quality investments deliver the largest returns in effort and cost.
How is SQA Defined in Software Development?
SQA is defined as the set of organizational processes, standards, and activities that plan, monitor, and improve software quality across the SDLC, ensuring conformance to quality models such as ISO/IEC 25010 and organizational requirements. The mechanism is process governance—establishing criteria, metrics, and controls—and the outcome is predictable software that meets functional, performance, security, and usability expectations. Current research shows that formal SQA adoption improves release stability and audit readiness, particularly when combined with traceability and automated checks. Understanding this definition frames why SQA is distinct from testing and why standards alignment matters for regulated projects.
What Are the Key Principles of SQA?
SQA rests on a small set of core principles that guide practical implementation and decision-making across teams. First, defect prevention takes priority over defect detection by designing quality into requirements and architecture. Second, continuous improvement uses feedback loops—measure, analyze, act—to reduce defect rates and process variance. Third, standards adherence and traceability provide objective criteria for audits and regulatory compliance. These principles translate into concrete practices such as requirement inspections, coding standards, automated gates, and post-release retrospectives that drive measurable quality gains and connect directly to cost savings.
Why Does SQA Matter in the Software Development Lifecycle?
SQA matters because quality activities positioned early in the SDLC prevent expensive downstream fixes and shorten lead times for stable releases. Mapping SQA to SDLC phases clarifies interventions: requirements validation reduces ambiguous features, architecture reviews prevent systemic design defects, and test strategy alignment ensures effective verification during implementation and deployment. Integrating SQA into planning and sprint ceremonies creates faster feedback loops that reduce churn and improve velocity. Seeing how SQA interventions at each phase cut defect injection and rework makes the economic case to adopt SQA practices across teams.
What Are the Main Steps in the SQA Process?

The SQA process is a repeatable sequence of activities designed to plan, implement, verify, and improve software quality from project inception through maintenance. The mechanism combines quality planning, process definition and documentation, reviews and audits, corrective actions, and continuous improvement to create a closed-loop quality management system that reduces risk and improves predictability. Implementing these steps produces deliverables such as quality plans, checklists, audit reports, and metrics dashboards that operationalize quality goals. The following ordered steps describe what to do and why, and a process table clarifies activities and expected deliverables for each step.
SQA implementation typically follows these main steps:
- Quality planning: define objectives, KPIs, and entry/exit criteria for each phase.
- Process definition: document workflows, roles, and standard operating procedures.
- Reviews and audits: conduct peer reviews, code inspections, and formal audits.
- Corrective actions: run RCA, assign fixes, and track preventive measures.
- Continuous improvement: measure outcomes, iterate on processes, and update standards.
These steps produce a coherent how-to sequence that teams can convert into sprint-level checklists and release gates to embed quality across development cycles.
Intro to a practical SQA process mapping:
| Phase | Activities | Deliverables |
|---|---|---|
| Planning | Define quality objectives, KPIs, tools, and roles | Quality Plan, KPIs, Entry/Exit Criteria |
| Definition | Document processes, SOPs, versioning, and standards | Process Docs, Checklists, Traceability Matrices |
| Verification | Reviews, audits, automated test execution, and metrics collection | Review Reports, Audit Findings, Test Reports |
| Correction | Root cause analysis, corrective/preventive actions tracked | RCA Reports, Action Items, Closure Evidence |
| Improvement | Lessons learned, metric-based adjustments, and training | Retrospective Notes, Updated Process Docs, KPI Trends |
This table summarizes the SQA process and highlights deliverables teams can use to build a flowchart and HowTo schema for implementation.
How Does Quality Planning Fit into SQA?
Quality planning sets the foundation by translating product goals into measurable quality objectives, KPIs, and acceptance criteria that guide development and verification activities. The mechanism includes selecting standards to apply (e.g., ISO/IEC 25010 attributes), defining metrics like defect density or escape rate, and specifying entry/exit criteria for stages such as code complete and release candidate. A mini-template for a Quality Plan should list objectives, responsibilities, key metrics, tools, and escalation paths. Teams that invest time in clear quality planning reduce ambiguity, ensure consistent test coverage, and enable meaningful automation and dashboards that keep projects on track.
What Is Involved in Process Definition and Documentation?
Process definition and documentation capture the “how” of quality—who does what, when, and to which standard—so work is repeatable and auditable. This involves creating SOPs, checklists for reviews, coding standards, test case templates, and versioning practices aligned with CMMI or organizational frameworks. Good documentation uses modular, maintainable formats and includes traceability mappings from requirements to tests, which simplifies audits and change impact analysis. Clear process artifacts reduce onboarding friction, support automated gating, and make continuous improvement measurable through documented baselines.
How Are Reviews and Audits Conducted in SQA?
Reviews and audits validate conformance to processes and detect defects before release by using structured peer reviews, design inspections, code walkthroughs, and formal audits with defined checklists. The mechanism is a combination of lightweight, frequent peer reviews for early detection and periodic formal audits to verify process adherence and systemic issues. Recommended audit cadence includes sprint-level reviews, release readiness audits, and post-mortem audits after major incidents. Formal audit outputs include findings, severity assessments, and remediation plans that feed corrective action workflows to close gaps and prevent recurrence.
What Are Corrective Actions and Continuous Improvement in SQA?
Corrective actions address root causes identified by audits and failures and transform them into preventive measures tracked to closure. Root cause analysis techniques such as 5 Whys and fishbone diagrams identify systemic drivers of defects, while corrective workflows assign owners, deadlines, and verification steps. Continuous improvement uses PDCA loops—plan, do, check, act—applied to process metrics to reduce defect rates and shorten cycle time. Tracking trends in KPIs and running regular retrospectives ensures the SQA program evolves, focusing investment where defect-proneness and customer impact are highest.
How Is SQA Integrated Throughout the SDLC?
SQA integrates into the SDLC by mapping specific activities to development ceremonies and artifacts: requirements validation during backlog refinement, automated unit and integration tests during CI builds, and release audits before production deployment. The mechanism uses pipeline gates, test orchestration, and observability to keep feedback close to code changes, enabling shift-left testing and rapid remediation. In Agile and DevOps contexts, integration means treating quality as a shared responsibility across cross-functional teams, with SQA providing standards, tooling guidance, and metric-driven coaching. Integration examples include adding static analysis to pull requests, running security scans in CI, and automating acceptance criteria verification as part of deployment gates.
How Does SQA Differ from Quality Control and Software Testing?
SQA, Quality Control (QC), and software testing are related but distinct: SQA is a process- and systems-focused discipline ensuring quality practices; QC is product-focused validation of outputs; software testing is an activity that executes test cases to detect defects. Mechanically, SQA defines processes and audit trails, QC inspects products against acceptance criteria, and testing executes verification tasks under QC oversight. Understanding these differences helps teams assign responsibilities correctly and avoid gaps where process controls are weak but testing is heavy or vice versa. The next section provides a concise comparison and practical guidance on role boundaries.
What Is the Difference Between SQA and Quality Control?
SQA focuses on process definition, continuous improvement, and standards compliance, while QC focuses on product verification and defect identification through testing and inspection. SQA activities include planning, audits, and metrics governance; QC activities include test execution, defect triage, and acceptance testing. A two-column comparison clarifies responsibilities for managers, QA engineers, and developers so accountability aligns with organizational goals. Clear separation reduces duplicated effort and ensures that process weaknesses are addressed, not merely symptoms fixed.
| Aspect | SQA (Process) | QC (Product) |
|---|---|---|
| Focus | Process design and compliance | Product verification and defect finding |
| Timing | Ongoing across SDLC | During verification/test phases |
| Primary Output | Process docs, audits, KPIs | Test reports, defect logs, acceptance signoff |
| Responsibility | SQA/quality team + management | Test/QC teams and developers |
This table shows how SQA and QC complement each other: SQA prevents and controls, QC detects and verifies.
How Is Software Testing Related to SQA and QC?
Software testing is the set of activities and techniques—unit, integration, system, and acceptance testing—used to validate software behavior and find defects before release. Testing sits under QC as the primary verification mechanism, while SQA ensures that testing processes are effective, repeatable, and aligned to quality objectives. Effective SQA defines test coverage criteria, maintenance practices for test artifacts, and measures of test effectiveness such as defect escape rate. Understanding testing types and ensuring SQA oversight of test processes increases test ROI and reduces flakiness and maintenance burden.
Why Is Understanding These Differences Important?
Clear distinctions between SQA, QC, and testing reduce organizational confusion, prevent gaps in responsibility, and lower project risk by ensuring both product checks and process controls exist. When teams conflate SQA with testing, they may overinvest in defect detection while neglecting process causes that create defects, leading to repeated failures. Defining boundaries—who owns standards, who runs audits, who maintains test suites—enables targeted KPIs and effective corrective actions. This clarity reduces rework, shortens time-to-resolution, and improves stakeholder confidence in releases.
What Are the Benefits of Implementing Software Quality Assurance?

SQA delivers measurable benefits across cost reduction, efficiency gains, user experience improvements, security posture, and regulatory compliance when applied consistently. The mechanism is prevention: preventing defects through standards and early validation reduces expensive late fixes, increases release predictability, and raises customer satisfaction. Quantifiable outcomes include lower defect escape rates, faster incident resolution, and demonstrable audit readiness. To make benefits actionable, the table below maps benefit categories to measurable impact and expected outcomes teams can track after SQA adoption.
SQA benefits—brief list and setup for EAV table:
- Cost reduction through early defect prevention and lower post-release fixes.
- Efficiency improvements via standardized processes and reusable artifacts.
- Better user experience and reliability from systematic verification.
- Improved security posture by integrating security testing into QA processes.
| Benefit Area | Metric / Attribute | Typical Impact (Outcome) |
|---|---|---|
| Cost | Defect escape rate, rework hours | 20-40% reduction in post-release fixes (typical range) |
| Efficiency | Cycle time, deployment frequency | Faster releases and repeatable pipelines |
| UX & Reliability | Uptime, user-reported issues | Improved stability, fewer critical incidents |
| Security & Compliance | Vulnerabilities found pre-release, audit findings | Reduced vulnerabilities in production and audit readiness |
This EAV-style table clarifies where SQA delivers value and which metrics to track to demonstrate ROI and continuous improvement.
How Does SQA Reduce Costs and Improve Efficiency?
SQA reduces costs by shifting defect detection earlier in the lifecycle—requirement and design reviews prevent expensive rework in later stages—and by standardizing processes to eliminate variation and rework. The mechanism is measurable: define KPIs such as mean time to detect and fix, defect density, and test automation coverage, then track improvements against baselines. Example ROI scenario: reducing critical post-release defects by 30% typically lowers incident response costs and customer churn, enabling teams to reallocate time to feature work. This economic framing supports prioritizing SQA investments where they produce highest marginal returns.
What Impact Does SQA Have on User Experience and Security?
SQA improves user experience by enforcing acceptance criteria, performance budgets, and accessibility checks, which collectively raise product quality and reduce user complaints. For security, embedding automated SCA/DAST/IAST and manual threat modeling into QA workflows reduces vulnerabilities escaping to production and supports secure-by-design principles. Combining UX validation and security testing in SQA pipelines ensures that reliability, accessibility, and confidentiality are verified before release. These integrated checks produce measurable improvements in customer satisfaction scores and lower incident-related costs.
How Does SQA Support Regulatory Compliance and Faster Time to Market?
SQA supports compliance by establishing traceability from requirements to test cases, maintaining audit trails, and documenting corrective actions—practices prized in regulated industries. The mechanism is process evidence: versioned process documents, traceability matrices, and audit reports demonstrate conformity to standards and speed audits. At the same time, predictable quality gates reduce release rollbacks and enable faster, safer time-to-market by catching issues early. Teams that balance documentation with automation can both satisfy auditors and maintain high deployment velocity.
Can You Summarize the Key Benefits of SQA?
SQA offers a constellation of benefits that together improve product quality and business outcomes:
- Reduced post-release defects and rework.
- Faster, more predictable release cycles.
- Improved user experience, accessibility, and performance.
- Stronger security posture through integrated testing.
- Audit readiness and compliance traceability.
- Continuous improvement via metric-driven process updates.
These benefits show why investing in SQA practices yields compounding returns over project lifecycles and supports strategic business goals.
What Are the Common Challenges in SQA Implementation and How Can They Be Overcome?
Implementing SQA faces common barriers such as upfront tooling and staffing costs, skills gaps in automation and AI, and cultural friction integrating SQA with development teams. The mechanism of failure is often treating quality as a separate function rather than a shared responsibility; remediation requires phased adoption, affordable tooling choices, and focused training. The following problem/solution lists and tactical suggestions provide high-impact, practical strategies to lower barriers and achieve sustainable SQA adoption.
Common challenges include funding constraints, lack of automation skills, and integration resistance. Address these with prioritized automation, incremental process changes, and metrics that show quick wins to stakeholders.
- Cost and skills barriers
- Integration and cultural resistance
- Tooling and maintenance overhead
These challenge categories map to concrete mitigation tactics below.
What Are the Cost and Skills Barriers in SQA?
Cost drivers include licensing for test infrastructure and staffing for automation and audit roles, while skills gaps often appear around test automation, AI-assisted testing, and security testing practices. Mitigation tactics include phased adoption—start with low-cost open-source tools and incremental automation of high-value regression suites—plus targeted upskilling programs to build internal capability. Prioritizing test types by risk (smoke, regression, security-critical paths) helps teams deliver early ROI and justify further investment. Realistic expectations with staged metrics allow leadership to fund broader SQA activities after initial wins.
How Can Integration Issues Be Managed Effectively?
Integration friction between QA and development teams is solved by shared metrics, automation integrated into CI/CD pipelines, and cross-functional ownership of quality outcomes. Practical steps include adding quality gates to pull requests, defining shared KPIs like escape rate and deployment success, and establishing regular cross-team retrospectives to surface friction points. Incremental practices such as shift-left testing and pairing QA engineers with developers foster collaboration and reduce bottlenecks. These cultural and technical integrations make quality a shared outcome, not a siloed checkpoint.
What Strategies Help Overcome These Challenges?
High-impact strategies include automation focused on regression and CI tests, measurable KPIs that demonstrate impact, and a phased rollout plan that targets the riskiest areas first. An action checklist: prioritize critical paths, implement CI-integrated tests, introduce lightweight audits, and run monthly metric reviews to guide investments. Recommended KPIs to track progress include defect escape rate, automation coverage, mean time to repair, and audit findings closed. These strategies create a pragmatic roadmap from initial adoption to mature, metric-driven SQA.
- Prioritize automation for high-risk flows.
- Track escape rate and automation ROI.
- Conduct phased rollouts with clear objectives.
This checklist gives teams an actionable plan to overcome common SQA adoption barriers and secure sustainable quality gains.
What Are the Leading SQA Methodologies and How Do They Work?
Leading SQA approaches—Agile SQA, DevOps/DevSecOps, and Waterfall SQA—offer different practices and trade-offs depending on product type, regulatory constraints, and team maturity. Agile SQA emphasizes iterative validation and test automation within sprints, DevOps integrates continuous testing and monitoring into CI/CD pipelines, and Waterfall SQA relies on sequential verification with heavy documentation ideal for regulated projects. The following comparison table summarizes key practices, pros, and cons to help teams choose or hybridize approaches based on risk, speed, and compliance needs.
| Methodology | Key Practices | Pros / Cons |
|---|---|---|
| Agile SQA | Sprint-level testing, automation, acceptance criteria | Pros: fast feedback, adaptive; Cons: requires strong automation and discipline |
| DevOps / DevSecOps | CI/CD integration, continuous testing, monitoring | Pros: continuous quality and security; Cons: pipeline complexity, tooling investment |
| Waterfall SQA | Stage gates, formal documentation and audits | Pros: strong traceability for compliance; Cons: slower feedback and higher late-stage fixes |
This comparison helps decide which methodology or hybrid approach best fits an organization’s constraints and quality goals.
How Is Agile SQA Different from Traditional Approaches?
Agile SQA embeds quality activities within sprint cycles using test-driven practices, automation, and frequent reviews so defects are found rapidly and addressed within the same iteration. The mechanism is short feedback loops: unit and integration tests run in CI, acceptance criteria are validated continuously, and retrospective improvements are applied sprint-by-sprint. Agile SQA emphasizes lightweight documentation, living test suites, and shared ownership between developers, testers, and product owners. These practices speed delivery while maintaining quality, provided teams invest in automation and maintain test suite health.
The Agile manifesto’s principles, emphasizing individuals and interactions, working software, customer collaboration, and responding to change, are foundational to adapting Scrum for optimized SQA.
Scrum Framework Adaptation for Optimized Software Quality Assurance
This systematic review explores the challenges and strategies for achieving sustainable quality management within the Scrum framework, an Agile methodology widely used in software development projects. The review assesses the tradeoff between implementing scrum and the return on investment by aligning with the Agile manifesto’s principles, emphasizing the value of individuals and interactions, working software, customer collaboration, and responding to change. It investigates effective strategies for implementing Software Quality Assurance (SQA) within scrum, highlighting the importance of defining the SQA testing process and seamlessly integrating it into the Agile workflow. Real-world use cases of SQA implementation in large organizations and start-up companies are examined, emphasizing the role of Scrum tools and APIs in supporting software quality assurance teams. By considering the findings, organizations can balance speed and quality, enhance the user-centered design, and utilize appropriate tools to achieve improved software delivery, resource preservation, reduced overhead, increased satisfaction, and productivity while minimizing environmental impact. This review provides valuable insights for organizations aiming to enhance their software development practices and deliver high-quality products in today’s dynamic technological landscape.
What Role Does DevOps Play in Modern SQA?
DevOps connects SQA to continuous delivery by incorporating automated tests, environment provisioning, and observability into CI/CD pipelines so quality checks run on each change. The mechanism includes pipeline checkpoints for unit tests, integration tests, security scans, and performance regressions, plus production monitoring that feeds back to engineering. DevOps enables rapid detection of regressions and supports immediate remediation, making quality operational rather than episodic. Observability and telemetry provide the data SQA needs to prioritize improvements and measure actual customer impact.
Modern cloud-based systems present unique challenges for QA, necessitating scalable frameworks that incorporate automated test orchestration and continuous feedback loops.
Scalable QA Frameworks for Cloud-Based Systems
This paper introduces a scalable software quality assurance (QA) framework tailored for cloud-based application ecosystems. The framework addresses the unique challenges of distributed, multi-tenant, and containerized environments characteristic of modern cloud systems. It extends existing end-to-end QA models by incorporating automated test orchestration, compliance-focused validations, and continuous feedback loops to ensure high-quality deliverables in dynamic, cloud-based applications. The framework was evaluated on two distinct systems: a Software-as-a-Service (SaaS)-based education platform and a large-scale enterprise Customer Relationship Management (CRM) system. Results demonstrated significant improvements in test coverage, faster testing cycle times, and a reduction in post-deployment issues. These findings highlight the framework’s adaptability and effectiveness in enhancing software quality assurance processes for diverse cloud environments, underscoring its
How Does Waterfall SQA Compare to Agile and DevOps?
Waterfall SQA uses sequential phases with formal reviews and heavy documentation that provide strong traceability and compliance evidence but slower feedback and higher risk of late discoveries. The mechanism is end-stage verification, which suits projects with fixed requirements and strict regulatory controls where change is costly. Waterfall’s pros include structured documentation and process predictability; cons include limited flexibility and longer cycles for fixing defects discovered late. In regulated industries, a hybrid approach combining waterfall documentation with automated checks can balance compliance and timeliness.
What Are the Latest Trends and Technologies Shaping the Future of SQA in 2025?
In 2025, SQA continues evolving with wider adoption of automation, AI/ML for test generation and analytics, cloud-based test environments, shift-left practices, and deeper integration of DevSecOps for security. The mechanism driving change is automation and data: more tests are generated and prioritized by analytics, environments are provisioned on demand in the cloud, and security checks are woven into pipelines. These trends increase test scope, reduce manual maintenance, and accelerate feedback loops, but they also require new skills and governance to manage AI-driven outputs responsibly. Below are focused discussions of each trend and how teams can apply them.
How Is Automation Transforming SQA Processes?
Automation now spans unit, API, UI, and performance tests, enabling faster regression cycles and consistent verification across environments. The mechanism reduces manual toil and scales verification through parallel runs and CI integration, improving ROI when automation targets high-value, repeatable flows. Automation maintenance remains a consideration: flaky tests and brittle selectors need active governance and test design best practices. Overall, automation is the backbone enabling continuous quality and freeing human effort for exploratory and value-driven testing.
What Role Does Artificial Intelligence and Machine Learning Play in SQA?
AI/ML assists SQA by generating prioritized test cases, detecting anomalies in logs and test outcomes, and predicting flaky tests or components at risk of failure. The mechanism is analytics-driven optimization: models analyze historical failures, code changes, and usage patterns to propose focused tests that increase defect detection efficiency. Current limitations include model explainability and data quality, so teams should apply AI as augmentation rather than a replacement for human judgment. In practice, AI shortens test suites while preserving coverage and surfaces high-impact areas for human review.
The integration of AI into QA processes is revolutionizing how testing is performed, especially for complex cloud-based applications that traditional methods struggle to manage.
AI-Powered Quality Assurance for Cloud Applications
The integration of artificial intelligence (AI) with quality assurance (QA) processes represents a paradigm shift in how software testing is conceptualized and implemented, particularly for cloud-based applications. This research examines the transformative impact of AI-powered quality assurance frameworks on cloud application development and maintenance. Traditional testing methodologies often struggle to keep pace with the rapid deployment cycles and complex architectures inherent in cloud environments. The dynamic nature of cloud applications, with their distributed microservices architecture, containerization, and continuous integration/continuous deployment (CI/CD) pipelines, necessitates a fundamental reimagining of quality assurance practices. This paper presents a comprehensive analysis of current AI-driven QA methodologies, proposes novel frameworks for implementation, and evaluates their effectiveness through empirical case studies. The research demonstrates ho
How Are Cloud-Based SQA Solutions Changing Quality Assurance?
Cloud-based SQA provides scalable, on-demand test environments that enable parallel execution, wide device coverage, and ephemeral infrastructure for reliable CI/CD testing. The mechanism reduces infrastructure setup time and cost by leveraging elastic compute and managed services, allowing large test matrices to run concurrently. Integration considerations include environment parity, data management, and cost governance, but benefits include faster iteration, lower capital expense, and broader test coverage across platforms.
What Is Shift-Left Testing and Why Is It Important?
Shift-left testing moves verification activities earlier in the lifecycle—into requirements, design, and early development—to detect defects when they are cheapest to fix. The mechanism involves unit-level validation, static analysis, and early integration checks combined with requirement reviews that reduce ambiguity. Implementing shift-left incrementally—starting with static checks and unit automation—yields immediate reductions in defects and creates momentum for deeper test automation in later stages. Early wins from shift-left testing justify further investment and cultural change.
How Are DevSecOps and Security Testing Evolving in SQA?
DevSecOps integrates automated security scans, SCA, DAST, and IAST into CI/CD workflows so vulnerability detection becomes part of routine quality checks. The mechanism blends security testing into SQA by running scans at appropriate pipeline stages, triaging results based on risk, and automating remediation where feasible. This secure-by-design approach reduces critical vulnerabilities in production and aligns security with delivery velocity. Cultural change—shared responsibility for secure code—complements tooling to deliver measurable security improvements.