A Basic understanding of Software Quality Assurance.

A thing or two about Software Quality Assurance for managing and delivering quality software.

ᗰṳhumuzå ₱ɨuṩ
10 min readMay 15, 2023

Background

Software engineering teams are the key to good software although its quality isn’t always guaranteed right away.

Apart from the expertise of the software engineering team, the quality of software can be assured through a set of dedicated quality management activities such as quality assurance, quality control, and testing often done by SQA Teams e.g., testers & software quality Assurance Engineers among others. And this is where Software Quality Assurance comes in.

Introduction

Software Quality Assurance (SQA) is a set of tools, practices, and processes applied with the purpose of discovering, validating, verifying, monitoring, and evaluating a piece of software in order to ensure its quality. SQA often times spreading through all of the software development phases depending on the team, industry or practices being followed.

Software Quality Assurance can be reviewing the source code, evaluating the software designs, testing the systems, reviewing developer’s workflows, as well as performance and managing the software releases.

SQA can be conducted on all kinds of software, web, mobile, and desktop/standalone applications as well as large enterprise systems. In order to make sure the released software is safe and functions as expected, the concept of software quality was introduced.

While quality assurance is all about preventive activities and quality control focuses on corrective processes. Software Quality Assurance combines both preventative activities and corrective processes to ensure quality software delivery.

Look at quality control as being a subset of quality assurance and software testing as a subset of quality control.

Software Quality

Software quality is the process of conforming to explicitly stated functional and performance requirements, documented development standards, and implicit characteristics when developing software products.

It measures how well the software is designed (quality of design), and how well the software conforms to that design (quality of conformance). It’s often described as the ‘fitness for purpose of a piece of software and its desirable attributes.

It’s important to note that software requirements are the foundation/benchmark from which quality is measured and specified requirements and set industry standards define the development criteria that guide the manner in which software is developed/engineered.

If at any one-time software does not meet the set requirements or standards then its quality is put into question.

And some of the approaches to software quality include defect management and quality attributes.

The Concept of Software Quality?

Is simply the degree of conformance to explicit or implicit requirements and expectations where the explicit and implicit expectations correspond to the two basics levels of software quality; -

  • Functional — the product’s compliance with functional (explicit) requirements and design specifications. This aspect focuses on the practical use of software, from the point of view of the user: its features, performance, ease of use, and absence of defects.
  • Non-Functional — system’s inner characteristics and architecture, i.e., structural (implicit) requirements. This includes code maintainability, understandability, efficiency, and security.

How is Quality Determined by Software Quality Assurance Teams?

There are two main approaches when it comes to quality assurance: the quality attributes approach and the defect management approach.

Defect management approach in Software quality assurance helps track defects which are assigned categories based on the rank of the severity of each defect.

The quality attributes approach in Software Quality assurance focuses on six main quality attributes as a measure of performance (measurable indicators) to determine the quality of a product. These are; -

  • Reliability — which determines how the software performs under specific conditions to see how often it fails as well as figure out how quickly the system can reach its full operational level post-fail.
  • Functionality — QA teams test the software’s functions to see if they’re appropriate or if they have been implemented correctly. QAs will also try to test the software to see how it interacts with other system components. Assess its data security and if it complies with the required laws and mandatory guidelines.
  • Efficiency — should always be considered when designing software architecture which is why the QA team will try to determine if the development team followed good coding practices while developing the software product.
  • Usability — It’s important that users understand the software product’s functions as easily as possible. If it takes too much effort or isn’t possible then it doesn’t pass the QA.
  • Portability — simply ensures that every piece of the software product and the software as a whole has the ability to adapt to changes in its environment, it’s easy to install, and system components within a specific environment are easy to replace.
  • Maintainability — assess how easy it is to identify defects, root out the main cause of failure within the software product, and go on to fix it. QAs also look at how difficult modifying code will be in the event of a fault and the stability of the system's performance during the application of these changes.

Why Software Quality Assurance

