Statically Checking API Protocol Conformance with Mined Multi-Object Specifications Companion Report
|
|
|
- Iris Hood
- 9 years ago
- Views:
Transcription
1 Statically Checking API Protocol Conformance with Mined Multi-Object Specifications Companion Report Michael Pradel 1, Ciera Jaspan 2, Jonathan Aldrich 2, and Thomas R. Gross 1 1 Department of Computer Science, ETH Zurich 2 Institute for Software Research, Carnegie Mellon University Technical Report #752 ETH Zurich, Department of Computer Science March 2012
2 Statically Checking API Protocol Conformance with Mined Multi-Object Specifications Companion Report Michael Pradel Department of Computer Science ETH Zurich, Switzerland Ciera Jaspan Jonathan Aldrich Institute for Software Research Carnegie Mellon University Thomas R. Gross Department of Computer Science ETH Zurich, Switzerland Abstract This technical report provides additional details for the paper entitled Statically Checking API Protocol Conformance with Mined Multi-Object Specifications [1]. We formally describe how to translate API usage protocols represented as finite state machines into a relationship-based specification language. I. INTRODUCTION Programmers using an API often must follow protocols that specify when it is legal to call particular methods. Several techniques have been proposed to find violations of such protocols based on mined specifications. However, existing techniques either focus on single-object protocols or on particular kinds of bugs, such as missing method calls. There is no practical technique to find multi-object protocol bugs without a priori known specifications. In [1], we combine a dynamic analysis that infers multiobject protocols and a static checker of API usage constraints into a fully automatic protocol conformance checker. The combined system statically detects illegal uses of an API without human-written specifications. Our approach finds 41 bugs and code smells in mature, real-world Java programs with a true positive rate of 51%. Furthermore, we show that the analysis reveals bugs not found by state of the art approaches. This companion report provides a more detailed description of translating multi-object protocols into relationshipbased specifications. Furthermore, we list all issues reported by the analysis to allow others to compare to our results. II. BACKGROUND Our approach uses a dynamic specification miner and a static checker to respectively produce and check specifications of multi-object protocols. Both analyses divide a protocol into two parts. The first part determines the applicability of a protocol, and the second part describes the constraints imposed by the protocol. A. Specification Mining and API Usage Protocols We use a dynamic specification miner that extracts API usage protocols from training programs [2], [3]. Any existing API client can serve as a training program. A protocol consists of a deterministic finite state machine and a set of typed protocol parameters. States represent the common state of multiple objects or, for single-object protocols, the state of a single object. Transitions are labeled with method signatures that are annotated with protocol parameters naming the receiver, the method parameters and the return value. Definition 1 (API usage protocol). An API usage protocol P = (M, P ) consists of a deterministic finite state machine M and a finite set of typed protocol parameters P. M is a tuple (S, Σ, δ, s 0, S f ) of states S, the alphabet Σ, transitions δ, the initial state s 0 S, and final states S f S. A transition is a triple from S Σ S, which defines the source state, the label, and the destination state of the transition. The alphabet Σ consists of method signatures that are annotated with protocol parameters naming the receiver, and optionally, the method parameters and the return value. The mined protocols distinguish two kinds of states: setup states and liable states. The setup states establish which objects interact in the protocol by binding objects to protocol parameters. The liable states describe constraints on method calls that a programmer ought to respect. The miner constructs protocols in such a way that the set of parameters bound at a state is unambiguous. States at which all parameters are bound are liable states; all other states are setup states. Figure 2 shows an API usage protocol describing the interplay of a collection c and an iterator i. The protocol specifies how to use the iterator (call hasnext() before next()) and that updating the collection invalidates the iterator. Calling the method iterator() on c, which returns i, establishes the interaction between these two objects. Therefore, the later states (3, 4, and 5) are all liable states. The table in Figure 2 gives the set of bound protocol parameters for each state. Since we presented the protocol miner in [2], [3], it has evolved in several respects: First, we now create a single protocol per set of interacting types, so that, for example, a single protocol describes all constraints of the interplay
3 between a collection and an iterator. Second, we use a heuristic to generalize protocols that contain overloaded methods. If calling an overloaded method is allowed at a particular state, then the protocol also allows calling other methods with the same name and the same number of parameters at this state. Third, we add a heuristic that allows calling pure methods at every state. We consider a method to be pure if the method does not change the state of any object and if the method does not throw any exception. Finally, we configure the protocol miner to ignore all calls to Object and String, because these calls occur very frequently in Java programs and dilute the protocols of other types. B. Relationship-based Static Checking This work uses Fusion [4], a relationship-based, static analysis, to check API clients against specifications over multiple objects. Fusion encodes usage constraints based on relationships between objects. A relationship is a userdefined, uninterpreted predicate across objects. For example, a binary relationship r contains (List, Element) can express that an object of type List contains another object of type Element, such as r contains (list, element). If a relationship predicate is true, we say that the objects are in the relationship. Likewise, to say that the objects are not in a relationship means that the relationship predicate evaluates to false. In Fusion, API methods are specified with requirements and effects. 1 A requirement is a logical proposition over relationship predicates that describes a precondition on a method. For example, list.remove(element) may require that r contains (list, element) holds. An effect is a postcondition that describes how the truth of relationship predicates changes after calling a method. For instance, list.remove(element) may have the effect to remove (list, element) from r contains. Both requirements and effects are guarded by a trigger, a logical proposition that describes when the requirement or effect applies. Definition 2 (Effect constraint). An effect constraint on a method is a tuple (m, g, e), where m is the method to constrain, g is the trigger, and e is the set of changes to make to the state of the relationships. Definition 3 (Requirement constraint). A requirement constraint on a method is a tuple (m, g, q), where m is the method to constrain, g is the trigger, and q is the requirement for the method. A complete specification of a protocol in Fusion is a set of relationships, a set of effect constraints, and a set of requirement constraints on the relevant methods. Definition 4 (Fusion specification of a protocol). A Fusion specification of a protocol can be described as F = 1 We omit parts of Fusion not relevant for this work. 1 Collection c =... 2 Iterator i = c.iterator(); 3 if (i.hasnext()) 4 System.out.println(i.next()); 5 /* current state unknown */ 6 c.update(); // legal -- invalidates iterator 7 if (i.hasnext()) // bug: iterator not valid anymore 8 System.out.println(i.next()); Figure 1: The state in line 5 cannot be determined because different paths lead to it. (R, E, Q), where R is a set of relationships, E is a set of effect constraints, and Q is a set of requirement constraints. Based on specifications of API methods, Fusion performs an intraprocedural analysis of API clients to check whether they respect the usage constraints. For each call to a method with a specification, the analysis checks whether all triggered requirements are fulfilled and applies all triggered effects. We use a complete variant of Fusion, which guarantees that any bug found will actually occur dynamically. III. TRANSLATING MINED PROTOCOLS INTO RELATIONSHIP-BASED SPECIFICATIONS In the following, we describe how to combine protocol mining and relationship-based static checking by translating mined protocols into checkable specifications. We first discuss the main challenges for combining two formalisms like these in Section III-A. Then, Section III-B provides a high-level overview of the translation, followed by a more detailed description in Section III-C. Finally, Section III-D discusses how our approach addresses the challenges. A. Challenges We must deal with two main challenges, the first being common to all static analyses and the second being specific to multi-object checking: 1) Limited static knowledge: Static analysis inherently lacks precise knowledge about which program path is taken and as a result may miss bugs or report false positives. For example, Figure 1 shows a piece of source code where static analysis cannot determine the protocol state in line 5. After the call to hasnext, the protocol is known to be at state 4. The branch creates two paths, one path on which next() is called, leading back to state 3, and another path on which we stay at state 4. Because static analysis cannot determine which path is taken, the state in line 5 is unknown. Our combined analysis should nevertheless find the call in line 6 to be legal and detect the protocol violation in line 7. 2) Object interactions: Checking multi-object protocols is challenging, because calling a method on one object can influence the state of other objects. For example, the call to update() in line 6 does not refer to the iterator i, but directly affects its state. This dependence is implicit in mined
4 P CI with P = {Collection c, Iterator i} c = new i = 1 Collection() 2 c.iterator() 3 Bound protocol parameters: c.update() i.hasnext() 4 i.hasnext() c.update() i.next() 5 c.update() c.update() s bound(s) {} {c} {c, i} {c, i} {c, i} Figure 2: Protocol describing how to use a collection and an iterator. A label p = m() means that the object returned by m() is bound to protocol parameter p. The call c.update() summarizes calls that may change the collection s content, for example, c.add() or c.remove(). Liable states have a gray background. multi-object protocols, where a state is the common state of all involved objects. B. Overview of the Translation Given a set of protocols, how can we generate relationship-based specifications in a way that addresses the above challenges? We use relationships to reason about three aspects of objects with respect to a protocol: 1) We keep track of whether calling a method is allowed with a method relationship. This is a unary relationship for a method of the protocol. If an object is in a method relationship, it means that one can legally call the corresponding method on this object. The protocol in Figure 2 has four method relationships: r next (Iterator) r hasnext (Iterator) r update (Collection) r iterator (Collection) There is no method relationship for constructor calls because a newly created object cannot be in any relationship before the constructor call. 2) We keep track of the current state of an object or a set of objects with state relationships. The semantics of a state relationship is that if an object or a set of objects is in this relationship, we know these objects to be at the corresponding state. The state relationship is over all objects that are bound at that state. The states of the protocol in Figure 2 translate into four Protocol effects of calling i = c.iterator() Effects on relationships Move to state 3. Set r 3 (c, i) to true; set r 2 (c), r 4 (c, i), and r 5 (c, i) to false. Enable methods i.hasnext() and c.update(); disable methods i.next() and c.iterator(). Establish the interaction between c and i. Set r hasnext (i) and r update (c) to true; set r next(i) and r iterator (c) to false. Set r PCI (c, i) to true. Table I: Example of effects applied when calling iterator(). state relationships: r 2 (Collection) r 3 (Collection, Iterator) r 4 (Collection, Iterator) r 5 (Collection, Iterator) There is no state relationship for the initial state because no variables are bound at this state. 3) We keep track of which objects interact as described by a multi-object protocol, that is, which objects are in the protocol. For this purpose, we create a protocol relationship over all protocol parameters. The semantics of the protocol relationship is that if a set of objects is in this relationship, we know these objects to interact with each other in the protocol. For example, we create a binary relationship r PCI (Collection, Iterator) for the two-object protocol P CI. The Fusion analysis uses relationships as data structures to describe the overall state of a protocol and to determine whether a method call is legal. Each method call in a program will be checked against the method s requirement constraints to ensure that the call is legal. Furthermore, each method call can change the state of the relationships according to the method s effect constraints. The overall approach is to use the method relationships to determine whether a method call is allowed. The protocol relationship and the state relationships are used to determine whether the protocol is at a liable state and which effects to make. 1) Making effects: Calling a method can have effects on the current state, on the currently enabled and disabled methods, and on the binding of objects to protocols. We create specifications that reflect these effects by adapting the corresponding relationships. For example, calling i = c.iterator() as described by the protocol in Figure 2 influences the state maintained by the analysis as shown in Table I. Knowing that a particular method is called may not be sufficient to determine which effects to apply and which re-
5 Symbol Meaning P Protocol (M, P ) M Finite state machine (S, Σ, δ, s 0, S f ) P, p Set of protocol parameters, protocol parameter S, s, t Set of states, states Σ, m Alphabet, method signature (m Σ) δ Transitions (δ : S Σ S) F Fusion specification of a protocol (R, E, Q) R, r Set of relationships, relationship E Set of effect constraints (m, g, e) Q Set of requirement constraints (m, g, q) g Trigger (relationship predicate) e Effects (setting relationships to true and false) q Requirement (relationship predicate) Table II: Reference of symbols used in this paper. quirements to check. The reason is that a single method can label multiple transitions. For example, calling c.update() at state 2 (leading again to state 2) has different effects than calling the same method at state 3 (leading to state 5). We handle this problem by guarding effects with triggers on state relationships. In the example for c.update(), the translation creates two constraints in Fusion, one triggered by r 2 (c) and the other triggered by r 3 (c, i). 2) Checking requirements for method calls: To check whether calling a method is legal, we require that the receiver is in the corresponding method relationship. For example, to call i.next(), we require that r next (i) is true. The requirements imposed by a protocol are only valid if the current state is a liable state. Therefore, we guard requirements with the protocol relationship, ensuring that the involved objects interact in the protocol and that the protocol is in a liable state. For example, the requirement on calling i.next() is guarded by r PCI (c, i). This can be thought of as a logical precondition of the form: C. Formalization c. (r PCI (c, i) = r next (i)) This section provides a more detailed, formal description of how to translate a finite state machine representation of a multi-object protocol into a logical predicate representation suitable for Fusion. Table II lists all symbols we use in this section along with their meaning. The translation uses two functions: Definition 5 (Enabled : S 2 Σ ). The Enabled(s) function returns all the methods that are legal to call at state s. That is, Enabled(s) = {m m Σ t. (s, m, t) δ}. Definition 6 (Disabled : S 2 Σ ). The Disabled(s) function returns all the methods that are illegal to call at state s. That is, Disabled(s) = {m m Σ t. (s, m, t) δ}. We use the following abbreviated notation for relationships by making the objects implicit: A protocol relationship r P means r P (p 1,.., p P ), where p 1,.., p P are the protocol parameters P of protocol P. A state relationship r s means r s (p 1,.., p bound(s) ), where p 1,.., p bound(s) are the protocol parameters bound(s). A method relationship r m means r m (p), where p is the receiver of m. We denote the effect to set a relationship to true as +r and the effect to set a relationship to false as r. Having defined the above helper functions and our notation, we can now give a formal, declarative description of how to translate a protocol P = (M, P ) into a Fusion specification F = (R, E, Q). The translation consists of three steps. First, the translation creates relationships R that represent states, methods, and the protocol itself, as described in Section III-B. Second, the translation creates a set of effect constraints E for each method occurring in the protocol. These constraints control how calling a method influences the state of relationships. Third, the translation creates a set of requirement constraints Q, which specify preconditions for calling methods. The following describes creating effect constraints and requirement constraints, and illustrates the translation on the protocol in Figure 2. 1) Effect constraints with known state.: The translation creates effect constraints that represent the effects that occur when taking transitions. For each transition (s, m, t) δ, there will be an effect constraint (m, g, e) E where true if s = s 0 g = r s r P if s is a liable state r s if s is a setup state e = +r t ( r s ) ( +r m ) ( s S\{t} m Disabled(t) m Enabled(t) r m ) e P +r P if m combines the protocol where e P = parameters none otherwise In the example, there are four transitions labeled with c.update(), which produce the four effect constraints labeled with in Figure 3a. Notice that e contains three kinds of effects. First, we set the state relationship r t of the destination state t to true and set state relationships of all other states to false. Second, we enable all methods that can be legally called at the target state t and disable all other methods. Finally, if m combines protocol parameters, we set the protocol relationship to true for these objects to establish that these objects interact as described by the protocol. The effect constraints are triggered by g in one of three ways. If s is the initial state, the trigger must be true since there is no prior knowledge for this protocol. If s is a setup
6 state, the trigger is the state relationship r s. Finally, if s is a liable state, the trigger is r s r P to ensure that the effect only occurs when the current state of the protocol is liable. 2) Effect constraint with unknown state.: The Fusion analysis is a dataflow analysis and can lose precision after merging paths with different state information. Therefore, the translation must also handle the case where a method call within a protocol occurs while we have no information about the current state. To deal with this case, the translation makes an effect constraint for each method. This constraint considers all possible states at which we can be based on the available knowledge. Let S t (m) be the set of target states of m, where S t (m) = {t s. (s, m, t) δ s is a liable state}. For each m Σ, there will be an effect constraint (m, g, e) E where g = r P e = e state ( +r m ) ( m AlwaysEnabled m AlwaysDisabled r m ) where { rt if S e state = t = {t} none otherwise AlwaysEnabled = Enabled(t ) t S t AlwaysDisabled = Disabled(t ) t S t In the example, c.update() produces the effect constraint labeled with in Figure 3a. To ensure that the involved objects are indeed interacting in the protocol whenever the effect applies, the translation guards the effect with a trigger on the protocol relationship. However, since the current state is unknown, the translation applies all effects of calling m that are independent of which transition labeled with m is taken. In the trivial case, where m labels a single transition in P, the effects are the same as the state-dependent effects described in Section III-C1. Triggers of effect constraints have two purposes. First, triggers guard effects to apply them only if the effects are applicable. For example, we check state relationships to distinguish between the same method call from different states. Second, triggers make objects visible in the scope of a constraint. For example, if a transition leads from a state where two objects are bound to another state where two objects are bound, we want to update the state relationship for both objects. However, the call may expose only one object (the receiver), leaving the other object invisible. This is the case for calls to c.update(), where we must update the relationships on both the collection and any associated iterators. By guarding the effect with a trigger over r PCI (c, i), the iterator becomes bound and the analysis can apply effects on all necessary relationships. All effect constraints for the example are summarized in Figure 3a. Each line of the table shows one effect constraint with its method, its trigger, and its effects. While some generated constraints are logically included in others and can be omitted without influencing the results of the static analysis, this is not true in general, so the translation generates all effects as described here. Requirement constraints.: The requirement constraints that control when a method can be called are very simple: For each m Σ, the translation creates a single requirement constraint (m, g, q) in Q, where g = r P and q = r m. That is, we specify that for calling m, the receiver of m must be in m s method relationship. Figure 3b lists the requirement constraints we generate for the example. D. Meeting the Challenges Our revised approach meets the challenges mentioned in Section III-A. We deal with limited static knowledge by maintaining both the current state and the currently enabled and disabled methods. This approach allows the analysis to recover knowledge that has been lost when merging paths. Even when the current state is unknown, the analysis may still know about currently enabled methods and continue the analysis based on this information. The translation addresses the problem of interacting objects by representing states at which n objects are bound by n-ary state relationships. Furthermore, we represent the interaction of objects through the protocol relationship. By using the protocol relationship as a trigger, the analysis can apply effects on all involved objects, even if a method references only a subset of them. Translating the protocol in Figure 2 gives constraints that detect the bug in Figure 1. Before checking line 6, the analysis knows the relationships r update (c) and r prot (c, i). That is, calling c.update() is legal and c is known to interact with i. The effects of the call lead to the following relationships after line 6: r 5 (c), r 5 (i), and r hasnext (i). Thus, the precondition for calling i.hasnext() in line 7 does not hold and Fusion reports a warning. IV. REPORTED WARNINGS Tables III, IV, and V list all bugs, code smells, and false positives that the analysis reports.
7 Method m Trigger g Effects e States Methods Protocol new Collection() true +r 2, r 3, r 4, r 5 +r up, +r it, r ha, r ne update() r 2 +r 2, r 3, r 4, r 5 +r up, +r it, r ha, r ne update() r 3 r PCI r 2, r 3, r 4, +r 5 +r up, r it, r ha, r ne update() r 4 r PCI r 2, r 3, r 4, +r 5 +r up, r it, r ha, r ne update() r 5 r PCI r 2, r 3, r 4, +r 5 +r up, r it, r ha, r ne update() r PCI r 2, r 3, r 4, +r 5 +r up, r it, r ha, r ne Method m Trigger g Reqmt. q update() r PCI r up iterator() r PCI r it hasnext() r PCI r ha next() r PCI r ne iterator() r 2 r 2, +r 3, r 4, r 5 +r up, r it, +r ha, r ne +r PCI hasnext() r 3 r PCI r 2, r 3, +r 4, r 5 +r up, r it, +r ha, +r ne hasnext() r 4 r PCI r 2, r 3, +r 4, r 5 +r up, r it, +r ha, +r ne hasnext() r PCI r 2, r 3, +r 4, r 5 +r up, r it, +r ha, +r ne next() r 4 r PCI r 2, +r 3, r 4, r 5 +r up, r it, +r ha, r ne next() r PCI r 2, +r 3, r 4, r 5 +r up, r it, +r ha, r ne (a) Effect constraints. (b) Requirement constraints. Figure 3: Constraints generated for the protocol in Figure 2. Method relationships are abbreviated (r ne means r next, etc.).
8 Program File Line Characters Comment avrora avrora/sim/mcu/atmegatimer.java illegal call to next(); should crash on every execution avrora avrora/sim/mcu/atmegatimer.java illegal call to next(); should crash on every execution avrora avrora/sim/platform/pinconnect.java concurrent modification avrora avrora/sim/platform/pinconnect.java concurrent modification avrora avrora/sim/platform/pinconnect.java illegal call to next(); pinconnections list is empty after initializing PinConnect, removing lines 447 and 448 preserves the functionality while making the iterator usage safe avrora cck/stat/sequence.java illegal call to next(); list fragments is initialized with one element in the constructor of Sequence; however, fragments is not private and may be cleaned by any other class in the package avrora jintgen/gen/codesimplifier.java illegal call to next(); params and args are assumed to have the same length; will crash otherwise; e.g. called by visit(callexpression, CGEnv), which may receive a CallExpression not fulfilling the assumption avrora jintgen/gen/disassembler/disassemblertestgenerator.java illegal call to next(); list empty after initializing class SimpleValues avrora jintgen/gen/disassembler/disassemblertestgenerator.java illegal call to next(); values are empty after initializing class CompoundValues eclipse org/eclipse/jdt/internal/eval/evaluator.java illegal call to next(); values() may return a set that is smaller than size() eclipse org/eclipse/update/internal/configurator/siteentry.java illegal call to next(); values() may return a set that is smaller than size() fop org/apache/fop/fo/flow/table/collapsingborderresolver.java illegal call to next(); depends on size of row, which is not specified/checked to be positive fop org/apache/fop/fo/flow/table/collapsingborderresolver.java illegal call to next(); Table.getColumns() can return empty list: Table.columns is empty when creating a table (similar to other bug in this method) fop org/apache/fop/fo/flow/table/collapsingborderresolver.java illegal call to next(); Table.getColumns() can return empty list: Table.columns is empty when creating a table fop org/apache/fop/layoutmgr/blockstackinglayoutmanager.java illegal call to next(); crashes if unexpected oldlist is passed fop org/apache/fop/layoutmgr/elementlistutils.java illegal call to next(); parameter elements can have less elements than expected, javadoc says nothing about minimum size fop org/apache/fop/layoutmgr/inline/textlayoutmanager.java illegal call to next(); parameter oldlist can have less elements than expected, javadoc says nothing about minimum size fop org/apache/fop/layoutmgr/inline/textlayoutmanager.java illegal call to next(); parameter oldlist can have less elements than expected, javadoc says nothing about minimum size fop org/apache/fop/layoutmgr/inline/textlayoutmanager.java illegal call to next(); parameter oldlist can have less elements than expected, javadoc says nothing about minimum size jython tests/java/javatests/listtest.java illegal call to next(); a bug that is intended to be a bug by the programmers (in a test case, to check whether an exception is thrown) jython tests/java/javatests/listtest.java a bug that is intended to be a bug by the programmers (in a test case, to check whether an exception is thrown) lucene org/apache/lucene/index/testindexreader.java the second call to iterator should be on fields2 lucene org/apache/lucene/search/spell/testlucenedictionary.java illegal call to next(); custom iterator doesn t follow the protocol of iterators specified in Iterator s javadoc (but returns null if there s no more element) lucene org/apache/lucene/search/spell/testlucenedictionary.java illegal call to next(); duplicate of bug one line above (incorrect custom iterator) pmd regress/test/net/sourceforge/pmd/cpd/matchalgorithmtest.java illegal call to next(); as far as I can see, Match.markSet typically has two elements, but never three; so this should fail when running pmd regress/test/net/sourceforge/pmd/cpd/matchalgorithmtest.java illegal call to next(); Match.markSet can have size 1 if the TokenEntries passed to Match s constructor are the same (even if the size is 2, it s illegal here) Table III: Bugs found by the analysis.
9 Program File Line Characters Comment eclipse org/eclipse/jface/text/templates/templatecontexttype.java safety depends on the fact that positions.size variable.getoffsets.size, which is not documented anywhere (but which seems to be enforced by the only callee of this method) fop org/apache/fop/layoutmgr/elementlistutils.java code is based upon the assumption that elements has a certain size and certain kinds of elements (which is not stated in the javadoc); however, the calls to previous() make this call kind of safe (the program may crash already at the call to previous()) jython tests/java/javatests/listtest.java test depends on length of defaultlist, which is fixed in the defaultlist() method; nice example of hidden dependencies between methods; not a bug because it s a test lucene org/apache/lucene/analysis/de/testgermanstemfilter.java unnecessary call to close, closing the outer reader is enough lucene org/apache/lucene/search/spell/testlucenedictionary.java safety depends on number of words in ld, which is set somewhere outside this method; not a bug, because it s a test lucene org/apache/lucene/search/spell/testlucenedictionary.java safety depends on number of words in ld, which is set somewhere outside this method; not a bug, because it s a test pmd regress/test/net/sourceforge/pmd/cpd/matchalgorithmtest.java Match.markSet can have size 1 if two equal objects are passed to Match s constructor pmd regress/test/net/sourceforge/pmd/jaxen/documentnavigatortest.java depends on size of collection, which is set somewhere else; not counted as bug because it s in a test, which should not be reused by anyone pmd regress/test/net/sourceforge/pmd/jaxen/documentnavigatortest.java depends on size of collection, which is set somewhere else; not classified as a bug because it s a test case that is probably not used by anyone else pmd regress/test/net/sourceforge/pmd/jaxen/documentnavigatortest.java depends on size of collection, which is set somewhere else; not counted as bug because it s in a test, which should not be reused by anyone pmd regress/test/net/sourceforge/pmd/rulesetfactorytest.java is OK as long as all XML strings defined above contains at least one rule pmd regress/test/net/sourceforge/pmd/symboltable/classscopetest.java depends on size of collection, which is set somewhere else; not classified as a bug because it s a test case that is probably not used by anyone else pmd regress/test/net/sourceforge/pmd/symboltable/classscopetest.java depends on size of collection, which is set somewhere else; not classified as bug because it s in a test case pmd net/sourceforge/pmd/util/classpathclassloader.java duplicate close, which is not necessary (first close in try-block can be removed without having any effect) xalan org/apache/xml/utils/hashtree2node.java correct, but maybe difficult to maintain; safe iteration depends on adding pairs of objects to v (which happens in the same method) Table IV: Code smells found by the analysis.
10 Program File Line Characters Comment avrora avrora/sim/radio/medium.java incomplete protocol; size() before next() is not part of the protocol avrora jintgen/gen/inliner.java incomplete protocol; assumes that d.params and args have the same size, checks for it at beginning of method, so it s okay avrora jintgen/isdl/verifier/typechecker.java incomplete protocol; checks for the size of accessors before calling next() avrora jintgen/isdl/verifier/typechecker.java incomplete protocol; checks that sizes of args and d.params() are the same batik org/apache/batik/apps/svgbrowser/main.java incomplete protocol eclipse core/framework/org/eclipse/osgi/framework/debug/debugoptions.java incomplete protocol eclipse dom/org/eclipse/jdt/core/dom/astmatcher.java incomplete protocol eclipse model/org/eclipse/jdt/internal/core/deltaprocessor.java incomplete protocol eclipse src-model/org/eclipse/core/internal/model/registryresolver.java incomplete protocol eclipse src-model/org/eclipse/core/internal/model/registryresolver.java incomplete protocol eclipse src-model/org/eclipse/core/internal/model/registryresolver.java incomplete protocol eclipse org/eclipse/ant/core/antcorepreferences.java incomplete protocol eclipse org/eclipse/core/internal/indexing/pagestore.java incomplete protocol eclipse org/eclipse/core/internal/refresh/refreshjob.java incomplete protocol eclipse org/eclipse/core/internal/watson/elementtree.java incomplete protocol eclipse org/eclipse/jface/text/textutilities.java incomplete protocol eclipse org/eclipse/team/internal/core/subscribers/syncinfotreechangeevent.java incomplete protocol fop org/apache/fop/fo/xmlwhitespacehandler.java incomplete protocol; see similar warning in this method fop org/apache/fop/fo/xmlwhitespacehandler.java incomplete protocol; see similar warning in this method fop org/apache/fop/fo/xmlwhitespacehandler.java incomplete protocol; interesting case, call to next seems to be missing; custom iterator provides nextchar which internally calls next fop org/apache/fop/layoutmgr/table/tablestepper.java incomplete protocol h2 org/h2/util/objectarray.java incomplete protocol jython org/python/core/ builtin.java incomplete protocol jython org/python/core/pyunicode.java custom iterator, see related warning in same class jython org/python/core/pyunicode.java interesting case, custom iterator that offers another method (peek()) to check if there s a next element jython tests/java/org/python/expose/generate/exposedtypeprocessortest.java incomplete protocol lucene org/apache/lucene/analysis/shingle/shinglefilter.java incomplete protocol lucene org/apache/lucene/analysistest.java mixture of incomplete protocol and limitation to intra-procedural analysis lucene org/apache/lucene/benchmark/bytask/tasks/repalltask.java Fusion imprecision lucene org/apache/lucene/benchmark/bytask/tasks/repselectbypreftask.java Fusion imprecision lucene org/apache/lucene/index/testindexreader.java incomplete protocol lucene org/apache/lucene/index/testindexreader.java incomplete protocol; calls to size - so it s OK lucene org/apache/lucene/queryparser/queryparser.java incomplete protocol; seems like a concurrent modification, but isn t because of the break pmd regress/test/net/sourceforge/pmd/cpd/matchtest.java size is (indirectly) set by creating the two tokens, i.e. in this method - so it s OK pmd regress/test/net/sourceforge/pmd/rulesetfactorytest.java incomplete protocol; next is OK because size is checked before pmd regress/test/net/sourceforge/pmd/rulesettest.java incomplete protocol pmd regress/test/net/sourceforge/pmd/util/appliertest.java pmd net/sourceforge/pmd/jsp/ast/jspparser.java interesting case; seems like a concurrent modification but is correct because of the break; generated code tomcat org/apache/el/parser/elparser.java no concurrent modification because of the break tomcat org/apache/jasper/compiler/tagfileprocessor.java no concurrent modification here, because method returns immediatly Table V: False positives reported by the analysis.
11 REFERENCES [1] M. Pradel, C. Jaspan, J. Aldrich, and T. R. Gross, Statically checking API protocol conformance with mined multi-object specifications, in ICSE, [2] M. Pradel, P. Bichsel, and T. R. Gross, A framework for the evaluation of specification miners based on finite state machines, in ICSM, 2010, pp [3] M. Pradel and T. R. Gross, Automatic generation of object usage specifications from large method traces, in ASE, 2009, pp [4] C. Jaspan and J. Aldrich, Checking framework interactions with relationships, in ECOOP, 2009, pp
Evaluation of AgitarOne
Carnegie Mellon University, School of Computer Science Master of Software Engineering Evaluation of AgitarOne Analysis of Software Artifacts Final Project Report April 24, 2007 Edited for public release
CHAPTER 7 GENERAL PROOF SYSTEMS
CHAPTER 7 GENERAL PROOF SYSTEMS 1 Introduction Proof systems are built to prove statements. They can be thought as an inference machine with special statements, called provable statements, or sometimes
Programming Languages CIS 443
Course Objectives Programming Languages CIS 443 0.1 Lexical analysis Syntax Semantics Functional programming Variable lifetime and scoping Parameter passing Object-oriented programming Continuations Exception
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 Framework for the Semantics of Behavioral Contracts
A Framework for the Semantics of Behavioral Contracts Ashley McNeile Metamaxim Ltd, 48 Brunswick Gardens, London W8 4AN, UK [email protected] Abstract. Contracts have proved a powerful concept
A staged static program analysis to improve the performance of runtime monitoring
A staged static program analysis to improve the performance of runtime monitoring Eric Bodden 1, Laurie Hendren 1, Ondřej Lhoták 2 1 McGill University, Montréal, Québec, Canada 2 University of Waterloo,
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
CSE 308. Coding Conventions. Reference
CSE 308 Coding Conventions Reference Java Coding Conventions googlestyleguide.googlecode.com/svn/trunk/javaguide.html Java Naming Conventions www.ibm.com/developerworks/library/ws-tipnamingconv.html 2
Specification and Analysis of Contracts Lecture 1 Introduction
Specification and Analysis of Contracts Lecture 1 Introduction Gerardo Schneider [email protected] http://folk.uio.no/gerardo/ Department of Informatics, University of Oslo SEFM School, Oct. 27 - Nov.
Eventia Log Parsing Editor 1.0 Administration Guide
Eventia Log Parsing Editor 1.0 Administration Guide Revised: November 28, 2007 In This Document Overview page 2 Installation and Supported Platforms page 4 Menus and Main Window page 5 Creating Parsing
Human-Readable BPMN Diagrams
Human-Readable BPMN Diagrams Refactoring OMG s E-Mail Voting Example Thomas Allweyer V 1.1 1 The E-Mail Voting Process Model The Object Management Group (OMG) has published a useful non-normative document
A Meeting Room Scheduling Problem
A Scheduling Problem Objective Engineering, Inc. 699 Windsong Trail Austin, Texas 78746 512-328-9658 FAX: 512-328-9661 [email protected] http://www.oeng.com Objective Engineering, Inc., 1999-2007. Photocopying,
Enforcing Data Quality Rules for a Synchronized VM Log Audit Environment Using Transformation Mapping Techniques
Enforcing Data Quality Rules for a Synchronized VM Log Audit Environment Using Transformation Mapping Techniques Sean Thorpe 1, Indrajit Ray 2, and Tyrone Grandison 3 1 Faculty of Engineering and Computing,
CSE 530A Database Management Systems. Introduction. Washington University Fall 2013
CSE 530A Database Management Systems Introduction Washington University Fall 2013 Overview Time: Mon/Wed 7:00-8:30 PM Location: Crow 206 Instructor: Michael Plezbert TA: Gene Lee Websites: http://classes.engineering.wustl.edu/cse530/
10 Java API, Exceptions, and Collections
10 Java API, Exceptions, and Collections Activities 1. Familiarize yourself with the Java Application Programmers Interface (API) documentation. 2. Learn the basics of writing comments in Javadoc style.
Reading 13 : Finite State Automata and Regular Expressions
CS/Math 24: Introduction to Discrete Mathematics Fall 25 Reading 3 : Finite State Automata and Regular Expressions Instructors: Beck Hasti, Gautam Prakriya In this reading we study a mathematical model
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
Monitoring Metric First-order Temporal Properties
Monitoring Metric First-order Temporal Properties DAVID BASIN, FELIX KLAEDTKE, SAMUEL MÜLLER, and EUGEN ZĂLINESCU, ETH Zurich Runtime monitoring is a general approach to verifying system properties at
Testing LTL Formula Translation into Büchi Automata
Testing LTL Formula Translation into Büchi Automata Heikki Tauriainen and Keijo Heljanko Helsinki University of Technology, Laboratory for Theoretical Computer Science, P. O. Box 5400, FIN-02015 HUT, Finland
Getting started with API testing
Technical white paper Getting started with API testing Test all layers of your composite applications, not just the GUI Table of contents Executive summary... 3 Introduction... 3 Who should read this document?...
Appendix... B. The Object Constraint
UML 2.0 in a Nutshell Appendix B. The Object Constraint Pub Date: June 2005 Language The Object Constraint Language 2.0 (OCL) is an addition to the UML 2.0 specification that provides you with a way to
Software infrastructure for Java development projects
Tools that can optimize your development process Software infrastructure for Java development projects Presentation plan Software Development Lifecycle Tools What tools exist? Where can tools help? Practical
Setting Up Person Accounts
Setting Up Person Accounts Salesforce, Summer 15 @salesforcedocs Last updated: June 30, 2015 Copyright 2000 2015 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark of salesforce.com,
HP Quality Center. Upgrade Preparation Guide
HP Quality Center Upgrade Preparation Guide Document Release Date: November 2008 Software Release Date: November 2008 Legal Notices Warranty The only warranties for HP products and services are set forth
Sudoku puzzles and how to solve them
Sudoku puzzles and how to solve them Andries E. Brouwer 2006-05-31 1 Sudoku Figure 1: Two puzzles the second one is difficult A Sudoku puzzle (of classical type ) consists of a 9-by-9 matrix partitioned
Co-Creation of Models and Metamodels for Enterprise. Architecture Projects.
Co-Creation of Models and Metamodels for Enterprise Architecture Projects Paola Gómez [email protected] Hector Florez [email protected] ABSTRACT The linguistic conformance and the ontological
Web-Scale Extraction of Structured Data Michael J. Cafarella, Jayant Madhavan & Alon Halevy
The Deep Web: Surfacing Hidden Value Michael K. Bergman Web-Scale Extraction of Structured Data Michael J. Cafarella, Jayant Madhavan & Alon Halevy Presented by Mat Kelly CS895 Web-based Information Retrieval
CS 2112 Spring 2014. 0 Instructions. Assignment 3 Data Structures and Web Filtering. 0.1 Grading. 0.2 Partners. 0.3 Restrictions
CS 2112 Spring 2014 Assignment 3 Data Structures and Web Filtering Due: March 4, 2014 11:59 PM Implementing spam blacklists and web filters requires matching candidate domain names and URLs very rapidly
Runtime Verification - Monitor-oriented Programming - Monitor-based Runtime Reflection
Runtime Verification - Monitor-oriented Programming - Monitor-based Runtime Reflection Martin Leucker Technische Universität München (joint work with Andreas Bauer, Christian Schallhart et. al) FLACOS
A binary search tree or BST is a binary tree that is either empty or in which the data element of each node has a key, and:
Binary Search Trees 1 The general binary tree shown in the previous chapter is not terribly useful in practice. The chief use of binary trees is for providing rapid access to data (indexing, if you will)
Towards practical reactive security audit using extended static checkers 1
Towards practical reactive security audit using extended static checkers 1 Julien Vanegue 1 Shuvendu K. Lahiri 2 1 Bloomberg LP, New York 2 Microsoft Research, Redmond May 20, 2013 1 The work was conducted
Data Model Bugs. Ivan Bocić and Tevfik Bultan
Data Model Bugs Ivan Bocić and Tevfik Bultan Department of Computer Science University of California, Santa Barbara, USA [email protected] [email protected] Abstract. In today s internet-centric world, web
Advanced TTCN-3 Test Suite validation with Titan
Proceedings of the 9 th International Conference on Applied Informatics Eger, Hungary, January 29 February 1, 2014. Vol. 2. pp. 273 281 doi: 10.14794/ICAI.9.2014.2.273 Advanced TTCN-3 Test Suite validation
C H A P T E R Regular Expressions regular expression
7 CHAPTER Regular Expressions Most programmers and other power-users of computer systems have used tools that match text patterns. You may have used a Web search engine with a pattern like travel cancun
JOURNAL OF OBJECT TECHNOLOGY
JOURNAL OF OBJECT TECHNOLOGY Online at http://www.jot.fm. Published by ETH Zurich, Chair of Software Engineering JOT, 2006 Vol. 5, No. 6, July - August 2006 On Assuring Software Quality and Curbing Software
Random vs. Structure-Based Testing of Answer-Set Programs: An Experimental Comparison
Random vs. Structure-Based Testing of Answer-Set Programs: An Experimental Comparison Tomi Janhunen 1, Ilkka Niemelä 1, Johannes Oetsch 2, Jörg Pührer 2, and Hans Tompits 2 1 Aalto University, Department
Towards Automatic Discovery of Deviations in Binary Implementations with Applications to Error Detection and Fingerprint Generation
Towards Automatic Discovery of Deviations in Binary Implementations with Applications to Error Detection and Fingerprint Generation David Brumley, Juan Caballero, Zhenkai Liang, James Newsome, and Dawn
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,
Efficient database auditing
Topicus Fincare Efficient database auditing And entity reversion Dennis Windhouwer Supervised by: Pim van den Broek, Jasper Laagland and Johan te Winkel 9 April 2014 SUMMARY Topicus wants their current
(IALC, Chapters 8 and 9) Introduction to Turing s life, Turing machines, universal machines, unsolvable problems.
3130CIT: Theory of Computation Turing machines and undecidability (IALC, Chapters 8 and 9) Introduction to Turing s life, Turing machines, universal machines, unsolvable problems. An undecidable problem
The Entity-Relationship Model
The Entity-Relationship Model 221 After completing this chapter, you should be able to explain the three phases of database design, Why are multiple phases useful? evaluate the significance of the Entity-Relationship
Mining the Software Change Repository of a Legacy Telephony System
Mining the Software Change Repository of a Legacy Telephony System Jelber Sayyad Shirabad, Timothy C. Lethbridge, Stan Matwin School of Information Technology and Engineering University of Ottawa, Ottawa,
Moving from CS 61A Scheme to CS 61B Java
Moving from CS 61A Scheme to CS 61B Java Introduction Java is an object-oriented language. This document describes some of the differences between object-oriented programming in Scheme (which we hope you
Design by Contract beyond class modelling
Design by Contract beyond class modelling Introduction Design by Contract (DbC) or Programming by Contract is an approach to designing software. It says that designers should define precise and verifiable
Checking Access to Protected Members in the Java Virtual Machine
Checking Access to Protected Members in the Java Virtual Machine Alessandro Coglio Kestrel Institute 3260 Hillview Avenue, Palo Alto, CA 94304, USA Ph. +1-650-493-6871 Fax +1-650-424-1807 http://www.kestrel.edu/
Relational Databases
Relational Databases Jan Chomicki University at Buffalo Jan Chomicki () Relational databases 1 / 18 Relational data model Domain domain: predefined set of atomic values: integers, strings,... every attribute
Detecting Pattern-Match Failures in Haskell. Neil Mitchell and Colin Runciman York University www.cs.york.ac.uk/~ndm/catch
Detecting Pattern-Match Failures in Haskell Neil Mitchell and Colin Runciman York University www.cs.york.ac.uk/~ndm/catch Does this code crash? risers [] = [] risers [x] = [[x]] risers (x:y:etc) = if x
Using UML Part Two Behavioral Modeling Diagrams
UML Tutorials Using UML Part Two Behavioral Modeling Diagrams by Sparx Systems All material Sparx Systems 2007 Sparx Systems 2007 Page 1 Trademarks Object Management Group, OMG, Unified Modeling Language,
[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
Database Replication with MySQL and PostgreSQL
Database Replication with MySQL and PostgreSQL Fabian Mauchle Software and Systems University of Applied Sciences Rapperswil, Switzerland www.hsr.ch/mse Abstract Databases are used very often in business
Database Design Process. Databases - Entity-Relationship Modelling. Requirements Analysis. Database Design
Process Databases - Entity-Relationship Modelling Ramakrishnan & Gehrke identify six main steps in designing a database Requirements Analysis Conceptual Design Logical Design Schema Refinement Physical
1-04-10 Configuration Management: An Object-Based Method Barbara Dumas
1-04-10 Configuration Management: An Object-Based Method Barbara Dumas Payoff Configuration management (CM) helps an organization maintain an inventory of its software assets. In traditional CM systems,
Page 1. Outline of the Lecture. What is Software Configuration Management? Why Software Configuration Management?
Books: Software Configuration Management 1. B. Bruegge and A. H. Dutoit, Object-Oriented Software Engineering: Using UML, Patterns, and Java (Chapter 13) Outline of the Lecture Purpose of Software Configuration
Appendix B Data Quality Dimensions
Appendix B Data Quality Dimensions Purpose Dimensions of data quality are fundamental to understanding how to improve data. This appendix summarizes, in chronological order of publication, three foundational
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
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
Automated Program Behavior Analysis
Automated Program Behavior Analysis Stacy Prowell [email protected] March 2005 SQRL / SEI Motivation: Semantics Development: Most engineering designs are subjected to extensive analysis; software is
Computing Concepts with Java Essentials
2008 AGI-Information Management Consultants May be used for personal purporses only or by libraries associated to dandelon.com network. Computing Concepts with Java Essentials 3rd Edition Cay Horstmann
A framework for creating custom rules for static analysis tools
A framework for creating custom rules for static analysis tools Eric Dalci John Steven Cigital Inc. 21351 Ridgetop Circle, Suite 400 Dulles VA 20166 (703) 404-9293 edalci,[email protected] Abstract Code
Introduction to Service Oriented Architectures (SOA)
Introduction to Service Oriented Architectures (SOA) Responsible Institutions: ETHZ (Concept) ETHZ (Overall) ETHZ (Revision) http://www.eu-orchestra.org - Version from: 26.10.2007 1 Content 1. Introduction
Regular Expressions and Automata using Haskell
Regular Expressions and Automata using Haskell Simon Thompson Computing Laboratory University of Kent at Canterbury January 2000 Contents 1 Introduction 2 2 Regular Expressions 2 3 Matching regular expressions
Business Application
137 Germain CRT Validation Rules for Siebel CRM 7.7,7.8,8.0,8.1,8.2 Validation Rule Name Validation Rule Description Business Application Siebel Repository Level Improve CPU Improve Memory GS-SBL-REP-JDBC-1001
Modeling Guidelines Manual
Modeling Guidelines Manual [Insert company name here] July 2014 Author: John Doe [email protected] Page 1 of 22 Table of Contents 1. Introduction... 3 2. Business Process Management (BPM)... 4 2.1.
6.045: Automata, Computability, and Complexity Or, Great Ideas in Theoretical Computer Science Spring, 2010. Class 4 Nancy Lynch
6.045: Automata, Computability, and Complexity Or, Great Ideas in Theoretical Computer Science Spring, 2010 Class 4 Nancy Lynch Today Two more models of computation: Nondeterministic Finite Automata (NFAs)
Programming by Contract. Programming by Contract: Motivation. Programming by Contract: Preconditions and Postconditions
COMP209 Object Oriented Programming Designing Classes 2 Mark Hall Programming by Contract (adapted from slides by Mark Utting) Preconditions Postconditions Class invariants Programming by Contract An agreement
Wave Analytics Data Integration
Wave Analytics Data Integration Salesforce, Spring 16 @salesforcedocs Last updated: April 28, 2016 Copyright 2000 2016 salesforce.com, inc. All rights reserved. Salesforce is a registered trademark of
Verifying Business Processes Extracted from E-Commerce Systems Using Dynamic Analysis
Verifying Business Processes Extracted from E-Commerce Systems Using Dynamic Analysis Derek Foo 1, Jin Guo 2 and Ying Zou 1 Department of Electrical and Computer Engineering 1 School of Computing 2 Queen
1 Representation of Games. Kerschbamer: Commitment and Information in Games
1 epresentation of Games Kerschbamer: Commitment and Information in Games Game-Theoretic Description of Interactive Decision Situations This lecture deals with the process of translating an informal description
Item 7: Prefer Immutable Atomic Value Types
Item 7: Prefer Immutable Atomic Value Types 1 Item 7: Prefer Immutable Atomic Value Types Immutable types are simple: After they are created, they are constant. If you validate the parameters used to construct
CSCI 3136 Principles of Programming Languages
CSCI 3136 Principles of Programming Languages Faculty of Computer Science Dalhousie University Winter 2013 CSCI 3136 Principles of Programming Languages Faculty of Computer Science Dalhousie University
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
Tool-Assisted Unit-Test Generation and Selection Based on Operational Abstractions
Tool-Assisted Unit-Test Generation and Selection Based on Operational Abstractions Tao Xie 1 and David Notkin 2 ([email protected],[email protected]) 1 Department of Computer Science, North Carolina
Transparent Monitoring of a Process Self in a Virtual Environment
Transparent Monitoring of a Process Self in a Virtual Environment PhD Lunchtime Seminar Università di Pisa 24 Giugno 2008 Outline Background Process Self Attacks Against the Self Dynamic and Static Analysis
Web Data Extraction: 1 o Semestre 2007/2008
Web Data : Given Slides baseados nos slides oficiais do livro Web Data Mining c Bing Liu, Springer, December, 2006. Departamento de Engenharia Informática Instituto Superior Técnico 1 o Semestre 2007/2008
Process Modeling Notations and Workflow Patterns
Process Modeling Notations and Workflow Patterns Stephen A. White, IBM Corp., United States ABSTRACT The research work of Wil van der Aalst, Arthur ter Hofstede, Bartek Kiepuszewski, and Alistair Barros
Traceability Patterns: An Approach to Requirement-Component Traceability in Agile Software Development
Traceability Patterns: An Approach to Requirement-Component Traceability in Agile Software Development ARBI GHAZARIAN University of Toronto Department of Computer Science 10 King s College Road, Toronto,
Introduction to Software Paradigms & Procedural Programming Paradigm
Introduction & Procedural Programming Sample Courseware Introduction to Software Paradigms & Procedural Programming Paradigm This Lesson introduces main terminology to be used in the whole course. Thus,
Chapter 13: Program Development and Programming Languages
15 th Edition Understanding Computers Today and Tomorrow Comprehensive Chapter 13: Program Development and Programming Languages Deborah Morley Charles S. Parker Copyright 2015 Cengage Learning Learning
Write Barrier Removal by Static Analysis
Write Barrier Removal by Static Analysis Karen Zee and Martin Rinard Laboratory for Computer Science Massachusetts Institute of Technology Cambridge, MA 02139 {kkz, [email protected] ABSTRACT We present
Different Approaches to White Box Testing Technique for Finding Errors
Different Approaches to White Box Testing Technique for Finding Errors Mohd. Ehmer Khan Department of Information Technology Al Musanna College of Technology, Sultanate of Oman [email protected] Abstract
Enforcing Security Policies. Rahul Gera
Enforcing Security Policies Rahul Gera Brief overview Security policies and Execution Monitoring. Policies that can be enforced using EM. An automata based formalism for specifying those security policies.
Designing and Implementing Forms 34
C H A P T E R 34 Designing and Implementing Forms 34 You can add forms to your site to collect information from site visitors; for example, to survey potential customers, conduct credit-card transactions,
Errors That Can Occur When You re Running a Report From Tigerpaw s SQL-based System (Version 9 and Above) Modified 10/2/2008
Errors That Can Occur When You re Running a Report From Tigerpaw s SQL-based System (Version 9 and Above) Modified 10/2/2008 1 Introduction The following is an explanation of some errors you might encounter
2. The Language of First-order Logic
2. The Language of First-order Logic KR & R Brachman & Levesque 2005 17 Declarative language Before building system before there can be learning, reasoning, planning, explanation... need to be able to
Database Application Developer Tools Using Static Analysis and Dynamic Profiling
Database Application Developer Tools Using Static Analysis and Dynamic Profiling Surajit Chaudhuri, Vivek Narasayya, Manoj Syamala Microsoft Research {surajitc,viveknar,manojsy}@microsoft.com Abstract
UML-based Test Generation and Execution
UML-based Test Generation and Execution Jean Hartmann, Marlon Vieira, Herb Foster, Axel Ruder Siemens Corporate Research, Inc. 755 College Road East Princeton NJ 08540, USA [email protected] ABSTRACT
Software Engineering Techniques
Software Engineering Techniques Low level design issues for programming-in-the-large. Software Quality Design by contract Pre- and post conditions Class invariants Ten do Ten do nots Another type of summary
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
Managing Variability in Software Architectures 1 Felix Bachmann*
Managing Variability in Software Architectures Felix Bachmann* Carnegie Bosch Institute Carnegie Mellon University Pittsburgh, Pa 523, USA [email protected] Len Bass Software Engineering Institute Carnegie
Verification and Validation of Software Components and Component Based Software Systems
Chapter 5 29 Verification and Validation of Software Components and Component Based Christina Wallin Industrial Information Technology Software Engineering Processes ABB Corporate Research [email protected]
The Halting Problem is Undecidable
185 Corollary G = { M, w w L(M) } is not Turing-recognizable. Proof. = ERR, where ERR is the easy to decide language: ERR = { x { 0, 1 }* x does not have a prefix that is a valid code for a Turing machine
Compiler Construction
Compiler Construction Regular expressions Scanning Görel Hedin Reviderad 2013 01 23.a 2013 Compiler Construction 2013 F02-1 Compiler overview source code lexical analysis tokens intermediate code generation
