# [What is Code Coverage?](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/coverage_mdk/cc/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/coverage_mdk/)
- [What is Code Coverage?](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/coverage_mdk/cc/)
- [Set up Code Coverage](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/coverage_mdk/mdk/)
- [Next Steps](https://learn.arm.com/learning-paths/embedded-and-microcontrollers/coverage_mdk/_next-steps/)

Code coverage is a methodology for testing and verification of your application, and is often a requirement for certification of your product in safety-critical and other fields.

A code coverage report highlights which areas of your code base your tests have run through. A common use case is to verify that all cases of a C switch statement have been triggered.

You can perform code coverage in MDK with the provided Fixed Virtual Platforms (FVPs) or with real target hardware. This Learning Path uses FVPs.

### Real hardware

MDK uses instruction trace (ETM trace) from target hardware to generate this report. Your target hardware must therefore support trace functionality, and you must have access to [ulinkPro](https://www2.keil.com/mdk5/ulink/ulinkpro) or similar supported debug adapter to collect this data from the target.
