Generative programming is a paradigm that seeks to automate the manufacture of software products the same way other industries automated the manufacture of consumer, electric, and mechanical products. I examine how meta-programming fits into the context of generative programming and, along the way, expose theoretic and taxonomic deficiencies. In some...
Analysis of programs forms an important activity in the field of software engineering. It is necessary to help understand the code, which facilitates comprehensive testing, maintenance and optimization of code. Aristotle is a tool for analyzing programs written in C. We have designed a system on similar lines for Java...
Shape transformation is a technique for gradually changing one geometric shape to another. A recent approach presents the use of thin-plate radial basis functions as opposed to traditional "blobby sphere" implicit functions. Without the explicit evaluation of he energy function, this approach combined the two traditional steps into one by...
In this project we implemented WebSiteGen2, which is a software tool that automatically generates HTML pages and server-side scripts for a Web-based database application. A user of WebSiteGen2 can select the tables and columns for which HTML pages and server-side scripts are generated. The menus for this selection process are...
Developers frequently change the type of a program element and update all its references for performance, security, concurrency, library migration, or better maintainability. Despite type changes being a common program transformation, it is the least automated and the least studied. Manually performing type changes is tedious since the programmers have...
In this thesis, I present the variational database management system, a formal framework and its implementation for representing variation in relational databases and managing variational information needs. A variational database is intended to support any kind of variation in a database. Specific kinds of variation in databases have already been...
Over the last two decades, satisfiability and satisfiability-modulo theory (SAT/SMT) solvers have grown powerful enough to be general purpose reasoning engines throughout software engineering and computer science. However, most practical use cases of SAT/SMT solvers require not just solving a single SAT/SMT problem, but solving sets of related SAT/SMT problems....
Variation in data is abundant and ubiquitous in real-world applications. Managing variation in databases is, however, difficult and has been extensively studied by the database community. Schema evolution, data integration, and database versioning are examples of well-studied forms of database variation with effective context-specific solutions. However, variation appears in different...
There is a significant amount of research analyzing the effect of race, gender, and other common demographical data on student interest and performance in computer science. However, there is relatively little research concerning less common demographic populations, such as introverts, artistic students, and visual learners. This study investigates if these...
Variational programming supports efficiently executing many related programs at once by encoding all of the programs in one "variational program" that captures the differences among them statically and explicitly. An open problem in variational programming is how to handle side effects—if two program variants perform different side effects, we cannot...