Software Testing Techniques: White-Box, Model-Based, and More
Question 1: White-Box Testing
What is a key characteristic of white-box test techniques?
Answer: (b) They are used both to measure coverage and to design tests to increase coverage.
Question 3: Model-Based Testing
What is Model-Based Testing?
Model-Based Testing (MBT) is a software testing approach where test cases are derived from a model representing the system’s behavior, requirements, or processes.
Question 4: Pairwise & Neighborhood Integration
Pairwise Integration:
- A testing technique where test cases are designed to cover all possible pairs of input values.
- Reduces the number of test cases while maintaining high defect detection.
Neighborhood Integration:
- Focuses on testing interactions between components/modules that are directly related.
- Used when components have dependencies on each other.
Question 5: AC System as a Finite State Machine
The AC system has:
- Modes: WARM, COLD, DRY, AUTO.
- Fan Movements: STOP, SWING.
- Speeds: 0, 10, 15, 20, 25.
Finite State Machine Representation:
- States: Defined by mode and speed (e.g., WARM-STOP-0, COLD-SWING-25).
- Transitions: Occur when the mode or movement type changes.
Example Transitions:
- WARM-SWING-20 → WARM-STOP-0
- COLD-SWING-25 → COLD-STOP-0
-
Why are both black-box and white-box techniques used?
Answer: (a) They find different types of defects.
-
What is the order of the following tests, from lowest to highest, left to right?
Answer: (c) Unit > Integration > System > Acceptance
-
Statement and decision coverage for the given test cases?
Answer: (d) Statement coverage = 100%, Decision coverage = 75%
-
What is Behavior-Driven Development?
Answer:
- Behavior-Driven Development (BDD) is a software development approach that enhances collaboration between developers, testers, and business stakeholders.
- It uses natural language specifications (e.g., Given-When-Then) to describe expected system behavior.
Example:
Given a user logs into the system
When they enter valid credentials
Then they should be redirected to the dashboard -
Briefly explain top-down, bottom-up, and sandwich integration.
Answer:
- Top-Down Integration: Starts testing from high-level modules downwards using stubs.
- Bottom-Up Integration: Starts testing from low-level modules upwards using drivers.
- Sandwich Integration: A mix of both, where middle modules are tested last.
-
Describe the AC remote system as a finite state machine.
Answer:
- States are based on air circulation speeds: 0, 10, 15, 20, 25.
- Transitions depend on mode changes (WARM, COLD, DRY, AUTO) and fan movement (STOP, SWING).
Example transitions:
- WARM + SWING → Speed = 20
- COLD + SWING → Speed = 25
- DRY + STOP → Speed = 15
-
Implement unit testing for updateStudentCgpa().
Answer:
- Use Mockito to mock dependencies.
Example test:
@Test void testUpdateStudentCgpa() throws Exception { Student student = new Student(1, 3.5); List<Integer> grades = Arrays.asList(80, 90, 70); when(studentRepository.findById(1)).thenReturn(student); studentCgpaService.updateStudentCgpa(1, grades); verify(studentRepository).save(any(Student.class)); verify(logger).log(eq("Updated student cgpa"), any()); }
-
What is the branch coverage for updateStudentCgpa()?
Answer:
- Ensures all if-else branches execute at least once.
- Key branches:
- if (grades.isEmpty())
- if (student == null)
-
What is the condition coverage for updateStudentCgpa()?
Answer:
- Ensures each Boolean condition is tested for both true and false.
Example:
if (grades.isEmpty() || student == null)
- Two conditions: grades.isEmpty(), student == null
- Must test: (true, false), (false, true), (true, true), (false, false).
Implement integration testing for updateStudentCgpa() and the database.
Answer:
- Use Spring Boot test with an in-memory database.
Example test:
@Test
void testUpdateStudentCgpaIntegration() throws Exception {
Student student = new Student(1, 3.5);
studentRepository.save(student);
List<Integer> grades = Arrays.asList(80, 90, 70);
studentCgpaService.updateStudentCgpa(1, grades);
Student updatedStudent = studentRepository.findById(1);
assertEquals(80.0, updatedStudent.getCgpa());
}
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@SpringBootTest
public class StudentCgpaServiceIntegrationTest {
@Autowired
private StudentCgpaService studentCgpaService;
@Autowired
private FinalGradeRepository finalGradeRepository;
@Test
@Transactional // Ensures rollback after test execution
public void testUpdateStudentCgpa_Integration() throws Exception {
FinalGrade finalGrade = new FinalGrade();
finalGrade.setGrades(List.of(
new WeightedGrade(4.0, 3),
new WeightedGrade(3.5, 4)
));
finalGrade = finalGradeRepository.save(finalGrade);
studentCgpaService.updateStudentFinalGrade(finalGrade.getId(), finalGrade.getGrades());
FinalGrade updatedFinalGrade = finalGradeRepository.findById(finalGrade.getId());
assertEquals(3.71, updatedFinalGrade.getGrade(), 0.01);
}
}