Rigorous Description of Software Requirements with UML