Applying Constraint Programming to Incorporate Engineering Methodologies into the Design Process of Complex Systems