Software engineering and programming language researchers at Google study all aspects of the software development process, from the engineers who make software to the languages and tools that they use.
Software Engineering and Programming Languages
We use empirical studies to better understand the problems faced by engineers and invent new technologies to solve those problems.
We aim to make an impact internally on Google engineers and externally on the larger ecosystem of software engineers around the world.
International Conference on Software Engineering (2019)
International Conference on Software Engineering, Software Engineering in Practice track (ICSE SEIP) (2018)
Proceedings of the 39th International Conference on Software Engineering: Software Engineering in Practice Track, IEEE Press, Buenos Aires, Argentina (2017), pp. 113-122 (to appear)
Communications of the ACM, vol. 59 (2016), pp. 78-87
International Conference on Software Engineering (ICSE) (2014)
Workshop on Refactoring Tools (2013)
Presentation at the @Scale conference in 2015 on why Google stores all the code in a single codebase and the tools we have created to manage it.
Presentation at the @Scale conference in 2017 on how we keep velocity up in a large scale codebase.
Industry-standard report that to help teams and organizations benchmark themselves against the industry and identify key capabilities to become high performers.
Google’s standard static analysis tool for Java and the foundation for our refactoring infrastructure. We use a data-driven approach to refine checks and develop new ones. We describe the development of one such check (and some of the challenges we faced for large-scale deployment) in our publication “Detecting argument selection defects” (OOPSLA 2017).
A keynote talk at the International Conference on Software Testing on the tools and culture surrounding continuous integration testing at Google.
Google provides its engineers’ with cutting edge developer tools that operate on codebase with billions of lines of code. The tools are designed to provide engineers with a consistent view of the codebase so they can navigate and edit any project. We research and create new, unique developer tools that allow us to get the benefits of such a large codebase, while still retaining a fast development velocity.
Developer Inclusion and Diversity
We aim to understand diversity and inclusion challenges facing software developers and evaluate interventions that move the needle on creating an inclusive and equitable culture for all.
We use both qualitative and quantitative methods to study how to make engineers more productive. Google uses the results of these studies to improve both our internal developer tools and processes and our external offerings for developers on GCP and Android.
Program Analysis and Refactoring
We build static and dynamic analysis tools that find and prevent serious bugs from manifesting in both Google’s and third-party code. We also leverage this large-scale analysis infrastructure to refactor Google’s code at scale.
Machine Learning for Code
We apply deep learning to Google’s large, well-curated codebase to automatically write code and repair bugs.
Programming Language Design and Implementation
We design, evaluate, and implement new features for popular programming languages like Java, C++, and Go through their standards’ processes.
Automated Software Testing and Continuous Integration
Testing is an essential component of software development at Google, driven primarily by the developers. We design, implement and evaluate tools and frameworks to automate the testing processes and integrate them with the Google-wide continuous integration infrastructure.