In software engineering, formal methods allow the design, modelling and verification of hardware and software systems. Formal methods introduce preciseness, remove ambiguity in specifications, and support the verification of requirements and design properties. Methods and approaches are needed to manage the formal models and handle their complexity. Refinement has been carried out for system artefacts ranging from modelling and design levels like architectures, and state machines to implementation and programming levels like source code. Refinement is a significant way for building complicated systems starting from simple ones by adding features gradually. Refinement has to be understood carefully in the context of formal specificati...