After reading up, i think this is called "branch coverage" in C/C++.
In C the idea is to setup a test bench which exercises each line of code. But not in every possible condition the software could be in. At the lower level, this is easy, but once you have a few nested functions, the exercise gets much more difficult. As triggering low level errors and tracking their path back to the higher functions can revealed "dead stop", situations which the application can not proceed, either because the error isnt handled, or the app doesnt know what to do so the procedure fails. Branch coverage allows you to measure how much of your code is being tested by the test bench.
I have used this style of debugging in order to vet important functions and methods, it get super tricky when dealing with virtual inheritance as a class can take multiple and recursive paths.
I think the same concept would be an invaluable tool in hdl, but after a lot of reading, it seams the functional verification has started being superceded by formal verification.
The artical here goes into some detail about when each is better than the other, but concludes that formal is best when properly implemented, and functional verification is best when you dont have the resources to use formal
https://theartofverification.com/formal-verification-vs-functional-verification-a-tale-of-two-approaches/the tools that can do this type of formal verification are expensive.
yosis is free.
https://yosyshq.readthedocs.io/projects/sby/en/latest/Simple things are easy, until their not. Ive been verifying a alu for academic purposes, using it to exercise every part of the verilog language, and sby.
Then using formal verification to double check common methods and solutions to timing problems. To ensure I dont break stuff without realizing it.
Then swapping assumptions to assertions and verifying that i am using my own modules correctly.
Its been a very involved experience