Different kinds of tests correct answers Unit, Regression, Integration, System, End to End
Unit tests correct answers Tests on the smallest possible components of the system (fast to
execute and isolate)
Regression tests correct answers run every time a modification is made to the system to make
sure things run as expected
Integration tests correct answers tests on modules of software that interact with each other
System tests correct answers tests on the entire system
End-to-end correct answers validate an entire customer flow to see if system behaves correctly
Black box testing correct answers - tester does not have any knowledge about the
implementation details for the SUT
- devised based on the specs of the SUT
Glass box testing correct answers - tester has knowledge of the system internals
- meant to verify the completeness of test suite
Problem with glass box testing correct answers suffer from confirmation bias as we already
know implementation details and may fail to notice edge cases
How do version tests eventually become regression tests correct answers - As system evolves,
current version of tests become older version and they are added to regression suite
- We still want to make sure these tests work
Test formation steps correct answers Setup: initial setup required before tests are run
Call: actual call to function being tested and manipulating SUT
Check: using assertions to check that system state is equivalent to what we expect
Why is line coverage inefficient correct answers Only tells us what lines in the code under test
are covered by written test suite
- Also need to know what paths and branches are being covered
What are Mock Objects correct answers - Allow us to mimic effects of client or server that we
may not have access or implementation details for
- Mock can simulate behavior of parts of system that are slow or not yet developed
Mutation testing correct answers - Pick random mutants that may be inserted into our code
- If we detect faults with these mutants, then we know we can detect many more faults
, What are the kinds of testability correct answers Observability, Controllability, Isolateability,
Automatability
Observability correct answers the extent to which the response of a SUT can be verified
- Can we actually observe system behaviour? Do we need methods to improve visibility?
Controllability correct answers the extent to which the SUT can be made to perform various
actions of interest
- If it is difficult to satisfy the requirements to invoke a function then we have low controllability
Isolateability correct answers the degree to which the element under test can be validated on its
own
- How well can we evaluate a specific piece of a system independent of the rest of the system?
Automatability correct answers the extent to which the test suite can execute programmatically
- If I make a change, will this change trigger deployment to run my test suite?
Why does TDD afford testability correct answers By writing tests first our system becomes more
testable
Four phase test correct answers - Set up test environment
- Execute code under test
- Evaluate the behaviour of the code under test
- Tear down test environment and clean up
Given-when-then correct answers - Tests should have human readable specifications and should
use plain language
- Simple sentences to help keep test methods focused and understandable
Fuzz testing correct answers Given program P, assume input I
- Generate inputs that can expose bugs or any unintended behaviour
- Random inputs can be generated to stress test a SUT
Random fuzzing correct answers simplest form, generate completely random inputs to a system
using no feed back to generate new inputs
Generator-based fuzzing correct answers write code that provides random inputs but still ensures
that requirements of SUT are met to some degree
Mutational fuzzing correct answers take an input we know works and perform mutations on that
input using external tools
Waterfall development correct answers - Each project phase flows into the next with explicit
stakeholder sign-off before phase begins
Requirements --> Design --> implementation --> Verification --> Maintenance