Software Engineering
At Google, we pride ourselves on our ability to develop and launch new products and features at a very fast pace. This is made possible in part by our world-class engineers, but our approach to software development enables us to balance speed and quality, and is integral to our success. Our obsession for speed and scale is evident in our developer infrastructure and tools. Developers across the world continually write, build, test and release code in multiple programming languages like C++, Java, Python, Javascript and others, and the Engineering Tools team, for example, is challenged to keep this development ecosystem running smoothly. Our engineers leverage these tools and infrastructure to produce clean code and keep software development running at an ever-increasing scale. Here we share associated technical challenges and lessons learned along the way.
82 Publications
-
An Empirical Study of Practitioners’ Perspectives on Green Software Engineering
Irene Manotas, Christian Bird, Rui Zhang, David Shepherd, Ciera Jaspan, Caitlin Sadowski, Lori Pollock, James Clause
International Conference on Software Engineering (ICSE), 1600 Amphitheatre Parkway (2016) (to appear)
-
Data-driven software security: Models and methods
IEEE (2016)
-
Design patterns for container-based distributed systems
Brendan Burns, David Oppenheimer
The 8th Usenix Workshop on Hot Topics in Cloud Computing (HotCloud '16) (2016)
-
Directed Synthesis of Failing Concurrent Executions
Malavika Samak, Omer Tripp, Murali Krishna Ramanathan
OOPSLA 2016
-
IPA: Improving Predictive Analysis with Pointer Analysis
Peng Liu, Omer Tripp, Xiangyu Zhang
ISSTA 2016
-
Optimizing Distributed Actor Systems for Dynamic Interactive Services
Andrew Newell, Gabriel Kliot, Ishai Menache, Aditya Gopalan, Soramichi Akiyama, Mark Silberstein
EuroSys 2016, ACM – Association for Computing Machinery (to appear)
-
Revamping JavaScript Static Analysis via Localization and Remediation of Root Causes of Imprecision
Shiyi Wei, Omer Tripp, Barbara G. Ryder, Julian Dolby
FSE 2016
-
Why Google Stores Billions of Lines of Code in a Single Repository
Communications of the ACM, vol. 59 (2016), pp. 78-87
-
Automated Decomposition of Build Targets
Mohsen Vakilian, Raluca Sauciuc, J. David Morgenthaler, Vahab Mirrokni
Proceedings of the 37th International Conference on Software Engineering, IEEE Computer Society (2015), pp. 123-133
-
Continuous Pipelines at Google
SRECon Europe 2015, USENIX, Dublin, Ireland, pp. 12
-
Enhancing Android Accessibility for Users with Hand Tremor by Reducing Fine Pointing and Steady Tapping
Yu Zhong, Astrid Weber, Casey Burkhardt, Phil Weaver, Jeffrey P. Bigham
Web4All, Florence, Italy (2015), pp. 10
-
How Developers Search for Code: A Case Study
Caitlin Sadowski, Kathryn T. Stolee, Sebastian Elbaum
Joint Meeting of the European Software Engineering Conference and the Symposium on the Foundations of Software Engineering (ESEC/FSE ), 1600 Amphitheatre Parkway (2015)
-
Reusable Components of Semantic Specifications
Martin Churchill, Peter D. Mosses, Neil Sculthorpe, Paolo Torrini
Lecture Notes in Computer Science, vol. 8989 (2015), pp. 132-179
-
Tricorder: Building a Program Analysis Ecosystem
Caitlin Sadowski, Jeffrey van Gogh, Ciera Jaspan, Emma Soederberg, Collin Winter
International Conference on Software Engineering (ICSE) (2015)
-
Using Actors to Implement Sequential Simulations
University of Saskatchewan, Saskatchewan, Canada (2015)
-
A case of computational thinking: The subtle effect of hidden dependencies on the user experience of version control
Luke Church, Emma Soederberg, Elayabharath Elango
Psychology of Programming Interest Group Annual Conference 2014, pp. 123-128
-
ARC++: Effective Typestate and Lifetime Dependency Analysis
Xusheng Xiao, Gogul Balakrishnan, Franjo Ivancic, Naoto Maeda, Aarti Gupta, Deepak Chhetri
ISSTA, ACM (2014), pp. 116-126
-
An Adaptable Rule Placement for Software Defined Networks
Shuyuan Zhang, Franjo Ivancic, Cristian Lumezanu, Yifei Yuan, Aarti Gupta, Sharad Malik
DSN, IEEE (2014)
-
IEEE Software, vol. 31 (2014), pp. 12-14
-
Generating Consistent Updates for Software-Defined Network Configurations
Yifei Yuan, Franjo Ivancic, Cristian Lumezanu, Shuyuan Zhang, Aarti Gupta
HotSDN, ACM (2014)
-
Machine Learning: The High Interest Credit Card of Technical Debt
D. Sculley, Gary Holt, Daniel Golovin, Eugene Davydov, Todd Phillips, Dietmar Ebner, Vinay Chaudhary, Michael Young
SE4ML: Software Engineering for Machine Learning (NIPS 2014 Workshop)
-
Moving Targets: Security and Rapid-Release in Firefox
Sandy Clark, Michael Collis, Matt Blaze, Jonathan M. Smith
Proceedings of the 2014 ACM SIGSAC Conference on Computer and Communications Security, ACM, New York, NY, pp. 1256-1266
-
IEEE International Symposium on Software Reliability Engineering, IEEE International Symposium on Software Reliability Engineering (2014), pp. 144-155
-
Programmers’ Build Errors: A Case Study (at Google)
Hyunmin Seo, Caitlin Sadowski, Sebastian Elbaum, Edward Aftandilian, Robert Bowdidge
International Conference on Software Engineering (ICSE) (2014)
-
RLint: Reformatting R Code to Follow the Google Style Guide
Alex Blocker, Andy Chen, Andy Chu, Tim Hesterberg, Jeffrey D. Oldham, Caitlin Sadowski, Tom Zhang
R User Conference (2014)
-
Christoph Kern
Communications of the ACM, vol. 57, no. 9 (2014), pp. 38-47
-
2nd international workshop on user evaluations for software engineering researchers (USER)
Andrew Begel, Caitlin Sadowski
International Conference on Software Engineering (ICSE) (2013)
-
Accuracy of Contemporary Parametric Software Estimation Models: A Comparative Analysis
Proceeding of the 39th Euromicro Conference Series on Software Engineering and Advanced Applications, IEEE, Santander, Spain (2013), pp. 313-316
-
Applications and Extensions of Alloy: Past, Present, and Future
Emina Torlak, Mana Taghdiri, Greg Dennis, Joseph Near
Mathematical Structures in Computer Science, vol. 23 (2013), pp. 915-933
-
Combining compile-time and run-time instrumentation for testing tools
Timur Iskhodzhanov, Reid Kleckner, Evgeniy Stepanov
Programmnye produkty i sistemy, vol. 3 (2013), pp. 224-231
-
Does Bug Prediction Support Human Developers? Findings from a Google Case Study
Chris Lewis, Zhongpeng Lin, Caitlin Sadowski, Xiaoyan Zhu, Rong Ou, E. James Whitehead Jr.
International Conference on Software Engineering (ICSE) (2013)
-
Generating Precise Dependencies for Large Software
Pei Wang, Jinqiu Yang, Lin Tan, Robert Kroeger, J. David Morgenthaler
Proceedings of the Forth International Workshop on Managing Technical Debt, IEEE (2013), pp. 47-50
-
Large-Scale Automated Refactoring Using ClangMR
Hyrum Wright, Daniel Jasper, Manuel Klimek, Chandler Carruth, Zhanyong Wan
Proceedings of the 29th International Conference on Software Maintenance (2013)
-
Scalable, Example-Based Refactorings with Refaster
Workshop on Refactoring Tools (2013)
-
Strategies for testing client-server interactions in mobile applications
Niranjan Tulpule
MobileDeLi '13 Proceedings of the 2013 ACM workshop on Mobile development lifecycle, ACM, Indianapolis, Indiana, pp. 19-20
-
Mark Ethan Trostler
O'Reilly Media, 1005 Gravenstein Highway North Sebastopol, CA 95472 (2013)
-
Why Don't Software Developers Use Static Analysis Tools to Find Bugs?
Brittany Johnson, Yoonki Song, Emerson Murphy-Hill, Robert Bowdidge
International Conference on Software Engineering (2013), pp. 672-681
-
A taste of Capsicum: practical capabilities for UNIX
Robert N. M. Watson, Jonathan Anderson, Ben Laurie, Kris Kennaway
Communications of the ACM, vol. 55(3) (2012), pp. 97-104
-
AddressSanitizer: A Fast Address Sanity Checker
Konstantin Serebryany, Derek Bruening, Alexander Potapenko, Dmitry Vyukov
USENIX ATC 2012
-
Building Useful Program Analysis Tools Using an Extensible Java Compiler
Edward Aftandilian, Raluca Sauciuc, Siddharth Priya, Sundaresan Krishnan
International Working Conference on Source Code Analysis and Manipulation (SCAM), IEEE (2012), pp. 14-23
-
Measuring Enforcement Windows with Symbolic Trace Interpretation: What Well-Behaved Programs Say
Devin Coughlin, Bor-Yuh Evan Chang, Amer Diwan, Jeremy Siek
Proceedings of the 2012 International Symposium on Software Testing and Analysis, ACM, pp. 276-286
-
Searching for Build Debt: Experiences Managing Technical Debt at Google
J. David Morgenthaler, Misha Gridnev, Raluca Sauciuc, Sanjay Bhansali
Proceedings of the Third International Workshop on Managing Technical Debt, IEEE (2012), pp. 1-6
-
Systematic Software Testing: The Korat Approach
Chandrasekhar Boyapati, Sarfraz Khurshid, Darko Marinov
Foundations of Software Engineering (FSE), ACM (2012), pp. 1
-
Team Geek: A Software Developer's Guide to Working Well with Others
Brian W. Fitzpatrick, Ben Collins-Sussman
O'Reilly Media, 1005 Gravenstein Highway North, Sebastopol, CA 95472 (2012), pp. 180
-
Building Web Apps for Google TV
Amanda Surya, Andres Ferrate, Daniels Lee, Maile Ohye, Paul Carff, Shawn Shen, Steven Hines
o'Reilly Media, 1005 Gravenstein Hwy N Sebastopol, CA 95472 (2011), pp. 116
-
Combined Static and Dynamic Automated Test Generation
Sai Zhang, David Saff, Yingyi Bu, Michael D. Ernst
Proc. 11th International Symposium on Software Testing and Analysis (ISSTA 2011), Toronto, Ontario, (to appear)
-
Dynamic Race Detection with LLVM Compiler
Konstantin Serebryany, Alexander Potapenko, Timur Iskhodzhanov, Dmitry Vyukov
Google (2011)
-
Entrepreneurial Innovation at Google
Patrick Copeland, Alberto Savoia
IEEE: Computer, vol. 0018-9162/11 (2011), pp. 7
-
HTAF: Hybrid Testing Automation Framework to Leverage Local and Global Computing Resources
Keun Soo Yim, David Hreczany, Ravishankar K. Iyer
Lecture Notes in Computer Science, vol. 6784 (2011), pp. 479-494
-
Practical Memory Checking with Dr. Memory
Derek Bruening, Qin Zhao
Proceedings of the IEEE/ACM International Symposium on Code Generation and Optimization, IEEE Computer Society, Los Alamitos, CA, USA (2011), pp. 213-223
-
RACEZ: A Lightweight and Non-Invasive Race Detection Tool for Production Applications
Tianwei Sheng, Neil Vachharajani, Stephane Eranian, Robert Hundt
ICSE, ACM (2011), pp. 401-410
-
Still All On One Server: Perforce at Scale
Dan Bloch
2011 Perforce User Conference
-
The Future of Computing Performance: Game Over or Next Level?
Samuel H. Fuller, Luiz André Barroso, Robert P. Colwell, William J. Dally, Dan Dobberpuhl, Pradeep Dubey, Mark D. Hill, Mark Horowitz, David Kirk, Monica Lam, Kathryn S. McKinley, Charles Moore, Katherine Yelick
The National Academies Press (2011), pp. 200
-
Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman
Dave Hoover, Ade Oshineye
O'Reilly, Sebastopol, California (2010), pp. 144
-
Evolving ASDF: More Cooperation, Less Coordination
François-René Rideau, Robert Goldman
Proceedings of the International Lisp Conference 2010
-
Google’s Innovation Factory: Testing, Culture, And Infrastructure
IEEE International Conference on Software Testing, Verification and Validation (2010), pp. 4
-
How Much Software Testing is Enough
Ruben Ortega
Communications of the ACM, vol. 53. No 9 (2010), pp. 9
-
Object views: Fine-grained sharing in browsers
Leo Meyerovich, Adrienne Felt, Mark S. Miller
Proceedings of the International Conference on World Wide Web, World Wide Web Consortium (2010)
-
Software development and crunch time; and more
Ruben Ortega
Communications of the ACM, vol. 53 No. 7 (2010), pp. 10-11
-
Performance Trade-offs Implementing Refactoring Support for Objective-C
Workshop on Refactoring Tools (2009)
-
Dan Sanderson
O'Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA, 95472 (2009), pp. 367
-
ThreadSanitizer – data race detection in practice.
Konstantin Serebryany, Timur Iskhodzhanov
Proceedings of the Workshop on Binary Instrumentation and Applications, WBIA'09 (http://www.dyninst.org/wbia09/cfp.html)., NYC, NY, U.S.A. (2009), pp. 62-71
-
Code Coverage, Performance, Approximation and Automatic Recognition of Idioms in Scientific Applications
Jiahua He, Allan E. Snavely, Rob F. Van der Wijngaart, Michael A. Frumkin
Proc. 17th International Symposium on High Performance Distributed Computing, ACM, Boston (2008), pp. 223-224
-
Dynamic Recognition of Synchronization Operations for Improved Data Race Detection
Chen Tian, Vijay Nagarajan, Rajiv Gupta, Sriraman Tallam
Proc. International Symposium on Software Testing and Analysis, ACM, Seattle (2008), pp. 143-154
-
Experiences Using Static Analysis to Find Bugs
Nathaniel Ayewah, David Hovemeyer, J. David Morgenthaler, John Penix, William Pugh
IEEE Software, vol. 25 (2008), pp. 22-29
-
High Performance Web Sites
Steve Souders
Communications of the ACM, vol. 51 (2008), pp. 36-41
-
Predicting Accurate and Actionable Static Analysis Warnings: An Experimental Approach
Joseph Ruthruff, John Penix, J. David Morgenthaler, Sebastian Elbaum, Gregg Rothermel
Proceedings of the International Conference on Software Engineering, ACM (2008), pp. 341-350
-
Version Control with Subversion, Second Edition
Brian Fitzpatrick, Ben Collins-Sussman, C. Michael Pilato
O'Reilly Media, 1003 Gravenstein Highway North Sebastopol, CA 95472 (2008), pp. 430
-
Evaluating Static Analysis Defect Warnings on Production Software
Nathaniel Ayewah, William Pugh, J. David Morgenthaler, John Penix, YuQian Zhou
Proceedings of the 7th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering, ACM Press, New York, NY, USA (2007), pp. 1-8
-
Keeping the Web in Web 2.0: An HCI Approach to Designing Web Applications
J. Mittleman, Steffen Meschkat
ACM CHI 2007
-
Parallel Test Generation and Execution with Korat
Sasa Misailovic, Aleksandar Milicevic, Nemanja Petrovic, Sarfraz Khurshid, Darko Marinov
Proc. 6th Joint Meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering, ACM, Dubrovnik, Croatia (2007)
-
Rong Ou
Pacific Northwest Software Quality Conference 2007 Proceedings, PNSQC, PO Box 10733, Portland, OR 97296-0733, pp. 267-274
-
Using FindBugs on Production Software
Nathaniel Ayewah, J. David Morgenthaler, John Penix, William Pugh, YuQian Zhou
Proc. OOPSLA'07, ACM, Montréal (2007)
-
A Fishbowl with Piranhas: Coalescence, Convergence, or Divergence? The Future of Agile Software Development Practices: Some Assembly Required!
Steven Fraser, Linda Rising, Scott Ambler, Alistair Cockburn, Jutta Eckstein, David Hussman, Randy Miller, Mark Striebeck, Dave Thomas
Proc. OOPSLA, ACM, Portland, Oregon (2006), pp. 937-939
-
How to design a good API and why it matters
Joshua Bloch
Proc. 21st ACM SIGPLAN Conference (OOPSLA), ACM, Portland, Oregon (2006), pp. 506-507
-
LCSD: Library-Centric Software Design
Josh Bloch, Jaakko Jäarvi, David Musser, Sibylle Schupp, Jeremy Siek
Proc. OOPSLA, ACM, Portland, Oregon (2006), pp. 616-618
-
LEVER: A Tool for Learning Based Verification (Tool Paper)
Abhay Vardhan, Mahesh Viswanathan
Springer (2006)
-
Modular Software Upgrades for Distributed Systems
Sameer Ajmani, Barbara Liskov, Liuba Shrira
European Conference on Object-Oriented Programming (ECOOP) (2006)
-
binpac: A yacc for Writing Application Protocol Parsers
Ruoming Pang, Vern Paxson, Robin Sommer, Larry Peterson
Proc. 6th ACM SIGCOMM on Internet Measurement, ACM, Rio de Janeriro (2006), pp. 289-300
-
Hancock: A language for analyzing transactional data streams
Corinna Cortes, Kathleen Fisher, Daryl Pregibon, Anne Rogers, Frederick Smith
ACM Trans. Program. Lang. Syst., vol. 26 (2004), pp. 301-338
-
James A. Whittaker
Addison-Wesley (2002)
-
Jscheme: A Dialect of Scheme for Scripting in Java,
Ken Anderson, Tim Hickey, Peter Norvig
Proceedings of the MIT Dynamic Languages Seminar (2001)
