In this paper we have been influenced by those who take an "engineering view" of the problem of designing systems, i.e. a view that is motivated by what someone designing a real system will be concerned with, and what questions will arise as they work on their design. Specifically, we have borrowed from the testing work of Hennessy, de Nicola and van Glabbeek, e.g. Hennessy, 1988 , de Nicola , de Nicola, 1992  and van Glabbeek, 2001, 1990 [40,39]. Here we concentrate on one fundamental part of the engineering view and where consideration of it leads. The aspects we are concerned with are computational entities in contexts, observed by users. This leads to formalising design steps that are often left informal, and that in turn gives insights into non-determinism and ultimately leads to being able to use refinement in situations where existing techniques fail. © 2009 Elsevier B.V. All rights reserved.
Reeves, S., & Streader, D. (2011). Contexts, refinement and determinism. Science of Computer Programming, 76(9), 774–791. https://doi.org/10.1016/j.scico.2010.11.011