diva portalmdh.diva-portal.org/smash/get/diva2:1414730/fulltext01.pdf · 2020. 3. 15. ·...

317
MÄLARDALEN UNIVERSITY SCHOOL OF INNOVATION, DESIGN AND ENGINEERING VÄSTERÅS, SWEDEN Thesis for the Degree of Master of Science (60 credits) in Computer Science with Specialization in Software Engineering 30.0 credits AUTOMATING INTEGRATION-LEVEL TEST CASE GENERATION FOR OBJECT- ORIENTED .NET APPLICATIONS Mehdi Qorbanpur [email protected] Examiner: Dr. Antonio Cicchetti Mälardalen University, Västerås, Sweden Supervisor: Dr. Mehrdad Saadatmand Mälardalen University, Västerås, Sweden Company Supervisor: Dr. Mehrdad Saadatmand RISE SICS, Västerås, Sweden Jan 15, 2020

Upload: others

Post on 17-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

MÄLARDALEN UNIVERSITY

SCHOOL OF INNOVATION, DESIGN AND ENGINEERING VÄSTERÅS, SWEDEN

Thesis for the Degree of Master of Science (60 credits) in Computer Science with Specialization in Software Engineering 30.0 credits

AUTOMATING INTEGRATION-LEVEL TEST CASE GENERATION FOR OBJECT-

ORIENTED .NET APPLICATIONS

Mehdi Qorbanpur [email protected]

Examiner: Dr. Antonio Cicchetti Mälardalen University, Västerås, Sweden

Supervisor: Dr. Mehrdad Saadatmand Mälardalen University, Västerås, Sweden

Company Supervisor: Dr. Mehrdad Saadatmand RISE SICS, Västerås, Sweden

Jan 15, 2020

Page 2: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

1

Abstract In spite of introducing many techniques and tools, nowadays still most of software testing is done manually. This means spending more cost and time and increasing the possibility of bugs. In addition, by the emergence of new distributed development environments and agile methodologies in recent years, the process of software development has considerably speeded-up, and as a consequence, the concept of DevOps including continuous integration and continuous delivery (CI/CD) has become important more and more. In this context, automatically generation and execution of test cases, specially at integration level has been getting software specialists’ attention more than before; so as to improve the scalability of test process. While many tools have been created for automating Unit Testing in industry, the Integration Testing automation, because of its complexity, has always been a challenge in software engineering and no automation tool has been used in industry for testing at this level. In this thesis, an automated solution for integration-level test-case generation for .Net application was provided. Its test-case generation is technically based on a combination of data-flow analysis and object-oriented concepts such as coupling, and it was implemented by the newly presented .Net compiler named Roslyn. At the next step, the quality of generated test cases was evaluated by examining the solution on a couple of C# projects as benchmarks and confronting the results to 10 mostly used Integration-Level Mutation Operators (, which are specific to Object-Oriented applications). Despite some limitations such as not taking all object-oriented aspects of tested code (e.g. inheritance) into account in the implementation, by considering the reflection of most interface mutations on the generated test paths, and the average execution times, the proposed algorithm showed promising potentials of acceptable coverage on integration-specific parts of code with a reasonable performance. At the end, based on Coupling-Based Analysis, and applicable Roslyn features, a comprehensive automated integration testing (both generation and execution) are proposed as future works.

Page 3: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

2

Table of Contents

1. Introduction ......................................................................................................... 3

2. Background .......................................................................................................... 6

2.1. Data Flow Analysis ............................................................................................................................. 6 2.2. Coupling-based Testing .................................................................................................................... 7

2.2.1. Coupling-based testing definitions ............................................................................ 8 2.2.2. Coupling-based testing criteria ................................................................................... 9

2.3. Interface Mutation .......................................................................................................................... 10 2.4. Roslyn API ............................................................................................................................................ 12

3. Related Work ..................................................................................................... 14

3.1. Interface Mutation Tools .............................................................................................................. 14 3.2. Integration-level test case for OO applications – A data flow based approach .. 15 3.3. Integration-level test case for .Net applications using Roslyn APIs ......................... 16 3.4. What is missing ................................................................................................................................. 16

4. Problem Formulation ........................................................................................ 17

5. Method ................................................................................................................ 18

6. Ethical and Societal Considerations ................................................................ 20

7. Contribution ....................................................................................................... 21

8. Results ................................................................................................................. 27

9. Discussion ........................................................................................................... 29

10. Conclusions ......................................................................................................... 30

11. Future Work ...................................................................................................... 31

12. References ........................................................................................................... 33

13. Appendix ............................................................................................................. 35

13.1. Primary Test Paths (from old input) ...................................................................................... 35 13.2. ScriptCs test paths ........................................................................................................................... 38 13.3. Wyam test paths ............................................................................................................................... 55 13.4. Log4Net test paths (Partial) ....................................................................................................... 83

Page 4: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

3

1. Introduction Test automation can cause many benefits to the software development process, allowing testers to test more test cases with less effort and higher accuracy. Reusability is another advantage of automatic testing; i.e. as the scripts are reusable: You don’t need new scripts all the time, even if the version of the OS on the device changes, which allows you to redo the test exactly the same, without forgetting any steps. In Continuous Integration/Continuous Delivery (CI/CD) pipeline in agile software development, most of the changes are small and test automation is able to cover them, the team can continuously deliver changes which have already been tested enough. Thus, the importance of test automation is even more in such environments because they can help in quick turnaround for QA and can ensure a quality product at any given time. Industrial software applications are usually divided into different modules, which are developed by different teams of developers. When a module is developed by a developer, it is tested in isolation through Unit Testing to be validated. As the development of other modules is done, they are integrated with each other, and tested through Integration Testing, to discover their interaction issues. Unit testing is about the module’s specification, and its goal is to test each unit separately to ensure that it is working as expected. It mainly focuses on the testing the functionality of individual units and is not aimed to uncover the issues that arise when different modules are interacting with each other. However, although components can be successfully tested separately in isolation, but when they are integrated, they may conflict with each other and fail to provide the expected behaviors and results. Therefore, as the components get integrated, their interactions need to be tested. At the Integration level, automatic testing can be considered as a daily build, an integrated environment can be used to test the features as they are developed using the concept of continuous integration. Here, automation can help in reducing the number of iterations. This process ensures that the emphasis remains on testing new features. Unlike Unit Testing, for which, there have been significant amounts of research done in the literature, as well as automated solutions and tools (such as JUnit, xUnit, NUnit, etc.), most of Integration Testing techniques are either manual or hard to apply for industrial context because of scalability issues, especially for object-oriented applications. This lack of industrial solutions for Integration Testing is the main motivation of our work. The importance of modularity and integration testing has been recognized and stated by USA’s Federal Aviation Authority (FAA) by imposing requirements on structural coverage analysis of software that ‘the analysis should confirm the data coupling and control coupling between the code components’ (RTCA, 1992, p. 33) [3]. As the systems’ complexity grows, understanding and designing their behavior just in terms of structure is not feasible. By emphasizing on reusability and modularity, object-oriented paradigms guide us to design systems upon smaller previously-designed units (Classes, Components, Subsystems, etc.), which have a state associated with them. So, integration is included in the nature of OO design. Integration testing, therefore, should focus on the aggregation of software constituents while maintaining their correct behavior. By using the concepts of methods’ sequence calls and Data-Usage-Matrix (DUM) Imran Bashir and Raymod A. Paul in [5] proposed novel ways of performing integration testing at the various integration levels mandated by object-oriented software engineering processes. While data flow based analysis can be done on any type of SUT, in the context of object-oriented software development, which is based on modularity and reusing principles, the integration testing can leverage the benefits of the concepts such as modularity or coupling. By modularity, the software components can be designed, implemented, and tested independently, which is usually done by programmers during unit and module testing. Coupling measures of the degree of interdependence between the different units (classes, components, modules, subsystems, etc.) of the system.

Page 5: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

4

Modularity principles deal with the structure and evolution of a software system. Since modularizing a system means grouping its elements based on their connecting properties, the principles are closely related to the relationships of code entities. We will use the general term coupling to refer to such a relationship. In object-oriented programs, a method can call another method, a class may extend another class, or a class aggregates objects of another class—all this creates a direct dependency between two classes. These static structural code dependencies are most frequently used when analyzing or leveraging code coupling. In this field, the term code coupling differs from the term coupling as used in the principle of low coupling and high cohesion; i.e. in coupling-based testing context, this term is used in general for relationships, but in the object-oriented principle of low coupling and high cohesion, it only denotes cross-module relationships. The coupling-based testing criteria are based on the design and data structures of the program, and on the data flow between the program units. Thus, data flow definitions are needed to support coupling testing criteria definitions. As this approach is also used in this study, we will go deeper into its details in section 2.2 of background. Mutation analysis is a fault-based approach that was originally introduced in [Budd, 1980; DeMillo et al., 1978], and is a well-known technique for assessing the quality of a given test suite or testing strategy. There, artificial faults are injected methodically into a SUT and the corresponding test sets or testing strategies are evaluated with respect to their success in revealing these faults. Because of its systematic approach, mutation analysis can be regarded as an unbiased technique, which leads, to reproducible results [17]. These techniques are indeed used for -as said- evaluating the test suites, not directly the SUT itself. The general idea is after generating effective bug-injected versions of the program, which are called mutants, we observe if they produce wrong outputs from the purposed set of test cases. The way of applying mutation analysis is specified by mutation operators and the resulting faulty versions of the SUT are referred to as mutants. In spite of their effectiveness, it is difficult to generate integration mutants that create an error state in one component with certain assurances that this error state will affect computations in some other components, which leads to some challenges in applying mutation techniques on integration-level testing. Because of the specific characteristics of the OO languages, the mutation operators should handle new types of faults that emerge from OO-specific features (e.g. user-defined classes and references to them, as well as inheritance, and polymorphic relationships among components). For these purposes, a set of class mutation operators [22, 10, 3] has been developed for Interface Mutation, which unlike traditional mutation, demands the fault injections to be applied only at the integration points between units (based on coupling definitions) [18]. Beyond the relevance of the mutation operators, the two main weaknesses of mutation analysis are first, the cost and second, equivalence decision. Mutation analysis is generally very expensive: lots of mutants are produced. However, as this approach is also a part of the contribution (evaluation part), it will be discussed in more details in section 2.3 of background. In 2016 Microsoft provided an API layer that mirrors a traditional compiler pipeline, which exposes the C# and Visual Basic compiler’s code analysis. This enables developers to leverage the information gathered by compiler during code analysis, in the form of Syntax Tree, and Symbol Tree for extracting lexical, syntactic structure, and semantic model of source code [2]. These features are so applicable in the static analysis needed for coupling-based techniques and are going to be used in this study. More details about Roslyn functionalities, and how they can be used in this work are discussed further in Method section. In this thesis, after a considerable amount of state-of-the-art/practice literature study in the context of integration testing, and investigating the usages and limitations of the most common-used approaches, we chose the dynamic data-flow analysis technique discussed in [1] and [14] a good candidate for automated integration-level abstract test-case generation for object-oriented programs. Then, the first

Page 6: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

5

step was implementing the algorithm (after some improvements such as adding call-coupling analysis besides the parameter-coupling to enrich the output test paths) by the newly provided open-source .Net compiler API (named Roslyn). After the implementation and testing the solution was done, the next step was selecting some sample projects as benchmarks for generating test paths. After generating integration-level test-cases for those .NET object-oriented applications, an evaluation was performed on the quality of generated abstract test cases. The test-cases’ quality evaluation method is based on measuring the percentage of interface mutations covered by the generated test paths. Confronting the test paths which were generated from exercising the code on benchmarks, with integration-level mutation operators, together with the effective features of Roslyn API showed a good potential of generating even concrete test cases at integration level. This general solution is presented at the end of thesis, demonstrating how a comprehensive solution can be produced for automatic integration-level test-case generation and execution for .Net OO programs.

Page 7: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

6

2. Background In this section, among the introduced approaches, the theoretical bases of those which will be used in the contribution are presented in more details.

2.1. Data Flow Analysis

Generally, Static Program Analysis is based on the formal semantics of the program, which can be fully automated by leveraging compiler features. Among different kinds of this approach, Data Flow Analysis is routinely used in compilers, to detect compile-time syntax bugs, detect potential run-time bugs (such as unassigned variables), and to find opportunities for optimizing the code. This approach is based on the data flow relations between statements in programs (by using Control-Flow Graph (CFG) representation of program). After extracting the CFG, the associations between the definitions and uses of the variables is produced, which is needed to be covered in a given coverage criterion. Finally, the test suite is created using a finite number of paths from previous step. Data-flow testing is a white box testing technique that by tracing the lifecycle of a piece of data (e.g. a variable) and looking out for its inappropriate usage during definition (declaration/assignment), usages, and disposal (or undefinition) can be used to detect coding errors or potential bugs such as improper use of data. A famous example of the usage of this technique is indicating the usage of a variable after its disposal, which is certainly a bug to be addressed. Figure 2.1 shows the three basic actions on variables, acting as triggers to state transitions of variables and their effects:

Figure 2.1: Basic actions on variables for data flow analysis

Regardless of the approach type, constructing a control flow graph of the code is the first step of any data-flow based technique for examining the potential erroneous patterns. It is a directed graph where the nodes represent the program statements such as definition, computation and predicates while the edges represent the flow of control between program statements. In this part, some basic definitions from data flow analysis are provided which, most of them are taken from White (1987):

• A basic block: A maximum sequence of program statements such that if any one statement of the block is executed, then all statements in the block are executed.

• A control flow graph (CFG): A directed graph that represents the structure of the program. Nodes are basic blocks, and edges represent potential control flow from node to node.

• A def (definition): A location in the program where a value for a variable is stored into memory (assignment, input, etc.).

• A use: A location where a variable’s value is accessed; either in a computation, as a functional parameter, in an output statement, or in a decision.

Page 8: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

7

• A def-clear path for a variable X through the CFG: A sequence of nodes that do not contain a definition of X.

• An actual parameter: Located in the Caller, and its value is passed to Callee. • A formal parameter: Located in the Callee, and its value is assigned from Caller. • The interface between two units: Is the mapping of actual to formal parameters

Generally, data flow analysis techniques are grouped into two categories: static or dynamic. The static analysis algorithms can detect errors within the program, without executing it, but do not work for those parts of the code which contain individual array elements, pointers, reference variables, or reference types, in which the index of corresponding variable data is generated dynamically during execution hence we can’t guarantee what state it has in compile time [19]. Another weakness of static analysis algorithms is that they might denote a certain piece of code to be anomalous which is never executed and hence not completely anomalous [13]. On the other hand, dynamic analysis algorithms can tackle those challenges, but are only performed on those parts of the program which are accessed during execution. Thus, static and dynamic analysis are considered as complementary approaches. In dynamic analysis, in order to uncover possible bugs for a piece of data during the execution of the code, based on the traces of every definition of it to each of its usages and also every use of it to each of its definitions, some test cases are created. Various strategies are employed for the creation of the test cases, which follow the basic approach proposed by Huang [21]. In his approach, the program under test is instrumented with instructions, called probes, to report the actions that are performed upon the program’s variables to detect probable data flow anomalies. There have been dynamic data analysis approaches for both structured (i.e. procedural or non-object-oriented) and object-oriented programs, which will be discussed in more details in section 3 (related work sect).

2.2. Coupling-based Testing

While object-oriented guidelines facilitate the process of systems’ analysis, design, and implementation, testing of these programs is complicated by the fact that software being tested is often constructed from a combination of previously written, off-the-shelf components with some new components developed to satisfy new requirements, i.e. the source code of the previously written components is often unavailable, yet objects in the new components will interoperate via messages with objects in the existing components. The structural characteristics and new features in OO programs, such as encapsulation, inheritance, and polymorphism change the requirements for mutation testing. A major difference for testers is that OO software changes the levels at which testing is performed, which in [10] has been classified four levels of: (1) intra-method; (2) inter-method; (3) intra-class; and (4) inter-class. In [8], Z. Jin and A. J. Offutt divided coupling types into four groups, which are defined specifically for testing purposes. The terminologies come from Constantine and Yourdon (1979), Page-Jones (1980), and Offutt et al. (1993):

• Call coupling occurs when A calls B or B calls A but there are no parameters, common variable references, or common references to external media between A and B.

• Parameter coupling refers to all parameter passing. Occurs when some record or scalar variable in A is passed as an actual parameter to B and is used in a computation or in a predicate; Or when a formal parameter in A is passed to B as an actual parameter, and B subsequently passes the corresponding formal parameter to another unit without B having accessed or changed the variable.

• Shared data coupling refers to procedures that both refer to the same data objects. • External device coupling refers to procedures that both access the same external medium.

Page 9: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

8

Besides automation and scalability, deciding when to stop testing is another important aspect of a testing approach. Usually, the entire domain of software systems is effectively infinite, and cannot be entirely searched. Thus, Adequacy Criteria are defined for test designers and testers for this purpose. Integration testing must be guided by the modularization, and at a higher level of abstraction than unit testing; i.e. by assuming that the units under test had been successfully passed isolated unit tests as atomic building blocks and focusing on their interconnections because otherwise the integration testing would not be a meaningful and applicable process. The coupling-based testing criteria described in [10] are based on the design and data structures of the program, and on the data flow between the program units. Thus, data flow definitions are needed to support coupling testing criteria definitions. Some of these basic definitions have been described in 2.1. Coupling-based specific definitions are provided in the following section. Then the kinds of testing that should be done on the coupling types are described, and then four different test criteria are defined, each of which requires a different amount of testing.

2.2.1. Coupling-based testing definitions Z. Jin and A. J. Offutt (1998) presented several definitions by which the coupling-based testing criteria can be defined formally:

• P is an arbitrary unit in the system • GP = (NP, EP) is the control-flow graph, where NP is the set of nodes in P and EP is the set

of edges. • VP is the set of all variables referenced in P. • def(P, V) is the set of nodes in unit P that contain a definition of a variable V, • use(P, V) is the set of nodes in P that contain a use of V. • Call_site is a node in P1 from which P2 is called. • Call(P1, P2, call_site, x → y): TRUE if unit P1 calls P2 at call_site and actual parameter x is

mapped to formal parameter y. This is variable specific; if there is more than one parameter, they are analysed one at a time. The value is FALSE if there is no such call at the given call_site.

• Return(v): Nodes from which values for v are returned in a unit. Note that this includes explicit return statements as well as implicit returns at the end of units.

• Start(P): The first node in P. It is assumed that there is one entry point. • Coupling-def: A node that contains a definition that can reach a use in another unit on at least

one execution path. There are three types of coupling-defs: 1. Last-def-before-call: The set of nodes that define x and for which there is a def-clear path

from the node to the call_site in P. More formally: lbc-def(P, call_site, x) = {i, i ϵ NP | node i has a definition of variable x ˄ there is a def-clear path with respect to x from node i to call_site}.

2. Last-def-before-return: When values are returned (e.g. through call-by-reference parameters or a return statement), then last-def-before-return is the set of nodes that define the returned variable y, and for which there is a def-clear path from the node to the return statement. This is formally defined as: lbr-def(P, y) = {j, j ϵ NP | y is defined in node j ˄ there is a def-clear path with respect to y from j to Return(y)}.

3. Shared-data-def: In the case of shared data coupling, coupling-def is defined as the set of nodes that define a non-local or global variable g in P1 that is used in P2, and for which there is a def-clear path from the def to the use. Note that it is not necessary that either P1 call P2 or that P1 call P2; the def-clear path can go through an arbitrary sequence of calls and returns. It is formally defined as:

Page 10: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

9

Shared-def(P1, P2, g) = {i, i ϵ NP1 | i ϵ def(P1, g) ˄ g is a non-local or global variable ˄ there is a def-clear path with respect to g from the definition in P1 to the use in P2}.

• Coupling-use: A node that contains a use that can be reached by a definition in another unit on at least one execution path. There are three types of coupling-uses: 1. First-use-after-call: In the case of call-by-reference parameters, first-use-aftercall is the

set of nodes i in P1 that have uses of x and for which there exists a def-clear path with no other uses between the call statement for P and these nodes. This is formally defined as: fac-use(P, call_site, x) = {i, i ϵ NP | node i has a use of variable x ˄ there are no other uses or defs between call_site and node i}.

2. First-use-in-callee: In the case of call-by-value parameters, first-use-in-callee is the set of nodes for which parameter y in P has a use, and there is at least one def-clear path with no other uses from the start statement to this use. This is formally defined as: fic-use(P, y) = {j, j ϵ NP | ((y has a C-use at node j) ˅ (y has an I-use on edge (i, j), i ϵ NP) ˅ (y has a P-use on edge (i, j), i ϵ NP)) ˄ there is a path with no other use or def of y between Start(P) and node j}.

3. Shared-data-use: In the case of shared data coupling, coupling-use is defined as the set of nodes that use a non-local or global variable x. This is defined as: Shared-use(P, g) = {i, i ϵ NP | i ϵ use(P, g) ˄ g is a non-local or global variable}.

• External-reference: In the case of external coupling, the pair of references (i, j) to the same external file is called an external-reference. It is defined as:

External-ref(i, j) = {(i, j), i, j ϵ P, i, j reference the same external file or device}. • Parameter coupling path. For each actual parameter x, and each last definition of x before a

call_site, there is a parameter coupling path from the last definition, to the call_site, and to each first use of the formal parameter y in P2. This is defined as:

o parameter-coupling(P1, P2, call_site, x, y) = {(i, j), i ϵ NP1, j ϵ NP2 | i ϵ lbc-def(P1, call_site, x) ˄ j ϵ fic-use(P2, y)}.

o If a parameter x is a call-by-reference, then there is also a parameter coupling path from each last definition before return of the formal parameter y in P2 to each first use after call of actual parameter x in P1. This is defined as: parameter-coupling(P1, P2, call_site, x, y) = {(j, i), i ϵ NP1, j ϵ NP2 | j ϵ lbr-def(P2, y) ˄ i ϵ fac-use(P1, call_site, x)}.

• Shared data coupling path. For each non-local or global variable g that is defined in P1 and used in P2, and each definition of g in P1, there is a shared data coupling path that is definition-clear with respect to g from the definition to each first use of g in P2. It is defined as: Shared-data-coupling(P1, P2, g) = {(i, j), i ϵ NP1, j ϵ NP2 | i ϵ shared-def(P1, P2, g) ˄ j ϵ shared-use(P2, g)}.

• External device coupling path. For each pair of references (i, j) to the same external device, an external device coupling path executes both i and j on the same execution path.

2.2.2. Coupling-based testing criteria The coupling-based testing criteria introduced by A. J. Offutt and Z. Jin (1998) are extensions of the standard data flow levels (Frankl and Weyuker, 1988). They are written in a general form, so that they can be applied to all three types of Parameter/Shared Data/External Device Coupling path defined in the previous section. As before, P1 and P2 are units in the software system.

• Call-coupling Criterion: All call_sites must be covered. • All-coupling-defs Criterion: For each coupling-def of each variable in P1, at least one coupling

path to at least one reachable coupling-use in P2 must be covered. • All-coupling-uses Criterion: For each coupling-def of each variable in P1, at least one

coupling path to all reachable coupling-uses in P2 must be covered.

Page 11: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

10

• All-coupling-paths Criterion: For each coupling-def of a variable x in P1, all coupling path to all reachable coupling-uses in P2 must be covered, i.e. all coupling paths must be covered. However, if there is a loop, in which the number of sub-paths becomes infinite, all-coupling-paths requires two test cases; one for the case when the loop body is not executed at all, and another that executes the loop body some arbitrary number of times. This technique depends on unique sets of nodes within the coupling paths.

The above testing criteria are written in their subsumption hierarchy order. For example, if and only if every test set satisfies All-coupling-uses criterion, then they satisfy All-coupling-defs criterion either.

2.3. Interface Mutation

As discussed in section 1.4.2, mutation testing is an approach for examining the test suite, not the SUT itself. I.e. by applying some change on the (source code or compilation outputs of the) SUT, so that without generating the compilation error, the logic of the program is changed, and then we can experiment the program on a set of test cases, we can observe if the deliberately injected faults are reflexed in the test results. The syntactic changes are based on some rules (or mutation operators). We suppose the mutants as being faults, although it is possible that the original program was faulty and the mutant is correct, or the mutant has no effect on the functional behavior of the program (equivalent). If the test set can kill all non-equivalent mutants, the test set is declared mutation-adequate [11]. Although it is possible to make multiple changes at a time (called higher-order mutants), most mutation systems recommend just one change (one-order mutants). The mutation score is the percentage of non-equivalent mutants killed. For a program P, let MT be the total number of mutants produced with respect to a particular fault model F. Let ME and MK be the number of equivalent and killed mutants. The mutation score of the test set T with respect to the fault model F is defined as: MS(P, T, F) = MK/(MT−ME) While at the unit level, testing is concentrated on verifying whether each unit performs its required function by focusing on the algorithmic aspects, the goal of integration testing is to put the units in their intended environment and exercise their interactions. “It is difficult to generate effective mutants that target integration tests only. Deciding where in the AUT’s code to apply mutation operators to target integration tests requires specific knowledge of how different components interact in applications. That is, an integration mutant should create an error state in one component with assurances that this error state will result in a failure in some other components. Generating mutants by applying mutation operators to statements and expressions whose values never reach integrated components leads to wasted time and effort and doing so increases the cost and reduces the effectiveness of mutation testing” [3]. Interface Mutation provides one such criterion. Regardless of the used programming language, mutation operators can be applied at three levels. (1) Unit level, in which the mutation operators are applied on individual program methods. (2) Integration level, which targets communication between two units. (3) Class level, which modifies multiple functions in a single class. As described in previous section, a major difference of testing the OO software is that we can define different levels of abstraction at which testing is performed. Another difference for these types of software is that an OO-specific mutation system has this possibility to extract information and execute programs from an OO standpoint (control, data, inheritance, and polymorphic relationships among system and user-defined classes). Most of these have focused on developing mutation operators rather than developing algorithms and techniques for implementing them in usable and efficient tools, together with some sets of class mutation operators that have been developed for this purpose. For describing Interface Mutation, four different non-mutually exclusive types of data exchange between units has been mentioned in [18], which can be summarized as these three kinds:

Page 12: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

11

• Parameters passing (by value or by reference, such as output parameters in some programming languages).

• Global variables passing. • Return values (as in return commands in C).

Similar to coupling based analysis definitions, for a function F, its interface is precisely defined by its formal parameters, the global variables it accesses, and the code it implements. The connection between units are defined by function calls. When applying Interface Mutation, unlike traditional mutation, the syntactic changes are made only at the interface related points or connections between units. Based on variables and expressions concerned with these types of data transfers, a collection of Interface mutation operators has been introduced, which will be discussed later in this section. Although the same concepts can be applied to a variety of languages, mutant operators’ implementation is dependent to the chosen programming. In this study, the Interface Mutation operator set applicable for the C# language is provided, first according to [18, 10], and then restricted to a more restricted set of operators mentioned in [3]. Table 1 lists Interface Mutation operators declared in [18]:

Table 1. Interface Mutation Operators

DirVarRepPar Replaces interface variable by each element of P DirVarRepGlo Replaces interface variable by each element of G DirVarRepLoc Replaces interface variable by each element of L DirVarRepExt Replaces interface variable by each element of E DirVarRepCon Replaces interface variable by each element of C DirVarRepReq Replaces interface variable by each element of R IndVarR,epPar Replaces non interface variable by each element of P IndVarRepGlo Replaces non interface variable by each element of G IndVarRepLoc Replaces non interface variable by each element of L IndVarRepExt Replaces non interface variable by each element of E IndVarRepCon Replaces non interface variable by each element of C IndVarRepReq Replaces non interface variable by each element of R DirVarIncDec Inserts/removes increment and decrement operations at interface variable uses IndVarIncDec Inserts/removes increment and decrement operations at non interface variable uses DirVarAriNeg Inserts arithmetic negation at interface variable uses IndVarAriNeg Inserts arithmetic negation at non interface variable uses DirVarLogNeg Inserts logical negation at interface variable uses IndVarLogNeg Inserts logical negation at non interface variable uses DirVarBitNeg Inserts bit negation at interface variable uses IndVarBitNeg Inserts bit negation at non interface variable uses RetStaDel Deletes return statement RetStaRep Replaces return statement CovAllNod Coverage of all nodes CovAllEdg Coverage of all edges ArgRepReq Replaces arguments by each element of R ArgStcAli Switches arguments of compatible type ArgStcDif Switches arguments of non compatible type ArgDel Remove argument ArgAriNeg Inserts arithmetic negation at arguments ArgLogNeg Inserts logical negation at arguments ArgBitNeg Inserts bit negation at arguments ArgIncDec Argument Increment and Decrement FunCalDel Removes function call

Page 13: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

12

This set of interface mutation operators was later reduced to a list of 10 more efficient operators by M. Grechanik and G. Devanla for developing jMINT in [3]. More details on the application of theses operators will be discussed in section 8. Since C# and Java have a very similar syntax, these operators with some minor changes (such as using base instead of super for ISK) were used as the basis of our evaluation in this study as well.

2.4. Roslyn API

In this part, based on the tutorial article of .NET Compiler Platform ([1]) a review of Roslyn is provided. Prior to Roslyn, compilers operated as black boxes which accepts source code as input and Upon compilation, either a binary is produced for successful compilation or error(s) when the compilation fails. Roslyn is the code name for the .NET compiler as a service offering, which in addition to the general source code compilation performed by compilers, provides “hook points” – events (such as parsing a constructor or a method or even a variable within the source code), through which subscribers (bespoke code or a code analyzer) can participate in the compilation process and by full access to the entire syntax tree and/or semantic table, obtain rich information about the input source code.

Figure 2.4.1. Relation between Workspace, host environment, and tools

Roslyn-based code analyzers are .NET libraries which can be developed in both C# and VB.NET. They can either be packaged as Visual Studio extensions1 or as NuGet packages2 which require no installation and apply only to the C# projects which depends on them. Roslyn SDK Preview includes the latest drafts of new language object models for code generation, analysis, and refactoring. The rest of this subsection provides a conceptual overview of Roslyn. Further details can be found in the walkthroughs and samples included in the SDK Preview.

1 https://msdn.microsoft.com/en-us/library/bb166030.aspx 2 https://www.nuget.org/

Page 14: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

13

By providing an API layer that mirrors a traditional compiler pipeline, Roslyn exposes the C# and Visual Basic compiler’s code analysis. This pipeline includes four phases, which are implemented as separate components and an object model is surfaced corresponding to each of those phases, that allows access to the information at that phase. In the first phase the source is tokenized and parsed into syntax that follows the language grammar, so it is called the parse phase. This phase is exposed as a syntax tree. In the second phase (the declaration phase), some named symbols are created from analysing the declarations from source and imported metadata. This phase is exposed as a hierarchical symbol table. In the third (bind) phase, those named symbols are matched to identifiers in the code. This phase is exposed as a model that exposes the result of the compiler’s semantic analysis. Finally, in the emit phase, an assembly is emitted from building up all the information built up by the compiler. This phase is exposed as an API that produces IL byte codes.

Figure 2.4.1. C#/VB.Net Compiler Pipelines vs. Roslyn Compiler API These components together as a single end-to-end whole build up C# or VB compilers. The language services that are used to power the C# and VB experiences in Visual Studio vNext have been rebuilt by the public Compiler APIs to ensure that they are enough for building world-class IDE features. For example, features such as the code outlining, and formatting features use the syntax trees, while the Object Browser and navigation features need more analytical information from the code to operate, so they use the symbol table. More complicated features such as refactoring and Go to Definition which require more comprehensive information of the entire project’s structure use the semantic model. There are also some features (such as Edit) that need accessing to the information of all phases. Through the “Roslyn” End-User Preview, some of these experiences may have been embedded into Visual Studio 2013. Independently of Visual Studio without requiring the End-User Preview, this preview is required in order to build and test applications built on top of Roslyn SDK meant for integration into Visual Studio though Roslyn APIs can be used in your own applications. As the open source C# compiler API has been provided just a few years ago, most of the state-of-practice integration test tools are in Java rather than C#. Since the suggested comprehensive solution for integration test automation of .Net programs uses a combination of data flow, coupling, and mutation techniques, this section includes some elite state-of-the-art/practice works in each of these contexts. However, as the open source C# compiler API has been provided just a few years ago, most of the state-of-practice integration test tools are in Java rather than C#. However, since Java and C# are equally full object-oriented languages with a very similar syntax, it makes sense to leverage such solutions in this study.

