Live data from Hacker News

A hands-on introduction to static code analysis

deepsource.io

11–20 of 32 posts

Re: A hands-on introduction to static code analysis

#12
post #8

It's good to see discussions of static analysis, but I often feel that these blog posts do a disservice to the techniques. The post leads by mentioning applications like bugfinding and security vuln detection but the examples here are barely above local syntactic checks. This is the common scenario in the majority of blog posts I see about static analysis, probably because it is just much easier to put together a qui…

Article author here. Agree that the post merely touches the surface for static analysis -- because it was aimed towards an audience looking for an introduction to static analysis. The scope for the examples in this post had to be limited for this reason. Inter-procedural pointer analysis -- Yes, a lot more trickier than these, but definitely more juicier. Will try to write a post on it in the coming weeks.

I think limiting the scope is fine in general. But one small suggestion would be to make it more clear that this is just one very simple technique. This does not come across at all in the blog post. The diagram you show, for example, seems to state that this is just how static analyses work - they are given ASTs to work with. Or at the very least include some examples of semantic properties. It seems incongruent when you describe static analysis as understanding the behavior of the program without running it and then use examples that are about syntactic style violations.

Re: A hands-on introduction to static code analysis

#13

The kinds of analyses mentioned here are typically grouped under "linting"–more advanced static analysis tools will typically do things like dataflow analysis.

Any beginner friendly articles on more advanced analysis that you'd recommend?

https://en.wikipedia.org/wiki/Static_single_assignment_form

Re: A hands-on introduction to static code analysis

#14

The kinds of analyses mentioned here are typically grouped under "linting"–more advanced static analysis tools will typically do things like dataflow analysis.

I too would be interested in interesting static code analyses (that are beyond linting).

Re: A hands-on introduction to static code analysis

#15

It's good to see discussions of static analysis, but I often feel that these blog posts do a disservice to the techniques. The post leads by mentioning applications like bugfinding and security vuln detection but the examples here are barely above local syntactic checks. This is the common scenario in the majority of blog posts I see about static analysis, probably because it is just much easier to put together a qui…

I want to read more on this topic. Have you written about this anywhere, or do you have a pointer/suggestion?

Re: A hands-on introduction to static code analysis

#16

Slightly tangential to what the article is about, but at least in the C/C++ world, the most important change to make static analysis popular for "the rest of us" was probably Xcode's decision to integrate clang analyzer right into the Xcode UI under a menu item (Xcode doesn't do many things right, but this is definitely one of the very good features). This way, analyzing the code is a simple "button press" and works…

Somewhat annoyingly, the static analyzer that ships with Xcode doesn't seem to be packaged separately as in the command line tools…

Hmm, command-line clang accepts a --analyze option here ("Apple clang version 11.0.0"), and this seems to give additional output over the regular warnings. I'm not sure if that's the same thing as the analyzer integrated into Xcode, but some sort of static analyzer seems to be there.

Re: A hands-on introduction to static code analysis

#17

It's good to see discussions of static analysis, but I often feel that these blog posts do a disservice to the techniques. The post leads by mentioning applications like bugfinding and security vuln detection but the examples here are barely above local syntactic checks. This is the common scenario in the majority of blog posts I see about static analysis, probably because it is just much easier to put together a qui…

I want to read more on this topic. Have you written about this anywhere, or do you have a pointer/suggestion?

This article gets more into actual analysis of program state and execution: http://matt.might.net/articles/intro-static-analysis/

If you want to go deeper, Principles of Program Analysis is a popular reference: Principles of Program Analysis https://www.amazon.com/dp/3540654100/

Re: A hands-on introduction to static code analysis

#19

Earlier quoted context omitted.

Any beginner friendly articles on more advanced analysis that you'd recommend?

https://en.wikipedia.org/wiki/Static_single_assignment_form

While computing phis for SSA does require dataflow analysis, SSA itself is not tremendously useful. The natural follow up to this would be "so what?" Something like live variable analysis is probably a much better first introduction to dataflow analysis since its application is much more obvious.

SSA is also not even universal among IRs for static analysis at this point. Heap-SSA is growing in popularity for complex dataflow problems involving fields.

Re: A hands-on introduction to static code analysis

#20

The kinds of analyses mentioned here are typically grouped under "linting"–more advanced static analysis tools will typically do things like dataflow analysis.

Any beginner friendly articles on more advanced analysis that you'd recommend?

Don't have any materials to point to, sadly. Most of the knowledge in this field is locked up in papers and tools; I was lucky to learn most of what I know from a graduate class taught by a professor working on static analysis in V8 and working with/on software security tooling. To begin with, I'd suggest first brushing up on compiler optimizations (which is largely separate from parsing) and that should lead you to dataflow analysis techniques.
Post reply on HN