automata-based software engineering