Page 15: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

14

3. Related Work In this section the placement of our work in a context and comparing it with previously published works and results in the field, to create an expectation of the contribution is discussed. Together with background, this section is intended to introduce "state of the art" / "state of practice", deficiencies, and the importance of the task and what the work should be compared with. Some software faults that happen in the interfaces between units cannot be detected during unit testing; Thus, specific tests must be designed to detect integration-specific faults.

3.1. Interface Mutation Tools Since interface mutation techniques have been used as a part of this study (the evaluation part), a couple of mutation-based methods/tools are discussed in the remainder of this section. In 2004, Y.-S. Ma, J. Offutt, and Y. R. Kwon presented a method to reduce the execution cost of mutation testing for OO programs by using two key technologies, mutant schemata generation (MSG) and bytecode translation. This method adapted the existing MSG method for mutants that change the program behavior and used bytecode translation for mutants that change the program structure. A key advantage was in performance: only two compilations were required and both the compilation and execution time for each were greatly reduced. The tool described there implements both inter- and intra-class mutation operators. It primarily focuses on studying the inter-class, or OO, operators. Much is already known about intraclass (statement level) mutation operators. Later, in [10], this set of operators was updated by the following list of operators specified for Java programming language, which were used in developing µJava mutation generator application:

Table 2. Interface Mutation Operators - µJava Name Description Type AMC Access modifier change Structural IHD Hiding variable deletion Structural IHI Hiding variable insertion Structural IOD Overriding method deletion Structural IOP Overriding method calling position change Behavioural IOR Overriding method rename Structural ISK super key word deletion Behavioural IPC Explicit call of a parent’s constructor deletion Structural PNC new method call with child class type Behavioural PMD Instance variable declaration with parent class type Behavioural PPD Parameter variable declaration with child class type Behavioural PRV Reference assignment with other comparable type Behavioural OMR Overloading method contents change Behavioural OMD Overloading method deletion Behavioural OAO Argument order change Behavioural OAN Argument number change Behavioural JTD this keyword deletion Behavioural JSC static modifier change Structural JID Member variable initialization deletion Structural JDC Java-supported default constructor creation Structural EOA Reference assignment and content assignment replacement Behavioural EOC Reference comparison and content comparison replacement Behavioural EAM Accessor method change Behavioural EMM Modifier method change Behavioural

Page 16: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

15

A mutation tool named µJava [10] based on the MSG/bytecode translation method was built and used to measure the speedup over the separate compilation approach. Experimental results showed that the MSG/bytecode translation method was about five times faster than separate compilation. In 2016, as an integration-level-testing-specific improvement on µJava, M. Grechanik and G. Devanla in [3] proposed a theory and a solution for generating mutants that specifically target integration tests. By addressing a fundamental problem of mutation integration testing - how to determine the effectiveness of integration test suites efficiently - they formulated a fault model for integration bugs that uses static dataflow analysis to obtain information about how integrated components interact in an application. A root of this problem that they tackled was that applying mutation operators indiscriminately to all instructions results in a very large number of mutants, many of which are not related to integration tests because not all paths end at an integration point. An integration bug can result from an error that is outside the scope of the integrated classes. For example, in code below, suppose that an error is injected where the operator “>” in the conditional expression of the second line is replaced with the operator “<”. Then, the components Employee and Helper will interact instead of the components Employee and Manager. This example shows that a small semantic error leads to changing the control flow at runtime that results in not invoking proper integrated components:

They implemented their approach in Java Mutation Integration Testing (jMINT) to generate mutants that specifically target integration tests. Integration mutants were then generated by applying 10 mutation operators (mentioned in section 5) to instructions that lie in dataflow paths among integrated components and evaluated on five open-source applications. In comparison to μJava, their approach showed a considerable reduction in the number of generated mutants with a strong power to determine inadequacies in integration test suites.

3.2. Integration-level test case for OO applications – A data flow based approach As discussed, by examining the flow of control between the various components, we can design and select test cases. Using data-flow testing leads to a richer test suite concentrating on improper use of data due to coding errors. In [14], S. Z. Waheed and U. Qamar proposed a novel approach for test case generation of object-oriented integration testing. There, search space is reduced by selecting the coupling methods that are directly involved in integration. Further def-use analysis helps in achieving the desired object states for proper interfaces testing, representing methods in testing tree. In their algorithm, they use data flow coverage criteria. Each DU path is considered in selecting method sequence to generate the desired state for integration testing. Instead of generating the method sequence for branch coverage they used coupling based data flow coverage for test case generation. It generates a Tree that contains coupling method as root and all the possible def-use paths can be represented by the sub nodes of that tree. Their approach assumes that each unit is already tested and validated. It only requires testing the interfaces, through which units are interacting with each other. This is recursive process and output is the tree, representing method sequences with coupling method as root. Tree representation is the output

Page 17: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

16

of our test sequence generation algorithm. There are variable number of methods (nodes) involved in each test case. Root node represents the coupling method that involved in integration and child nodes are predecessor methods selected based on DU analysis.

3.3. Integration-level test case for .Net applications using Roslyn APIs Inspiring from this approach and jMINT [3] (discussed later in this section), a tool was introduced in [1] as an automated solution and tool to identify integration scenarios and generate test cases (in the form of method call sequences) for .NET applications. It works by analyzing the code and automatically identifying class couplings, interacting methods, as well as invocation points. Moreover, the tool also helps and supports testers in identifying timing issues at integration level by automatic code instrumentation at invocation points. Hence, this work was the first in utilizing Roslyn features for automatic integration analysis and integration test case generation. The main contribution of this study has been based on the future work of this paper.

3.4. What is missing Regarding the mutation techniques, generally speaking, although they have been exercised for many years in literature, and have proved their efficiency in the context of software testing, but beyond the two general weaknesses of mutation analysis (the cost and equivalence decision), mutation is basically aimed to evaluate the comprehensiveness of test suites, not testing the SUT directly. Thus, they can just be considered as parts of the whole process of test automation. Besides these, when it comes to the integration-level test case generation using data flow approach, although the initial results apparently showed significant improvement in method sequence generation, but they need to be furthered tested on complex projects to show their strength. Moreover, no cross-checked has been done by other techniques to prove their correctness.

Page 18: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

17

4. Problem Formulation Regardless of the context of project, the methodology supplied for the development process, or the used tools and technologies, manually software testing is prone to several challenges:

• Being highly dependent to skilled testers, mastering both development and business domain requirements.

• Difficulties in proper documentation that includes descriptions and steps to reproduce the defects.

• Dealing with intermittent bugs that happen occasionally, under certain circumstances. • The decision of when to stop the testing, etc.

In agile software development however, some of these challenges are even bolder:

• Prioritizing the test cases in sprints. • Reusing the test scripts in CI/CD or in Regression testing. • Training newly-comer testers, etc.

Besides these, integration level testing, for its part, has some key differences that makes manual testing even more difficult to be supplied. For example, many integration-level failures generally happen in the messages between integrated units, not in the code as they would be in unit failures. Unfortunately, most testing tools are focused on testing code and GUIs, not testing messages. As another challenge, most attempts at integration testing do not recognize that users of the system have different expectations of the system and will use the “integrations” differently depending on those expectations and their business needs. Since software systems are constantly growing in size and complexity, manual testing becomes time consuming, sometimes even prohibitive. Therefore, software tests should be automated, not only for efficiency reasons but also for reproducibility. In the field of automatic integration test case generation, little work has been done in practice, especially for .Net applications for which, the compiler features had not been publicly available, so the static analysis of those codes was almost impossible until a few years ago. Therefore, providing test automation tools seems required for industrial integration-level testing. By considering the features recently provided by Roslyn APIs, which has made the .Net applications’ static analysis feasible, in this thesis we try to figure out: 1. How can static analysis approaches such as coupling-based or data-flow analysis approaches be

used to generate integration-level test-cases? 2. How to automatically generate integration-level abstract test-cases for object-oriented .Net

programs by supplying the Roslyn C#/VB.NET compiler APIs using these techniques.

3. How to evaluate the quality of generated test cases from the steps above?

Page 19: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

18

5. Method The test case generation in this thesis was theoretically based on a static analysis technique, combining data-flow and coupling analysis of the code. Compared with other approaches, the advantage of data flow analysis for automatic test case generation is that, since they just rely on the code, they don’t require fully modeled development process (as needed for model-based testing). Besides that, they cost much less in terms of time and effort. Another reason for selecting it was the ability to be fully automated and reused. Finally, the last advantage of this technique is that the generated abstract test cases can be used for further concrete ones in order to support maximum possible automation. So, these were the reasons for choosing the dynamic data flow approaches mentioned in [14, 3, 1] as baselines for this thesis. This technique includes: Read the source code to identify the user-defined classes, extracting the list of parameter-coupling methods, and for each of them, listing all the class functions that directly or indirectly modify the used class fields in their body. After processing all those coupling methods, for each of them a path is constructed whose end node is the coupling method and contains the list of functions that can affect its field variables recursively as previous/ children nodes of the path leading to that coupling method. The implementation of automating the algorithm was done in C# language in Visual Studio IDE by using Roslyn Syntax Tree API and Symbol API. The Compiler APIs of Roslyn do the analysis of the code, extracting syntax tree and semantics of code statements and blocks, detecting class definitions, class methods, class method signatures and parameters, class fields, and also class fields definitions and usages in the body of each class method. Then, this automatic test case generation solution was experimented by exercising it on some sample C# project as benchmarks. These three benchmarks (Log4Net, ScriptCs, and Wyam [23-25]) were selected among a couple of well-known open-source C# programs. Regarding the benchmark codes, those C# projects should have been selected that, first, contained necessary specifications for being able to be mutated by those mutation operators, and second, the solution could be run on them without throwing exceptions (because of not supporting some OO features such as generics). Clearly, all these works would not provide any added value if the quality of generated test cases had not been evaluated. Thus, a considerable amount literature reviewing, and investigations was done for finding the best method for this purpose. At the end, the interface mutation technique was chosen for the test cases’ quality assessment because they are actually the only well-known approaches dealing with the validity of test cases, of which effectiveness and efficiency have been proved through several studies and experiments, while other techniques deal with the validity of the software-under-test. The evaluation is based on finding out: To what extent the generated test paths have the ability of covering the mutations? Three methods were figured out for this assessment:

A. Generating test paths for each mutation and comparing them with the original one; e.g. comparing the number of test paths, or comparing the details of corresponding test path.

B. Generating test paths just for the original code, and investigate the generated paths to see what percentage of mutations they cover; i.e. for each mutation operator, figuring out if any test path in any of test path sets contain a function which is affected by that mutation operator?

C. Doing static analysis based on the programming language syntax and semantics. Clearly, the first two methods are more complete than the last one but generating a complete set of mutations -even by a limited set of interface mutation operators- is a very costly way. For this reason, and also since this study is in the context of a specific programming language (C#), the third method was chosen for comparison step.

Page 20: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

19

For mutation-based evaluation of the algorithm, the only state-of-practice tool written in C# found was Fettle [16], which generates mutants for .Net applications but since no literately known technique has been mentioned about interface mutation generation, it could not be used as a gauge for this study. On the other hand, the previously mentioned mutation tool (jMINT) was in Java and could not be executed on a C# project. Thus, we decided to evaluate the solution manually according the 10 mutation operators used in jMINT:

Table 3. Interface Mutation Operators - jMINT 1 EAM Accessor method change 2 IOD Overriding method deletion 3 IPC Explicit call of a parent’s constructor deletion 4 JID Member variable initialization deletion 5 JTD this keyword deletion 6 JTI this keyword insertion 7 OMD Overloading method deletion 8 OMR Overloading method contents change 9 PNC new method call with child class type

10 PRV Reference assignment with other comparable type For each mutation operator, the cross-check can be done by:

I. Applying it on the source code. II. Generating test path from mutated code.

III. Checking if the mutation was reflected on the generated test paths. More descriptions on the work will be provided in section 7.

Page 21: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

20

6. Ethical and Societal Considerations The code for the project must have been considered confidential and copyrighted until further notice.

Page 22: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

21

7. Contribution Before starting this section, it should be noted that since a major part of this study’s contribution was implementing the automation of test cases generation by a programming language, we could not have such a lengthy section, especially because the theoretical bases have been described in sections 2 and 5, and some major parts of contribution have been explained within the related works and results sections. Before describing the details of the practical contribution in this study, let us propose a higher-level solution to “automatic integration-level testing” rather than “automatic integration-level test-case generation”, and have a short explanation on the generic solution which - considering the open source compiler APIs as applicable code analysis tool - is potentially achievable for .Net applications. Then, we can have a better sight of this thesis’s contribution, how it deals with the research questions, and how it is related to the general problem of “integration-level test automation for OO applications written in .Net”. According to the literature reviews on a set of theories and tools available for testing at integration-level, object-oriented testing, and .Net applications’ code analysis it was concluded that by using a combination of data-flow analysis and coupling-based analysis as the main theoretical base (and other helping techniques such as boundary value, input/output partitioning, or fault injection) for test-case generation and the Roslyn APIs as code analysis/instrumentation tool, the following steps can lead to the most automatic integration-level testing framework possible for object-oriented .Net applications: 1. Cohesion analysis: since on one hand, the integration-level testing depends on the coupling

degree of the code, and on the other hand, the coupling degree of the code is related to the cohesion level of the code in some ways. I.e. usually increasing the cohesion degree of the code results in decreasing the coupling level of it.

2. Improving the cohesion level of the code:

2.1. Removing unnecessary variables. 2.2. Changing unnecessary public functions into private ones. 2.3. Removing unnecessary private functions. 2.4. Removing conditions’ conflicts. 2.5. Removing conditions’ overlaps. 2.6. Removing unnecessary conditions before/after invocation points, etc.

3. Integration-level abstract test cases generation 4. Code instrumentation for measuring all-coupling-paths criteria: Allows inserted instructions to

report actions to the meta-model. The techniques presented range from compile-time instrumentation to runtime-monitoring.

5. Code instrumentation for assertions (base values will be set later) – some primary values can

be set by using boundary value or input/output partitioning, and fault injection techniques.

6. Generating semi-concrete test cases in JSON/XML, including: 6.1. Testable coupling methods' full names;

Page 23: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

22

6.2. Arguments' list of each coupling method, including their name, type, and a default value; 6.3. Input element for setting base values for the assertion of each coupling parameter;

7. Generating an executable application from the initial projects after code injection, which gets

its inputs from that semi-concrete test cases generated in previous step. 8. Completing the generated test cases by setting concrete values for coupling methods'

parameters and assertions' base values (by test engineer).

9. Executing the generated executable application, according to the concrete test cases; 9.1. Reporting all-coupling-paths coverage: coupling based meta-model instrumentations; 9.2. Reporting test pass percentage: data-flow based assertion instrumentations;

Among these steps, this study’s contribution engages with the third step, which is about generating abstract test cases at integration level for OO applications written in .Net framework, in three steps, each corresponding to one of the research questions:1) finding a theoretical solution suitable for generating abstract test cases at integration level, 2) automating that solution, and 3) evaluating the solution. So, the work has been done in the following steps: • Choosing and improving a technique based on the combination of data-flow analysis and

object-oriented concepts such as coupling for integration-level test-case generation. • Creating a solution for automating that technique to be used on Object-Oriented .Net

applications: • Implemented in C# language, • Visual Studio as IDE. • By using the newly presented .Net compiler named Roslyn.

• Running the solution on a couple of C# projects as benchmarks. • Evaluation of the generated test cases’ quality using an Integration-Level Mutation technique. As discussed earlier, the test case generation technique has been theoretically based on a combination of data-flow and coupling based approaches. For answering the first research question, by having the new knowledge of Roslyn APIs’ capabilities, we tried to look for some ways to extend or improve the algorithm mentioned at section 3.2 to have an enriched set of generated test paths. One important improvement on the initial algorithm was adding call-couplings to the list of coupling methods. This improvement was so vital especially for the .Net applications because by extracting just parameter-couplings, generating a complete set of coupling paths was practically impossible. This is because for example in the applications written in C#, the first executed function in the startup project is something like what is shown in figure 7.1. i.e. a static function that has no parameter of one of the user-defined types. Therefore, if we are going to use only parameter coupling, first, we will miss the entry point of control flow, so the extracted coupling paths will lack of the most important function call sequence starting from the application’s entry point. Second, the methods in the generated coupling paths of each class will contain only the methods of itself.

Page 24: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

23

Figure 7.1. Common entry point for C# solutions

Another similar extension was adding constructors and destructors besides functions or methods. This change also enriched the set of generated test paths with new paths which had not been extracted before. The last change was adding struct dependencies besides class dependencies. As a result, we had this updated version to be implemented at the next step in order to answer the second research question: 1. Read in as input the solution and identify the projects’ structures including user-defined

classes/structs. 2. Extract the list of parameter and call coupling methods/constructors/destructors in the project.

3. For each coupling method:

3.1. Identify list of class/struct field variables that are used in its body. 3.2. Identify other class/struct methods that can modify the value of the previously identified

class/struct fields. 3.3. Perform the last two steps recursively until all methods in that class/struct that modify the

collected class/struct fields and variables are identified. 4. For each coupling method, construct a path whose end node is the coupling method, and the

list of methods that can affect its field variables recursively as previous/ children nodes of the path leading to that coupling method.

5. Print out the generated paths, grouped by the classes/structs containing each coupling method. Besides the two enhancements mentioned above, which have been applied on the algorithm, compared with previous implementations of similar algorithms (in [1] and [14]), another improvement on the implementation was also done. This improvement deals with the step 3.1, in which the used class fields of each coupling method is retrieved. In the current automated solution, not only being at the right side of simple assignments is a merit of extracting a field’s usage, but also four other types of usages are diagnosed for class fields. Three of them which are direct usages

Page 25: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

24

are: a) being in the parameter list of a coupling method call, b) attending in the predicate(s) of an if statement, and c) being in (part of) a return statement. The last added new usage type, which can be referred to as indirect usage is retrieved recursively from the used class fields of any coupling method invoked within the body of the current coupling method. By adding these new usage type diagnoses to the implementation of step 3.1, we could generate a much-enriched set of test paths, compared to the previous similar implementations. One important issue that should be considered is that the Syntax API is not a suitable tool for extracting the list of class fields, but the Symbol API with the help of semantic metadata should be used for this purpose. That is because using only the Syntax Tree without the semantic information of the tokens for finding out the class fields can lead to errors such as counting a methods local variable with the same name as a field in its owner class, and this will result in generating a set of test paths that does not contain proper members with respect to the interface mutation operators such as “Member variable initialization deletion”, “this keyword deletion”, or “this keyword insertion”. In order to deal with the second RQ, as said previously in methods section, a C# project was written. In this project, by supplying .NET Compiler Platform libraries, the syntax tree and semantics of the source code are analyzed and based on the analytics, the test paths can be generated. The appendices attached to the end of this report show some of these automatically generated test paths. The supplied packages in this project are:

• Microsoft.Build.Locator, • Microsoft.CodeAnalysis.Analyzers, • Microsoft.CodeAnalysis.CSharp.Extensions, • Microsoft.CodeAnalysis.CSharp.Workspaces, • Microsoft.CodeAnalysis.Workspaces.MSBuild.

Some implementation details: 1) In the main function of the project, we iterate over all projects in the solution and for each

project, we iterate over all user-defined classes, and for each of them: lists of all Parameter/Call coupling methods are extracted by GetCouplings function, which a) iterates over all methods/constructors/destructors in each user-defined class, and b) calls the GetCorrespondingBaseMethod function for each invocation point found in

each of those classes for knowing if it is due to a call coupling or not. Currently, this extension method that is implemented in the Utilities.cs helper class is unfortunately a performance bottleneck and should be enhanced in future.

2) After extracting all Parameter/Call coupling methods, the GenerateTestPathList function

is executed for each of them to show the desired call sequences by a) Finding the used class fields in each method, which is implemented by the

GetUsedClassFieldsInMethod function) including direct uses (such as parameters, right side of assignments, conditions’ predicates, and return statements) and indirect uses (each of those four usage types by the function calls at invocation points inside the method.

b) Finding the methods which define those used class fields (by calling GetDefiningMethods function), and finally

c) Writing the method calls in a reverse order, based on the users of the used class fields.

Page 26: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

25

In this study, the focus was on achieving successful results rather than efficiency of the solution, so one of the future works in this context might be improving its performance. However, it was tried that the code be written cleanly to be easily maintainable and extendable for future tasks. The next step of contribution was exercising the solution on the sample codes to get the generated test path, and then checking their quality by confronting them to jMINT interface mutation operators. The result of this step is shown in the results section. The first code on which the abstract test case generator has been executed was the input source code to the solution provided on [1], and the number of generated test paths was increased from 9 to 17. This was resulted by adding the call-coupling type and also constructors/destructors to the coupling methods extraction step. Three popular projects named Log4Net, ScriptCs, and Wyam [23-25] were selected for this purpose. Since there might be some probable relation between characteristics such as Cyclomatic complexity3, Inheritance Depth, Number of Classes Files, and LOC with the number/spent time of generated test paths, these specifications are also mentioned in table 4, for probable future comparisons in proceeding studies:

Table 4. Benchmark projects

Project Name Cyclomatic complexity

Inheritance Depth LOC Number of Classes Files (Syntax Trees)

ScriptCs 283 2 687 29 ScriptCs.Hosting 81 2 1,562 36

Log4Net 5 7,823 502 Wyam 80 3 22,368 740

For the evaluation step, as discussed earlier, a special kind of mutation technique called Interface Mutation was chosen. This approach is based on mutating the source code with some mutation operators specialized both for integration level and object-oriented codes. Different studies suggest different sets of interface mutation operators but after investigating them, finally those operators which has been used in the jMINT project were chosen because compared with other proposed sets, they showed more efficient results in practice. Clearly the ideal way of evaluating the generated test cases was:

I. Selecting a source code written in a way that would be mutable by all the mutation operators.

II. Generating test path for the original source code. III. For each mutation operator: Mutating the source code, generating test paths for that

mutated code and comparing the number of test paths, or comparing the details of corresponding test paths to find out if that mutation has been reflected in the newly generated test cases.

