Our world-class faculty at Carnegie Mellon lead the field in research exploring these complex social network. Ranging from the analysis and identification of terrorist threats to sophisticated studies of online community health and efficacy, we seek to deepen our understanding of the science underpinning many of the interconnected networks which comprise much of our lived experience.
In S3D, our research focuses on the intersection of software, systems and society. We apply rigorous scientific approaches to address the most challenging and impactful sociotechnical issues of our day. Our work not only moves the field forward, it moves us closer to a better world.
Our work can broadly be categorized into Software Engineering and/or Societal Computing, each consisting of several cross disciplinary-thrusts.
As software becomes a more critical part of the economy and of our daily lives, its developers and users need assurance that the software has desired properties. We are developing new analysis techniques and tools that verify new kinds of properties of both specification and code, and which scale to larger systems and more diverse configurations than ever before.
Claire Le Goues
Alloy*: An Analysis Engine for Higher-Order Logic Specifications
APIs & Frameworks
Most programming today makes use of APIs and Frameworks, as a key enabler of code reuse. How should these APIs and Frameworks be designed, to maximize their quality, including usability, helping programmers avoid errors, and maintainability of the API and the resulting code? What tools (often plugins for IDEs) and documentation can best help programmers learn and use APIs and Frameworks?
Applied Systems and Infrastructure
Whether it's building smart grids which use historical usage data to estimate consumption or promoting public health through the medicalization of off-the-shelf consumer electronics, an understanding of the problem being addressed and the challenges the solution gives rise to is critical.
It is here that our work on applied systems and infrastructure thrives. In a world where sensors are embedded in our roads and Internet of Things technologies generate massive amounts of data, how do we engineer such systems to do the most good while preventing misuse? Our cross-cutting faculty address such concerns in an interdisciplinary fashion, leveraging computer science, big data analysis, electrical and computer engineering, alongside social sciences to forge breakthroughs which will shape the world of responsibly developed technology to come
Architecture & Design
Software design involves a sequence of decisions that determine the overall structure of a system and allocation of behaviors to its parts. Research in software design explores representations of design decisions and constraints, tools for reasoning about the impact of these decisions, and techniques for ensuring that the decisions are properly implemented. Software architecture is the study of design at scale, with emphasis on high-level structures and interactions that govern the overarching design and evolution of the system. Learn more about the history of Software Architecture at Carnegie Mellon.
A Contract-Based Framework for System Decomposition
Autonomous systems are systems that perceive information about the state of themselves and the environment they are running in, and adapt their behavior or structure to respond to changes in that state. Examples of autonomous systems are elastic cloud applications, robots and self-driving cars, and many control systems. The challenge with such systems is to develop software engineering techniques to (a) develop such systems in a principled and cost-effective manner, (b) assure that the systems work as expected as they make changes to their own behavior, and (c) build trust in their decisions by explaining them, or working with human operators. Research at CMU is looking into each of these aspects.
Complex Socio-Technical Systems
We live and work in complex, adaptive and evolving socio-technical systems. This expansive and interdependent web of technology and social interaction gives rise to a number of complex challenges from both technical and social perspectives.
The opportunities to examine the relationships between technology and the social consequences to which it gives rise is vast. And our research in Complex Socio-Technical Systems brings together a renowned set of cross-disciplinary faculty to address these questions using tools and methods drawn from network science, social network analysis, big data analytics, statistical analysis, and the social sciences.
Example ResearchDiversity in Online Software Teams
Badges on npm Packages
Computing Technology and Policy
Technology is invariably guided by policy. Whether it is public policy originating from government bodies or corporate policy, the technology landscape is bound and shaped by policy. And while it is important that current technologies comply with existing laws and policies, we must also strive to shape the future of technology. Both through the public and private sectors, it is imperative that a robust understanding of socio-technical implications lead to actionable policy that guides technology in a direction which betters the world.
Developers use a wide variety of tools in the course of their normal work, across the entire software engineering life-cycle. These include compilers, debuggers, integrated development environments (IDE), and tools that do static analysis, visualization, web analytics, etc. These tools help developers enter code efficiently and correctly, understand existing code, and evaluate the code for an increasing variety of properties, including correctness across various dimensions, performance, and even the usability of the resulting design. Research focuses on increasing the range of what can be automatically evaluated, the quality of the resulting code and developers’ insights, and improving the usability of the tools so developers can use them successfully.
Nowadays, most software applications involve multiple devices. For example, a mobile app might interact with one or dozens of other cloud services, or a data scientist might search for insights in a dataset that sits in the memory spanning many computers. These applications are distributed systems, and are challenging and error-prone to develop. Research on programming for distributed systems focuses on ensuring the correctness of computations that span multiple compute nodes, improving the performance and reliability of these systems, and exploring new techniques for composing and reusing software abstractions in the design and implementation of these systems.
Programming language support for eventual consistency
Composition and correctness of eventually consistent datatypes
Composition of serverless functions
Verifying configurations of microservices
Programming languages are the most basic tool of the software engineer, and language research provides fundamental advances in our ability to express programs and their designs. ISR’s research focuses on language and type system abstractions that provide strong theoretical guarantees while at the same time increasing the productivity of developers and helping them avoid introducing defects.
Network Science and Social Networks
The whole world is networked. From the most inconspicuous administrative to the most notorious arms dealer, we are all connected through those with whom we interact. And, as technology becomes a more pervasive force in our daily lives, many of these networks can be observed, measured, analyzed, and understood through the data that they produce.
Organizations focuses on the human and organizational aspects of software development: how people organize to develop software and how these organizations influence the structure and quality of the resulting software.
Privacy and Security
In today's interconnected world, security and privacy are becoming ever more central to software. Our research helps to ensure that software's privacy policies meet the needs of users and serve the public interest; that software systems conform to these privacy and security policies; and that systems can adapt and continue to provide service even while under attack.
|Fraser Brown||David Garlan|
|Jonathan Aldrich||Rohan Padhye|
|Yuvraj Agrawal||Eunsuk Kang|
|Lujo Bauer||Norman Sadeh|
|Travis Breaux||Bill Scherlis|
|Nicolas Christin||Bradley Schmerl|
|Lorrie Cranor||Steven Wu|
Modern information systems must conform to a complex set of requirements that include functional requirements to satisfy stakeholder goals, as well as, policy and legal requirements to conform to societal norms. Systems that cut across individual and societal needs include mobile and web-based applications developed using lightweight, agile methods, and traditional plan-driven designs in health, finance and aviation. In each category, requirements engineering is concerned with the use of different forms of expression, from natural language to formal logic, to describe and (semi-automatically) reason about problems and solutions at-scale. This topic combines research from natural language processing, formal methods, knowledge representation and judgement and decision-making to predict how systems are intended to operate and how and why they might fail to operate, correctly.
Composable and Usable Security and Privacy Requirements
Handling Risk and Uncertainty in Security Requirements Analysis
Harmonizing Multi-Jurisdictional Privacy and Security Policy.
Software Data Analysis
Software Data Analysis is a field that analyzes the rich data available in software repositories (e.g., version control systems, archived communications, online communities) to uncover interesting and actionable information about software systems, software development projects, and the teams managing them.