"Eliminating errors early in the software-design life cycle is crucial to reduce the tremendous societal cost represented by defective software. Modern programming languages offer a variety of techniques for ensuring, at design time, the correctness of software systems with respect to the desired behaviors. However, these techniques do not consider usually the software aspects related to programs ...