However, even with a limited set of interface mutation operators, this approach is obviously so time consuming because the test path generation solution should be executed to the number of all possible mutations resulted from all mutation operators. For this reason, and also since this study is in the context of a specific programming language (C#), we decided to do it by static analysis based on the programming language syntax and semantics, which by having a good knowledge of the

3 The number of linearly independent paths within it. For instance, if the source code contained no control flow statements (conditionals or decision points), the complexity would be 1, since there would be only a single path through the code. According to P. Jorgensen, it should not exceed 10 for modules.

Page 27: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

26

programming language’s syntax and semantic, leads to a fast assessment on whether if those mutations can be reflected in the output of the test path generation solution. To have a better assessment on how this study has addressed the formulated problems (especially RQ 2) we decided to divide the evaluation results into three categories:

• First, the mutation operators which can be covered by the initial algorithm, which show the mutation operators that can be theoretically covered by the initial algorithms provided in [1] and [14].

• Second, the mutation operators which can be covered by the enhanced algorithm, which show the mutation operators that can be theoretically covered by the current,

• And finally, the mutation operators which are currently covered in test paths, which indicates whether a mutation operator has been covered by the currently implemented solution or not.

Fortunately, we can see that except the Accessor method change operator, which is not applicable in C#, all other operators can be theoretically covered by the test path generation technique. This can prove that we are generating valid abstract test cases, and our last research question is answered then.

Page 28: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

27

8. Results Of what observed from the contribution and as generated path attached to the appendices show, we can say that static analysis algorithm combined from coupling-based and data-flow analysis approaches can be used to generate integration-level test-cases, at least abstract ones. About the second RQ regarding How to automatically generate integration-level abstract test-cases for object-oriented .Net programs by supplying the Roslyn C#/VB.NET compiler APIs using the mentioned algorithm, by having the created ‘IntegrationProfiler’ solution, we can definitely say that it is feasible. However, as mentioned in methods section, in this phase, the focus was on achieving successful results rather than efficiency of the solution, but the Table 5 has been provided for having some comparison criteria for probable future works. Table 5 shows a summary of executing test path generator on the benchmark projects. (A subset of the generated test paths can be reviewed in Appendix). For now, what can be said is that, according to the current implementation of the solution, time needed for generating test paths has an O(n²) relation with the number of class files, which is improvable in future works.

Table 5. Test

Project Name Cyclomatic Complexity

Inheritance Depth LOC No. of Classes Files

(Syntax Trees) No. of Test

Paths Time elapsed

Avg. (Seconds)4 ScriptCs 80 2 687 29 7 4.85

ScriptCs.Hosting 81 2 1,562 36 14 9.32 Log4Net 5 7,823 502 919 824.97 Wyam 80 3 22,368 740 215 151.67 For the last research question, confrontation of the interface mutation operators was done according to both solution in practice and algorithm in theory:

Table 6. Confrontation result

Operator Description Covered in test paths5

Covered by the initial algorithm6

Covered by the enhanced algorithm7

1 EAM Accessor method change No Yes Yes 2 IOD Overriding method deletion No No Yes

3 IPC Explicit call of a parent’s constructor deletion No No Yes

4 JID Member variable initialization deletion Yes Yes Yes 5 JTD this keyword deletion Partially Partially Yes 6 JTI this keyword insertion Partially Partially Yes 7 OMD Overloading method deletion Yes Yes Yes

8 OMR Overloading method contents change Yes Yes Yes

9 PNC new method call with child class type No No Yes

10 PRV Reference assignment with other comparable type No No Yes

4 Average time of three runs of the 64-bit release configuration built executable file of the solution on a 64-bit system with CPU Intel® Core™ i5-8350 @1.70GHz, 16.0 GB RAM. 5 According to the solution results, indicates whether the mutation operator has been covered or not. 6 Regardless of solution results, indicates whether the mutation operator can be covered theoretically or not by the algorithm proposed in [14], [1]. 7 Regardless of solution results, indicates whether the mutation operator can be covered theoretically or not by the algorithm after improvements.

Page 29: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

28

* Compared with the previous results, by adding the call-coupling methods, (which had been included in the previous version’s future works), now the JID, OMD, and OMR mutation operators are also covered. * More discussions regarding this subject will be provided in the next section using Table 6. A considerable amount of this study’s work was investigation regarding a general solution to highest automation possible in testing .Net applications at integration level. After reviewing a wide range of literature, it seems that the open source .NET compiler API can provide us the ability to apply a combination of static and dynamic analysis approaches for the purpose of maximum test automation. If we divide the test in 4 different steps:

• Test case generation using introduced dynamic data flow analysis. • Test case execution. • Test case evaluation using interface mutation operators. • Code coverage calculation using coupling-based criteria.

By some improvements which will come in future work section, this novel data flow approach can be used for generating candidate test paths. The quality of these test paths is then evaluated by mutation-based techniques. Finally, the code coverage can be calculated by coupling-based criteria. In all these steps we can leverage the Roslyn features to felicitate the process. More details on this subject are provided in future work section, but for example, Roslyn’s Instrumenter class we can instrument various portions of executable code, not only for generating test paths, but also for mutating code and coupling coverage measurements.

Page 30: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

29

9. Discussion In this section, the results and their significance are interpreted and assessed. Some recommendations are also mentioned to achieve the final goal of automating integration level test execution. The section also includes reflections on the work, such as its limitations, or problems that have been identified but have not been answered. As observed in table 5, the cyclomatic complexity and/or Inheritance Depth of the code have significant impacts on the time needed for test path generation. Discovering the more precise relation, as well as other efficient factors can be one of the future works of this study. In the implementation of test path generation, some changes must be done for avoiding infinite loops of cyclic function calls. Regarding the confrontation of the introduced data flow/coupling based technique with interface mutation operators, table 6 shows the necessary changes to be made for maximizing the mutation operators’ coverage:

Table 6. Interface mutation operators cross-checking Operator Comments / Needed work

1 EAM Not applicable for C#; because there is no accessor method in C# syntax. 2 IOD Inheritance support must be included in step 2. 3 IPC Inheritance support must be included in step 2. 4 JID - 5 JTD For complete coverage, inheritance support must be included in step 2. 6 JTI For complete coverage, inheritance support must be included in step 2. 7 OMD - 8 OMR - 9 PNC Inheritance support must be included in step 2.

10 PRV Inheritance support must be included in step 2. In addition to the exercised operators, some other C#-specific operators can be applied for further works; For example, in C#, one way of method overloading is to use optional parameters, which can be explicitly/dynamically mapped to corresponding arguments in runtime. Despite of its efficiency and ease of use, it is a very common source of coding mistakes, especially when calling inter-class functions. So, it can be considered as an applicable candidate for C# mutation.

Page 31: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

30

10. Conclusions The outputs of the generated solution in this study over the exercised benchmarks and then their evaluation according to the interface mutation operators has proved that among different static and dynamic approaches, the proposed technique based on data flow and coupling based analysis approaches is applicable for the purpose of integration-level test case generation for OO applications. On the other hand, one of the most important achievements during working on this thesis was the proof of the concept in supplying new .NET Compiler Platform APIs for a variety of interesting code analysis-related tasks, and one them is the feasibility of preparing an almost fully-automated framework for integration testing. The emerging of open-source APIs for compiling .Net programming languages has made the static analysis of the application written in these languages feasible, which is the base of automation in integration-level testing. With the useful functionalities of these APIs we can think of a comprehensive automation framework for testing at integration level, including not only generating test cases, but also executing, assessing, and coverage measurement of them. Thanks to the beneficial features of these APIs, before starting the test cases generation, we can even apply a primary improvement on the code’s coupling degree to improve the quality and code coverage of our test too. The following table 7 shows the APIs related to each phase:

Table 7. Roslyn APIs application for integration-level testing Operator Comments / Needed work

Cohesion analysis/Improvement Syntax and Symbol APIs Generating abstract test cases Syntax and Symbol APIs

Measuring all-coupling-paths criteria Symbol, Binding and Flow Analysis, and Emit APIs Code instrumentation for assertions Symbol and Binding APIs Generating semi-concrete test cases Symbol API

Generating the test executer application Symbol, Binding and Flow Analysis, and Emit APIs Evaluation of the introduced approach for generating test path at integration level showed a good potential for being used in future works, however much work must be done to make an industrially-acceptable tool out of it (some general hints are mentioned in future work section). Although currently we have the beneficial features of Roslyn for integration analysis and integration test case generation, but generally speaking, since test automation process itself is so costly, it is crucial to have a precise cost-benefit analysis to evaluate where and when test automation can pay off, particularly in industrial contexts.

Page 32: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

31

11. Future Work According to the beneficial features of Roslyn, the future work for this study can be defined based on the comprehensive integration level testing solution described at the beginning of the contribution section: we can include Cohesion analysis/improvements before Coupling analysis, for example:

• Removing Unnecessary variables • Changing unnecessary public functions into private ones • Removing unnecessary private functions • Removing conditions’ conflicts • Removing conditions’ overlaps • Removing unnecessary conditions before/after invocation points • Etc.

Regarding the works related to this study, the following works can be done:

• Improving the performance and memory consumption of test case generation engine code optimization.

• Fixing the bug of considering self-reference type in parameter coupling. • Adding other advanced object orientation features of C#, such as Generics, Inheritance, Inter-

Project Coupling, etc. • Adding shared-data coupling.

Code instrumentation for measuring all-coupling-paths criteria ([8]): The instrumentation of the program allows inserted instructions to report actions to the meta-model. The techniques presented range from compile time instrumentation to runtime monitoring. Code instrumentation for assertions (base values will be set later) – some primary values can be set by using boundary value or input/output partitioning, and fault injection techniques. Generating semi-concrete test cases in the form of JSON/XML, including:

• Testable coupling methods' full names. • Arguments' list of each coupling method, including their name, type, and a default value. • Input element for setting base values for the assertion of each coupling parameter.

Generating an executable application from the initial projects after code injection, which must get its inputs from that semi-concrete test cases generated in previous step. Coupling based meta-model instrumentations for reporting all-coupling-paths coverage. Data flow based assertion instrumentations for reporting test pass percentage. However, first, note that, deciding which methods must be counted-in as coupling methods depends on how we define the scope of units; e.g. each project, or each class? Second, the all-coupling-paths would be the ideal criterium for measuring the coverage of generated test cases but provided that the automated generation of test cases would have an acceptable level of performance and resource consumption. Additionally, it is possible to leave out certain types of coupling paths. For example, since in file accesses, or other external devices such as database, considering definitions and uses does not make sense, the external device coupling path is quite a bit less restrictive than the other types of coupling

Page 33: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

32

paths. ‘In data flow, definitions and uses are considered because of the philosophy that values of definitions should be used; in files, even writes and reads are not necessarily related. Thus, the notions of definition-clear and definition-use pairs do not apply to external device coupling’ [8 p. 142]. the cost/benefit analysis in choosing between those four mentioned coupling criteria depends upon:

• Structure and size of the software under test. • Test engineers’ requirements. • Efficiency of the implemented algorithms, which for its part, depends on the efficiency of

Roslyn APIs either. Regardless of chosen coupling criteria type, the functionality of implemented solution must be: by performing automatic static analysis of code and pinpointing where a variable is defined and where it is used, identify the call/parameter/shared data coupling relationships. Then, these extracted couplings are used to generate coupling paths, which are then considered as test requirements to be covered.

Page 34: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

33

12. References [1] Mehrdad Saadatmand, “IntegrationDistiller: Automating Integration Analysis and Testing of Object-Oriented Applications”, November-2018. [2] “Roslyn Overview”, https://github.com/dotnet/roslyn/wiki/, Last Accessed: 2019-04-21. [3] M. Grechanik and G. Devanla, “Mutation integration testing,” in 2016 IEEE International Conference on Software Quality, Reliability and Security (QRS), Aug 2016, pp. 353–364. [4] J. ur Rehman Muhammad, J. Fakhra, B. Antonia, and P. Andrea, “Testing software components for integration: a survey of issues and techniques,” Software Testing, Verification and Reliability, vol. 17, no. 2, pp. 95–133. [Online]. Available: https://onlinelibrary.wiley.com/ doi/abs/10.1002/stvr. [5] Imran Bashir and Raymod A. Paul, “Object-oriented integration testing”, Annals of Software Engineering 8 (1999) 187–202 [6] Leonard Gallagher, Jeff Offutt, “Integration Testing of Object-oriented Components Using FSMS: Theory and Experimental Details”, GMU Technical Report ISE-TR-04-04, July 2004. [7] F. Beck and S. Diehl. On the congruence of modularity and code coupling. ESEC/FSE ’11, pages 354–364, New York, NY, USA, 2011. ACM. [8] Z. Jin and A. J. Offutt, “Coupling-based criteria for integration testing,” Software Testing, Verification and Reliability, vol. 8, no. 3, pp. 133–154, 1998. [9] S. A. Khan and A. Nadeem, “Automated test data generation for coupling based integration testing of object-oriented programs using particle swarm optimization (pso),” in Genetic and Evolutionary Computing, J.S. Pan, P. Krömer, and V. Snášel, Eds. Springer International Publishing, 2014, pp. 115–124. [10] Y.-S. Ma, J. Offutt, and Y.-R. Kwon. Mujava: A mutation system for java. ICSE ’06, pages 827–830, New York, NY, USA, 2006. ACM. [11] J. Hu, N. Li, and J. Offutt. An analysis of oo mutation operators. ICSTW ’11, pages 334–341, Washington, DC, USA, 2011. IEEE Computer Society. [12] Y.-S. Ma, M. J. Harrold, and Y.-R. Kwon. Evaluation of mutation testing for object-oriented programs. In Proceedings of the 28th international conference on Software engineering, ICSE ’06, pages 869–872, New York, NY, USA, 2006. ACM. [13] Janvi Badlaney, Rohit Ghatol Romit, JadhwaniAn, “An Introduction to Data-Flow Testing”, NCSU CSC TR-2006-22. [14] S. Z. Waheed and U. Qamar, “Data flow based test case generation algorithm for object-oriented integration testing,” in 2015 6th IEEE International Conference on Software Engineering and Service Science (ICSESS), Sept 2015, pp. 423–427. [15] J. B. Kam and J. D. Ullman, “Global data flow analysis and iterative algorithms”, J. ACM, 23(1):158–171, Jan. 1976.

Page 35: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

34

[16] Wennell, O. (2018). ComparetheMarket/fettle. [online] GitHub. Available at: https://github.com/ComparetheMarket/fettle [Accessed 20 Apr. 2019]. [17] René Just, “On Effective and Efficient Mutation Analysis for Unit and Integration Testing”, Universität Ulm Institut für Angewandte Informationsverarbeitung, October 2012 [18] Mârcio E. Delamaro, José C. Maldonado, and Aditya P. Mathur, “Interface Mutation: An Approach for Integration Testing”, IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. 27, NO. 3, MARCH 2001 [19] Dirk Beyer, Sumit Gulwani, and David A. Schmidt, “Combining Model Checking and Data-Flow Analysis”, 2018. [20] Cain, Andrew A. “Dynamic Data Flow Analysis for Object-Oriented Programs”, Swinburne University of Technology, 2005. [21] J. C. Huang. “Detection of Data Flow Anomaly Through Program Instrumentation”. IEEE Transactions on Software Engineering, SE- 226–236, May 1979. [22] Pedro Reales Mateo, Macario Polo Usaola, Jeff Offutt. “Mutation at System and Functional Levels”. DOI 10.1109/ICSTW.2010.18. IEEE. [23] Apache License 2.0 (2018). Log4Net. http://logging.apache.org/log4net/download_log4net.cgi. [online]. Available at: http://apache.mirrors.spacedump.net//logging/log4net/source/log4net-2.0.8-src.zip [Accessed 14 May. 2019]. [24] Damian Schenkelman, et al. (2018). ScriptCs. [online] GitHub. Available at: https://github.com/Wyamio/Wyam [Accessed 17 May. 2019].. [25] Dave Glick, et al. (2018). Wyam. [online] GitHub. Available at: https://github.com/Wyamio/Wyam [Accessed 18 May. 2019].

Page 36: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

35

13. Appendix

13.1. Primary Test Paths (from old input)

Using MSBuild at 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin' to load projects. Loading solution 'C:\Dropbox\MDH\Thesis\Samples\SampleSolution_OldInput\SampleSolution_OldInput.sln' Finished loading solution 'C:\Dropbox\MDH\Thesis\Samples\SampleSolution_OldInput\SampleSolution_OldInput.sln' ******* Generating test paths for SampleProject_OldInput project: In analysis of used variables in method 'SampleProject_OldInput.C.CM6(int k)', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM2()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM6(int k)', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM3()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM6(int k)', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM4()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM6(int k)', due to variable 'var3', we get to method 'SampleProject_OldInput.C.CM5()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM6(int k)', due to variable 'var1', we get to method 'SampleProject_OldInput.C.C(B b)', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM2()', due to variable 'var5', we get to method 'SampleProject_OldInput.C.CM1()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM1()', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM2()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM1()', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM3()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM1()', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM4()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM7(B b, A a)', due to variable 'var1', we get to method 'SampleProject_OldInput.C.C(B b)', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM7(B b, A a)', due to variable 'var1', we get to method 'SampleProject_OldInput.C.CM6(int k)', which defines this variable.

Page 37: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

36

In analysis of used variables in method 'SampleProject_OldInput.C.CM7(B b, A a)', due to variable 'var2', we get to method 'SampleProject_OldInput.C.CM6(int k)', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM7(B b, A a)', due to variable 'var3', we get to method 'SampleProject_OldInput.C.CM5()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM6(int k)', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM2()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM6(int k)', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM3()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM6(int k)', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM4()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM6(int k)', due to variable 'var3', we get to method 'SampleProject_OldInput.C.CM5()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM6(int k)', due to variable 'var1', we get to method 'SampleProject_OldInput.C.C(B b)', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM2()', due to variable 'var5', we get to method 'SampleProject_OldInput.C.CM1()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM1()', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM2()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM1()', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM3()', which defines this variable. In analysis of used variables in method 'SampleProject_OldInput.C.CM1()', due to variable 'var4', we get to method 'SampleProject_OldInput.C.CM4()', which defines this variable. Path Number: 1 ----- Path Length: 1 ----- ParameterCoupling B: BM1(int test,A a) --- Path Number: 2 ----- Path Length: 1 ----- ParameterCoupling B: BM2(int test,A a, int x1, int x2, int x3) --- Path Number: 3 ----- Path Length: 1 ----- ParameterCoupling C: C(B b) --- Path Number: 4 ----- Path Length: 4 ----- CallCoupling C: CM6(int k) C: CM2()

Page 38: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

37

C: CM1() C: CM3() --- Path Number: 5 ----- Path Length: 4 ----- CallCoupling C: CM6(int k) C: CM2() C: CM1() C: CM4() --- Path Number: 6 ----- Path Length: 2 ----- CallCoupling C: CM6(int k) C: CM3() --- Path Number: 7 ----- Path Length: 2 ----- CallCoupling C: CM6(int k) C: CM4() --- Path Number: 8 ----- Path Length: 2 ----- CallCoupling C: CM6(int k) C: CM5() --- Path Number: 9 ----- Path Length: 2 ----- CallCoupling C: CM6(int k) C: C(B b) --- Path Number: 10 ----- Path Length: 2 ----- ParameterCoupling C: CM7(B b, A a) C: C(B b) --- Path Number: 11 ----- Path Length: 5 ----- ParameterCoupling C: CM7(B b, A a) C: CM6(int k) C: CM2() C: CM1() C: CM3() --- Path Number: 12 ----- Path Length: 5 ----- ParameterCoupling C: CM7(B b, A a) C: CM6(int k) C: CM2() C: CM1() C: CM4()

Page 39: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

38

--- Path Number: 13 ----- Path Length: 3 ----- ParameterCoupling C: CM7(B b, A a) C: CM6(int k) C: CM3() --- Path Number: 14 ----- Path Length: 3 ----- ParameterCoupling C: CM7(B b, A a) C: CM6(int k) C: CM4() --- Path Number: 15 ----- Path Length: 3 ----- ParameterCoupling C: CM7(B b, A a) C: CM6(int k) C: CM5() --- Path Number: 16 ----- Path Length: 3 ----- ParameterCoupling C: CM7(B b, A a) C: CM6(int k) C: C(B b) --- Path Number: 17 ----- Path Length: 2 ----- ParameterCoupling C: CM7(B b, A a) C: CM5() --- ******* Finished generating test paths for SampleProject_OldInput project.

13.2. ScriptCs test paths

Using MSBuild at 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin' to load projects. Loading solution 'C:\Users\Mehdi.Qorbanpur\Dropbox\MDH\Thesis\Samples\scriptcs-dev\ScriptCs.sln' Finished loading solution 'C:\Users\Mehdi.Qorbanpur\Dropbox\MDH\Thesis\Samples\scriptcs-dev\ScriptCs.sln' In analysis of used variables in method 'ScriptCs.Command.CommandFactory.CreateCommand(Config config, string[] scriptArgs)', due to variable '_initializationServices', we get to method 'ScriptCs.Command.CommandFactory.CommandFactory(IScriptServicesBuilder scriptServicesBuilder)', which defines this variable.

Page 40: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

39

In analysis of used variables in method 'ScriptCs.Command.CommandFactory.CreateCommand(Config config, string[] scriptArgs)', due to variable '_fileSystem', we get to method 'ScriptCs.Command.CommandFactory.CommandFactory(IScriptServicesBuilder scriptServicesBuilder)', which defines this variable. In analysis of used variables in method 'ScriptCs.Config.Create(string maskFile, ConfigMask configMask)', due to variable '_modules', we get to method 'ScriptCs.Config.Apply(ConfigMask mask)', which defines this variable. ******* Generating test paths for scriptcs project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- ******* Finished Generating test paths for scriptcs project. Using MSBuild at 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin' to load projects. Loading solution 'C:\Users\Mehdi.Qorbanpur\Dropbox\MDH\Thesis\Samples\scriptcs-dev\ScriptCs.sln'

Page 41: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

40

Finished loading solution 'C:\Users\Mehdi.Qorbanpur\Dropbox\MDH\Thesis\Samples\scriptcs-dev\ScriptCs.sln' In analysis of used variables in method 'ScriptCs.Command.CommandFactory.CreateCommand(Config config, string[] scriptArgs)', due to variable '_initializationServices', we get to method 'ScriptCs.Command.CommandFactory.CommandFactory(IScriptServicesBuilder scriptServicesBuilder)', which defines this variable. In analysis of used variables in method 'ScriptCs.Command.CommandFactory.CreateCommand(Config config, string[] scriptArgs)', due to variable '_fileSystem', we get to method 'ScriptCs.Command.CommandFactory.CommandFactory(IScriptServicesBuilder scriptServicesBuilder)', which defines this variable. In analysis of used variables in method 'ScriptCs.Config.Create(string maskFile, ConfigMask configMask)', due to variable '_modules', we get to method 'ScriptCs.Config.Apply(ConfigMask mask)', which defines this variable. ******* Generating test paths for scriptcs project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs)

Page 42: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

41

--- ******* Finished Generating test paths for scriptcs project. ******* Generating test paths for ScriptCs.Contracts project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- Path Number: 8 ----- Path Length: 1 AssemblyReferences: Union(AssemblyReferences references) --- Path Number: 9 ----- Path Length: 1 AssemblyReferences: Except(AssemblyReferences references) --- Path Number: 10 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line, bool isBeforeCode) --- Path Number: 11 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line) ---

Page 43: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

42

******* Finished Generating test paths for ScriptCs.Contracts project. Using MSBuild at 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin' to load projects. Loading solution 'C:\Users\Mehdi.Qorbanpur\Dropbox\MDH\Thesis\Samples\scriptcs-dev\ScriptCs.sln' Finished loading solution 'C:\Users\Mehdi.Qorbanpur\Dropbox\MDH\Thesis\Samples\scriptcs-dev\ScriptCs.sln' In analysis of used variables in method 'ScriptCs.Command.CommandFactory.CreateCommand(Config config, string[] scriptArgs)', due to variable '_initializationServices', we get to method 'ScriptCs.Command.CommandFactory.CommandFactory(IScriptServicesBuilder scriptServicesBuilder)', which defines this variable. In analysis of used variables in method 'ScriptCs.Command.CommandFactory.CreateCommand(Config config, string[] scriptArgs)', due to variable '_fileSystem', we get to method 'ScriptCs.Command.CommandFactory.CommandFactory(IScriptServicesBuilder scriptServicesBuilder)', which defines this variable. In analysis of used variables in method 'ScriptCs.Config.Create(string maskFile, ConfigMask configMask)', due to variable '_modules', we get to method 'ScriptCs.Config.Apply(ConfigMask mask)', which defines this variable. ******* Generating test paths for scriptcs project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2

Page 44: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

43

Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- ******* Finished Generating test paths for scriptcs project. ******* Generating test paths for ScriptCs.Contracts project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- Path Number: 8 ----- Path Length: 1 AssemblyReferences: Union(AssemblyReferences references) --- Path Number: 9 ----- Path Length: 1 AssemblyReferences: Except(AssemblyReferences references)

Page 45: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

44

--- Path Number: 10 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line, bool isBeforeCode) --- Path Number: 11 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line) --- ******* Finished Generating test paths for ScriptCs.Contracts project. ******* Generating test paths for ScriptCs.Core project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- Path Number: 8 ----- Path Length: 1 AssemblyReferences: Union(AssemblyReferences references) --- Path Number: 9 ----- Path Length: 1 AssemblyReferences: Except(AssemblyReferences references) ---

Page 46: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

45

Path Number: 10 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line, bool isBeforeCode) --- Path Number: 11 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line) --- Path Number: 12 ----- Path Length: 1 ScriptHost: ScriptHost(IScriptPackManager scriptPackManager, ScriptEnvironment environment) --- ******* Finished Generating test paths for ScriptCs.Core project. Using MSBuild at 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin' to load projects. Loading solution 'C:\Users\Mehdi.Qorbanpur\Dropbox\MDH\Thesis\Samples\scriptcs-dev\ScriptCs.sln' Finished loading solution 'C:\Users\Mehdi.Qorbanpur\Dropbox\MDH\Thesis\Samples\scriptcs-dev\ScriptCs.sln' In analysis of used variables in method 'ScriptCs.Command.CommandFactory.CreateCommand(Config config, string[] scriptArgs)', due to variable '_initializationServices', we get to method 'ScriptCs.Command.CommandFactory.CommandFactory(IScriptServicesBuilder scriptServicesBuilder)', which defines this variable. In analysis of used variables in method 'ScriptCs.Command.CommandFactory.CreateCommand(Config config, string[] scriptArgs)', due to variable '_fileSystem', we get to method 'ScriptCs.Command.CommandFactory.CommandFactory(IScriptServicesBuilder scriptServicesBuilder)', which defines this variable. In analysis of used variables in method 'ScriptCs.Config.Create(string maskFile, ConfigMask configMask)', due to variable '_modules', we get to method 'ScriptCs.Config.Apply(ConfigMask mask)', which defines this variable. ******* Generating test paths for scriptcs project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices)

Page 47: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

46

--- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- ******* Finished Generating test paths for scriptcs project. ******* Generating test paths for ScriptCs.Contracts project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1

Page 48: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

47

Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- Path Number: 8 ----- Path Length: 1 AssemblyReferences: Union(AssemblyReferences references) --- Path Number: 9 ----- Path Length: 1 AssemblyReferences: Except(AssemblyReferences references) --- Path Number: 10 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line, bool isBeforeCode) --- Path Number: 11 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line) --- ******* Finished Generating test paths for ScriptCs.Contracts project. ******* Generating test paths for ScriptCs.Core project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask)

Page 49: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

48

--- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- Path Number: 8 ----- Path Length: 1 AssemblyReferences: Union(AssemblyReferences references) --- Path Number: 9 ----- Path Length: 1 AssemblyReferences: Except(AssemblyReferences references) --- Path Number: 10 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line, bool isBeforeCode) --- Path Number: 11 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line) --- Path Number: 12 ----- Path Length: 1 ScriptHost: ScriptHost(IScriptPackManager scriptPackManager, ScriptEnvironment environment) --- ******* Finished Generating test paths for ScriptCs.Core project. ******* Generating test paths for ScriptCs.Hosting project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) ---

Page 50: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

49

Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- Path Number: 8 ----- Path Length: 1 AssemblyReferences: Union(AssemblyReferences references) --- Path Number: 9 ----- Path Length: 1 AssemblyReferences: Except(AssemblyReferences references) --- Path Number: 10 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line, bool isBeforeCode) --- Path Number: 11 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line) --- Path Number: 12 ----- Path Length: 1 ScriptHost: ScriptHost(IScriptPackManager scriptPackManager, ScriptEnvironment environment) --- Path Number: 13 ----- Path Length: 1 VisualStudioSolutionWriter: AddDirectoryProject(IVisualStudioSolution solution, IFileSystem fs, DirectoryInfo currentDirectory, Guid parent, IList<ProjectItem> nestedItems) --- Path Number: 14 ----- Path Length: 1 VisualStudioSolutionWriter: GetDirectoryInfo(IFileSystem fs, string currentDir, DirectoryInfo root) --- ******* Finished Generating test paths for ScriptCs.Hosting project. Using MSBuild at 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin' to load projects. Loading solution 'C:\Users\Mehdi.Qorbanpur\Dropbox\MDH\Thesis\Samples\scriptcs-dev\ScriptCs.sln' Finished loading solution 'C:\Users\Mehdi.Qorbanpur\Dropbox\MDH\Thesis\Samples\scriptcs-dev\ScriptCs.sln' In analysis of used variables in method 'ScriptCs.Command.CommandFactory.CreateCommand(Config config, string[] scriptArgs)', due to variable '_initializationServices', we get to method 'ScriptCs.Command.CommandFactory.CommandFactory(IScriptServicesBuilder scriptServicesBuilder)', which defines this variable. In analysis of used variables in method 'ScriptCs.Command.CommandFactory.CreateCommand(Config config, string[] scriptArgs)', due to variable '_fileSystem', we get to method

Page 51: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

50

'ScriptCs.Command.CommandFactory.CommandFactory(IScriptServicesBuilder scriptServicesBuilder)', which defines this variable. In analysis of used variables in method 'ScriptCs.Config.Create(string maskFile, ConfigMask configMask)', due to variable '_modules', we get to method 'ScriptCs.Config.Apply(ConfigMask mask)', which defines this variable. ******* Generating test paths for scriptcs project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- ******* Finished Generating test paths for scriptcs project. ******* Generating test paths for ScriptCs.Contracts project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2

Page 52: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

51

CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- Path Number: 8 ----- Path Length: 1 AssemblyReferences: Union(AssemblyReferences references) --- Path Number: 9 ----- Path Length: 1 AssemblyReferences: Except(AssemblyReferences references) --- Path Number: 10 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line, bool isBeforeCode) --- Path Number: 11 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line) --- ******* Finished Generating test paths for ScriptCs.Contracts project. ******* Generating test paths for ScriptCs.Core project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs)

Page 53: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

52

CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- Path Number: 8 ----- Path Length: 1 AssemblyReferences: Union(AssemblyReferences references) --- Path Number: 9 ----- Path Length: 1 AssemblyReferences: Except(AssemblyReferences references) --- Path Number: 10 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line, bool isBeforeCode) --- Path Number: 11 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line) --- Path Number: 12 ----- Path Length: 1 ScriptHost: ScriptHost(IScriptPackManager scriptPackManager, ScriptEnvironment environment) --- ******* Finished Generating test paths for ScriptCs.Core project. ******* Generating test paths for ScriptCs.Hosting project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) ---

Page 54: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

53

Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- Path Number: 8 ----- Path Length: 1 AssemblyReferences: Union(AssemblyReferences references) --- Path Number: 9 ----- Path Length: 1 AssemblyReferences: Except(AssemblyReferences references) --- Path Number: 10 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line, bool isBeforeCode) --- Path Number: 11 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line) --- Path Number: 12 ----- Path Length: 1 ScriptHost: ScriptHost(IScriptPackManager scriptPackManager, ScriptEnvironment environment) --- Path Number: 13 ----- Path Length: 1 VisualStudioSolutionWriter: AddDirectoryProject(IVisualStudioSolution solution, IFileSystem fs, DirectoryInfo currentDirectory, Guid parent, IList<ProjectItem> nestedItems) --- Path Number: 14 ----- Path Length: 1 VisualStudioSolutionWriter: GetDirectoryInfo(IFileSystem fs, string currentDir, DirectoryInfo root) ---

Page 55: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

54

******* Finished Generating test paths for ScriptCs.Hosting project. ******* Generating test paths for ScriptCs.Engine.Roslyn project: Path Number: 1 ----- Path Length: 1 Application: Run(Config config, string[] scriptArgs) --- Path Number: 2 ----- Path Length: 2 CommandFactory: CreateCommand(Config config, string[] scriptArgs) CommandFactory: CommandFactory(IScriptServicesBuilder scriptServicesBuilder) --- Path Number: 3 ----- Path Length: 1 CommandFactory: CreateScriptCommand( Config config, string[] scriptArgs, ScriptServices scriptServices) --- Path Number: 4 ----- Path Length: 1 WatchScriptCommand: WatchScriptCommand( Config config, string[] scriptArgs, IConsole console, IFileSystem fileSystem, ILogProvider logProvider) --- Path Number: 5 ----- Path Length: 2 Config: Create(string maskFile, ConfigMask configMask) Config: Apply(ConfigMask mask) --- Path Number: 6 ----- Path Length: 1 Config: Apply(ConfigMask mask) --- Path Number: 7 ----- Path Length: 1 ScriptServicesBuilderFactory: Create(Config config, string[] scriptArgs) --- Path Number: 8 ----- Path Length: 1 AssemblyReferences: Union(AssemblyReferences references) --- Path Number: 9 ----- Path Length: 1 AssemblyReferences: Except(AssemblyReferences references) --- Path Number: 10 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line, bool isBeforeCode) --- Path Number: 11 ----- Path Length: 1 DirectiveLineProcessor: ProcessLine(IFileParser parser, FileParserContext context, string line) --- Path Number: 12 ----- Path Length: 1

Page 56: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

55

ScriptHost: ScriptHost(IScriptPackManager scriptPackManager, ScriptEnvironment environment) --- Path Number: 13 ----- Path Length: 1 VisualStudioSolutionWriter: AddDirectoryProject(IVisualStudioSolution solution, IFileSystem fs, DirectoryInfo currentDirectory, Guid parent, IList<ProjectItem> nestedItems) --- Path Number: 14 ----- Path Length: 1 VisualStudioSolutionWriter: GetDirectoryInfo(IFileSystem fs, string currentDir, DirectoryInfo root) --- ******* Finished Generating test paths for ScriptCs.Engine.Roslyn project.

13.3. Wyam test paths

Using MSBuild at 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin' to load projects. Loading solution 'C:\Dropbox\MDH\Thesis\Samples\Wyam-develop\Wyam.sln' Finished loading solution 'C:\Dropbox\MDH\Thesis\Samples\Wyam-develop\Wyam.sln' ******* Generating test paths for Wyam project: In analysis of used variables in method 'Wyam.InterlockedBool.public static implicit operator bool(InterlockedBool interlockedBool) { return interlockedBool._set != 0; }(InterlockedBool interlockedBool)', due to variable '_set', we get to method 'Wyam.InterlockedBool.InterlockedBool()', which defines this variable. In analysis of used variables in method 'Wyam.InterlockedBool.public static implicit operator bool(InterlockedBool interlockedBool) { return interlockedBool._set != 0; }(InterlockedBool interlockedBool)', due to variable '_set', we get to method 'Wyam.InterlockedBool.InterlockedBool(bool initialState)', which defines this variable. Path Number: 1 ----- Path Length: 1 ----- ParameterCoupling BuildCommand: TraceEnviornment(EngineManager engineManager) --- Path Number: 2 ----- Path Length: 1 ----- ParameterCoupling Command: ParseRootPathParameter(ArgumentSyntax syntax, ConfigOptions configOptions) --- Path Number: 3 ----- Path Length: 1 ----- ParameterCoupling EngineManager: Get(Preprocessor preprocessor, ConfigOptions configOptions) ---

Page 57: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

56

Path Number: 4 ----- Path Length: 1 ----- ParameterCoupling EngineManager: EngineManager(Preprocessor preprocessor, ConfigOptions configOptions) --- Path Number: 5 ----- Path Length: 2 ----- ParameterCoupling InterlockedBool: public static implicit operator bool(InterlockedBool interlockedBool) { return interlockedBool._set != 0; }(InterlockedBool interlockedBool) InterlockedBool: InterlockedBool() --- Path Number: 6 ----- Path Length: 2 ----- ParameterCoupling InterlockedBool: public static implicit operator bool(InterlockedBool interlockedBool) { return interlockedBool._set != 0; }(InterlockedBool interlockedBool) InterlockedBool: InterlockedBool(bool initialState) --- ******* Finished generating test paths for Wyam project. ******* Generating test paths for Wyam.Core project: In analysis of used variables in method 'Wyam.Core.Execution.ExecutionContext.ExecutionContext(ExecutionContext original, IModule module)', due to variable '_pipeline', we get to method 'Wyam.Core.Execution.ExecutionContext.ExecutionContext(Engine engine, Guid executionId, ExecutionPipeline pipeline)', which defines this variable. In analysis of used variables in method 'Wyam.Core.Execution.ExecutionPipeline.Execute(Engine engine, Guid executionId)', due to variable '_modules', we get to method 'Wyam.Core.Execution.ExecutionPipeline.ExecutionPipeline(string name, IModuleList modules)', which defines this variable. In analysis of used variables in method 'Wyam.Core.Modules.Contents.Shortcodes.ProcessShortcodes(Stream inputStream, IDocument input, IExecutionContext context, out IDocument result)', due to variable '_startDelimiter', we get to method 'Wyam.Core.Modules.Contents.Shortcodes.Shortcodes(bool preRender = false)', which defines this variable. In analysis of used variables in method 'Wyam.Core.Modules.Contents.Shortcodes.ProcessShortcodes(Stream inputStream, IDocument input, IExecutionContext context, out IDocument result)', due to variable '_startDelimiter', we get to method 'Wyam.Core.Modules.Contents.Shortcodes.Shortcodes(string startDelimiter, string endDelimiter)', which defines this variable.

Page 58: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

57

In analysis of used variables in method 'Wyam.Core.Modules.Contents.Shortcodes.ProcessShortcodes(Stream inputStream, IDocument input, IExecutionContext context, out IDocument result)', due to variable '_endDelimiter', we get to method 'Wyam.Core.Modules.Contents.Shortcodes.Shortcodes(bool preRender = false)', which defines this variable. In analysis of used variables in method 'Wyam.Core.Modules.Contents.Shortcodes.ProcessShortcodes(Stream inputStream, IDocument input, IExecutionContext context, out IDocument result)', due to variable '_endDelimiter', we get to method 'Wyam.Core.Modules.Contents.Shortcodes.Shortcodes(string startDelimiter, string endDelimiter)', which defines this variable. Path Number: 1 ----- Path Length: 1 ----- ParameterCoupling BlockingStream: BlockingStream(Stream stream, Document document) --- Path Number: 2 ----- Path Length: 1 ----- CallCoupling BlockingStream: Dispose(bool disposing) --- Path Number: 3 ----- Path Length: 1 ----- ParameterCoupling CustomDocumentFactory: GetCustomDocument(CustomDocument customDocument, IDocument document) --- Path Number: 4 ----- Path Length: 1 ----- ParameterCoupling Document: Document(MetadataDictionary initialMetadata, Stream stream = null) --- Path Number: 5 ----- Path Length: 1 ----- ParameterCoupling Document: Document(MetadataDictionary initialMetadata, FilePath source, Stream stream, IEnumerable<KeyValuePair<string, object>> items, bool disposeStream) --- Path Number: 6 ----- Path Length: 1 ----- ParameterCoupling Document: Document(string id, MetadataStack metadata, FilePath source, Stream stream, object streamLock, IEnumerable<KeyValuePair<string, object>> items, bool disposeStream) --- Path Number: 7 ----- Path Length: 1 ----- ParameterCoupling Document: Document(Document sourceDocument, FilePath source, IEnumerable<KeyValuePair<string, object>> items = null) --- Path Number: 8 ----- Path Length: 1 ----- ParameterCoupling Document: Document(Document sourceDocument, FilePath source, Stream stream, IEnumerable<KeyValuePair<string, object>> items = null, bool disposeStream = true) ---

Page 59: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

58

