This paper is an update on their earlier paper (sadowski:icse:2015) that brings the story up to date and fills in some of the background stories about previous failures that informed their later approach and some of the successes. Despite the overlap, it is worth reading both of them because the two articles have a different emphasis and the overlap is not too severe.
Some key things are
- The earlier failed attempt with BugBot tried
- A bug dashboard – that was ignored
- Filing bugs found by the tool – this did not scale and 84% of bugs were not fixed.
- Integrating the tool into code review – False positives and allowing individuals to customize their warning settings killed it off.
- Integrating checks into the compiler can be highly effective if errors
fail the build.
You need a dedicated team who will file fixes against the entire
Google codebase (which is large potvin:cacm:2016) before you can
enable the check. But, once you can enable the check, it ratchets up
code quality permanently.
Can only be used for checks that are
- easily understood
- actionable and easy to fix
- no effective false positives
- only check for correctness not style or best practice. (Because, engineers temporarily deviate while debugging or developing new code and we don’t want to slow that down).
- Code review checks should have less than 10% effective false positives (but still need to be understandable, actionable and easy to fix).
- None of the static analyses are compositional and they are not convinced that techniques that work for multi-million line repos will scale to multi-billion line repos.
- As long as finding bugs is easy, it is hard to justify investing more in deeper analyses. (Though Google has since been very active in fuzzing – see babic:fse:2019 for example.)
- “Developer happiness is key”
- “For a static analysis project to succeed, developers must feel they benefit from and enjoy using it.”
- “Do not just find bugs, fix them”: reports must be acted on.
- “Lower the bar to developer-contributed checks”
- “To overcome warning blindness, we have worked to regain the trust of Google engineers, …”
Papers related to Lessons from building static analysis tools at Google
- Scaling static analyses at Facebook [distefano:cacm:2019]
- Why Google stores billions of lines of code in a single repository [potvin:cacm:2016]
- Modern code review: A case study at Google [sadowski:icse-seip:2018]
- Tricorder: Building a program analysis ecosystem [sadowski:icse:2015]