Software specification and prototyping technologies