Path Number: 9 ----- Path Length: 1 ----- ParameterCoupling Document: Document(Document sourceDocument, Stream stream, IEnumerable<KeyValuePair<string, object>> items = null, bool disposeStream = true) --- Path Number: 10 ----- Path Length: 1 ----- ParameterCoupling Document: Document(Document sourceDocument, IEnumerable<KeyValuePair<string, object>> items) --- Path Number: 11 ----- Path Length: 1 ----- ParameterCoupling DocumentFactory: DocumentFactory(MetadataDictionary settings) --- Path Number: 12 ----- Path Length: 1 ----- CallCoupling Engine: Dispose() --- Path Number: 13 ----- Path Length: 1 ----- ParameterCoupling ExecutionContext: ExecutionContext(Engine engine, Guid executionId, ExecutionPipeline pipeline) --- Path Number: 14 ----- Path Length: 2 ----- ParameterCoupling ExecutionContext: ExecutionContext(ExecutionContext original, IModule module) ExecutionContext: ExecutionContext(Engine engine, Guid executionId, ExecutionPipeline pipeline) --- Path Number: 15 ----- Path Length: 1 ----- CallCoupling ExecutionContext: Execute(IEnumerable<IModule> modules, IEnumerable<IDocument> inputs, IEnumerable<KeyValuePair<string, object>> items) --- Path Number: 16 ----- Path Length: 2 ----- ParameterCoupling ExecutionPipeline: Execute(Engine engine, Guid executionId) ExecutionPipeline: ExecutionPipeline(string name, IModuleList modules) --- Path Number: 17 ----- Path Length: 1 ----- ParameterCoupling ExecutionPipeline: Execute(ExecutionContext context, IEnumerable<IModule> modules, ImmutableArray<IDocument> inputDocuments) --- Path Number: 18 ----- Path Length: 1 ----- ParameterCoupling LocalCaseSensitivityChecker: IsCaseSensitive(LocalDirectory directory) --- Path Number: 19 ----- Path Length: 1 ----- ParameterCoupling VirtualInputDirectory: VirtualInputDirectory(FileSystem fileSystem, DirectoryPath path)

Page 60: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

59

--- Path Number: 20 ----- Path Length: 1 ----- ParameterCoupling PooledJavaScriptEngine: PooledJavaScriptEngine(JavaScriptEngine engine, JsPool<JavaScriptEngine> pool) --- Path Number: 21 ----- Path Length: 1 ----- CallCoupling PooledJavaScriptEngine: Evaluate(string expression) --- Path Number: 22 ----- Path Length: 1 ----- CallCoupling PooledJavaScriptEngine: Execute(string code) --- Path Number: 23 ----- Path Length: 1 ----- CallCoupling PooledJavaScriptEngine: ExecuteFile(string path, Encoding encoding = null) --- Path Number: 24 ----- Path Length: 1 ----- CallCoupling PooledJavaScriptEngine: ExecuteResource(string resourceName, Type type) --- Path Number: 25 ----- Path Length: 1 ----- CallCoupling PooledJavaScriptEngine: HasVariable(string variableName) --- Path Number: 26 ----- Path Length: 1 ----- CallCoupling PooledJavaScriptEngine: GetVariableValue(string variableName) --- Path Number: 27 ----- Path Length: 1 ----- CallCoupling PooledJavaScriptEngine: SetVariableValue(string variableName, object value) --- Path Number: 28 ----- Path Length: 1 ----- CallCoupling PooledJavaScriptEngine: RemoveVariable(string variableName) --- Path Number: 29 ----- Path Length: 1 ----- CallCoupling PooledJavaScriptEngine: EmbedHostType(string itemName, Type type) --- Path Number: 30 ----- Path Length: 1 ----- ParameterCoupling MetadataStack: MetadataStack(Metadata initialMetadata, IEnumerable<KeyValuePair<string, object>> items = null) --- Path Number: 31 ----- Path Length: 2 ----- CallCoupling

Page 61: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

60

Shortcodes: ProcessShortcodes(Stream inputStream, IDocument input, IExecutionContext context, out IDocument result) Shortcodes: Shortcodes(bool preRender = false) --- Path Number: 32 ----- Path Length: 2 ----- CallCoupling Shortcodes: ProcessShortcodes(Stream inputStream, IDocument input, IExecutionContext context, out IDocument result) Shortcodes: Shortcodes(string startDelimiter, string endDelimiter) --- Path Number: 33 ----- Path Length: 1 ----- ParameterCoupling If: IndexOf(IfCondition item) --- Path Number: 34 ----- Path Length: 1 ----- ParameterCoupling If: Insert(int index, IfCondition item) --- Path Number: 35 ----- Path Length: 1 ----- ParameterCoupling If: Add(IfCondition item) --- Path Number: 36 ----- Path Length: 1 ----- ParameterCoupling If: Contains(IfCondition item) --- Path Number: 37 ----- Path Length: 1 ----- ParameterCoupling If: Remove(IfCondition item) --- Path Number: 38 ----- Path Length: 1 ----- ParameterCoupling Download: Download(string uri, RequestHeaders headers) --- Path Number: 39 ----- Path Length: 1 ----- ParameterCoupling Download: WithUri(string uri, RequestHeaders headers = null) --- Path Number: 40 ----- Path Length: 1 ----- ParameterCoupling Download: GetResponse(DownloadRequest request, IExecutionContext context) --- Path Number: 41 ----- Path Length: 1 ----- ParameterCoupling DownloadRequest: WithHeaders(RequestHeaders headers) --- Path Number: 42 ----- Path Length: 1 ----- ParameterCoupling TreeNode: TreeNode(Tree tree, IDocument inputDocument, IExecutionContext context) ---

Page 62: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

61

Path Number: 43 ----- Path Length: 1 ----- ParameterCoupling TreeNode: GenerateOutputDocuments(Tree tree, IExecutionContext context) --- Path Number: 44 ----- Path Length: 1 ----- ParameterCoupling TreeNodeEqualityComparer: Equals(TreeNode x, TreeNode y) --- Path Number: 45 ----- Path Length: 1 ----- ParameterCoupling TreeNodeEqualityComparer: GetHashCode(TreeNode obj) --- ******* Finished generating test paths for Wyam.Core project. ******* Generating test paths for Wyam.Markdown project: ******* Finished generating test paths for Wyam.Markdown project. ******* Generating test paths for Wyam.Common project: In analysis of used variables in method 'Wyam.Common.IO.PathCollection.IndexOf(TPath path)', due to variable '_paths', we get to method 'Wyam.Common.IO.PathCollection.PathCollection(IEnumerable<TPath> paths)', which defines this variable. In analysis of used variables in method 'Wyam.Common.Modules.ContentModule.Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)', due to variable '_modules', we get to method 'Wyam.Common.Modules.ContentModule.ContentModule(params IModule[] modules)', which defines this variable. In analysis of used variables in method 'Wyam.Common.Modules.ContentModule.Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)', due to variable '_content', we get to method 'Wyam.Common.Modules.ContentModule.ContentModule(object content)', which defines this variable. In analysis of used variables in method 'Wyam.Common.Modules.ContentModule.Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)', due to variable '_content', we get to method 'Wyam.Common.Modules.ContentModule.ContentModule(ContextConfig content)', which defines this variable.

Page 63: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

62

In analysis of used variables in method 'Wyam.Common.Modules.ContentModule.Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)', due to variable '_content', we get to method 'Wyam.Common.Modules.ContentModule.ContentModule(DocumentConfig content)', which defines this variable. Path Number: 1 ----- Path Length: 1 ----- CallCoupling ConfigExtensions: Invoke(this DocumentConfig config, IDocument document, IExecutionContext context, string errorDetails) --- Path Number: 2 ----- Path Length: 1 ----- CallCoupling FileContentStream: Dispose(bool disposing) --- Path Number: 3 ----- Path Length: 1 ----- CallCoupling FileContentStreamFactory: GetStream(IExecutionContext context, string content = null) --- Path Number: 4 ----- Path Length: 1 ----- CallCoupling DateTimeCultureExtensions: GetDateTimeInputCulture(this IExecutionContext context) --- Path Number: 5 ----- Path Length: 1 ----- CallCoupling DateTimeCultureExtensions: GetDateTimeDisplayCulture(this IExecutionContext context, string targetCulture = "en-GB") --- Path Number: 6 ----- Path Length: 1 ----- ParameterCoupling LinkExtensions: GetLink(this IExecutionContext context, string path, string host, DirectoryPath root, bool useHttps, bool hideIndexPages, bool hideExtensions) --- Path Number: 7 ----- Path Length: 1 ----- ParameterCoupling LinkExtensions: GetLink(this IExecutionContext context, NormalizedPath path, bool includeHost = false) --- Path Number: 8 ----- Path Length: 1 ----- ParameterCoupling LinkExtensions: GetLink( this IExecutionContext context, NormalizedPath path, string host, DirectoryPath root, bool useHttps, bool hideIndexPages, bool hideExtensions) --- Path Number: 9 ----- Path Length: 1 ----- ParameterCoupling

Page 64: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

63

LinkExtensions: GetLink( this IExecutionContext context, NormalizedPath path, string host, DirectoryPath root, bool useHttps, bool hideIndexPages, bool hideExtensions, bool lowercase) --- Path Number: 10 ----- Path Length: 1 ----- ParameterCoupling Pipeline: public static implicit operator string(Pipeline pipeline) => pipeline?.Name;(Pipeline pipeline) --- Path Number: 11 ----- Path Length: 1 ----- CallCoupling PipelineCollectionExtensions: InsertBefore(this IPipelineCollection pipelines, string target, string name, IModuleList modules) --- Path Number: 12 ----- Path Length: 1 ----- CallCoupling PipelineCollectionExtensions: InsertBefore(this IPipelineCollection pipelines, string target, IPipeline pipeline) --- Path Number: 13 ----- Path Length: 1 ----- CallCoupling PipelineCollectionExtensions: InsertAfter(this IPipelineCollection pipelines, string target, string name, IModuleList modules) --- Path Number: 14 ----- Path Length: 1 ----- CallCoupling PipelineCollectionExtensions: InsertAfter(this IPipelineCollection pipelines, string target, IPipeline pipeline) --- Path Number: 15 ----- Path Length: 1 ----- CallCoupling TraceExceptionsExtensions: TraceExceptions(this IExecutionContext context, IDocument document, Action<IDocument> action) --- Path Number: 16 ----- Path Length: 1 ----- CallCoupling TraceExceptionsExtensions: TraceExceptions(this IExecutionContext context, IDocument document, Func<IDocument, TResult> func) --- Path Number: 17 ----- Path Length: 1 ----- CallCoupling DirectoryEqualityComparer: Equals(IDirectory x, IDirectory y) ---

Page 65: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

64

Path Number: 18 ----- Path Length: 1 ----- CallCoupling DirectoryEqualityComparer: GetHashCode(IDirectory obj) --- Path Number: 19 ----- Path Length: 1 ----- ParameterCoupling DirectoryPath: GetFilePath(FilePath path) --- Path Number: 20 ----- Path Length: 1 ----- ParameterCoupling DirectoryPath: GetRelativePath(DirectoryPath target) --- Path Number: 21 ----- Path Length: 1 ----- ParameterCoupling DirectoryPath: GetRelativePath(FilePath target) --- Path Number: 22 ----- Path Length: 1 ----- ParameterCoupling DirectoryPath: CombineFile(FilePath path) --- Path Number: 23 ----- Path Length: 1 ----- ParameterCoupling DirectoryPath: Combine(DirectoryPath path) --- Path Number: 24 ----- Path Length: 1 ----- CallCoupling FileEqualityComparer: Equals(IFile x, IFile y) --- Path Number: 25 ----- Path Length: 1 ----- CallCoupling FileEqualityComparer: GetHashCode(IFile obj) --- Path Number: 26 ----- Path Length: 1 ----- ParameterCoupling NormalizedPath: Collapse(NormalizedPath path) --- Path Number: 27 ----- Path Length: 1 ----- ParameterCoupling NormalizedPath: Equals(NormalizedPath other) --- Path Number: 28 ----- Path Length: 1 ----- ParameterCoupling NormalizedPath: CompareTo(NormalizedPath other) --- Path Number: 29 ----- Path Length: 2 ----- CallCoupling PathCollection: IndexOf(TPath path) PathCollection: PathCollection(IEnumerable<TPath> paths) --- Path Number: 30 ----- Path Length: 1 ----- ParameterCoupling

Page 66: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

65

PathEqualityComparer: Equals(NormalizedPath x, NormalizedPath y) --- Path Number: 31 ----- Path Length: 1 ----- ParameterCoupling PathEqualityComparer: GetHashCode(NormalizedPath obj) --- Path Number: 32 ----- Path Length: 1 ----- ParameterCoupling RelativePathResolver: Resolve(DirectoryPath source, FilePath target) --- Path Number: 33 ----- Path Length: 1 ----- ParameterCoupling RelativePathResolver: Resolve(DirectoryPath source, DirectoryPath target) --- Path Number: 34 ----- Path Length: 1 ----- CallCoupling CachedDelegateMetadataValue: Get(IMetadata metadata) --- Path Number: 35 ----- Path Length: 1 ----- ParameterCoupling MetadataConversionExtensions: FilePath(this IMetadata metadata, string key, FilePath defaultValue = null) --- Path Number: 36 ----- Path Length: 1 ----- ParameterCoupling MetadataConversionExtensions: DirectoryPath(this IMetadata metadata, string key, DirectoryPath defaultValue = null) --- Path Number: 37 ----- Path Length: 2 ----- CallCoupling ContentModule: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) ContentModule: ContentModule(params IModule[] modules) --- Path Number: 38 ----- Path Length: 2 ----- CallCoupling ContentModule: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) ContentModule: ContentModule(object content) --- Path Number: 39 ----- Path Length: 2 ----- CallCoupling ContentModule: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) ContentModule: ContentModule(ContextConfig content) --- Path Number: 40 ----- Path Length: 2 ----- CallCoupling ContentModule: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)

Page 67: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

66

ContentModule: ContentModule(DocumentConfig content) --- Path Number: 41 ----- Path Length: 1 ----- CallCoupling ModuleListExtensions: Append(this TModuleList moduleList, string name, IModule module) --- Path Number: 42 ----- Path Length: 1 ----- CallCoupling ModuleListExtensions: IndexOfOrThrow(this IModuleList moduleList, string name) --- Path Number: 43 ----- Path Length: 1 ----- CallCoupling ReadDataModule: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) --- Path Number: 44 ----- Path Length: 1 ----- CallCoupling ShortcodeExtensions: ToDictionary(this KeyValuePair<string, string>[] args, IExecutionContext context, params string[] keys) --- Path Number: 45 ----- Path Length: 1 ----- CallCoupling IndentedTraceEvent: Critical(string messageOrFormat, params object[] args) --- Path Number: 46 ----- Path Length: 1 ----- CallCoupling IndentedTraceEvent: Error(string messageOrFormat, params object[] args) --- Path Number: 47 ----- Path Length: 1 ----- CallCoupling IndentedTraceEvent: Warning(string messageOrFormat, params object[] args) --- Path Number: 48 ----- Path Length: 1 ----- CallCoupling IndentedTraceEvent: Information(string messageOrFormat, params object[] args) --- Path Number: 49 ----- Path Length: 1 ----- CallCoupling IndentedTraceEvent: Verbose(string messageOrFormat, params object[] args) --- Path Number: 50 ----- Path Length: 1 ----- CallCoupling IndentedTraceEvent: TraceEvent(TraceEventType eventType, string messageOrFormat, params object[] args) --- Path Number: 51 ----- Path Length: 1 ----- ParameterCoupling LinkGenerator: GetLink(NormalizedPath path, string host, DirectoryPath root, string scheme, string[] hidePages, string[] hideExtensions, bool lowercase) ---

Page 68: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

67

******* Finished generating test paths for Wyam.Common project. ******* Generating test paths for Wyam.Yaml project: In analysis of used variables in method 'Wyam.Yaml.Dynamic.DynamicYaml.Reload(TextReader reader)', due to variable '_yamlNode', we get to method 'Wyam.Yaml.Dynamic.DynamicYaml.Reload(YamlNode node)', which defines this variable. In analysis of used variables in method 'Wyam.Yaml.Dynamic.DynamicYaml.Reload(string yaml)', due to variable '_yamlNode', we get to method 'Wyam.Yaml.Dynamic.DynamicYaml.Reload(YamlNode node)', which defines this variable. Path Number: 1 ----- Path Length: 2 ----- CallCoupling DynamicYaml: Reload(TextReader reader) DynamicYaml: Reload(YamlNode node) --- Path Number: 2 ----- Path Length: 2 ----- CallCoupling DynamicYaml: Reload(string yaml) DynamicYaml: Reload(YamlNode node) --- ******* Finished generating test paths for Wyam.Yaml project. ******* Generating test paths for Wyam.Razor project: In analysis of used variables in method 'Wyam.Razor.CompilerCacheKey.Equals(CompilerCacheKey other)', due to variable '_request', we get to method 'Wyam.Razor.CompilerCacheKey.CompilerCacheKey(RenderRequest request, byte[] fileHash)', which defines this variable. In analysis of used variables in method 'Wyam.Razor.CompilerCacheKey.Equals(CompilerCacheKey other)', due to variable '_fileHash', we get to method 'Wyam.Razor.CompilerCacheKey.CompilerCacheKey(RenderRequest request, byte[] fileHash)', which defines this variable. In analysis of used variables in method 'Wyam.Razor.Razor.Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)', due to variable '_basePageType', we get to method 'Wyam.Razor.Razor.Razor(Type basePageType = null)', which defines this variable.

Page 69: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

68

In analysis of used variables in method 'Wyam.Razor.Razor.Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)', due to variable '_layoutPath', we get to method 'Wyam.Razor.Razor.WithLayout(FilePath path)', which defines this variable. In analysis of used variables in method 'Wyam.Razor.Razor.Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)', due to variable '_layoutPath', we get to method 'Wyam.Razor.Razor.WithLayout(DocumentConfig path)', which defines this variable. In analysis of used variables in method 'Wyam.Razor.Razor.Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)', due to variable '_model', we get to method 'Wyam.Razor.Razor.WithModel(object model)', which defines this variable. In analysis of used variables in method 'Wyam.Razor.Razor.Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)', due to variable '_model', we get to method 'Wyam.Razor.Razor.WithModel(DocumentConfig model)', which defines this variable. In analysis of used variables in method 'Wyam.Razor.Razor.Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)', due to variable '_viewStartPath', we get to method 'Wyam.Razor.Razor.WithViewStart(FilePath path)', which defines this variable. In analysis of used variables in method 'Wyam.Razor.Razor.Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context)', due to variable '_viewStartPath', we get to method 'Wyam.Razor.Razor.WithViewStart(DocumentConfig path)', which defines this variable. Path Number: 1 ----- Path Length: 1 ----- ParameterCoupling CompilerCacheKey: CompilerCacheKey(RenderRequest request, byte[] fileHash) --- Path Number: 2 ----- Path Length: 2 ----- ParameterCoupling CompilerCacheKey: Equals(CompilerCacheKey other) CompilerCacheKey: CompilerCacheKey(RenderRequest request, byte[] fileHash) --- Path Number: 3 ----- Path Length: 1 ----- CallCoupling FileSystemFileProvider: ExpireChangeTokens() --- Path Number: 4 ----- Path Length: 1 ----- ParameterCoupling HostingEnvironment: HostingEnvironment(FileSystemFileProvider fileProvider) --- Path Number: 5 ----- Path Length: 1 ----- ParameterCoupling

Page 70: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

69

MetadataReferenceFeatureProvider: MetadataReferenceFeatureProvider(DynamicAssemblyCollection dynamicAssemblies) --- Path Number: 6 ----- Path Length: 2 ----- CallCoupling Razor: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) Razor: Razor(Type basePageType = null) --- Path Number: 7 ----- Path Length: 2 ----- CallCoupling Razor: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) Razor: WithLayout(FilePath path) --- Path Number: 8 ----- Path Length: 2 ----- CallCoupling Razor: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) Razor: WithLayout(DocumentConfig path) --- Path Number: 9 ----- Path Length: 2 ----- CallCoupling Razor: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) Razor: WithModel(object model) --- Path Number: 10 ----- Path Length: 2 ----- CallCoupling Razor: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) Razor: WithModel(DocumentConfig model) --- Path Number: 11 ----- Path Length: 2 ----- CallCoupling Razor: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) Razor: WithViewStart(FilePath path) --- Path Number: 12 ----- Path Length: 2 ----- CallCoupling Razor: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) Razor: WithViewStart(DocumentConfig path) --- Path Number: 13 ----- Path Length: 1 ----- ParameterCoupling RazorCompiler: RenderPage(RenderRequest request) --- Path Number: 14 ----- Path Length: 1 ----- ParameterCoupling RazorCompiler: GetViewContext(IServiceProvider serviceProvider, RenderRequest request, IView view, TextWriter output) --- Path Number: 15 ----- Path Length: 1 ----- ParameterCoupling

Page 71: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

70

RazorCompiler: GetViewFromStream(IServiceProvider serviceProvider, RenderRequest request, IRazorPage page) --- Path Number: 16 ----- Path Length: 1 ----- ParameterCoupling RazorCompiler: GetPageFromStream(IServiceProvider serviceProvider, RenderRequest request) --- Path Number: 17 ----- Path Length: 1 ----- ParameterCoupling RazorCompiler: CompilePage(IServiceProvider serviceProvider, RenderRequest request, byte[] hash, RazorProjectItem projectItem, RazorProjectFileSystem projectFileSystem) --- Path Number: 18 ----- Path Length: 1 ----- ParameterCoupling RazorService: Render(RenderRequest request) --- Path Number: 19 ----- Path Length: 1 ----- CallCoupling RazorService: ExpireChangeTokens() --- Path Number: 20 ----- Path Length: 1 ----- ParameterCoupling WyamDocumentPhase: WyamDocumentPhase(string baseType, NamespaceCollection namespaces) --- ******* Finished generating test paths for Wyam.Razor project. ******* Generating test paths for Wyam.Less project: ******* Finished generating test paths for Wyam.Less project. ******* Generating test paths for Wyam.Images project: Path Number: 1 ----- Path Length: 1 ----- CallCoupling Image: Operation( Func<IImageProcessingContext<Rgba32>, IImageProcessingContext<Rgba32>> operation, Func<FilePath, FilePath> pathModifier = null) --- Path Number: 2 ----- Path Length: 1 ----- CallCoupling Image: Resize( int? width, int? height,

Page 72: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

71

AnchorPositionMode anchor = AnchorPositionMode.Center, ResizeMode mode = ResizeMode.BoxPad) --- Path Number: 3 ----- Path Length: 1 ----- CallCoupling Image: BlackWhite() --- Path Number: 4 ----- Path Length: 1 ----- CallCoupling Image: Brightness(float amount) --- Path Number: 5 ----- Path Length: 1 ----- CallCoupling Image: Opacity(float amount) --- Path Number: 6 ----- Path Length: 1 ----- CallCoupling Image: Hue(float degrees) --- Path Number: 7 ----- Path Length: 1 ----- CallCoupling Image: Vignette(Rgba32 color) --- Path Number: 8 ----- Path Length: 1 ----- CallCoupling Image: Saturate(float amount) --- Path Number: 9 ----- Path Length: 1 ----- CallCoupling Image: Contrast(float amount) --- Path Number: 10 ----- Path Length: 1 ----- CallCoupling Image: SetSuffix(string suffix) --- Path Number: 11 ----- Path Length: 1 ----- CallCoupling Image: SetPrefix(string prefix) --- ******* Finished generating test paths for Wyam.Images project. ******* Generating test paths for Wyam.Html project: ******* Finished generating test paths for Wyam.Html project.

Page 73: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

72

******* Generating test paths for Wyam.CodeAnalysis project: Path Number: 1 ----- Path Length: 1 ----- ParameterCoupling SymbolDocumentValue: SymbolDocumentValue(ISymbol symbol, AnalyzeSymbolVisitor visitor) --- Path Number: 2 ----- Path Length: 1 ----- ParameterCoupling SymbolDocumentValues: SymbolDocumentValues(IEnumerable<ISymbol> symbols, AnalyzeSymbolVisitor visitor) --- ******* Finished generating test paths for Wyam.CodeAnalysis project. ******* Generating test paths for Wyam.Xmp project: Path Number: 1 ----- Path Length: 1 ----- ParameterCoupling Xmp: GetObjectFromMetadata(TreeDirectory metadata, TreeDirectory hirachciDirectory) --- Path Number: 2 ----- Path Length: 1 ----- ParameterCoupling LocalizedString: public static implicit operator string(LocalizedString localizedString) { return localizedString.Value; }(LocalizedString localizedString) --- Path Number: 3 ----- Path Length: 1 ----- ParameterCoupling XmpSearchEntry: XmpSearchEntry(Xmp parent, bool isMandatory, string targetMetadata, string xmpPath) --- ******* Finished generating test paths for Wyam.Xmp project. ******* Generating test paths for Wyam.SearchIndex project: ******* Finished generating test paths for Wyam.SearchIndex project. ******* Generating test paths for Wyam.Tables project:

Page 74: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

73

Path Number: 1 ----- Path Length: 1 ----- CallCoupling ExcelToCsv: Execute(IReadOnlyList<IDocument> inputs, IExecutionContext context) --- ******* Finished generating test paths for Wyam.Tables project. ******* Generating test paths for Wyam.GitHub project: ******* Finished generating test paths for Wyam.GitHub project. ******* Generating test paths for Wyam.Json project: ******* Finished generating test paths for Wyam.Json project. ******* Generating test paths for Wyam.AmazonWebServices project: ******* Finished generating test paths for Wyam.AmazonWebServices project. ******* Generating test paths for Wyam.Minification project: ******* Finished generating test paths for Wyam.Minification project. ******* Generating test paths for Cake.Wyam project: Path Number: 1 ----- Path Length: 1 ----- ParameterCoupling WyamAliases: Wyam(this ICakeContext context, WyamSettings settings) --- Path Number: 2 ----- Path Length: 1 ----- ParameterCoupling WyamRunner: Run(WyamSettings settings) --- Path Number: 3 ----- Path Length: 1 ----- ParameterCoupling WyamRunner: GetArguments(WyamSettings settings)

Page 75: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

74

--- ******* Finished generating test paths for Cake.Wyam project. ******* Generating test paths for Wyam.Configuration project: In analysis of used variables in method 'Wyam.Configuration.NuGet.Package.Install(IReadOnlyList<SourceRepository> remoteRepositories, InstalledPackagesCache installedPackages, NuGetPackageManager packageManager)', due to variable '_exclusive', we get to method 'Wyam.Configuration.NuGet.Package.Package( NuGetFramework currentFramework, string packageId, IReadOnlyList<SourceRepository> sourceRepositories, string versionRange, bool getLatest, bool allowPrereleaseVersions, bool allowUnlisted, bool exclusive)', which defines this variable. In analysis of used variables in method 'Wyam.Configuration.NuGet.Package.Install(IReadOnlyList<SourceRepository> remoteRepositories, InstalledPackagesCache installedPackages, NuGetPackageManager packageManager)', due to variable '_sourceRepositories', we get to method 'Wyam.Configuration.NuGet.Package.Package( NuGetFramework currentFramework, string packageId, IReadOnlyList<SourceRepository> sourceRepositories, string versionRange, bool getLatest, bool allowPrereleaseVersions, bool allowUnlisted, bool exclusive)', which defines this variable. Path Number: 1 ----- Path Length: 1 ----- ParameterCoupling AssemblyLoader: AssemblyLoader(IReadOnlyFileSystem fileSystem, AssemblyResolver assemblyResolver) --- Path Number: 2 ----- Path Length: 1 ----- CallCoupling AssemblyLoader: AddToAssemblyCollection(Assembly assembly, bool direct) --- Path Number: 3 ----- Path Length: 1 ----- ParameterCoupling AssemblyResolver: AssemblyResolver(ScriptManager scriptManager) --- Path Number: 4 ----- Path Length: 1 ----- CallCoupling

Page 76: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

75

CacheManager: EvaluateCode(string code, IReadOnlyCollection<Type> classes, bool outputScript, bool ignoreConfigHash, bool noOutputConfigAssembly) --- Path Number: 5 ----- Path Length: 1 ----- ParameterCoupling Configurator: Configurator(Engine engine, Preprocessor preprocessor) --- Path Number: 6 ----- Path Length: 1 ----- CallCoupling Configurator: Dispose() --- Path Number: 7 ----- Path Length: 1 ----- CallCoupling Configurator: AddFileProviders() --- Path Number: 8 ----- Path Length: 1 ----- CallCoupling Configurator: AddShortcodes() --- Path Number: 9 ----- Path Length: 1 ----- ParameterCoupling ArgumentSyntaxDirective: Process(Configurator configurator, string value) --- Path Number: 10 ----- Path Length: 1 ----- ParameterCoupling ArgumentSyntaxDirective: Process(Configurator configurator, string value, bool getHelpText) --- Path Number: 11 ----- Path Length: 1 ----- ParameterCoupling ArgumentSyntaxDirective: Process(Configurator configurator, TSettings settings) --- Path Number: 12 ----- Path Length: 1 ----- ParameterCoupling AssemblyDirective: Process(Configurator configurator, string value) --- Path Number: 13 ----- Path Length: 1 ----- ParameterCoupling NuGetDirective: Define(ArgumentSyntax syntax, Settings settings) --- Path Number: 14 ----- Path Length: 1 ----- ParameterCoupling NuGetDirective: Process(Configurator configurator, Settings settings) --- Path Number: 15 ----- Path Length: 1 ----- ParameterCoupling NuGetSourceDirective: Process(Configurator configurator, string value) --- Path Number: 16 ----- Path Length: 1 ----- ParameterCoupling RecipeDirective: Define(ArgumentSyntax syntax, Settings settings)

Page 77: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

76

--- Path Number: 17 ----- Path Length: 1 ----- ParameterCoupling RecipeDirective: Process(Configurator configurator, Settings settings) --- Path Number: 18 ----- Path Length: 1 ----- ParameterCoupling ThemeDirective: Define(ArgumentSyntax syntax, Settings settings) --- Path Number: 19 ----- Path Length: 1 ----- ParameterCoupling ThemeDirective: Process(Configurator configurator, Settings settings) --- Path Number: 20 ----- Path Length: 1 ----- ParameterCoupling CachedPackage: AddDependency(CachedPackage cachedPackage) --- Path Number: 21 ----- Path Length: 1 ----- ParameterCoupling CachedPackageEntry: CachedPackageEntry(CachedPackage cachedPackage) --- Path Number: 22 ----- Path Length: 2 ----- ParameterCoupling Package: Install(IReadOnlyList<SourceRepository> remoteRepositories, InstalledPackagesCache installedPackages, NuGetPackageManager packageManager) Package: Package( NuGetFramework currentFramework, string packageId, IReadOnlyList<SourceRepository> sourceRepositories, string versionRange, bool getLatest, bool allowPrereleaseVersions, bool allowUnlisted, bool exclusive) --- Path Number: 23 ----- Path Length: 1 ----- ParameterCoupling PackageInstaller: PackageInstaller(IFileSystem fileSystem, AssemblyLoader assemblyLoader) --- Path Number: 24 ----- Path Length: 1 ----- ParameterCoupling PackageInstaller: InstallPackages(NuGetPackageManager packageManager, IReadOnlyList<SourceRepository> installationRepositories, InstalledPackagesCache installedPackages) --- Path Number: 25 ----- Path Length: 1 ----- ParameterCoupling

Page 78: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

77

WyamFolderNuGetProject: WyamFolderNuGetProject(IFileSystem fileSystem, AssemblyLoader assemblyLoader, NuGetFramework currentFramework, InstalledPackagesCache installedPackages, string root) --- Path Number: 26 ----- Path Length: 1 ----- ParameterCoupling Preprocessor: AddValue(DirectiveValue value) --- Path Number: 27 ----- Path Length: 1 ----- ParameterCoupling Preprocessor: ProcessDirectives(Configurator configurator, IEnumerable<DirectiveValue> additionalValues) --- ******* Finished generating test paths for Wyam.Configuration project. ******* Generating test paths for Wyam.Blog project: ******* Finished generating test paths for Wyam.Blog project. ******* Generating test paths for Wyam.Feeds project: In analysis of used variables in method 'Wyam.Feeds.Syndication.Rdf.RdfResource.public static explicit operator RdfBase(RdfResource value) { return value._target; }(RdfResource value)', due to variable '_target', we get to method 'Wyam.Feeds.Syndication.Rdf.RdfResource.RdfResource()', which defines this variable. In analysis of used variables in method 'Wyam.Feeds.Syndication.Rdf.RdfResource.public static explicit operator RdfBase(RdfResource value) { return value._target; }(RdfResource value)', due to variable '_target', we get to method 'Wyam.Feeds.Syndication.Rdf.RdfResource.RdfResource(RdfBase target)', which defines this variable. Path Number: 1 ----- Path Length: 1 ----- ParameterCoupling GenerateFeeds: GenerateFeed(FeedType feedType, Feed feed, ContextConfig path, IExecutionContext context) ---

