Static program analysis