IMDEA Software

IMDEA initiative

Home > Open Positions

Excellence Internships 2020

The IMDEA Software institute is looking for outstanding Bachelor and Master students in Computer Science and related fields to undertake research internships in the following topics (see details at end of the document):

  1. Software engineering
  2. Systems security
  3. Hardware acceleration
  4. (Static) analysis and verification
  5. Programming language design
  6. Smart contracts

Solid programming skills will be highly valued and the positions require good teamwork and communication skills, including excellent spoken and written English.

All internship positions are remunerated and will have a length of 3 to 6 months. Given the Covid19 situation, we are flexible on starting dates and remote work could also be negotiated.

Who qualifies and how to apply?

To qualify for an internship position within this call, you have to be the recipient of a prize in an international contest or hackathon that took place in 2019 or 2020. The event and prize category has to be clearly indicated in your CV.

You can apply on our on-line platform. To apply, choose 7–Internships and enter reference code 2020-05-intern-excellence on our IMDEA Careers website.

Include the following information contained in a single PDF document: 1) your CV (make sure to highlight the award/prize that qualifies you for the internship), and 2) an overview of your research interests and a concise summary of a project you contributed to (1 page), ranking the three focus areas of this call by desirability.

Deadline: Only applications submitted before July 4th and with the correct reference code will be considered.

Focus area details

A. Software Engineering:

Internship in test automation for Android apps with Prof. Alessandra Gorla.

The goal of the internship is to automate testing for mobile applications, specifically on Android systems. We will work on studying the problem of "test flakiness", i.e. test results that may pass or fail without any change in the codebase, which makes test results unreliable. We will build a technique that can replace environmental dependencies in test cases with mock objects, with the goal of reducing test flakiness due to changes in the environment. 

Ideal candidates for this position should have interest in software quality, and test automation specifically. Experience in Android and in mobile testing frameworks such as Monkey and Appium is desirable, but not mandatory.

B. System Security:

Internship in microarchitectural security with Prof. Marco Guarnieri.

The topic of the research is exploring the security implications of CPU microarchitectural side-effects and  developing tools and techniques for detecting and preventing CPU microarchitectural attacks, such as the recent Spectre and Meltdown attacks. 

Ideal candidates should have interest in the aforementioned research topic. Experience in the following areas is a plus: Program analysis and verification, Formal methods, Security, Logics, Computer architectures.

The internship is part of a larger project on "Information Flow Tracking across the Hardware-Software Boundary" funded by Intel Corporation. For this reason, your work could be part of an academic publication or form the basis of your Bachelor's/Master's thesis.

C. Hardware Acceleration:

Intern in FPGA-based Data Perturbation for Enforcing Privacy with Prof. Zsolt István.

This internship is targeted at students with already some experience with VHDL/Verilog programming and your task will be to implement a data perturbation operator on an FPGA. Data perturbation is a privacy preservation technique that alters the values of elements in a database in order to disguise the sensitive information while preserving the particular data properties that are critical for building meaningful data analytics models. This technique can often be reduced to simple operations applied to rows, columns or individual records of data, which makes it suitable for the implementation with hardware devices. The main challenge is to select a transformation that balances the privacy protection of the new data with the remaining utility, which are normally considered as a pair of conflicting factors.

The operator that you will implement will be part of a larger project being carried out at the institute on Key-Value Stores with built-in privacy-preserving operations. For this reason, your work could be part of an academic publication or form the basis of Bachelor's/Master's thesis.

D. (Static) analysis and verification:

Internship with the possibility of later advancement to graduate (Masters or PhD) studies, with Prof. Manuel Hermenegildo and Prof. Pedro López-García.

Inferring and checking program behavior before execution, including (non-functional) properties such as energy, memory, time, etc. with application to blockchain. Supporting higher order and parallel/concurrent programs. Combining static and dynamic assertion checking. Use analysis information for optimization and program transformation. (

E. Programming language design:

Internship with the possibility of later advancement to graduate (Masters or PhD) studies,  with Prof. José Francisco Morales and Prof. Manuel Carro.

New directions for static/dynamic languages, and novel approaches for multiparadigm programming, combining procedural, functional, constraint and logic programming, distributed/concurrent execution, etc. Compilers and VMs (native code generation, JIT compilers, optimizing compilation, abstract/virtual machines. (

F. Smart Contracts:

Internship with the possibility of later advancement to graduate (Masters or PhD) studies, with Prof. César Sánchez.

This internship will be about designing and using a novel infrastructure for programming and reasoning about smart contracts. We will study the design and implementation of a unified programming approach for smart contracts that involves (1) developing smart contracts, (2) for specifying properties of contracts and their relation with global properties of the block chain, and (3) for proving these properties (4) reasoning about multiple invocations and  multi-agents executing contracts (and their relative powers). The research involves programming language design, logic-based verification and game theory.