Recent advances in programming languages are providing their users with powerful mechanisms to structure and develop their programs. Indeed, the development of powerful type systems, modular systems, abstract models, support for generic programming, support for domain specific language embedding, lazy evaluation engines and incremental models of computations are changing the way we write our programs. Moreover, the development of techniques for refactoring, testing and slicing are also changing the way we construct, transform and maintain our software. Surprisingly, with the exception of the pioneering work of Erwig and Burnett [EB02, AE04, EACK05], little work has been done on the foundations of spreadsheets by the programming language community. As a result, none of those developments have been incorporated in spreadsheets yet.

In fact, spreadsheets still do not offer support for abstraction, encapsulation, or structured programming yet! For this reason, it is fair to state that spreadsheets could benefit from all recent developments in programming languages even more than programming languages themselves.

The overall objective of this project is to study and develop techniques to incorporate these recent advances in programming languages, in spreadsheets. Thus, we will study new type systems and modular systems, and formal models for spreadsheets. Furthermore, we will develop techniques to reason about existing spreadsheets. That is to say that we want to define techniques to extract the model of a spreadsheet, to define model based techniques for spreadsheets, to define a catalogue of spreadsheet-oriented refactorings [Fow99], to apply slicing techniques [Tip94] to spreadsheets, and to define new incremental computational models [PT89] for spreadsheets.

In this project, we will study the foundations of spreadsheets from two perspectives: from a software engineering point of view we will study and propose techniques for testing, slicing, refactoring, reuse, incremental evaluation and quality assessment of spreadsheets; from a theoretical point of view we will study formal models, type systems, support for abstraction in spreadsheets and a novel model for incremental evaluation of spreadsheets using adaptive computation [ABH06, ABBT06]. The results of this project will be a set of theories, techniques and tools that will help “end-user” programmers to efficiently test and execute, maintain and construct correct spreadsheets. Some of these program understanding and reverse engineering techniques have been already developed for regular programming languages by team members in the context of the project PURe (Program Understanding and Reverse Engineering - FCT POSI/ICHS/44304/2002) and project IVY (FCT POSC/EIA/56646/2004). We will build on these results to arrive at a rather comprehensive, rigorous approach to spreadsheets. Apart from scientific publications, we aim to deliver reusable libraries and several case studies that demonstrate the feasibility of more effective and safer spreadsheet programming.