The Software Engineering (SE) and Programming Languages (PL) research in the School of Electrical Engineering and Computer Science targets key problems in effectively constructing and evolving complex software systems. This area is focused on understanding how developers create software, their tools, languages, and methodologies, and on developing new ways to enhance the development productivity and the quality of the resulting software product.
Key Topics
- Human factors in SE:
To understand how human factors impact the cost and quality of the software they develop, we employ methods and technologies from cognitive science and educational psychology. We perform experiments with students and professional developers and observe how they solve different Software Engineering tasks. - Developers’ productivity:
Leveraging techniques from Natural Language Processing (NLP) and Machine Learning (ML), we build techniques and tools to help developers in their daily tasks. For example, we are developing techniques for automated code generation using large language models, reducing manual intervention. Additionally, we are exploring automated bug detection and fixing methods to streamline debugging. Our work also includes advancements in code completion, documentation assistance and software design optimization. - Modern Web Application Development:
We focus on exploring the latest frameworks, tools, and methodologies that enhance the design, development, deployment, and maintenance of scalable and efficient web applications. It involves comparing emerging technologies and approaches to identify best practices across the entire lifecycle. Another central aspect of this area is the study of microservices architectures, which enable the creation of distributed, resilient, and flexible systems. - Program Analysis:
Critical applications such as software verification, optimization, and security auditing, are powered by high-quality models of program behavior. We develop tunable program analyses directly from language specifications to automate building approximate bounded models of program behavior that help make software correct, efficient, and secure. - Scalable Declarative Reasoning:
To implement these program analyses, we are developing our own declarative logic-programming languages along with new techniques for high-performance parallel computing. Declarative languages help to automatically bridge the gap between high-level rules-based specifications and high-performance implementations. Such implementation approaches also have a positive impact on reasoning about complex systems (e.g., security protocols) or ontologies (e.g., medical knowledgebases) generally. - Compilers:
We are building new languages and optimizing compilers to help bring language-based solutions to a wide range of problems, including logical, declarative languages and functional and multi-paradigm languages.