From requirements to Java code: An architecture-centric approach for producing quality systems