Software specification and design with Ada: a disciplined approach