Skip to content

Introduction to Quality Assurance in Software Engineering

Author Alena Galysheva
Last Updated 03.02.2024

Understanding the Role of QA

Quality Assurance (QA) is a set of proactive processes and practices that aims to ensure the quality of the end product. In the software development life cycle, QA plays a vital role in validating and securing the application's stability. It helps build robust and reliable applications, especially in agile methodologies where QA needs to be strategically planned as an ongoing process.

In agile environments, QA responsibilities revolve around continuous testing and validation to maintain the quality of the deliverables. QA contributes to the stability of the application by helping address functionality, performance, and security issues and potential bugs early in the development cycles. This not only reduces testing efforts but also allows developers to progress without being hindered by unresolved issues or rework.

Collaboration and cooperation between the QA and development teams are crucial keys to success in agile projects. For example, when QA provides quick feedback, the developers can efficiently respond to the pending issues during the application development process. This collaborative approach brings relevance and stability, allowing teams to navigate through coding challenges and meet client expectations. With constant collaboration and flexibility, project team can consistently develop and deliver high-quality applications that are responsive, consistent, and secure.

QA and Testing

QA & testing aren’t the same, but they go together and complement each other. Together, they can help detect inefficient processes and identify bugs in the product. The table below highlights the differences between them.

Quality Assurance Testing
Definition A process of tracking and evaluating software development to make sure it meets established quality standards A subset of quality assurance that involves running the program and checking its behavior and features in a controlled environment
Responsible The entire project team Testing team
Tasks Requirement analysis, test organizing, defect tracking, report writing, process enhancement, review, audit, preventative measures Unit testing, integration testing, system testing, user acceptance testing, etc.
Orientation Process-oriented, focuses on the development Product-oriented, focuses on the final software product
Aims and Goals Ensure the quality during the development process; engineer processes and procedures that will minimize risk and prevent any predictable defects from happening Validate the quality of the product; find and fix mistakes, problems, & unexpected behavior to confirm that the software meets its defined criteria and performs as expected
Output Metrics, plans, papers, audits, & reports on process & product quality. Bug reports, test plans, and test results.

QA Tools and Technologies

Here are a few examples of tools used in QA (excluding testing tools and frameworks) relevant to Future Factory projects. QA tools should be selected to meet the needs of each project.

  • Git: Manages source code changes and maintain history of the project.
  • GitLab ticketing system: Used for issue tracking, project management, and as a test management tool.
  • GitLab CI/CD: Working in QA nowadays requires a certain level of understanding of TestOps and the benefits automated testing and metrics collection brings.

QA, Testing and AI

It can be beneficial to integrate LLMs like ChatGPT and Bard into your workflow to improve text quality and rapidly prototype ideas, especially if you're not confident in your English writing skills. However, it's crucial to assess the output before integrating it into the documentation due to a few downsides. AI models do not understand text or code. They predict and generate their output based on the training data they were fed, and their "knowledge" is extremely limited. These factors lead to the following challenges in QA and testing when the team heavily relies on the content generated by AI models:

  • Limited Generation on Test Cases: The inputs play an important role in generating test cases. However, the output is not guaranteed to be comprehensive or relevant. AI model may not have the capability to build edge tests and cases for the corner scenarios that are crucial for software testing and quality assurance.

  • Inability to Understand Code: AI models are unable to understand any sort of code. Code is a crucial component for the task of test automation. Without the knowledge of coding, it is not possible to understand the code logic and identify potential defects or bugs.

  • No Contextual Understanding: LLMs can't recognize the context or purpose of software applications. They don't have human-like understanding of the information input, and no amount of documentation feeding can fix this. This results in AI returning overly generic, irrelevant, factually inaccurate, or incoherent and incomprehensible responses when generating project documentation and tests.

While LLMs are useful tools, they should be used as supportive aids rather than replacements for your entire work. Always proofread LLM output and rely on your expertise for quality assurance and testing.

What Makes Documentation Good

Documentation is essential for good communication between the team members and with the stakeholders. Hence, it is important to maintain a high quality of documentation throughout the entire duration of the project. The following criteria can be used to assess the quality of the documentation:

  • Completeness: Documentation should cover all relevant aspects of the system, process, or feature. Write down every single relevant detail. Trust me, you will very likely forget the details of the feature implementation you came up with during a coffee break with your teammate in less than 30 minutes.
  • Consistency: Maintain a uniform style, format, and language throughout the documentation. Consistency makes it easier to read the documentation and find information in it.
  • Clarity: Write text that is easy to read using a simple vocabulary, avoid fancy jargon and long paragraphs. Non-technical stakeholders should be able to read your documentation and understand everything. If using overly technical terms cannot be avoided, then provide the definitions for them. Group the terms in a "Definitions" section and put it in the beginning of the document to make it easy to find them.
  • Relevance: Focus on what's essential. Irrelevant details can clutter documentation. Tailor the content to the needs of the target audience and the project.
  • Traceability: Add links between different sections of the documentation. For example, when you mention a feature in the test case, add a link to it. This helps the users navigate the documentation faster and understand the relations between different parts of the project.
  • Versioning: Clearly indicate the version, "Last Updated" date and the author(s) of the documentation. This helps users understand with the current state of the project and the team to keep track of the relevance of the information as well as its source.
  • Visual Elements: Incorporate diagrams, charts, and other visual aids where applicable. Visual elements make documentation more engaging and help improve the understanding of complex systems such as software architecture and use cases (using sequence diagrams).
  • Up-to-date: Keep documentation up-to-date with any changes in the system or processes. Outdated information can lead to confusion and errors.

Further Reading and Sources