Chapter 2 Testing Throughout the SDLC Flashcards
Black-box testing
Testing based on an analysis of the specification of the component or system. Synonyms: specification-based testing
specification-based and derives tests from documentation external to the test object.
-main objective is checking the system’s behavior against its specifications.
Supports both Functional and nonfunctional testing
specification-based testing
Acceptance testing
A TEST LEVEL that focuses on determining whether to accept the system. See also: user acceptance testing
-focuses on validation and on demonstrating readiness for deployment, which means that the system fulfills the user’s business needs.
-Ideally, acceptance testing should be performed by the intended users.
Component integration testing
The integration testing of components. Synonyms: module integration testing, unit integration testing
also known as unit integration testing)
focuses on testing the interfaces and interactions between components.
Component integration testing is heavily dependent on the integration strategy approaches like bottom-up, top-down or big-bang.
Bottom-Up Integration Testing:
Definition: In bottom-up integration, testing begins with the lower-level components (often the foundational units) and progressively moves upward by integrating higher-level components.
Top-Down Integration Testing:
Definition: In top-down integration, testing starts from the top-most or higher-level modules and works its way down toward the lower-level components.
Big-Bang Integration Testing:
Definition: In the big-bang approach, all or most of the components are integrated at once, and the system is tested as a whole.
component testing
A test level that focuses on individual hardware or software components. Synonyms: module testing, unit testing
-(also known as unit testing) focuses on testing components in isolation.
-often requires specific support, such as test harnesses or unit test frameworks.
-normally performed by developers in their development environments.
Functional testing
Testing performed to evaluate if a component or system satisfies functional requirements.
-evaluates the functions that a component or system should perform.
-The functions are “what” the test object should do.
-The main objective is checking the functional completeness, functional correctness and functional appropriateness.
A test level that focuses on interactions between components or systems
Integration testing
Testing the changes to an operational system or the impact of a changed environment to an operational system.
Maintenance testing
Testing performed to evaluate that a component or system complies with non-functional requirements
Non-functional testing
An approach to performing testing and quality assurance activities as early as possible in the software development lifecycle
Shift-left
System integration testing
The integration testing of systems
-focuses on testing the interfaces of the system under test and other systems and external services .
- requires suitable test environments preferably similar to the operational environment.
integrate: combine one thing with another so that they become a whole
interface: a point where two systems, subjects, organizations, etc. meet and interact
System testing
A test level that focuses on verifying that a system as a whole meets specified requirements
-focuses on the overall behavior and capabilities of an entire system or product,
-often including functional testing of end-to-end tasks and the non-functional testing of quality characteristics.
-For some non-functional quality characteristics, it is preferable to test them on a complete system in a representative test environment (e.g., usability).
usability: The degree to which a component or system can be used by specified users to achieve specified goals in a specified context of use.
- Using simulations of sub-systems is also possible. System testing may be performed by an independent test team, and is related to specifications for the system.
A specific instantiation of a test process. Synonyms: test stage
Test level
Test type
A group of test activities based on specific test objectives aimed at specific characteristics of a component or system.
groups of test activities related to specific quality characteristics
most of those test activities can be performed at every test level.
Examples:
Functional Testing: To verify that the software functions as expected.
Performance Testing: To check how the software performs under load or stress.
Security Testing: To find vulnerabilities and ensure the system is secure.
Usability Testing: To ensure the software is easy to use.
White-box testing
Testing based on an analysis of the internal structure of the component or system. Synonyms: clear-box testing, code-based testing, glass-box testing, logic-coverage testing, logic-driven testing, structural testing, structure-based testing
-is structure-based
derives tests from the system’s implementation or internal structure (e.g., code, architecture, work flows, and data flows).
main objective is to cover the underlying structure by the tests to the acceptable level.
(clear-box testing, code-based testing, glass-box testing, logic-coverage testing, logic-driven testing, structural testing, structure-based testing)
Examples of SDLC models include:
sequential development models
iterative development models
and incremental development models
sequential development models
e.g., waterfall model, V-model
A type of software development lifecycle model in which a complete system is developed in a linear way of several discrete and successive phases with no overlap between them.
work best when requirements are clear and unlikely to change.
-in the initial phases testers typically participate in requirement reviews, test analysis, and test design.
-The executable code is usually created in the later phases( dynamic testing cannot be performed early in the SDLC)
iterative development models
(e.g., spiral model, prototyping),
A type of software development lifecycle model in which the component or system is developed through a series of repeated cycles.
allow for revisions and continuous improvements, focusing on user feedback and risk management.
incremental development models
(e.g., Unified Process).
A type of software development lifecycle model in which the component or system is developed through a series of increments.
break down the project into smaller increments, enabling faster delivery of functional modules.
-Defining requirements, designing software, and testing are done in phases where in each phase a piece if the system is added.
Some activities within software development processes can also be described by more detailed software development methods and Agile practices.
-acceptance test-driven development (ATDD),
-behavior-driven development (BDD),
domain-driven design (DDD),
extreme programming (XP),
feature-driven development (FDD),
Kanban,
Lean IT,
Scrum,
test-driven development (TDD).
Testing must be adapted to the SDLC to succeed. The choice of the SDLC impacts on the:
Scope and timing of test activities (e.g., test levels and test types)
Level of detail of test documentation
Choice of test techniques and test approach
Extent of test automation
Role and responsibilities of a tester
Iterative and incremental models:
-that each iteration delivers a working prototype or product increment.
-in each iteration both static and dynamic testing may be performed at all test levels.
-Frequent delivery of increments requires fast feedback and extensive regression testing
Agile software development:
-assumes that change may occur throughout the project.
-lightweight work product documentation and extensive test automation to make regression testing easier
-most of the manual testing tends to be done using experience-based test techniques that do not require extensive prior test analysis and design.
Good testing practices, independent of the chosen SDLC model, include the following:
- For every software development activity, there is a corresponding test activity:
This principle emphasizes that testing should be integrated into every step of the software development process, ensuring quality control. For example, if developers are writing code (a development activity), there should be corresponding unit tests for that code. This ensures that quality is checked continuously and not just at the end of development.
- Different test levels have specific and different test objectives:
The idea is to make testing comprehensive by having clear objectives for each level, while avoiding redundancy (i.e., avoiding testing the same things at multiple levels unnecessarily).
- Test analysis and design for a given test level begins during the corresponding development phase of the SDLC:
This refers to the practice of early test planning. The process of designing tests for a specific test level (e.g., unit tests, system tests) should begin early in the development phase of the SDLC, aligning with the principle of early testing. Early testing means identifying and planning for potential issues before they occur, which helps prevent defects from being introduced in the first place.
Focus: Test planning and design.
- Testers are involved in reviewing work products as soon as drafts of this documentation are available:
This encourages involving testers early in the process to review drafts of requirements, designs, or any other documentation produced during development. This is part of the shift-left strategy, which aims to shift testing and defect detection earlier in the process (left on the timeline of the SDLC). Detecting defects early is more cost-effective and helps maintain higher quality throughout development.
Focus: Reviewing and validating early-stage documents.
test levels
-groups of test activities that are organized and managed together
Test levels refer to the stages of testing, such as unit testing, integration testing, system testing, and acceptance testing.
Each test level serves a different purpose:
Unit Testing: Ensures individual components function correctly.
Integration Testing: Ensures different components work together.
System Testing: Ensures the whole system functions as expected.
Acceptance Testing: Ensures the system meets business requirements.
Test-Driven Development (TDD):
iterative development model
Directs the coding through test cases (instead of extensive software design)
Tests are written first, then the code is written to satisfy the tests, and then the tests and code are refactored
Acceptance Test-Driven Development (ATDD)
Derives tests from acceptance criteria as part of the system design process
Tests are written before the part of the application is developed to satisfy the tests
Behavior-Driven Development (BDD):
Expresses the desired behavior of an application with test cases written in a simple form of natural language, which is easy to understand by stakeholders – usually using the Given/When/Then format.
Test cases are then automatically translated into executable tests
DevOps definition
is an organizational approach aiming to create synergy by getting development (including testing) and operations to work together to achieve a set of common goals.
DevOps promotes team autonomy, fast feedback, integrated toolchains, and technical practices like continuous integration (CI) and continuous delivery (CD). This enables the teams to build, test and release high-quality code faster through a DevOps delivery pipeline