Software Engineering
Software Engineering tests lifecycle selection, requirements quality, testing strategy, and complexity analysis. The exam favors questions that distinguish verification from validation and that ask you to derive a metric from a flow graph or test set.
Process and requirements
Waterfall is sequential with late change; iterative and Agile approaches deliver increments and rely on feedback. Requirements should be unambiguous, testable, and traceable. Verification asks whether the product was built right against specifications; validation asks whether the right product was built for user needs.
Testing and coverage
Unit, integration, system, and acceptance testing address different scopes. Black-box techniques include equivalence partitioning and boundary-value analysis; white-box techniques include statement, branch, and condition coverage. Statement coverage does not guarantee branch coverage; modified condition/decision coverage (MC/DC) requires each condition to independently affect the decision.
Complexity and algorithms
Big-O describes asymptotic growth. Binary search is O(log n) on sorted data; hash lookup averages O(1) but degrades with collisions. Cyclomatic complexity V(G) = E − N + 2P for a connected flow graph (P = number of connected components).
Worked example
A flow graph has 9 edges, 7 nodes, and 1 connected component. V(G) = 9 − 7 + 2(1) = 4. This equals the number of linearly independent paths and gives a lower bound on branch-oriented test cases. It is not the same as counting all feasible paths, which can be exponential.
Traps
- Confusing verification with validation.
- Treating statement coverage as proof of branch coverage.
- Applying V(G) = E − N + 2P with P omitted for a single component.
- Assuming Big-O predicts performance for small inputs or constant factors.