---------- Post added at 23:10 ---------- Previous post was at 23:09 ----------
A BFM is, like you said, a bus functional model. It usually connects to a Device Bus, like a CPU access port on a chip. A BFM could represent a bus interface and a protocol. A BFM could be THE CPU of the system, as in, a representation of the CPU in your chip. So in general a BFM interfaces to some aspect of the DUT, bus, input channel, CPU ... Also, the BFM interface to the DUT is usually timed or DUT signal dependent.
The BFM has one other aspect or interface and that is to the test environment. This interface is a NON-DUT interface and could take several different forms. ( function calls, input signals ...) The test environment interface may or may not be time dependent.
So, a BFM is a model of some aspect of your environment that is not part of the DUT. An environment may have many BFM's of different kinds, depending on what is needed to fully test your DUT. Creating BFM's enables the task of dividing your environment into manageable sized objects that have the potential to be reused in the future.