Software development with Z : a practical approach to formal methods in software