Towards Abstraction and Automation in Software Engineering