Software Quality Assurance (SQA) is a systematic process used to determine whether a product meets specifications.

The purpose of Software Quality Assurance, or SQA, is to make sure your software meets the required quality standards, including functioning, performance, and security. Although the term may sound very technical, it can directly affect your business. Bad-quality software lowers the efficiency of the users and rises maintenance costs.

Who Is Responsible for Software Quality Assurance?

Even though everyone in a software development team is responsible for software quality assurance, a Software Quality Assurance Engineer should constantly question parts of the software development process to ensure the team is not only building the right product but also building it correctly.

An individual in this role can have many titles including QA engineer or QA analyst, Software QA Consultant, Software Engineer in test, or Tester, Quality Assurance Analyst (QA Analyst), Quality Assurance Engineer (QA Engineer), Software Quality Assurance Engineer (SQA Engineer), Software Quality Engineer, Quality Assurance Director (QA Director), Software Quality Engineer, Product Assurance Engineer, and Software Test Engineer.

The role of a Software Quality Assurance Engineer can differ based on the individual, the team, and the company they are working for as well as what needs to get done. Therefore, it helps to have cross-functional skills like technical aptitude, business knowledge, as well as a good understanding of DevOps principles and processes.

Software Quality Assurance is everyone’s responsibility at the end of the day because roles and activities within software engineering are now interchangeable as the joke of “ wearing many hats “ is made a lot.

Who is a Software Quality Assurance Engineer?

An SQA Engineer is a professional within a software engineering team who with the application of standard software quality assurance tools, practices and methods collaborates with developers, end users, and other involved stakeholders on finding and fixing bugs in a software product during development, before its launch and sometimes even after launch.

They’re needed across many industries because they; -

  • Identifies business requirements.
  • Determine product & performance specs.
  • Understand user needs through functional testing.
  • Develop real-world testing scenarios.
  • Offer feedback to maximize user experience and reduce costs.

Among many other things.

What are the possible software failures that necessitate SQA?

Although software failures often result from software programming errors, they do not always result from the incompetency or mistakes of the Software Engineer/Developer.

Reasons for software failures may be as trivial as;-

  • miscommunication within the project team,
  • module integration failures,
  • physical equipment failure,
  • downtimes,
  • poor documentation,
  • sudden updates on APIs or third-party software being used for the project,
  • change in software engineering team availability or skill-set,
  • or changes in the final client’s requirements.

Also hiring a team of professional software developers does not guarantee high quality of the software product. But thorough Software Quality Assurance and software testing of the software product among other things can assure its quality and adherence to standards.

It’s also important to note that there are many definitions of software failures — errors, bugs, inconsistencies, incidents or defects, etc. Therefore, investing in good, consistent Software Quality Assurance is key.

QA, QC, and Testing quality management activities.

Although these three terms are often used interchangeably, they refer to slightly different aspects of software quality management and use different approaches to delivering a software product of the best possible quality, both structurally and functionally.

Quality Assurance

The purpose of this activity is to set up adequate processes and introduce standards of quality to prevent or at best limit the number of errors/flaws (bugs) in a software product. QA focuses on processes with the aim of prevention done by the software team including the various stakeholders which is done throughout the software development process.

Quality Control

This activity makes sure that the software product corresponds to the requirements and specs before it is released and focuses on the product as a whole with the aim of verification done specifically by the team. Through Quality Control the team verifies the product’s compliance with the functional requirements.

Testing

This activity aims at detecting and solving software errors/flaws(bugs) focusing on the source code and design of the software product usually done at the testing stage or along with the development process.

What is Software Testing

Software testing is the process of evaluating and verifying that a software product being developed does what it is supposed to do. It checks whether the actual software product matches expected requirements and ensures that the software product is defect/bug-free prior to release/launch.

Who does software testing?!

  • Software Tester
  • Software Developer/Engineer.
  • Software Quality Assurance Engineers can also test.
  • Project Lead/Manager
  • End User/Client.

The Seven testing principles are; —