Page 79: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

78

Path Number: 2 ----- Path Length: 1 ----- CallCoupling AtomBase: AddNamespaces(XmlSerializerNamespaces namespaces) --- Path Number: 3 ----- Path Length: 1 ----- ParameterCoupling AtomCategory: public static explicit operator string(AtomCategory value) { return value.Value; }(AtomCategory value) --- Path Number: 4 ----- Path Length: 1 ----- ParameterCoupling AtomContent: public static explicit operator string(AtomContent value) { return value.Value; }(AtomContent value) --- Path Number: 5 ----- Path Length: 1 ----- ParameterCoupling AtomContent: public static explicit operator XmlNode(AtomContent value) { return value.XhtmlValue; }(AtomContent value) --- Path Number: 6 ----- Path Length: 1 ----- CallCoupling AtomEntry: AddNamespaces(XmlSerializerNamespaces namespaces) --- Path Number: 7 ----- Path Length: 1 ----- CallCoupling AtomFeed: AddNamespaces(XmlSerializerNamespaces namespaces) --- Path Number: 8 ----- Path Length: 1 ----- ParameterCoupling AtomGenerator: public static explicit operator string(AtomGenerator value) { return value.Value; }(AtomGenerator value) --- Path Number: 9 ----- Path Length: 1 ----- CallCoupling AtomInReplyTo: AddNamespaces(XmlSerializerNamespaces namespaces) --- Path Number: 10 ----- Path Length: 1 ----- CallCoupling AtomLink: AddNamespaces(XmlSerializerNamespaces namespaces) --- Path Number: 11 ----- Path Length: 1 ----- ParameterCoupling AtomText: public static explicit operator string(AtomText value)

Page 80: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

79

{ return value.Value; }(AtomText value) --- Path Number: 12 ----- Path Length: 1 ----- ParameterCoupling AtomText: public static explicit operator XmlNode(AtomText value) { return value.XhtmlValue; }(AtomText value) --- Path Number: 13 ----- Path Length: 1 ----- CallCoupling DublinCore: Add(TermName term, string value) --- Path Number: 14 ----- Path Length: 1 ----- CallCoupling ExtensibleBase: AddExtensions(IExtensionAdapter adapter) --- Path Number: 15 ----- Path Length: 1 ----- CallCoupling ExtensibleBase: FillExtensions(IExtensionAdapter adapter) --- Path Number: 16 ----- Path Length: 1 ----- ParameterCoupling FeedSerializer: SerializeXml(FeedType feedType, IFeed feed, Stream output) --- Path Number: 17 ----- Path Length: 1 ----- ParameterCoupling FeedSerializer: SerializeXml(FeedType feedType, IFeed feed, Stream output, string xsltUrl) --- Path Number: 18 ----- Path Length: 1 ----- ParameterCoupling FeedSerializer: SerializeXml(FeedType feedType, IFeed feed, Stream output, string xsltUrl, bool prettyPrint) --- Path Number: 19 ----- Path Length: 1 ----- ParameterCoupling RdfChannel: SetParent(RdfFeed feed) --- Path Number: 20 ----- Path Length: 1 ----- CallCoupling RdfFeed: RdfFeed(IFeed source) --- Path Number: 21 ----- Path Length: 1 ----- CallCoupling RdfFeed: AddNamespaces(XmlSerializerNamespaces namespaces) --- Path Number: 22 ----- Path Length: 1 ----- CallCoupling

Page 81: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

80

RdfItem: RdfItem(IFeedItem source) --- Path Number: 23 ----- Path Length: 1 ----- CallCoupling RdfItem: AddNamespaces(XmlSerializerNamespaces namespaces) --- Path Number: 24 ----- Path Length: 1 ----- ParameterCoupling RdfResource: RdfResource(RdfBase target) --- Path Number: 25 ----- Path Length: 1 ----- ParameterCoupling RdfResource: public static implicit operator RdfResource(RdfBase value) { return new RdfResource(value); }(RdfBase value) --- Path Number: 26 ----- Path Length: 2 ----- ParameterCoupling RdfResource: public static explicit operator RdfBase(RdfResource value) { return value._target; }(RdfResource value) RdfResource: RdfResource() --- Path Number: 27 ----- Path Length: 2 ----- ParameterCoupling RdfResource: public static explicit operator RdfBase(RdfResource value) { return value._target; }(RdfResource value) RdfResource: RdfResource(RdfBase target) --- Path Number: 28 ----- Path Length: 1 ----- ParameterCoupling RdfSequence: RdfSequence(RdfFeed target) --- Path Number: 29 ----- Path Length: 1 ----- ParameterCoupling RssCategory: public static explicit operator string(RssCategory value) { return value.Value; }(RssCategory value) --- Path Number: 30 ----- Path Length: 1 ----- CallCoupling RssChannel: AddNamespaces(XmlSerializerNamespaces namespaces) --- Path Number: 31 ----- Path Length: 1 ----- CallCoupling

Page 82: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

81

RssFeed: AddNamespaces(XmlSerializerNamespaces namespaces) --- Path Number: 32 ----- Path Length: 1 ----- CallCoupling RssItem: AddNamespaces(XmlSerializerNamespaces namespaces) --- ******* Finished generating test paths for Wyam.Feeds project. ******* Generating test paths for Wyam.Docs project: ******* Finished generating test paths for Wyam.Docs project. ******* Generating test paths for Wyam.Highlight project: ******* Finished generating test paths for Wyam.Highlight project. ******* Generating test paths for Wyam.Hosting project: Path Number: 1 ----- Path Length: 1 ----- ParameterCoupling LiveReloadExtensions: UseLiveReload(this IApplicationBuilder builder, LiveReloadServer liveReloadServer) --- Path Number: 2 ----- Path Length: 1 ----- ParameterCoupling LiveReloadMiddleware: LiveReloadMiddleware(RequestDelegate next, LiveReloadServer liveReloadServer) --- Path Number: 3 ----- Path Length: 1 ----- CallCoupling LiveReloadServer: ConnectAsync(WebSocket webSocket, CancellationToken ct = default(CancellationToken)) --- Path Number: 4 ----- Path Length: 1 ----- ParameterCoupling DefaultExtensionsExtensions: UseDefaultExtensions(this IApplicationBuilder app, DefaultExtensionsOptions options) --- Path Number: 5 ----- Path Length: 1 ----- CallCoupling Server: TriggerReloadAsync()

Page 83: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

82

--- ******* Finished generating test paths for Wyam.Hosting project. ******* Generating test paths for Wyam.Sass project: ******* Finished generating test paths for Wyam.Sass project. ******* Generating test paths for Wyam.Web project: Path Number: 1 ----- Path Length: 1 ----- ParameterCoupling Archive: Archive(string name, ArchiveSettings settings) --- Path Number: 2 ----- Path Length: 1 ----- ParameterCoupling Archive: GetModules(ArchiveSettings settings) --- Path Number: 3 ----- Path Length: 1 ----- ParameterCoupling Archive: GetIndexPageModules(Documents documents, ArchiveSettings settings) --- Path Number: 4 ----- Path Length: 1 ----- ParameterCoupling BlogPosts: BlogPosts(string name, BlogPostsSettings settings) --- Path Number: 5 ----- Path Length: 1 ----- ParameterCoupling BlogPosts: GetModules(BlogPostsSettings settings) --- Path Number: 6 ----- Path Length: 1 ----- ParameterCoupling Feeds: Feeds(string name, FeedsSettings settings) --- Path Number: 7 ----- Path Length: 1 ----- ParameterCoupling Feeds: GetModules(FeedsSettings settings) --- Path Number: 8 ----- Path Length: 1 ----- ParameterCoupling Pages: Pages(string name, PagesSettings settings) --- Path Number: 9 ----- Path Length: 1 ----- ParameterCoupling Pages: GetModules(PagesSettings settings)

Page 84: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

83

--- Path Number: 10 ----- Path Length: 1 ----- ParameterCoupling Redirects: Redirects(string name, RedirectsSettings settings) --- Path Number: 11 ----- Path Length: 1 ----- ParameterCoupling Redirects: GetModules(RedirectsSettings settings) --- Path Number: 12 ----- Path Length: 1 ----- ParameterCoupling RenderBlogPosts: RenderBlogPosts(string name, RenderBlogPostsSettings settings) --- Path Number: 13 ----- Path Length: 1 ----- ParameterCoupling RenderBlogPosts: GetModules(RenderBlogPostsSettings settings) --- Path Number: 14 ----- Path Length: 1 ----- ParameterCoupling RenderPages: RenderPages(string name, RenderPagesSettings settings) --- Path Number: 15 ----- Path Length: 1 ----- ParameterCoupling RenderPages: GetModules(RenderPagesSettings settings) --- Path Number: 16 ----- Path Length: 1 ----- ParameterCoupling ValidateLinks: ValidateLinks(string name, ValidateLinksSettings settings) --- Path Number: 17 ----- Path Length: 1 ----- ParameterCoupling ValidateLinks: GetModules(ValidateLinksSettings settings) --- ******* Finished generating test paths for Wyam.Web project. ******* Generating test paths for Wyam.YouTube project: ******* Finished generating test paths for Wyam.YouTube project.

13.4. Log4Net test paths (Partial)

Using MSBuild at 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin' to load projects. Loading solution 'C:\Dropbox\MDH\Thesis\Samples\log4net-2.0.8\src\log4net.vs2012.sln' Finished loading solution 'C:\Dropbox\MDH\Thesis\Samples\log4net-2.0.8\src\log4net.vs2012.sln'

Page 85: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

84

******* Generating test paths for log4net project: In analysis of used variables in method 'log4net.Appender.AppenderCollection.AppenderCollection(AppenderCollection c)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AppenderCollection(AppenderCollection c)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AppenderCollection(AppenderCollection c)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AppenderCollection(AppenderCollection c)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AppenderCollection(AppenderCollection c)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable.

Page 86: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

85

In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable.

Page 87: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

86

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable.

Page 88: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

87

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable.

Page 89: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

88

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable.

Page 90: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

89

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable.

Page 91: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

90

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable.

Page 92: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

91

In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable.

Page 93: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

92

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count',

Page 94: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

93

we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable.

Page 95: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

94

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get

Page 96: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

95

to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable.

Page 97: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

96

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable.

Page 98: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

97

In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get

Page 99: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

98

to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable.

Page 100: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

99

In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable.

Page 101: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

100

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get

Page 102: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

101

to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable.

Page 103: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

102

In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable.

Page 104: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

103

In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable.

Page 105: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

104

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable.

Page 106: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

105

In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable.

Page 107: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

106

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable.

Page 108: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

107

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method

Page 109: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

108

'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable.

Page 110: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

109

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method

Page 111: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

110

'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable.

Page 112: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

111

In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable.

Page 113: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

112

In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to

Page 114: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

113

method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable.

Page 115: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

114

In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Add(IAppender item)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Appender.AppenderCollection.Enumerator.Enumerator(AppenderCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(AppenderCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.Add(IAppender item)', due to variable 'm_count', we get to method 'log4net.Appender.AppenderCollection.AddRange(IAppender[] x)', which defines this variable.

Page 116: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

115

In analysis of used variables in method 'log4net.Appender.AppenderCollection.ReadOnlyAppenderCollection.Contains(IAppender x)', due to variable 'm_collection', we get to method 'log4net.Appender.AppenderCollection.ReadOnlyAppenderCollection.ReadOnlyAppenderCollection(AppenderCollection list)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.ReadOnlyAppenderCollection.IndexOf(IAppender x)', due to variable 'm_collection', we get to method 'log4net.Appender.AppenderCollection.ReadOnlyAppenderCollection.ReadOnlyAppenderCollection(AppenderCollection list)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.ReadOnlyAppenderCollection.GetEnumerator()', due to variable 'm_collection', we get to method 'log4net.Appender.AppenderCollection.ReadOnlyAppenderCollection.ReadOnlyAppenderCollection(AppenderCollection list)', which defines this variable. In analysis of used variables in method 'log4net.Appender.AppenderCollection.ReadOnlyAppenderCollection.ToArray()', due to variable 'm_collection', we get to method 'log4net.Appender.AppenderCollection.ReadOnlyAppenderCollection.ReadOnlyAppenderCollection(AppenderCollection list)', which defines this variable. In analysis of used variables in method 'log4net.Appender.BufferingForwardingAppender.GetAppender(string name)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Appender.BufferingForwardingAppender.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Appender.BufferingForwardingAppender.GetAppender(string name)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Appender.BufferingForwardingAppender.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Appender.BufferingForwardingAppender.RemoveAppender(IAppender appender)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Appender.BufferingForwardingAppender.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Appender.BufferingForwardingAppender.RemoveAppender(IAppender appender)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Appender.BufferingForwardingAppender.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Appender.EventLogAppender.ActivateOptions()', due to variable 'm_applicationName', we

Page 117: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

116

get to method 'log4net.Appender.EventLogAppender.EventLogAppender()', which defines this variable. In analysis of used variables in method 'log4net.Appender.EventLogAppender.ActivateOptions()', due to variable 'm_machineName', we get to method 'log4net.Appender.EventLogAppender.EventLogAppender()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.Reset()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.Append(LoggingEvent loggingEvent)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.Append(LoggingEvent loggingEvent)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.Reset()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', which defines this variable.

Page 118: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

117

In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.Append(LoggingEvent[] loggingEvents)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.Append(LoggingEvent[] loggingEvents)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.Reset()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable.

Page 119: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

118

In analysis of used variables in method 'log4net.Appender.FileAppender.WriteFooter()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.WriteFooter()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.Reset()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.WriteHeader()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.WriteHeader()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.Reset()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', which defines this variable.

Page 120: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

119

In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.CloseWriter()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.CloseWriter()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.Reset()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable.

Page 121: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

120

In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.Reset()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_fileName', we get to method 'log4net.Appender.FileAppender.OpenFile(string fileName, bool append)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.ActivateOptions()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.LockingStream.AcquireLock()', due to variable 'm_lockingModel', we get to method 'log4net.Appender.FileAppender.LockingStream.LockingStream(LockingModelBase locking)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.MinimalLock.AcquireLock()', due to variable 'm_filename', we get to method 'log4net.Appender.FileAppender.MinimalLock.OpenFile(string filename, bool append, Encoding encoding)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.MinimalLock.AcquireLock()', due to variable 'm_append', we get to method 'log4net.Appender.FileAppender.MinimalLock.OpenFile(string filename, bool append, Encoding encoding)', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.MinimalLock.AcquireLock()', due to variable 'm_stream', we get to method 'log4net.Appender.FileAppender.MinimalLock.ReleaseLock()', which defines this variable. In analysis of used variables in method 'log4net.Appender.FileAppender.InterProcessLock.AcquireLock()', due to variable 'm_stream', we get to method 'log4net.Appender.FileAppender.InterProcessLock.OpenFile(string filename, bool append, Encoding encoding)', which defines this variable.

Page 122: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

121

In analysis of used variables in method 'log4net.Appender.FileAppender.InterProcessLock.AcquireLock()', due to variable 'm_stream', we get to method 'log4net.Appender.FileAppender.InterProcessLock.CloseFile()', which defines this variable. In analysis of used variables in method 'log4net.Appender.ForwardingAppender.GetAppender(string name)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Appender.ForwardingAppender.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Appender.ForwardingAppender.GetAppender(string name)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Appender.ForwardingAppender.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Appender.ForwardingAppender.RemoveAppender(IAppender appender)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Appender.ForwardingAppender.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Appender.ForwardingAppender.RemoveAppender(IAppender appender)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Appender.ForwardingAppender.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.Append(LoggingEvent loggingEvent)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.Append(LoggingEvent loggingEvent)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.Append(LoggingEvent loggingEvent)', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable.

Page 123: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

122

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups',

Page 124: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

123

we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.OpenFile(string fileName, bool append)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.OpenFile(string fileName, bool append)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.OpenFile(string fileName, bool append)', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.OpenFile(string fileName, bool append)', due to variable

Page 125: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

124

'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.OpenFile(string fileName, bool append)', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable.

Page 126: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

125

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable.

Page 127: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

126

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable.

Page 128: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

127

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable.

Page 129: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

128

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable.

Page 130: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

129

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverIfDateBoundaryCrossing()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverIfDateBoundaryCrossing()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverIfDateBoundaryCrossing()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable.

Page 131: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

130

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups',

Page 132: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

131

we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ExistingInit()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ExistingInit()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ExistingInit()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ExistingInit()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ExistingInit()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable.

Page 133: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

132

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ExistingInit()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable.

Page 134: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

133

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable.

Page 135: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

134

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable.

Page 136: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

135

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable.

Page 137: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

136

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable.

Page 138: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

137

In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups',

Page 139: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

138

we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.InitializeFromOneFile(string baseFile, string curFileName)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.ActivateOptions()', due to variable 'm_curSizeRollBackups', we get to method 'log4net.Appender.RollingFileAppender.RollOverTime(bool fileIsOpen)', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_now', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.AdjustFileBeforeAppend()', due to variable 'm_rollPoint', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.RollingFileAppender.DetermineCurSizeRollBackups()', due to variable 'm_baseFileName', we get to method 'log4net.Appender.RollingFileAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.SmtpPickupDirAppender.SendBuffer(LoggingEvent[] events)', due to variable 'm_pickupDir', we get to method 'log4net.Appender.SmtpPickupDirAppender.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Appender.SmtpPickupDirAppender.SendBuffer(LoggingEvent[] events)', due to variable 'm_fileExtension', we get to method 'log4net.Appender.SmtpPickupDirAppender.SmtpPickupDirAppender()', which defines this variable.

Page 140: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

139

In analysis of used variables in method 'log4net.Config.PluginAttribute.CreatePlugin()', due to variable 'm_typeName', we get to method 'log4net.Config.PluginAttribute.PluginAttribute(string typeName)', which defines this variable. In analysis of used variables in method 'log4net.Config.XmlConfiguratorAttribute.ConfigureFromFile(Assembly sourceAssembly, ILoggerRepository targetRepository)', due to variable 'm_configFileExtension', we get to method 'log4net.Config.XmlConfiguratorAttribute.ConfigureFromUri(Assembly sourceAssembly, ILoggerRepository targetRepository)', which defines this variable. In analysis of used variables in method 'log4net.Config.XmlConfiguratorAttribute.ConfigureFromUri(Assembly sourceAssembly, ILoggerRepository targetRepository)', due to variable 'm_configFileExtension', we get to method 'log4net.Config.XmlConfiguratorAttribute.ConfigureFromFile(Assembly sourceAssembly, ILoggerRepository targetRepository)', which defines this variable. In analysis of used variables in method 'log4net.Config.XmlConfiguratorAttribute.ConfigureFromUri(Assembly sourceAssembly, ILoggerRepository targetRepository)', due to variable 'm_configFileExtension', we get to method 'log4net.Config.XmlConfiguratorAttribute.ConfigureFromFile(Assembly sourceAssembly, ILoggerRepository targetRepository)', which defines this variable. In analysis of used variables in method 'log4net.Config.XmlConfiguratorAttribute.ConfigureFromFile(Assembly sourceAssembly, ILoggerRepository targetRepository)', due to variable 'm_configFileExtension', we get to method 'log4net.Config.XmlConfiguratorAttribute.ConfigureFromUri(Assembly sourceAssembly, ILoggerRepository targetRepository)', which defines this variable. In analysis of used variables in method 'log4net.Core.CompactRepositorySelector.CreateRepository(string repositoryName, Type repositoryType)', due to variable 'm_defaultRepositoryType', we get to method 'log4net.Core.CompactRepositorySelector.CompactRepositorySelector(Type defaultRepositoryType)', which defines this variable. In analysis of used variables in method 'log4net.Core.DefaultRepositorySelector.CreateRepository(Assembly repositoryAssembly, Type repositoryType, string repositoryName, bool readAssemblyAttributes)', due to variable 'm_defaultRepositoryType', we get to method 'log4net.Core.DefaultRepositorySelector.DefaultRepositorySelector(Type defaultRepositoryType)', which defines this variable. In analysis of used variables in method 'log4net.Core.DefaultRepositorySelector.CreateRepository(Assembly repositoryAssembly, Type repositoryType, string repositoryName, bool readAssemblyAttributes)', due to variable 'm_name2repositoryMap', we get to method 'log4net.Core.DefaultRepositorySelector.CreateRepository(string repositoryName, Type repositoryType)', which defines this variable. In analysis of used variables in method 'log4net.Core.DefaultRepositorySelector.CreateRepository(string repositoryName, Type

Page 141: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

140

repositoryType)', due to variable 'm_defaultRepositoryType', we get to method 'log4net.Core.DefaultRepositorySelector.DefaultRepositorySelector(Type defaultRepositoryType)', which defines this variable. In analysis of used variables in method 'log4net.Core.DefaultRepositorySelector.CreateRepository(string repositoryName, Type repositoryType)', due to variable 'm_defaultRepositoryType', we get to method 'log4net.Core.DefaultRepositorySelector.DefaultRepositorySelector(Type defaultRepositoryType)', which defines this variable. In analysis of used variables in method 'log4net.Core.ExceptionEvaluator.IsTriggeringEvent(LoggingEvent loggingEvent)', due to variable 'm_type', we get to method 'log4net.Core.ExceptionEvaluator.ExceptionEvaluator(Type exType, bool triggerOnSubClass)', which defines this variable. In analysis of used variables in method 'log4net.Core.Level.Unknown BaseMethodDeclarationSyntax(Level l, Level r)', due to variable 'm_levelValue', we get to method 'log4net.Core.Level.Level(int level, string levelName, string displayName)', which defines this variable. In analysis of used variables in method 'log4net.Core.Level.Compare(Level l, Level r)', due to variable 'm_levelValue', we get to method 'log4net.Core.Level.Level(int level, string levelName, string displayName)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.LevelCollection(LevelCollection c)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.LevelCollection(LevelCollection c)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.LevelCollection(LevelCollection c)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.LevelCollection(LevelCollection c)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.LevelCollection(LevelCollection c)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable.

Page 142: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

141

In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable.

Page 143: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

142

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable.

Page 144: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

143

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable.

Page 145: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

144

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable.

Page 146: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

145

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable.

Page 147: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

146

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable.

Page 148: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

147

In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable.

Page 149: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

148

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable.

Page 150: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

149

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable.

Page 151: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

150

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable.

Page 152: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

151

In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable.

Page 153: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

152

In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable.

Page 154: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

153

In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable.

Page 155: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

154

In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable.

Page 156: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

155

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable.

Page 157: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

156

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method

Page 158: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

157

'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable.

Page 159: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

158

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable.

Page 160: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

159

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable.

Page 161: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

160

In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable.

Page 162: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

161

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable.

Page 163: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

162

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable.

Page 164: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

163

In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable.

Page 165: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

164

In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable.

Page 166: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

165

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable.

Page 167: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

166

In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable.

Page 168: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

167

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable.

Page 169: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

168

In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable.

Page 170: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

169

In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable.

Page 171: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

170

In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable.

Page 172: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

171

In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable.

Page 173: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

172

In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable.

Page 174: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

173

In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.AddRange(Level[] x)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable.

Page 175: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

174

In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Add(Level item)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Core.LevelCollection.Enumerator.Enumerator(LevelCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(LevelCollection x)', which defines this variable.

Page 176: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

175

In analysis of used variables in method 'log4net.Core.LevelCollection.Add(Level item)', due to variable 'm_count', we get to method 'log4net.Core.LevelCollection.AddRange(Level[] x)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.ReadOnlyLevelCollection.Contains(Level x)', due to variable 'm_collection', we get to method 'log4net.Core.LevelCollection.ReadOnlyLevelCollection.ReadOnlyLevelCollection(LevelCollection list)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.ReadOnlyLevelCollection.IndexOf(Level x)', due to variable 'm_collection', we get to method 'log4net.Core.LevelCollection.ReadOnlyLevelCollection.ReadOnlyLevelCollection(LevelCollection list)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelCollection.ReadOnlyLevelCollection.GetEnumerator()', due to variable 'm_collection', we get to method 'log4net.Core.LevelCollection.ReadOnlyLevelCollection.ReadOnlyLevelCollection(LevelCollection list)', which defines this variable. In analysis of used variables in method 'log4net.Core.LevelEvaluator.IsTriggeringEvent(LoggingEvent loggingEvent)', due to variable 'm_threshold', we get to method 'log4net.Core.LevelEvaluator.LevelEvaluator(Level threshold)', which defines this variable. In analysis of used variables in method 'log4net.Core.LocationInfo.LocationInfo(Type callerStackBoundaryDeclaringType)', due to variable 'm_className', we get to method 'log4net.Core.LocationInfo.LocationInfo(string className, string methodName, string fileName, string lineNumber)', which defines this variable. In analysis of used variables in method 'log4net.Core.LocationInfo.LocationInfo(Type callerStackBoundaryDeclaringType)', due to variable 'm_methodName', we get to method 'log4net.Core.LocationInfo.LocationInfo(string className, string methodName, string fileName, string lineNumber)', which defines this variable. In analysis of used variables in method 'log4net.Core.LocationInfo.LocationInfo(Type callerStackBoundaryDeclaringType)', due to variable 'm_fileName', we get to method 'log4net.Core.LocationInfo.LocationInfo(string className, string methodName, string fileName, string lineNumber)', which defines this variable. In analysis of used variables in method 'log4net.Core.LocationInfo.LocationInfo(Type callerStackBoundaryDeclaringType)', due to variable 'm_lineNumber', we get to method 'log4net.Core.LocationInfo.LocationInfo(string className, string methodName, string fileName, string lineNumber)', which defines this variable. In analysis of used variables in method 'log4net.Core.LocationInfo.LocationInfo(string className, string methodName, string fileName, string lineNumber)', due to variable 'm_className', we get to method

Page 177: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

176

'log4net.Core.LocationInfo.LocationInfo(Type callerStackBoundaryDeclaringType)', which defines this variable. In analysis of used variables in method 'log4net.Core.LocationInfo.LocationInfo(string className, string methodName, string fileName, string lineNumber)', due to variable 'm_methodName', we get to method 'log4net.Core.LocationInfo.LocationInfo(Type callerStackBoundaryDeclaringType)', which defines this variable. In analysis of used variables in method 'log4net.Core.LocationInfo.LocationInfo(string className, string methodName, string fileName, string lineNumber)', due to variable 'm_fileName', we get to method 'log4net.Core.LocationInfo.LocationInfo(Type callerStackBoundaryDeclaringType)', which defines this variable. In analysis of used variables in method 'log4net.Core.LocationInfo.LocationInfo(string className, string methodName, string fileName, string lineNumber)', due to variable 'm_lineNumber', we get to method 'log4net.Core.LocationInfo.LocationInfo(Type callerStackBoundaryDeclaringType)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_repository', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, string loggerName, Level level, object message, Exception exception)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_repository', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, LoggingEventData data, FixFlags fixedData)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_repository', we get to method 'log4net.Core.LoggingEvent.EnsureRepository(ILoggerRepository repository)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_thrownException', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, string loggerName, Level level, object message, Exception exception)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, string loggerName, Level level, object message, Exception exception)', which defines this variable.

Page 178: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

177

In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, LoggingEventData data, FixFlags fixedData)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(SerializationInfo info, StreamingContext context)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.CacheProperties()', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'ExceptionString', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(SerializationInfo info, StreamingContext context)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetProperties()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, string loggerName, Level level, object message, Exception exception)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetProperties()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, LoggingEventData data, FixFlags fixedData)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetProperties()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(SerializationInfo info, StreamingContext context)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetProperties()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.GetExceptionString()', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetProperties()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.CacheProperties()', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetProperties()', due to variable 'Properties', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(SerializationInfo info, StreamingContext context)', which defines this variable.

Page 179: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

178

In analysis of used variables in method 'log4net.Core.LoggingEvent.GetProperties()', due to variable 'Properties', we get to method 'log4net.Core.LoggingEvent.CacheProperties()', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetProperties()', due to variable 'm_compositeProperties', we get to method 'log4net.Core.LoggingEvent.CreateCompositeProperties()', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_repository', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, string loggerName, Level level, object message, Exception exception)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_repository', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, LoggingEventData data, FixFlags fixedData)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_repository', we get to method 'log4net.Core.LoggingEvent.EnsureRepository(ILoggerRepository repository)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_thrownException', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, string loggerName, Level level, object message, Exception exception)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, string loggerName, Level level, object message, Exception exception)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, LoggingEventData data, FixFlags fixedData)', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(SerializationInfo info, StreamingContext context)', which defines this variable.

Page 180: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

179

In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'm_data', we get to method 'log4net.Core.LoggingEvent.CacheProperties()', which defines this variable. In analysis of used variables in method 'log4net.Core.LoggingEvent.GetExceptionString()', due to variable 'ExceptionString', we get to method 'log4net.Core.LoggingEvent.LoggingEvent(SerializationInfo info, StreamingContext context)', which defines this variable. In analysis of used variables in method 'log4net.Layout.PatternLayout.ActivateOptions()', due to variable 'm_pattern', we get to method 'log4net.Layout.PatternLayout.PatternLayout(string pattern)', which defines this variable. In analysis of used variables in method 'log4net.Layout.PatternLayout.PatternLayout(string pattern)', due to variable 'm_head', we get to method 'log4net.Layout.PatternLayout.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.PluginCollection(PluginCollection c)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.PluginCollection(PluginCollection c)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.PluginCollection(PluginCollection c)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.PluginCollection(PluginCollection c)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.PluginCollection(PluginCollection c)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable.

Page 181: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

180

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable.

Page 182: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

181

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable.

Page 183: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

182

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable.

Page 184: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

183

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable.

Page 185: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

184

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable.

Page 186: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

185

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable.

Page 187: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

186

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable.

Page 188: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

187

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable.

Page 189: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

188

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable.

Page 190: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

189

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable.

Page 191: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

190

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable.

Page 192: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

191

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable.

Page 193: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

192

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method

Page 194: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

193

'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable.

Page 195: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

194

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable.

Page 196: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

195

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable.

Page 197: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

196

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable.

Page 198: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

197

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable.

Page 199: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

198

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable.

Page 200: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

199

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable.

Page 201: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

200

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable.

Page 202: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

201

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable.

Page 203: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

202

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable.

Page 204: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

203

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable.

Page 205: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

204

In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable.

Page 206: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

205

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable.

Page 207: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

206

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable.

Page 208: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

207

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Clone()', due to variable 'm_version', we get to method 'log4net.Plugin.PluginCollection.Enumerator.Enumerator(PluginCollection tc)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clear()', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.Clone()', which defines this variable.

Page 209: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

208

