Static Analysis for Dynamic Coupling Measures
|
|
|
- Austin Simon
- 10 years ago
- Views:
Transcription
1 Static Analysis for Dynamic Coupling Measures Yin Liu Ana Milanova Department of Computer Science Rensselaer Polytechnic Institute Troy, NY 12180, USA Abstract Coupling measures have important applications in software development and maintenance. They are used to reason about the structural complexity of software and have been shown to predict quality attributes such as fault-proneness, ripple effects of changes and changeability. Traditional object-oriented coupling measures do not account for polymorphic interactions, and thus underestimate the complexity of classes and fail to properly predict their quality attributes. To address this problem Arisholm et al. [3] define a family of dynamic coupling measures that account for polymorphism. They collect dynamic coupling measures through dynamic analysis and show that these measures are better indicators of complexity and better predictors of quality attributes than traditional coupling measures. This paper presents a new approach to the computation of dynamic coupling measures. Our approach uses static analysis, in particular class analysis, and is designed to work on incomplete programs. We perform experiments on several Java components and present a precision evaluation which shows that inexpensive class analysis such as RTA computes Copyright c 2006 Yin Liu and Ana Milanova. Permission to copy is hereby granted provided the original copyright notice is reproduced in copies made. dynamic coupling measures with almost perfect precision. Our results indicate that inexpensive static analysis may be used as a more convenient, more practical and more precise alternative to dynamic analysis for the purposes of computation of dynamic coupling measures. 1 Introduction Coupling measures are typically based on some form of static code analysis and their primary goal is to quantify the connectedness of a class to other classes. For example, class A is coupled to class B if some method in A calls a method in B. Coupling measures have important applications in software development and maintenance. They are used to help developers, testers and maintainers reason about software complexity and software quality attributes. Coupling measures have been studied extensively and have been used to assist maintainers in tasks such as impact analysis, assessing the fault-proneness of classes, fault prediction, ripple effects, and changeability among others [8, 9, 29, 30, 17]. Therefore, coupling measures assist developers, testers and maintainers in reasoning about the software and in predicting the needs for code inspection, testing and debugging.
2 1.1 Dynamic Coupling Measures Traditional coupling measures [10, 11, 8] take into account only static couplings. They do not account for dynamic couplings due to polymorphism and may significantly underestimate the complexity of software and misjudge the need for code inspection, testing and debugging. As an illustrating example, consider the standard Bridge structure [15] shown in Figure 1. Traditional coupling measures [10, 11, 8] would count only one coupling due to polymorphic call imp.devm() in method A:m, namely a coupling of A to Imp. In fact, the actual complexity of the call is considerably higher since the polymorphic call can couple dynamically each concrete A to each concrete Imp for a total of six couplings: A1,Imp1, A1,Imp2, A1,Imp3, A2,Imp1, A2,Imp2 and A2,Imp3. Arisholm et al. [2, 4, 3] address this problem by proposing several sets of dynamic coupling measures specifically designed to account for polymorphic interactions. They use dynamic analysis to capture the dynamic couplings: they instrument the program, then execute it with all available inputs and collect dynamic measures over all executions. Arisholm et al. perform detailed statistical analysis that shows that these measures are better indicators of complexity and better predictors of quality attributes than traditional coupling measures. 1.2 Static Class Analysis However, dynamic analysis has several disadvantages: (i) it is relatively slow, (ii) requires a complete program, and (iii) produces incomplete results as the couplings output by the dynamic analysis are valid for particular inputs and executions of the program. The goal of our work is to utilize static analysis as an alternative to dynamic analysis for the computation of dynamic coupling measures. The static analyses considered in this paper may have several advantages over dynamic analysis: (i) they are practical, (ii) work on incomplete programs and (iii) produce results valid over all program executions (Section 2 additionally argues the suitability of static analysis). We propose a static analysis framework for the computation of the dynamic coupling measures from [3] for strictly-typed languages such as Java. The framework is parameterized by class analysis, which determines the classes of the objects a reference variable or a reference object field may refer to; the framework can be instantiated with a wide variety of class analyses of varying degrees of precision and cost [1, 5, 16, 13, 18, 7, 19, 22, 25, 27, 28]. We use the class analysis solution to approximate the interactions of run-time objects and infer the possible dynamic couplings. Our approach works on incomplete programs. This is an important feature because it is essential to be able to perform separate analysis of software components. For example, it is typical to have to assess the quality attributes of a component without having access to the clients of that component. We have instantiated the framework with Class Hierarchy Analysis (CHA) [12] and Rapid Type Analysis (RTA) [5], two well-known class analyses at the lower end of the cost/precision spectrum; we approximate dynamic couplings with the two instantiations. We present empirical results on several components. We present a precision evaluation which shows that one of our analyses, namely the one based on RTA, achieves almost perfect precision that is, it computes almost exactly the same couplings that would have been identified dynamically with the most complete suite of test cases written on top of the component. These results indicate that dynamic coupling measures can be measured precisely with a simple and inexpensive static analysis. Thus, our analysis can be easily incorporated in software tools; it can assist developers, testers and maintainers in assessing software quality and in predicting quality attributes such as changeability and fault proneness. This work has the following contributions: We propose a static analysis framework parameterized by class analysis, for the computation of dynamic coupling measures. Our analysis framework is designed to handle incomplete programs. We present an empirical study that evaluates two instantiations of the framework
3 on several Java components. 2 The Case for Static Analysis A1 x() m() A m() Arisholm et al. [3] capture dynamic coupling measures through dynamic analysis; however, they observe that dynamic analysis has (arguably substantial) drawbacks. First, it is relatively slow because it requires multiple executions of the program with multiple inputs and each execution incurs the overhead of instrumentation. Second, the engineering task of building an instrumentation framework is relatively complex. Third, dynamic analysis always requires a complete program while in many cases it is necessary to use coupling measures to assess quality attributes of software components (i.e., incomplete programs). Fourth, the results that are obtained may be incomplete as they are based on particular runs with particular inputs. As an example, suppose that there are two clients of the Bridge structure in Figure 1, one that instantiates A1 with Imp1 and one that instantiates A1 with Imp2. Running the two clients will count dynamic couplings A1,Imp1 and A1,Imp2 as due to call imp.devm(). Thus, dynamic analysis will omit four valid couplings. One would need at least six clients, and six runs, in order to capture correctly all possible dynamic couplings due to this call. Static analysis, and in particular class analysis, presents a viable alternative to dynamic analysis for the purposes of the computation of dynamic coupling measures. Using class analysis, one can approximate the possible classes of each reference variable and reference object field and reason about possible dynamic couplings. For the running example, a class analysis may determine that the possible run-time classes for imp are Imp1, Imp2 and Imp3 and the possible run-time classes for implicit parameter this A:m are A1 and A2. This information correctly yields that call tmp.devm() may trigger six dynamic couplings (clearly,this A:m refers to the receivers of A:m and it captures the classes of the caller; imp captures the classes of the callee). Static analysis has important advantages over dynamic analysis when comimp imp.devm(); A2 y() m() Imp DevM() Imp1 Imp2 Imp3 DevM() DevM() DevM() Figure 1: The Bridge pattern structure puting dynamic coupling measures. First, the static analyses considered in this paper are relatively inexpensive and likely much more practical than dynamic analysis. Second, these analyses are easy to implement; it is likely that they are implemented for the purposes of essential tasks such as call graph construction, and the analysis for the computation of dynamic coupling measures will simply reuse available results. Third, the static analysis considered in this paper can be adapted to work on incomplete programs (i.e., software components), which is an important requirement. Fourth, the static analysis is conservative that is, it is guaranteed that all possible run-time couplings will be reported. However, static analysis can be overly conservative and report infeasible couplings that is, couplings that cannot happen during any execution of the program. Clearly, overly conservative analysis may overestimate the possible couplings and software complexity and thus undermine the usefulness of the coupling measures. We believe that in order to use static analysis as a viable alternative to dynamic analysis, the static analysis must provide a precise approximation of the dynamic couplings. 3 Problem Statement The goal of our work is to design static analysis that computes dynamic coupling measures precisely; the analysis must work on incomplete programs. This analysis problem fits into a general framework for analysis of incomplete
4 programs due to Nasko Rountev [23, 26, 24]. The input to the analysis contains a set Cls of interacting Java classes. A subset of Cls is designated as the set of accessible classes; these are classes that may be accessed by unknown client code from outside of Cls. Such client code can only access fields and methods from Cls that are declared in some accessible class; these accessible fields and methods are referred to as boundary fields and boundary methods. 3.1 Dynamic Coupling Measures The dynamic coupling measures we study were defined and studied in detail by Arisholm et al. [2, 3]. Our work focuses on the object coupling measures which capture polymorphic interactions. The measure of highest granularity, denoted by IC OD in [3], records a tuple C 1, m 1, I, C 2, m 2 when the dynamic analysis encounters an execution of method m 1 with receiver of type C 1 and during this execution call site I in m 1 invokes method m 2 with receiver of class C 2. Recall the example in Figure 1 and assume that call site imp.devm() in method A:m has number 1. Assuming that there are tests that ensure complete coverage, the dynamic analysis would report the following IC OD tuples for call site 1: A1,A:m,1,Imp1,Imp1:DevM() A1,A:m,1,Imp2,Imp2:DevM() A1,A:m,1,Imp3,Imp3:DevM() A2,A:m,1,Imp1,Imp1:DevM() A2,A:m,1,Imp2,Imp2:DevM() A2,A:m,1,Imp3,Imp3:DevM(). The measure of middle granularity, denoted by IC OM in [3] records tuples C 1, m 1, C 2, m 2 dropping the call site index I from the IC OD tuple. The measure of lowest granularity, denoted by IC OC in [3] records tuples C 1, m 1, C 2 dropping the callee method from the IC OM tuple. Clearly, IC OD subsumes IC OM and IC OM subsumes IC OC. One can use these tuples to compute a measure for each class; for example the IC OD measure for class C is equal to the number of tuples for which the caller method m 1 is a method defined in C. Arisholm et al. [3] show through detailed statistical analysis that the dynamic measures capture new dimensions of complexity of classes compared to traditional coupling measures [8], and predict quality attributes such as changeability better than traditional measures. For the rest of this paper we will focus on the IC OD measure. Our goal is to design a static analysis that answers the question: given the set of Java classes Cls (i.e., the component to be analyzed) what are the IC OD couplings that can be observed throughout all possible executions of arbitrary client code built on top of Cls? Example. Consider the package in Figure 2; this example is based on classes from the standard library java.text with some modifications made to better illustrate the problem and our approach. Here Cls consists of the classes in Figure 2 plus String. Note that classes SimpleBoundary, BreakData, WordBreakData, LineBreakData and CharBreakData have package visibility and cannot be accessed directly by client code. The remaining classes, BreakIter, CharIter and StringCharIter are designated as accessible classes. Consider the IC OD tuples in methods of class SimpleBoundary (i.e., we are interested in computing the IC OD measure for this class). For brevity we will use SB to denote SimpleBoundary, SCI to denote StringCharIter, and WBD, LBD and CBD to denote WordBreakData, LineBreakData and CharBreakData respectively. Call site 1 in settext triggers coupling SB,setText,1,SCI,getBeginIndex. Similarly, call site 2 in first triggers coupling SB,first,2,SCI,getBeginIndex. Finally, call site 3 in nextposition triggers couplings SB,nextPosition,3,WBD,WBD:forward, SB,nextPosition,3,CBD,CBD:forward, SB,nextPosition,3,LBD,LBD:forward. It is easy to see that for each of these couplings one can write a client of the classes in Figure 2 that will trigger that coupling. For example, client code may call getwordinstance (thus initializing the newly created SimpleBoundary with WordBreakData); subsequently it can access SimpleBoundary.next (as next is part of the public interface of BreakIter) which will trigger the coupling between SimpleBoundary and WordBreakData.
5 package iter; public abstract class BreakIter { public static BreakIter getwordinstance() { return new SimpleBoundary( new WordBreakData()); } public static BreakIter getcharinstance() { return new SimpleBoundary( new CharBreakData()); } public static BreakIter getlineinstance() { return new SimpleBoundary( new LineBreakData()); } public abstract void settext(chariter); public abstract CharIter gettext(); public abstract int first(); public abstract int next(); } final class SimpleBoundary extends BreakIter { private BoundaryData data; private CharIter text; private int pos; public void SimpleBoundary(BoundaryData d) { text=new StringCharIter(...); data=d; pos=0; } public void settext(chariter ci) { 1 text=ci; pos=text.getbeginindex(); } public CharIter gettext() { return text; } public int first() { 2 pos=text.getbeginindex(); return pos; } public int next() { pos=nextposition(pos); return pos; } private int nextposition(int offset) { 3... data.forward();... }... } abstract class BoundaryData {... } class WordBreakData extends BoundaryData { public void forward() {... }... } class CharBreakData extends BoundaryData { public void forward() {... }... } class LineBreakData extends BoundaryData { public void forward() {... }... } public interface CharIter { public int getbeginindex(); } public StringCharIter implements CharIter { public StringCharIter(String s) {...} public int getbeginindex() {...}... } 3.2 Discussion Figure 2: Package iter. We employ the following constraint, standard for other problem definitions that require analysis of incomplete programs [26, 24, 20]. We only consider executions in which the invocation of a boundary method does not leave Cls that is, all of its transitive callees are also in Cls. If we consider the possibility of unknown subclasses we may have all instance calls from Cls potentially be redirected to unknown external code that may affect the coupling inference. Thus, Cls is augmented to include the classes that provide component functionality as well as all other classes transitively referenced. In the experiments presented in Section 5 we included all classes that were transitively referenced by Cls. This approach restricts analysis information to the currently known world that is, the information may be invalidated in the future when new subclasses are added to Cls. Another approach is to change the analysis to make worst case assumptions for calls that may enter some unknown overriding methods. However, in this case, the analysis will be overly conservative. Thus, we believe that it is more useful to restrict the analysis to the known world; of course, the analysis user must be aware that the information is valid only for the given set of known classes. 4 Fragment Class Analysis for Dynamic Coupling Measures Class analysis determines the classes of the objects that a given reference variable or a reference field may point to [1, 5, 16, 13, 18, 7, 19, 22, 25, 27, 28]. This information has a wide variety of uses in software tools and optimizing compilers. In this paper, class analysis information is used to approximate the set of IC OD coupling tuples that can happen when arbitrary client code is built on top of Cls. This is done by using the class analysis solution to approximate the set of possible classes for the caller, and the set of possible classes for the callee. There is a large body of work on class analysis and related points-to analyses with different trade-offs between cost and precision. In this paper, we consider computation of dynamic coupling measures based on two well known and simple class analyses: Class Hierarchy Analysis (CHA) [12] and Rapid Type Analysis (RTA) [5]. CHA is the simplest form of class analysis. To determine the possible bindings of polymorphic variables and fields CHA examines the
6 structure of the class hierarchy. For a reference variable r or an instance field f of declared type C, the set of possible classes for the objects of r is the set containing C and all direct and transitive subclasses of C (excluding abstract classes). For example, the possible classes for data in nextposition in Figure 2 are WordBreakData, LineBreakData and CharBreakData. An implementation of CHA typically assumes that there is a wholeprogram that is, there is a main method which is the start of the program execution; it starts at main and maintains a set of reachable methods R. Whenever a reachable method is found, CHA examines the call sites in this method. For each call site l = r.m(...), it approximates the possible run-time classes for r based on the hierarchy and for each C, it finds the appropriate run-time target m j based on C and the compile-time target m. Each such m j is added to R. RTA is another simple form of class analysis. It improves on CHA by taking into account what classes are instantiated in the program. RTA assumes a whole program and starts from main as the first reachable method. Whenever a reachable method is found, RTA examines the call sites and the instantiation sites in this method. For each call site l = r.m(...), it approximates the possible run-time classes for r based on the hierarchy and for each C finds the appropriate run-time target m j. If C has been instantiated, m j is added to R; otherwise, m j is added to a set of potential targets that would become reachable if C is instantiated. At instantiation sites RTA records the class that has been instantiated and adds to R all potential targets associated with the instantiated class. To summarize, the RTA solution for a reference variable or a reference object field is the set of instantiated classes compatible with its declared type. 4.1 Fragment Class Analysis Class analyses are typically designed as wholeprogram analyses; they take as input a complete program and produce a class analysis solution that reflects bindings throughout the entire program. However, the problem considered in this paper requires class analysis of a partial program. The input is a set of classes Cls and the analysis needs to approximate dynamic couplings that could happen across possible executions of arbitrary client code built on top of Cls. To address this problem we make use of a general technique called fragment analysis due to Nasko Rountev [23, 26, 24]. Fragment analysis works on a program fragment rather than on a complete program; in our case the fragment is the set of classes Cls. Initially, the fragment analysis produces an artificial main method that serves as a placeholder for client code written on top of Cls. Intuitively, the artificial main simulates the possible flow of classes between Cls and the client code. Subsequently, the fragment analysis attaches main to Cls and uses some wholeprogram class analysis engine to compute class analysis information which summarizes the possible effects of arbitrary client code. The fragment analysis approach can be used with a wide variety of class analyses [1, 5, 16, 13, 18, 7, 19, 22, 25, 27, 28]; for the purposes of this paper we only consider fragment analysis used with CHA and RTA. void main() { BreakIter ph BI; CharIter ph CI; StringCharIter ph SCI; String ph string = "string literal"; ph BI = BreakIter.getWordInstance(); ph BI = BreakIter.getCharInstance(); ph BI = BreakIter.getLineInstance(); ph BI.setText(ph CI); ph CI = ph BI.getText(); ph BI.first(); ph BI.next(); ph CI.getBeginIndex(); ph SCI = new StringCharIter(ph string); ph CI = ph SCI; } Figure 3: Placeholder main method for iter. The placeholder main method for the classes from Figure 2 is shown in Figure 3. The method contains variables for types from Cls that can be accessed by client code. The statements represent different possible interactions involving Cls; their order is irrelevant because the whole-program analysis is flowinsensitive. Method main invokes all public methods from the classes in Cls designated as accessible. The last statement handles possible
7 assignment conversions between CharIter and StringCharIter. The details of the fragment analysis will not be discussed here; they can be found in [26]. For the purposes of our analysis we discuss the following property of the results computed by the fragment analysis, originally outlined in [24]. Consider some client program built on top of Cls and an execution of this program (the program must satisfy the constraints discussed in Section 3.2). Let r be a variable or a reference field declared in Cls and at some point during execution r refers to a heap object of class C. In the fragment analysis solution, class C will be in the set of classes for r. A similar property holds for variables r declared outside of Cls. In this case, in the fragment analysis solution, the set for the variable inmain that has the same type as r will contain C. The algorithm in Figure 4 computes Dyn, the set of tuples C 1, n, i, C 2, m approximating the possible dynamic couplings when arbitrary client code is written on top of Cls. The algorithm is parameterized by class analysis, Cs. The precision of the computation of the dynamic measures depends on the precision of the underlying class analysis. If the class analysis is more precise (i.e., the solution contains fewer classes per reference variable), then the set of couplings will be more precise (i.e., fewer coupling tuples will be reported). We briefly discuss the processing of virtual calls (lines 1-5). Lines 2-3 address the case when virtual call s i : r.m(...) is enclosed by a static method n declared in class C 1. The analysis adds to Dyn a dynamic tuple C 1, n, i, C 2, target(c 2, m) for each class C 2 that is a possible run-time class for r according to the class analysis; target(c 2, m) finds the run-time target method based on class C 2 and compile-time target m. Lines 4-5 address the case when the virtual call is enclosed by an instance method n. In order to approximate the possible dynamic couplings through virtual call s i : r.m(...) the analysis considers the possible run-time classes of the implicit painput Methods: set of reachable methods Stmt: set of statements in Methods Cs: Vars P(Classes) output Dyn: Cls Methods I Cls Methods [1] foreach virtual call s i: r.m(...) s.t. r this [2] if s i enclosed in static method C 1:n [3] add { C 1, n, i, C 2,target(C 2, m) C 2 Cs(r) C 1 C 2} to Dyn [4] else if s i enclosed in instance method n (n can be constructor) [5] add { C 1, n, i, C 2,target(C 2, m) C 1 Cs(this n) C 2 Cs(r) C 1 C 2 } to Dyn [6] foreach static call s i: C 2.m(...) [7] if s i enclosed in static method C 1:n, C 1 C 2 [8] add C 1, n, i, C 2, m to Dyn [9] else if s i enclosed in instance method n (n can be constructor) [10] add { C 1, n, i, C 2, m C 1 Cs(this n) C 1 C 2 } to Dyn Figure 4: Computation of dynamic couplings. 4.2 Computation of Dynamic Coupling Measures rameter this n of the enclosing method, and the possible run-time classes for r. Consider the example in Figure 1. Suppose that the class analysis computes that Cs(this A:m )={A1,A2} and Cs(imp)={Imp1,Imp2,Imp3} and consider the couplings that result from call imp.devm(). The set of classes forthis A:m approximates the concrete receivers of method A:m which in this case are A1 and A2. The set of classes for imp approximates the possible callee classes, which in this case is {Imp1,Imp2,Imp3}. The analysis outputs the six IC OD tuples outlined in Section Experimental Study The goal of the experimental study is to address the following question. How imprecise the analysis is when instantiated with CHA and with RTA that is, how often it reports infeasible coupling tuples? For the experiments we used several Java components from the standard library packages java.text and java.util.zip (used in related analyses [24], [20] and [21]). The components are described briefly in the first three columns of Table 1. Each component contains the set of classes in Cls (i.e., the classes that provide component functionality plus all other
8 (1)Component (2)Functionality (3)#Class in Cls/ (4)CHA-based Analysis (5)RTA-based Analysis #Functionality IC OD IC OM IC OC IC OD IC OM IC OC gzip GZIP IO streams 199/ zip ZIP IO streams 194/ checked IO streams & checksums 189/ collator text collation 203/ date date formatting 205/ number number formatting 198/ boundary iteration over boundaries 193/ Table 1: Java components and statically inferred dynamic coupling tuples. classes that are directly or transitively referenced); the number of classes in Cls and the number of functionality classes is shown in column (3). We considered the IC OD, IC OM and IC OC tuples for the classes that provide component functionality. For the rest of this section we primarily focus on the IC OD tuples as the other kinds of tuples are trivially derived from them. In particular we consider all tuples C 1, m 1, I, C 2, m 2 where m 1 is a method reachable by RTA, and both C 1 and C 2 are classes that provide component functionality (i.e., we exclude couplings of functionality classes to library classes). The standard library classes are typically well-tested and do not affect the quality attributes assessed by the coupling measures (e.g., they do not contribute to the fault-proneness or changeability of the functionality classes). As mentioned earlier, we instantiate the algorithm in Figure 4 with CHA and RTA. 5.1 Results Columns (4) and (5) in Table 1 show the number of IC OD, IC OM and IC OC tuples computed by the analysis in Figure 4 when instantiated with CHA and RTA respectively. Clearly, RTA improves precision over CHA. The different granularity level of the three object coupling measures is evident from these results; for most components IC OD is substantially larger than IC OM and IC OM is substantially larger than IC OC. This reflects the structure of the code. It happens often that within the same method, the same virtual call (i.e., a call to the same method with the same receiver class) appears several times at different call sites; when the call site is dropped from the tuple, previously distinct tuples are treated as one and thus there is a drop from IC OD to IC OM. Also, it happens often that within the same method, there are calls to distinct methods with the same receiver class; when the callee is dropped from the tuple, distinct tuples are treated as one and this accounts for the drop from IC OM to IC OC. We additionally categorize the IC OD tuples into monomorphic and polymorphic. The monomorphic tuples result from call sites that are resolved uniquely by CHA that is, both the caller class and the callee class are unique according to CHA. For example, if a static method contains virtual call s i : r.m() and there is only one possible receiver class for r according to CHA, the corresponding IC OD tuple is categorized as monomorphic. The polymorphic tuples are due to call sites for which either the caller or the callee resolve to more than one class according to CHA. Polymorphic tuples are further categorized as (i) polymorphic only in the caller, (ii) polymorphic only in the callee, and (iii) polymorphic both in the caller and the callee. For example, the six tuples that result due to call site imp.devm() in Figure 1 are categorized as polymorphic in both the caller and the callee. There is polymorphism in the caller because the class analysis determines two possible classes for implicit parameter this of method A:m, namely A1 and A2. Similarly, there is polymorphism in the callee because the class analysis determines three possible classes for imp, namely Imp1, Imp2 and Imp3. Table 2 shows the results of this categorization for the RTA IC OD tuples (given in column 5 of Table 1). Most of the polymorphic tuples are calleepolymorphic; however, caller-polymorphic tu-
9 Component #MONO #POLY Caller Callee Both Total gzip zip checked collator date number boundary Table 2: Dynamic tuples category statistic. Component Polymorphic Tuples CHA-based RTA-based Actual gzip zip checked collator date number boundary Table 3: Statically inferred polymorphic tuples. ples still exist and it is important that an analysis for the computation of dynamic coupling measures considers both polymorphism in the caller and in the callee. Table 2 underscores the importance of measures that take into account polymorphism there is a large number of polymorphic tuples and most of these tuples would have been omitted with traditional coupling measures. Therefore, in order to assess code quality attributes appropriately, it is essential to consider dynamic coupling measures. 5.2 Analysis Precision The issue of analysis precision is important for the static analysis for the computation of dynamic coupling measures. If the analysis is imprecise it may report coupling tuples that cannot happen for any execution of the program. Such information is misleading as it may overestimate the complexity of a class, improperly assess the quality attributes of the code and ultimately undermine the usefulness of the dynamic coupling measures. We examined the IC OD tuples computed by the two instantiations of our analysis and for each tuple we attempted to write client code that would exhibit that tuple. We were able to prove that all monomorphic tuples in our code base are feasible (recall that for comparison purposes we consider tuples in methods reachable by RTA). Table 3 shows the number of polymorphic tuples: the number for the CHA-based analysis, the number for the RTA-based analysis and the actual number obtained by manual inspection (i.e., after finding a client whose execution on top of Cls would exhibit the tuple). Table 3 shows that the RTA-based analysis achieves al- most perfect precision as all tuples but one can be exercised by a client (the results for gzip are shown in boldface in Tables 3,1 and 2 to underscore this imprecision). The CHA-based analysis, although not as precise as the RTAbased analysis, is still close to the actual result in most cases. 5.3 Conclusions The static analyses considered in this paper are simple and easy to implement; they have practical cost, practically linear in the size of the program. Utilizing these analyses can lead to efficient computation of dynamic coupling measures in practice. In addition, the analysis based on RTA achieves almost perfect precision and thus it may present a viable, more convenient and more practical alternative to dynamic analysis for the purposes of the computation of dynamic coupling measures. Of course, a threat to the validity of these results is the relatively small code base; clearly, the results need to be confirmed on additional code bases. 6 Related Work There is a lot of work on coupling measures [10, 11, 8, 9, 30, 29, 17]. These coupling measures are typically computed by code analysis and do not take into account polymorphism, thus underestimating code complexity. Our work is based on static analysis as well, but the measures we compute specifically account for polymorphism. Our work is related to work on metrics for polymorphism. Eder et al. define a set of coupling measures that consider polymorphism [14]; however, they do not consider the
10 computation of these measures. In contrast our work focuses on the computation of coupling measures; it provides a static analysis algorithm that captures the measures defined in [3]. Benlarbi and Melo define and empirically investigate the quality impact of polymorphism on object-oriented design [6]. They define measures of polymorphic behavior for C++ as follows: for each class C, they consider the number of polymorphic (i.e., virtual) methods that appear in C and its ancestors and descendants. Similarly to the work by Arisholm et al. [3] their statistical analysis shows that such polymorphism affects quality attributes such as the fault-proneness of class C. This work additionally underscores the need to consider polymorphism in measures. The measures by Benlarbi and Melo [6] capture a different dimension of polymorphism compared to the measures by Arisholm et al. [3], when considering polymorphism in server classes. Intuitively, they capture the complexity due to polymorphism in the hierarchy (i.e., the complexity of polymorphic calls through this such as this.m()) while the measures from [3] aim to capture non-inheritance couplings (i.e., the complexity of calls not through this). Clearly, the two measures complement each other. 7 Conclusions and Future Work In this paper, we have proposed a new approach to the computation dynamic coupling measures by utilizing static class analysis. The main contributions of our work are the following. First, we propose a static analysis framework for the computation of dynamic coupling measures for strictly-typed object-oriented languages such as Java; our analysis is parameterized by a class analysis and works on incomplete programs. Second, we present an empirical investigation that indicates that our analysis achieves almost perfect precision. Therefore, we believe that our approach presents a viable alternative to the more expensive and complex dynamic analysis for the purposes of computation of dynamic coupling measures. In the future we plan to experiment with additional components as well as complete programs. Also, we plan to experiment with other instances of our framework that use more expensive and precise class analyses such as points-to analysis. Finally, we plan to extend our methodology to support analysis of dynamically-typed object-oriented languages. Acknowledgements The authors would like to thank Nasko Rountev for providing the component data, and the CASCON 2006 reviewers whose comments helped improve this paper. About the Authors Yin Liu is a PhD student at Rensselaer Polytechnic Institute in Troy, New York. Ana Milanova is an assistant professor at Rensselaer Polytechnic Institute. References [1] O. Agesen. The cartesian product algorithm: Simple and precise type inference of parametric polymorphism. In European Conference on Object-Oriented Programming, pages 2 26, [2] E. Arisholm. Dynamic coupling measurement for object-oriented software. In IEEE METRICS, pages 33 42, [3] E. Arisholm, L. Briand, and A. Foyen. Dynamic coupling measurement for objectoriented software. IEEE Trans. Software Engineering, 30(8): , [4] E. Arisholm, D. Sjoberg, and M. Jorgensen. Assessing the chaneability of two object-oriented design alternatives a controlled experiment. Emperical Software Engineering, 6(3): , [5] D. Bacon and P. Sweeney. Fast static analysis of C++ virtual function calls. In ACM Conference on Object-Oriented Programming Systems, Languages, and Applications, pages , 1996.
11 [6] S. Benlarbi and W. Melo. Polymorphism measures for early risk prediction. In ACM/IEEE International Conference on Software Engineering, pages , [7] M. Berndl, O. Lhotak, F. Qian, L. Hendren, and N. Umanee. Points-to analysis using BDD s. In ACM Conference on Programming Language Design and Implementation, pages , [8] L. C. Briand, P. T. Devanbu, and W. L. Melo. An investigation into coupling measures for C++. In ACM/IEEE International Conference on Software Engineering, pages , [9] L. C. Briand, J. Wust, and H. Lounis. Using coupling measurement for impact analysis in object-oriented systems. In IEEE International Conference on Software Maintenance, pages , [10] S. Chidamber and C. F. Kemerer. Towards a metrics suite for object oriented design. In ACM Conference on Object-Oriented Programming Systems, Languages, and Applications, pages , [11] S. R. Chidamber and C. F. Kemerer. A metrics suite for object oriented design. IEEE Trans. Software Engineering, 20(6): , [12] J. Dean, D. Grove, and C. Chambers. Optimizations of object-oriented programs using static class hierarchy analysis. In European Conference on Object-Oriented Programming, pages , [13] G. DeFouw, D. Grove, and C. Chambers. Fast interprocedural class analysis. In ACM Symposium on Principles of Programming Languages, pages , [14] J. Eder, G. Kappel, and M. Schrefl. Coupling and cohesion in object-oriented systems. In Conference on Information and Knowledge Management, [15] E. Gamma, R. Helm, R. Johnson, and J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, [16] D. Grove, G. DeFouw, J. Dean, and C. Chambers. Call graph construction in object-oriented languages. In ACM Conference on Object-Oriented Programming Systems, Languages, and Applications, pages , [17] T. Gyimoty, R. Ferenc, and I. Siket. Emprirical validation of object-oriented metrics on open source software for fault prediciotn. IEEE Trans. Software Engineering, 31(10): , [18] O. Lhotak and L. Hendren. Scaling Java points-to analysis using Spark. In International Conference on Compiler Construction, pages , [19] D. Liang, M. Pennings, and M. J. Harrold. Extending and evaluating flow-insensitive and context-insensitive points-to analyses for Java. In ACM Workshop on Program Analysis for Software Tools and Engineering, pages 73 79, [20] A. Milanova. Precise identification of composition relationships for UML class diagrams. In IEEE/ACM Conference on Automated Software Engineering, pages 76 85, [21] A. Milanova. Composition inference for UML class diagrams. Technical Report 06-06, Rensselaer Polytechnic Institute, April [22] A. Milanova, A. Rountev, and B. Ryder. Parameterized object-sensitivity for points-to and side-effect analyses for Java. In ACM International Symposium on Software Testing and Analysis, pages 1 12, [23] A. Rountev. Dataflow Analysis of Software Fragments. PhD thesis, Rutgers University, 2002.
12 [24] A. Rountev. Precise identification of sideeffect free methods. In IEEE International Conference on Software Maintenance, pages 82 91, [25] A. Rountev, A. Milanova, and B. G. Ryder. Points-to analysis for Java using annotated constraints. In ACM Conference on Object-Oriented Programming Systems, Languages, and Applications, pages 43 55, [26] A. Rountev, A. Milanova, and B. G. Ryder. Fragment class analysis for testing of polymorphism in Java softwhare. IEEE Trans. Software Engineering, 30(6): , June [27] M. Streckenbach and G. Snelting. Pointsto for Java: A general framework and an emprirical comparison. Technical report, U. Passau, September [28] F. Tip and J. Palsberg. Scalable propagation-based call graph construction algorithms. In ACM Conference on Object-Oriented Programming Systems, Languages, and Applications, pages , [29] F. G. Wilkie and B. Kitchenham. Coupling measures and change ripples in C++ application software. Journal of Systems and Software, 52(2): , [30] P. Yu, T. Systa, and H. A. Muller. Predicting fault-proneness using oo metrics: An industrial case study. In European Conference on Software Maintenance and Reengineering, pages , 2002.
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
Quality prediction model for object oriented software using UML metrics
THE INSTITUTE OF ELECTRONICS, INFORMATION AND COMMUNICATION ENGINEERS TECHNICAL REPORT OF IEICE. UML Quality prediction model for object oriented software using UML metrics CAMARGO CRUZ ANA ERIKA and KOICHIRO
General Flow-Sensitive Pointer Analysis and Call Graph Construction
General Flow-Sensitive Pointer Analysis and Call Graph Construction Endre Horváth, István Forgács, Ákos Kiss, Judit Jász and Tibor Gyimóthy University of Szeged 4D Soft Ltd. Aradi Vértanúk tere 1. Soroksári
An Exception Monitoring System for Java
An Exception Monitoring System for Java Heejung Ohe and Byeong-Mo Chang Department of Computer Science, Sookmyung Women s University, Seoul 140-742, Korea {lutino, [email protected] Abstract. Exception
Object Oriented Design
Object Oriented Design Kenneth M. Anderson Lecture 20 CSCI 5828: Foundations of Software Engineering OO Design 1 Object-Oriented Design Traditional procedural systems separate data and procedures, and
Understanding Software Static and Dynamic Aspects
Understanding Software Static and Dynamic Aspects Welf Löwe IPD, Universität Karlsruhe PF 6980, 76128 Karlsruhe Germany [email protected] Andreas Ludwig IPD, Universität Karlsruhe PF 6980, 76128 Karlsruhe
Patterns in. Lecture 2 GoF Design Patterns Creational. Sharif University of Technology. Department of Computer Engineering
Patterns in Software Engineering Lecturer: Raman Ramsin Lecture 2 GoF Design Patterns Creational 1 GoF Design Patterns Principles Emphasis on flexibility and reuse through decoupling of classes. The underlying
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/
Application-only Call Graph Construction
Application-only Call Graph Construction Karim Ali and Ondřej Lhoták David R. Cheriton School of Computer Science, University of Waterloo Abstract. Since call graphs are an essential starting point for
Keywords Class level metrics, Complexity, SDLC, Hybrid Model, Testability
Volume 5, Issue 4, April 2015 ISSN: 2277 128X International Journal of Advanced Research in Computer Science and Software Engineering Research Paper Available online at: www.ijarcsse.com A Review of Static
A Scalable Technique for Characterizing the Usage of Temporaries in Framework-intensive Java Applications
A Scalable Technique for Characterizing the Usage of Temporaries in Framework-intensive Java Applications Bruno Dufour Dept of Computer Science Rutgers University [email protected] Barbara G. Ryder
Adaptive Context-sensitive Analysis for JavaScript
Adaptive Context-sensitive Analysis for JavaScript Shiyi Wei and Barbara G. Ryder Department of Computer Science Virginia Tech Blacksburg, VA, USA {wei, ryder}@cs.vt.edu Abstract Context sensitivity is
Percerons: A web-service suite that enhance software development process
Percerons: A web-service suite that enhance software development process Percerons is a list of web services, see http://www.percerons.com, that helps software developers to adopt established software
Java (12 Weeks) Introduction to Java Programming Language
Java (12 Weeks) Topic Lecture No. Introduction to Java Programming Language 1 An Introduction to Java o Java as a Programming Platform, The Java "White Paper" Buzzwords, Java and the Internet, A Short
CSCI 253. Object Oriented Programming (OOP) Overview. George Blankenship 1. Object Oriented Design: Java Review OOP George Blankenship.
CSCI 253 Object Oriented Design: Java Review OOP George Blankenship George Blankenship 1 Object Oriented Programming (OOP) OO Principles Abstraction Encapsulation Abstract Data Type (ADT) Implementation
PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions. Outline. Performance oriented design
PART IV Performance oriented design, Performance testing, Performance tuning & Performance solutions Slide 1 Outline Principles for performance oriented design Performance testing Performance tuning General
Composing Concerns with a Framework Approach
Composing Concerns with a Framework Approach Constantinos A. Constantinides 1,2 and Tzilla Elrad 2 1 Mathematical and Computer Sciences Department Loyola University Chicago [email protected] 2 Concurrent
A Practical Blended Analysis for Dynamic Features in JavaScript
A Practical Blended Analysis for Dynamic Features in JavaScript Shiyi Wei Barbara G. Ryder Department of Computer Science Virginia Tech wei, [email protected] ABSTRACT The JavaScript Blended Analysis Framework
Structural Design Patterns Used in Data Structures Implementation
Structural Design Patterns Used in Data Structures Implementation Niculescu Virginia Department of Computer Science Babeş-Bolyai University, Cluj-Napoca email address: [email protected] November,
II. TYPES OF LEVEL A.
Study and Evaluation for Quality Improvement of Object Oriented System at Various Layers of Object Oriented Matrices N. A. Nemade 1, D. D. Patil 2, N. V. Ingale 3 Assist. Prof. SSGBCOET Bhusawal 1, H.O.D.
Exploiting Dynamic Information in IDEs Eases Software Maintenance
Exploiting Dynamic Information in IDEs Eases Software Maintenance David Röthlisberger Software Composition Group, University of Bern, Switzerland [email protected] Abstract The integrated development
Program Analysis Techniques for Method Call Devirtualization in Object-Oriented Languages
Program Analysis Techniques for Method Call Devirtualization in Object-Oriented Languages Sander Sõnajalg December 7, 2009 Abstract In an object-oriented language, a call to an instance method generally
Comp 411 Principles of Programming Languages Lecture 34 Semantics of OO Languages. Corky Cartwright Swarat Chaudhuri November 30, 20111
Comp 411 Principles of Programming Languages Lecture 34 Semantics of OO Languages Corky Cartwright Swarat Chaudhuri November 30, 20111 Overview I In OO languages, data values (except for designated non-oo
A Thread Monitoring System for Multithreaded Java Programs
A Thread Monitoring System for Multithreaded Java Programs Sewon Moon and Byeong-Mo Chang Department of Computer Science Sookmyung Women s University, Seoul 140-742, Korea [email protected], [email protected]
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
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
2. THE ALGORITHMS. 2.1 Previous Algorithms. 2.1.1 Name-Based Resolution (RA)
Scalable Propagation-Based Call Graph Construction Algorithms Frank Tip IBM T.J. Watson Research Center P.O. Box 704 Yorktown Heights, NY 10598 [email protected] Jens Palsberg Dept. of Computer Science
Simulating the Structural Evolution of Software
Simulating the Structural Evolution of Software Benjamin Stopford 1, Steve Counsell 2 1 School of Computer Science and Information Systems, Birkbeck, University of London 2 School of Information Systems,
Fundamentals of Java Programming
Fundamentals of Java Programming This document is exclusive property of Cisco Systems, Inc. Permission is granted to print and copy this document for non-commercial distribution and exclusive use by instructors
sql-schema-comparer: Support of Multi-Language Refactoring with Relational Databases
sql-schema-comparer: Support of Multi-Language Refactoring with Relational Databases Hagen Schink Institute of Technical and Business Information Systems Otto-von-Guericke-University Magdeburg, Germany
REST Client Pattern. [Draft] Bhim P. Upadhyaya ABSTRACT
REST Client Pattern [Draft] Bhim P. Upadhyaya EqualInformation Chicago, USA [email protected] ABSTRACT Service oriented architecture (SOA) is a common architectural practice in large enterprises. There
Applying Design Patterns in Distributing a Genetic Algorithm Application
Applying Design Patterns in Distributing a Genetic Algorithm Application Nick Burns Mike Bradley Mei-Ling L. Liu California Polytechnic State University Computer Science Department San Luis Obispo, CA
Java 6 'th. Concepts INTERNATIONAL STUDENT VERSION. edition
Java 6 'th edition Concepts INTERNATIONAL STUDENT VERSION CONTENTS PREFACE vii SPECIAL FEATURES xxviii chapter i INTRODUCTION 1 1.1 What Is Programming? 2 J.2 The Anatomy of a Computer 3 1.3 Translating
Integrating Formal Models into the Programming Languages Course
Integrating Formal Models into the Programming Languages Course Allen B. Tucker Robert E. Noonan Computer Science Department Computer Science Department Bowdoin College College of William and Mary Brunswick,
Dsc+Mock: A Test Case + Mock Class Generator in Support of Coding Against Interfaces
Dsc+Mock: A Test Case + Mock Class Generator in Support of Coding Against Interfaces Mainul Islam, Christoph Csallner Computer Science and Engineering Department University of Texas at Arlington Arlington,
THE IMPACT OF INHERITANCE ON SECURITY IN OBJECT-ORIENTED DATABASE SYSTEMS
THE IMPACT OF INHERITANCE ON SECURITY IN OBJECT-ORIENTED DATABASE SYSTEMS David L. Spooner Computer Science Department Rensselaer Polytechnic Institute Troy, New York 12180 The object-oriented programming
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,
Gadget: A Tool for Extracting the Dynamic Structure of Java Programs
Gadget: A Tool for Extracting the Dynamic Structure of Java Programs Juan Gargiulo and Spiros Mancoridis Department of Mathematics & Computer Science Drexel University Philadelphia, PA, USA e-mail: gjgargiu,smancori
A SYSTEMATIC APPROACH FOR COMPONENT-BASED SOFTWARE DEVELOPMENT
A SYSTEMATIC APPROACH FOR COMPONENT-BASED SOFTWARE DEVELOPMENT Cléver Ricardo Guareis de Farias, Marten van Sinderen and Luís Ferreira Pires Centre for Telematics and Information Technology (CTIT) PO Box
Java Application Developer Certificate Program Competencies
Java Application Developer Certificate Program Competencies After completing the following units, you will be able to: Basic Programming Logic Explain the steps involved in the program development cycle
CompuScholar, Inc. Alignment to Utah's Computer Programming II Standards
CompuScholar, Inc. Alignment to Utah's Computer Programming II Standards Course Title: TeenCoder: Java Programming Course ISBN: 978 0 9887070 2 3 Course Year: 2015 Note: Citation(s) listed may represent
Modernized and Maintainable Code. Frank Weil, Ph.D. UniqueSoft, LLC
Modernized and Maintainable Code Frank Weil, Ph.D. UniqueSoft, LLC UniqueSoft is a provider of next-generation software development tools and services specializing in modernizing legacy software using
A First Set of Design Patterns for Algorithm Animation
Fifth Program Visualization Workshop 119 A First Set of Design Patterns for Algorithm Animation Guido Rößling CS Department, TU Darmstadt Hochschulstr. 10 64289 Darmstadt, Germany [email protected] Abstract
History OOP languages Year Language 1967 Simula-67 1983 Smalltalk
History OOP languages Intro 1 Year Language reported dates vary for some languages... design Vs delievered 1957 Fortran High level programming language 1958 Lisp 1959 Cobol 1960 Algol Structured Programming
EVALUATING METRICS AT CLASS AND METHOD LEVEL FOR JAVA PROGRAMS USING KNOWLEDGE BASED SYSTEMS
EVALUATING METRICS AT CLASS AND METHOD LEVEL FOR JAVA PROGRAMS USING KNOWLEDGE BASED SYSTEMS Umamaheswari E. 1, N. Bhalaji 2 and D. K. Ghosh 3 1 SCSE, VIT Chennai Campus, Chennai, India 2 SSN College of
gprof: a Call Graph Execution Profiler 1
gprof A Call Graph Execution Profiler PSD:18-1 gprof: a Call Graph Execution Profiler 1 by Susan L. Graham Peter B. Kessler Marshall K. McKusick Computer Science Division Electrical Engineering and Computer
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
Towards a Framework for Generating Tests to Satisfy Complex Code Coverage in Java Pathfinder
Towards a Framework for Generating Tests to Satisfy Complex Code Coverage in Java Pathfinder Matt Department of Computer Science and Engineering University of Minnesota [email protected] Abstract We present
A Framework for Dynamic Software Analysis & Application Performance Monitoring
A Framework for Dynamic Software Analysis & Application Performance Monitoring Dr. Ashish Oberoi 1, Pallavi 2 1 (Cse, / M.M Engineering College, India) 2 (Cse, / M.M Engineering College, India) Abstract
Software Engineering
Software Engineering Lecture 06: Design an Overview Peter Thiemann University of Freiburg, Germany SS 2013 Peter Thiemann (Univ. Freiburg) Software Engineering SWT 1 / 35 The Design Phase Programming in
KITES TECHNOLOGY COURSE MODULE (C, C++, DS)
KITES TECHNOLOGY 360 Degree Solution www.kitestechnology.com/academy.php [email protected] [email protected] Contact: - 8961334776 9433759247 9830639522.NET JAVA WEB DESIGN PHP SQL, PL/SQL
Six Strategies for Building High Performance SOA Applications
Six Strategies for Building High Performance SOA Applications Uwe Breitenbücher, Oliver Kopp, Frank Leymann, Michael Reiter, Dieter Roller, and Tobias Unger University of Stuttgart, Institute of Architecture
Analysis of Object Oriented Software by Using Software Modularization Matrix
Analysis of Object Oriented Software by Using Software Modularization Matrix Anup 1, Mahesh Kumar 2 1 M.Tech Student, 2 Assistant Professor, Department of Computer Science and Application, RPS College,
The Command Dispatcher Pattern
The Command Dispatcher Pattern Can also be called: Command Evaluator Pattern. Benoit Dupire and Eduardo B Fernandez {[email protected], [email protected]} Department of Computer Science and Engineering.
Keywords: Regression testing, database applications, and impact analysis. Abstract. 1 Introduction
Regression Testing of Database Applications Bassel Daou, Ramzi A. Haraty, Nash at Mansour Lebanese American University P.O. Box 13-5053 Beirut, Lebanon Email: rharaty, [email protected] Keywords: Regression
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
Definitions. Software Metrics. Why Measure Software? Example Metrics. Software Engineering. Determine quality of the current product or process
Definitions Software Metrics Software Engineering Measure - quantitative indication of extent, amount, dimension, capacity, or size of some attribute of a product or process. Number of errors Metric -
Evaluating OO-CASE tools: OO research meets practice
Evaluating OO-CASE tools: OO research meets practice Danny Greefhorst, Matthijs Maat, Rob Maijers {greefhorst, maat, maijers}@serc.nl Software Engineering Research Centre - SERC PO Box 424 3500 AK Utrecht
COMP 356 Programming Language Structures Notes for Chapter 10 of Concepts of Programming Languages Implementing Subprograms.
COMP 356 Programming Language Structures Notes for Chapter 10 of Concepts of Programming Languages Implementing Subprograms 1 Activation Records activation declaration location Recall that an activation
The Concern-Oriented Software Architecture Analysis Method
The Concern-Oriented Software Architecture Analysis Method Author: E-mail: Student number: Supervisor: Graduation committee members: Frank Scholten [email protected] s0002550 Dr. ir. Bedir Tekinerdoǧan
How To Calculate Class Cohesion
Improving Applicability of Cohesion Metrics Including Inheritance Jaspreet Kaur 1, Rupinder Kaur 2 1 Department of Computer Science and Engineering, LPU, Phagwara, INDIA 1 Assistant Professor Department
What is a life cycle model?
What is a life cycle model? Framework under which a software product is going to be developed. Defines the phases that the product under development will go through. Identifies activities involved in each
Static detection of C++ vtable escape vulnerabilities in binary code
Static detection of C++ vtable escape vulnerabilities in binary code David Dewey Jonathon Giffin School of Computer Science Georgia Institute of Technology ddewey, [email protected] Common problem in C++
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,
BUSINESS RULES CONCEPTS... 2 BUSINESS RULE ENGINE ARCHITECTURE... 4. By using the RETE Algorithm... 5. Benefits of RETE Algorithm...
1 Table of Contents BUSINESS RULES CONCEPTS... 2 BUSINESS RULES... 2 RULE INFERENCE CONCEPT... 2 BASIC BUSINESS RULES CONCEPT... 3 BUSINESS RULE ENGINE ARCHITECTURE... 4 BUSINESS RULE ENGINE ARCHITECTURE...
Assignment # 2: Design Patterns and GUIs
CSUS COLLEGE OF ENGINEERING AND COMPUTER SCIENCE Department of Computer Science CSc 133 Object-Oriented Computer Graphics Programming Spring 2014 John Clevenger Assignment # 2: Design Patterns and GUIs
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
Compiling Object Oriented Languages. What is an Object-Oriented Programming Language? Implementation: Dynamic Binding
Compiling Object Oriented Languages What is an Object-Oriented Programming Language? Last time Dynamic compilation Today Introduction to compiling object oriented languages What are the issues? Objects
Variability in Service-Oriented Systems: An Analysis of Existing Approaches
Variability in -Oriented Systems: An Analysis of Existing Approaches Holger Eichelberger and Christian Kröher and Klaus Schmid 1 Software Systems Engineering, Institute of Computer Science, University
Karunya University Dept. of Information Technology
PART A Questions 1. Mention any two software process models. 2. Define risk management. 3. What is a module? 4. What do you mean by requirement process? 5. Define integration testing. 6. State the main
Systems Integration: Co C mp m onent- t bas a e s d s o s ftw ft a w r a e r e ngin i eeri r n i g
Systems Integration: Component-based software engineering Objectives To explain that CBSE is concerned with developing standardised components and composing these into applications To describe components
The «SQALE» Analysis Model An analysis model compliant with the representation condition for assessing the Quality of Software Source Code
The «SQALE» Analysis Model An analysis model compliant with the representation condition for assessing the Quality of Software Source Code Jean-Louis Letouzey DNV IT Global Services Arcueil, France [email protected]
AP Computer Science Java Subset
APPENDIX A AP Computer Science Java Subset The AP Java subset is intended to outline the features of Java that may appear on the AP Computer Science A Exam. The AP Java subset is NOT intended as an overall