The seven basic software testing principles that every software tester and QA professional should know represent the ground rules for optimizing the testing process to get the best quality on your software testing investment.

Testing shows presence of defects

Reporting zero bugs/defects after a testing cycle does not mean the software is bug-free but rather the test cases probably did not cover all scenarios. The goal of testing is to make the software fail by showing the presence of bugs/defects in the software and sufficient testing reduces the presence of defects.

Exhaustive testing is impossible.

Trying to exhaust all possible test conditions of a software, by going through every test case is impractical as it burns time and money without affecting the overall quality. So instead of trying to do exhaustive testing, it’s more effective to estimate testing efforts and consider risks and priorities in order to optimize the number of test cases for better testing.

Early testing

With the help of unit testing and Integration testing in the early phases of the SDLC, defects can be detected early on thus saving time, avoiding massive delays and reducing the cost of fixing those defects than if detected later during system testing.

Defect clustering.

This principle simply states that a small number of modules or functionalities (20%) can contain most of the software defects/bugs or operational failures (80%) or 80% of software defect comes from 20% of modules. Based on the popular Pareto Principle.

Pesticide paradox.

This principle says that trying to repeat the same test cases, repeatedly, will not find new bugs eventually making the software being tested immune to the tests. It is necessary to rethink your test approach, review the test cases regularly and add or update them to find more bugs/defects.

Testing is context-dependent.

There is no one-strategy-fits-all in software testing rather testing approach depends on the context of the software we develop. We do test the software differently in different contexts. Different types of software need to perform different types of testing.

Absence of errors-fallacy.

It is a common belief in the software engineering space that a low defect rate implies the software product is okay and the software project is a success which is an absence-of-errors delusion. Zero defects do not mean the software solves end-user problems successfully. In fact, even bug-free software can fail to address the business needs of a client if wrong inputs were incorporated into the software.

Is Software Quality Assurance and Software Testing the same?

While Software Quality Assurance and Software Testing are used interchangeably in the Software Engineering/Development space, and both aim to provide software that meets the necessary requirements and quality standards, they aren’t exactly the same. In fact, they’re actually quite different.

Software testing concentrates on finding the bugs, defects, and errors within the software, while software quality assurance aims to assure that the overall quality of the software product being engineered/developed meets the requirements and expectations of the client.

Note: Software testing is a part of the general quality control process within Software Quality Assurance, but its focus is exclusively on product-oriented tasks rather than the big picture.

Benefits of Software Quality Assurance (SQA):

  • Software Quality Assurance facilitates the production of high-quality software which saves time and cost in the long run.
  • Software Quality Assurance is beneficial for better reliability.
  • SQA is beneficial in the condition of no maintenance for a long time.
  • Because of SQA, developed high-quality software can help increase the market share of a company/business or a freelance software developer’s business portfolio.
  • Software Quality Assurance helps Improve the process of creating software thus significantly reducing the time to market thus allowing businesses to stay a step ahead of competitors.
  • With consistent Software Quality Assurance by the software engineering team and involved stakeholders, there is guaranteed Improvement in the quality of the software.
  • Poor or no Software Quality Assurance practices can lead to releasing bad quality software which is a risk for businesses & freelance Software Engineers for many reasons like; — the cost of fixing defects/bugs increases with every step of software development thus the later it is discovered, the more expensive it is to fix.

Conclusion

Due to its importance within the Software Development Life Cycle when it comes to checking a software product being developed to verify and ensure it meets the desired requirements, quality measures, and set industry standards, Software Quality Assurance is a must-have for any business in software development, whether it’s for day-to-day operations or a product for consumers.

Reference

Additional Reading

--

--

ᗰṳhumuzå ₱ɨuṩ
ᗰṳhumuzå ₱ɨuṩ

Written by ᗰṳhumuzå ₱ɨuṩ

An IT Engineer•• Bibliophile•📚 • { Into Books, Tech, Basketball, Coffee, Food & minding my business!🥹}

No responses yet