XXVI Brazilian Symposium on Software Engineering (SBES)
Concurrent Programming is Easy
Concurrency is an ever more indispensable part of modern programming. It is supposed to be hard -- very hard; with dominant techniques, such as threading mechanisms, the level of abstraction is low, the risk of error (especially data races and deadlock) high, and debugging a nightmare. Theoretical models such as calculi are elegant but far from the practice of programming. Programmers need techniques that are simple, easy to learn, and fit well in their current reasoning patterns. We have developed, and implemented for Eiffel, a simple extension to object-oriented programming that covers concurrency, lets programmers reason about their programs the way they are used to in sequential programming, protects them against mistakes (data races in particular are impossible), and covers a wide range of concurrency applications. The model, SCOOP, has been in development for many years and is currently enjoying a new impetus as part of an ERC Advanced Investigator Project. I will describe the core ideas and the current work towards formal verification, distributed computing and other new extensions.
Software: Good, Bad, or Just a Matter of Taste?
In matters of taste, there can be no dispute. But is there a way to distinguish good software from bad? In this presentation we will look at software quality empirically, from various dimensions. A first question is what developers think about quality. What can we learn from them by interviewing them? Does a quality attribute like testability matter to them? What do they do about it? A second perspective is the history of a software system as recorded in a version management system. What can we learn from, e.g., module co-change about the level of encapsulation? A third perspective is software metrics: are there metrics that can predict future quality? In this presentation we will look at these various issues, explore the various empirical findings, and assess their impact for both research and software engineering practice.