In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(PluginCollection x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.Add(IPlugin item)', due to variable 'm_count', we get to method 'log4net.Plugin.PluginCollection.AddRange(IPlugin[] x)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.ReadOnlyPluginCollection.Contains(IPlugin x)', due to variable 'm_collection', we get to method 'log4net.Plugin.PluginCollection.ReadOnlyPluginCollection.ReadOnlyPluginCollection(PluginCollection list)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.ReadOnlyPluginCollection.IndexOf(IPlugin x)', due to variable 'm_collection', we get to method 'log4net.Plugin.PluginCollection.ReadOnlyPluginCollection.ReadOnlyPluginCollection(PluginCollection list)', which defines this variable. In analysis of used variables in method 'log4net.Plugin.PluginCollection.ReadOnlyPluginCollection.GetEnumerator()', due to variable 'm_collection', we get to method 'log4net.Plugin.PluginCollection.ReadOnlyPluginCollection.ReadOnlyPluginCollection(PluginCollection list)', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Hierarchy.XmlRepositoryConfigure(System.Xml.XmlElement element)', due to variable 'm_defaultFactory', we get to method 'log4net.Repository.Hierarchy.Hierarchy.Hierarchy(PropertiesDictionary properties, ILoggerFactory loggerFactory)', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.GetAppender(string name)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.GetAppender(string name)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.RemoveAppender(IAppender appender)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.AddAppender(IAppender newAppender)', which defines this variable.

Page 210: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

209

In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.RemoveAppender(IAppender appender)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.RemoveAppender(string name)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.RemoveAppender(string name)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.Log(LoggingEvent logEvent)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.Log(LoggingEvent logEvent)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.CallAppenders(LoggingEvent loggingEvent)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.CallAppenders(LoggingEvent loggingEvent)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.ForcedLog(Type callerStackBoundaryDeclaringType, Level level, object message, Exception exception)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.ForcedLog(Type callerStackBoundaryDeclaringType, Level level, object message, Exception exception)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.RemoveAllAppenders()', which defines this variable.

Page 211: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

210

In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.ForcedLog(LoggingEvent logEvent)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Repository.Hierarchy.Logger.ForcedLog(LoggingEvent logEvent)', due to variable 'm_appenderAttachedImpl', we get to method 'log4net.Repository.Hierarchy.Logger.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Util.AppenderAttachedImpl.AppendLoopOnAppenders(LoggingEvent loggingEvent)', due to variable 'm_appenderList', we get to method 'log4net.Util.AppenderAttachedImpl.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Util.AppenderAttachedImpl.AppendLoopOnAppenders(LoggingEvent loggingEvent)', due to variable 'm_appenderList', we get to method 'log4net.Util.AppenderAttachedImpl.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Util.AppenderAttachedImpl.AppendLoopOnAppenders(LoggingEvent loggingEvent)', due to variable 'm_appenderList', we get to method 'log4net.Util.AppenderAttachedImpl.RemoveAppender(IAppender appender)', which defines this variable. In analysis of used variables in method 'log4net.Util.AppenderAttachedImpl.AppendLoopOnAppenders(LoggingEvent[] loggingEvents)', due to variable 'm_appenderList', we get to method 'log4net.Util.AppenderAttachedImpl.AddAppender(IAppender newAppender)', which defines this variable. In analysis of used variables in method 'log4net.Util.AppenderAttachedImpl.AppendLoopOnAppenders(LoggingEvent[] loggingEvents)', due to variable 'm_appenderList', we get to method 'log4net.Util.AppenderAttachedImpl.RemoveAllAppenders()', which defines this variable. In analysis of used variables in method 'log4net.Util.AppenderAttachedImpl.AppendLoopOnAppenders(LoggingEvent[] loggingEvents)', due to variable 'm_appenderList', we get to method 'log4net.Util.AppenderAttachedImpl.RemoveAppender(IAppender appender)', which defines this variable. In analysis of used variables in method 'log4net.Util.PatternParser.ProcessConverter(string converterName, string option, FormattingInfo formattingInfo)', due to variable 'm_tail', we get to method 'log4net.Util.PatternParser.AddConverter(PatternConverter pc)', which defines this variable.

Page 212: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

211

In analysis of used variables in method 'log4net.Util.PatternString.ActivateOptions()', due to variable 'm_pattern', we get to method 'log4net.Util.PatternString.PatternString(string pattern)', which defines this variable. In analysis of used variables in method 'log4net.Util.PatternString.PatternString(string pattern)', due to variable 'm_head', we get to method 'log4net.Util.PatternString.ActivateOptions()', which defines this variable. In analysis of used variables in method 'log4net.Util.ThreadContextProperties.GetKeys()', due to variable '_dictionary', we get to method 'log4net.Util.ThreadContextProperties.GetProperties(bool create)', which defines this variable. Path Number: 1 ----- Path Length: 1 ----- CallCoupling AdoNetAppender: ActivateOptions() --- Path Number: 2 ----- Path Length: 1 ----- CallCoupling AdoNetAppender: OnClose() --- Path Number: 3 ----- Path Length: 1 ----- CallCoupling AdoNetAppender: SendBuffer(LoggingEvent[] events) --- Path Number: 4 ----- Path Length: 1 ----- ParameterCoupling AdoNetAppender: AddParameter(AdoNetAppenderParameter parameter) --- Path Number: 5 ----- Path Length: 1 ----- CallCoupling AdoNetAppender: SendBuffer(IDbTransaction dbTran, LoggingEvent[] events) --- Path Number: 6 ----- Path Length: 1 ----- ParameterCoupling AdoNetAppender: GetLogStatement(LoggingEvent logEvent) --- Path Number: 7 ----- Path Length: 1 ----- CallCoupling AdoNetAppender: ResolveConnectionString(out string connectionStringContext) --- Path Number: 8 ----- Path Length: 1 ----- CallCoupling AdoNetAppender: ResolveConnectionType() --- Path Number: 9 ----- Path Length: 1 ----- CallCoupling AdoNetAppender: InitializeDatabaseConnection() --- Path Number: 10 ----- Path Length: 1 ----- CallCoupling AdoNetAppender: DiposeConnection()

Page 213: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

212

--- Path Number: 11 ----- Path Length: 1 ----- ParameterCoupling AdoNetAppenderParameter: FormatValue(IDbCommand command, LoggingEvent loggingEvent) --- Path Number: 12 ----- Path Length: 1 ----- ParameterCoupling AnsiColorTerminalAppender: AddMapping(LevelColors mapping) --- Path Number: 13 ----- Path Length: 1 ----- CallCoupling AnsiColorTerminalAppender: Append(log4net.Core.LoggingEvent loggingEvent) --- Path Number: 14 ----- Path Length: 1 ----- CallCoupling AnsiColorTerminalAppender: ActivateOptions() --- Path Number: 15 ----- Path Length: 1 ----- CallCoupling LevelColors: ActivateOptions() --- Path Number: 16 ----- Path Length: 1 ----- ParameterCoupling AppenderCollection: ReadOnly(AppenderCollection list) --- Path Number: 17 ----- Path Length: 3 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 18 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 19 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 20 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item)

Page 214: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

213

AppenderCollection: Clone() AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 21 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 22 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 23 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 24 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 25 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 26 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone()

Page 215: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

214

AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 27 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 28 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 29 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 30 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 31 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 32 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone()

Page 216: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

215

AppenderCollection: Clear() --- Path Number: 33 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 34 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 35 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 36 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 37 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 38 ----- Path Length: 2 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clear() ---

Page 217: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

216

Path Number: 39 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 40 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 41 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 42 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 43 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 44 ----- Path Length: 3 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 45 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c)

Page 218: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

217

AppenderCollection: Clone() AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 46 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 47 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 48 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 49 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 50 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 51 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone()

Page 219: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

218

AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 52 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 53 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 54 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 55 ----- Path Length: 3 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 56 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 57 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: Clear() ---

Page 220: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

219

Path Number: 58 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 59 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 60 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 61 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 62 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 63 ----- Path Length: 3 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() ---

Page 221: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

220

Path Number: 64 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 65 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 66 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 67 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 68 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 69 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 70 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c)

Page 222: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

221

AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 71 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 72 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 73 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 74 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 75 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 76 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c)

Page 223: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

222

AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 77 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 78 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 79 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 80 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 81 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 82 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item)

Page 224: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

223

AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 83 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 84 ----- Path Length: 3 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 85 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 86 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 87 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 88 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item)

Page 225: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

224

AppenderCollection: Clear() --- Path Number: 89 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 90 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 91 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 92 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 93 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 94 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() ---

Page 226: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

225

Path Number: 95 ----- Path Length: 6 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 96 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 97 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AppenderCollection(AppenderCollection c) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 98 ----- Path Length: 3 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 99 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 100 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 101 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item)

Page 227: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

226

AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 102 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 103 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 104 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 105 ----- Path Length: 2 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clear() --- Path Number: 106 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 107 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 108 ----- Path Length: 3 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone()

Page 228: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

227

AppenderCollection: Clear() --- Path Number: 109 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 110 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clear() --- Path Number: 111 ----- Path Length: 3 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 112 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 113 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 114 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Add(IAppender item) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 115 ----- Path Length: 3 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x)

Page 229: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

228

AppenderCollection: Clear() --- Path Number: 116 ----- Path Length: 5 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: Add(IAppender item) AppenderCollection: Clear() --- Path Number: 117 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() AppenderCollection: Clear() --- Path Number: 118 ----- Path Length: 4 ----- ParameterCoupling AppenderCollection: AddRange(AppenderCollection x) AppenderCollection: AddRange(IAppender[] x) AppenderCollection: Clone() Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 119 ----- Path Length: 1 ----- CallCoupling AppenderCollection: ValidateIndex(int i, bool allowEqualEnd) --- Path Number: 120 ----- Path Length: 1 ----- ParameterCoupling Enumerator: Enumerator(AppenderCollection tc) --- Path Number: 121 ----- Path Length: 1 ----- ParameterCoupling ReadOnlyAppenderCollection: ReadOnlyAppenderCollection(AppenderCollection list) --- Path Number: 122 ----- Path Length: 1 ----- CallCoupling ReadOnlyAppenderCollection: CopyTo(IAppender[] array) --- Path Number: 123 ----- Path Length: 1 ----- CallCoupling ReadOnlyAppenderCollection: CopyTo(IAppender[] array, int start) --- Path Number: 124 ----- Path Length: 2 ----- CallCoupling ReadOnlyAppenderCollection: Contains(IAppender x) ReadOnlyAppenderCollection: ReadOnlyAppenderCollection(AppenderCollection list) ---

Page 230: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

229

Path Number: 125 ----- Path Length: 2 ----- CallCoupling ReadOnlyAppenderCollection: IndexOf(IAppender x) ReadOnlyAppenderCollection: ReadOnlyAppenderCollection(AppenderCollection list) --- Path Number: 126 ----- Path Length: 2 ----- CallCoupling ReadOnlyAppenderCollection: GetEnumerator() ReadOnlyAppenderCollection: ReadOnlyAppenderCollection(AppenderCollection list) --- Path Number: 127 ----- Path Length: 1 ----- ParameterCoupling ReadOnlyAppenderCollection: AddRange(AppenderCollection x) --- Path Number: 128 ----- Path Length: 2 ----- CallCoupling ReadOnlyAppenderCollection: ToArray() ReadOnlyAppenderCollection: ReadOnlyAppenderCollection(AppenderCollection list) --- Path Number: 129 ----- Path Length: 1 ----- CallCoupling AppenderSkeleton: AppenderSkeleton() --- Path Number: 130 ----- Path Length: 1 ----- ParameterCoupling AppenderSkeleton: DoAppend(LoggingEvent loggingEvent) --- Path Number: 131 ----- Path Length: 1 ----- CallCoupling AppenderSkeleton: DoAppend(LoggingEvent[] loggingEvents) --- Path Number: 132 ----- Path Length: 1 ----- ParameterCoupling AppenderSkeleton: FilterEvent(LoggingEvent loggingEvent) --- Path Number: 133 ----- Path Length: 1 ----- ParameterCoupling AppenderSkeleton: IsAsSevereAsThreshold(Level level) --- Path Number: 134 ----- Path Length: 1 ----- ParameterCoupling AppenderSkeleton: Append(LoggingEvent loggingEvent) --- Path Number: 135 ----- Path Length: 1 ----- CallCoupling AppenderSkeleton: PreAppendCheck() --- Path Number: 136 ----- Path Length: 1 ----- ParameterCoupling AppenderSkeleton: RenderLoggingEvent(LoggingEvent loggingEvent) ---

Page 231: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

230

Path Number: 137 ----- Path Length: 1 ----- ParameterCoupling AppenderSkeleton: RenderLoggingEvent(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 138 ----- Path Length: 1 ----- ParameterCoupling AspNetTraceAppender: Append(LoggingEvent loggingEvent) --- Path Number: 139 ----- Path Length: 1 ----- CallCoupling BufferingAppenderSkeleton: Flush(bool flushLossyBuffer) --- Path Number: 140 ----- Path Length: 1 ----- CallCoupling BufferingAppenderSkeleton: ActivateOptions() --- Path Number: 141 ----- Path Length: 1 ----- ParameterCoupling BufferingAppenderSkeleton: Append(LoggingEvent loggingEvent) --- Path Number: 142 ----- Path Length: 1 ----- ParameterCoupling BufferingAppenderSkeleton: SendFromBuffer(LoggingEvent firstLoggingEvent, CyclicBuffer buffer) --- Path Number: 143 ----- Path Length: 1 ----- CallCoupling BufferingForwardingAppender: OnClose() --- Path Number: 144 ----- Path Length: 1 ----- CallCoupling BufferingForwardingAppender: AddAppender(IAppender newAppender) --- Path Number: 145 ----- Path Length: 2 ----- CallCoupling BufferingForwardingAppender: GetAppender(string name) BufferingForwardingAppender: AddAppender(IAppender newAppender) --- Path Number: 146 ----- Path Length: 2 ----- CallCoupling BufferingForwardingAppender: GetAppender(string name) BufferingForwardingAppender: RemoveAllAppenders() --- Path Number: 147 ----- Path Length: 1 ----- CallCoupling BufferingForwardingAppender: RemoveAllAppenders() --- Path Number: 148 ----- Path Length: 2 ----- CallCoupling BufferingForwardingAppender: RemoveAppender(IAppender appender)

Page 232: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

231

BufferingForwardingAppender: AddAppender(IAppender newAppender) --- Path Number: 149 ----- Path Length: 2 ----- CallCoupling BufferingForwardingAppender: RemoveAppender(IAppender appender) BufferingForwardingAppender: RemoveAllAppenders() --- Path Number: 150 ----- Path Length: 1 ----- ParameterCoupling ColoredConsoleAppender: AddMapping(LevelColors mapping) --- Path Number: 151 ----- Path Length: 1 ----- CallCoupling ColoredConsoleAppender: Append(log4net.Core.LoggingEvent loggingEvent) --- Path Number: 152 ----- Path Length: 1 ----- CallCoupling ColoredConsoleAppender: ActivateOptions() --- Path Number: 153 ----- Path Length: 1 ----- CallCoupling LevelColors: ActivateOptions() --- Path Number: 154 ----- Path Length: 1 ----- ParameterCoupling ConsoleAppender: Append(LoggingEvent loggingEvent) --- Path Number: 155 ----- Path Length: 1 ----- ParameterCoupling DebugAppender: Append(LoggingEvent loggingEvent) --- Path Number: 156 ----- Path Length: 1 ----- ParameterCoupling EventLogAppender: AddMapping(Level2EventLogEntryType mapping) --- Path Number: 157 ----- Path Length: 2 ----- CallCoupling EventLogAppender: ActivateOptions() EventLogAppender: EventLogAppender() --- Path Number: 158 ----- Path Length: 1 ----- ParameterCoupling EventLogAppender: Append(LoggingEvent loggingEvent) --- Path Number: 159 ----- Path Length: 1 ----- ParameterCoupling EventLogAppender: GetEntryType(Level level) --- Path Number: 160 ----- Path Length: 2 ----- CallCoupling

Page 233: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

232

FileAppender: ActivateOptions() FileAppender: Reset() --- Path Number: 161 ----- Path Length: 3 ----- CallCoupling FileAppender: ActivateOptions() FileAppender: OpenFile(string fileName, bool append) LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 162 ----- Path Length: 2 ----- CallCoupling FileAppender: ActivateOptions() LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 163 ----- Path Length: 1 ----- CallCoupling FileAppender: Reset() --- Path Number: 164 ----- Path Length: 1 ----- CallCoupling FileAppender: OnClose() --- Path Number: 165 ----- Path Length: 2 ----- ParameterCoupling FileAppender: Append(LoggingEvent loggingEvent) LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 166 ----- Path Length: 3 ----- ParameterCoupling FileAppender: Append(LoggingEvent loggingEvent) FileAppender: ActivateOptions() FileAppender: Reset() --- Path Number: 167 ----- Path Length: 4 ----- ParameterCoupling FileAppender: Append(LoggingEvent loggingEvent) FileAppender: ActivateOptions() FileAppender: OpenFile(string fileName, bool append) LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 168 ----- Path Length: 3 ----- ParameterCoupling FileAppender: Append(LoggingEvent loggingEvent) FileAppender: ActivateOptions() LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 169 ----- Path Length: 2 ----- CallCoupling FileAppender: Append(LoggingEvent[] loggingEvents) LockingStream: LockingStream(LockingModelBase locking)

Page 234: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

233

--- Path Number: 170 ----- Path Length: 3 ----- CallCoupling FileAppender: Append(LoggingEvent[] loggingEvents) FileAppender: ActivateOptions() FileAppender: Reset() --- Path Number: 171 ----- Path Length: 4 ----- CallCoupling FileAppender: Append(LoggingEvent[] loggingEvents) FileAppender: ActivateOptions() FileAppender: OpenFile(string fileName, bool append) LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 172 ----- Path Length: 3 ----- CallCoupling FileAppender: Append(LoggingEvent[] loggingEvents) FileAppender: ActivateOptions() LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 173 ----- Path Length: 2 ----- CallCoupling FileAppender: WriteFooter() LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 174 ----- Path Length: 3 ----- CallCoupling FileAppender: WriteFooter() FileAppender: ActivateOptions() FileAppender: Reset() --- Path Number: 175 ----- Path Length: 4 ----- CallCoupling FileAppender: WriteFooter() FileAppender: ActivateOptions() FileAppender: OpenFile(string fileName, bool append) LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 176 ----- Path Length: 3 ----- CallCoupling FileAppender: WriteFooter() FileAppender: ActivateOptions() LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 177 ----- Path Length: 2 ----- CallCoupling FileAppender: WriteHeader() LockingStream: LockingStream(LockingModelBase locking) ---

Page 235: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

234

Path Number: 178 ----- Path Length: 3 ----- CallCoupling FileAppender: WriteHeader() FileAppender: ActivateOptions() FileAppender: Reset() --- Path Number: 179 ----- Path Length: 4 ----- CallCoupling FileAppender: WriteHeader() FileAppender: ActivateOptions() FileAppender: OpenFile(string fileName, bool append) LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 180 ----- Path Length: 3 ----- CallCoupling FileAppender: WriteHeader() FileAppender: ActivateOptions() LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 181 ----- Path Length: 2 ----- CallCoupling FileAppender: CloseWriter() LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 182 ----- Path Length: 3 ----- CallCoupling FileAppender: CloseWriter() FileAppender: ActivateOptions() FileAppender: Reset() --- Path Number: 183 ----- Path Length: 4 ----- CallCoupling FileAppender: CloseWriter() FileAppender: ActivateOptions() FileAppender: OpenFile(string fileName, bool append) LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 184 ----- Path Length: 3 ----- CallCoupling FileAppender: CloseWriter() FileAppender: ActivateOptions() LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 185 ----- Path Length: 1 ----- CallCoupling FileAppender: CloseFile() --- Path Number: 186 ----- Path Length: 2 ----- CallCoupling FileAppender: OpenFile(string fileName, bool append) LockingStream: LockingStream(LockingModelBase locking)

Page 236: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

235

--- Path Number: 187 ----- Path Length: 3 ----- CallCoupling FileAppender: OpenFile(string fileName, bool append) FileAppender: ActivateOptions() FileAppender: Reset() --- Path Number: 188 ----- Path Length: 3 ----- CallCoupling FileAppender: OpenFile(string fileName, bool append) FileAppender: ActivateOptions() LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 189 ----- Path Length: 1 ----- CallCoupling FileAppender: ConvertToFullPath(string path) --- Path Number: 190 ----- Path Length: 1 ----- ParameterCoupling LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 191 ----- Path Length: 1 ----- CallCoupling LockingStream: Close() --- Path Number: 192 ----- Path Length: 2 ----- CallCoupling LockingStream: AcquireLock() LockingStream: LockingStream(LockingModelBase locking) --- Path Number: 193 ----- Path Length: 1 ----- CallCoupling LockingStream: ReleaseLock() --- Path Number: 194 ----- Path Length: 1 ----- CallCoupling LockingModelBase: CreateStream(string filename, bool append, FileShare fileShare) --- Path Number: 195 ----- Path Length: 1 ----- CallCoupling LockingModelBase: CloseStream(Stream stream) --- Path Number: 196 ----- Path Length: 1 ----- CallCoupling ExclusiveLock: OpenFile(string filename, bool append, Encoding encoding) --- Path Number: 197 ----- Path Length: 1 ----- CallCoupling ExclusiveLock: CloseFile() ---

Page 237: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

236

Path Number: 198 ----- Path Length: 2 ----- CallCoupling MinimalLock: AcquireLock() MinimalLock: OpenFile(string filename, bool append, Encoding encoding) --- Path Number: 199 ----- Path Length: 2 ----- CallCoupling MinimalLock: AcquireLock() MinimalLock: ReleaseLock() --- Path Number: 200 ----- Path Length: 1 ----- CallCoupling MinimalLock: ReleaseLock() --- Path Number: 201 ----- Path Length: 1 ----- CallCoupling InterProcessLock: OpenFile(string filename, bool append, Encoding encoding) --- Path Number: 202 ----- Path Length: 1 ----- CallCoupling InterProcessLock: CloseFile() --- Path Number: 203 ----- Path Length: 2 ----- CallCoupling InterProcessLock: AcquireLock() InterProcessLock: OpenFile(string filename, bool append, Encoding encoding) --- Path Number: 204 ----- Path Length: 2 ----- CallCoupling InterProcessLock: AcquireLock() InterProcessLock: CloseFile() --- Path Number: 205 ----- Path Length: 1 ----- CallCoupling InterProcessLock: ReleaseLock() --- Path Number: 206 ----- Path Length: 1 ----- CallCoupling InterProcessLock: ActivateOptions() --- Path Number: 207 ----- Path Length: 1 ----- CallCoupling InterProcessLock: OnClose() --- Path Number: 208 ----- Path Length: 1 ----- CallCoupling ForwardingAppender: OnClose() --- Path Number: 209 ----- Path Length: 1 ----- ParameterCoupling

Page 238: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

237

ForwardingAppender: Append(LoggingEvent loggingEvent) --- Path Number: 210 ----- Path Length: 1 ----- CallCoupling ForwardingAppender: AddAppender(IAppender newAppender) --- Path Number: 211 ----- Path Length: 2 ----- CallCoupling ForwardingAppender: GetAppender(string name) ForwardingAppender: AddAppender(IAppender newAppender) --- Path Number: 212 ----- Path Length: 2 ----- CallCoupling ForwardingAppender: GetAppender(string name) ForwardingAppender: RemoveAllAppenders() --- Path Number: 213 ----- Path Length: 1 ----- CallCoupling ForwardingAppender: RemoveAllAppenders() --- Path Number: 214 ----- Path Length: 2 ----- CallCoupling ForwardingAppender: RemoveAppender(IAppender appender) ForwardingAppender: AddAppender(IAppender newAppender) --- Path Number: 215 ----- Path Length: 2 ----- CallCoupling ForwardingAppender: RemoveAppender(IAppender appender) ForwardingAppender: RemoveAllAppenders() --- Path Number: 216 ----- Path Length: 1 ----- ParameterCoupling LocalSyslogAppender: AddMapping(LevelSeverity mapping) --- Path Number: 217 ----- Path Length: 1 ----- CallCoupling LocalSyslogAppender: ActivateOptions() --- Path Number: 218 ----- Path Length: 1 ----- ParameterCoupling LocalSyslogAppender: Append(LoggingEvent loggingEvent) --- Path Number: 219 ----- Path Length: 1 ----- CallCoupling LocalSyslogAppender: OnClose() --- Path Number: 220 ----- Path Length: 1 ----- ParameterCoupling LocalSyslogAppender: GetSeverity(Level level) ---

Page 239: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

238

Path Number: 221 ----- Path Length: 1 ----- ParameterCoupling ManagedColoredConsoleAppender: AddMapping(LevelColors mapping) --- Path Number: 222 ----- Path Length: 1 ----- CallCoupling ManagedColoredConsoleAppender: Append(log4net.Core.LoggingEvent loggingEvent) --- Path Number: 223 ----- Path Length: 1 ----- CallCoupling ManagedColoredConsoleAppender: ActivateOptions() --- Path Number: 224 ----- Path Length: 1 ----- ParameterCoupling MemoryAppender: Append(LoggingEvent loggingEvent) --- Path Number: 225 ----- Path Length: 1 ----- CallCoupling NetSendAppender: ActivateOptions() --- Path Number: 226 ----- Path Length: 1 ----- ParameterCoupling NetSendAppender: Append(LoggingEvent loggingEvent) --- Path Number: 227 ----- Path Length: 1 ----- ParameterCoupling OutputDebugStringAppender: Append(LoggingEvent loggingEvent) --- Path Number: 228 ----- Path Length: 1 ----- ParameterCoupling RemoteSyslogAppender: AddMapping(LevelSeverity mapping) --- Path Number: 229 ----- Path Length: 1 ----- ParameterCoupling RemoteSyslogAppender: Append(LoggingEvent loggingEvent) --- Path Number: 230 ----- Path Length: 1 ----- CallCoupling RemoteSyslogAppender: ActivateOptions() --- Path Number: 231 ----- Path Length: 1 ----- ParameterCoupling RemoteSyslogAppender: GetSeverity(Level level) --- Path Number: 232 ----- Path Length: 1 ----- CallCoupling RemotingAppender: ActivateOptions() --- Path Number: 233 ----- Path Length: 1 ----- CallCoupling

Page 240: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

239

RemotingAppender: SendBuffer(LoggingEvent[] events) --- Path Number: 234 ----- Path Length: 1 ----- CallCoupling RemotingAppender: OnClose() --- Path Number: 235 ----- Path Length: 1 ----- CallCoupling RemotingAppender: Flush(int millisecondsTimeout) --- Path Number: 236 ----- Path Length: 1 ----- CallCoupling RemotingAppender: SendBufferCallback(object state) --- Path Number: 237 ----- Path Length: 4 ----- ParameterCoupling RollingFileAppender: Append(LoggingEvent loggingEvent) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 238 ----- Path Length: 4 ----- ParameterCoupling RollingFileAppender: Append(LoggingEvent loggingEvent) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 239 ----- Path Length: 4 ----- ParameterCoupling RollingFileAppender: Append(LoggingEvent loggingEvent) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) --- Path Number: 240 ----- Path Length: 3 ----- ParameterCoupling RollingFileAppender: Append(LoggingEvent loggingEvent) RollingFileAppender: ActivateOptions() RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 241 ----- Path Length: 3 ----- ParameterCoupling RollingFileAppender: Append(LoggingEvent loggingEvent) RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 242 ----- Path Length: 3 ----- ParameterCoupling RollingFileAppender: Append(LoggingEvent loggingEvent)

Page 241: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

240

RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 243 ----- Path Length: 4 ----- ParameterCoupling RollingFileAppender: Append(LoggingEvent loggingEvent) RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 244 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 245 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 246 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) --- Path Number: 247 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: ActivateOptions() RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 248 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 249 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) ---

Page 242: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

241

Path Number: 250 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 251 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: DetermineCurSizeRollBackups() RollingFileAppender: ActivateOptions() RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 252 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: DetermineCurSizeRollBackups() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 253 ----- Path Length: 5 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: DetermineCurSizeRollBackups() RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 254 ----- Path Length: 2 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 255 ----- Path Length: 5 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 256 ----- Path Length: 5 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) ---

Page 243: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

242

Path Number: 257 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: ActivateOptions() RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 258 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 259 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: OpenFile(string fileName, bool append) RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 260 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: DetermineCurSizeRollBackups() RollingFileAppender: ActivateOptions() RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 261 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: DetermineCurSizeRollBackups() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 262 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: DetermineCurSizeRollBackups() RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 263 ----- Path Length: 1 ----- CallCoupling RollingFileAppender: GetExistingFiles(string baseFilePath) --- Path Number: 264 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: RollOverIfDateBoundaryCrossing() RollingFileAppender: ActivateOptions() RollingFileAppender: AdjustFileBeforeAppend() ---

Page 244: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

243

Path Number: 265 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: RollOverIfDateBoundaryCrossing() RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 266 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: RollOverIfDateBoundaryCrossing() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 267 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: RollOverIfDateBoundaryCrossing() RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 268 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: RollOverIfDateBoundaryCrossing() RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 269 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: RollOverIfDateBoundaryCrossing() RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 270 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: RollOverIfDateBoundaryCrossing() RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) --- Path Number: 271 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: ActivateOptions() RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 272 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups()

Page 245: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

244

--- Path Number: 273 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 274 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 275 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 276 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 277 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) --- Path Number: 278 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: DetermineCurSizeRollBackups() RollingFileAppender: ActivateOptions() RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 279 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: DetermineCurSizeRollBackups() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) ---

Page 246: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

245

Path Number: 280 ----- Path Length: 5 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: DetermineCurSizeRollBackups() RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 281 ----- Path Length: 2 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 282 ----- Path Length: 5 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 283 ----- Path Length: 5 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 284 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: ActivateOptions() RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 285 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 286 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: ExistingInit() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) ---

Page 247: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

246

Path Number: 287 ----- Path Length: 1 ----- CallCoupling RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 288 ----- Path Length: 1 ----- CallCoupling RollingFileAppender: ComputeCheckPeriod(string datePattern) --- Path Number: 289 ----- Path Length: 2 ----- CallCoupling RollingFileAppender: ActivateOptions() RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 290 ----- Path Length: 2 ----- CallCoupling RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 291 ----- Path Length: 2 ----- CallCoupling RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 292 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: ActivateOptions() RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 293 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 294 ----- Path Length: 4 ----- CallCoupling RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: AdjustFileBeforeAppend() RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 295 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: ActivateOptions() RollingFileAppender: AdjustFileBeforeAppend() --- Path Number: 296 ----- Path Length: 3 ----- CallCoupling

Page 248: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

247

RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: ActivateOptions() RollingFileAppender: DetermineCurSizeRollBackups() --- Path Number: 297 ----- Path Length: 3 ----- CallCoupling RollingFileAppender: RollOverTime(bool fileIsOpen) RollingFileAppender: ActivateOptions() RollingFileAppender: InitializeFromOneFile(string baseFile, string curFileName) --- Path Number: 298 ----- Path Length: 1 ----- CallCoupling RollingFileAppender: RollFile(string fromFile, string toFile) --- Path Number: 299 ----- Path Length: 1 ----- CallCoupling RollingFileAppender: FileExists(string path) --- Path Number: 300 ----- Path Length: 1 ----- CallCoupling RollingFileAppender: DeleteFile(string fileName) --- Path Number: 301 ----- Path Length: 1 ----- CallCoupling RollingFileAppender: RollOverSize() --- Path Number: 302 ----- Path Length: 1 ----- CallCoupling SmtpAppender: SendBuffer(LoggingEvent[] events) --- Path Number: 303 ----- Path Length: 2 ----- CallCoupling SmtpPickupDirAppender: SendBuffer(LoggingEvent[] events) SmtpPickupDirAppender: ActivateOptions() --- Path Number: 304 ----- Path Length: 2 ----- CallCoupling SmtpPickupDirAppender: SendBuffer(LoggingEvent[] events) SmtpPickupDirAppender: SmtpPickupDirAppender() --- Path Number: 305 ----- Path Length: 1 ----- CallCoupling SmtpPickupDirAppender: ActivateOptions() --- Path Number: 306 ----- Path Length: 1 ----- CallCoupling SmtpPickupDirAppender: ConvertToFullPath(string path) --- Path Number: 307 ----- Path Length: 1 ----- CallCoupling

Page 249: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

