March 8, 2024

9 min

Part 1. Intro: Software Testing

 

 

 

1. Introduction to Software Testing ←

2. Testing Life Cycle

3. Types of Testing

4. Testing Levels

 

 

In today's rapidly evolving technological landscape, the demand for high-quality software has never been greater. Whether you're a software developer, project manager, or simply a user of digital products, you've likely encountered the term "QA" or Quality Assurance. But what exactly is QA, and why is it so essential in the world of software development?

 

 

Quality Assurance, often abbreviated as QA, is the systematic process that underpins the creation of reliable, bug-free, and user-friendly software. It's the unsung hero behind every successful software project, ensuring that the final product not only meets but often exceeds user expectations. In this article, we'll delve into the fundamentals of QA, exploring its key principles, processes, and the critical role it plays in the software development life cycle.

 

 

Software systems are an integral part of our daily life. Most people have had experience with software that did not work as expected. Software that does not work correctly can lead to many problems, including loss of money, time or business reputation, and, in extreme cases, even injury or death. Software testing assesses software quality and helps reducing the risk of software failure in operation. Software testing is a set of activities to discover defects and evaluate the quality of software artefacts (Certified Tester Foundation Level (CTFL) v4.0).

 

 

Verification vs. Validation

 

 

Surprisingly, many software engineers are not clear about their testing goals. Is it to show correctness, find problems, or something else? To explore this concept, we first must separate validation and verification.

Verification is usually a more technical activity that uses knowledge about the individual software artefacts, requirements, and specifications. Validation usually depends on domain knowledge; that is, knowledge of the application for which the software is written (Introduction to Software Testing). 

 

 

Software testing is a crucial process in the software development life cycle that ensures the quality, reliability, and functionality of a software product. 

 

 

Fundamental Concepts in Software Testing

 

 

Here are some fundamental concepts in software testing:

 

 

Purpose of Testing:

 

  • The primary goal of testing is to identify defects or bugs in the software to ensure that it meets the specified requirements.

 

Testing Life Cycle:

 

  • Testing is typically performed in different phases of the software development life cycle (SDLC), including unit testing, integration testing, system testing, and acceptance testing.

 

Verification vs. Validation:

 

  • Verification ensures that the software is designed and implemented correctly, while validation ensures that the software meets the customer's requirements and expectations.

 

 

Key Testing Principles



Several testing principles guide the software testing process and contribute to the effectiveness of testing activities. These principles help testers design comprehensive test cases, identify defects, and ensure the overall quality of the software. Here are some of the most crucial testing principles:

 

 

Testing Shows the Presence of Defects:

 

  • Testing is not meant to prove that software is defect-free. Instead, its primary purpose is to discover defects and provide information about the software's quality.

 

Exhaustive Testing is Impossible:

 

  • It's practically impossible to test every input combination, scenario, and condition within a software system. Testing efforts should be focused on critical areas and high-risk functionalities.

 

Early Testing:

 

  • Start testing activities as early as possible in the software development life cycle. Early testing helps identify defects sooner, making them less expensive to fix.

 

Pesticide Paradox:

 

  • Repeating the same set of tests will not be sufficient to identify new defects. Test cases need to evolve over time to uncover different types of defects.

 

Testing is Context-Dependent:

 

  • Testing approaches and techniques depend on the context of the project, including the nature of the software, its requirements, and the development methodology being used.

 

 

Absence-of-Errors Fallacy:

 

  • The absence of detected defects does not imply that the software is error-free. It only means that the known tests have not exposed any defects.

 

Bugs Cluster Together:

 

  • Defects often appear in clusters due to common mistakes made during development. Identifying and fixing similar defects in one area may help uncover related issues in other parts of the system.

 

 

The Test Process

 

 

A test process usually consists of the main groups of activities described below.

 

 

Test planning consists of defining the test objectives and then selecting an approach that best achieves the objectives within the constraints imposed by the overall context.

 

 

Test monitoring and control. Test monitoring involves the ongoing checking of all test activities and the comparison of actual progress against the plan. Test control involves taking the actions necessary to meet the objectives of testing.

 

 

Test analysis includes analyzing the test basis to identify testable features and to define and prioritize associated test conditions, together with the related risks and risk levels. The test basis and the test objects are also evaluated to identify defects they may contain and to assess their testability. Test analysis is often supported by the use of test techniques. Test analysis answers the question “what to test?” in terms of measurable coverage criteria.

 

 

Test design includes elaborating the test conditions into test cases and other testware (e.g., test charters). This activity often involves the identification of coverage items, which serve as a guide to specify test case inputs. Test techniques can be used to support this activity. Test design also includes defining the test data requirements, designing the test environment and identifying any other required infrastructure and tools. Test design answers the question “how to test?”.

 

 

Test implementation includes creating or acquiring the testware necessary for test execution (e.g., test data). Test cases can be organized into test procedures and are often assembled into test suites. Manual and automated test scripts are created. Test procedures are prioritized and arranged within a test execution schedule for efficient test execution. The test environment is built and verified to be set up correctly. Test execution includes running the tests in accordance with the test execution schedule (test runs).

Test execution may be manual or automated. Test execution can take many forms, including continuous testing or pair testing sessions. Actual test results are compared with the expected results. The test results are logged. Anomalies are analyzed to identify their likely causes. This analysis allows us to report the anomalies based on the failures observed.

 

 

Test completion activities usually occur at project milestones (e.g., release, end of iteration, test level completion) for any unresolved defects, change requests or product backlog items created. Any testware that may be useful in the future is identified and archived or handed over to the appropriate teams. The test environment is shut down to an agreed state. The test activities are analyzed to identify lessons learned and improvements for future iterations, releases, or projects. A test completion report is created and communicated to the stakeholders (Software Quality Engineering).

 

 

 

Useful links:

“SOFTWARE TESTING. BASE COURSE” By Svyatoslav Kulikov

A Practitioner's Guide to Software Test Design

“TESTING DOT COM, OR MANUAL ON HARSH TREATMENT OF BUGS IN INTERNET START-UPS” By Roman Savin

“BLACK-BOX TESTING: TECHNIQUES FOR FUNCTIONAL TESTING OF SOFTWARE AND SYSTEMS” BY BORIS BEIZER

ISTQB Certified Tester Foundation Level: A Self-Study Guide Syllabus v4.0

ISTQB Foundation Level exam (CTFL) in 2023

Foundations of Software Testing: ISTQB Certification by Dorothy Graham

ISTQB Trainer

Popeluha Software testing

Structure
  • Verification vs. Validation
  • Fundamental Concepts in Software Testing
  • Key Testing Principles
  • The Test Process

Didn't find the information you need?

You can always contact a representative of our company. We'd love to hear from you.

We use cookies and other tracking technologies to improve your experience with our site. We may store and/or access information on your device and process personal data, such as your IP address and browsing data, for personalized advertising and content, ad and content measurement, audience research, and service development.

Please note that your consent will apply to all of our subdomains. We respect your choice and strive to provide you with a transparent and secure online experience. Privacy Policy