Astrée: Building a Static Analyzer for Real-Life Programs
|
|
|
- Frank Sherman
- 10 years ago
- Views:
Transcription
1 Astrée: Building a Static Analyzer for Real-Life Programs Antoine Miné CNRS & École normale supérieure Paris, France Workshop on Learning From experience June 6th, 2010 LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 1 / 47
2 What is Astrée? Introduction Analyse Statique Temps RÉEl (Real-Time Static Analysis) checks statically for the absence of run-time errors (RTE) on a subset of C for embedded applications semantic-based, sound, based on Abstract Interpretation specialized for synchronous reactive real-time codes : 0 alarms Development team : P. Cousot, R. Cousot, L. Mauborgne, J. Feret, A. Miné, X. Rival, B. Blanchet, D. Monniaux LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 2 / 47
3 History Introduction Milestones Nov Astrée academic project starts Nov primary control software of the Airbus A340 analyzed proof of the absence of RTE Apr maiden flight of the A380 proof of the absence of RTE (for current version) Sep study on applicability to space software with ESA Jan start industrialization with AbsInt GmbH initially developed at École Normale Supérieure & CNRS, France now developed & commercially available from AbsInt, Germany LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 3 / 47
4 Engineering Facts Introduction Analyzer : 80 K lines of OCaml 10 K lines of C (one module + low-level code) 150 command-line options (+ GUI & integration in AbsInt tool-chain) Analyzed codes : 80 K to 715 K lines of C in large part generated from a proprietary synchronous language 40 mn to 62 h analysis time (Intel Xeon 2.66Ghz, 64-bit, 1 core) smallest fit in 2 GB RAM, largest fit in 32 GB LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 4 / 47
5 Overview Introduction semantic-based static analysis Abstract Interpretation defining a semantics for C the C norm Astrée s concrete semantics Astrée s abstract semantics selected topics algorithms & data-structures abstract domains conclusion LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 5 / 47
6 Semantic-Based Static Analysis Semantic-Based Static Analysis LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 6 / 47
7 Semantic-Based Static Analysis Review of Verification Methods Verification Methods Testing well-established method but no formal warranty, high cost LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 7 / 47
8 Semantic-Based Static Analysis Review of Verification Methods Verification Methods Testing well-established method but no formal warranty, high cost Formal methods : Theorem proving proof essentially manual, but checked automatically powerful, but very steep learning curve Model checking checks a model of the program (usually user-specified, finite) automatic and complete (wrt. model), but costly LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 7 / 47
9 Semantic-Based Static Analysis Verification Methods Review of Verification Methods (cont.) (Semantic-based) static analysis works directly on the source code automatic, always terminating sound incomplete (full control and data coverage) (not a model) (properties missed, false alarms) parameterized by one/several abstraction(s) mostly used to check simple properties, with low precision requirement (e.g., for optimisation) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 8 / 47
10 Semantic-Based Static Analysis Verification Methods Review of Verification Methods (cont.) (Semantic-based) static analysis works directly on the source code automatic, always terminating sound incomplete (full control and data coverage) (not a model) (properties missed, false alarms) parameterized by one/several abstraction(s) mostly used to check simple properties, with low precision requirement (e.g., for optimisation) Specialized static analyzer checks for run-time errors (overflow, etc.) is very precise on a chosen class of programs (no false alarm) gives sound results on all programs LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 8 / 47
11 Semantics Semantic-Based Static Analysis Abstract Interpretation Concrete semantics : defines all relevant aspects of computation (variable and expression values, memory state, errors, etc.) Example : formally defined, but generally undecidable solution of a recursive equation system ( fix-point) numeric invariants a0: i = 0; a1: while (i<10) { a2: a[i] = 0; a3: i++; a4: } a5: = no overflow on i, a is initialized to 0 D = P({i, a[0],..., a[9]} [ 2 31, 2 31 [) X 0 = D X 1 = { ρ[i 0] ρ X 0 } X 4 X 2 = { ρ ρ X 1, ρ(i) < 10} X 3 = { ρ[a[ρ(i)] 0] ρ X 2 } X 4 = { ρ[i ρ(i) + 1] ρ X 3 } X 5 = { ρ ρ X 1, ρ(i) 10} LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 9 / 47
12 Semantic-Based Static Analysis Abstract Interpretation Abstract Interpretation Abstract Interpretation General theory of semantic approximation [Cousot Cousot77,91] Can be used to design effective, sound static analyses Static approximation : choose an effective encoding D of a set of properties of interest (γ : D D monotonic) for each operator F : D D used in the semantics design an abstract version F : D D (algorithm) (soundness condition : γ F F γ) Dynamic approximation : needed to approximate fixpoints when D has infinite chains provided by convergence acceleration operators, (e.g., X i+1 = X i F (X i ) converges in finite time to a post-fixpoint of F ) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 10 / 47
13 Semantic-Based Static Analysis Abstract Interpretation Example Abstract Domain : Intervals Definition : D def = Var (Q { }) (Q {+ }) γ(x ) = { ρ v Var, ρ(v) [l, h], (l, h) = X (v) } F implemented using interval arithmetics ([l, h] + [l, h ] = [l + l, h + h ], etc.) convergence extrapolation : set unstable bounds to ± (h h = if h < h then + else h, etc.) Abstraction : infer variable bounds, forget relations X D abstraction γ(x ), X D LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 11 / 47
14 Difficulties Semantic-Based Static Analysis Abstract Interpretation We may not find the best invariant expressible in D : a0: i = 0; a1: while (i<10) { a2: a[i] = 0; a3: i++; a4: } Causes : at a1 : i [0, 10] j, a[j] [ 2 31, 2 31 [ = no overflow on i proven 0-initialization of a not proven approximations accumulate (the combination of optimal abstract operators is not optimal) extrapolation introduces extra approximation the need to find inductive loop invariants of a complex form (e.g., j i, a[j] = 0) An (infinite) abstract domain works on infinitely many programs and fails on infinitely many programs! LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 12 / 47
15 Semantic-Based Static Analysis Construction by Refinement Abstract Interpretation Theoretical completeness : for each program and property, an abstract domain exists it s construction is not mechanizable Practical approach build a simple and fast analyzer (intervals) refine the analyzer until 0 false alarm : determine which necessary properties are missed add / refine an abstract domain to infer it Benefits sound by construction efficient (adapted cost / precision trade-off) encourages modular, reusable abstractions LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 13 / 47
16 Semantic-Based Static Analysis More Abstract Domain Examples Abstract Interpretation A few of the abstract domains used in Astrée. octagons ellipsoids congruences ±X ± Y c digital filters X a [b] boolean decision trees exponentials trace partitions X (1 + α) βt LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 14 / 47
17 Semantic-Based Static Analysis Abstract Interpretation The Difference Between Theory and Practice Nice in theory... the reality is more complex : difficult to define a concrete semantics of C abstract domains are designed to abstract perfect numbers (not machine integers nor floats) abstract domains are sensitive to programming practices (non-expressible idioms cause catastrophic loss of precision) algorithms good for academic analyzers may not scale-up to large programs LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 15 / 47
18 A Semantics for C A Semantics for C LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 16 / 47
19 Considered C Subset A Semantics for C Astrée and the C Norm Matches the restrictions of embedded critical software. Handled C types : integers, enums, floats, structs, arrays, unions, bitfields pointers : aliases, arithmetics, type-punning structured control : if, for, while, switch forward goto, break, return function calls Unhandled dynamic memory allocation recursivity libraries (stubs needed) backward goto longjmp variable argument number concurrency, threads (work in progress) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 17 / 47
20 C Norm A Semantics for C Astrée and the C Norm Norms C99 norm IEEE norm (portable programs) (floating-point arithmetics) But the C standard is largely underspecified : implementation-defined behaviors (documented, sensible semantics) (e.g. : overflow in cast to signed integer) unspecified behaviors (undocumented but sensible semantics) (e.g. : argument evaluation order) undefined behaviors (anything can happen) (e.g. : overflow in integer arithmetics) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 18 / 47
21 Astrée Semantics A Semantics for C Astrée and the C Norm Fact People do not write strictly conforming programs! Some behaviors should be considered run-time errors, others return a deterministic result... some do both! The semantics is refined by : platform-dependent choices : range of types bit-representation (sizeof, endianess, struct padding, etc.) compiler- and linker-dependent choices : automatic variable initialization (optional) symbol redefinition (forbidden) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 19 / 47
22 Run-Time Errors A Semantics for C Run-Time Errors Run-time errors in Astrée overflow in float, integer, enum arithmetic and cast division, modulo by 0 on integer and float invalid right argument of bit-shift out-of-bound array access invalid pointer arithmetic or dereference violation of a user-specified assertion ( ASTREE_assert) Some RTE alarms can be toggled on and off by the end-user. LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 20 / 47
23 A Semantics for C Semantics After a Run-time errors Run-Time Errors Several semantics are possible after an error : halt the program division, modulo by zero floating-point overflow assertion failure unpredictable value returned (need to consider all values in type) invalid bit-shift well-defined result modulo on integer arithmetics overflow type-punning unpredictable behavior (treated as halting the program) invalid dereference Some choices can be configured by the end-user. It is important to continue the analysis after alarms! LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 21 / 47
24 A Semantics for C Conflicting Side-Effects Details of the Astrée C Semantcs An expression can have several side-effects, only partially ordered by sequence points! Undefined behavior Between two sequence points, an object is modified more than once, or is modified and the prior value is accessed other than to determine the value to be stored. Some undefined / unspecified cases are difficult to detect : ++(*a) - ++(*b) (need pointer analysis) f() + g() (need to look inside f and g) Current solution in Astrée : (not fully satisfactory) sound but coarse syntactic static expression analysis = issues warnings if conflicts found continue, assuming a left-to-right evaluation order LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 22 / 47
25 Semantics of Integers A Semantics for C Details of the Astrée C Semantcs Concrete semantics bounded integers in [0, 2 n [ or [ 2 n 1, 2 n 1 [ (2 s complement) in case of error, issue an alarm and continue with : either the whole range (e.g., overflow) or a modular result (e.g., overflow) or non-erroneous results only (e.g., division by 0) for enums, optional checking wrt. value set Abstractions interval domain : can detect errors in expressions and has a decent abstract operator for modulo (more later... ) relational domains : rely on the interval domain no error : operate normally, assuming Z semantics (permitting symbolic reasoning, e.g. (2 X )/2 X ) error : abort and use the interval result LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 23 / 47
26 A Semantics for C Semantics of IEEE Floats Details of the Astrée C Semantcs Concrete semantics operation in Q followed by rounding to nearest, +, -, or 0 generating a ± or NaN is a program-halting error (overflow, invalid operation) computing on ± or NaN is a program-halting error (unchecked data from the environment) Non-deterministic rounding issues : rounding mode can change during program execution precision of types not strictly respected (e.g., double rounding, fused add-multiply) Astrée assumes a b can be any number in [a b, a + b] LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 24 / 47
27 A Semantics for C Details of the Astrée C Semantcs Semantics of IEEE Floats (cont.) Abstraction : interval domain : enriched with flags to denote possible ± and NaN can detect errors in expressions sound float interval arithmetics is very easy : round lower (upper) bounds towards (+ ) using the same precision as in the concrete operator relational domains : disabled if the interval domain detects an error transform expressions to make rounding error explicit (e.g., x + y x + y + [ 10 2, 10 2 ] or x + y (1 + [ 10 6, 10 6 ])(x + y) + [ 10 20, ]) the expression now has a semantics in Q abstract computations use only floats internally (maths possible) (efficient) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 25 / 47
28 A Semantics for C Semantics of Aggregates Details of the Astrée C Semantcs C aggregates : structs, unions, arrays Concrete semantics (low level) variable = untyped contiguous sequence of bytes all memory accesses statically reduced to : taking the address of a variable & performing pointer arithmetics in bytes dereferencing * scalar objects (integer, float, or pointer type) = access possible to the binary representation of types specified by an Application Binary Interface Lesson learned The first iteration of Astrée s memory model assumed only strict C norm well-structured accesses... which did not match actual programming practice LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 26 / 47
29 A Semantics for C Semantics of Aggregates (cont.) Details of the Astrée C Semantcs A few examples... Union union { struct { uint8 al,ah,bl,bh } b; struct { uint16 ax,bx } w; } r; r.w.ax = 258; if (r.b.al==2) r.b.al++; r.w.ax++; Type-punning uint8 buf[4] = { 1,2,3,4 }; uint32 i = *((uint32*)buf); Ill-typed copy float a,b; *((int*)&a) = *((int*)&b); All examples have : no error a well-defined semantics LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 27 / 47
30 A Semantics for C Semantics of Aggregates (cont.) Details of the Astrée C Semantcs Abstraction Do not abstract values at the byte level! We decompose dynamically the memory into cells of scalar type : cell = variable + offset + scalar type materialize new cells when needed by a dereference (possible reduction with existing cells) allow overlapping cells, with an intersection semantics Orthogonality of abstractions numerical domains only see a collection of independent cells (abstract P(cells Q)) a memory domain maintains the mapping cells memory (handles byte-level aliasing of cells) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 28 / 47
31 A Semantics for C Semantics of Aggregates (cont.) Details of the Astrée C Semantcs Union r.w.ax = 258 ; if (r.b.al==2) r.b.al++ ; r.w.ax++ ; initial state : no cell ( ) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 29 / 47
32 A Semantics for C Semantics of Aggregates (cont.) Details of the Astrée C Semantcs Union r.w.ax = 258 ; if (r.b.al==2) r.b.al++ ; r.w.ax++ ; ax 258 create r.w.ax, a uint16 cell at offset 0 LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 29 / 47
33 A Semantics for C Semantics of Aggregates (cont.) Details of the Astrée C Semantcs Union r.w.ax = 258 ; if (r.b.al==2) r.b.al++ ; r.w.ax++ ; al 2 ax 258 create r.b.al, a uint8 cell at offset 0 initialized with : r.w.ax mod 256 LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 29 / 47
34 A Semantics for C Semantics of Aggregates (cont.) Details of the Astrée C Semantcs Union r.w.ax = 258 ; if (r.b.al==2) r.b.al++ ; r.w.ax++ ; al 3 modify cell r.b.al destroy invalidated cell r.w.ax LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 29 / 47
35 Semantics of Pointers A Semantics for C Details of the Astrée C Semantcs Concrete semantics pointer = variable base + byte offset or NULL or invalid pointer (uninitialized or dangling) pointer arithmetics = offset arithmetics (in size_t, ptrdiff_t) impossible to jump from one variable to another only one type of pointers (cast = identity) Abstraction explicit set of bases for each variable (non relational) offsets as dimensions in numerical abstract domains (relations possibles between offsets and integers) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 30 / 47
36 A Semantics for C Memory and Pointer Errors Details of the Astrée C Semantcs Memory errors : dereference out of a variable block unaligned dereference dereference of NULL or invalid Pointer arithmetic errors : offset overflow size_t arithmetics on NULL or invalid -, comparison of pointers to different variables Inherent limitations cannot check proper use of unions no offset bound-check inside variables except array bound-checking : t[i] when the static type of t is of sized array (broken by type-punning) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 31 / 47
37 Unreachable Code A Semantics for C Details of the Astrée C Semantcs Astrée computes at each program point an over-approximation of the set of possible environments = indicates a necessarily unreachable location Embedded code guideline There shall be no unreachable code But Astrée cannot prove the absence of unreachable code! Confusion from some end-users : they still ask us to output necessarily unreachable code LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 32 / 47
38 Abstractions, Algorithms, Data-Structures Abstractions, Algorithms & Data-Structures LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 33 / 47
39 Abstractions, Algorithms, Data-Structures Syntax-Based Recursive Iterator Algorithms & Data-Structures Equational static analysis : write an equation system (one variable & equation per program point) solve it by global iterated solving (many algorithms and iteration ordering) Interpreter-based static analysis : start from the main function traverse the program recursively by induction on the syntax analyze both branches of tests, and merge iterate loops (with ) until stabilisation step into functions at calls (inlining, i.e., full context-sensitivity) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 34 / 47
40 Abstractions, Algorithms, Data-Structures Algorithms & Data-Structures Syntax-Based Recursive Iterator (cont.) A syntax-based iterator is a special case of general equational one. Advantages / drawbacks simple, predictable full context-sensitivity : biased towards precision at the cost of efficiency full context-sensitivity greatly simplifies the memory model (the set of live variables is exactly known) very memory efficient (minimizes the number of abstract elements kept in memory) can perform much recomputation (e.g., nested loops) (mitigated by cache techniques) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 35 / 47
41 Abstractions, Algorithms, Data-Structures Local Abstractions Algorithms & Data-Structures Some abstract domains are too costly : trace partitioning : exponential in the program size boolean decision trees : exponential in the number of booleans octagons : cubic in the number of variables Solution : use them locally on (possibly many) small variable packs over (possibly many) small code blocks = linear cost in the number of packs / blocks LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 36 / 47
42 Abstractions, Algorithms, Data-Structures Local Abstraction Heuristics Algorithms & Data-Structures Syntactic intra-procedural heuristics to choose local abstractions : pack variables used together linearly within a syntactic block ({ x=t ; if (...) { x=y+z ;...} }) partition multiple accesses to small arrays (x = a[i+1] - a[i] ;) partition assignments trailing after small loops (for (i=0 ; i<10 && x<=a[i] ; i++) ; y = (x-a[i])*b[i] + c[i]) ; ) etc. Does not influence the soundness, only the precision = we can use unsound static analyses here (e.g, dependency analysis that ignores aliases and calls) Simpler to improve heuristics than to design new domains! LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 37 / 47
43 Abstractions, Algorithms, Data-Structures Functional Maps with Sharing Algorithms & Data-Structures Main data-structure : functional maps as binary balanced trees maps cells / packs to abstract values maps offsets to overlapping cells, etc. Natural sharing e.g., in tests, maps in both branches have a common ancestor = memory efficient Binary operators with shortcut e.g., map2 f m1 m2 where f (x, x) = x (idempotent) sub-trees at the same address in m1 and m2 can be ignored = time efficient ( from O( Var 2 ) to O( Var log Var )) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 38 / 47
44 Abstractions, Algorithms, Data-Structures Algorithms & Data-Structures Expression Representations and Abstractions Several levels of expressions : full C expressions (from source code) static translation side-effect free expressions (fed to memory domain) dynamic translation dereference-free expressions (fed to pointer domain) dynamic translation numeric, pointer-free expressions (fed to numeric domains) optional dynamic translation interval affine expressions (used by some relational domains) Interval affine expressions : [a 0, b 0 ] + i [a i, b i ]X i semantics in Q (good for relational domains) affine easy to manipulate interval abstracts non-linearity as non-determinism (e.g., rounding error, non-linear integer operators) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 39 / 47
45 Abstractions, Algorithms, Data-Structures Reduction Network Algorithms & Data-Structures Problem : how to combine several abstract domains? Theoretical solution : optimal precision non-constructive algorithms may be very costly Practical solution : fully reduced product (algorithms need to be designed) a priori fully independent domains (most efficient) equip domains with communication channels so that they can query information from all domains broadcast information to all domains using a common language of predicates (orthogonal to abstract domain internal representations) easy to enrich and refine LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 40 / 47
46 Abstractions, Algorithms, Data-Structures Selected Abstract Domains Numerical Domain for Compute-Throw-Overflow Compute-through-overflow Int16 x,y,z ; x = (Int16) ((Uint16) y + (Uint16) z) ; Concrete semantics : modular casts of y and z map [ 32768, 1] to [32768, 65535] zero-extend each result to int perform an addition in int modular cast back to [ 32768, 32767] (possible overflow) (possible overflow) But it s a feature : avoids computations in unnecessary word lengths LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 41 / 47
47 Abstractions, Algorithms, Data-Structures Selected Abstract Domains Numerical Domain for Compute-Throw-Overflow Compute-through-overflow Int16 x,y,z ; x = (Int16) ((Uint16) y + (Uint16) z) ; Analysis result : overflow alarms on negative input : expected very imprecise output on some inputs (Uint16) [ 1, 0] = { 0, } abstracted as [0, 65535] in the interval domain LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 41 / 47
48 Abstractions, Algorithms, Data-Structures Selected Abstract Domains Numerical Domain for Compute-Throw-Overflow Compute-through-overflow Int16 x,y,z ; x = (Int16) (/*(Uint16)*/ y + /*(Uint16)*/ z) ; Quite unsatisfactory solution! LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 41 / 47
49 Abstractions, Algorithms, Data-Structures Selected Abstract Domains Numerical Domain for Compute-Throw-Overflow Compute-through-overflow Int16 x,y,z ; x = (Int16) ((Uint16) y + (Uint16) z) ; A better solution : add a new abstract domain modular intervals : [a, b] + cz reduced with standard intervals : [l, h] ([a, b] + cz) example : y, z [ 1, 0] (Uint16) [ 1, 0] abstracted as [0, 65635] ([ 1, 0] Z) [0, 65635] ([ 1, 0] Z)+[0, 65635] ([ 1, 0] Z) = [0, ] ([ 2, 0] Z) (no overflow) (Int16) ([0, ] ([ 2, 0] Z)) = [ 2, 0] LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 41 / 47
50 Abstractions, Algorithms, Data-Structures Selected Abstract Domains Predicate Domain For Bit-Level Float Manipulations A complex example int i; double d,d1,d2; unsigned *p1 = &d1, *p2 = &d2; p1[0] = p2[0] = 0x ; p1[1] = p2[1] = 0x ; p2[1] ^= i; d = d2 - d1;??? LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 42 / 47
51 Abstractions, Algorithms, Data-Structures Selected Abstract Domains Predicate Domain For Bit-Level Float Manipulations A complex example int i; double d,d1,d2; unsigned *p1 = &d1, *p2 = &d2; p1[0] = p2[0] = 0x ; p1[1] = p2[1] = 0x ; p2[1] ^= i; d = d2 - d1; Concrete semantics : (0x , 0x ) represents (0x , i^0x ) represents i d is i converted to double LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 42 / 47
52 Abstractions, Algorithms, Data-Structures Selected Abstract Domains Predicate Domain For Bit-Level Float Manipulations A complex example int i; double d,d1,d2; unsigned *p1 = &d1, *p2 = &d2; p1[0] = p2[0] = 0x ; p1[1] = p2[1] = 0x ; p2[1] ^= i; d = d2 - d1; Abstract analysis : materialization generates : di = dbl_of_int(pi[0],pi[1]) a special-purpose domain does the rest : pattern-matching and rewrite rules on expressions communicate with other domains (e.g., get intervals) maintain simple predicates (e.g., a = b ^ 0x , a = dbl of int(0x ,b)) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 42 / 47
53 Abstractions, Algorithms, Data-Structures Symbolic LValue Domain Selected Abstract Domains A costly example unsigned short i, a[65536] ; while (...) { i = get_index() ; /* returns [0,65535] */ if (a[i] < 100) a[i]++ ; } Naive, imprecise analysis : a[i]<100 is translated into (a[0]<100) (a[1]<100) (a[65535]<100) = no information a[i]++ causes an arithmetic overflow LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 43 / 47
54 Abstractions, Algorithms, Data-Structures Symbolic LValue Domain Selected Abstract Domains A costly example unsigned short i, a[65536] ; while (...) { i = get_index() ; /* returns [0,65535] */ if (a[i] < 100) a[i]++ ; } Precision improvement : partition the if statement wrt. to the value of i equivalent to : if (i==0) { if (a[0] < 100) a[0]++ ; }. if (i==65535) { if (a[65535] < 100) a[65535]++ ; } precise but costly (linear in array size) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 43 / 47
55 Abstractions, Algorithms, Data-Structures Symbolic LValue Domain Selected Abstract Domains A costly example unsigned short i, a[65536] ; while (...) { i = get_index() ; /* returns [0,65535] */ if (a[i] < 100) a[i]++ ; } Precise and efficient solution : domain to manipulate LValues symbolically : introduce symb = a[i] when a[i] is first read replace all read of a[i] with symb i.e., if (symb < 100) a[i] = symb + 1 ; ( a[i] 100) forget symb when a or i is modified use a single cell to represent x a[x] = cost independent from the size of a! (folding) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 43 / 47
56 Conclusion Conclusion LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 44 / 47
57 Summary Conclusion Achievement It is possible to build a static analyzer that is : efficient in time, memory, and development cost very precise on a given (infinite) class of programs Recipe start from a simple analyzer while there are false alarms find their cause, and either tune analysis parameters, or improve local abstraction heuristics, or improve some existing domain, or add some reduction between existing domains, or add a new domain LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 45 / 47
58 On-Going Work Conclusion scientific support of the industrialization by AbsInt (develop abstract domains required by new applications) analysis of parallel embedded real-time programs closed-loop analysis (software controller + environment model) automatic proof of the compilation to binary code (by translation validation) mechanized proof of the correction of Astrée (using theorem provers) LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 46 / 47
59 Conclusion A Few Lessons Learned defining the concrete semantics is hard! end-users want you to analyze their idiom of C and are very picky about what is an error and what is not be prepared to analyze contrived program bits (hacks, language abuse, broken design rules, etc.) an adapted response : design small ad hoc domains (semantical hacks) but keep it sound! (easy to achieve thanks to Abstract Interpretation) proving program correctness with semantic-based static analysis... still much work to do LFX June 6th, 2010 Astrée: Building a Real-Life Static Analyzer Antoine Miné p. 47 / 47
A Static Analyzer for Large Safety-Critical Software. Considered Programs and Semantics. Automatic Program Verification by Abstract Interpretation
PLDI 03 A Static Analyzer for Large Safety-Critical Software B. Blanchet, P. Cousot, R. Cousot, J. Feret L. Mauborgne, A. Miné, D. Monniaux,. Rival CNRS École normale supérieure École polytechnique Paris
Abstract Interpretation-based Static Analysis Tools:
Abstract Interpretation-based Static Analysis Tools: Proving the Absence of Runtime Errors and Safe Upper Bounds on the Worst-Case Execution Time and Safe Upper Bounds on the Stack Usage Christian Ferdinand
IKOS: A Framework for Static Analysis based on Abstract Interpretation (Tool Paper)
IKOS: A Framework for Static Analysis based on Abstract Interpretation (Tool Paper) Guillaume Brat, Jorge A. Navas, Nija Shi, and Arnaud Venet NASA Ames Research Center, Moffett Field, CA 94035 Abstract.
Comprehensive Static Analysis Using Polyspace Products. A Solution to Today s Embedded Software Verification Challenges WHITE PAPER
Comprehensive Static Analysis Using Polyspace Products A Solution to Today s Embedded Software Verification Challenges WHITE PAPER Introduction Verification of embedded software is a difficult task, made
Introduction to Static Analysis for Assurance
Introduction to Static Analysis for Assurance John Rushby Computer Science Laboratory SRI International Menlo Park CA USA John Rushby Static Analysis for Assurance: 1 Overview What is static analysis?
How To Develop A Static Analysis System For Large Programs
Towards the Industrial Scale Development of Custom Static Analyzers John Anton, Eric Bush, Allen Goldberg, Klaus Havelund, Doug Smith, Arnaud Venet Kestrel Technology LLC 4984 El Camino Real #230 Los Altos,
The programming language C. sws1 1
The programming language C sws1 1 The programming language C invented by Dennis Ritchie in early 1970s who used it to write the first Hello World program C was used to write UNIX Standardised as K&C (Kernighan
Static analysis of numerical programs
Sylvie Putot with Eric Goubault, Franck Védrine and Karim Tekkal (Digiteo) Laboratory for the Modelling and Analysis of Interacting Systems, CEA LIST RAIM 09: 3es Rencontres Arithmétique de l Informatique
ECE 0142 Computer Organization. Lecture 3 Floating Point Representations
ECE 0142 Computer Organization Lecture 3 Floating Point Representations 1 Floating-point arithmetic We often incur floating-point programming. Floating point greatly simplifies working with large (e.g.,
Informatica e Sistemi in Tempo Reale
Informatica e Sistemi in Tempo Reale Introduction to C programming Giuseppe Lipari http://retis.sssup.it/~lipari Scuola Superiore Sant Anna Pisa October 25, 2010 G. Lipari (Scuola Superiore Sant Anna)
The Course. http://www.cse.unsw.edu.au/~cs3153/
The Course http://www.cse.unsw.edu.au/~cs3153/ Lecturers Dr Peter Höfner NICTA L5 building Prof Rob van Glabbeek NICTA L5 building Dr Ralf Huuck NICTA ATP building 2 Plan/Schedule (1) Where and When Tuesday,
Static Program Transformations for Efficient Software Model Checking
Static Program Transformations for Efficient Software Model Checking Shobha Vasudevan Jacob Abraham The University of Texas at Austin Dependable Systems Large and complex systems Software faults are major
Sources: On the Web: Slides will be available on:
C programming Introduction The basics of algorithms Structure of a C code, compilation step Constant, variable type, variable scope Expression and operators: assignment, arithmetic operators, comparison,
DNA Data and Program Representation. Alexandre David 1.2.05 [email protected]
DNA Data and Program Representation Alexandre David 1.2.05 [email protected] Introduction Very important to understand how data is represented. operations limits precision Digital logic built on 2-valued
Static Analysis. Find the Bug! 15-654: Analysis of Software Artifacts. Jonathan Aldrich. disable interrupts. ERROR: returning with interrupts disabled
Static Analysis 15-654: Analysis of Software Artifacts Jonathan Aldrich 1 Find the Bug! Source: Engler et al., Checking System Rules Using System-Specific, Programmer-Written Compiler Extensions, OSDI
Programming languages C
INTERNATIONAL STANDARD ISO/IEC 9899:1999 TECHNICAL CORRIGENDUM 2 Published 2004-11-15 INTERNATIONAL ORGANIZATION FOR STANDARDIZATION МЕЖДУНАРОДНАЯ ОРГАНИЗАЦИЯ ПО СТАНДАРТИЗАЦИИ ORGANISATION INTERNATIONALE
Static Analysis of Dynamic Properties - Automatic Program Verification to Prove the Absence of Dynamic Runtime Errors
Static Analysis of Dynamic Properties - Automatic Program Verification to Prove the Absence of Dynamic Runtime Errors Klaus Wissing PolySpace Technologies GmbH Argelsrieder Feld 22 82234 Wessling-Oberpfaffenhofen
THE NUMBER OF REPRESENTATIONS OF n OF THE FORM n = x 2 2 y, x > 0, y 0
THE NUMBER OF REPRESENTATIONS OF n OF THE FORM n = x 2 2 y, x > 0, y 0 RICHARD J. MATHAR Abstract. We count solutions to the Ramanujan-Nagell equation 2 y +n = x 2 for fixed positive n. The computational
Object Oriented Software Design
Object Oriented Software Design Introduction to Java - II Giuseppe Lipari http://retis.sssup.it/~lipari Scuola Superiore Sant Anna Pisa September 14, 2011 G. Lipari (Scuola Superiore Sant Anna) Introduction
Introducing Formal Methods. Software Engineering and Formal Methods
Introducing Formal Methods Formal Methods for Software Specification and Analysis: An Overview 1 Software Engineering and Formal Methods Every Software engineering methodology is based on a recommended
A Formally-Verified C Static Analyzer
A Formally-Verified C Static Analyzer Jacques-Henri Jourdan Inria Paris-Rocquencourt [email protected] Vincent Laporte IRISA and U. Rennes 1 [email protected] Sandrine Blazy IRISA and
Computer Programming I
Computer Programming I COP 2210 Syllabus Spring Semester 2012 Instructor: Greg Shaw Office: ECS 313 (Engineering and Computer Science Bldg) Office Hours: Tuesday: 2:50 4:50, 7:45 8:30 Thursday: 2:50 4:50,
AUTOMATED TEST GENERATION FOR SOFTWARE COMPONENTS
TKK Reports in Information and Computer Science Espoo 2009 TKK-ICS-R26 AUTOMATED TEST GENERATION FOR SOFTWARE COMPONENTS Kari Kähkönen ABTEKNILLINEN KORKEAKOULU TEKNISKA HÖGSKOLAN HELSINKI UNIVERSITY OF
Software Verification: Infinite-State Model Checking and Static Program
Software Verification: Infinite-State Model Checking and Static Program Analysis Dagstuhl Seminar 06081 February 19 24, 2006 Parosh Abdulla 1, Ahmed Bouajjani 2, and Markus Müller-Olm 3 1 Uppsala Universitet,
InvGen: An Efficient Invariant Generator
InvGen: An Efficient Invariant Generator Ashutosh Gupta and Andrey Rybalchenko Max Planck Institute for Software Systems (MPI-SWS) Abstract. In this paper we present InvGen, an automatic linear arithmetic
Elemental functions: Writing data-parallel code in C/C++ using Intel Cilk Plus
Elemental functions: Writing data-parallel code in C/C++ using Intel Cilk Plus A simple C/C++ language extension construct for data parallel operations Robert Geva [email protected] Introduction Intel
Chair of Software Engineering. Software Verification. Assertion Inference. Carlo A. Furia
Chair of Software Engineering Software Verification Assertion Inference Carlo A. Furia Proving Programs Automatically The Program Verification problem: Given: a program P and a specification S = [Pre,
Rigorous Software Development CSCI-GA 3033-009
Rigorous Software Development CSCI-GA 3033-009 Instructor: Thomas Wies Spring 2013 Lecture 11 Semantics of Programming Languages Denotational Semantics Meaning of a program is defined as the mathematical
Boolean Expressions, Conditions, Loops, and Enumerations. Precedence Rules (from highest to lowest priority)
Boolean Expressions, Conditions, Loops, and Enumerations Relational Operators == // true if two values are equivalent!= // true if two values are not equivalent < // true if left value is less than the
The C Programming Language course syllabus associate level
TECHNOLOGIES The C Programming Language course syllabus associate level Course description The course fully covers the basics of programming in the C programming language and demonstrates fundamental programming
CIS570 Modern Programming Language Implementation. Office hours: TDB 605 Levine [email protected]. [email protected].
CIS570 Modern Programming Language Implementation Instructor: Admin. Assistant: URL: E Christopher Lewis Office hours: TDB 605 Levine [email protected] Cheryl Hickey [email protected] 502
Standard for Software Component Testing
Standard for Software Component Testing Working Draft 3.4 Date: 27 April 2001 produced by the British Computer Society Specialist Interest Group in Software Testing (BCS SIGIST) Copyright Notice This document
NEON. Support in Compilation Tools. Development Article. Copyright 2009 ARM Limited. All rights reserved. DHT 0004A (ID081609)
NEON Support in Compilation Tools Development Article Copyright 2009 ARM Limited. All rights reserved. DHT 0004A () NEON Support in Compilation Tools Development Article Copyright 2009 ARM Limited. All
Static Taint-Analysis on Binary Executables
Static Taint-Analysis on Binary Executables Sanjay Rawat, Laurent Mounier, Marie-Laure Potet VERIMAG University of Grenoble October 2011 Static Taint-Analysis on Binary Executables 1/29 Outline 1 Introduction
Pemrograman Dasar. Basic Elements Of Java
Pemrograman Dasar Basic Elements Of Java Compiling and Running a Java Application 2 Portable Java Application 3 Java Platform Platform: hardware or software environment in which a program runs. Oracle
Object Oriented Software Design
Object Oriented Software Design Introduction to Java - II Giuseppe Lipari http://retis.sssup.it/~lipari Scuola Superiore Sant Anna Pisa October 28, 2010 G. Lipari (Scuola Superiore Sant Anna) Introduction
Software Testing & Analysis (F22ST3): Static Analysis Techniques 2. Andrew Ireland
Software Testing & Analysis (F22ST3) Static Analysis Techniques Andrew Ireland School of Mathematical and Computer Science Heriot-Watt University Edinburgh Software Testing & Analysis (F22ST3): Static
Static analysis: from theory to practice
Static analysis: from theory to practice David Monniaux CNRS / VERIMAG A joint laboratory of CNRS, Université Joseph Fourier (Grenoble) and Grenoble-INP. 19 juin 2009 David Monniaux (VERIMAG) Static analysis:
Habanero Extreme Scale Software Research Project
Habanero Extreme Scale Software Research Project Comp215: Java Method Dispatch Zoran Budimlić (Rice University) Always remember that you are absolutely unique. Just like everyone else. - Margaret Mead
Data Structure with C
Subject: Data Structure with C Topic : Tree Tree A tree is a set of nodes that either:is empty or has a designated node, called the root, from which hierarchically descend zero or more subtrees, which
Factoring & Primality
Factoring & Primality Lecturer: Dimitris Papadopoulos In this lecture we will discuss the problem of integer factorization and primality testing, two problems that have been the focus of a great amount
Varieties of Static Analyzers: A Comparison with ASTRÉE
Varieties of Static Analyzers: A Comparison with ASTRÉE Patrick COUSOT 1, Radhia COUSOT 2, Jérôme FERET 1, Antoine MINÉ 1, Laurent MAUBORGNE 1, David MONNIAUX 3, Xavier RIVAL 1 Abstract We discuss the
[Refer Slide Time: 05:10]
Principles of Programming Languages Prof: S. Arun Kumar Department of Computer Science and Engineering Indian Institute of Technology Delhi Lecture no 7 Lecture Title: Syntactic Classes Welcome to lecture
Glossary of Object Oriented Terms
Appendix E Glossary of Object Oriented Terms abstract class: A class primarily intended to define an instance, but can not be instantiated without additional methods. abstract data type: An abstraction
Integer Factorization using the Quadratic Sieve
Integer Factorization using the Quadratic Sieve Chad Seibert* Division of Science and Mathematics University of Minnesota, Morris Morris, MN 56567 [email protected] March 16, 2011 Abstract We give
Regression Verification: Status Report
Regression Verification: Status Report Presentation by Dennis Felsing within the Projektgruppe Formale Methoden der Softwareentwicklung 2013-12-11 1/22 Introduction How to prevent regressions in software
Solution of Linear Systems
Chapter 3 Solution of Linear Systems In this chapter we study algorithms for possibly the most commonly occurring problem in scientific computing, the solution of linear systems of equations. We start
APPROACHES TO SOFTWARE TESTING PROGRAM VERIFICATION AND VALIDATION
1 APPROACHES TO SOFTWARE TESTING PROGRAM VERIFICATION AND VALIDATION Validation: Are we building the right product? Does program meet expectations of user? Verification: Are we building the product right?
1) The postfix expression for the infix expression A+B*(C+D)/F+D*E is ABCD+*F/DE*++
Answer the following 1) The postfix expression for the infix expression A+B*(C+D)/F+D*E is ABCD+*F/DE*++ 2) Which data structure is needed to convert infix notations to postfix notations? Stack 3) The
Why? A central concept in Computer Science. Algorithms are ubiquitous.
Analysis of Algorithms: A Brief Introduction Why? A central concept in Computer Science. Algorithms are ubiquitous. Using the Internet (sending email, transferring files, use of search engines, online
µz An Efficient Engine for Fixed points with Constraints
µz An Efficient Engine for Fixed points with Constraints Kryštof Hoder, Nikolaj Bjørner, and Leonardo de Moura Manchester University and Microsoft Research Abstract. The µz tool is a scalable, efficient
Bachelor of Games and Virtual Worlds (Programming) Subject and Course Summaries
First Semester Development 1A On completion of this subject students will be able to apply basic programming and problem solving skills in a 3 rd generation object-oriented programming language (such as
Software testing. Objectives
Software testing cmsc435-1 Objectives To discuss the distinctions between validation testing and defect testing To describe the principles of system and component testing To describe strategies for generating
Embedded Systems. Review of ANSI C Topics. A Review of ANSI C and Considerations for Embedded C Programming. Basic features of C
Embedded Systems A Review of ANSI C and Considerations for Embedded C Programming Dr. Jeff Jackson Lecture 2-1 Review of ANSI C Topics Basic features of C C fundamentals Basic data types Expressions Selection
TD 271 Rev.1 (PLEN/15)
INTERNATIONAL TELECOMMUNICATION UNION STUDY GROUP 15 TELECOMMUNICATION STANDARDIZATION SECTOR STUDY PERIOD 2009-2012 English only Original: English Question(s): 12/15 Geneva, 31 May - 11 June 2010 Source:
CHAPTER 5 Round-off errors
CHAPTER 5 Round-off errors In the two previous chapters we have seen how numbers can be represented in the binary numeral system and how this is the basis for representing numbers in computers. Since any
Chapter 13: Query Processing. Basic Steps in Query Processing
Chapter 13: Query Processing! Overview! Measures of Query Cost! Selection Operation! Sorting! Join Operation! Other Operations! Evaluation of Expressions 13.1 Basic Steps in Query Processing 1. Parsing
1 External Model Access
1 External Model Access Function List The EMA package contains the following functions. Ema_Init() on page MFA-1-110 Ema_Model_Attr_Add() on page MFA-1-114 Ema_Model_Attr_Get() on page MFA-1-115 Ema_Model_Attr_Nth()
Model Checking: An Introduction
Announcements Model Checking: An Introduction Meeting 2 Office hours M 1:30pm-2:30pm W 5:30pm-6:30pm (after class) and by appointment ECOT 621 Moodle problems? Fundamentals of Programming Languages CSCI
Numerical Matrix Analysis
Numerical Matrix Analysis Lecture Notes #10 Conditioning and / Peter Blomgren, [email protected] Department of Mathematics and Statistics Dynamical Systems Group Computational Sciences Research
2) Write in detail the issues in the design of code generator.
COMPUTER SCIENCE AND ENGINEERING VI SEM CSE Principles of Compiler Design Unit-IV Question and answers UNIT IV CODE GENERATION 9 Issues in the design of code generator The target machine Runtime Storage
Address Taken FIAlias, which is equivalent to Steensgaard. CS553 Lecture Alias Analysis II 2
Alias Analysis Last time Alias analysis I (pointer analysis) Address Taken FIAlias, which is equivalent to Steensgaard Today Alias analysis II (pointer analysis) Anderson Emami Next time Midterm review
Semantic Analysis: Types and Type Checking
Semantic Analysis Semantic Analysis: Types and Type Checking CS 471 October 10, 2007 Source code Lexical Analysis tokens Syntactic Analysis AST Semantic Analysis AST Intermediate Code Gen lexical errors
CSE373: Data Structures and Algorithms Lecture 3: Math Review; Algorithm Analysis. Linda Shapiro Winter 2015
CSE373: Data Structures and Algorithms Lecture 3: Math Review; Algorithm Analysis Linda Shapiro Today Registration should be done. Homework 1 due 11:59 pm next Wednesday, January 14 Review math essential
MPLAB TM C30 Managed PSV Pointers. Beta support included with MPLAB C30 V3.00
MPLAB TM C30 Managed PSV Pointers Beta support included with MPLAB C30 V3.00 Contents 1 Overview 2 1.1 Why Beta?.............................. 2 1.2 Other Sources of Reference..................... 2 2
A Catalogue of the Steiner Triple Systems of Order 19
A Catalogue of the Steiner Triple Systems of Order 19 Petteri Kaski 1, Patric R. J. Östergård 2, Olli Pottonen 2, and Lasse Kiviluoto 3 1 Helsinki Institute for Information Technology HIIT University of
Module: Software Instruction Scheduling Part I
Module: Software Instruction Scheduling Part I Sudhakar Yalamanchili, Georgia Institute of Technology Reading for this Module Loop Unrolling and Instruction Scheduling Section 2.2 Dependence Analysis Section
Frama-C s value analysis plug-in
Value Analysis Frama-C s value analysis plug-in Aluminium-20160501 Pascal Cuoq and Boris Yakobowski with Matthieu Lemerre, André Maroneze, Valentin Perrelle and Virgile Prevosto CEA LIST, Software Reliability
How To Write Portable Programs In C
Writing Portable Programs COS 217 1 Goals of Today s Class Writing portable programs in C Sources of heterogeneity Data types, evaluation order, byte order, char set, Reading period and final exam Important
FACTORING POLYNOMIALS IN THE RING OF FORMAL POWER SERIES OVER Z
FACTORING POLYNOMIALS IN THE RING OF FORMAL POWER SERIES OVER Z DANIEL BIRMAJER, JUAN B GIL, AND MICHAEL WEINER Abstract We consider polynomials with integer coefficients and discuss their factorization
Oracle Solaris Studio Code Analyzer
Oracle Solaris Studio Code Analyzer The Oracle Solaris Studio Code Analyzer ensures application reliability and security by detecting application vulnerabilities, including memory leaks and memory access
An Introduction to Computer Science and Computer Organization Comp 150 Fall 2008
An Introduction to Computer Science and Computer Organization Comp 150 Fall 2008 Computer Science the study of algorithms, including Their formal and mathematical properties Their hardware realizations
RN-Codings: New Insights and Some Applications
RN-Codings: New Insights and Some Applications Abstract During any composite computation there is a constant need for rounding intermediate results before they can participate in further processing. Recently
JavaScript: Control Statements I
1 7 JavaScript: Control Statements I 7.1 Introduction 2 The techniques you will learn here are applicable to most high-level languages, including JavaScript 1 7.2 Algorithms 3 Any computable problem can
Fast Arithmetic Coding (FastAC) Implementations
Fast Arithmetic Coding (FastAC) Implementations Amir Said 1 Introduction This document describes our fast implementations of arithmetic coding, which achieve optimal compression and higher throughput by
The Union-Find Problem Kruskal s algorithm for finding an MST presented us with a problem in data-structure design. As we looked at each edge,
The Union-Find Problem Kruskal s algorithm for finding an MST presented us with a problem in data-structure design. As we looked at each edge, cheapest first, we had to determine whether its two endpoints
Certification of a Scade 6 compiler
Certification of a Scade 6 compiler F-X Fornari Esterel Technologies 1 Introduction Topic : What does mean developping a certified software? In particular, using embedded sofware development rules! What
A Brief Introduction to Static Analysis
A Brief Introduction to Static Analysis Sam Blackshear March 13, 2012 Outline A theoretical problem and how to ignore it An example static analysis What is static analysis used for? Commercial successes
Cost Model: Work, Span and Parallelism. 1 The RAM model for sequential computation:
CSE341T 08/31/2015 Lecture 3 Cost Model: Work, Span and Parallelism In this lecture, we will look at how one analyze a parallel program written using Cilk Plus. When we analyze the cost of an algorithm
System modeling. Budapest University of Technology and Economics Department of Measurement and Information Systems
System modeling Business process modeling how to do it right Partially based on Process Anti-Patterns: How to Avoid the Common Traps of Business Process Modeling, J Koehler, J Vanhatalo, IBM Zürich, 2007.
This Unit: Floating Point Arithmetic. CIS 371 Computer Organization and Design. Readings. Floating Point (FP) Numbers
This Unit: Floating Point Arithmetic CIS 371 Computer Organization and Design Unit 7: Floating Point App App App System software Mem CPU I/O Formats Precision and range IEEE 754 standard Operations Addition
