Lund University →
Faculty of Engineering →
Department of Computer Science
Skills
This page lists all technical skills of relevance to this class,
as a study guide. If you find that you possess all the skills
listed here, you can consider yourself to have mastered the class.
The final exam will draw its expectations from this list: each
question in the exam can be solved by using
and combining the skills listed here, basic arithmetic, and
general computer science knowledge from the undergraduate core
classes.
Note that the list will be changing during the course.
Concepts
For each concept (maked in bold-face below) be able to do the following:
- Give matching examples
- Distinguish it from other concepts
- Explain its relationship to any other concepts (is-part-of, is-alternative-to, is-generalisation-of etc.)
- Explain the purpose or utility of the concept
- Concepts: scanning/tokenisation, parsing, static semantics, dynamic semantics
- Concepts: name analysis, type analysis
- Concepts: safety, security
- Concepts: static program analysis, dynamic program analysis
- Concepts: soundness, precision
- Discuss and analyse program analyses while factoring in the soundness - precision - termination tradeoff (in the context of Turing-complete languages and nontrivial properties), and utilise this tradeoff when designing analyses
- Read and utilise Backus-Naur form (BNF) for expressing syntax
- Give examples of memory errors with and without automatic memory management and identify and explain the following errors in short, non-obfuscated code snippets:
null pointer dereference,
double free,
stale pointer error,
uninitialised memory error,
out-of-bounds error,
pointer type error, and
memory leak
- Concepts: graphs, sets, tuples
- Concept: monotonicity
- Concept: descending chain condition (DCC)
- Concept: lattices, flat lattices
- Concept: distributivity
- Concept: fixpoints, maximal fixpoints
- Read formal notation involving the concepts in this category
- Concept: three-address code (= code without nested expressions)
- Concept: control-flow graphs (CFGs)
- Concepts: static single assignment form (SSA) and Φ (Phi) functions
- Concepts: use-def and def-use chains
- Concept: client analysis
- Concept: procedure summaries
- Concept: worklist algorithm
- Concept: whole-program analysis
- Concepts: intraprocedural vs. interprocedural analysis
- Concepts: context-sensitive vs. context-insensitive analysis
- Concept: inlining for context-sensitive program analysis
- Concepts: flow-sensitive vs. flow-insensitive analysis
- Concepts: object-sensitive vs. object-insensitive analysis
- Give examples of limitations of static program analyses and determine whether they apply to given analysis scenarios. Relevant limitations are: decidability, reflection, dynamic loading, eval() and dynamic code generation
- Concepts: forward and backward dataflow analysis
- Concepts: transfer functions, merge functions
- Concepts: top and bottom elements of the analysis lattice
- Concepts: monotone frameworks, distributive frameworks
- Concepts: maximum fixpoint (MFP) and meet-over-all-paths (MOP) analyses
- Concepts: may and must analyses
- Design a lattice for a typical dataflow problem while guaranteeing termination
- Concepts: IDE analysis, IFDS analysis
- Concepts: procedure summaries, representation relations
- Apply MFP and IFDS analysis to a dataflow problem
- Concept: procedure call graph analysis
- Concept: class hierarchy analysis (CHA)
- Concepts: points-to, aliases
- Concepts: store-based memory models, store-free memory models
- Concepts: concrete heap graph, abstract heap graph, summary node
- Concept: summarisation based on allocation sites, variables, k-limiting
- Concept: aliasing
- Concept: access path
- Ability to utilise and extend Andersen's points-to analysis, given a description of the algorithm
- Concept: k-Call-site sensitivity in points-to analysis
- Concepts: Plain and Full object sensitivity
- Concept: Horn clauses
- Concepts: EDB and IDB tables in Datalog
- Concept: stratification for giving a `sensible' semantics to negation
- Read, write, and understand Datalog programs, possibly involving negation
- Concepts: Events and Characteristics
- Concepts: Measurements and Samples
- Concept: Instrumentation
- Concept: Perturbation
- Concept: Box Plots
- Concept: Performance Counters
- Concept: Warm-up effect
- Concept: Dynamic Taint Analysis
- Concept: Dynamic Binary Instrumentation
- Concept: Type Environments
- Concept: Monomorphic and Polymorphic Types (also known as monotypes / polytypes)
- Concept: Hindley-Milner style Type Inference
- Concept: Natural Semantics
- Read and understand formal descriptions of operational semantics using Gentzen-style proof rules, and use them for (at least) informal reasoning about the behaviour of language constructs
- Modify or write simple natural semantics rules