They do not directly represent the actual data passed back and forth in the code. Instead, they are an abstraction of any correct information exchange protocol that may be used in any correct implementation. For example, you may make a selection in a text editor by some sequence of: At the abstract level you might model an action: select (Selection) The refinement relation must document how the concept of Selection is related to the data exchanged. For example, if we model Selection by a start and end position, we would document how the start and end of the (abstract) selection is defined by the number and parameters of the up, down, … forward(n), back(m) actions. And this information would be crucial for inspections, design reviews, and testing.