I am interested in the role of software engineering in driving transformation and digitalization of traditional industries and public services. My research explores how software systems can be designed to support scalability, interoperability, and continuous evolution in digitally transforming environments. This includes investigating agile and Development-Operations (DevOps) methodologies, and platform engineering to accelerate innovation and increase productivity. I am also focused on the impact and socio-technical aspects of digitalization, including how business and transformation decisions impact the architecture of systems (e.g., technology and structure to build systems), process of software engineering (e.g., activities and ways of working), and organizational aspects (e.g., teams collaboration and responsibilities).
See Publications
My research interests lie at the intersection of artificial intelligence (AI) and software engineering, with a particular focus on the reciprocal relationship between the two domains. I am interested in how AI techniques can be applied to automate and improve software engineering tasks, including code generation, bug detection, testing, and software maintenance. At the same time, I explore how software engineering principles and practices can be adapted and extended to support the development of robust, scalable, and maintainable AI systems. This includes addressing challenges such as model versioning, data pipeline management, and testing of AI components. By bridging these two perspectives, my work aims to contribute to more intelligent software development processes and more reliable AI-driven systems.
See Publications
I am interested in the secure and resilient engineering of software systems, with a focus on integrating security throughout the software development lifecycle. My work emphasizes the principles of security by design, where security is treated as a foundational aspect rather than an afterthought. I explore methodologies such as Development-Security-Operations (DevSecOps), which embed security practices into continuous integration and deployment pipelines, enabling proactive threat mitigation and compliance. This research area also involves designing systems that can withstand and recover from failures or attacks, ensuring operational continuity and trustworthiness in increasingly complex and interconnected environments. Moreover, I am interested in security chaos engineering, a proactive approach that involves deliberately introducing controlled faults and adversarial conditions into systems to test and improve their security posture. This technique helps uncover hidden weaknesses and fosters the development of systems that are secure as well as resilient under real-world stress and attack scenarios.
See Publications
The course provides an introduction to scientific writing, techniques for reference management, information retrieval, literature review, source criticism, information evaluation, and oral presentation.
The course provides an introduction to statistics using R. The goal of this course is to provide the students with the required knowledge to perform statistical analysis when conducting empirical software engineering projects.
The course provides an introduction to software architecture. It is tailored for software development practitioners at organizations. The learning objectives are to: (i) learn basic principles of software architecture, (ii) understand decomposition and modularity, (iii) learn strategies for migrating from Monoliths to Micro-services, and (iv) learn about architecture documentation and communication.
This project course addresses issues relevant for software engineering for systems that use artificial intelligence (AI) techniques such as machine learning or large-scale parallel data processing. This includes a discussion of the value that can be created through the use of AI. At the same time, technological and architectural foundations of software systems using AI techniques and handling large amount of data are discussed.
The aim of this course is to equip students with basic knowledge and skills about software architecture design and its role in the development and maintenance of software systems. This course covers various definitions of software architecture. We discuss the role and relevance of software architecture at different stages of development projects; we discuss the relation of architecture to requirements and system implementation; we discuss software architecture quality properties; we discuss various architectural styles and tactics; we discuss general software design principles; we discuss how to document and how to evaluate software architectures.
The purpose of this course is to familiarise the student with situations, activities, and techniques typical for software evolution, such as adding a new feature, refactoring, automating variability or testing, improving performance, re-balancing non-functional requirements, and so on. Furthermore, students learn to plan, implement, and reflect on software evolution scenarios and improvements.
The course provides a practical introduction to Software Engineering. Students work on an open problem that is defined by stakeholders outside of the students' team. That means that students will not be able to define the project they work on themselves. In order to address this challenge, students will learn:
This course describes object-oriented system development by applying UML models. To do this, it shows how to move from informal descriptions of systems to formal models, and how to relate these models to each other and to code. This means both learning the fundamentals of UML, but also how to reason in object-oriented problem solving.