248

TelnetAppender: OnClose() --- Path Number: 308 ----- Path Length: 1 ----- CallCoupling TelnetAppender: ActivateOptions() --- Path Number: 309 ----- Path Length: 1 ----- ParameterCoupling TelnetAppender: Append(LoggingEvent loggingEvent) --- Path Number: 310 ----- Path Length: 1 ----- CallCoupling SocketHandler: Send(String message) --- Path Number: 311 ----- Path Length: 1 ----- ParameterCoupling SocketHandler: AddClient(SocketClient client) --- Path Number: 312 ----- Path Length: 1 ----- ParameterCoupling SocketHandler: RemoveClient(SocketClient client) --- Path Number: 313 ----- Path Length: 1 ----- CallCoupling SocketHandler: OnConnect(IAsyncResult asyncResult) --- Path Number: 314 ----- Path Length: 1 ----- CallCoupling SocketHandler: Dispose() --- Path Number: 315 ----- Path Length: 1 ----- CallCoupling TextWriterAppender: PreAppendCheck() --- Path Number: 316 ----- Path Length: 1 ----- ParameterCoupling TextWriterAppender: Append(LoggingEvent loggingEvent) --- Path Number: 317 ----- Path Length: 1 ----- CallCoupling TextWriterAppender: Append(LoggingEvent[] loggingEvents) --- Path Number: 318 ----- Path Length: 1 ----- CallCoupling TextWriterAppender: CloseWriter() --- Path Number: 319 ----- Path Length: 1 ----- CallCoupling TextWriterAppender: Flush(int millisecondsTimeout) ---

Page 250: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

249

Path Number: 320 ----- Path Length: 1 ----- ParameterCoupling TraceAppender: Append(LoggingEvent loggingEvent) --- Path Number: 321 ----- Path Length: 1 ----- CallCoupling UdpAppender: ActivateOptions() --- Path Number: 322 ----- Path Length: 1 ----- ParameterCoupling UdpAppender: Append(LoggingEvent loggingEvent) --- Path Number: 323 ----- Path Length: 1 ----- CallCoupling UdpAppender: OnClose() --- Path Number: 324 ----- Path Length: 1 ----- CallCoupling BasicConfigurator: Configure(ILoggerRepository repository) --- Path Number: 325 ----- Path Length: 1 ----- CallCoupling BasicConfigurator: InternalConfigure(ILoggerRepository repository, params IAppender[] appenders) --- Path Number: 326 ----- Path Length: 1 ----- CallCoupling DOMConfigurator: Configure() --- Path Number: 327 ----- Path Length: 1 ----- CallCoupling DOMConfigurator: Configure(ILoggerRepository repository) --- Path Number: 328 ----- Path Length: 1 ----- CallCoupling DOMConfigurator: ConfigureAndWatch(FileInfo configFile) --- Path Number: 329 ----- Path Length: 1 ----- CallCoupling DOMConfigurator: ConfigureAndWatch(ILoggerRepository repository, FileInfo configFile) --- Path Number: 330 ----- Path Length: 2 ----- CallCoupling PluginAttribute: CreatePlugin() PluginAttribute: PluginAttribute(string typeName) --- Path Number: 331 ----- Path Length: 1 ----- CallCoupling

Page 251: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

250

SecurityContextProviderAttribute: Configure(Assembly sourceAssembly, ILoggerRepository targetRepository) --- Path Number: 332 ----- Path Length: 1 ----- CallCoupling XmlConfigurator: InternalConfigure(ILoggerRepository repository) --- Path Number: 333 ----- Path Length: 1 ----- CallCoupling XmlConfigurator: Configure(ILoggerRepository repository, XmlElement element) --- Path Number: 334 ----- Path Length: 1 ----- CallCoupling XmlConfigurator: InternalConfigure(ILoggerRepository repository, FileInfo configFile) --- Path Number: 335 ----- Path Length: 1 ----- CallCoupling XmlConfigurator: InternalConfigure(ILoggerRepository repository, Uri configUri) --- Path Number: 336 ----- Path Length: 1 ----- CallCoupling XmlConfigurator: InternalConfigure(ILoggerRepository repository, Stream configStream) --- Path Number: 337 ----- Path Length: 1 ----- CallCoupling XmlConfigurator: InternalConfigureAndWatch(ILoggerRepository repository, FileInfo configFile) --- Path Number: 338 ----- Path Length: 1 ----- CallCoupling XmlConfigurator: InternalConfigureFromXml(ILoggerRepository repository, XmlElement element) --- Path Number: 339 ----- Path Length: 1 ----- CallCoupling ConfigureAndWatchHandler: ConfigureAndWatchHandler_OnChanged(object source, FileSystemEventArgs e) --- Path Number: 340 ----- Path Length: 1 ----- CallCoupling ConfigureAndWatchHandler: ConfigureAndWatchHandler_OnRenamed(object source, RenamedEventArgs e) --- Path Number: 341 ----- Path Length: 1 ----- CallCoupling ConfigureAndWatchHandler: OnWatchedFileChange(object state) --- Path Number: 342 ----- Path Length: 2 ----- CallCoupling

Page 252: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

251

XmlConfiguratorAttribute: ConfigureFromFile(Assembly sourceAssembly, ILoggerRepository targetRepository) XmlConfiguratorAttribute: ConfigureFromUri(Assembly sourceAssembly, ILoggerRepository targetRepository) --- Path Number: 343 ----- Path Length: 1 ----- CallCoupling XmlConfiguratorAttribute: ConfigureFromFile(ILoggerRepository targetRepository, FileInfo configFile) --- Path Number: 344 ----- Path Length: 2 ----- CallCoupling XmlConfiguratorAttribute: ConfigureFromUri(Assembly sourceAssembly, ILoggerRepository targetRepository) XmlConfiguratorAttribute: ConfigureFromFile(Assembly sourceAssembly, ILoggerRepository targetRepository) --- Path Number: 345 ----- Path Length: 1 ----- CallCoupling CompactRepositorySelector: CompactRepositorySelector(Type defaultRepositoryType) --- Path Number: 346 ----- Path Length: 2 ----- CallCoupling CompactRepositorySelector: CreateRepository(string repositoryName, Type repositoryType) CompactRepositorySelector: CompactRepositorySelector(Type defaultRepositoryType) --- Path Number: 347 ----- Path Length: 1 ----- CallCoupling DefaultRepositorySelector: DefaultRepositorySelector(Type defaultRepositoryType) --- Path Number: 348 ----- Path Length: 2 ----- CallCoupling DefaultRepositorySelector: CreateRepository(Assembly repositoryAssembly, Type repositoryType, string repositoryName, bool readAssemblyAttributes) DefaultRepositorySelector: DefaultRepositorySelector(Type defaultRepositoryType) --- Path Number: 349 ----- Path Length: 3 ----- CallCoupling DefaultRepositorySelector: CreateRepository(Assembly repositoryAssembly, Type repositoryType, string repositoryName, bool readAssemblyAttributes) DefaultRepositorySelector: CreateRepository(string repositoryName, Type repositoryType) DefaultRepositorySelector: DefaultRepositorySelector(Type defaultRepositoryType) --- Path Number: 350 ----- Path Length: 2 ----- CallCoupling DefaultRepositorySelector: CreateRepository(string repositoryName, Type repositoryType) DefaultRepositorySelector: DefaultRepositorySelector(Type defaultRepositoryType) --- Path Number: 351 ----- Path Length: 1 ----- CallCoupling

Page 253: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

252

DefaultRepositorySelector: GetInfoForAssembly(Assembly assembly, ref string repositoryName, ref Type repositoryType) --- Path Number: 352 ----- Path Length: 1 ----- CallCoupling DefaultRepositorySelector: ConfigureRepository(Assembly assembly, ILoggerRepository repository) --- Path Number: 353 ----- Path Length: 1 ----- CallCoupling DefaultRepositorySelector: LoadPlugins(Assembly assembly, ILoggerRepository repository) --- Path Number: 354 ----- Path Length: 1 ----- CallCoupling DefaultRepositorySelector: LoadAliases(Assembly assembly, ILoggerRepository repository) --- Path Number: 355 ----- Path Length: 2 ----- ParameterCoupling ExceptionEvaluator: IsTriggeringEvent(LoggingEvent loggingEvent) ExceptionEvaluator: ExceptionEvaluator(Type exType, bool triggerOnSubClass) --- Path Number: 356 ----- Path Length: 2 ----- ParameterCoupling Level: Unknown BaseMethodDeclarationSyntax(Level l, Level r) Level: Level(int level, string levelName, string displayName) --- Path Number: 357 ----- Path Length: 2 ----- ParameterCoupling Level: Compare(Level l, Level r) Level: Level(int level, string levelName, string displayName) --- Path Number: 358 ----- Path Length: 1 ----- ParameterCoupling LevelCollection: ReadOnly(LevelCollection list) --- Path Number: 359 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 360 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 361 ----- Path Length: 5 ----- ParameterCoupling

Page 254: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

253

LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 362 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 363 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 364 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 365 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 366 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 367 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item)

Page 255: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

254

LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 368 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 369 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 370 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 371 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 372 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 373 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c)

Page 256: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

255

LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 374 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 375 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 376 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 377 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 378 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 379 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Add(Level item)

Page 257: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

256

LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 380 ----- Path Length: 2 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clear() --- Path Number: 381 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 382 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 383 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 384 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 385 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear()

Page 258: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

257

--- Path Number: 386 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 387 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 388 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 389 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 390 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 391 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 392 ----- Path Length: 5 ----- ParameterCoupling

Page 259: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

258

LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 393 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 394 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 395 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 396 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 397 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 398 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item)

Page 260: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

259

LevelCollection: Clear() --- Path Number: 399 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 400 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 401 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 402 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 403 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 404 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x)

Page 261: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

260

LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 405 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 406 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 407 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 408 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 409 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 410 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Clear() ---

Page 262: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

261

Path Number: 411 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 412 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 413 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 414 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 415 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 416 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: Clear() ---

Page 263: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

262

Path Number: 417 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 418 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 419 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 420 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 421 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 422 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 423 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c)

Page 264: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

263

LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 424 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 425 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 426 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 427 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 428 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 429 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x)

Page 265: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

264

LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 430 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 431 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 432 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 433 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 434 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 435 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item)

Page 266: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

265

LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 436 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 437 ----- Path Length: 6 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 438 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 439 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: LevelCollection(LevelCollection c) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 440 ----- Path Length: 2 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 441 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 442 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: Clone()

Page 267: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

266

LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 443 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 444 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 445 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 446 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 447 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 448 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 449 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone()

Page 268: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

267

LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 450 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 451 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 452 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 453 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 454 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 455 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 456 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x)

Page 269: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

268

LevelCollection: Clone() LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 457 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 458 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 459 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 460 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 461 ----- Path Length: 1 ----- ParameterCoupling LevelCollection: Contains(Level item) --- Path Number: 462 ----- Path Length: 1 ----- ParameterCoupling LevelCollection: IndexOf(Level item) --- Path Number: 463 ----- Path Length: 1 ----- ParameterCoupling LevelCollection: Insert(int index, Level item) --- Path Number: 464 ----- Path Length: 1 ----- ParameterCoupling LevelCollection: Remove(Level item) ---

Page 270: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

269

Path Number: 465 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 466 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 467 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 468 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 469 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 470 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 471 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc)

Page 271: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

270

--- Path Number: 472 ----- Path Length: 2 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Clear() --- Path Number: 473 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 474 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 475 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 476 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 477 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 478 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 479 ----- Path Length: 4 ----- ParameterCoupling

Page 272: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

271

LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 480 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 481 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Add(Level item) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) --- Path Number: 482 ----- Path Length: 3 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clear() --- Path Number: 483 ----- Path Length: 5 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Add(Level item) LevelCollection: Clear() --- Path Number: 484 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() LevelCollection: Clear() --- Path Number: 485 ----- Path Length: 4 ----- ParameterCoupling LevelCollection: AddRange(LevelCollection x) LevelCollection: AddRange(Level[] x) LevelCollection: Clone() Enumerator: Enumerator(LevelCollection tc) ---

Page 273: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

272

Path Number: 486 ----- Path Length: 1 ----- CallCoupling LevelCollection: ValidateIndex(int i, bool allowEqualEnd) --- Path Number: 487 ----- Path Length: 1 ----- ParameterCoupling Enumerator: Enumerator(LevelCollection tc) --- Path Number: 488 ----- Path Length: 1 ----- ParameterCoupling ReadOnlyLevelCollection: ReadOnlyLevelCollection(LevelCollection list) --- Path Number: 489 ----- Path Length: 1 ----- CallCoupling ReadOnlyLevelCollection: CopyTo(Level[] array) --- Path Number: 490 ----- Path Length: 1 ----- ParameterCoupling ReadOnlyLevelCollection: Add(Level x) --- Path Number: 491 ----- Path Length: 2 ----- ParameterCoupling ReadOnlyLevelCollection: Contains(Level x) ReadOnlyLevelCollection: ReadOnlyLevelCollection(LevelCollection list) --- Path Number: 492 ----- Path Length: 2 ----- ParameterCoupling ReadOnlyLevelCollection: IndexOf(Level x) ReadOnlyLevelCollection: ReadOnlyLevelCollection(LevelCollection list) --- Path Number: 493 ----- Path Length: 1 ----- ParameterCoupling ReadOnlyLevelCollection: Insert(int pos, Level x) --- Path Number: 494 ----- Path Length: 1 ----- ParameterCoupling ReadOnlyLevelCollection: Remove(Level x) --- Path Number: 495 ----- Path Length: 2 ----- CallCoupling ReadOnlyLevelCollection: GetEnumerator() ReadOnlyLevelCollection: ReadOnlyLevelCollection(LevelCollection list) --- Path Number: 496 ----- Path Length: 1 ----- ParameterCoupling ReadOnlyLevelCollection: AddRange(LevelCollection x) --- Path Number: 497 ----- Path Length: 1 ----- ParameterCoupling LevelEvaluator: LevelEvaluator(Level threshold) ---

Page 274: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

273

Path Number: 498 ----- Path Length: 2 ----- ParameterCoupling LevelEvaluator: IsTriggeringEvent(LoggingEvent loggingEvent) LevelEvaluator: LevelEvaluator(Level threshold) --- Path Number: 499 ----- Path Length: 1 ----- CallCoupling LevelMap: Add(string name, int value, string displayName) --- Path Number: 500 ----- Path Length: 1 ----- ParameterCoupling LevelMap: Add(Level level) --- Path Number: 501 ----- Path Length: 1 ----- ParameterCoupling LevelMap: LookupWithDefault(Level defaultLevel) --- Path Number: 502 ----- Path Length: 2 ----- CallCoupling LocationInfo: LocationInfo(Type callerStackBoundaryDeclaringType) LocationInfo: LocationInfo(string className, string methodName, string fileName, string lineNumber) --- Path Number: 503 ----- Path Length: 1 ----- CallCoupling LoggerManager: LoggerManager() --- Path Number: 504 ----- Path Length: 1 ----- CallCoupling LoggerManager: GetRepository(Assembly repositoryAssembly) --- Path Number: 505 ----- Path Length: 1 ----- CallCoupling LoggerManager: Exists(string repository, string name) --- Path Number: 506 ----- Path Length: 1 ----- CallCoupling LoggerManager: Exists(Assembly repositoryAssembly, string name) --- Path Number: 507 ----- Path Length: 1 ----- CallCoupling LoggerManager: GetCurrentLoggers(string repository) --- Path Number: 508 ----- Path Length: 1 ----- CallCoupling LoggerManager: GetCurrentLoggers(Assembly repositoryAssembly) --- Path Number: 509 ----- Path Length: 1 ----- CallCoupling LoggerManager: GetLogger(string repository, string name)

Page 275: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

274

--- Path Number: 510 ----- Path Length: 1 ----- CallCoupling LoggerManager: GetLogger(Assembly repositoryAssembly, string name) --- Path Number: 511 ----- Path Length: 1 ----- CallCoupling LoggerManager: GetLogger(string repository, Type type) --- Path Number: 512 ----- Path Length: 1 ----- CallCoupling LoggerManager: GetLogger(Assembly repositoryAssembly, Type type) --- Path Number: 513 ----- Path Length: 1 ----- CallCoupling LoggerManager: Shutdown() --- Path Number: 514 ----- Path Length: 1 ----- CallCoupling LoggerManager: ShutdownRepository(string repository) --- Path Number: 515 ----- Path Length: 1 ----- CallCoupling LoggerManager: ShutdownRepository(Assembly repositoryAssembly) --- Path Number: 516 ----- Path Length: 1 ----- CallCoupling LoggerManager: ResetConfiguration(string repository) --- Path Number: 517 ----- Path Length: 1 ----- CallCoupling LoggerManager: ResetConfiguration(Assembly repositoryAssembly) --- Path Number: 518 ----- Path Length: 1 ----- CallCoupling LoggerManager: CreateRepository(Assembly repositoryAssembly, Type repositoryType) --- Path Number: 519 ----- Path Length: 1 ----- CallCoupling LoggerManager: GetAllRepositories() --- Path Number: 520 ----- Path Length: 1 ----- CallCoupling LoggerManager: GetVersionInfo() --- Path Number: 521 ----- Path Length: 1 ----- ParameterCoupling

Page 276: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

275

LoggingEvent: LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, string loggerName, Level level, object message, Exception exception) --- Path Number: 522 ----- Path Length: 1 ----- CallCoupling LoggingEvent: WriteRenderedMessage(TextWriter writer) --- Path Number: 523 ----- Path Length: 2 ----- CallCoupling LoggingEvent: GetExceptionString() LoggingEvent: LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, string loggerName, Level level, object message, Exception exception) --- Path Number: 524 ----- Path Length: 2 ----- CallCoupling LoggingEvent: GetExceptionString() LoggingEvent: LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, LoggingEventData data, FixFlags fixedData) --- Path Number: 525 ----- Path Length: 2 ----- CallCoupling LoggingEvent: GetExceptionString() LoggingEvent: EnsureRepository(ILoggerRepository repository) --- Path Number: 526 ----- Path Length: 2 ----- CallCoupling LoggingEvent: GetExceptionString() LoggingEvent: LoggingEvent(SerializationInfo info, StreamingContext context) --- Path Number: 527 ----- Path Length: 2 ----- CallCoupling LoggingEvent: GetExceptionString() LoggingEvent: CacheProperties() --- Path Number: 528 ----- Path Length: 1 ----- CallCoupling LoggingEvent: CreateCompositeProperties() --- Path Number: 529 ----- Path Length: 1 ----- CallCoupling LoggingEvent: CacheProperties() --- Path Number: 530 ----- Path Length: 2 ----- CallCoupling LoggingEvent: GetProperties() LoggingEvent: LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, string loggerName, Level level, object message, Exception exception)

Page 277: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

276

--- Path Number: 531 ----- Path Length: 2 ----- CallCoupling LoggingEvent: GetProperties() LoggingEvent: LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, LoggingEventData data, FixFlags fixedData) --- Path Number: 532 ----- Path Length: 2 ----- CallCoupling LoggingEvent: GetProperties() LoggingEvent: LoggingEvent(SerializationInfo info, StreamingContext context) --- Path Number: 533 ----- Path Length: 3 ----- CallCoupling LoggingEvent: GetProperties() LoggingEvent: GetExceptionString() LoggingEvent: LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, string loggerName, Level level, object message, Exception exception) --- Path Number: 534 ----- Path Length: 3 ----- CallCoupling LoggingEvent: GetProperties() LoggingEvent: GetExceptionString() LoggingEvent: LoggingEvent(Type callerStackBoundaryDeclaringType, log4net.Repository.ILoggerRepository repository, LoggingEventData data, FixFlags fixedData) --- Path Number: 535 ----- Path Length: 3 ----- CallCoupling LoggingEvent: GetProperties() LoggingEvent: GetExceptionString() LoggingEvent: EnsureRepository(ILoggerRepository repository) --- Path Number: 536 ----- Path Length: 3 ----- CallCoupling LoggingEvent: GetProperties() LoggingEvent: GetExceptionString() LoggingEvent: LoggingEvent(SerializationInfo info, StreamingContext context) --- Path Number: 537 ----- Path Length: 3 ----- CallCoupling LoggingEvent: GetProperties() LoggingEvent: GetExceptionString() LoggingEvent: CacheProperties() --- Path Number: 538 ----- Path Length: 2 ----- CallCoupling LoggingEvent: GetProperties() LoggingEvent: CacheProperties() ---

Page 278: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

277

Path Number: 539 ----- Path Length: 2 ----- CallCoupling LoggingEvent: GetProperties() LoggingEvent: CreateCompositeProperties() --- Path Number: 540 ----- Path Length: 1 ----- CallCoupling LogImpl: ReloadLevels(ILoggerRepository repository) --- Path Number: 541 ----- Path Length: 1 ----- CallCoupling MethodItem: GetMethodParameterNames(System.Reflection.MethodBase methodBase) --- Path Number: 542 ----- Path Length: 1 ----- ParameterCoupling StackFrameItem: StackFrameItem(StackFrame frame) --- Path Number: 543 ----- Path Length: 1 ----- ParameterCoupling TimeEvaluator: IsTriggeringEvent(LoggingEvent loggingEvent) --- Path Number: 544 ----- Path Length: 1 ----- ParameterCoupling DenyAllFilter: Decide(LoggingEvent loggingEvent) --- Path Number: 545 ----- Path Length: 1 ----- ParameterCoupling FilterSkeleton: Decide(LoggingEvent loggingEvent) --- Path Number: 546 ----- Path Length: 1 ----- ParameterCoupling LevelMatchFilter: Decide(LoggingEvent loggingEvent) --- Path Number: 547 ----- Path Length: 1 ----- ParameterCoupling LevelRangeFilter: Decide(LoggingEvent loggingEvent) --- Path Number: 548 ----- Path Length: 1 ----- ParameterCoupling LoggerMatchFilter: Decide(LoggingEvent loggingEvent) --- Path Number: 549 ----- Path Length: 1 ----- ParameterCoupling PropertyFilter: Decide(LoggingEvent loggingEvent) --- Path Number: 550 ----- Path Length: 1 ----- ParameterCoupling StringMatchFilter: Decide(LoggingEvent loggingEvent) ---

Page 279: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

278

Path Number: 551 ----- Path Length: 1 ----- ParameterCoupling ExceptionLayout: Format(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 552 ----- Path Length: 1 ----- ParameterCoupling Layout2RawLayoutAdapter: Format(LoggingEvent loggingEvent) --- Path Number: 553 ----- Path Length: 1 ----- ParameterCoupling LayoutSkeleton: Format(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 554 ----- Path Length: 1 ----- ParameterCoupling LayoutSkeleton: Format(LoggingEvent loggingEvent) --- Path Number: 555 ----- Path Length: 2 ----- CallCoupling PatternLayout: ActivateOptions() PatternLayout: PatternLayout(string pattern) --- Path Number: 556 ----- Path Length: 1 ----- ParameterCoupling PatternLayout: Format(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 557 ----- Path Length: 1 ----- ParameterCoupling PatternLayout: AddConverter(ConverterInfo converterInfo) --- Path Number: 558 ----- Path Length: 1 ----- ParameterCoupling AppDomainPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 559 ----- Path Length: 1 ----- ParameterCoupling AspNetCachePatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent, HttpContext httpContext) --- Path Number: 560 ----- Path Length: 1 ----- ParameterCoupling AspNetContextPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent, HttpContext httpContext) --- Path Number: 561 ----- Path Length: 1 ----- ParameterCoupling AspNetPatternLayoutConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 562 ----- Path Length: 1 ----- ParameterCoupling AspNetPatternLayoutConverter: Convert(TextWriter writer, LoggingEvent loggingEvent, HttpContext httpContext)

Page 280: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

279

--- Path Number: 563 ----- Path Length: 1 ----- ParameterCoupling AspNetRequestPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent, HttpContext httpContext) --- Path Number: 564 ----- Path Length: 1 ----- ParameterCoupling AspNetSessionPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent, HttpContext httpContext) --- Path Number: 565 ----- Path Length: 1 ----- CallCoupling DatePatternConverter: ActivateOptions() --- Path Number: 566 ----- Path Length: 1 ----- ParameterCoupling DatePatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 567 ----- Path Length: 1 ----- ParameterCoupling ExceptionPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 568 ----- Path Length: 1 ----- ParameterCoupling FileLocationPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 569 ----- Path Length: 1 ----- ParameterCoupling FullLocationPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 570 ----- Path Length: 1 ----- ParameterCoupling IdentityPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 571 ----- Path Length: 1 ----- ParameterCoupling LevelPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 572 ----- Path Length: 1 ----- ParameterCoupling LineLocationPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 573 ----- Path Length: 1 ----- ParameterCoupling LoggerPatternConverter: GetFullyQualifiedName(LoggingEvent loggingEvent) --- Path Number: 574 ----- Path Length: 1 ----- ParameterCoupling MessagePatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent)

Page 281: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

280

--- Path Number: 575 ----- Path Length: 1 ----- ParameterCoupling MethodLocationPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 576 ----- Path Length: 1 ----- CallCoupling NamedPatternConverter: ActivateOptions() --- Path Number: 577 ----- Path Length: 1 ----- ParameterCoupling NamedPatternConverter: GetFullyQualifiedName(LoggingEvent loggingEvent) --- Path Number: 578 ----- Path Length: 1 ----- ParameterCoupling NamedPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 579 ----- Path Length: 1 ----- ParameterCoupling NdcPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 580 ----- Path Length: 1 ----- ParameterCoupling PatternLayoutConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 581 ----- Path Length: 1 ----- ParameterCoupling PropertyPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 582 ----- Path Length: 1 ----- ParameterCoupling RelativeTimePatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 583 ----- Path Length: 1 ----- ParameterCoupling StackTraceDetailPatternConverter: GetMethodInformation(MethodItem method) --- Path Number: 584 ----- Path Length: 1 ----- CallCoupling StackTracePatternConverter: ActivateOptions() --- Path Number: 585 ----- Path Length: 1 ----- ParameterCoupling StackTracePatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 586 ----- Path Length: 1 ----- ParameterCoupling StackTracePatternConverter: GetMethodInformation(MethodItem method) ---

Page 282: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

281

Path Number: 587 ----- Path Length: 1 ----- ParameterCoupling ThreadPatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 588 ----- Path Length: 1 ----- ParameterCoupling TypeNamePatternConverter: GetFullyQualifiedName(LoggingEvent loggingEvent) --- Path Number: 589 ----- Path Length: 1 ----- ParameterCoupling UserNamePatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 590 ----- Path Length: 1 ----- ParameterCoupling UtcDatePatternConverter: Convert(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 591 ----- Path Length: 1 ----- ParameterCoupling RawPropertyLayout: Format(LoggingEvent loggingEvent) --- Path Number: 592 ----- Path Length: 1 ----- ParameterCoupling RawTimeStampLayout: Format(LoggingEvent loggingEvent) --- Path Number: 593 ----- Path Length: 1 ----- ParameterCoupling RawUtcTimeStampLayout: Format(LoggingEvent loggingEvent) --- Path Number: 594 ----- Path Length: 1 ----- ParameterCoupling SimpleLayout: Format(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 595 ----- Path Length: 1 ----- CallCoupling XmlLayout: ActivateOptions() --- Path Number: 596 ----- Path Length: 1 ----- ParameterCoupling XmlLayout: FormatXml(XmlWriter writer, LoggingEvent loggingEvent) --- Path Number: 597 ----- Path Length: 1 ----- ParameterCoupling XmlLayoutBase: Format(TextWriter writer, LoggingEvent loggingEvent) --- Path Number: 598 ----- Path Length: 1 ----- ParameterCoupling XmlLayoutBase: FormatXml(XmlWriter writer, LoggingEvent loggingEvent) --- Path Number: 599 ----- Path Length: 1 ----- ParameterCoupling

Page 283: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

282

XmlLayoutSchemaLog4j: FormatXml(XmlWriter writer, LoggingEvent loggingEvent) --- Path Number: 600 ----- Path Length: 1 ----- CallCoupling LogManager: Exists(string repository, string name) --- Path Number: 601 ----- Path Length: 1 ----- CallCoupling LogManager: GetCurrentLoggers(string repository) --- Path Number: 602 ----- Path Length: 1 ----- CallCoupling LogManager: GetLogger(string repository, string name) --- Path Number: 603 ----- Path Length: 1 ----- CallCoupling LogManager: Shutdown() --- Path Number: 604 ----- Path Length: 1 ----- CallCoupling LogManager: ShutdownRepository(string repository) --- Path Number: 605 ----- Path Length: 1 ----- CallCoupling LogManager: ResetConfiguration(string repository) --- Path Number: 606 ----- Path Length: 1 ----- CallCoupling LogManager: GetRepository(string repository) --- Path Number: 607 ----- Path Length: 1 ----- CallCoupling LogManager: CreateDomain(string repository) --- Path Number: 608 ----- Path Length: 1 ----- CallCoupling LogManager: CreateRepository(string repository) --- Path Number: 609 ----- Path Length: 1 ----- CallCoupling LogManager: CreateDomain(string repository, Type repositoryType) --- Path Number: 610 ----- Path Length: 1 ----- CallCoupling LogManager: CreateRepository(string repository, Type repositoryType) --- Path Number: 611 ----- Path Length: 1 ----- CallCoupling LogManager: GetAllRepositories() ---

Page 284: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

283

Path Number: 612 ----- Path Length: 1 ----- CallCoupling LogManager: Flush(int millisecondsTimeout) --- Path Number: 613 ----- Path Length: 1 ----- CallCoupling LogManager: WrapLogger(ILogger logger) --- Path Number: 614 ----- Path Length: 1 ----- CallCoupling MDC: Remove(string key) --- Path Number: 615 ----- Path Length: 1 ----- CallCoupling MDC: Clear() --- Path Number: 616 ----- Path Length: 1 ----- CallCoupling NDC: Clear() --- Path Number: 617 ----- Path Length: 1 ----- CallCoupling NDC: Pop() --- Path Number: 618 ----- Path Length: 1 ----- CallCoupling NDC: Push(string message) --- Path Number: 619 ----- Path Length: 1 ----- CallCoupling NDC: SetMaxDepth(int maxDepth) --- Path Number: 620 ----- Path Length: 1 ----- ParameterCoupling DefaultRenderer: RenderObject(RendererMap rendererMap, object obj, TextWriter writer) --- Path Number: 621 ----- Path Length: 1 ----- ParameterCoupling DefaultRenderer: RenderArray(RendererMap rendererMap, Array array, TextWriter writer) --- Path Number: 622 ----- Path Length: 1 ----- ParameterCoupling DefaultRenderer: RenderEnumerator(RendererMap rendererMap, IEnumerator enumerator, TextWriter writer) --- Path Number: 623 ----- Path Length: 1 ----- ParameterCoupling

Page 285: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

284

DefaultRenderer: RenderDictionaryEntry(RendererMap rendererMap, DictionaryEntry entry, TextWriter writer) --- Path Number: 624 ----- Path Length: 1 ----- CallCoupling RendererMap: FindAndRender(object obj, TextWriter writer) --- Path Number: 625 ----- Path Length: 1 ----- ParameterCoupling PluginCollection: ReadOnly(PluginCollection list) --- Path Number: 626 ----- Path Length: 3 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 627 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 628 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 629 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 630 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() ---

Page 286: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

285

Path Number: 631 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 632 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 633 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 634 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 635 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 636 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 637 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c)

Page 287: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

286

PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 638 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 639 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 640 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 641 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 642 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 643 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c)

Page 288: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

287

PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 644 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 645 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 646 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 647 ----- Path Length: 2 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clear() --- Path Number: 648 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 649 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear()

Page 289: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

288

--- Path Number: 650 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 651 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 652 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 653 ----- Path Length: 3 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 654 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 655 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() ---

Page 290: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

289

