Marco Piccioni

Learn More
Modern software development extensively involves reusing library components accessed through their Application Programming Interfaces (APIs). Usability is therefore a fundamental goal of API design, but rigorous empirical studies of API usability are still relatively uncommon. In this paper, we present the design of an API usability study which combines(More)
The advent of Massive Open Online Courses makes it essential to develop tools and techniques that automatically support computer science students in solving programming assignments. Complementing existing tools for automatically checking the correctness of students' programs, we have developed and evaluated an incremental hint system for programming(More)
The student project is a key component of a software engineering course. What exact goals should the project have, and how should the instructors focus it? While in most cases projects are artificially designed for the course, we use a deployable, realistic project. This paper presents the rationale for such an approach and assesses our experience with it,(More)
MOOCs (Massive Open Online Courses), which have taken higher education by storm, are an opportunity to elevate the quality of existing residential courses. We report about an experimental attempt during the Autumn 2013 semester at ETH Zurich, involving our "Introduction to Programming" course. We designed and implemented a MOOC infrastructure and used it as(More)
The purpose of our study was to analyze the immunohistochemical expression of two MMR system proteins at different steps of neoplastic progression within the squamous cervical epithelium. We compared cases showing normal histologic appearance with those affected by low and high-grade squamous intraepithelial lesions and invasive cervical carcinoma. We(More)
When an application retrieves serialized objects for which the class has changed, it may have to cope with modifications of the semantics. While there are numerous ways to handle the resulting mismatch at runtime, the developer is typically required to provide some code to reestablish the intended semantics of the new class. The present article shows how to(More)
With the wide support for object serialization in object-oriented programming languages, persistent objects have become commonplace and most large object-oriented software systems rely on extensive amounts of persistent data. Such systems also evolve over time. Retrieving previously persisted objects from classes whose schema has changed is, however,(More)
With the wide support for serialization in objectoriented programming languages, persistent objects have become common place. Retrieving previously “persisted” objects from classes whose schema changed is however difficult, and may lead to invalidating the consistency of the application. The ESCHER framework addresses this issues through an(More)
Contracts are a form of lightweight formal specification embedded in the program text; by combining specification and implementation, they try to make it easier for programmers to write and update the specification. Motivated by the importance of having accurate specifications over a system’s lifetime, this paper presents an extensive empirical study of 15(More)