Unsoundness in Static Analysis: Challenges and Utility

 
In Defense of
Unsoundness
 
Ben Livshits, Manu Sridharan, Yannis
Smaragdakis, and Ondřej Lhoták
 
April 14 – 19, 2013, Dagstuhl Seminar 13162
Pointer Analysis
Are Static Analysis
(papers) Sound?
 
Sound: capture all program behavior
Must analysis results hold during
program execution?
Of course not!
Virtually  all  recent  whole  program
analyses  for  realistic  languages  are
unsound
Unsoundness is
Everywhere!
 
Omit conservative handling for common
language features
Unsoundness lurks  in  the  shadows
caveats  only mentioned off-hand in
an “implementation” or “evaluation”
section.
 
Nasty Language Features
 
Typical  (published)  whole-program  analysis
extolls  its  scalability  virtues  and  briefly
mentions  its  soundness  caveats.
Java: reflection and JNI
JavaScript: eval and dynamically
computed properties
C/C++: assumptions about memory region
and pointer arithmetic
Can These Language
Features be Ignored?
 
Most of the time the answer is no
These language features are nearly ubiquitous
in practice.
"Assuming the features away" excludes the
majority of input programs.
For example, very few JavaScript programs
larger than a certain size omit at least
occasional calls to eval.
 
Could all these Features
be Modeled Soundly?
 
In principle, yes.
In practice, destroys the precision of the
analysis
Must be highly over-approximate.
Huge imprecise result = useless.
Imprecision destroys scalability
Soundness is not Even
Necessary!
 
Many clients can tolerate unsoundness.
IDEs (auto-complete systems, code
navigation)
General purpose bug detectors
Automated refactoring tools
Even hints for runtime  optimization
Should We Even Try?
 
Soundness  is  extremely  hard  to  achieve  for
a  whole-program  analysis  in  a  realistic,
modern language, due to programming
language features that are very hard or even
impossible to analyze precisely.
Even if achieved the precision is likely to be
destroyed.
What is a reasonable middle ground?
Soundiness
Sound modulo inevitable unsoundness
“best-effort soundness”
“sound except for the things we all
know about”
 
Middle Ground:
Soundiness
 
We draw a distinction between
a 
soundy
 analysis, which aims to capture all
dynamic behaviors within reason, and
an 
unsound
 analysis that deliberately ignores
certain behaviors
We  argue  that  soundiness  is  a  good  line  in  the
sand  to  draw  in  order  to  avoid  abuse  of  the
observation that "everyone's analysis is unsound."
Moving Forward
Soundy is the new sound, de facto, given the research
literature of the past decades.
Papers on unsound analyses should explain the
implications of their unsoundness.
For nasty features, more studies  should  be  published
to  characterize  how  extensively  they are  used  in
typical  programs.
As  a  community,  we  should  provide  guidelines  on
how  to  write  unsound  analysis  papers.
The PL research community should
embrace unsound analysis techniques and
tune its soundness expectations.
Slide Note
Embed
Share

The discussion explores the prevalence of unsoundness in static analysis for realistic programming languages, highlighting common language features and their impact on soundness. It questions the necessity of achieving absolute soundness and presents scenarios where unsound analyses are tolerated in various client applications and tools.

  • Unsoundness
  • Static Analysis
  • Programming Languages
  • Soundness
  • Client Applications

Uploaded on Sep 19, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. In Defense of Unsoundness Ben Livshits, Manu Sridharan, Yannis Smaragdakis, and Ond ej Lhot k

  2. April 14 19, 2013, Dagstuhl Seminar 13162 Pointer Analysis

  3. Are Static Analysis (papers) Sound? Sound: capture all program behavior Must analysis results hold during program execution? Of course not! Virtually all recent whole program analyses for realistic languages are unsound

  4. Unsoundness is Everywhere! Omit conservative handling for common language features Unsoundness lurks in the shadows caveats only mentioned off-hand in an implementation or evaluation section.

  5. Nasty Language Features Typical (published) whole-program analysis extolls its scalability virtues and briefly mentions its soundness caveats. Java: reflection and JNI JavaScript: eval and dynamically computed properties C/C++: assumptions about memory region and pointer arithmetic

  6. Can These Language Features be Ignored? Most of the time the answer is no These language features are nearly ubiquitous in practice. "Assuming the features away" excludes the majority of input programs. For example, very few JavaScript programs larger than a certain size omit at least occasional calls to eval.

  7. Could all these Features be Modeled Soundly? In principle, yes. In practice, destroys the precision of the analysis Must be highly over-approximate. Huge imprecise result = useless. Imprecision destroys scalability

  8. Soundness is not Even Necessary! Many clients can tolerate unsoundness. IDEs (auto-complete systems, code navigation) General purpose bug detectors Automated refactoring tools Even hints for runtime optimization

  9. Should We Even Try? Soundness is extremely hard to achieve for a whole-program analysis in a realistic, modern language, due to programming language features that are very hard or even impossible to analyze precisely. Even if achieved the precision is likely to be destroyed. What is a reasonable middle ground?

  10. Soundiness Sound modulo inevitable unsoundness best-effort soundness sound except for the things we all know about

  11. Middle Ground: Soundiness We draw a distinction between a soundy analysis, which aims to capture all dynamic behaviors within reason, and an unsound analysis that deliberately ignores certain behaviors We argue that soundiness is a good line in the sand to draw in order to avoid abuse of the observation that "everyone's analysis is unsound."

  12. Moving Forward Soundy is the new sound, de facto, given the research literature of the past decades. Papers on unsound analyses should explain the implications of their unsoundness. For nasty features, more studies should be published to characterize how extensively they are used in typical programs. As a community, we should provide guidelines on how to write unsound analysis papers. The PL research community should embrace unsound analysis techniques and tune its soundness expectations.

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#