Path Number: 656 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 657 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 658 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 659 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 660 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 661 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 662 ----- Path Length: 6 ----- ParameterCoupling

Page 291: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

290

PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 663 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 664 ----- Path Length: 3 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 665 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 666 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 667 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 668 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item)

Page 292: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

291

PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 669 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 670 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 671 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 672 ----- Path Length: 3 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 673 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 674 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x)

Page 293: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

292

PluginCollection: Clear() --- Path Number: 675 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 676 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 677 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 678 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 679 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 680 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: Clear() ---

Page 294: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

293

Path Number: 681 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 682 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 683 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 684 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 685 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 686 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 687 ----- Path Length: 5 ----- ParameterCoupling

Page 295: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

294

PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 688 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 689 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 690 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 691 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 692 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) ---

Page 296: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

295

Path Number: 693 ----- Path Length: 3 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 694 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 695 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 696 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 697 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 698 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 699 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x)

Page 297: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

296

PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 700 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 701 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 702 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 703 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 704 ----- Path Length: 6 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 705 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x)

Page 298: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

297

PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 706 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: PluginCollection(PluginCollection c) PluginCollection: AddRange(IPlugin[] x) PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 707 ----- Path Length: 3 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 708 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 709 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 710 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 711 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 712 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item)

Page 299: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

298

PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 713 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 714 ----- Path Length: 2 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Clear() --- Path Number: 715 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 716 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 717 ----- Path Length: 3 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 718 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 719 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone()

Page 300: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

299

PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 720 ----- Path Length: 3 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 721 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 722 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 723 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Add(IPlugin item) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 724 ----- Path Length: 3 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clear() --- Path Number: 725 ----- Path Length: 5 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() PluginCollection: Add(IPlugin item) PluginCollection: Clear() --- Path Number: 726 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x)

Page 301: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

300

PluginCollection: Clone() PluginCollection: Clear() --- Path Number: 727 ----- Path Length: 4 ----- ParameterCoupling PluginCollection: AddRange(PluginCollection x) PluginCollection: AddRange(IPlugin[] x) PluginCollection: Clone() Enumerator: Enumerator(PluginCollection tc) --- Path Number: 728 ----- Path Length: 1 ----- CallCoupling PluginCollection: ValidateIndex(int i, bool allowEqualEnd) --- Path Number: 729 ----- Path Length: 1 ----- ParameterCoupling Enumerator: Enumerator(PluginCollection tc) --- Path Number: 730 ----- Path Length: 1 ----- ParameterCoupling ReadOnlyPluginCollection: ReadOnlyPluginCollection(PluginCollection list) --- Path Number: 731 ----- Path Length: 1 ----- CallCoupling ReadOnlyPluginCollection: CopyTo(IPlugin[] array) --- Path Number: 732 ----- Path Length: 2 ----- CallCoupling ReadOnlyPluginCollection: Contains(IPlugin x) ReadOnlyPluginCollection: ReadOnlyPluginCollection(PluginCollection list) --- Path Number: 733 ----- Path Length: 2 ----- CallCoupling ReadOnlyPluginCollection: IndexOf(IPlugin x) ReadOnlyPluginCollection: ReadOnlyPluginCollection(PluginCollection list) --- Path Number: 734 ----- Path Length: 2 ----- CallCoupling ReadOnlyPluginCollection: GetEnumerator() ReadOnlyPluginCollection: ReadOnlyPluginCollection(PluginCollection list) --- Path Number: 735 ----- Path Length: 1 ----- ParameterCoupling ReadOnlyPluginCollection: AddRange(PluginCollection x) --- Path Number: 736 ----- Path Length: 1 ----- CallCoupling PluginMap: Add(IPlugin plugin) ---

Page 302: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

301

Path Number: 737 ----- Path Length: 1 ----- CallCoupling RemoteLoggingServerPlugin: Attach(ILoggerRepository repository) --- Path Number: 738 ----- Path Length: 1 ----- CallCoupling RemoteLoggingServerPlugin: Shutdown() --- Path Number: 739 ----- Path Length: 1 ----- CallCoupling RemoteLoggingSinkImpl: LogEvents(LoggingEvent[] events) --- Path Number: 740 ----- Path Length: 1 ----- CallCoupling DefaultLoggerFactory: CreateLogger(ILoggerRepository repository, string name) --- Path Number: 741 ----- Path Length: 1 ----- ParameterCoupling LoggerCreationEventArgs: LoggerCreationEventArgs(Logger log) --- Path Number: 742 ----- Path Length: 1 ----- ParameterCoupling Hierarchy: Hierarchy(PropertiesDictionary properties) --- Path Number: 743 ----- Path Length: 1 ----- ParameterCoupling Hierarchy: Hierarchy(PropertiesDictionary properties, ILoggerFactory loggerFactory) --- Path Number: 744 ----- Path Length: 1 ----- CallCoupling Hierarchy: Shutdown() --- Path Number: 745 ----- Path Length: 1 ----- CallCoupling Hierarchy: ResetConfiguration() --- Path Number: 746 ----- Path Length: 1 ----- ParameterCoupling Hierarchy: Log(LoggingEvent logEvent) --- Path Number: 747 ----- Path Length: 1 ----- CallCoupling Hierarchy: BasicRepositoryConfigure(params IAppender[] appenders) --- Path Number: 748 ----- Path Length: 2 ----- CallCoupling Hierarchy: XmlRepositoryConfigure(System.Xml.XmlElement element) Hierarchy: Hierarchy(PropertiesDictionary properties, ILoggerFactory loggerFactory) --- Path Number: 749 ----- Path Length: 1 ----- ParameterCoupling

Page 303: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

302

Hierarchy: IsDisabled(Level level) --- Path Number: 750 ----- Path Length: 1 ----- ParameterCoupling Hierarchy: OnLoggerCreationEvent(Logger logger) --- Path Number: 751 ----- Path Length: 1 ----- ParameterCoupling Hierarchy: UpdateParents(Logger log) --- Path Number: 752 ----- Path Length: 1 ----- ParameterCoupling Hierarchy: UpdateChildren(ProvisionNode pn, Logger log) --- Path Number: 753 ----- Path Length: 1 ----- ParameterCoupling Hierarchy: AddLevel(LevelEntry levelEntry) --- Path Number: 754 ----- Path Length: 1 ----- ParameterCoupling Hierarchy: AddProperty(PropertyEntry propertyEntry) --- Path Number: 755 ----- Path Length: 1 ----- CallCoupling Logger: AddAppender(IAppender newAppender) --- Path Number: 756 ----- Path Length: 2 ----- CallCoupling Logger: GetAppender(string name) Logger: AddAppender(IAppender newAppender) --- Path Number: 757 ----- Path Length: 2 ----- CallCoupling Logger: GetAppender(string name) Logger: RemoveAllAppenders() --- Path Number: 758 ----- Path Length: 1 ----- CallCoupling Logger: RemoveAllAppenders() --- Path Number: 759 ----- Path Length: 2 ----- CallCoupling Logger: RemoveAppender(IAppender appender) Logger: AddAppender(IAppender newAppender) --- Path Number: 760 ----- Path Length: 2 ----- CallCoupling Logger: RemoveAppender(IAppender appender) Logger: RemoveAllAppenders() ---

Page 304: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

303

Path Number: 761 ----- Path Length: 2 ----- CallCoupling Logger: RemoveAppender(string name) Logger: AddAppender(IAppender newAppender) --- Path Number: 762 ----- Path Length: 2 ----- CallCoupling Logger: RemoveAppender(string name) Logger: RemoveAllAppenders() --- Path Number: 763 ----- Path Length: 1 ----- ParameterCoupling Logger: Log(Type callerStackBoundaryDeclaringType, Level level, object message, Exception exception) --- Path Number: 764 ----- Path Length: 2 ----- ParameterCoupling Logger: Log(LoggingEvent logEvent) Logger: AddAppender(IAppender newAppender) --- Path Number: 765 ----- Path Length: 2 ----- ParameterCoupling Logger: Log(LoggingEvent logEvent) Logger: RemoveAllAppenders() --- Path Number: 766 ----- Path Length: 1 ----- ParameterCoupling Logger: IsEnabledFor(Level level) --- Path Number: 767 ----- Path Length: 2 ----- ParameterCoupling Logger: CallAppenders(LoggingEvent loggingEvent) Logger: AddAppender(IAppender newAppender) --- Path Number: 768 ----- Path Length: 2 ----- ParameterCoupling Logger: CallAppenders(LoggingEvent loggingEvent) Logger: RemoveAllAppenders() --- Path Number: 769 ----- Path Length: 1 ----- CallCoupling Logger: CloseNestedAppenders() --- Path Number: 770 ----- Path Length: 1 ----- ParameterCoupling Logger: Log(Level level, object message, Exception exception) --- Path Number: 771 ----- Path Length: 2 ----- ParameterCoupling

Page 305: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

304

Logger: ForcedLog(Type callerStackBoundaryDeclaringType, Level level, object message, Exception exception) Logger: AddAppender(IAppender newAppender) --- Path Number: 772 ----- Path Length: 2 ----- ParameterCoupling Logger: ForcedLog(Type callerStackBoundaryDeclaringType, Level level, object message, Exception exception) Logger: RemoveAllAppenders() --- Path Number: 773 ----- Path Length: 2 ----- ParameterCoupling Logger: ForcedLog(LoggingEvent logEvent) Logger: AddAppender(IAppender newAppender) --- Path Number: 774 ----- Path Length: 2 ----- ParameterCoupling Logger: ForcedLog(LoggingEvent logEvent) Logger: RemoveAllAppenders() --- Path Number: 775 ----- Path Length: 1 ----- ParameterCoupling ProvisionNode: ProvisionNode(Logger log) --- Path Number: 776 ----- Path Length: 1 ----- ParameterCoupling RootLogger: RootLogger(Level level) --- Path Number: 777 ----- Path Length: 1 ----- ParameterCoupling XmlHierarchyConfigurator: XmlHierarchyConfigurator(Hierarchy hierarchy) --- Path Number: 778 ----- Path Length: 1 ----- CallCoupling XmlHierarchyConfigurator: Configure(XmlElement element) --- Path Number: 779 ----- Path Length: 1 ----- CallCoupling XmlHierarchyConfigurator: FindAppenderByReference(XmlElement appenderRef) --- Path Number: 780 ----- Path Length: 1 ----- CallCoupling XmlHierarchyConfigurator: ParseAppender(XmlElement appenderElement) --- Path Number: 781 ----- Path Length: 1 ----- CallCoupling XmlHierarchyConfigurator: ParseLogger(XmlElement loggerElement) --- Path Number: 782 ----- Path Length: 1 ----- ParameterCoupling

Page 306: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

305

XmlHierarchyConfigurator: ParseChildrenOfLoggerElement(XmlElement catElement, Logger log, bool isRoot) --- Path Number: 783 ----- Path Length: 1 ----- CallCoupling XmlHierarchyConfigurator: ParseRenderer(XmlElement element) --- Path Number: 784 ----- Path Length: 1 ----- ParameterCoupling XmlHierarchyConfigurator: ParseLevel(XmlElement element, Logger log, bool isRoot) --- Path Number: 785 ----- Path Length: 1 ----- CallCoupling XmlHierarchyConfigurator: SetParameter(XmlElement element, object target) --- Path Number: 786 ----- Path Length: 1 ----- CallCoupling XmlHierarchyConfigurator: FindMethodInfo(Type targetType, string name) --- Path Number: 787 ----- Path Length: 1 ----- CallCoupling XmlHierarchyConfigurator: ConvertStringTo(Type type, string value) --- Path Number: 788 ----- Path Length: 1 ----- CallCoupling XmlHierarchyConfigurator: CreateObjectFromXml(XmlElement element, Type defaultTargetType, Type typeConstraint) --- Path Number: 789 ----- Path Length: 1 ----- CallCoupling XmlHierarchyConfigurator: CreateCaseInsensitiveWrapper(IDictionary dict) --- Path Number: 790 ----- Path Length: 1 ----- ParameterCoupling LoggerRepositorySkeleton: LoggerRepositorySkeleton(PropertiesDictionary properties) --- Path Number: 791 ----- Path Length: 1 ----- CallCoupling LoggerRepositorySkeleton: Shutdown() --- Path Number: 792 ----- Path Length: 1 ----- CallCoupling LoggerRepositorySkeleton: ResetConfiguration() --- Path Number: 793 ----- Path Length: 1 ----- ParameterCoupling LoggerRepositorySkeleton: Log(LoggingEvent logEvent) --- Path Number: 794 ----- Path Length: 1 ----- CallCoupling

Page 307: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

306

LoggerRepositorySkeleton: AddBuiltinLevels() --- Path Number: 795 ----- Path Length: 1 ----- CallCoupling LoggerRepositorySkeleton: AddRenderer(Type typeToRender, IObjectRenderer rendererInstance) --- Path Number: 796 ----- Path Length: 1 ----- CallCoupling LoggerRepositorySkeleton: Flush(int millisecondsTimeout) --- Path Number: 797 ----- Path Length: 2 ----- ParameterCoupling AppenderAttachedImpl: AppendLoopOnAppenders(LoggingEvent loggingEvent) AppenderAttachedImpl: AddAppender(IAppender newAppender) --- Path Number: 798 ----- Path Length: 2 ----- ParameterCoupling AppenderAttachedImpl: AppendLoopOnAppenders(LoggingEvent loggingEvent) AppenderAttachedImpl: RemoveAllAppenders() --- Path Number: 799 ----- Path Length: 2 ----- ParameterCoupling AppenderAttachedImpl: AppendLoopOnAppenders(LoggingEvent loggingEvent) AppenderAttachedImpl: RemoveAppender(IAppender appender) --- Path Number: 800 ----- Path Length: 2 ----- CallCoupling AppenderAttachedImpl: AppendLoopOnAppenders(LoggingEvent[] loggingEvents) AppenderAttachedImpl: AddAppender(IAppender newAppender) --- Path Number: 801 ----- Path Length: 2 ----- CallCoupling AppenderAttachedImpl: AppendLoopOnAppenders(LoggingEvent[] loggingEvents) AppenderAttachedImpl: RemoveAllAppenders() --- Path Number: 802 ----- Path Length: 2 ----- CallCoupling AppenderAttachedImpl: AppendLoopOnAppenders(LoggingEvent[] loggingEvents) AppenderAttachedImpl: RemoveAppender(IAppender appender) --- Path Number: 803 ----- Path Length: 1 ----- CallCoupling AppenderAttachedImpl: CallAppend(IAppender appender, LoggingEvent[] loggingEvents) --- Path Number: 804 ----- Path Length: 1 ----- CallCoupling AppenderAttachedImpl: AddAppender(IAppender newAppender) --- Path Number: 805 ----- Path Length: 1 ----- CallCoupling

Page 308: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

307

AppenderAttachedImpl: RemoveAllAppenders() --- Path Number: 806 ----- Path Length: 1 ----- CallCoupling AppenderAttachedImpl: RemoveAppender(IAppender appender) --- Path Number: 807 ----- Path Length: 1 ----- ParameterCoupling CompositeProperties: Add(ReadOnlyPropertiesDictionary properties) --- Path Number: 808 ----- Path Length: 1 ----- ParameterCoupling ConverterInfo: AddProperty(PropertyEntry entry) --- Path Number: 809 ----- Path Length: 1 ----- CallCoupling CountingQuietTextWriter: Write(char value) --- Path Number: 810 ----- Path Length: 1 ----- CallCoupling CountingQuietTextWriter: Write(char[] buffer, int index, int count) --- Path Number: 811 ----- Path Length: 1 ----- CallCoupling CyclicBuffer: CyclicBuffer(int maxSize) --- Path Number: 812 ----- Path Length: 1 ----- ParameterCoupling CyclicBuffer: Append(LoggingEvent loggingEvent) --- Path Number: 813 ----- Path Length: 1 ----- CallCoupling GlobalContextProperties: Remove(string key) --- Path Number: 814 ----- Path Length: 1 ----- CallCoupling ILogExtensions: DebugExt(this ILog logger, Func<object> callback) --- Path Number: 815 ----- Path Length: 1 ----- CallCoupling ILogExtensions: DebugExt(this ILog logger, Func<object> callback, Exception exception) --- Path Number: 816 ----- Path Length: 1 ----- CallCoupling ILogExtensions: DebugExt(this ILog logger, object message) --- Path Number: 817 ----- Path Length: 1 ----- CallCoupling ILogExtensions: DebugExt(this ILog logger, object message, Exception exception)

Page 309: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

308

--- Path Number: 818 ----- Path Length: 1 ----- CallCoupling ILogExtensions: DebugFormatExt(this ILog logger, string format, object arg0) --- Path Number: 819 ----- Path Length: 1 ----- CallCoupling ILogExtensions: DebugFormatExt(this ILog logger, string format, params object[] args) --- Path Number: 820 ----- Path Length: 1 ----- CallCoupling ILogExtensions: DebugFormatExt(this ILog logger, IFormatProvider provider, string format, params object[] args) --- Path Number: 821 ----- Path Length: 1 ----- CallCoupling ILogExtensions: DebugFormatExt(this ILog logger, string format, object arg0, object arg1) --- Path Number: 822 ----- Path Length: 1 ----- CallCoupling ILogExtensions: DebugFormatExt(this ILog logger, string format, object arg0, object arg1, object arg2) --- Path Number: 823 ----- Path Length: 1 ----- CallCoupling ILogExtensions: InfoExt(this ILog logger, Func<object> callback) --- Path Number: 824 ----- Path Length: 1 ----- CallCoupling ILogExtensions: InfoExt(this ILog logger, Func<object> callback, Exception exception) --- Path Number: 825 ----- Path Length: 1 ----- CallCoupling ILogExtensions: InfoExt(this ILog logger, object message) --- Path Number: 826 ----- Path Length: 1 ----- CallCoupling ILogExtensions: InfoExt(this ILog logger, object message, Exception exception) --- Path Number: 827 ----- Path Length: 1 ----- CallCoupling ILogExtensions: InfoFormatExt(this ILog logger, string format, object arg0) --- Path Number: 828 ----- Path Length: 1 ----- CallCoupling ILogExtensions: InfoFormatExt(this ILog logger, string format, params object[] args) ---

Page 310: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

309

Path Number: 829 ----- Path Length: 1 ----- CallCoupling ILogExtensions: InfoFormatExt(this ILog logger, IFormatProvider provider, string format, params object[] args) --- Path Number: 830 ----- Path Length: 1 ----- CallCoupling ILogExtensions: InfoFormatExt(this ILog logger, string format, object arg0, object arg1) --- Path Number: 831 ----- Path Length: 1 ----- CallCoupling ILogExtensions: InfoFormatExt(this ILog logger, string format, object arg0, object arg1, object arg2) --- Path Number: 832 ----- Path Length: 1 ----- CallCoupling ILogExtensions: WarnExt(this ILog logger, Func<object> callback) --- Path Number: 833 ----- Path Length: 1 ----- CallCoupling ILogExtensions: WarnExt(this ILog logger, Func<object> callback, Exception exception) --- Path Number: 834 ----- Path Length: 1 ----- CallCoupling ILogExtensions: WarnExt(this ILog logger, object message) --- Path Number: 835 ----- Path Length: 1 ----- CallCoupling ILogExtensions: WarnExt(this ILog logger, object message, Exception exception) --- Path Number: 836 ----- Path Length: 1 ----- CallCoupling ILogExtensions: WarnFormatExt(this ILog logger, string format, object arg0) --- Path Number: 837 ----- Path Length: 1 ----- CallCoupling ILogExtensions: WarnFormatExt(this ILog logger, string format, params object[] args) --- Path Number: 838 ----- Path Length: 1 ----- CallCoupling ILogExtensions: WarnFormatExt(this ILog logger, IFormatProvider provider, string format, params object[] args) --- Path Number: 839 ----- Path Length: 1 ----- CallCoupling ILogExtensions: WarnFormatExt(this ILog logger, string format, object arg0, object arg1) ---

Page 311: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

310

Path Number: 840 ----- Path Length: 1 ----- CallCoupling ILogExtensions: WarnFormatExt(this ILog logger, string format, object arg0, object arg1, object arg2) --- Path Number: 841 ----- Path Length: 1 ----- CallCoupling ILogExtensions: ErrorExt(this ILog logger, Func<object> callback) --- Path Number: 842 ----- Path Length: 1 ----- CallCoupling ILogExtensions: ErrorExt(this ILog logger, Func<object> callback, Exception exception) --- Path Number: 843 ----- Path Length: 1 ----- CallCoupling ILogExtensions: ErrorExt(this ILog logger, object message) --- Path Number: 844 ----- Path Length: 1 ----- CallCoupling ILogExtensions: ErrorExt(this ILog logger, object message, Exception exception) --- Path Number: 845 ----- Path Length: 1 ----- CallCoupling ILogExtensions: ErrorFormatExt(this ILog logger, string format, object arg0) --- Path Number: 846 ----- Path Length: 1 ----- CallCoupling ILogExtensions: ErrorFormatExt(this ILog logger, string format, params object[] args) --- Path Number: 847 ----- Path Length: 1 ----- CallCoupling ILogExtensions: ErrorFormatExt(this ILog logger, IFormatProvider provider, string format, params object[] args) --- Path Number: 848 ----- Path Length: 1 ----- CallCoupling ILogExtensions: ErrorFormatExt(this ILog logger, string format, object arg0, object arg1) --- Path Number: 849 ----- Path Length: 1 ----- CallCoupling ILogExtensions: ErrorFormatExt(this ILog logger, string format, object arg0, object arg1, object arg2) --- Path Number: 850 ----- Path Length: 1 ----- CallCoupling ILogExtensions: FatalExt(this ILog logger, Func<object> callback) ---

Page 312: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

311

Path Number: 851 ----- Path Length: 1 ----- CallCoupling ILogExtensions: FatalExt(this ILog logger, Func<object> callback, Exception exception) --- Path Number: 852 ----- Path Length: 1 ----- CallCoupling ILogExtensions: FatalExt(this ILog logger, object message) --- Path Number: 853 ----- Path Length: 1 ----- CallCoupling ILogExtensions: FatalExt(this ILog logger, object message, Exception exception) --- Path Number: 854 ----- Path Length: 1 ----- CallCoupling ILogExtensions: FatalFormatExt(this ILog logger, string format, object arg0) --- Path Number: 855 ----- Path Length: 1 ----- CallCoupling ILogExtensions: FatalFormatExt(this ILog logger, string format, params object[] args) --- Path Number: 856 ----- Path Length: 1 ----- CallCoupling ILogExtensions: FatalFormatExt(this ILog logger, IFormatProvider provider, string format, params object[] args) --- Path Number: 857 ----- Path Length: 1 ----- CallCoupling ILogExtensions: FatalFormatExt(this ILog logger, string format, object arg0, object arg1) --- Path Number: 858 ----- Path Length: 1 ----- CallCoupling ILogExtensions: FatalFormatExt(this ILog logger, string format, object arg0, object arg1, object arg2) --- Path Number: 859 ----- Path Length: 1 ----- ParameterCoupling LevelMapping: Add(LevelMappingEntry entry) --- Path Number: 860 ----- Path Length: 1 ----- ParameterCoupling LevelMapping: Lookup(Level level) --- Path Number: 861 ----- Path Length: 1 ----- CallCoupling LevelMapping: ActivateOptions() --- Path Number: 862 ----- Path Length: 1 ----- CallCoupling LogicalThreadContextProperties: Remove(string key)

Page 313: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

312

--- Path Number: 863 ----- Path Length: 1 ----- CallCoupling LogicalThreadContextProperties: GetProperties(bool create) --- Path Number: 864 ----- Path Length: 1 ----- ParameterCoupling LogicalThreadContextProperties: SetLogicalProperties(PropertiesDictionary properties) --- Path Number: 865 ----- Path Length: 1 ----- CallCoupling LogLog: LogLog() --- Path Number: 866 ----- Path Length: 1 ----- ParameterCoupling LogReceivedAdapter: LogLog_LogReceived(object source, LogReceivedEventArgs e) --- Path Number: 867 ----- Path Length: 1 ----- ParameterCoupling LogReceivedEventArgs: LogReceivedEventArgs(LogLog loglog) --- Path Number: 868 ----- Path Length: 1 ----- CallCoupling OnlyOnceErrorHandler: FirstError(string message, Exception e, ErrorCode errorCode) --- Path Number: 869 ----- Path Length: 1 ----- CallCoupling OptionConverter: ToBoolean(string argValue, bool defaultValue) --- Path Number: 870 ----- Path Length: 1 ----- CallCoupling OptionConverter: ToFileSize(string argValue, long defaultValue) --- Path Number: 871 ----- Path Length: 1 ----- CallCoupling OptionConverter: ConvertStringTo(Type target, string txt) --- Path Number: 872 ----- Path Length: 1 ----- CallCoupling OptionConverter: CanConvertTypeTo(Type sourceType, Type targetType) --- Path Number: 873 ----- Path Length: 1 ----- CallCoupling OptionConverter: ConvertTypeTo(object sourceInstance, Type targetType) --- Path Number: 874 ----- Path Length: 1 ----- CallCoupling OptionConverter: InstantiateByClassName(string className, Type superClass, object defaultValue) ---

Page 314: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

313

Path Number: 875 ----- Path Length: 1 ----- ParameterCoupling PatternConverter: SetNext(PatternConverter patternConverter) --- Path Number: 876 ----- Path Length: 1 ----- CallCoupling PatternConverter: Format(TextWriter writer, object state) --- Path Number: 877 ----- Path Length: 1 ----- CallCoupling PatternConverter: WriteObject(TextWriter writer, ILoggerRepository repository, object value) --- Path Number: 878 ----- Path Length: 2 ----- ParameterCoupling PatternParser: ProcessConverter(string converterName, string option, FormattingInfo formattingInfo) PatternParser: AddConverter(PatternConverter pc) --- Path Number: 879 ----- Path Length: 1 ----- ParameterCoupling PatternParser: AddConverter(PatternConverter pc) --- Path Number: 880 ----- Path Length: 2 ----- CallCoupling PatternString: ActivateOptions() PatternString: PatternString(string pattern) --- Path Number: 881 ----- Path Length: 1 ----- CallCoupling PatternString: Format(TextWriter writer) --- Path Number: 882 ----- Path Length: 1 ----- ParameterCoupling PatternString: AddConverter(ConverterInfo converterInfo) --- Path Number: 883 ----- Path Length: 1 ----- CallCoupling AppSettingPatternConverter: Convert(TextWriter writer, object state) --- Path Number: 884 ----- Path Length: 1 ----- CallCoupling DatePatternConverter: ActivateOptions() --- Path Number: 885 ----- Path Length: 1 ----- CallCoupling DatePatternConverter: Convert(TextWriter writer, object state) --- Path Number: 886 ----- Path Length: 1 ----- CallCoupling EnvironmentFolderPathPatternConverter: Convert(TextWriter writer, object state)

Page 315: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

314

--- Path Number: 887 ----- Path Length: 1 ----- CallCoupling EnvironmentPatternConverter: Convert(TextWriter writer, object state) --- Path Number: 888 ----- Path Length: 1 ----- CallCoupling IdentityPatternConverter: Convert(TextWriter writer, object state) --- Path Number: 889 ----- Path Length: 1 ----- ParameterCoupling LiteralPatternConverter: SetNext(PatternConverter pc) --- Path Number: 890 ----- Path Length: 1 ----- CallCoupling NewLinePatternConverter: ActivateOptions() --- Path Number: 891 ----- Path Length: 1 ----- CallCoupling ProcessIdPatternConverter: Convert(TextWriter writer, object state) --- Path Number: 892 ----- Path Length: 1 ----- CallCoupling PropertyPatternConverter: Convert(TextWriter writer, object state) --- Path Number: 893 ----- Path Length: 1 ----- CallCoupling RandomStringPatternConverter: ActivateOptions() --- Path Number: 894 ----- Path Length: 1 ----- CallCoupling RandomStringPatternConverter: Convert(TextWriter writer, object state) --- Path Number: 895 ----- Path Length: 1 ----- CallCoupling UserNamePatternConverter: Convert(TextWriter writer, object state) --- Path Number: 896 ----- Path Length: 1 ----- CallCoupling UtcDatePatternConverter: Convert(TextWriter writer, object state) --- Path Number: 897 ----- Path Length: 1 ----- ParameterCoupling PropertiesDictionary: PropertiesDictionary(ReadOnlyPropertiesDictionary propertiesDictionary) --- Path Number: 898 ----- Path Length: 1 ----- CallCoupling QuietTextWriter: Write(char value) ---

Page 316: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

315

Path Number: 899 ----- Path Length: 1 ----- CallCoupling QuietTextWriter: Write(char[] buffer, int index, int count) --- Path Number: 900 ----- Path Length: 1 ----- CallCoupling QuietTextWriter: Close() --- Path Number: 901 ----- Path Length: 1 ----- ParameterCoupling ReadOnlyPropertiesDictionary: ReadOnlyPropertiesDictionary(ReadOnlyPropertiesDictionary propertiesDictionary) --- Path Number: 902 ----- Path Length: 1 ----- CallCoupling SystemInfo: SystemInfo() --- Path Number: 903 ----- Path Length: 1 ----- CallCoupling SystemInfo: GetTypeFromString(Assembly relativeAssembly, string typeName, bool throwOnError, bool ignoreCase) --- Path Number: 904 ----- Path Length: 1 ----- CallCoupling SystemInfo: GetAppSetting(string key) --- Path Number: 905 ----- Path Length: 1 ----- CallCoupling SystemStringFormat: StringFormat(IFormatProvider provider, string format, params object[] args) --- Path Number: 906 ----- Path Length: 1 ----- CallCoupling SystemStringFormat: StringFormatError(Exception formatException, string format, object[] args) --- Path Number: 907 ----- Path Length: 1 ----- CallCoupling ThreadContextProperties: Remove(string key) --- Path Number: 908 ----- Path Length: 2 ----- CallCoupling ThreadContextProperties: GetKeys() ThreadContextProperties: GetProperties(bool create) --- Path Number: 909 ----- Path Length: 1 ----- CallCoupling ThreadContextProperties: Clear() ---

Page 317: DiVA portalmdh.diva-portal.org/smash/get/diva2:1414730/FULLTEXT01.pdf · 2020. 3. 15. · MÄLARDALEN UNIVERSITY. SCHOOL OF INNOVATION , DESIGN AND ENGINEERING. V. ÄSTERÅS, S. WEDEN

316

Path Number: 910 ----- Path Length: 1 ----- ParameterCoupling StackFrame: StackFrame(string message, StackFrame parent) --- Path Number: 911 ----- Path Length: 1 ----- ParameterCoupling StackFrame: StackFrame(string message, StackFrame parent) --- Path Number: 912 ----- Path Length: 1 ----- ParameterCoupling LogicalThreadContextStacks: LogicalThreadContextStacks(LogicalThreadContextProperties properties) --- Path Number: 913 ----- Path Length: 1 ----- ParameterCoupling LogicalThreadContextStacks: registerNew(string stackName, LogicalThreadContextStack stack) --- Path Number: 914 ----- Path Length: 1 ----- ParameterCoupling ThreadContextStacks: ThreadContextStacks(ContextPropertiesBase properties) --- Path Number: 915 ----- Path Length: 1 ----- CallCoupling ConverterRegistry: CreateConverterInstance(Type converterType) --- Path Number: 916 ----- Path Length: 1 ----- CallCoupling PatternStringConverter: ConvertTo(object source, Type targetType) --- Path Number: 917 ----- Path Length: 1 ----- CallCoupling TypeConverter: ConvertFrom(object source) --- Path Number: 918 ----- Path Length: 1 ----- CallCoupling TypeConverterAttribute: TypeConverterAttribute(Type converterType) --- Path Number: 919 ----- Path Length: 1 ----- CallCoupling WindowsSecurityContext: LogonUser(string userName, string domainName, string password) --- ******* Finished generating test paths for log4net project.