31
A Framework Profile of .NET Ralf L¨ ammel, Rufus Linke, Ekaterina Pek, and Andrei Varanovich Software Languages Team & ADAPT Lab Universit¨ at Koblenz-Landau, Germany Abstract—We develop a basic form of framework com- prehension which is based on simple, reuse-related metrics for the as-implemented design and usage of frameworks. To this end, we provide a framework profile which incorporates potential reuse characteristics (e.g., specializability of types in a framework) as well as actual reuse characteristics (e.g., evidence of specialization of framework types in projects). We apply framework comprehension in an empirical study of the Microsoft .NET Framework. The approach is helpful in several contexts of software reverse and re-engineering. Keywords-framework, .NET, framework design, framework usage, framework profile, reuse, type specialization, late bind- ing, polymorphism, inheritance, program comprehension, soft- ware metrics, dynamic program analysis. I. I NTRODUCTION Suppose you need to (better) understand the architecture of a platform such as the Java Standard Edition 1 , the Mi- crosoft .NET Framework 2 , or another composite framework. There is no silver bullet for such framework comprehension, but a range of models may be useful in this context. The present paper describes the notion of framework profile which incorporates characteristics of potential and actual reuse of frameworks. The approach is applied to the Mi- crosoft .NET Framework and a corpus of .NET projects in an empirical study. Framework comprehension supports reverse and re- engineering activities. In quality assessment of designs [1], framework profiles help understanding frameworks in a manner complementary to architectural smells, patterns, or anti-patterns. Also, one can compare given projects with the framework profile. More specifically, in framework re- modularization, framework profiles help summarizing the status of modularization and motivating refactorings [2]. In API migration [3], framework profiles help assessing API replacement options with regard to, for example, different extensibility characteristics. Finally, framework profiles help in teaching OO architecture, design, and implementation [4]. A framework profile is illustrated in Figure 1. Reuse- related properties are depicted for a number of .NET name- spaces and open-source projects; the names are elided here. The infographics is derived from the results of static and dynamic program analysis. The leftmost column displays a metric for the percentage of specializable types (i.e., 1 http://www.oracle.com/us/javase 2 http://www.microsoft.com/net/ N N N * * N N * * * * N N * * N N * N N N * * * * * * N * * * * * * * * * * N N * N * Rows: top-10 .NET namespaces, in terms of number of types. Middle block of columns: actual reuse by project of the corpus. Leftmost column: potential reuse in terms of specializability. Rightmost column: summary of actual reuse. Figure 1. Infographics for an excerpt of a framework profile for .NET non-sealed, non-static classes and all interfaces) by using bullets of increasing size. (This approach will be defined more precisely later on.) The bulk of the columns classify actual reuse of namespaces by projects as follows: ‘’ – the namespace was not available in the framework version used by the project; ‘*’ – the namespace is referenced; ‘N’ – the namespace is even specialized by the project (i.e., there is a project type that extends or implements a type of the namespace); ‘’ – late binding involves the namespace (i.e., there is a project type that acts as runtime receiver type for a call with a static receiver type from the namespace). The rightmost column summarizes actual reuse by means of the dominating classifier, if any, for each row. Overall, the figure contrasts potential with actual reuse at a high-level of abstraction. Summary of contributions 3 We use metrics to analyze potential and actual framework reuse for some limited forms of reuse. To this end, we leverage static and dynamic program analysis. The metrics also help classifying composite frameworks with regard to reuse so that namespaces can be associated with categories that describe reuse characteristics concisely. We describe an empirical study for the Microsoft .NET framework and a corpus of .NET projects such that reuse characteristics add up to a framework profile for .NET. Road-map § II describes our methodology. § III explores reuse-related met- rics for frameworks. § IV proposes a classification of frameworks. § V studies actual framework reuse. § VI identifies threats to validity. § VII discusses related work. § VIII concludes the paper. 3 The paper’s web site, http://softlang.uni-koblenz.de/dotnet, provides support material for the empirical study.

A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

A Framework Profile of .NET

Ralf Lammel, Rufus Linke, Ekaterina Pek, and Andrei VaranovichSoftware Languages Team & ADAPT Lab

Universitat Koblenz-Landau, Germany

Abstract—We develop a basic form of framework com-prehension which is based on simple, reuse-related metricsfor the as-implemented design and usage of frameworks. Tothis end, we provide a framework profile which incorporatespotential reuse characteristics (e.g., specializability of typesin a framework) as well as actual reuse characteristics (e.g.,evidence of specialization of framework types in projects). Weapply framework comprehension in an empirical study of theMicrosoft .NET Framework. The approach is helpful in severalcontexts of software reverse and re-engineering.

Keywords-framework, .NET, framework design, frameworkusage, framework profile, reuse, type specialization, late bind-ing, polymorphism, inheritance, program comprehension, soft-ware metrics, dynamic program analysis.

I. INTRODUCTION

Suppose you need to (better) understand the architectureof a platform such as the Java Standard Edition1, the Mi-crosoft .NET Framework2, or another composite framework.There is no silver bullet for such framework comprehension,but a range of models may be useful in this context. Thepresent paper describes the notion of framework profilewhich incorporates characteristics of potential and actualreuse of frameworks. The approach is applied to the Mi-crosoft .NET Framework and a corpus of .NET projects inan empirical study.

Framework comprehension supports reverse and re-engineering activities. In quality assessment of designs [1],framework profiles help understanding frameworks in amanner complementary to architectural smells, patterns, oranti-patterns. Also, one can compare given projects withthe framework profile. More specifically, in framework re-modularization, framework profiles help summarizing thestatus of modularization and motivating refactorings [2]. InAPI migration [3], framework profiles help assessing APIreplacement options with regard to, for example, differentextensibility characteristics. Finally, framework profiles helpin teaching OO architecture, design, and implementation [4].

A framework profile is illustrated in Figure 1. Reuse-related properties are depicted for a number of .NET name-spaces and open-source projects; the names are elided here.The infographics is derived from the results of static anddynamic program analysis. The leftmost column displaysa metric for the percentage of specializable types (i.e.,

1http://www.oracle.com/us/javase2http://www.microsoft.com/net/

• N N N ∗ ∗ �

• – – � – – – –• – – N – – – –• � N

• ∗ ∗ ∗ ∗ N N ∗• ∗ � N � � N ∗ � N N N � ∗ �

• ∗ � ∗ ∗ ∗ ∗ N ∗ ∗ � ∗ ∗• ∗ ∗ ∗ ∗ ∗ ∗• � � � � � N � � � � � � � � � N � �

• ∗ N ∗

Rows: top-10 .NET namespaces, in terms of number of types.Middle block of columns: actual reuse by project of the corpus.Leftmost column: potential reuse in terms of specializability.Rightmost column: summary of actual reuse.

Figure 1. Infographics for an excerpt of a framework profile for .NET

non-sealed, non-static classes and all interfaces) by usingbullets of increasing size. (This approach will be definedmore precisely later on.) The bulk of the columns classifyactual reuse of namespaces by projects as follows: ‘–’ – thenamespace was not available in the framework version usedby the project; ‘∗’ – the namespace is referenced; ‘N’ – thenamespace is even specialized by the project (i.e., there isa project type that extends or implements a type of thenamespace); ‘�’ – late binding involves the namespace (i.e.,there is a project type that acts as runtime receiver type fora call with a static receiver type from the namespace). Therightmost column summarizes actual reuse by means of thedominating classifier, if any, for each row.

Overall, the figure contrasts potential with actual reuse ata high-level of abstraction.

Summary of contributions3

• We use metrics to analyze potential and actual frameworkreuse for some limited forms of reuse. To this end, weleverage static and dynamic program analysis.• The metrics also help classifying composite frameworks

with regard to reuse so that namespaces can be associatedwith categories that describe reuse characteristics concisely.• We describe an empirical study for the Microsoft .NET

framework and a corpus of .NET projects such that reusecharacteristics add up to a framework profile for .NET.

Road-map§ II describes our methodology. § III explores reuse-related met-

rics for frameworks. § IV proposes a classification of frameworks.§V studies actual framework reuse. §VI identifies threats tovalidity. §VII discusses related work. §VIII concludes the paper.

3The paper’s web site, http://softlang.uni-koblenz.de/dotnet, providessupport material for the empirical study.

Page 2: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

.NET Project Repository LOC Description

3.5 Castle ActiveRecord GitHub 30,303 Object-relational mapper4.0 Castle Core Library GitHub 36,659 Core library for the Castle framework3.5 Castle MonoRail GitHub 58,121 MVC Web framework4.0 Castle Windsor GitHub 50,032 Inversion of control container4.0 Json.NET Codeplex 43,127 JSON framework2.0 log4net Sourceforge 27,799 Logging framework2.0 Lucene.Net Apache.org 158,519 Search engine4.0 Managed Extensibility Framework Codeplex 149,303 Framework for extensible applications and components4.0 Moq GoogleCode 17,430 Mocking library2.0 NAnt Sourceforge 56,529 Build tool3.5 NHibernate Sourceforge 330,374 Object-relational mapper3.5 NUnit Launchpad 85,439 Unit testing framework4.0 Patterns & Practices - Prism Codeplex 146,778 Library to build flexible WPF and Silverlight applications3.5 RhinoMocks GitHub 23,459 Mocking framework2.0 SharpZipLib Sourceforge 25,691 Compression library2.0 Spring.NET GitHub 183,772 Framework for enterprise applications2.0 xUnit.net Codeplex 23,366 Unit testing framework

Table I.NET projects in study’s corpus (versions as of 19 June 2011)

II. METHODOLOGY

A. Research hypothesis

Platforms such as JSE or .NET leverage programminglanguage concepts in a systematic manner to make thoseframeworks reusable (say, extensible, instantiatable, or con-figurable). It is challenging to understand the reuse charac-teristics of frameworks and actual reuse in projects at a highlevel of abstraction. Software metrics on top of simple staticand dynamic program analysis are useful to infer essentialhigh-level reuse characteristics.

B. Research questions

1) What are the interesting and helpful high-level char-acteristics of frameworks with regard to their potentialand actual reuse?

2) To what extend can those characteristics be computedwith simple metrics subject to simple static and dy-namic program analysis?

C. Research method

We applied an explorative approach such that a larger setof metrics of mainly structural properties was incrementallyscreened until a smaller set of key metrics and derivedclassifiers emerged. We use infographics (such as Figure 1)to visualize metrics, classifiers, and other characteristicsof frameworks and projects that use them. The resultingclaims are subject to validation by domain experts for theframework under study.

D. Study subject

The subject of study consists of the Microsoft .NETFramework and a corpus of open-source .NET projectstargeting different versions of .NET (2.0, 3.5, 4.0).

.NET (4.0) has 401 namespaces in total, but we groupthese namespaces reasonably, based on the tree-like or-ganization of their compound names. For instance, allnamespaces in the System.Web branch provide web-related

functionality and can be viewed as a single namespace. Inthis manner, we obtained the manageable number of 69namespaces; see Table II.4 In the rest of the paper, we signifygrouping by “*” as in System.Web.*. Grouping is often usedin discussions of .NET—also by Microsoft.5

Table I collects metadata about the corpus of the study.The following text summarizes the requirements for the cor-pus and the process of its accumulation; more informationis available from the paper’s website.

One requirement is that the corpus is made up from well-known, widely-used and mature projects. We assume thatsuch projects make good use of .NET.

Another requirement is that dynamic analysis must befeasible for the projects of the corpus. This requirementimplies practically that we need projects with good availabletestsuites. The need for testsuites, in turn, implies practicallythat the corpus is made up from frameworks or libraries asopposed to, e.g., interactive tools. Admittedly, advanced test-data generation approaches could be used instead [5].

Yet another requirement is that the corpus is made up fromopen-source projects so that our results are more easily re-producible. Also, the instrumentation for static and dynamicanalysis would be problematic for proprietary projects whichusually commit to signed assemblies.

We searched CodePlex, SourceForge, GitHub, and GoogleCode applying the repository-provided ranking for popu-larity (preferably based on downloads). For the topmostapprox. 30 projects of each repository we checked all therequirements, and in this manner we identified a diverse setof projects as shown in Table I. These projects all use C#as implementation language. (In principle, our approach isprepared to deal with other .NET languages as well—sincethe analysis uses bytecode engineering.)

4We also excluded some namespaces that are fully marked as obsoleteand an auxiliary namespace, XamlGeneratedNamespace, used only by theworkflow designer tool.

5http://msdn.microsoft.com/en-us/library/gg145045.aspx

Page 3: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

III. REUSE-RELATED METRICS FOR FRAMEWORKS

We consider the as-implemented design of a framework—without considering any client code (i.e., ‘projects’). Wedefine reuse-related metrics for frameworks and screen themfor .NET. We explain the metrics specifically in the formas they are needed for a composite framework (such as.NET) which consists of many component frameworks—towhich we refer here as namespaces for better distinction.We usually consider metrics per namespace. Some of themetrics are specific to .NET’s type system.

A. Definition of metrics

The ‘overall potential for reuse’ is described by thefollowing metrics:6 # Types—the number of (visible, sayreusable) types declared by a namespace; # Methods—thenumber of (visible, say reusable) methods declared by anamespace.

The types (say, type declarations) of a namespace breakdown into percentages as follows: % Interfaces, % Classes,% Value types, and % Delegate types. If a namespacehas relatively few classes, then this may hint at intended,potential reuse that is different from classic, class-orientedOO programming. In the sequel, we refer to classes andinterfaces as OO types. Further, % Generic types denotesthe percentage of all types that are generic. Relatively manygeneric types hint at a framework for generic programming.Further, the classes of a namespace break down into per-centages as follows; likewise for methods: % Static classes,% Abstract classes, and % Concrete classes.7 Clearly,abstract classes and methods hint at potential reuse of theframework by specialization. Static classes hint at non-OOlibraries and associated, different forms of reuse.

There are metrics for ‘specializability and sealedness’of namespaces: % Specializable classes—the percentage ofall classes that are either abstract or concrete but non-sealed, thereby excluding static and sealed classes; % Sealedclasses—the percentage of all concrete classes that aresealed (final). Sealing explicitly limits reuse by specializa-tion. The aforementioned metrics can also be taken to themethod level. Further, we can incorporate interfaces intoa metric for specializability: % Specializable types—thepercentage of all OO types (i.e., all classes and interfaces)that are either specializable classes or interfaces—the latterbeing all specializable by definition. There are OO types that

6In the case of .NET, non-private, non-internal types and methodsare considered. Properties (in the .NET sense) are considered here asmethods, which they are indeed at the byte-code level. All (visible) methoddeclarations are counted separately. For instance, the initial declaration ofa method as well as all overrides are counted separately. Overloads arecounted separately, too.

7In .NET, value types include structs and enum types. Static classesare not considered concrete classes; neither are they considered abstractclasses—regardless of encoding in MS IL; they are counted separately here.A delegate type is essentially a method type; they are counted separatelyhere—regardless of the encoding in MS IL where delegate types derivefrom class System.Delegate.

must be specialized before they can be reused in client code;we refer to them as orphan types subject to the followingmetrics: % Orphan classes—the percentage of all abstractclasses that are never concretely implemented within theframework; % Orphan interfaces—the percentage of allinterfaces that are never implemented within the framework;% Orphan types—the percentage of all abstract classes andinterfaces that are either orphan classes or orphan interfaces.

‘Inter-namespace reuse’ is described by these metrics:# Referenced namespaces—the number of namespaces thatare referenced by a given namespace; # Referring name-spaces—the number of namespaces that are referring to agiven namespace. Obviously, one can also define metrics for‘inter-namespace specialization’; this is omitted here.

The earlier breakdown of type declarations can bematched by a similar breakdown of type references. Inparticular, type references due to method arguments give riseto % Interface arguments, % Class arguments, % Valuetype arguments, and % Delegate arguments. These met-rics hint at certain forms of reuse. In particular, interfacearguments give rise to interface polymorphism whereas del-egate arguments give rise to closure-based parametrization.

Finally, there are metrics that relate to the degree of‘specialization within a namespace’: MAX size class treeand MAX size interface tree—the size of the largest classor interface inheritance tree in terms of the node count onlyconsidering nodes from the given namespace. (We view aclass as a root of an inheritance tree in the given namespace,if it derives from System.Object or a class in a differentnamespace; likewise for interfaces.) These are reuse-relatedmetrics because, for example, they hint at polymorphism thatcan be leveraged for framework reuse in client code.

B. Measurements for .NET

Table II lists the various metrics for all the .NET name-spaces while sorting namespaces by # Types. We use aninfographics such that most data is not displayed as numbers,but distribution-based visualization is used instead: ‘blank’for zero values and bullets of increasing size, i.e., ‘•’, ‘•’, ‘•’,‘•’, for values in the percentage intervals (0,25), [25,50),[50,75), [75,100) of the distribution. For each column, thecell(s) corresponding to the maximum value for the columndisplay(s) the value instead of ‘•’. Medians as well as 25thand 75th percentiles for all columns are displayed at thebottom of the table.

We total some measurements over all .NET namespaces:

# Types = 12611# OO types = 10103# Classes = 9215# Interfaces = 888# Specializable classes = 5750 (62.4 % of all classes)# Specializable types = 6638 (65.7 % of all OO types)

In accordance with our methodology we grew this set ofmetrics, and we used the infographics of Table II and

Page 4: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Namespace #Ty

pes

#M

etho

ds

MA

Xsi

zecl

ass

tree

MA

Xsi

zein

terf

ace

tree

#R

efer

ence

dna

mes

pace

s

#R

efer

ring

nam

espa

ces

%C

lass

es

%In

terf

aces

%Va

lue

type

s

%D

eleg

ate

type

s

%G

ener

icty

pes

%C

lass

argu

men

ts

%In

terf

ace

argu

men

ts

%Va

lue

type

argu

men

ts

%D

eleg

ate

argu

men

ts

%Se

aled

clas

ses

%Sp

ecia

lizab

lecl

asse

s

%Sp

ecia

lizab

lety

pes

%O

rpha

ncl

asse

s

%O

rpha

nin

terf

aces

%O

rpha

nty

pes

System.Web.* 2327 29315 • • 43 • • • • • • • • • • • • • • •

System.Windows.* • • • 82 • • • • • • • • • • • • • • • • •

System.ServiceModel.* • • • • 43 • • • • • • • • • • • • • • •System.Windows.Forms.* • • • • • • • • • • • • • • • • • • • •

System.Data.* • • • • • • • • • • • • • • • • • • • • •System.Activities.* • • • • • • • • • • • • • • • • • • • • •System.ComponentModel.* • • • • • • • • • • • • • • • • • • • •System.Workflow.* • • • • • • • • • • • • • • • • • • • •System.Xml.* • • • • • • • • • • • • • • • • • • • •System.Net.* • • • • • • • • • • • • • • • • • • • •System.DirectoryServices.* • • • • • • • • • • • • • • • •System • • • • • 69 • • • • • • • • • • • • • • •

System.Security.Cryptography.* • • • • • • • • • • • • • • •Microsoft.VisualBasic.* • • 38 • • • • • • • • • • • 48 • • • • • •System.Runtime.InteropServices.* • • • • • • • • • • • • • • • • •Microsoft.JScript.* • • • • • • • • • • • • • • • • • •System.Drawing.* • • • • • • • • • • • • • • • • • • • •

System.Runtime.Remoting.* • • • • • • • • • • • 23 • • • • • • • •System.Configuration.* • • • • • • • • • • • • • • • • • • • •System.Diagnostics.* • • • • • • • • • • • • • • • • • • •System.IO.* • • • • • • • • • • • • • • • • • • • •

System.Reflection.* • • • • • • • • • • • • • • • • •

System.EnterpriseServices.* • • • • • • • • • • • • • • • •System.CodeDom.* • • • • • • • • • • • • • • • • •

System.IdentityModel.* • • • • • • • • • • • • • • • • • • •Microsoft.Build.* • • • • • • • • • • • • • • • • • •System.Management.* • • • • • • • • • • • • • • • • • • •

System.Threading.* • • • • • • • • • • • • • • • • • • • •

System.Runtime.Serialization.* • • • • • • • • • • • • • • • • • • •System.Security.AccessControl • • • • • • • • • • • • • • •

System.Security.Permissions • • • • • • • • • • • • 86 • •

System.Runtime.CompilerServices • • • • • • • • • • • • • • • • • • • •

System.Linq.* • • • • • • • • • • • 23 • • • • • • • •System.AddIn.* • • • • • • • • • • • • • • • • •System.Xaml.* • • • • • • • • • • • • • • • • • • •System.Messaging.* • • • • • • • • • • • • • • • • •Microsoft.Win32.* • • • • • • • • • • • • • • • • •System.Security.Policy • • • • • • • • • • • • • • • • •

System.Globalization • • • • • • • • • • • •Microsoft.VisualC.* • • • • • • • 100 • • • • 100 100 • •System.Transactions.* • • • • • • • • • • • • • • • • • 100 •System.Security • • • • • • • • • • • • • • •

System.Collections.Generic • • • • • • • • • • • • • • • • • •System.Runtime.DurableInstancing • • • • • • • • • • • • • • • • •

System.Collections • • • • • • • • • • • • • •System.Text • • • • • • • • • • • • • •System.Deployment.* • • • • • • • • • • • • • • •System.Runtime.Caching.* • • • • • • • • • • • • • • • • • 100 •System.ServiceProcess.* • • • • • • • • • • • •System.Resources.* • • • • • • • • • • • • • • •System.Dynamic • • • • • • • • 91 • • • • • 72 • 70System.Security.Principal • • • • • • • • • • • • • •Microsoft.SqlServer.Server • • • • • • • • • • • • • 100 •System.Security.Authentication.* • • • • • • • • • • • • • • •System.Collections.Specialized • • • • • • • • • • • • • • 100 100System.Device.Location • • • • • • • • • • • • • •System.Text.RegularExpressions • • • • • • • • • • • • 100 100 • •Accessibility • • • • • • 60 • • • • 100 100 • •System.Collections.Concurrent • • • • • • • • • • • • 100 100 • •System.Runtime.Versioning • • • • • • • • • • •

Microsoft.CSharp.* • • • • • • • • • • • •System.Collections.ObjectModel • • • • 100 100 • • • • 100 100 • •System.Runtime.ConstrainedExecution • • • • • • • • •

System.Runtime • • • • • • 100 • • •

System.Timers • • • • • 25 • • • • 100 100System.Media • • • • 100 • • • • • •

System.Runtime.Hosting • • • • 100 • • • • •

System.Runtime.ExceptionServices • • • 100 • • •

System.Numerics • • • • 100 • • •75% 190 1579 8 7 22 26 80 16 23 5 1 66 8 46 5 51 89 90 4 40 10Median 60 543 3 2 17 9 72 6 13 0 0 54 4 34 2 33 67 69 1 0 425% 18 175 0 0 11 3 60 0 6 0 0 37 1 19 0 10 46 50 0 0 0

Table IIInfographics for reuse-related metrics for .NET (See the online version for additional data.)

Page 5: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Namespace categories with regard to ‘inter-namespace reuse’:• application if # Referring namespaces = 0.• core if # Referring namespaces is ‘exceptional’.Namespace categories with regard to ‘specializability’:• open if % Specializable types is ‘exceptional’.• closed if % Sealed classes is ‘exceptional’.• incomplete if % Orphan types is ‘exceptional’.Namespace categories with regard to ‘class-inheritance trees’:• branched if MAX size class tree is ‘exceptional’.• flat if MAX size class tree = 0.Namespace categories with regard to ‘intensiveness’:• interface-intensive if % Interface arguments is ‘exceptional’.• delegate-intensive if % Delegate arguments is ‘exceptional’.A sub-category for delegate-intensive namespaces:• event-based if % Delegate types is ‘exceptional’.

Occurrences of ‘exceptional’ are essentially configurable. In thispaper, we assume though that “x is ‘exceptional’ for a namespace”proxies for the statement that the metric x for the given namespaceis in the [75, 100) percentage interval with regard to the distributionfor metric x over all namespaces.

Figure 2. Definition of (non-mutually exclusive) categories

further views (available in the online version of the paper)to develop intuitions about reuse-related characteristics ofnamespaces. The following classification only uses someof the metrics directly, but the other metrics are useful forunderstanding and validation.

IV. CLASSIFICATION OF FRAMEWORKS

In the following, we use the reuse-related metrics to definecategories for reuse characteristics of frameworks—in fact,namespaces. See Figure 2 for the concise definition of thecategories. See Table III for the application of the classifica-tion to a few .NET namespaces that serve as representativesin this section. The section is finished with considerationsof validation.

A. Derivation of the categories

Let us start with ‘inter-namespace reuse’. An applicationnamespace is characterized by the lack of other namespacesreferring to it. That is, no reuse potential is realized for thegiven namespace within the composite framework. Insteadof namespaces with zero referring namespaces, we may alsoconsider namespaces with the most referring namespaces.These are called core namespaces for obvious reasons.

As the medians and other percentiles at the bottom ofTable II indicate, inter-namespace usage is very commonfor .NET. (The appendix of the online version even showssubstantial mutual dependencies.) There are these applica-tion namespaces. The System.AddIn.* namespace provides ageneric framework for framework plug-ins in the sense ofclient frameworks on top of .NET. The Microsoft.VisualC.*namespace supports compilation and code generation forC++. The System.Device.Location namespace allows appli-cation developers to access the computer’s location. TheSystem.Runtime.ExceptionServices namespace supports ad-vanced exception handling for applications.

Namespace App

licat

ion

Cor

e

Ope

n

Clo

sed

Inco

mpl

ete

Bra

nche

d

Flat

Inte

rfac

e-in

tens

ive

Del

egat

e-in

tens

ive

Eve

nt-b

ased

System.Web.* X X XSystem.Data.* X XSystem.Activities.* X X XSystem.ComponentModel.* X X X X X XSystem.Xml.* XSystem.DirectoryServices.* X XSystem.EnterpriseServices.* X XSystem.CodeDom.* X XSystem.Linq.* X X XSystem.AddIn.* X X X X XMicrosoft.VisualC.* X X X X XSystem.Transactions.* X X X XSystem.Collections X X XSystem.Runtime.Caching.* X X XSystem.Device.Location X X X XSystem.Runtime.ExceptionServices X X

Table IIIClassification of selected .NET namespaces(See the online version for additional data.)

Perhaps the most obvious representative of a core name-space is System.Collections as it provides collection typesvery much like a library for basic datatypes. Starting atthe top of Table II, the largest core namespace is Sys-tem.ComponentModel.* with its fundamental support forimplementing the run-time and design-time behavior ofcomponents and controls. The next core namespace is Sys-tem.Xml.* with various APIs for XML processing.

Let us consider ‘specializability’. We speak of an opennamespace when the percentage of specializable types is‘exceptional’. We speak of a closed namespace when thepercentage of sealed classes is ‘exceptional’. It will be inter-esting to see whether open namespaces are subject to ‘more’specialization in projects than non-open (or even closed)namespaces. In any case, it is helpful to understand whichnamespaces come wide open and which namespaces limitspecialization explicitly. In this context, another categoryemerges. We speak of an incomplete namespace, when thepercentage of orphan types is ‘exceptional’.

Starting at the top of Table II, the largest open namespaceis System.DirectoryServices.*; it models entities in a network(such as users and printers) and it supports common tasks(such as adding users and setting permissions). The nextopen namespace is System.CodeDom.*; it models an abstractsyntax of .NET languages. These namespaces provide richinheritance hierarchies that are left open for specializationby other frameworks or client code. We mention that Sys-tem.DirectoryServices.* is not specialized within the .NETFramework itself while System.CodeDom.* is specialized byseveral namespaces. Basic knowledge of .NET suggests thatCodeDom is specialized by namespaces that host ‘CodeDomproviders’ and regular projects are actually not very likelyto contain additional providers.

The largest closed namespace is System.Data.*; it sup-ports data access and management for diverse sources—

Page 6: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

relational databases specifically. One may expect this name-space to be open because of the need to define a richprovider interface for diverse sources. However, many ofthe classes for data access and management do not dependon the data source, and hence they are sealed. Also, variousproviders, such as SQL Server, Oracle, ODBC, and OleDB,are included into the namespace and accordingly sealed.The next closed namespace is System.Activities.*; it supportsabstract syntax and presentation of activities in a workflowsense. One may expect this namespace to be open becauseof the common design to provide extensibility of syntaxesby inheritance. However, the abstract syntax at hand iseffectively constrained to be non-extensible.

Orphan types are clearly very common in .NET; seeagain Table II.8 The assumption is here that the orphantypes model domain-/application-centric concepts that can-not be implemented in the framework. Let us review thoseincomplete .NET namespaces with all their interfaces be-ing orphans. The System.Transactions.* namespace supportstransaction and resource management; it is referenced byseveral other .NET namespaces—without though imple-menting any of its interfaces. The System.Runtime.Caching.*namespace supports caching; this namespace is only used inthe System.Web.* namespace—without though implementingany of its interfaces.

Let us turn to categories related to ‘class-inheritancetrees’. There are flat namespaces without intra-namespaceclass inheritance. There are branched namespaces with‘exceptional’ inheritance trees. Flat namespaces may bethought of as providing a facade for (some of) the referencednamespaces in the broad sense of the design pattern of thatname. Branched namespaces stand out with a complex objectmodel—complex in terms of tree size.

Starting at the top of Table II, the largest flat name-space is System.EnterpriseServices.*; it supports compo-nent programming with COM+. In particular, .NET ob-jects can be provided with access to resource and trans-action management of COM+. One can indeed think ofSystem.EnterpriseServices.* as a facade. There are manybranched namespaces at the top of Table II; the bigger anamespace, the more likely it contains some sizable treeamong its forest of classes. We previously encountered a‘small’ branched namespace System.CodeDom.* with itsobject model for .NET-language abstract syntax.

Let us finally consider what we call ‘intensiveness’. Aninterface-intensive namespace makes much use of inter-faces for method arguments, thereby supporting reusabilityin terms of interface polymorphism. (This may be seen as

8(Third-party) framework design guidelines for .NET [6] discourageorphan types; a framework designer is supposed to provide implementations(say, concrete classes) for all interfaces and abstract classes. Still orphantypes exist in .NET—presumably because corresponding implementationswould be illustrative rather than reusable and hence better suited for samplesthan for inclusion into the framework assemblies.

a symptom of interface-oriented programming.) There arealso delegate-intensive namespaces, which make much useof delegates for method arguments. Basic knowledge of.NET tells us that delegates are used in .NET for two majorprogramming styles. That is, delegates may be used foreither functional (OO) programming or event-based systems.These two styles cannot be separated easily—certainly notby means of simple metrics. There is a specific form ofan event-based namespace that reveals itself through thedelegate types that it declares.

A clearcut example of a namespace that is, in fact, bothinterface- and delegate-intensive is System.Linq.*; it supportsfunctional (OO) programming specifically for collectionsbased on the IEnumerable interface and friends. We note thatSystem.Linq.* does not declare any delegate type becausethe fundamental function types are readily provided bythe System namespace. There are several namespaces with‘exceptional’ percentages of both delegate arguments anddelegate-type declarations, thereby suggesting themselves ascandidates of the aforementioned, specific form of event-based namespaces; see, for example, System.Web.* right atthe top of Table II—the namespace provides web-relatedfunctionality and uses an event-based style, for example, toattach handlers to user-interface components.

Event-based programming does not necessarily involvedesignated delegate types. Standard delegate types for func-tions or designated interface types may be used as well. Forinstance, the System.Device.Location namespace uses specialinterface types to process updates to the device’s location.Hence, more advanced static analysis would be needed tofind evidence of event-based programming in the form of,for example, subscription protocols or state-based behavior.Further, a strict separation between functional (OO) andevent-based programming is not universally meaningful. Forinstance, the use of asynchronous calls is arguably bothfunctional and event-based. This is an issue with classifyingthe System.Activities.* namespace, for example.

B. Validation of categories

We performed validation to check that the computationallyassigned categories (based on Figure 2) match with theexpectations of domain experts. We discussed each assignedcategory in a manner that one researcher had to provide theconfirmative argument for a category, and another researcherhad to confirm—both researchers (in fact, authors) beingknowledgable in .NET.

In this process, we decided to focus on search for falsepositives and neglect search for false negatives on thegrounds of the argument that the metrics-based categorydefinitions are designed to find ‘striking’ true positives only.Nevertheless, we offer an example of a false negative forbetter understanding. The System.Data.* namespace shouldarguably be classified as a delegate-intensive namespace. Infact, the namespace leverages functional (OO) programming

Page 7: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

in the way that data providers are LINQ-enabled. However,the actual percentage of delegate usage does not meet thethreshold of the category’s definition.

V. COMPARISON OF POTENTIAL AND ACTUAL REUSE

We consider the as-implemented usage of a framework.Our main interest is to infer how projects ‘typically’ usethe framework. We define corresponding metrics and screenthem for .NET and the corpus of .NET projects of this study.

A. Definition of metrics

The metric % Referenced OO types denotes the percent-age of all OO types of a given namespace (or the entireframework) that are actually referenced (say, reused) in agiven project (or the entire corpus). The following metricsare defined ‘relative’ to the referenced OO types as opposedto all types.

In §III, we considered specializable types; the correspond-ing relative metric is % Specializable types (rel.)—thepercentage of all referenced OO types that are specializable.Likewise, the metric % Specialized types (rel.) denotesthe percentage of specializable, referenced types that wereactually specialized in projects. Finally, the metric % Late-bound types (rel.) denotes the percentage of specializable,referenced types that were actually bound late in projects.We say that a framework type is bound late in a project,if there is a method call with the framework type as staticreceiver type and a project type as runtime receiver type.(Clearly, said project type directly or indirectly specializessaid framework type.)

B. Measurements for .NET

We summarize measurements for the corpus:• 44 namespaces (out of 69) are referenced.• 22 namespaces are specialized.• 15 namespaces are bound late.• 925 classes (10.0 % of all classes) are referenced.• 105 interfaces (11.8 % of all interfaces) are referenced.• 173 types (2.6 % of all specializable types) are specialized:

– 107 classes (1.9 % of all specializable classes)– 66 interfaces (7.4 % of all interfaces)∗ 30 interfaces are inherited.∗ 66 interfaces are implemented.9

• 611 static receiver types are exercised.• 142 types (2.1 % of all specializable types) are bound late:10

– 116 classes (2.0 % of all specializable classes)11

– 26 interfaces (2.9 % of all interfaces)

An infographics with details is shown in Table IV; the figurein the paper’s introduction was a sketch of this table. We

9Hence, all .NET interfaces serving as base type in interface inheritancein the corpus are also implemented in the corpus.

10Our analysis cannot find all forms of late binding as discussed in §VI.11The number of types bound late may indeed be greater than the number

of specialized types because late binding relates to static receiver types; oneproject type may have several ancestors in the framework.

order namespaces again by the number of types and weinclude only those ever referenced by the corpus.

The middle block of columns displays actual reuse forall combinations of namespace and project while using thefollowing indicators: ‘–’ denotes infeasible reuse (in thesense that the namespace is not available for the frameworkversion of the project); ‘blank’ denotes no reuse; ‘∗’ or ‘∗’denotes less or more referencing (without specialization);‘N’ or ‘N’ denotes less or more specialization (without latebinding); ‘�’ or ‘�’ denotes less or more late binding. Here,‘less or more’ refers to below versus above median non-zero percentages of referenced OO types, specialized types(rel.), and late-bound types (rel.). Hence, those cells showwhether referencing, specialization, and late binding happenat all, and if so, to what extent (at a coarse-grained level:less versus more).

The columns on the left summarize potential reusefor each namespace in terms of the metrics # Types and% Specializable types from Table II.

The columns on the right summarize actual reuse in termsof a ‘dominator’ (i.e., the dominating form of reuse) andthe actual reuse metrics defined above. The dominator isdetermined as follows—without taking into account extentof reuse (‘less or more’). If a namespace is not reusedby more than half of all projects, then the dominator cellremains empty; see, e.g., System.CodeDom.*. Otherwise, if‘referencing’ is more frequent than ‘specialization’ and ‘latebinding’ combined, then the dominator is ‘∗’; in the oppositecase, the dominator is ‘N’ or ‘�’—whatever reuse formis more frequent. For instance, namespace System is usedwith late binding in most projects. Hence, actual reuse issummarized as ‘�’.

C. Discussion

The corpus misses several .NET namespaces totally—including all application namespaces (see Table III) andvarious namespaces related to user interfaces—the lattermost likely due to our methodology; see §II.

The online version determines correlations between var-ious metrics. We state one interesting correlation here: thepercentage of referenced OO types is inversely correlatedwith the size of the namespace (in terms of the number oftypes). Hence, it may be possible to identify an ‘essentialcore’ for each of the largest namespaces.

Let us study the metrics by reviewing all those name-spaces that are referenced but not specialized by the cor-pus. There are 21 namespaces like this and they are allspecializable, in principle. Nine of these namespaces arein the upper half of the distribution for % Specializabletypes. (See, for example, namespaces System.Globalizationand System.Text.RegularExpressions with ‘exceptional’ spe-cializability.) The referenced OO types are only slightly lessspecializable. That is, eight namespaces are in the upperhalf of the distribution for % Specializable types (rel.). Thus,

Page 8: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Namespace #Ty

pes

%Sp

ecia

lizab

lety

pes

Act

iveR

ecor

d

Cas

tleC

ore

Mon

oRai

l

Win

dsor

Json

.NE

T

log4

net

ME

F

Moq

NA

nt

NH

iber

nate

NU

nit

Pris

m

Rhi

no.M

ocks

Spri

ng.N

ET

xUni

t

Shar

pZip

Lib

Luce

ne.N

et

Dom

inat

or%

Ref

eren

ced

OO

type

s

%Sp

ecia

lizab

lety

pes

(rel

.)

%Sp

ecia

lized

type

s(r

el.)

%L

ate-

boun

dty

pes

(rel

.)

Framework 3.5 4.0 3.5 4.0 4.0 2.0 4.0 4.0 2.0 3.5 3.5 4.0 3.5 2.0 2.0 2.0 2.0System.Web.* 2327 • N N N ∗ ∗ � • • • •System.Windows.* • • – – � – – – – • • • •System.ServiceModel.* • • – – N – – – – • • •System.Windows.Forms.* • • � N • • • •System.Data.* • • ∗ ∗ ∗ ∗ N N ∗ • • •System.ComponentModel.* • • ∗ � N � � N ∗ � N N N � ∗ � • • • •System.Xml.* • • ∗ � ∗ ∗ ∗ ∗ N ∗ ∗ � ∗ ∗ • • • •System.Net.* • • ∗ ∗ ∗ ∗ ∗ ∗ • •System • • � � � � � N � � � � � � � � � N � � • • • •System.Security.Cryptography.* • • ∗ N ∗ • • •System.Runtime.InteropServices.* • • ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ • •

Microsoft.VisualBasic.* • • ∗ ∗ • •

System.Drawing.* • • ∗ ∗ ∗ • •

System.Runtime.Remoting.* • • ∗ ∗ ∗ ∗ ∗ � ∗ � ∗ N ∗ • • • •System.Configuration.* • • N ∗ N N N N N ∗ � N N ∗ N • • • •System.Diagnostics.* • • ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ N ∗ ∗ • • •System.IO.* • • ∗ ∗ N ∗ ∗ � ∗ ∗ � ∗ � � ∗ ∗ ∗ � � ∗ • • • •System.Reflection.* • • ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ • •

System.EnterpriseServices.* • • ∗ • •

System.CodeDom.* • • ∗ ∗ ∗ ∗ ∗ ∗ ∗ • •Microsoft.Build.* • • N ∗ • • •System.Threading.* • • ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ N ∗ ∗ ∗ ∗ • • •System.Runtime.Serialization.* • • ∗ N ∗ N N N N ∗ N N ∗ ∗ ∗ N ∗ ∗ N N • • 75System.Security.Permissions • • ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ •

System.Runtime.CompilerServices • • ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ • •

System.Linq.* • • ∗ ∗ ∗ ∗ ∗ – ∗ � – � ∗ ∗ – – – – ∗ • • • •System.Messaging.* • • ∗ • 100Microsoft.Win32.* • • ∗ ∗ ∗ ∗ • •

System.Security.Policy • • ∗ ∗ ∗ ∗ ∗ •

System.Globalization • • ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ • •

System.Transactions.* • • N ∗ ∗ • • •System.Security • • ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ • •

System.Collections.Generic • • � � ∗ � � ∗ � N ∗ � � � � N � � � • • • •System.Text • • ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ • •

System.Collections • • � N � N N � � N � � � N � � � N � � • • • •System.ServiceProcess.* • • ∗ • 100System.Resources.* • • ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ � ∗ ∗ ∗ • • • •System.Security.Principal • • ∗ ∗ ∗ ∗ • 100System.Collections.Specialized • 100 N � � ∗ � ∗ ∗ N ∗ � ∗ � 86 100 • •System.Text.RegularExpressions • 100 ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ • 100System.Runtime.Versioning • • ∗ ∗ ∗ ∗ ∗ ∗ •

System.Collections.ObjectModel • 100 � � � � � ∗ � � ∗ ∗ ∗ � � • 100 • 50Microsoft.CSharp.* • • ∗ ∗ ∗ • 100System.Timers • 100 ∗ ∗ • 100# Referenced types 137 301 245 229 277 229 201 174 375 374 437 213 135 604 308 113 193# Specialized types 16 39 28 26 27 20 18 13 26 39 31 29 10 73 19 11 26# Late bound types 6 7 9 10 11 3 6 4 10 12 20 11 8 22 5 2 875 % 235 89 33 92 33 8Median 80 73 20 75 6 025 % 36 54 12 50 0 0

Table IVInfographics for comparing potential and actual reuse for .NET (See the online version for additional data.)

low (high resp.) specialization is not predicted by low (highresp.) specializability in any obvious sense.

Most namespaces are actually referenced by enoughprojects to get assigned an actual reuse summary in the formof a dominator. This suggests that the projects of the corpusindeed share a ‘profile’ in an informal sense.

Let us compare potential reuse in terms of specializabilitywith actual reuse in terms of the dominator. There areeight namespaces with dominator ‘N’ or ‘�’. Half of thesenamespaces contribute to the System.Collections.* hierarchyand the associated specializability is ‘exceptional’. How-ever, specializability is ‘non-exceptional’ for the remaining

Page 9: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

cases; specializability is, in fact, in the percentage interval(0,25) for two cases; see namespaces System.Configuration.*and System.Runtime.Serialization.*. This observation furtherconfirms that high specialization is not predicted by highspecializability in any obvious sense.

VI. THREATS TO VALIDITY

There are the following threats to internal validity. Weuse homegrown tools in the study, especially for bytecodeinstrumentation, for the analysis of .NET design and usage.More subtly, there are threats due to the model underlyingour research. First, while investigating potential and actual.NET reuse, we focus on type specialization—even thoughframeworks might be also configured via attributes (i.e.,annotations) or XML files. This applies to a number of .NETnamespaces. Second, we observe late binding based solelyon the calls from client code to the framework, while itmight also be the case that the framework calls into theclient code through callbacks. Further, the analysis of latebinding relies on the runtime data gathered from the testsuiteexecution. Coverage of method-call sites is incomplete; thetests do not cover 38.96 % of the method-call sites in theprojects of the study.

The major threat to external validity is that though wesystematically collected our corpus, the generalization ofthe results might be biased because of the corpus’ size andcontent as well as the selection criteria.

VII. RELATED WORK

Software metrics are leveraged in our work for exploringreuse characteristics and the alignment between potentialand actual reuse. Elsewhere, metrics are typically used tounderstand maintainability [7] or quality of the code anddesign [8], [1], [9]. There is also a trend to analyze thedistribution characteristics for metrics and the correlationbetween different metrics [10], [11]. In the context of OOprogramming, work on metrics typically focuses on Java; thework of [12] targets .NET with a few basic metrics withoutfocus on reuse.

Type specialization (including class and interface inheri-tance, interface implementation, overriding) is at the centerof attention in our work; there is related work that studies re-lated metrics—without though the objective of summarizingreuse characteristics at a high of level of abstraction. Thework of [13] studies structural metrics of Java bytecode;some reuse-related measurements are covered, too, e.g.,the number of types that inherit from external frameworktypes, or the most implemented external interfaces. The workof [14], [15] focuses on metrics for inheritance and overrid-ing for Java, and it shows, for example, that programmersextend user-defined types more often than external library orframework types. In those works, depth of inheritance treesis considered relevant whereas our metrics-based approachfavored size of inheritance trees since we are interested in

the number of types participating in specialization. The workof [16] analyzes instantiations of frameworks (Eclipse UI,JHotDraw, Struts), though for a purpose of detecting usagechanges in the course of framework evolution. None of theaforementioned efforts involve dynamic analysis.

Static analysis of API or framework usage often addressreuse-related concerns, which are however complementaryto our notion of framework profile. The work of [17]leverages metrics to determine the popularity of the EclipseAPI. Research on API popularity in Java is also presentedin [18]; the authors analyze import statements in open-sourcesoftware to detect and predict changes in usage of APIsover time. The work [19] (co-authored by two of the presentauthors) and [20] analyzes popularity of the Java standardAPI in several dimensions. The work of [21] analyzes APIusage in Java applications and corresponding, ported C#applications to help with automated migration. There issubstantial interest in analyzing API usage with regard tousage patterns; see, for example, [22]. Usage patterns andour framework profiles provide very different abstractionlevels for reuse-related models.

Dynamic usage analysis is leveraged in our work todiscover late-bound framework types. The resulting com-bination of static and dynamic analysis is also encounteredelsewhere [23], [24]. These efforts are relevant in so far asthey inspired our approach (specifically, our implementation)for aligning static and dynamic receiver types. In particular,the work of [23] deals with the dynamic measurement ofpolymorphism in Java and interprets it from a reuse-orientedpoint of view. Bytecode is instrumented and runtime receivertypes are determined by accessing the virtual machine’sstack—similar to our approach. This work is not focusedthough on reuse of a composite framework.

VIII. CONCLUSION

We presented a new approach to understanding reusecharacteristics of composite frameworks such as JSE or.NET. We applied the approach in an empirical study to.NET and a suitable corpus of .NET projects. The reusecharacteristics include metrics of potential reuse (such asthe percentage of specializable types), categories related toreuse (such as open or closed namespaces), and metrics ofactual reuse (such as the percentage of specialized types).These metrics and the classification add up to what we calla framework profile. Infographics can be used to providedifferent views on framework profiles.

Future work needs to address issues of generality men-tioned in §VI. That is, other forms of framework reuse(in particular, configuration) should be investigated, i.e.,forms that do not use basic OO facets. Another importantdirection concerns partitioning of frameworks into relevantsub-frameworks. Such partitioning will make classificationmore useful. Also, partitioning will identify different rolesof sub-frameworks more clearly for developers.

Page 10: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

REFERENCES

[1] A. Trifu and R. Marinescu, “Diagnosing Design Problems inObject Oriented Systems,” in Proceedings of the 12th WorkingConference on Reverse Engineering. IEEE, 2005, pp. 155–164.

[2] J. Dietrich, C. McCartin, E. D. Tempero, and S. M. A. Shah,“Barriers to Modularity - An Empirical Study to Assess thePotential for Modularisation of Java Programs,” in 6th Inter-national Conference on the Quality of Software Architectures,QoSA 2010, Proceedings, ser. LNCS, vol. 6093. Springer,2010, pp. 135–150.

[3] T. T. Bartolomei, K. Czarnecki, and R. Lammel, “Swing toSWT and back: Patterns for API migration by wrapping,”in 26th IEEE International Conference on Software Mainte-nance (ICSM 2010). IEEE, 2010, pp. 1–10.

[4] A. Schmolitzky, “Teaching inheritance concepts with Java,” inProceedings of the 4th international symposium on Principlesand practice of programming in Java, PPPJ ’06. ACM,2006, pp. 203–207.

[5] N. Tillmann and J. de Halleux, “Pex-White Box Test Gen-eration for .NET,” in Tests and Proofs, Second InternationalConference, TAP 2008, Proceedings, ser. LNCS, vol. 4966.Springer, 2008, pp. 134–153.

[6] K. Cwalina and B. Abrams, Framework design guidelines.Conventions, idioms, and patterns for reusable .NET libraries.Addison-Wesley, 2009.

[7] M. Dagpinar and J. H. Jahnke, “Predicting Maintainabilitywith Object-Oriented Metrics - An Empirical Comparison,”in Proceedings of the 10th Working Conference on ReverseEngineering, WCRE ’03. IEEE, 2003, pp. 155–.

[8] R. Marinescu and D. Ratiu, “Quantifying the Quality ofObject-Oriented Design: The Factor-Strategy Model,” in Pro-ceedings of the 11th Working Conference on Reverse Engi-neering, WCRE ’04. IEEE, 2004, pp. 192–201.

[9] S. Vaucher, F. Khomh, N. Moha, and Y.-G. Gueheneuc,“Tracking Design Smells: Lessons from a Study of GodClasses,” in Proceedings of the 2009 16th Working Confer-ence on Reverse Engineering, WCRE ’09. IEEE, 2009, pp.145–154.

[10] G. Concas, M. Marchesi, A. Murgia, S. Pinna, and R. Tonelli,“Assessing traditional and new metrics for object-orientedsystems,” in Proceedings of the 2010 ICSE Workshop onEmerging Trends in Software Metrics, WETSoM ’10. ACM,2010, pp. 24–31.

[11] G. Baxter, M. R. Frean, J. Noble, M. Rickerby, H. Smith,M. Visser, H. Melton, and E. D. Tempero, “Understanding theshape of Java software,” in Proceedings of the 21th AnnualACM SIGPLAN Conference on Object-Oriented Program-ming, Systems, Languages, and Applications, OOPSLA 2006.ACM, 2006, pp. 397–412.

[12] P. Linos, W. Lucas, S. Myers, and E. Maier, “A metricstool for multi-language software,” in Proceedings of the 11thIASTED International Conference on Software Engineeringand Applications. ACTA Press, 2007, pp. 324–329.

[13] C. Collberg, G. Myles, and M. Stepp, “An empirical study ofJava bytecode programs,” Software–Practice and Experience,vol. 37, pp. 581–641, 2007.

[14] E. D. Tempero, J. Noble, and H. Melton, “How Do JavaPrograms Use Inheritance? An Empirical Study of Inheri-tance in Java Software,” in ECOOP 2008 - Object-OrientedProgramming, 22nd European Conference, Proceedings, ser.LNCS, vol. 5142. Springer, 2008, pp. 667–691.

[15] E. Tempero, S. Counsell, and J. Noble, “An empirical studyof overriding in open source Java,” in Proceedings of theThirty-Third Australasian Conferenc on Computer Science -Volume 102, ACSC ’10. Australian Computer Society, 2010,pp. 3–12.

[16] T. Schafer, J. Jonas, and M. Mezini, “Mining frameworkusage changes from instantiation code,” in Proceedings of the30th international conference on Software engineering, ICSE’08. ACM, 2008, pp. 471–480.

[17] R. Holmes and R. J. Walker, “Informing Eclipse API pro-duction and consumption,” in Proceedings of the 2007 OOP-SLA workshop on Eclipse Technology eXchange, ETX 2007.ACM, 2007, pp. 70–74.

[18] Y. M. Mileva, V. Dallmeier, and A. Zeller, “Mining APIPopularity,” in Testing - Practice and Research Techniques,5th International Academic and Industrial Conference, TAICPART 2010, Proceedings, ser. LNCS, vol. 6303. Springer,2010, pp. 173–180.

[19] R. Lammel, E. Pek, and J. Starek, “Large-scale, AST-basedAPI-usage analysis of open-source Java projects,” in Proceed-ings of the 2011 ACM Symposium on Applied Computing(SAC). ACM, 2011, pp. 1317–1324.

[20] H. Ma, R. Amor, and E. D. Tempero, “Usage Patternsof the Java Standard API,” in 13th Asia-Pacific SoftwareEngineering Conference (APSEC 2006), Proceedings. IEEE,2006, pp. 342–352.

[21] H. Zhong, S. Thummalapenta, T. Xie, L. Zhang, and Q. Wang,“Mining API mapping for language migration,” in Proceed-ings of the 32nd ACM/IEEE International Conference onSoftware Engineering - Volume 1, ICSE 2010. ACM, 2010,pp. 195–204.

[22] H. Zhong, T. Xie, L. Zhang, J. Pei, and H. Mei, “MAPO:Mining and Recommending API Usage Patterns,” in ECOOP2009 - Object-Oriented Programming, 23rd European Con-ference, Proceedings, ser. LNCS, vol. 5653. Springer, 2009,pp. 318–343.

[23] K. Choi and E. D. Tempero, “Dynamic Measurement of Poly-morphism,” in Proceedings of the Thirtieth Australasian Com-puter Science Conference (ACSC2007), ser. CRPIT, vol. 62.Australian Computer Society, 2007, pp. 211–220.

[24] A. Rountev, S. Kagan, and M. Gibas, “Static and dynamicanalysis of call chains in java,” in Proceedings of theACM/SIGSOFT International Symposium on Software Testingand Analysis, ISSTA 2004. ACM, 2004, pp. 1–11.

Page 11: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

APPENDIX

This appendix provides additions to the main sections ofthe paper. This information is for the reader’s convenience,and it is only included into the online version of paper. Weurge the reader to view data on the screen, thereby beingable to see the details in the tables and figures. (Please usezooming and rotation features of your PDF viewer.) Thisappendix is not suitable for printing—given the amount ofdata included.

A. Additions to §III1) Additional metrics: We add definitions of a few met-

rics that we only hinted at in §III.Specializability is taken to the method level as fol-

lows. Each namespace can be measured in terms of% Specializable methods, i.e., the percentage of all meth-ods that are either abstract or non-sealed methods—henceexcluding static and sealed as well as non-virtual methods. Ametrics is added for % Sealed methods, i.e., the percentageof “non-overridable virtual methods”—which is the percent-age of all virtual, non-abstract instance method declarationsthat are sealed (including the case that the hosting class issealed entirely).

The notion of orphan types can also be refined as follows.That is, types may be orphaned in a more inclusive sense ifwe focus specifically on composite frameworks. There is thevariation % Local orphan classes: the percentage of all ab-stract classes in a given namespace that are never concretelyimplemented within the given namespace. Likewise, thereis the variation % Local orphan interfaces. These metricsshow us whether there are namespaces that are incompleteby themselves while they are ‘fully illustrated’ by othernamespaces so that they do not count as hosting ‘global’orhpans.

Instead of unspecific usage, ‘inter-namespace specializa-tion’ can also be considered. That is, each namespace canbe measured in terms of # Specialized namespaces, i.e.,the number of namespaces with at least one type that isspecialized (implemented or extended) by a type of thegiven namespace versus # Specializing namespaces, i.e., thenumber of namespaces with at least one type that specializea type of the given namespace. Here, direct relationships forreferences and specialization are counted, only—as opposedto taking the transitive closure of those relations.

Table VIII and Table IX provide additional views on the’inter-namespace referencing’ and ’inter-namespace special-ization’. As we can see from the ’specialization’ view, thereare very few ’top’ namespaces which are heavily specialized;others have noticeable less specialization cases. This alsoto some extend proves the hypothesis that classic forms ofOO-extensibility is not very much exercised within .NETFramework itself; they are rather observable on the limitedset of very specific namespaces (e.g. collections).

2) Additional measurements: Table V and Table V serveas extended versions of Table II: they list all reuse-relatedmetrics for .NET platform (in numbers and infographics).Table VIII and Table IX shed some light on usage andspecialization within .NET. Table X provides informationabout possible correlation between metrics. More detailedinformation about orphan types in .NET is provided byFigure 3 and Table XI (namespaces by frequency of orphantypes and a list of all orphan types).

B. Additions to §IV1) Additional measurements: Table XII lists all name-

spaces, classified automatically based on definitions intro-duced in §IV. Table XIII provides information about possiblecorrelation between categories.

C. Additions to §V1) Illustration of late-bound types: The notion of ‘late-

bound type’ was only explained very briefly in §V. Addi-tional details follow.

We start from the most basic form of framework usage:client code references a framework or a namespace thereof.Such a reference could relate to various language concepts,e.g., a reference to a class in a constructor call, a referenceto a type in the declaration of a method argument, or areference to a base class in a class declaration.

In terms of OO-based reuse of a framework in clientcode, usage in the sense of type specialization is of specialinterest. Yet more advanced usage is resembled by latebinding at the boundary of framework and client code. Weare are concerned here with late binding in the sense thata method call of the client code uses a framework type asstatic receiver type, but the actual runtime receiver type endsup being a type of the client code which necessarily derivesfrom the static receiver type.

For clarity, consider the following client code:

public class MyList<T> : List<T> { ... }public static Program {

public static void printResult(List<Item> l){

...Console.WriteLine("Count: {0}", l.Count);...

}public static void Main(string[] args){

List<Item> r = new MyList<Item>();...printResult(r);...

}}

The client code specializes the framework class List forgeneric collections resulting in a subclass MyList. The clientcode also defines a method printResult that works on theframework type List. In the body of that method, List’s

Page 12: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

virtual member Count (which is a property, in fact) isinvoked. Further, the client code instantiates MyList andpasses that list to printResult. Subject to a dynamic programanalysis, it can be determined that late binding is used onList. In fact, in this specific example, an inter-proceduralanalysis would be sufficient as opposed to a full-blowndynamic analysis. In this paper, the term static receivertype refers the receiver type essentially as it is declared inthe source code or as the declaration is recoverable fromthe byte code. Hence, the static receiver type in the calll.Count is List<Item>, but the dynamic receiver type isMyList<Item>.

2) Additional measurements: Actual reuse of .NET plat-form by projects is shown in Table XIV, providing numbersfor the infographics of Table IV. Figure 7 shows how oftenlate binding occurs, while Table XVII lists .NET types thatare bound late in projects. Figure 4 and Figure 5 givedetailed overview of the breakdown of referenced types intolate-bound, specialized, specializable, and non-specializable.Figure 6 provides such breakdown per each namespace, forall types, including non-referenced.

Figure 8 and Figure 9 provide information about .NETinterfaces and classes that were derived/inherited in thecorpus. Figure 10 shows top 30 .NET interfaces that wereimplemented in the corpus. Table XVIII lists .NET orphantypes that were implemented in the corpus.

The derived .NET classes in Figure 9 can be classifiedas follows. Again, collections dominate the picture, fol-lowed by custom attributes (say, annotations) and exceptions.Marginally exercised aspects include conversion, remoting,user interfaces, configuration, I/O, and visitors for LINQ.

The implemented .NET interfaces in Figure 10 can beclassified as follows. The list of interfaces is headed byIDisposable, which is used for the release of resources;primarily, these are unmanaged resources. 12 of the 30interfaces deal with collections. Among the top 10, there areadditionally interfaces for serialization and cloning. In therest of the list, yet other aspects are exercised: comparison,services, streaming, and change tracking.

D. On correlation

Where appropriate, we calculated Spearman’s rank cor-relation coefficient, a non-parametric measure of statisticaldependence between variables. The sign of the coefficientindicates the direction of the association: “+” means thatwhen A increases, B increases, too; “-” means that when Aincreases, B decreases. The value of the coefficient indicatesthe degree of the correlation: “0” means that there is no ten-dency for B to either increase or decrease when A increases;“1” means that A and B perfectly monotonically related.(Please note that correlation does not imply causation!)

Spearman’s rank correlation coefficient is calculated forreuse-related metrics (Table X), for classification of name-spaces (Table XIII), and for actual reuse metrics (Table XV

and Table XVI). Stars highlight statistically significant re-sults: three stars mean that p-value is less than 0.001, twostars mean that p-value is less than 0.01, and one starmeans that p-value is less than 0.05. P-value in its turnis a probability to obtain something like what is observed,assuming that null hypothesis (that there is no correlation)is true. So “statistically significant results” mean that thenull hypothesis can be rejected with low risk of making atype I error (i.e., rejecting the true null hypothesis) and thatthe alternative hypothesis (that correlation is present, withsuch-and-such Spearman’s rho) can be accepted instead.

We neither analyze the results in detail nor interpret them.Let us just mention some of the observed (non-trivial) corre-lations. For instance, there is a positive correlation betweenthe number of types in a namespace and the MAX size classtree within the namespace (Table X), meaning that the moretypes a namespace has, the bigger the maximal inheritancetree of namespace’s classes. According to Table XV, thereis a positive correlation such that the number of late-boundtypes increases with the number specialized types, whichin turn increases with the number specializable, referencedtypes, which in turn increases with the number referencedtypes.

Page 13: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Nam

espa

ce

#Types

#Methods

#Rootclasses

#Rootinterfaces

MAXsizeclasstree

MAXsizeinterfacetree

#Referencednamespaces

#Referringnamespaces

#Specializednamespaces

#Specializingnamespaces

%Classes

%Interfaces

%Valuetypes

%Delegatetypes

%Generictypes

%Classarguments

%Interfacearguments

%Valuetypearguments

%Delegatearguments

%Staticclasses

%Abstractclasses

%Concreteclasses

%Staticmethods

%Abstractmethods

%Concretemethods

%Sealedclasses

%Specializableclasses

%Specializabletypes

%Sealedmethods

%Specializablemethods

%Orphanclasses

%Orphaninterfaces

%Orphantypes

%Localorphanclasses

%Localorphaninterfaces

Syst

em.W

eb.*

2327

2931

511

5618

523

4043

622

576

910

562

627

51

1089

64

9030

7073

538

224

42

24Sy

stem

.Win

dow

s.*

1658

2916

774

971

3182

308

146

765

136

154

434

84

1482

164

8028

7274

1323

213

22

15Sy

stem

.Ser

vice

Mod

el.*

1153

1146

854

597

2034

439

214

8310

74

704

215

113

869

684

3664

688

245

4410

544

Syst

em.W

indo

ws.

Form

s.*

963

1980

141

532

89

3011

138

533

3013

383

4613

16

936

193

1288

894

282

313

234

Syst

em.D

ata.

*74

510

956

358

4525

2434

916

274

715

35

525

403

416

8017

975

6040

467

264

266

426

Syst

em.A

ctiv

ities

.*49

057

0630

630

347

352

133

866

53

2875

514

74

1482

86

8560

4044

619

540

85

40Sy

stem

.Com

pone

ntM

odel

.*43

428

8523

774

168

2740

1129

6819

76

6216

176

214

8310

1674

2971

777

448

3614

952

Syst

em.W

orkfl

ow.*

419

4107

234

417

2138

216

383

106

169

917

51

1188

76

8743

5762

833

239

62

39Sy

stem

.Xm

l.*35

852

1314

520

75

2526

77

696

224

733

232

216

8113

582

1486

872

314

609

660

Syst

em.N

et.*

285

3361

194

93

427

1915

369

420

749

537

83

1285

106

8428

7274

327

830

98

50Sy

stem

.Dir

ecto

rySe

rvic

es.*

265

2009

122

2223

59

174

232

159

139

16

946

193

793

936

130

Syst

em25

740

0533

1631

4725

698

6554

621

1920

4011

472

79

8646

450

2377

7916

152

194

438

Syst

em.S

ecur

ity.C

rypt

ogra

phy.

*25

018

2694

38

522

176

281

118

4753

120

7915

481

4654

559

3033

033

Mic

roso

ft.V

isua

lBas

ic.*

235

5806

121

2038

239

312

169

920

21

262

2448

12

9619

179

3565

692

51

8510

185

Syst

em.R

untim

e.In

tero

pSer

vice

s.*

235

1235

6575

21

1453

514

2933

3826

866

34

9323

6512

7525

651

6855

294

97M

icro

soft

.JSc

ript

.*20

419

0847

3318

723

17

176

186

644

321

1090

2610

6451

4958

640

364

153

64Sy

stem

.Dra

win

g.*

191

2514

966

71

1611

76

563

365

327

573

595

303

6756

4447

314

133

31

50Sy

stem

.Run

time.

Rem

otin

g.*

190

1354

5146

439

2520

75

5934

52

5823

181

25

9326

1361

3664

7719

293

2310

325

Syst

em.C

onfig

urat

ion.

*18

614

3179

1814

522

218

1778

108

472

618

31

1088

68

8551

4954

438

167

81

67Sy

stem

.Dia

gnos

tics.

*17

314

7210

911

51

2139

74

736

201

562

401

34

9318

775

3763

664

2291

791

Syst

em.IO

.*12

315

7961

28

224

459

1365

228

634

458

45

1184

195

7632

6868

733

250

42

50Sy

stem

.Refl

ectio

n.*

113

1630

622

14

1659

511

612

353

4654

1486

133

8459

4142

1143

11

350

Syst

em.E

nter

pris

eSer

vice

s.*

111

512

2226

2518

43

257

2320

812

172

9811

1574

7921

4428

1919

623

Syst

em.C

odeD

om.*

105

819

303

101

1915

55

903

777

212

14

953

1087

298

985

222

23

Syst

em.Id

entit

yMod

el.*

102

722

492

72

242

52

933

480

316

17

2271

1510

743

9797

143

533

68

33M

icro

soft

.Bui

ld.*

9613

6335

109

917

23

270

188

45

7613

101

16

938

785

1090

9213

140

Syst

em.M

anag

emen

t.*93

623

432

71

171

71

782

136

6510

195

110

8911

188

2179

808

153

33

Syst

em.T

hrea

ding

.*80

1140

561

31

1759

64

661

2111

532

346

2013

681

3564

2575

762

92

22

Syst

em.R

untim

e.Se

rial

izat

ion.

*74

713

4715

35

2049

737

7220

874

519

26

887

1215

7366

3449

933

440

126

60Sy

stem

.Sec

urity

.Acc

essC

ontr

ol74

472

84

1310

43

7228

438

6238

629

586

5842

425

232

28

Syst

em.S

ecur

ity.P

erm

issi

ons

7056

96

32

1615

384

1273

423

3718

4612

887

193

8614

198

260

2Sy

stem

.Run

time.

Com

pile

rSer

vice

s69

163

582

31

1240

42

913

67

663

283

275

6837

558

5149

5117

102

503

350

Syst

em.L

inq.

*62

1316

136

256

1313

32

7715

818

5923

613

612

8173

126

4456

635

112

225

222

Syst

em.A

ddIn

.*60

308

1713

2617

51

2847

2512

5010

373

1882

2238

4159

4178

242

9358

93Sy

stem

.Xam

l.*60

837

2613

73

184

83

7222

72

748

162

77

8624

669

298

984

2677

182

85Sy

stem

.Mes

sagi

ng.*

5262

327

11

320

111

156

238

441

650

310

06

9410

9090

47

0M

icro

soft

.Win

32.*

4934

027

618

324

465

2014

464

3811

625

6928

270

4456

5619

99

9Sy

stem

.Sec

urity

.Pol

icy

4554

312

610

1018

155

278

167

811

183

691

93

8883

1731

1824

142

14Sy

stem

.Glo

baliz

atio

n39

958

1411

1256

41

7426

1981

37

9020

378

1090

901

520

Mic

roso

ft.V

isua

lC.*

3853

28

123

54

150

455

100

5922

182

100

538

5710

010

02

6488

4288

Syst

em.T

rans

actio

ns.*

3817

616

34

213

86

158

1618

857

927

79

9136

756

4159

685

2110

021

100

Syst

em.S

ecur

ity36

341

175

317

444

1461

1722

619

291

59

8627

766

6436

505

220

933

Syst

em.C

olle

ctio

ns.G

ener

ic31

566

35

1911

515

2655

423

9437

1740

618

826

1381

694

9742

1918

1018

8Sy

stem

.Run

time.

Dur

able

Inst

anci

ng30

283

122

103

23

8713

353

1034

319

819

9131

6969

74

412

Syst

em.C

olle

ctio

ns25

292

17

128

583

4952

444

596

358

2369

714

8015

8592

1662

023

45Sy

stem

.Tex

t25

401

115

951

31

964

1585

2971

86

8754

4646

588

88

Syst

em.D

eplo

ymen

t.*25

153

184

216

61

844

1263

317

1810

909

915

9595

18

0Sy

stem

.Run

time.

Cac

hing

.*24

157

133

312

15

262

1212

1276

514

527

733

1978

4060

673

477

100

227

100

Syst

em.S

ervi

cePr

oces

s.*

2117

512

152

657

4348

746

100

1486

892

9217

0Sy

stem

.Res

ourc

es.*

2022

010

41

220

95

375

205

683

297

9311

682

3367

7411

250

Syst

em.D

ynam

ic20

173

42

122

146

73

9010

918

178

227

1083

1189

9033

2872

5070

7250

Syst

em.S

ecur

ity.P

rinc

ipal

1812

24

22

213

175

356

1133

5545

1090

279

6430

7075

1235

0M

icro

soft

.Sql

Serv

er.S

erve

r18

255

121

110

13

172

622

2179

100

51

9577

2329

3310

07

100

Syst

em.S

ecur

ity.A

uthe

ntic

atio

n.*

1638

81

125

71

5644

6614

2111

895

392

3367

673

2111

1111

Syst

em.C

olle

ctio

ns.S

peci

aliz

ed15

193

92

11

1027

48

6713

137

565

372

1090

74

8910

010

037

240

50Sy

stem

.Dev

ice.

Loc

atio

n13

102

62

15

31

6215

2323

4626

2910

02

1484

1288

9018

190

Syst

em.T

ext.R

egul

arE

xpre

ssio

ns12

140

91

1117

42

838

850

146

320

8019

379

100

100

1115

2020

20A

cces

sibi

lity

1054

52

21

22

1060

3016

480

100

7228

100

100

100

5043

67Sy

stem

.Col

lect

ions

.Con

curr

ent

1022

04

23

107

41

8020

9023

470

212

2562

145

8110

010

030

725

2025

Syst

em.R

untim

e.V

ersi

onin

g8

226

65

175

2562

3817

8332

6883

1717

514

0M

icro

soft

.CSh

arp.

*7

255

136

271

2947

2231

2080

4852

2080

8020

0Sy

stem

.Col

lect

ions

.Obj

ectM

odel

717

54

1025

511

100

100

371

5111

1486

21

9710

010

065

1714

1414

Syst

em.R

untim

e.C

onst

rain

edE

xecu

tion

53

32

31

360

4033

6710

067

3333

330

33Sy

stem

.Run

time

512

418

102

280

2010

025

7558

4275

2525

88

0Sy

stem

.Tim

ers

426

44

32

7525

3518

2918

100

496

100

100

827

0Sy

stem

.Med

ia3

453

93

210

036

4518

100

2278

3367

672

70

Syst

em.R

untim

e.H

ostin

g2

122

54

110

080

2010

08

9250

5050

250

Syst

em.R

untim

e.E

xcep

tionS

ervi

ces

21

21

110

010

010

050

5050

0Sy

stem

.Num

eric

s2

184

32

110

05

392

8020

33

075

%19

015

7962

138

722

267

580

1623

51

668

465

514

9322

987

5189

9011

334

4010

650

Med

ian

6054

317

33

217

95

272

613

00

544

342

19

8711

581

3367

695

241

04

223

25%

1817

56

00

011

33

160

06

00

371

190

00

817

168

1046

502

150

00

00

Tabl

eV

Com

preh

ensi

vese

tof

reus

e-re

late

dm

etri

csfo

r.N

ET

(per

cent

ages

)

Page 14: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Nam

espa

ce

#Types

#Methods

#Rootclasses

#Rootinterfaces

MAXsizeclasstree

MAXsizeinterfacetree

#Referencednamespaces

#Referringnamespaces

#Specializednamespaces

#Specializingnamespaces

%Classes

%Interfaces

%Valuetypes

%Delegatetypes

%Generictypes

%Classarguments

%Interfacearguments

%Valuetypearguments

%Delegatearguments

%Staticclasses

%Abstractclasses

%Concreteclasses

%Staticmethods

%Abstractmethods

%Concretemethods

%Sealedclasses

%Specializableclasses

%Specializabletypes

%Sealedmethods

%Specializablemethods

%Orphanclasses

%Orphaninterfaces

%Orphantypes

%Localorphanclasses

%Localorphaninterfaces

Syst

em.W

eb.*

2327

2931

511

5618

5••

43•

22•

••

••

••

••

•••

•••

••

•••

••

•••

Syst

em.W

indo

ws.

*•••••

82•

•••

••

•••

••

••

••

••

••

••

••

•••

••

Syst

em.S

ervi

ceM

odel

.*••••••

43••••

••

••

•••

••

••••

••

••

••••••

Syst

em.W

indo

ws.

Form

s.*

••••••••••

••••

••••

•••

•••

••

•••••

•••

Syst

em.D

ata.

*•••••••

••

••••••

••••••

•••

••

•••••

••••

Syst

em.A

ctiv

ities

.*•••••••

••••

••••••

••

••

•••••

•••

•••

•••

Syst

em.C

ompo

nent

Mod

el.*

••••••••••

••

••

••

••

••

•••

•••

••••

••••

Syst

em.W

orkfl

ow.*

••••

•••

••••

•••

••

••

•••

•••

••

•••

•••

••

Syst

em.X

ml.*

••••

••••••

••••

••

••••

••

••

••

•••••

•••

Syst

em.N

et.*

•••

•••••••

••••

••••

••

••••

••

••••

••••

Syst

em.D

irec

tory

Serv

ices

.*•••

••

••

••

•••

•••

•••

•••

•••

••

Syst

em••

•••••

69•

65•

••••

•••

••

•••

••

••

••

•••

•••

Syst

em.S

ecur

ity.C

rypt

ogra

phy.

*•••

••••••

••

••

••

••

••

••

••

•••

••

Mic

roso

ft.V

isua

lBas

ic.*

••••

38••

••

••••••

••

•48

•••

••

••

••

••

•••

••

Syst

em.R

untim

e.In

tero

pSer

vice

s.*

••••

••

••

••

•••

•••

•••••

••

••

••

••••

Mic

roso

ft.J

Scri

pt.*

••

•••••

••

•••

••

••

•••••

••

••••

•••••

Syst

em.D

raw

ing.

*•••

••

•••••

••••

•••

••••

•••

••

••

••

•••

Syst

em.R

untim

e.R

emot

ing.

*•

•••

••••••

••

••

•23

•••

••••

••

•••

••••••

Syst

em.C

onfig

urat

ion.

*•

•••••••••

••

••

••

••

•••

••••

••

••

••

•••

Syst

em.D

iagn

ostic

s.*

•••

••

•••••

••••

•••

••

••

••

••

••

••

••

•Sy

stem

.IO.*

••

•••

•••••

••••

•••

•••

••

••

••

•••

••

•••

Syst

em.R

eflec

tion.

*•••

•••

••

••

•••

••

••

••

•••

••••

••••

Syst

em.E

nter

pris

eSer

vice

s.*

••

••

••

••

•••

••

••

••

••

••

•••

•••

Syst

em.C

odeD

om.*

••

•••

•••

•••

••

••

••

••

•••

•••

•••

••

Syst

em.Id

entit

yMod

el.*

••

•••

••

••

••

••

••

••••

•••

••••

•••

•••

•M

icro

soft

.Bui

ld.*

••

••••

••

••

••

•••••

••

•••

•••

••••

Syst

em.M

anag

emen

t.*•

••

••

••

••

••

•••

••

••

•••

•••

••

••

••

••

Syst

em.T

hrea

ding

.*•

••

••

•••••

•••••

•••••

•••

•••

••

••

••

Syst

em.R

untim

e.Se

rial

izat

ion.

*•

•••

••••••

••

•••

•••

••

••

••

•••••••••

Syst

em.S

ecur

ity.A

cces

sCon

trol

••

••

••

••

••

••

••

••

•••

••

•••

••

Syst

em.S

ecur

ity.P

erm

issi

ons

••

••

••

••

••

•••

•••

••

•••

86•

•••

Syst

em.R

untim

e.C

ompi

lerS

ervi

ces

••

••

••

••

•••

••

••

•••

27•

••

•••

•••

•••

•••

Syst

em.L

inq.

*•

••

•••

••

••

••

••

•23

••••

••

•••

••

•••••

••

Syst

em.A

ddIn

.*•

•••

••

••

•••

•••

•••

•••

••

••

••

••

•Sy

stem

.Xam

l.*•

•••

•••

•••

••

••••

•••

••••

••••

••

••

••

Syst

em.M

essa

ging

.*•

••

••••

••

••

••

••••

•10

0•

••••

••

Mic

roso

ft.W

in32

.*•

••

•••

••

•••

••••••

••

••

••

•••

••

Syst

em.S

ecur

ity.P

olic

y•

••

•••

••

••

••

••

••

•••

••••

•••

••

••

Syst

em.G

loba

lizat

ion

••

••

••

•••

••

••

••

••

••••

••

Mic

roso

ft.V

isua

lC.*

••

••

••

••

••

•10

0••

••

100

••

•10

010

0••

••

•Sy

stem

.Tra

nsac

tions

.*•

••

••

••

••

•••

••

••

•••

•••

••

••

••

100•

100

Syst

em.S

ecur

ity•

••

••

••

••

••

•••

•••

••••

••

••

••

••

Syst

em.C

olle

ctio

ns.G

ener

ic•

••

••

••

••

••

••

••

••

••

••

•••••

••

••

Syst

em.R

untim

e.D

urab

leIn

stan

cing

••

••

••

•••

••

••

••

••

••

••

•••

••

Syst

em.C

olle

ctio

ns•

••

••

••

••

••

••••

••

•••

••••••

••

Syst

em.T

ext

••

••

••

•••

••

••

•••••

••

••

••

Syst

em.D

eplo

ymen

t.*•

••

••

••

••

••

••

•••

••

••••

••

Syst

em.R

untim

e.C

achi

ng.*

••

••

••

••

•••

••

••

••

••

••

••

••

•••

100••

100

Syst

em.S

ervi

cePr

oces

s.*

••

••

••

••

•••

100•

••••

Syst

em.R

esou

rces

.*•

••

••

••

•••

••

••

••

••

•••

••

••

•Sy

stem

.Dyn

amic

••

•••

••

••••

•91

••

78•

••

•••••

•72•

7072•

Syst

em.S

ecur

ity.P

rinc

ipal

••

••

••

••

••

•••

••

••••

•••

•••

Mic

roso

ft.S

qlSe

rver

.Ser

ver

••

••

••

••

••

••

••

100

••••

••

•10

0•

100

Syst

em.S

ecur

ity.A

uthe

ntic

atio

n.*

••

••

•••

••

•••

•••

•••

••

••

••

••

Syst

em.C

olle

ctio

ns.S

peci

aliz

ed•

••

••

•••

••

••

••

•••

•••

•••

100

100•

••

Syst

em.D

evic

e.L

ocat

ion

••

••

••

••

•••

••

••

100

••

•••••

Syst

em.T

ext.R

egul

arE

xpre

ssio

ns•

••

•••

•••

••

•••

••

••

••

100

100•

••

••

Acc

essi

bilit

y•

••

••

••

••

60•

•••

100

72•

100

100

100

••

•Sy

stem

.Col

lect

ions

.Con

curr

ent

••

••

••

••

•••

••

••

•••

••

••

100

100•

••

••

Syst

em.R

untim

e.V

ersi

onin

g•

••

••

••

••

••

••

••

••

••

Mic

roso

ft.C

Shar

p.*

••

••

••

••

••

••

••

•••

••

Syst

em.C

olle

ctio

ns.O

bjec

tMod

el•

••

••

••

100

100

••••

••

•••

100

100

65••

••

Syst

em.R

untim

e.C

onst

rain

edE

xecu

tion

••

••

•••

••

••

100•

••

••

Syst

em.R

untim

e•

••

••

•••

•10

0•

••

••

•••

Syst

em.T

imer

s•

••

••

••

25••

••

100

••

100

100••

Syst

em.M

edia

••

••

••

100

•••

100•

••

••

••

Syst

em.R

untim

e.H

ostin

g•

••

••

•10

0•

•10

0•

••

••

•Sy

stem

.Run

time.

Exc

eptio

nSer

vice

s•

••

••

100

100

100•

••

Syst

em.N

umer

ics

••

••

•10

0•

••

80•

••

75%

190

1579

6213

87

2226

75

8016

235

166

846

55

1493

229

8751

8990

1133

440

106

50M

edia

n60

543

173

32

179

52

726

130

054

434

21

987

115

8133

6769

524

10

42

2325

%18

175

60

00

113

31

600

60

037

119

00

081

71

6810

4650

215

00

00

0

Tabl

eV

IC

ompr

ehen

sive

set

ofre

use-

rela

ted

met

rics

for

.NE

T(i

nfog

raph

ics)

Page 15: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Nam

espa

ce

#Types

#Methods

#Rootclasses

#Rootinterfaces

MAXsizeclasstree

MAXsizeinterfacetree

#Referencednamespaces

#Referringnamespaces

#Specializednamespaces

#Specializingnamespaces

#Classes

#Interfaces

#Valuetypes

#Delegatetypes

#Generictypes

#Classarguments

#Interfacearguments

#Valuetypearguments

#Delegatearguments

#Staticclasses

#Abstractclasses

#Concreteclasses

#Staticmethods

#Abstractmethods

#Concretemethods

#Sealedclasses

#Specializableclasses

#Specializabletypes

#Sealedmethods

#Specializablemethods

#Orphanclasses

#Orphaninterfaces

#Localorphanclasses

#Localorphaninterfaces

Syst

em.W

eb.*

2327

2931

511

5618

523

4043

622

517

6720

124

211

72

1569

314

2368

6412

3323

175

1569

1879

1161

2627

553

412

3314

3415

8211

135

3548

3548

Syst

em.W

indo

ws.

*16

5829

167

749

7131

8230

814

612

6678

222

929

1408

510

7786

9020

3249

177

1040

4626

1115

2342

635

591

198

937

3367

3623

1023

12Sy

stem

.Ser

vice

Mod

el.*

1153

1146

854

597

2034

439

214

956

119

753

4766

3140

220

2944

67

129

820

1087

735

9646

346

610

729

878

2761

5252

5252

Syst

em.W

indo

ws.

Form

s.*

963

1980

141

532

89

3011

138

513

3229

012

82

7119

539

8484

2391

333

477

1146

217

1843

859

454

486

722

5481

810

911

Syst

em.D

ata.

*74

510

956

358

4525

2434

916

255

554

111

2537

5693

532

4417

276

2489

442

1814

975

8167

331

224

278

754

2831

2314

2314

Syst

em.A

ctiv

ities

.*49

057

0630

630

347

352

133

420

3024

1613

936

2923

867

432

317

5934

447

736

548

6425

017

020

032

110

6823

1223

12Sy

stem

.Com

pone

ntM

odel

.*43

428

8523

774

168

2740

1129

293

8430

271

1902

480

516

175

742

244

297

457

2131

8520

829

220

812

8023

3026

44Sy

stem

.Wor

kflow

.*41

941

0723

441

721

382

163

347

4127

42

2772

354

674

194

537

305

308

231

3568

149

198

239

343

1335

616

616

Syst

em.X

ml.*

358

5213

145

207

525

267

724

720

7813

145

4717

414

1611

26

4020

168

325

442

7634

213

233

111

1600

1112

1412

Syst

em.N

et.*

285

3361

194

93

427

1915

319

810

5819

1531

169

1144

264

623

169

340

209

2812

5514

315

390

909

163

165

Syst

em.D

irec

tory

Serv

ices

.*26

520

0912

222

235

91

197

626

296

221

631

1911

186

121

2318

6513

184

184

122

264

Syst

em25

740

0533

1631

4725

698

6513

816

5548

5222

1058

926

2812

19

1311

818

4116

320

0132

106

122

643

590

33

56

Syst

em.S

ecur

ity.C

rypt

ogra

phy.

*25

018

2694

38

522

176

220

33

4468

44

774

33

4016

027

372

1481

9311

011

315

655

11

1M

icro

soft

.Vis

ualB

asic

.*23

558

0612

120

382

393

121

163

2047

53

1884

140

1721

3412

24

157

1127

8645

9357

106

126

102

282

217

217

Syst

em.R

untim

e.In

tero

pSer

vice

s.*

235

1235

6575

21

1453

514

6877

891

526

159

1312

62

363

282

799

154

5117

9412

836

423

75M

icro

soft

.JSc

ript

.*20

419

0847

3318

723

17

115

636

1214

5685

727

115

140

493

187

1228

8076

112

114

767

523

523

Syst

em.D

raw

ing.

*19

125

1496

67

116

117

610

76

699

823

178

1457

785

102

744

8016

9060

4753

7136

01

21

3Sy

stem

.Run

time.

Rem

otin

g.*

190

1354

5146

439

2520

75

113

659

370

528

121

38

26

105

348

175

831

4172

137

257

396

315

316

Syst

em.C

onfig

urat

ion.

*18

614

3179

1814

522

218

1714

618

157

863

7522

241

215

129

9311

912

1975

7189

5454

31

122

12Sy

stem

.Dia

gnos

tics.

*17

314

7210

911

51

2139

74

126

1134

278

133

556

204

511

726

110

711

0447

7990

5232

510

10Sy

stem

.IO.*

123

1579

612

82

2445

913

802

347

664

8311

2280

49

6729

976

1204

2654

5611

052

82

12

1Sy

stem

.Refl

ectio

n.*

113

1630

622

14

1659

511

692

393

1149

1013

496

1059

204

5513

7141

2830

173

704

12

1Sy

stem

.Ent

erpr

iseS

ervi

ces.

*11

151

222

2625

184

32

6326

2255

414

117

162

5477

381

5013

3914

498

56

Syst

em.C

odeD

om.*

105

819

303

101

1915

55

953

755

42

149

161

490

2881

710

293

9639

183

23

Syst

em.Id

entit

yMod

el.*

102

722

492

72

242

52

953

442

118

836

721

6711

175

536

392

959

307

51

81

Mic

roso

ft.B

uild

.*96

1363

3510

99

172

32

6717

84

583

714

210

613

14

6210

593

1165

760

7717

719

3Sy

stem

.Man

agem

ent.*

9362

343

27

117

17

173

212

640

565

119

341

765

705

548

1558

6051

922

2Sy

stem

.Thr

eadi

ng.*

8011

4056

13

117

596

453

117

94

527

4476

733

27

343

402

573

313

4041

2899

11

Syst

em.R

untim

e.Se

rial

izat

ion.

*74

713

4715

35

2049

737

5315

667

647

171

143

446

8810

552

035

1833

6123

62

63

9Sy

stem

.Sec

urity

.Acc

essC

ontr

ol74

472

84

1310

43

5321

327

344

12

2033

4223

407

3122

2224

110

14

Syst

em.S

ecur

ity.P

erm

issi

ons

7056

96

32

1615

384

1251

316

125

6115

66

4538

452

744

710

4515

01

Syst

em.R

untim

e.C

ompi

lerS

ervi

ces

6916

358

23

112

404

263

24

599

442

417

343

618

9432

3133

2816

11

21

Syst

em.L

inq.

*62

1316

136

256

1313

32

489

511

1366

520

127

292

36

3995

818

340

2127

3669

140

12

12

Syst

em.A

ddIn

.*60

308

1713

2617

51

1728

157

132

2798

73

1467

116

125

107

356

128

2626

Syst

em.X

aml.*

6083

726

137

318

48

343

134

140

744

8613

33

3720

353

581

142

5534

215

101

11Sy

stem

.Mes

sagi

ng.*

5262

327

11

320

111

129

120

219

728

238

1529

363

584

326

2725

44M

icro

soft

.Win

32.*

4934

027

618

324

432

107

151

1412

437

28

2295

623

914

1818

165

33

Syst

em.S

ecur

ity.P

olic

y45

543

126

1010

1815

52

357

329

45

641

232

4815

480

296

1397

130

11

Syst

em.G

loba

lizat

ion

3995

814

1112

564

129

1023

62

1009

12

2618

824

746

326

269

497

Mic

roso

ft.V

isua

lC.*

3853

28

123

54

119

172

3821

881

676

1924

204

304

1936

1134

215

15Sy

stem

.Tra

nsac

tions

.*38

176

163

42

138

61

226

73

8514

4110

220

6413

999

1319

837

66

Syst

em.S

ecur

ity36

341

175

317

444

1422

68

184

2888

31

219

9224

225

148

1416

762

2Sy

stem

.Col

lect

ions

.Gen

eric

3156

63

519

1151

526

1713

129

128

5913

920

314

3372

461

116

2923

910

73

31

Syst

em.R

untim

e.D

urab

leIn

stan

cing

3028

312

210

32

326

41

144

2793

95

2126

257

818

181

201

3Sy

stem

.Col

lect

ions

2529

21

712

858

349

1311

114

716

861

39

1940

233

211

2247

182

35

Syst

em.T

ext

2540

111

59

513

124

110

51

579

717

3123

347

1311

111

232

22

Syst

em.D

eplo

ymen

t.*25

153

184

216

61

211

374

320

212

1914

139

120

201

13Sy

stem

.Run

time.

Cac

hing

.*24

157

133

312

15

215

33

312

78

248

411

430

123

69

125

741

31

3Sy

stem

.Ser

vice

Proc

ess.

*21

175

1215

26

129

598

5612

2415

11

1111

29Sy

stem

.Res

ourc

es.*

2022

010

41

220

95

315

41

176

874

11

1425

1418

15

1014

2455

Syst

em.D

ynam

ic20

173

42

122

146

73

182

190

116

214

412

1714

42

1618

5748

131

131

Syst

em.S

ecur

ity.P

rinc

ipal

1812

24

22

213

175

310

26

5645

19

3311

783

79

1543

Mic

roso

ft.S

qlSe

rver

.Ser

ver

1825

512

11

101

31

131

457

215

1312

224

110

34

184

11

Syst

em.S

ecur

ity.A

uthe

ntic

atio

n.*

1638

81

125

71

97

194

61

82

135

36

61

81

1Sy

stem

.Col

lect

ions

.Spe

cial

ized

1519

39

21

110

274

810

22

191

861

31

914

717

210

1271

461

Syst

em.D

evic

e.L

ocat

ion

1310

26

21

53

18

23

332

1820

82

1486

17

918

19Sy

stem

.Tex

t.Reg

ular

Exp

ress

ions

1214

09

111

174

210

11

861

796

28

264

110

1010

1621

22

Acc

essi

bilit

y10

545

22

12

21

63

307

145

139

151

754

34

Syst

em.C

olle

ctio

ns.C

oncu

rren

t10

220

42

310

74

18

29

428

128

41

25

3110

179

810

6716

22

Syst

em.R

untim

e.V

ersi

onin

g8

226

65

16

210

61

57

155

11

13

Mic

roso

ft.C

Shar

p.*

725

513

62

52

2110

141

412

131

44

5Sy

stem

.Col

lect

ions

.Obj

ectM

odel

717

54

1025

511

77

451

6314

16

41

170

77

114

301

1Sy

stem

.Run

time.

Con

stra

ined

Exe

cutio

n5

33

23

13

32

12

32

11

11

Syst

em.R

untim

e5

124

1810

22

41

101

37

53

11

11

Syst

em.T

imer

s4

264

43

23

16

35

33

125

33

27

Syst

em.M

edia

345

39

32

312

156

310

351

22

13

Syst

em.R

untim

e.H

ostin

g2

122

54

12

41

21

111

11

3Sy

stem

.Run

time.

Exc

eptio

nSer

vice

s2

12

11

22

11

11

Syst

em.N

umer

ics

218

43

21

213

724

514

836

66

75%

190

1579

6213

87

2226

75

113

1727

42

837

8567

437

311

105

297

107

1219

4476

9511

449

72

103

10M

edia

n60

543

173

32

179

52

353

70

021

816

128

71

332

6424

381

1018

2939

128

10

11

25%

1817

56

00

011

33

112

02

00

743

610

00

919

412

52

710

630

00

00

Tabl

eV

IIC

ompr

ehen

sive

set

ofre

use-

rela

ted

met

rics

for

.NE

T(n

umbe

rs)

Page 16: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Nam

espa

ce

System.ServiceModel.*

System.Web.*

Microsoft.VisualBasic.*

System.Workflow.*

System.Activities.*

System.Data.*

System.Windows.Forms.*

System.Net.*

System.ComponentModel.*

System

System.Runtime.Remoting.*

System.Xml.*

System.IdentityModel.*

Microsoft.JScript.*

System.DirectoryServices.*

System.Configuration.*

System.Security.Cryptography.*

System.Deployment.*

System.Diagnostics.*

System.IO.*

System.Runtime.Serialization.*

System.Resources.*

System.Messaging.*

System.CodeDom.*

System.Security.Policy

System.Runtime

System.EnterpriseServices.*

System.Xaml.*

System.Security

Microsoft.Win32.*

System.Threading.*

System.AddIn.*

System.Management.*

System.Reflection.*

System.Drawing.*

System.Security.Permissions

System.ServiceProcess.*

System.Runtime.InteropServices.*

System.Dynamic

Microsoft.CSharp.*

System.Security.Principal

System.Security.AccessControl

System.Linq.*

System.Transactions.*

System.Runtime.CompilerServices

System.Globalization

System.Security.Authentication.*

System.Runtime.Caching.*

System.Windows.*

System.Collections.Generic

System.Text.RegularExpressions

System.Collections.ObjectModel

System.Collections.Concurrent

Microsoft.SqlServer.Server

System.Collections.Specialized

System.Runtime.DurableInstancing

System.Text

System.Media

System.Collections

System.Runtime.Versioning

Microsoft.VisualC.*

System.Runtime.Hosting

System.Device.Location

System.Timers

System.Numerics

System.Runtime.ConstrainedExecution

System.Runtime.ExceptionServices

Syst

em.S

ervi

ceM

odel

.*••

•••

•••

••

••••••

••••

••••••

•••

•••

•Sy

stem

.Web

.*

•••••

•••

••••

••

••••

•••••

••••

••••

••••

••

••

Mic

roso

ft.V

isua

lBas

ic.*

••••••

•••••

••

••••

••••

••

•••

••

••••

••••

•Sy

stem

.Wor

kflow

.*•

••••••••

•••

••••

••

••

•••

••

•••

•••

••

••

•Sy

stem

.Act

iviti

es.*

••

••

••

•••

••

•••

••

••

••••

•••••

•••

••

Syst

em.D

ata.

*•

•••

••

•••

••

•••

••

••

••••

•••

••

•Sy

stem

.Win

dow

s.Fo

rms.

*•••

••

••

•••

••

••

••

•••

••••

Syst

em.N

et.*

•••

•••

••

••

••

•••

••

••

Syst

em.C

ompo

nent

Mod

el.*

••

••

••

•Sy

stem

Syst

em.R

untim

e.R

emot

ing.

*

•••

•••

•••

••

••

••

••

••

Syst

em.X

ml.*

••

••

••

••

••

••

••

•Sy

stem

.Iden

tityM

odel

.*•

•••••

•••

•••

••

••••

•••

••

Mic

roso

ft.J

Scri

pt.*

••••

••

••••

••

•••

••

•••

••

•Sy

stem

.Dir

ecto

rySe

rvic

es.*

•••

••••

••

••

•••

•••

••

••

•Sy

stem

.Con

figur

atio

n.*

•••

•••

•••

••

••

••

Syst

em.S

ecur

ity.C

rypt

ogra

phy.

*

••

••

••

••

••

••

••

•Sy

stem

.Dep

loym

ent.*

•••••

••

•••

••

••

••

••

Syst

em.D

iagn

ostic

s.*

••

Syst

em.IO

.*

••

••

•Sy

stem

.Run

time.

Seri

aliz

atio

n.*

••

Syst

em.R

esou

rces

.*•

••••

••

•••

••

••

•••

Syst

em.M

essa

ging

.*•

••

•••

•••

••

•••

••

••

••

Syst

em.C

odeD

om.*

•••

•••

••

••

••

••

••

Syst

em.S

ecur

ity.P

olic

y

••

••

••

Syst

em.R

untim

e•

•••

••

•••

•••

••

Syst

em.E

nter

pris

eSer

vice

s.*

••••

••••

•••

••

••

•Sy

stem

.Xam

l.*••

••••

••

••

••

••

•Sy

stem

.Sec

urity

••

Mic

roso

ft.W

in32

.*

••

••

Syst

em.T

hrea

ding

.*

Syst

em.A

ddIn

.*•••

•••

••

••

••

••

••

Syst

em.M

anag

emen

t.*••

••••

••

••

••

••

••

•Sy

stem

.Refl

ectio

n.*

Syst

em.D

raw

ing.

*

••

•••

••

••

••

••

•Sy

stem

.Sec

urity

.Per

mis

sion

s

••

Syst

em.S

ervi

cePr

oces

s.*

•••

••

••

••••

••

••

Syst

em.R

untim

e.In

tero

pSer

vice

s.*

Syst

em.D

ynam

ic•••

••

••

••

•M

icro

soft

.CSh

arp.

*•

••

••

••

••

••

Syst

em.S

ecur

ity.P

rinc

ipal

••

••

••

•Sy

stem

.Sec

urity

.Acc

essC

ontr

ol•

••

•Sy

stem

.Lin

q.*

•••

••

•••

••

Syst

em.T

rans

actio

ns.*

••

••

••

•••

••

Syst

em.R

untim

e.C

ompi

lerS

ervi

ces

•Sy

stem

.Glo

baliz

atio

n

Sy

stem

.Sec

urity

.Aut

hent

icat

ion.

*••

••

••

••

••

•Sy

stem

.Run

time.

Cac

hing

.*•

••

••

••

••

••

Syst

em.W

indo

ws.

*••

••

•••

••

Syst

em.C

olle

ctio

ns.G

ener

ic

Sy

stem

.Tex

t.Reg

ular

Exp

ress

ions

••

••

••

Syst

em.C

olle

ctio

ns.O

bjec

tMod

el

••

•Sy

stem

.Col

lect

ions

.Con

curr

ent

••

••

••

•M

icro

soft

.Sql

Serv

er.S

erve

r

•••

••

••

•Sy

stem

.Col

lect

ions

.Spe

cial

ized

••

•••

••

Syst

em.R

untim

e.D

urab

leIn

stan

cing

••

•••

••

Syst

em.T

ext

Syst

em.M

edia

•••

••

••

••

Sy

stem

.Col

lect

ions

Sy

stem

.Run

time.

Ver

sion

ing

••

••

••

M

icro

soft

.Vis

ualC

.*•

••

••

Sy

stem

.Run

time.

Hos

ting

Syst

em.D

evic

e.L

ocat

ion

••

••

Syst

em.T

imer

s••

••

Sy

stem

.Num

eric

s•

••

Sy

stem

.Run

time.

Con

stra

ined

Exe

cutio

n•

Syst

em.R

untim

e.E

xcep

tionS

ervi

ces

Tabl

eV

III

Inte

r-na

mes

pace

refe

renc

ing

with

inth

e.N

ET

Fram

ewor

k

•in

dica

tes

that

type

sfr

oma

hori

zont

alna

mes

pace

refe

renc

ety

pes

from

ave

rtic

alon

e.

indi

cate

sth

atre

fere

ncin

gha

ppen

sin

both

way

s.T

his

also

appl

ies

whe

nty

pes

refe

renc

eot

her

type

sfr

omth

esa

me

nam

espa

ce.

Page 17: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Nam

espa

ce

System.Web.*

System.ServiceModel.*

System.Data.*

System.Workflow.*

System.Net.*

System.Activities.*

System.Windows.Forms.*

Microsoft.VisualBasic.*

System.ComponentModel.*

System.Messaging.*

System.DirectoryServices.*

System

System.IO.*

System.Configuration.*

System.Xaml.*

Microsoft.JScript.*

System.Runtime.Serialization.*

System.Runtime.Remoting.*

System.Diagnostics.*

System.Management.*

System.Dynamic

System.Xml.*

System.Security.Authentication.*

System.Drawing.*

System.Deployment.*

System.Threading.*

System.Security.Cryptography.*

System.ServiceProcess.*

System.Transactions.*

System.Runtime.InteropServices.*

System.Collections.Generic

System.Security.Policy

System.Reflection.*

System.Collections.ObjectModel

System.Resources.*

System.Security.Principal

System.AddIn.*

System.CodeDom.*

System.IdentityModel.*

System.Runtime.Caching.*

System.Windows.*

Microsoft.VisualC.*

System.Security

System.Runtime.CompilerServices

Microsoft.Win32.*

System.Collections.Concurrent

System.Globalization

System.Security.Permissions

System.Security.AccessControl

System.Text.RegularExpressions

System.Collections.Specialized

System.Collections

System.Text

System.Linq.*

Microsoft.SqlServer.Server

System.Device.Location

System.EnterpriseServices.*

Microsoft.CSharp.*

System.Runtime

System.Media

System.Timers

System.Runtime.DurableInstancing

System.Runtime.Hosting

System.Runtime.ConstrainedExecution

System.Runtime.ExceptionServices

System.Runtime.Versioning

System.Numerics

Syst

em.W

eb.*

••

•••

••

••

••

•••

••

••••

Syst

em.S

ervi

ceM

odel

.*

••••

••

••

••

••

••

••

•Sy

stem

.Dat

a.*

••

••••

••

••

••

••

•Sy

stem

.Wor

kflow

.*•

••

•••

••

••

••

Syst

em.N

et.*

•••

••

••

••

••

Syst

em.A

ctiv

ities

.*•

••

••

••

••

••

Syst

em.W

indo

ws.

Form

s.*

••

••

•••

••

•M

icro

soft

.Vis

ualB

asic

.*•••

••

••

••

••

Syst

em.C

ompo

nent

Mod

el.*

••

••

•Sy

stem

.Mes

sagi

ng.*

••

••

••

••

••

Syst

em.D

irec

tory

Serv

ices

.*•

•••

••

•Sy

stem

Sy

stem

.IO.*

••

••

•Sy

stem

.Con

figur

atio

n.*

••

••

••

Syst

em.X

aml.*

••

••

••

Mic

roso

ft.J

Scri

pt.*

••

••

•Sy

stem

.Run

time.

Seri

aliz

atio

n.*

Syst

em.R

untim

e.R

emot

ing.

*•

•••

•Sy

stem

.Dia

gnos

tics.

*•

••

••

Syst

em.M

anag

emen

t.*•

••

••

Syst

em.D

ynam

ic•

••

••

Syst

em.X

ml.*

••

••

Syst

em.S

ecur

ity.A

uthe

ntic

atio

n.*

••

••

•Sy

stem

.Dra

win

g.*

••

•Sy

stem

.Dep

loym

ent.*

••

••

Syst

em.T

hrea

ding

.*•

••

•Sy

stem

.Sec

urity

.Cry

ptog

raph

y.*

••

••

Syst

em.S

ervi

cePr

oces

s.*

••

••

••

Syst

em.T

rans

actio

ns.*

••

••

Syst

em.R

untim

e.In

tero

pSer

vice

s.*

•Sy

stem

.Col

lect

ions

.Gen

eric

•Sy

stem

.Sec

urity

.Pol

icy

••

•Sy

stem

.Refl

ectio

n.*

•Sy

stem

.Col

lect

ions

.Obj

ectM

odel

••

Syst

em.R

esou

rces

.*•

••

Syst

em.S

ecur

ity.P

rinc

ipal

••

•Sy

stem

.Add

In.*

••

•Sy

stem

.Cod

eDom

.*•

••

Syst

em.Id

entit

yMod

el.*

••

•Sy

stem

.Run

time.

Cac

hing

.*•

••

Syst

em.W

indo

ws.

*•

••

Mic

roso

ft.V

isua

lC.*

••

Syst

em.S

ecur

ity

•Sy

stem

.Run

time.

Com

pile

rSer

vice

s•

•M

icro

soft

.Win

32.*

Syst

em.C

olle

ctio

ns.C

oncu

rren

t•

•Sy

stem

.Glo

baliz

atio

n•

•Sy

stem

.Sec

urity

.Per

mis

sion

s•

•Sy

stem

.Sec

urity

.Acc

essC

ontr

ol•

•Sy

stem

.Tex

t.Reg

ular

Exp

ress

ions

••

Syst

em.C

olle

ctio

ns.S

peci

aliz

ed•

••

Syst

em.C

olle

ctio

ns

Syst

em.T

ext

••

Sy

stem

.Lin

q.*

••

M

icro

soft

.Sql

Serv

er.S

erve

r•

Syst

em.D

evic

e.L

ocat

ion

••

Sy

stem

.Ent

erpr

iseS

ervi

ces.

*•

Mic

roso

ft.C

Shar

p.*

••

Syst

em.R

untim

e•

•Sy

stem

.Med

ia•

•Sy

stem

.Tim

ers

••

Syst

em.R

untim

e.D

urab

leIn

stan

cing

Syst

em.R

untim

e.H

ostin

g•

Syst

em.R

untim

e.C

onst

rain

edE

xecu

tion

•Sy

stem

.Run

time.

Exc

eptio

nSer

vice

s•

Syst

em.R

untim

e.V

ersi

onin

g•

Syst

em.N

umer

ics

Tabl

eIX

Inte

r-na

mes

pace

spec

ializ

atio

nw

ithin

the

.NE

Tfr

amew

ork

•in

dica

tes

that

type

sfr

oma

hori

zont

alna

mes

pace

spec

ializ

ety

pes

from

ave

rtic

alon

e.

indi

cate

sth

atsp

ecia

lizat

ion

happ

ens

inbo

thw

ays.

Thi

sal

soap

plie

sw

hen

type

ssp

ecia

lize

othe

rty

pes

from

the

sam

ena

mes

pace

.

Page 18: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

type

sm

etho

dsrC

rIm

axC

Tm

axIT

refd

Nre

fgN

spec

dNsp

ecgN

pCpI

pVT

pDT

pGT

pCA

pIA

pVTA

pDA

pStC

pAC

pCrC

pStM

pAM

pCrM

pSld

CpS

pCpS

pTpS

ldM

pSpM

pOC

pOI

pOT

pLO

Cty

pes

met

hods

0.95

***

rC0.

93**

*0.

87**

*rI

0.76

***

0.74

***

0.64

***

max

CT

0.77

***

0.77

***

0.74

***

0.50

***

max

IT0.

67**

*0.

67**

*0.

49**

*0.

86**

*0.

41**

*re

fdN

0.86

***

0.81

***

0.86

***

0.65

***

0.73

***

0.60

***

refg

N0.

25*

0.27

*0.

200.

110.

190.

170.

18sp

ecdN

0.80

***

0.77

***

0.80

***

0.62

***

0.70

***

0.54

***

0.85

***

0.15

spec

gN0.

49**

*0.

49**

*0.

38**

0.51

***

0.30

*0.

50**

*0.

39**

*0.

68**

*0.

40**

*pC

-0.0

6-0

.06

0.04

-0.2

20.

24*

-0.2

00.

07-0

.07

-0.0

4-0

.20

pI0.

29*

0.28

*0.

150.

76**

*0.

090.

70**

*0.

190.

020.

220.

36**

-0.3

8**

pVT

0.09

0.05

0.11

-0.1

1-0

.07

-0.1

40.

020.

050.

030.

03-0

.63*

**-0

.19

pDT

0.38

**0.

37**

0.47

***

0.20

0.35

**0.

130.

37**

0.11

0.45

***

0.20

-0.1

8-0

.06

0.02

pGT

0.14

0.19

0.07

0.15

0.12

0.23

0.01

-0.0

70.

090.

040.

030.

20-0

.20

-0.0

3pC

A0.

29*

0.17

0.29

*0.

36**

0.33

**0.

34**

0.36

**-0

.11

0.30

*0.

110.

25*

0.33

**-0

.36*

*0.

02-0

.03

pIA

0.24

*0.

24*

0.18

0.40

***

0.07

0.41

***

0.17

-0.0

10.

24*

0.21

-0.3

7**

0.40

***

-0.0

30.

30*

0.19

0.16

pVTA

-0.1

1-0

.01

-0.1

3-0

.29*

-0.2

2-0

.23

-0.1

70.

33**

-0.1

20.

02-0

.23

-0.2

7*0.

44**

*-0

.07

-0.0

4-0

.70*

**-0

.23

pDA

0.28

*0.

30*

0.38

**0.

220.

29*

0.16

0.30

*-0

.02

0.41

***

0.14

0.11

0.04

-0.2

6*0.

59**

*0.

38**

0.04

0.27

*-0

.21

pStC

0.24

*0.

190.

30*

0.26

*0.

220.

26*

0.39

***

0.29

*0.

180.

140.

070.

20-0

.09

0.07

0.13

0.17

0.18

-0.0

80.

15pA

C0.

28*

0.29

*0.

180.

110.

35**

0.20

0.17

0.36

**0.

230.

48**

*0.

180.

00-0

.15

0.06

0.13

0.12

-0.0

1-0

.06

0.07

-0.0

6pC

rC-0

.02

-0.0

10.

010.

10-0

.10

-0.0

2-0

.03

-0.3

1**

0.03

-0.2

3-0

.14

0.13

0.03

0.07

-0.1

70.

000.

03-0

.06

0.01

-0.3

5**

-0.7

0***

pStM

0.12

0.11

0.17

0.05

0.13

0.05

0.19

0.31

**0.

01-0

.03

-0.0

9-0

.03

0.22

-0.0

10.

01-0

.08

0.09

0.25

*-0

.03

0.59

***

-0.1

2-0

.30*

pAM

0.34

**0.

26*

0.20

0.63

***

0.15

0.51

***

0.19

0.11

0.25

*0.

39**

-0.2

7*0.

80**

*-0

.18

-0.0

70.

110.

38**

0.21

-0.2

1-0

.03

0.10

0.21

-0.0

3-0

.10

pCrM

-0.0

7-0

.05

-0.0

4-0

.27*

0.01

-0.1

8-0

.04

-0.1

80.

06-0

.07

0.37

**-0

.39*

**-0

.16

0.06

-0.1

00.

03-0

.21

-0.1

40.

05-0

.50*

**0.

160.

23-0

.75*

**-0

.39*

**pS

ldC

0.18

0.07

0.17

0.17

0.07

0.13

0.13

0.12

-0.0

50.

100.

060.

040.

18-0

.25*

-0.1

70.

03-0

.14

-0.0

4-0

.28*

0.14

0.03

-0.0

80.

210.

03-0

.09

pSpC

-0.1

0-0

.03

-0.0

9-0

.11

-0.0

1-0

.07

-0.0

5-0

.07

0.13

-0.0

30.

020.

02-0

.26*

0.28

*0.

200.

040.

15-0

.04

0.34

**-0

.09

0.03

0.16

-0.2

9*0.

040.

17-0

.92*

**pS

pT-0

.07

-0.0

2-0

.08

-0.0

1-0

.05

0.02

-0.0

4-0

.07

0.13

0.00

-0.0

80.

18-0

.25*

0.24

*0.

230.

070.

25*

-0.0

60.

32**

-0.0

2-0

.02

0.18

-0.2

4*0.

170.

06-0

.89*

**0.

96**

*pS

ldM

0.15

0.15

0.04

0.29

*0.

110.

48**

*0.

160.

29*

0.20

0.37

**0.

060.

37**

-0.2

8*0.

030.

25*

0.27

*0.

05-0

.05

0.10

0.05

0.24

-0.1

20.

000.

29*

0.00

-0.0

80.

110.

14pS

pM0.

230.

200.

140.

38**

0.11

0.29

*0.

090.

160.

150.

32**

-0.2

20.

40**

*0.

00-0

.02

-0.3

1*0.

150.

06-0

.03

-0.2

6*-0

.05

0.26

*-0

.03

-0.2

5*0.

60**

*-0

.08

0.12

-0.0

40.

03-0

.07

pOC

0.31

**0.

31**

0.29

*0.

170.

37**

0.16

0.29

*0.

230.

41**

*0.

32**

0.25

*-0

.01

-0.3

0*0.

200.

220.

170.

12-0

.10

0.38

**0.

020.

70**

*-0

.49*

**-0

.05

0.20

0.05

-0.1

10.

150.

110.

190.

03pO

I0.

48**

*0.

43**

*0.

49**

*0.

65**

*0.

41**

*0.

40**

*0.

39**

*-0

.11

0.46

***

0.17

-0.1

30.

52**

*-0

.05

0.15

0.05

0.26

*0.

19-0

.22

0.18

0.20

-0.0

10.

040.

080.

52**

*-0

.35*

*0.

21-0

.17

-0.0

9-0

.09

0.43

***

0.12

pOT

0.27

*0.

24*

0.23

0.45

***

0.21

0.26

*0.

17-0

.01

0.36

**0.

20-0

.10

0.48

***

-0.2

10.

110.

220.

170.

27*

-0.1

30.

24*

0.06

0.29

*-0

.16

-0.0

20.

57**

*-0

.30*

-0.0

20.

080.

160.

000.

32**

0.59

***

0.67

***

pLO

C0.

190.

180.

110.

130.

160.

130.

100.

35**

0.21

0.51

***

0.09

0.05

-0.1

90.

010.

160.

090.

14-0

.10

0.16

0.04

0.81

***

-0.6

1***

-0.0

90.

24*

0.07

0.00

0.05

0.04

0.15

0.15

0.80

***

0.00

0.46

***

pLO

I0.

44**

*0.

41**

*0.

43**

*0.

66**

*0.

28*

0.43

***

0.30

*0.

070.

40**

*0.

34**

-0.2

9*0.

62**

*-0

.01

0.18

-0.0

10.

210.

23-0

.14

0.12

0.17

0.04

0.04

0.06

0.59

***

-0.3

6**

0.19

-0.1

4-0

.05

-0.0

10.

51**

*0.

070.

91**

*0.

62**

*0.

07

Tabl

eX

Spea

rman

’sra

nkco

rrel

atio

nco

effic

ient

for

reus

e-re

late

dm

etri

cs

Page 19: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

0 10 20 30 40 50 60

System.Runtime.CompilerServicesSystem.Security.Cryptography.*

Microsoft.SqlServer.ServerSystem.Net.*

System.Collections.SpecializedSystem.Collections.Generic

System.Security.PermissionsSystem.Security.Authentication.*

System.Management.*System.Runtime.Caching.*

System.Runtime.Remoting.*System.Runtime.Serialization.*

System.CodeDom.*System.IdentityModel.*

System.Runtime.DurableInstancingSystem.Runtime.InteropServices.*

System.Drawing.*System.Transactions.*

System.Configuration.*System.Windows.Forms.*

System.EnterpriseServices.*System.ServiceModel.*

System.Data.*System.Xml.*

System.Windows.*System.Xaml.*

Microsoft.VisualC.*System.Workflow.*

Microsoft.VsaSystem.Dynamic

Microsoft.JScript.*System.AddIn.*

Microsoft.VisualBasic.*System.Activities.*

System.ComponentModel.*System.Web.*

11111111

2222

333

444

55

66

777

899

1111

1416

1717

4352

Figure 3. .NET namespaces sorted by the number of orphan types

Page 20: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

System.Runtime.CompilerServices.CallSiteBinderSystem.Security.Cryptography.Xml.IRelDecryptorMicrosoft.SqlServer.Server.IBinarySerializeSystem.Net.ICredentialPolicySystem.Collections.Specialized.INotifyCollectionChangedSystem.Collections.Generic.SynchronizedKeyedCollection‘2System.Security.Permissions.ResourcePermissionBaseSystem.Security.Authentication.ExtendedProtection.ChannelBindingSystem.Management.Instrumentation.BaseEventSystem.Management.Instrumentation.InstanceSystem.Runtime.Caching.Hosting.IApplicationIdentifierSystem.Runtime.Caching.Hosting.IMemoryCacheManagerSystem.Runtime.Remoting.Channels.IAuthorizeRemotingConnectionSystem.Runtime.Remoting.Services.RemotingClientProxySystem.Runtime.Serialization.IExtensibleDataObjectSystem.Runtime.Serialization.IDataContractSurrogateSystem.CodeDom.Compiler.CodeDomProviderSystem.CodeDom.Compiler.CodeCompilerSystem.CodeDom.Compiler.CodeParserSystem.IdentityModel.Selectors.SecurityTokenManagerSystem.IdentityModel.Selectors.SecurityTokenSerializerSystem.IdentityModel.Selectors.SecurityTokenVersionSystem.Runtime.DurableInstancing.InstancePersistenceCommandSystem.Runtime.DurableInstancing.InstancePersistenceEvent‘1System.Runtime.DurableInstancing.InstanceStoreSystem.Runtime.InteropServices.ComTypes.IDataObjectSystem.Runtime.InteropServices.ComTypes.IAdviseSinkSystem.Runtime.InteropServices.ComTypes.IEnumFORMATETCSystem.Runtime.InteropServices.ComTypes.IEnumSTATDATASystem.Drawing.Design.ToolboxServiceSystem.Drawing.Design.IToolboxUserSystem.Drawing.Design.IPropertyValueUIServiceSystem.Drawing.Design.IToolboxItemProviderSystem.Transactions.IPromotableSinglePhaseNotificationSystem.Transactions.ISinglePhaseNotificationSystem.Transactions.ISimpleTransactionSuperiorSystem.Transactions.IDtcTransactionSystem.Configuration.Install.ComponentInstallerSystem.Configuration.ApplicationSettingsBaseSystem.Configuration.IConfigurationSystemSystem.Configuration.IPersistComponentSettingsSystem.Configuration.ISettingsProviderServiceSystem.Windows.Forms.Design.IMenuEditorServiceSystem.Windows.Forms.Design.ComponentEditorPageSystem.Windows.Forms.AxHostSystem.Windows.Forms.IFileReaderServiceSystem.Windows.Forms.Design.IUIServiceSystem.EnterpriseServices.IPlaybackControlSystem.EnterpriseServices.ITransactionSystem.EnterpriseServices.IProcessInitializerSystem.EnterpriseServices.IProcessInitControlSystem.EnterpriseServices.IServiceCallSystem.EnterpriseServices.IAsyncErrorNotifySystem.ServiceModel.Activities.IWorkflowInstanceManagementSystem.ServiceModel.Activities.IReceiveMessageCallbackSystem.ServiceModel.Activities.ISendMessageCallbackSystem.ServiceModel.Discovery.DiscoveryProxySystem.ServiceModel.Channels.IHttpCookieContainerManagerSystem.ServiceModel.PeerMessagePropagationFilterSystem.Data.TypedTableBase‘1System.Data.Mapping.EntityViewContainerSystem.Data.Objects.DataClasses.ComplexObjectSystem.Data.Objects.DataClasses.EntityObjectSystem.Data.Services.IExpandProviderSystem.Data.Services.Providers.IDataServicePagingProviderSystem.Data.Services.Providers.IDataServiceStreamProviderSystem.Xml.IStreamProviderSystem.Xml.Serialization.Advanced.SchemaImporterExtensionSystem.Xml.XPath.XPathExpressionSystem.Xml.Xsl.IXsltContextVariableSystem.Xml.Xsl.XsltContextSystem.Xml.Xsl.IXsltContextFunctionSystem.Xml.Serialization.XmlSerializerImplementationSystem.Windows.Markup.IQueryAmbientSystem.Windows.Markup.IComponentConnectorSystem.Windows.Markup.IUriContextSystem.Windows.Markup.IValueSerializerContextSystem.Windows.Markup.INameScopeDictionarySystem.Windows.Markup.IProvideValueTargetSystem.Windows.Markup.IXamlTypeResolverSystem.Xaml.IXamlNamespaceResolverSystem.Xaml.XamlDeferringLoaderSystem.Xaml.IXamlNameResolverSystem.Xaml.IAmbientProviderSystem.Xaml.IRootObjectProviderSystem.Xaml.IDestinationTypeProviderSystem.Xaml.IXamlObjectWriterFactorySystem.Xaml.IAttachedPropertyStoreMicrosoft.VisualC.StlClr.Generic.INode‘1Microsoft.VisualC.StlClr.IDeque‘1Microsoft.VisualC.StlClr.IList‘1Microsoft.VisualC.StlClr.IQueue‘2Microsoft.VisualC.StlClr.IPriorityQueue‘2Microsoft.VisualC.StlClr.IStack‘2Microsoft.VisualC.StlClr.IVector‘1Microsoft.VisualC.StlClr.IHash‘2Microsoft.VisualC.StlClr.ITree‘2System.Workflow.Activities.WorkflowWebServiceSystem.Workflow.Activities.Rules.IRuleExpressionSystem.Workflow.Activities.WorkflowSubscriptionServiceSystem.Workflow.ComponentModel.Design.IMemberCreationServiceSystem.Workflow.ComponentModel.Design.IExtendedUIServiceSystem.Workflow.ComponentModel.Design.IExtendedUIService2System.Workflow.ComponentModel.Design.ITypeProviderCreatorSystem.Workflow.Runtime.DebugEngine.IExpressionEvaluationFrameSystem.Workflow.Runtime.DebugEngine.IWorkflowDebuggerMicrosoft.Vsa.IVsaCodeItemMicrosoft.Vsa.IVsaErrorMicrosoft.Vsa.IVsaGlobalItemMicrosoft.Vsa.IVsaItemsMicrosoft.Vsa.IVsaReferenceItemMicrosoft.Vsa.IVsaSiteMicrosoft.Vsa.IVsaPersistSiteMicrosoft.Vsa.IVsaIDESiteMicrosoft.Vsa.IVsaIDEMicrosoft.Vsa.IVsaDTEngineMicrosoft.Vsa.IVsaDTCodeItemSystem.Dynamic.BinaryOperationBinderSystem.Dynamic.ConvertBinderSystem.Dynamic.GetIndexBinderSystem.Dynamic.IInvokeOnGetBinderSystem.Dynamic.InvokeMemberBinderSystem.Dynamic.SetIndexBinderSystem.Dynamic.SetMemberBinderSystem.Dynamic.UnaryOperationBinderSystem.Dynamic.CreateInstanceBinderSystem.Dynamic.DeleteIndexBinderSystem.Dynamic.DeleteMemberBinderMicrosoft.JScript.IErrorHandlerMicrosoft.JScript.IObjectCompletionInfoMicrosoft.JScript.IMethodsCompletionInfoMicrosoft.JScript.Vsa.BaseVsaStartupMicrosoft.JScript.COMMemberInfoMicrosoft.JScript.IDebugTypeMicrosoft.JScript.IDebuggerObjectMicrosoft.JScript.FieldAccessorMicrosoft.JScript.INeedEngineMicrosoft.JScript.MethodInvokerMicrosoft.JScript.IMessageReceiverMicrosoft.JScript.ISite2Microsoft.JScript.IDefineEventMicrosoft.JScript.Vsa.IJSVsaPersistSiteSystem.AddIn.Contract.Collections.IRemoteArgumentArrayListContract

System.AddIn.Contract.Collections.IRemoteArgumentDictionaryEnumeratorContractSystem.AddIn.Contract.Collections.IEnumeratorContract‘1System.AddIn.Contract.Collections.IArrayContract‘1System.AddIn.Contract.Collections.IListContract‘1System.AddIn.Contract.IExecutorExtensionContractSystem.AddIn.Contract.ISerializableObjectContractSystem.AddIn.Contract.Automation.IRemoteTypeContractSystem.AddIn.Contract.Automation.IRemoteEventInfoContractSystem.AddIn.Contract.Automation.IRemoteFieldInfoContractSystem.AddIn.Contract.Automation.IRemoteMethodInfoContractSystem.AddIn.Contract.Automation.IRemotePropertyInfoContractSystem.AddIn.Contract.Automation.IRemoteDelegateContractSystem.AddIn.Contract.IServiceProviderContractSystem.AddIn.Contract.IProfferServiceContractSystem.AddIn.Contract.INativeHandleContractMicrosoft.VisualBasic.Compatibility.VB6.BaseDataEnvironmentMicrosoft.VisualBasic.Compatibility.VB6.IDataFormatDispMicrosoft.VisualBasic.Compatibility.VB6.IRowPositionMicrosoft.VisualBasic.Compatibility.VB6.IRowsetMicrosoft.VisualBasic.Compatibility.VB6.IRowsetChangeMicrosoft.VisualBasic.Compatibility.VB6.IColumnsInfoMicrosoft.VisualBasic.Compatibility.VB6.IRowsetInfoMicrosoft.VisualBasic.Compatibility.VB6.IRowsetIdentityMicrosoft.VisualBasic.Compatibility.VB6.IAccessorMicrosoft.VisualBasic.Compatibility.VB6.IChapteredRowsetMicrosoft.VisualBasic.Compatibility.VB6.IDataFormatMicrosoft.VisualBasic.Compatibility.VB6.IConnectionPointMicrosoft.VisualBasic.Compatibility.VB6.IConnectionPointContainerMicrosoft.VisualBasic.Compatibility.VB6.IEnumConnectionsMicrosoft.VisualBasic.Compatibility.VB6.IEnumConnectionPointsMicrosoft.VisualBasic.Compatibility.VB6.BaseOcxArrayMicrosoft.VisualBasic.CompilerServices.IVbHostSystem.Activities.Presentation.PropertyEditing.CategoryEntrySystem.Activities.Presentation.PropertyEditing.PropertyEntrySystem.Activities.Presentation.PropertyEditing.PropertyEntryCollectionSystem.Activities.Presentation.PropertyEditing.PropertyValueSystem.Activities.Presentation.PropertyEditing.PropertyValueCollectionSystem.Activities.Presentation.PropertyEditing.CategoryEditorSystem.Activities.Presentation.Hosting.IDocumentPersistenceServiceSystem.Activities.Presentation.Hosting.IMultiTargetingSupportServiceSystem.Activities.Presentation.IWorkflowDesignerStorageServiceSystem.Activities.Presentation.IIntegratedHelpServiceSystem.Activities.Presentation.IActivityToolboxServiceSystem.Activities.Presentation.IXamlLoadErrorServiceSystem.Activities.Presentation.Hosting.ICommandServiceSystem.Activities.Presentation.Validation.IValidationErrorServiceSystem.Activities.Presentation.View.IExpressionEditorInstanceSystem.Activities.Presentation.View.IExpressionEditorServiceSystem.Activities.Presentation.IModalServiceSystem.ComponentModel.Composition.IPartImportsSatisfiedNotificationSystem.ComponentModel.DataAnnotations.IValidatableObjectSystem.ComponentModel.Design.IComponentDesignerDebugServiceSystem.ComponentModel.Design.IComponentDesignerStateServiceSystem.ComponentModel.Design.IDesignTimeAssemblyLoaderSystem.ComponentModel.Design.IMultitargetHelperServiceSystem.ComponentModel.Design.ObjectSelectorEditorSystem.ComponentModel.Design.Data.DataSourceDescriptorSystem.ComponentModel.Design.Data.DataSourceGroupSystem.ComponentModel.Design.Data.DataSourceProviderServiceSystem.ComponentModel.Design.Data.DesignerDataStoredProcedureSystem.ComponentModel.Design.Data.DesignerDataTableSystem.ComponentModel.Design.Data.DesignerDataViewSystem.ComponentModel.Design.Data.IDataEnvironmentSystem.ComponentModel.Design.Data.IDesignerDataSchemaSystem.ComponentModel.Design.Serialization.ICodeDomDesignerReloadSystem.ComponentModel.Design.EventBindingServiceSystem.ComponentModel.Design.UndoEngineSystem.ComponentModel.Design.Serialization.CodeDomDesignerLoaderSystem.ComponentModel.ISynchronizeInvokeSystem.ComponentModel.INotifyPropertyChangedSystem.ComponentModel.IBindingListViewSystem.ComponentModel.ITypedListSystem.ComponentModel.ISupportInitializeNotificationSystem.ComponentModel.IListSourceSystem.ComponentModel.IEditableObjectSystem.ComponentModel.IDataErrorInfoSystem.ComponentModel.INotifyPropertyChangingSystem.ComponentModel.Design.IRootDesignerSystem.ComponentModel.Design.DesignerOptionServiceSystem.ComponentModel.ComponentEditorSystem.ComponentModel.ContainerFilterServiceSystem.ComponentModel.IComNativeDescriptorHandlerSystem.ComponentModel.IIntellisenseBuilderSystem.ComponentModel.InstanceCreationEditorSystem.ComponentModel.IRevertibleChangeTrackingSystem.ComponentModel.Design.TypeDescriptionProviderServiceSystem.ComponentModel.TypeListConverterSystem.ComponentModel.Design.IComponentDiscoveryServiceSystem.ComponentModel.Design.IHelpServiceSystem.ComponentModel.Design.ITypeDiscoveryServiceSystem.ComponentModel.Design.ITypeResolutionServiceSystem.ComponentModel.Design.Serialization.MemberRelationshipServiceSystem.Web.UI.Design.DesignTimeResourceProviderFactorySystem.Web.UI.Design.IContentResolutionServiceSystem.Web.UI.Design.IControlDesignerTagSystem.Web.UI.Design.IControlDesignerViewSystem.Web.UI.Design.IDesignTimeResourceProviderFactoryServiceSystem.Web.UI.Design.IDesignTimeResourceWriterSystem.Web.UI.Design.IDocumentProjectItemSystem.Web.UI.Design.IFolderProjectItemSystem.Web.UI.Design.IHtmlControlDesignerBehaviorSystem.Web.UI.Design.IProjectItemSystem.Web.UI.Design.IControlDesignerBehaviorSystem.Web.UI.Design.IWebAdministrationServiceSystem.Web.UI.Design.IWebApplicationSystem.Web.UI.Design.IWebFormReferenceManagerSystem.Web.UI.Design.IWebFormsBuilderUIServiceSystem.Web.UI.Design.IWebFormsDocumentServiceSystem.Web.Hosting.AppDomainProtocolHandlerSystem.Web.Hosting.ProcessProtocolHandlerSystem.Web.Caching.OutputCacheProviderSystem.Web.Compilation.IAssemblyPostProcessorSystem.Web.Hosting.IProcessHostPreloadClientSystem.Web.Hosting.IProcessHostSupportFunctionsSystem.Web.Hosting.IProcessPingCallbackSystem.Web.Hosting.IListenerChannelCallbackSystem.Web.Hosting.IApplicationPreloadUtilSystem.Web.Management.IWebEventCustomEvaluatorSystem.Web.IPartitionResolverSystem.Web.Routing.UrlRoutingHandlerSystem.Web.SessionState.IPartialSessionStateSystem.Web.SessionState.IReadOnlySessionStateSystem.Web.UI.IResourceUrlGeneratorSystem.Web.UI.IThemeResolutionServiceSystem.Web.UI.IUserControlTypeResolutionServiceSystem.Web.UI.Adapters.PageAdapterSystem.Web.UI.PageParserFilterSystem.Web.UI.PageThemeSystem.Web.UI.WebControls.WebParts.IVersioningPersonalizableSystem.Web.UI.WebControls.WebParts.IWebPartRowSystem.Web.UI.WebControls.WebParts.IWebPartTableSystem.Web.Util.IWebPropertyAccessorSystem.Web.DynamicData.QueryableFilterUserControlSystem.Web.ClientServices.Providers.IClientFormsAuthenticationCredentialsProviderSystem.Web.UI.ExtenderControlSystem.Web.UI.ScriptControlSystem.Web.Query.Dynamic.DynamicClassSystem.Web.Compilation.IWcfReferenceReceiveContextInformationSystem.Web.Script.Serialization.JavaScriptConverterSystem.Web.UI.Design.MobileControls.IMobileWebFormServicesSystem.Web.Services.Protocols.SoapExtensionSystem.Web.Services.Protocols.SoapExtensionAttributeSystem.Web.Services.Description.SoapExtensionImporterSystem.Web.Services.Description.SoapExtensionReflector

Table XIList of .NET orphan types

Page 21: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Namespace App

licat

ion

Cor

e

Ope

n

Clo

sed

Inco

mpl

ete

Bra

nche

d

Flat

Inte

rfac

e-in

tens

ive

Del

egat

e-in

tens

ive

Eve

nt-b

ased

4 18 20 20 19 20 20 19 21 12System.Web.* X X XSystem.Windows.* X X XSystem.ServiceModel.* X X XSystem.Windows.Forms.* X X XSystem.Data.* X XSystem.Activities.* X X XSystem.ComponentModel.* X X X X X XSystem.Workflow.* X XSystem.Xml.* XSystem.Net.* X XSystem.DirectoryServices.* X XSystem X X XSystem.Security.Cryptography.* XMicrosoft.VisualBasic.* X X XSystem.Runtime.InteropServices.* X X X XMicrosoft.JScript.* X X XSystem.Drawing.* XSystem.Runtime.Remoting.* X XSystem.Configuration.* X XSystem.Diagnostics.* XSystem.IO.* X XSystem.Reflection.* X XSystem.EnterpriseServices.* X XSystem.CodeDom.* X XSystem.IdentityModel.* XMicrosoft.Build.* X X XSystem.Management.* X X XSystem.Threading.* X X XSystem.Runtime.Serialization.* X X XSystem.Security.AccessControl XSystem.Security.Permissions X X XSystem.Runtime.CompilerServices X XSystem.Linq.* X X XSystem.AddIn.* X X X X XSystem.Xaml.* X X XSystem.Messaging.* XMicrosoft.Win32.* X X XSystem.Security.Policy X XSystem.Globalization X X XMicrosoft.VisualC.* X X X X XSystem.Transactions.* X X X XSystem.Security X X X XSystem.Collections.Generic X X X X X XSystem.Runtime.DurableInstancing XSystem.Collections X X XSystem.Text X XSystem.Deployment.* X X XSystem.Runtime.Caching.* X X XSystem.ServiceProcess.* X XSystem.Resources.*System.Dynamic X X XSystem.Security.PrincipalMicrosoft.SqlServer.Server XSystem.Security.Authentication.* X XSystem.Collections.Specialized X XSystem.Device.Location X X X XSystem.Text.RegularExpressions X XAccessibility X X XSystem.Collections.Concurrent X X XSystem.Runtime.Versioning X XMicrosoft.CSharp.* X XSystem.Collections.ObjectModel X X X XSystem.Runtime.ConstrainedExecution X XSystem.Runtime X XSystem.Timers X X X X XSystem.Media X XSystem.Runtime.Hosting XSystem.Runtime.ExceptionServices X XSystem.Numerics X

Table XIIClassification of .NET namespaces

Page 22: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

isApplication isCore isOpen isClosed isIncomplete isBranched isFlat isInterfaceIntensive isDelegateIntensiveisApplication

isCore -0.15isOpen 0.11 -0.09

isClosed -0.02 0.13 -0.41***isIncomplete 0.12 -0.07 0.18 -0.11

isBranched -0.16 -0.09 -0.06 -0.06 -0.04isFlat 0.39*** -0.16 0.23 0.01 0.04 -0.41***

isInterfaceIntensive 0.12 0.08 -0.04 -0.11 0.27* -0.11 0.04isDelegateIntensive -0.03 -0.11 -0.08 -0.35** 0.09 0.13 -0.08 0.09

isEventBased -0.11 -0.01 -0.12 -0.29* -0.03 0.04 -0.21 0.06 0.69***

Table XIIISpearman’s rank correlation coefficient for categories

Page 23: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Nam

espa

ce

#Types

%Specializabletypes

ActiveRecord

CastleCore

MonoRail

Windsor

Json.NET

log4net

MEF

Moq

NAnt

NHibernate

NUnit

Prism

Rhino.Mocks

Spring.NET

xUnit

SharpZipLib

Lucene.Net

Dominator

%Referencedtypes

%Specializabletypes(rel.)

%Specializedtypes(rel.)

%Late-boundtypes(rel.)

Fram

ewor

k3.

54.

03.

54.

04.

02.

04.

04.

02.

03.

53.

54.

03.

52.

02.

02.

02.

0Sy

stem

.Web

.*23

2773

(3,1

,0)

(0,0

,0)

(37,

6,0)

(7,1

,0)

(0,0

,0)

(5,0

,0)

(0,0

,0)

(0,0

,0)

(5,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(146

,31,

4)(0

,0,0

)(0

,0,0

)(0

,0,0

)(1

68,3

3,4)

744

.045

5Sy

stem

.Win

dow

s.*

1658

74(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)–

(0,0

,0)

(0,0

,0)

–(0

,0,0

)(0

,0,0

)(3

1,3,

5)(0

,0,0

)–

––

–(3

1,3,

5)2

64.5

1525

Syst

em.S

ervi

ceM

odel

.*11

5368

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

–(0

,0,0

)(0

,0,0

)–

(3,1

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

––

––

(3,1

,0)

066

.750

0Sy

stem

.Win

dow

s.Fo

rms.

*96

389

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(128

,11,

7)(0

,0,0

)(0

,0,0

)(0

,0,0

)(7

3,2,

0)(0

,0,0

)(0

,0,0

)(1

40,1

1,7)

1552

.915

10Sy

stem

.Dat

a.*

745

46(5

,0,0

)(0

,0,0

)(2

,0,0

)(0

,0,0

)(1

5,0,

0)(9

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(3

7,2,

0)(0

,0,0

)(0

,0,0

)(0

,0,0

)(2

6,2,

0)(8

,0,0

)(0

,0,0

)(0

,0,0

)(5

9,2,

0)8

52.5

70

Syst

em.C

ompo

nent

Mod

el.*

434

77(1

,0,0

)(2

4,9,

2)(4

,1,0

)(1

4,4,

1)(2

8,6,

1)(0

,0,0

)(4

,2,0

)(2

,0,0

)(1

3,1,

1)(8

,1,0

)(2

1,1,

0)(2

5,5,

0)(0

,0,0

)(2

2,3,

2)(9

,0,0

)(0

,0,0

)(0

,0,0

)(8

8,27

,5)

2069

.344

8Sy

stem

.Xm

l.*35

887

(9,0

,0)

(37,

3,1)

(5,0

,0)

(12,

0,0)

(31,

0,0)

(15,

0,0)

(0,0

,0)

(0,0

,0)

(57,

1,0)

(37,

0,0)

(23,

0,0)

(0,0

,0)

(0,0

,0)

(40,

5,4)

(13,

0,0)

(0,0

,0)

(0,0

,0)

(111

,8,5

)31

82.0

96

Syst

em.N

et.*

285

74(0

,0,0

)(5

,0,0

)(6

,0,0

)(0

,0,0

)(0

,0,0

)(1

7,0,

0)(0

,0,0

)(0

,0,0

)(1

5,0,

0)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(1

0,0,

0)(0

,0,0

)(0

,0,0

)(9

,0,0

)(4

2,0,

0)15

71.4

00

Syst

em25

779

(51,

7,3)

(74,

7,2)

(72,

10,3

)(7

5,6,

4)(7

6,5,

3)(6

1,7,

0)(6

4,5,

2)(7

4,3,

3)(7

7,9,

4)(9

4,10

,3)

(82,

9,4)

(55,

6,2)

(46,

4,3)

(91,

11,5

)(6

4,4,

3)(4

2,4,

0)(6

9,8,

1)(1

67,1

9,8)

6541

.927

11Sy

stem

.Sec

urity

.Cry

ptog

raph

y.*

250

55(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(5

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(1

4,3,

0)(3

,0,0

)(1

9,3,

0)8

68.4

230

Syst

em.R

untim

e.In

tero

pSer

vice

s.*

235

65(0

,0,0

)(7

,0,0

)(2

,0,0

)(2

,0,0

)(5

,0,0

)(8

,0,0

)(3

,0,0

)(5

,0,0

)(1

1,0,

0)(3

,0,0

)(7

,0,0

)(3

,0,0

)(5

,0,0

)(5

,0,0

)(3

,0,0

)(4

,0,0

)(4

,0,0

)(1

5,0,

0)6

26.7

00

Mic

roso

ft.V

isua

lBas

ic.*

235

69(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(1

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(2

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(3

,0,0

)1

33.3

00

Syst

em.D

raw

ing.

*19

147

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(28,

0,0)

(0,0

,0)

(0,0

,0)

(2,0

,0)

(17,

0,0)

(0,0

,0)

(0,0

,0)

(31,

0,0)

166.

50

0Sy

stem

.Run

time.

Rem

otin

g.*

190

77(0

,0,0

)(3

,0,0

)(0

,0,0

)(5

,0,0

)(0

,0,0

)(3

,0,0

)(0

,0,0

)(0

,0,0

)(3

,0,0

)(1

,0,0

)(2

1,1,

1)(1

,0,0

)(6

,1,1

)(7

,0,0

)(3

,2,0

)(0

,0,0

)(0

,0,0

)(2

9,3,

1)15

79.3

134

Syst

em.C

onfig

urat

ion.

*18

654

(5,1

,0)

(2,0

,0)

(7,1

,0)

(1,1

,0)

(0,0

,0)

(3,1

,0)

(0,0

,0)

(0,0

,0)

(3,1

,0)

(4,1

,0)

(1,0

,0)

(6,3

,1)

(0,0

,0)

(24,

3,0)

(7,4

,0)

(0,0

,0)

(1,0

,0)

(32,

7,1)

1759

.437

5Sy

stem

.Dia

gnos

tics.

*17

366

(4,0

,0)

(18,

0,0)

(4,0

,0)

(8,0

,0)

(6,0

,0)

(7,0

,0)

(13,

0,0)

(9,0

,0)

(3,0

,0)

(10,

0,0)

(12,

0,0)

(6,0

,0)

(4,0

,0)

(6,0

,0)

(8,1

,0)

(0,0

,0)

(4,0

,0)

(34,

1,0)

2047

.16

0Sy

stem

.IO.*

123

68(6

,0,0

)(1

4,0,

0)(2

0,1,

0)(9

,0,0

)(8

,0,0

)(2

3,3,

2)(4

,0,0

)(1

,0,0

)(2

5,1,

1)(1

3,0,

0)(2

5,2,

3)(9

,0,1

)(1

,0,0

)(2

2,0,

0)(1

6,0,

0)(2

1,1,

2)(2

2,5,

2)(3

5,8,

6)29

68.6

3325

Syst

em.R

eflec

tion.

*11

342

(11,

0,0)

(58,

0,0)

(24,

0,0)

(26,

0,0)

(43,

0,0)

(25,

0,0)

(45,

0,0)

(24,

0,0)

(28,

0,0)

(41,

0,0)

(29,

0,0)

(23,

0,0)

(30,

0,0)

(64,

0,0)

(35,

0,0)

(12,

0,0)

(21,

0,0)

(77,

0,0)

6829

.90

0Sy

stem

.Ent

erpr

iseS

ervi

ces.

*11

144

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(19,

0,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(19,

0,0)

1710

.50

0Sy

stem

.Cod

eDom

.*10

598

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(1,0

,0)

(1,0

,0)

(34,

0,0)

(6,0

,0)

(5,0

,0)

(1,0

,0)

(0,0

,0)

(0,0

,0)

(1,0

,0)

(0,0

,0)

(0,0

,0)

(35,

0,0)

3394

.30

0M

icro

soft

.Bui

ld.*

9692

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(20,

1,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(4,0

,0)

(0,0

,0)

(0,0

,0)

(23,

1,0)

248.

750

0Sy

stem

.Thr

eadi

ng.*

8076

(4,0

,0)

(5,0

,0)

(6,0

,0)

(3,0

,0)

(3,0

,0)

(11,

0,0)

(6,0

,0)

(1,0

,0)

(3,0

,0)

(3,0

,0)

(10,

0,0)

(5,0

,0)

(2,0

,0)

(9,1

,0)

(8,0

,0)

(2,0

,0)

(5,0

,0)

(21,

1,0)

2633

.314

0Sy

stem

.Run

time.

Seri

aliz

atio

n.*

7449

(2,0

,0)

(8,3

,0)

(2,0

,0)

(5,2

,0)

(15,

2,0)

(5,1

,0)

(4,1

,0)

(2,0

,0)

(5,1

,0)

(7,3

,0)

(4,0

,0)

(2,0

,0)

(2,0

,0)

(8,3

,0)

(2,0

,0)

(2,0

,0)

(6,2

,0)

(23,

6,0)

3134

.875

0Sy

stem

.Sec

urity

.Per

mis

sion

s70

19(0

,0,0

)(4

,0,0

)(0

,0,0

)(2

,0,0

)(4

,0,0

)(2

,0,0

)(2

,0,0

)(3

,0,0

)(6

,0,0

)(4

,0,0

)(1

,0,0

)(2

,0,0

)(2

,0,0

)(6

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(1

2,0,

0)17

0.0

00

Syst

em.R

untim

e.C

ompi

lerS

ervi

ces

6951

(6,0

,0)

(5,0

,0)

(6,0

,0)

(7,0

,0)

(6,0

,0)

(5,0

,0)

(7,0

,0)

(5,0

,0)

(6,0

,0)

(7,0

,0)

(4,0

,0)

(4,0

,0)

(10,

0,0)

(8,0

,0)

(3,0

,0)

(4,0

,0)

(5,0

,0)

(14,

0,0)

2028

.60

0Sy

stem

.Lin

q.*

6263

(2,0

,0)

(2,0

,0)

(2,0

,0)

(12,

0,0)

(3,0

,0)

–(1

4,0,

0)(2

9,5,

1)–

(30,

6,1)

(0,0

,0)

(8,0

,0)

(4,0

,0)

––

––

(33,

7,2)

5363

.633

10Sy

stem

.Mes

sagi

ng.*

5290

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(12,

0,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(12,

0,0)

2375

.00

0M

icro

soft

.Win

32.*

4956

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(3,0

,0)

(0,0

,0)

(2,0

,0)

(0,0

,0)

(0,0

,0)

(2,0

,0)

(2,0

,0)

(0,0

,0)

(0,0

,0)

(3,0

,0)

633

.30

0Sy

stem

.Sec

urity

.Pol

icy

4531

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(1,0

,0)

(0,0

,0)

(5,0

,0)

(1,0

,0)

(0,0

,0)

(1,0

,0)

(1,0

,0)

(0,0

,0)

(0,0

,0)

(5,0

,0)

110.

00

0Sy

stem

.Glo

baliz

atio

n39

90(1

,0,0

)(1

,0,0

)(4

,0,0

)(4

,0,0

)(4

,0,0

)(4

,0,0

)(2

,0,0

)(1

,0,0

)(6

,0,0

)(3

,0,0

)(2

,0,0

)(1

,0,0

)(0

,0,0

)(8

,0,0

)(1

,0,0

)(2

,0,0

)(6

,0,0

)(1

2,0,

0)31

50.0

00

Syst

em.T

rans

actio

ns.*

3868

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(12,

1,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(11,

0,0)

(4,0

,0)

(0,0

,0)

(0,0

,0)

(17,

1,0)

4552

.911

0Sy

stem

.Sec

urity

3650

(0,0

,0)

(6,0

,0)

(0,0

,0)

(3,0

,0)

(3,0

,0)

(2,0

,0)

(9,0

,0)

(1,0

,0)

(1,0

,0)

(3,0

,0)

(2,0

,0)

(0,0

,0)

(0,0

,0)

(7,0

,0)

(1,0

,0)

(1,0

,0)

(2,0

,0)

(13,

0,0)

3646

.20

0Sy

stem

.Col

lect

ions

.Gen

eric

3197

(15,

2,2)

(18,

9,1)

(15,

0,0)

(20,

4,3)

(14,

6,5)

(1,0

,0)

(15,

5,1)

(11,

3,0)

(1,0

,0)

(24,

6,4)

(12,

1,1)

(20,

6,1)

(12,

3,2)

(8,3

,0)

(16,

4,1)

(0,0

,0)

(17,

4,1)

(20,

10,6

)65

90.0

5633

Syst

em.T

ext

2546

(2,0

,0)

(2,0

,0)

(2,0

,0)

(1,0

,0)

(2,0

,0)

(2,0

,0)

(1,0

,0)

(1,0

,0)

(3,0

,0)

(2,0

,0)

(2,0

,0)

(1,0

,0)

(1,0

,0)

(3,0

,0)

(1,0

,0)

(2,0

,0)

(2,0

,0)

(3,0

,0)

1266

.70

0Sy

stem

.Col

lect

ions

2592

(10,

5,1)

(8,6

,0)

(15,

7,4)

(11,

7,0)

(7,6

,0)

(11,

8,1)

(7,5

,2)

(2,2

,0)

(14,

10,3

)(1

5,8,

3)(1

4,6,

4)(4

,4,0

)(1

0,2,

2)(1

7,9,

5)(4

,2,1

)(5

,3,0

)(1

3,6,

2)(2

1,13

,8)

8485

.772

44Sy

stem

.Ser

vice

Proc

ess.

*21

92(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(2

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(2

,0,0

)10

50.0

00

Syst

em.R

esou

rces

.*20

74(0

,0,0

)(2

,0,0

)(2

,0,0

)(0

,0,0

)(1

,0,0

)(0

,0,0

)(1

,0,0

)(2

,0,0

)(1

,0,0

)(0

,0,0

)(1

,0,0

)(2

,0,0

)(0

,0,0

)(4

,1,1

)(1

,0,0

)(0

,0,0

)(2

,0,0

)(5

,1,1

)25

80.0

2525

Syst

em.S

ecur

ity.P

rinc

ipal

1875

(0,0

,0)

(0,0

,0)

(2,0

,0)

(0,0

,0)

(0,0

,0)

(4,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(1,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(4,0

,0)

(0,0

,0)

(0,0

,0)

(6,0

,0)

3310

0.0

00

Syst

em.C

olle

ctio

ns.S

peci

aliz

ed15

100

(0,0

,0)

(2,1

,0)

(4,1

,1)

(1,0

,1)

(0,0

,0)

(2,0

,0)

(0,0

,0)

(0,0

,0)

(7,1

,1)

(5,0

,0)

(5,0

,0)

(4,1

,0)

(2,0

,0)

(8,1

,1)

(0,0

,0)

(0,0

,0)

(2,0

,0)

(13,

4,3)

8784

.636

27Sy

stem

.Tex

t.Reg

ular

Exp

ress

ions

1210

0(6

,0,0

)(0

,0,0

)(7

,0,0

)(6

,0,0

)(2

,0,0

)(4

,0,0

)(0

,0,0

)(2

,0,0

)(9

,0,0

)(7

,0,0

)(2

,0,0

)(0

,0,0

)(1

,0,0

)(6

,0,0

)(5

,0,0

)(2

,0,0

)(3

,0,0

)(9

,0,0

)75

77.8

00

Syst

em.R

untim

e.V

ersi

onin

g8

17(0

,0,0

)(1

,0,0

)(0

,0,0

)(1

,0,0

)(1

,0,0

)(0

,0,0

)(1

,0,0

)(1

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(1

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(0

,0,0

)(1

,0,0

)13

0.0

00

Syst

em.C

olle

ctio

ns.O

bjec

tMod

el7

100

(0,0

,0)

(1,1

,1)

(1,1

,1)

(2,1

,1)

(3,2

,2)

(0,0

,0)

(2,0

,1)

(1,0

,0)

(0,0

,0)

(2,0

,1)

(0,0

,0)

(2,1

,1)

(1,0

,0)

(1,0

,0)

(1,0

,0)

(0,0

,0)

(2,1

,2)

(4,2

,2)

5710

0.0

5050

Mic

roso

ft.C

Shar

p.*

780

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(1,0

,0)

(1,0

,0)

(1,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(1,0

,0)

1410

0.0

00

Syst

em.T

imer

s4

100

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(3,0

,0)

(0,0

,0)

(0,0

,0)

(0,0

,0)

(2,0

,0)

(0,0

,0)

(0,0

,0)

(3,0

,0)

7566

.70

0#

Ref

eren

ced

type

s14

330

725

123

728

022

920

517

836

938

245

321

713

960

531

711

319

8#

Spec

ializ

edty

pes

1639

2826

2720

1813

2639

3129

1073

1911

26#

Lat

ebo

und

type

s6

79

1011

36

410

1220

118

225

28

75%

235

8933

7833

8M

edia

n80

7320

537

025

%36

5413

330

0

Tabl

eX

IVU

sage

of.N

ET

inth

eco

rpus

:(n

umbe

rsof

refe

renc

ing,

spec

ializ

atio

n,la

tebi

ndin

g)

Page 24: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

types totalRefT spbTAbs spbTRel totalSpdTtypes

totalRefT 0.70***spbTAbs 0.99*** 0.70***spbTRel 0.66*** 0.95*** 0.67***

totalSpdT 0.40** 0.62*** 0.43** 0.62***totalLbT 0.22 0.49*** 0.24 0.54*** 0.84***

Table XVSpearman’s rank correlation coefficient for actual reuse metrics (numbers)

pRefT pSpbTAbs pSpbTRel pSpdTAbs pSpdTRel pLBTAbspRefT

pSpbTAbs 0.13pSpbTRel 0.01 0.61***pSpdTAbs 0.39** 0.38* 0.15pSpdTRel 0.26 0.46** 0.17 0.94***pLBTAbs 0.36* 0.34* 0.24 0.83*** 0.75***pLBTRel 0.32* 0.34* 0.22 0.81*** 0.75*** 0.99***

Table XVISpearman’s rank correlation coefficient for actual reuse metrics (percentage)

Page 25: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

0 10 20 30 40

050

100

150

Namespaces

# ty

pes

Referenced typesSpecializable types (rel)Specialized types

Figure 4. Breakdown of referenced types - I

Page 26: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Non−specializableSpecializableSpecializedLate−bound

Breakdown of referenced types

Namespaces (ordered decreasingly by the number of types)

Per

cent

age

020

4060

8010

0

Figure 5. Breakdown of referenced types - II

Page 27: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Non−specializable (non−ref)Specializable (non−ref)Non−specializable (ref)Specializable (ref)SpecializedLate−bound

Breakdown of types in terms of usage

Namespaces (ordered decreasingly by the number of types)

Per

cent

age

020

4060

8010

0

Figure 6. Breakdown of types in terms of the actual reuse metrics

Page 28: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

NH

ibern

ate

Lu

cen

e.N

et

Sh

arp

Zip

Lib

Sp

rin

g.N

ET

Act

iveR

eco

rd

Win

dso

r

NA

nt

Mon

oR

ail

Json

.NE

T

log

4n

et

Pri

sm

NU

nit

ME

F

Cast

leC

ore

Rh

ino.M

ock

s

Moq

xUn

it

0%

20%

40%

60%

80%

100%

Project Methods

Late binding

Framework Methods

Figure 7. .NET calls w/ and w/o late binding

0 5 10 15 20 25 30 35 40

System.ComponentModel.IContainerSystem.ComponentModel.ISite

System.ComponentModel.Composition.Primitives.ICompositionElementSystem.Collections.Generic.ICollection`1

System.Collections.IComparerSystem.Linq.IOrderedQueryable`1

System.Linq.IQueryable`1System.Configuration.Internal.IInternalConfigSystem

System.Configuration.Internal.IConfigErrorInfoSystem.Data.IDataReaderSystem.Data.IDataRecord

System.ComponentModel.IEditableObjectSystem.ComponentModel.IRevertibleChangeTracking

System.ComponentModel.IChangeTrackingSystem.ComponentModel.INotifyPropertyChanging

System.ComponentModel.IDataErrorInfoSystem.ComponentModel.Design.IServiceContainer

System.Collections.IListSystem.Collections.IDictionary

System.Linq.IOrderedQueryableSystem.Linq.IQueryable

System.Collections.Specialized.INotifyCollectionChangedSystem.ComponentModel.INotifyPropertyChanged

System.ICloneableSystem.Collections.ICollection

System.IServiceProviderSystem.Collections.Generic.IEnumerable`1

System.Collections.IEnumerableSystem.IDisposable

1111111111122222222222

44

8910

1937

For each interface, the number of sub-interfaces in the corpus are shown.

Figure 8. All .NET interfaces with sub-interfaces in the corpus

Page 29: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

System.Collections.Specialized.NameValueCollectionSystem.Xml.XmlElementSystem.Collections.HashtableSystem.ExceptionSystem.Collections.ObjectModel.Collection‘1System.ArraySystem.Collections.Specialized.HybridDictionarySystem.Linq.Expressions.ExpressionSystem.Collections.Specialized.StringCollectionSystem.Collections.Generic.List‘1System.Collections.ArrayListSystem.DelegateSystem.EnumSystem.Xml.XmlNodeSystem.Windows.Forms.ControlSystem.IO.StringWriterSystem.ComponentModel.TypeConverterSystem.Collections.Generic.Dictionary‘2System.Collections.CollectionBaseSystem.Xml.XmlAttributeSystem.Collections.IEnumerableSystem.Collections.Generic.IEnumerable‘1System.IO.MemoryStreamSystem.IO.StreamSystem.IO.TextWriterSystem.Collections.Generic.SortedDictionary‘2System.Windows.Forms.TreeNodeSystem.Web.UI.ControlSystem.Collections.ICollectionSystem.Windows.DependencyObjectSystem.Xml.XmlDocumentSystem.Collections.DictionaryBaseSystem.Windows.FrameworkElementSystem.Web.UI.PageSystem.Collections.Generic.ICollection‘1System.Windows.Forms.ToolStripSystem.Xml.XmlNamespaceManagerSystem.ComponentModel.BindingList‘1System.Web.UI.TemplateControlSystem.MulticastDelegateSystem.Linq.Expressions.ExpressionVisitorSystem.Windows.Forms.FormSystem.Collections.ReadOnlyCollectionBaseSystem.Collections.ObjectModel.KeyedCollection‘2System.Collections.Generic.IList‘1System.Configuration.ConfigurationElementCollectionSystem.ComponentModel.PropertyChangedEventArgsSystem.Collections.IListSystem.IO.StreamReaderSystem.ArgumentExceptionSystem.RandomSystem.Windows.Forms.ScrollableControlSystem.Runtime.Remoting.Proxies.RealProxySystem.IO.BinaryReaderSystem.ComponentModel.ComponentSystem.ComponentModel.MemberDescriptorSystem.ValueTypeSystem.Windows.Forms.StatusBarSystem.Windows.Forms.TreeViewSystem.Windows.Threading.DispatcherObjectSystem.Windows.Controls.Primitives.ButtonBaseSystem.Windows.UIElementSystem.Web.HttpApplicationSystem.Resources.ResourceManager

Table XVIIList of .NET types that are bound late in the corpus

Page 30: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

0 20 40 60 80 100 120 140

System.Collections.DictionaryBaseSystem.Collections.Specialized.NameValueCollection

System.Web.UI.PageSystem.Configuration.ConfigurationElementCollection

System.Configuration.ConfigurationElementSystem.Resources.ResourceManager

System.Collections.ObjectModel.KeyedCollection`2System.Linq.Expressions.Expression

System.Web.UI.WebControls.WebControlSystem.Collections.Generic.List`1

System.Collections.Generic.Dictionary`2System.Collections.ArrayList

System.Web.UI.ControlSystem.IO.IOException

System.ComponentModel.EnumConverterSystem.Linq.Expressions.ExpressionVisitor

System.SystemExceptionSystem.IO.TextWriter

System.Collections.HashtableSystem.IO.Stream

System.Windows.Forms.UserControlSystem.Collections.ObjectModel.Collection`1

System.ComponentModel.TypeConverterSystem.Windows.Forms.Form

System.EventArgsSystem.ApplicationException

System.Collections.CollectionBaseSystem.MarshalByRefObject

System.ExceptionSystem.Attribute

223333444555556778

11111112

1717

2325

3851

59135

For each class, the number of subclasses in the corpus are shown.

Figure 9. Top 30 .NET classes inherited in the corpus

0 50 100 150 200 250 300 350

System.ComponentModel.IEditableObjectSystem.ComponentModel.IRevertibleChangeTracking

System.ComponentModel.IChangeTrackingSystem.Data.IDataReaderSystem.Web.IHttpHandlerSystem.Web.IHttpModule

System.Runtime.Serialization.IObjectReferenceSystem.ComponentModel.Design.IServiceContainer

System.Collections.Generic.IList`1System.ComponentModel.INotifyPropertyChanged

System.Collections.Generic.IEqualityComparer`1System.Collections.Generic.IDictionary`2

System.Configuration.IConfigurationSectionHandlerSystem.IComparableSystem.IEquatable`1

System.Collections.IDictionaryEnumeratorSystem.Runtime.Serialization.IDeserializationCallback

System.IServiceProviderSystem.Collections.IList

System.Collections.IComparerSystem.Collections.IDictionary

System.Collections.Generic.ICollection`1System.Runtime.Serialization.ISerializable

System.Collections.ICollectionSystem.ICloneable

System.Collections.Generic.IEnumerator`1System.Collections.Generic.IEnumerable`1

System.Collections.IEnumeratorSystem.Collections.IEnumerable

System.IDisposable

5555677791011121314141416181925283338

6583

117578

155196

118176

185256

303

For each interfaces, the number of implementing classes in the corpus are shown. Note: the full bar counts allimplementations whereas the black part excludes classes that can be reliably classified as being compiler-generated.

Figure 10. Top 30 .NET interfaces implemented in the corpus

Page 31: A Framework Profile of - Uni Koblenz-Landausoftlang.uni-koblenz.de/dotnet/long.pdf · 4.0 Json.NET Codeplex 43,127 JSON framework 2.0 log4net Sourceforge 27,799 Logging framework

Namespace % I/C Implemented types Count

System 28.57 I IServiceProvider 18I IAsyncResult 1

System.Collections 60.00 C DictionaryBase 2C .CollectionBase 38C ReadOnlyCollectionBase 1

System.Collections.ObjectModel 100.00 C KeyedCollection‘2 4

System.Collections.Specialized 100.00 C INotifyCollectionChanged 5

System.ComponentModel.* 12.77 I IEditableObject 5I IRevertibleChangeTracking 5I INotifyPropertyChanging 4I IDataErrorInfo 4I ITypedList 1I Composition.IPartImportsSatis-

fiedNotification1

System.Configuration.* 20.00 C ApplicationSettingsBase 1

System.Runtime.Serialization.* 50.00 I IDeserializationCallback 16C SerializationBinder 1I ISafeSerializationData 1

System.Xml.* 42.86 C Xsl.XsltContext 1I Xsl.IXsltContextFunction 1I Xsl.IXsltContextVariable 1

Table XVIII.NET orphan types implemented in the corpus

Runtime receiver type Specialized .NET Type Static receiver typeNHibernate.Exceptions.GenericADOException System.ApplicationException(C) System.Exception(C)NHibernate.Criterion.Order[] System.Array(C) System.Collections.Generic.IEnumerable1(I)Castle.Components.DictionaryAdapter.XPathContext System.Xml.Xsl.XsltContext(C) System.Xml.XmlNamespaceManager(C)Castle.Components.DictionaryAdapter.IDictionaryBehavior[] System.Array(C) System.Collections.Generic.IEnumerable1(I)Castle.Components.DictionaryAdapter.EditableBindingList1 System.ComponentModel.BindingList1(C) System.Collections.ObjectModel.Collection1(C)Castle.MonoRail.Framework.MonoRailException System.ApplicationException(C) System.Exception(C)Castle.MonoRail.Framework.Tests.Helpers.Month[] System.Array(C) System.Collections.IEnumerable(I)Castle.MonoRail.Framework.Tests.Helpers.Role[] System.Array(C) System.Collections.IEnumerable(I)Castle.MonoRail.Framework.Tests.Helpers.RegistrationEnum[] System.Array(C) System.Collections.IEnumerable(I)Castle.MonoRail.Framework.Tests.Helpers.ProductCategory[] System.Array(C) System.Collections.IEnumerable(I)Castle.MonoRail.Framework.Tests.Helpers.Role2[] System.Array(C) System.Collections.IEnumerable(I)Castle.Core.Pair2[] System.Array(C) System.Collections.IEnumerable(I)Castle.MonoRail.Framework.Tests.Helpers.Role[] System.Array(C) System.Collections.ICollection(I)Castle.MonoRail.Framework.Tests.Helpers.Role[] System.Array(C) System.Collections.IList(I)Castle.Core.DependencyModel[] System.Array(C) System.Collections.Generic.IEnumerable1(I)Newtonsoft.Json.JsonConverter[] System.Array(C) System.Collections.Generic.ICollection1(I)Newtonsoft.Json.JsonContainerAttribute[] System.Array(C) System.Collections.Generic.ICollection1(I)Newtonsoft.Json.JsonConverterAttribute[] System.Array(C) System.Collections.Generic.ICollection1(I)Newtonsoft.Json.JsonPropertyAttribute[] System.Array(C) System.Collections.Generic.ICollection1(I)Newtonsoft.Json.JsonIgnoreAttribute[] System.Array(C) System.Collections.Generic.ICollection1(I)Newtonsoft.Json.Serialization.JsonPropertyCollection System.Collections.ObjectModel.KeyedCollection2(C) System.Collections.ObjectModel.Collection1(C)Newtonsoft.Json.JsonPropertyAttribute[] System.Array(C) System.Collections.Generic.IList1(I)Newtonsoft.Json.JsonConverter[] System.Array(C) System.Collections.Generic.IEnumerable1(I)Newtonsoft.Json.JsonConverterAttribute[] System.Array(C) System.Collections.Generic.IList1(I)Newtonsoft.Json.JsonContainerAttribute[] System.Array(C) System.Collections.Generic.IList1(I)Newtonsoft.Json.Converters.IsoDateTimeConverter[] System.Array(C) System.Collections.Generic.ICollection1(I)Newtonsoft.Json.Converters.IsoDateTimeConverter[] System.Array(C) System.Collections.Generic.IEnumerable1(I)Newtonsoft.Json.Schema.JsonSchemaNodeCollection System.Collections.ObjectModel.KeyedCollection2(C) System.Collections.ObjectModel.Collection1(C)Newtonsoft.Json.Linq.ComponentModel.JPropertyDescriptor System.ComponentModel.PropertyDescriptor(C) System.ComponentModel.MemberDescriptor(C)Newtonsoft.Json.JsonIgnoreAttribute[] System.Array(C) System.Collections.Generic.IList1(I)Newtonsoft.Json.JsonConverter[] System.Array(C) System.Collections.Generic.IList1(I)Newtonsoft.Json.Utilities.EnumValues1 System.Collections.ObjectModel.KeyedCollection2(C) System.Collections.ObjectModel.Collection1(C)Newtonsoft.Json.Tests.Serialization.KeyValueId[] System.Array(C) System.Collections.Generic.IEnumerable1(I)Newtonsoft.Json.Tests.Serialization.Employee[] System.Array(C) System.Collections.Generic.IEnumerable1(I)Newtonsoft.Json.Tests.TestObjects.VersionKeyedCollection System.Collections.ObjectModel.KeyedCollection2(C) System.Collections.ObjectModel.Collection1(C)log4net.Util.ReusableStringWriter System.IO.StringWriter(C) System.IO.TextWriter(C)System.ComponentModel.Composition.Primitives.Export[] System.Array(C) System.Collections.ICollection(I)System.ComponentModel.Composition.Primitives.ExportDefinition[] System.Array(C) System.Collections.Generic.IEnumerable1(I)System.ComponentModel.Composition.Primitives.ExportDefinition[] System.Array(C) System.Collections.ICollection(I)System.ComponentModel.Composition.CompositionError[] System.Array(C) System.Collections.ICollection(I)System.ComponentModel.Composition.ReflectionModel.ReflectionParameterImportDefinition[] System.Array(C) System.Collections.Generic.IEnumerable1(I)System.ComponentModel.Composition.Primitives.ComposablePartCatalog[] System.Array(C) System.Collections.Generic.IEnumerable1(I)System.ComponentModel.Composition.Primitives.ComposablePart[] System.Array(C) System.Collections.Generic.IEnumerable1(I)System.ComponentModel.Composition.Primitives.Export[] System.Array(C) System.Collections.Generic.IEnumerable1(I)System.ComponentModel.Composition.Primitives.ComposablePartDefinition[] System.Array(C) System.Collections.Generic.IEnumerable1(I)System.ComponentModel.Composition.Primitives.ImportDefinition[] System.Array(C) System.Collections.Generic.IEnumerable1(I)System.Lazy2[] System.Array(C) System.Collections.IEnumerable(I)System.ComponentModel.Composition.Primitives.ComposablePartDefinition[] System.Array(C) System.Collections.ICollection(I)NAnt.Core.BuildException System.ApplicationException(C) System.Exception(C)NAnt.Compression.Types.DuplicateHandlingConverter System.ComponentModel.EnumConverter(C) System.ComponentModel.TypeConverter(C)Tests.NAnt.Core.ElementTest1Task+OutputTypeConverter System.ComponentModel.EnumConverter(C) System.ComponentModel.TypeConverter(C)NAnt.Core.LevelConverter System.ComponentModel.EnumConverter(C) System.ComponentModel.TypeConverter(C)NAnt.DotNet.Types.DebugOutputConverter System.ComponentModel.EnumConverter(C) System.ComponentModel.TypeConverter(C)NAnt.Core.Util.CommandLineArgumentException System.ArgumentException(C) System.Exception(C)NHibernate.Cfg.MappingSchema.HbmClass[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Cfg.MappingSchema.HbmSubclass[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Cfg.MappingSchema.HbmJoinedSubclass[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Cfg.MappingSchema.HbmUnionSubclass[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Cfg.MappingSchema.HbmJoin[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Cfg.MappingSchema.HbmColumn[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Cfg.MappingSchema.HbmFilter[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Mapping.ISelectable[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Cfg.MappingSchema.IEntityPropertyMapping[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Engine.Query.Sql.INativeSQLQueryReturn[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.MappingException System.ApplicationException(C) System.Exception(C)NHibernate.Cfg.MappingSchema.HbmFormula[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Engine.TypedValue[] System.Array(C) System.Collections.IEnumerable(I)NHibernate.Cfg.MappingSchema.HbmMetaValue[] System.Array(C) System.Collections.Generic.ICollection1(I)NHibernate.Type.IType[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Param.IParameterSpecification[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Test.HQL.Ast.Human[] System.Array(C) System.Collections.ICollection(I)NHibernate.Test.HQL.Ast.Human[] System.Array(C) System.Collections.IEnumerable(I)NHibernate.DomainModel.FooComponent[] System.Array(C) System.Collections.IEnumerable(I)NHibernate.DomainModel.Foo[] System.Array(C) System.Collections.IEnumerable(I)NHibernate.DomainModel.FooStatus[] System.Array(C) System.Collections.ICollection(I)NHibernate.DomainModel.FooStatus[] System.Array(C) System.Collections.IEnumerable(I)NHibernate.DomainModel.GlarchProxy[] System.Array(C) System.Collections.IEnumerable(I)NHibernate.DomainModel.FooProxy[] System.Array(C) System.Collections.IEnumerable(I)NHibernate.DomainModel.Qux[] System.Array(C) System.Collections.IEnumerable(I)NHibernate.Hql.Ast.HqlTreeNode[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Hql.Ast.HqlStatement[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Hql.Ast.HqlExpression[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Hql.Ast.HqlWhen[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.DomainModel.NHSpecific.Child[] System.Array(C) System.Collections.IEnumerable(I)NHibernate.Cfg.MappingSchema.HbmParam[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NHibernate.Cfg.MappingSchema.HbmMetaValue[] System.Array(C) System.Collections.Generic.IEnumerable1(I)NUnit.Framework.TextMessageWriter System.IO.StringWriter(C) System.IO.TextWriter(C)NUnit.Core.Test[] System.Array(C) System.Collections.IEnumerable(I)NUnit.Core.Test[] System.Array(C) System.Collections.ICollection(I)NUnit.Core.NUnitException System.ApplicationException(C) System.Exception(C)NUnit.Core.Tests.FrameworkData[] System.Array(C) System.Collections.IEnumerable(I)NUnit.Framework.TestCaseData[] System.Array(C) System.Collections.IEnumerable(I)NUnit.UiException.Tests.Controls.TestCodeBox+TestingCodeBox System.Windows.Forms.UserControl(C) System.Windows.Forms.Control(C)NUnit.UiException.Tests.Controls.TestCodeBox+TestingCodeBox System.Windows.Forms.UserControl(C) System.Windows.Forms.ScrollableControl(C)NUnit.UiException.Controls.CodeBox System.Windows.Forms.UserControl(C) System.Windows.Forms.Control(C)NUnit.UiException.Controls.CodeBox System.Windows.Forms.UserControl(C) System.Windows.Forms.ScrollableControl(C)NUnit.UiException.Tests.Controls.TestCodeRenderingContext+TestingCodeBox System.Windows.Forms.UserControl(C) System.Windows.Forms.Control(C)NUnit.UiException.Tests.Controls.TestCodeRenderingContext+TestingCodeBox System.Windows.Forms.UserControl(C) System.Windows.Forms.ScrollableControl(C)NUnit.UiException.Controls.ErrorList System.Windows.Forms.UserControl(C) System.Windows.Forms.Control(C)NUnit.UiException.Controls.ErrorToolbar System.Windows.Forms.ToolStrip(C) System.Windows.Forms.Control(C)NUnit.UiException.Controls.ErrorPanelLayout System.Windows.Forms.UserControl(C) System.Windows.Forms.Control(C)NUnit.UiException.Tests.Controls.TestErrorList+TestingErrorList System.Windows.Forms.UserControl(C) System.Windows.Forms.Control(C)NUnit.UiException.Controls.ErrorBrowser System.Windows.Forms.UserControl(C) System.Windows.Forms.Control(C)NUnit.UiException.Controls.StackTraceDisplay System.Windows.Forms.UserControl(C) System.Windows.Forms.Control(C)NUnit.UiKit.LongRunningOperationDisplay System.Windows.Forms.Form(C) System.Windows.Forms.Control(C)NUnit.UiKit.TestSuiteTreeView System.Windows.Forms.TreeView(C) System.Windows.Forms.Control(C)CP.Windows.Forms.ExpandingLabel System.Windows.Forms.Label(C) System.Windows.Forms.Control(C)Microsoft.Practices.Prism.Modularity.ModuleInfo[] System.Array(C) System.Collections.Generic.IEnumerable1(I)Castle.Proxies.FrameworkElementProxy System.Windows.FrameworkElement(C) System.Windows.DependencyObject(C)Microsoft.Practices.Prism.Tests.Mocks.MockFrameworkElement System.Windows.FrameworkElement(C) System.Windows.DependencyObject(C)Microsoft.Practices.Prism.Tests.Mocks.MockClickableObject System.Windows.Controls.Primitives.ButtonBase(C) System.Windows.UIElement(C)Microsoft.Practices.Prism.Tests.Mocks.MockClickableObject System.Windows.Controls.Primitives.ButtonBase(C) System.Windows.DependencyObject(C)Microsoft.Practices.Prism.Tests.Mocks.MockFrameworkElement System.Windows.FrameworkElement(C) System.Windows.Threading.DispatcherObject(C)Castle.Proxies.FrameworkElementProxy 2 System.Windows.FrameworkElement(C) System.Windows.DependencyObject(C)Rhino.Mocks.Constraints.AbstractConstraint[] System.Array(C) System.Collections.ICollection(I)Rhino.Mocks.Constraints.AbstractConstraint[] System.Array(C) System.Collections.IEnumerable(I)Rhino.Mocks.Tests.Constraints.FailsOnEqual[] System.Array(C) System.Collections.ICollection(I)Spring.Objects.ISharedStateFactory[] System.Array(C) System.Collections.ICollection(I)Spring.Objects.ISharedStateFactory[] System.Array(C) System.Collections.IEnumerable(I)Spring.Util.ConfigXmlElement System.Xml.XmlElement(C) System.Xml.XmlNode(C)Spring.Objects.PropertyValue[] System.Array(C) System.Collections.IEnumerable(I)Spring.Core.TypeMismatchException System.ApplicationException(C) System.Exception(C)Spring.Aop.Framework.AutoProxy.ApcTestAttribute[] System.Array(C) System.Collections.ICollection(I)Spring.Aop.IAdvisor[] System.Array(C) System.Collections.IEnumerable(I)Spring.Core.TypeConversion.TimeSpanConverter System.ComponentModel.TimeSpanConverter(C) System.ComponentModel.TypeConverter(C)Spring.Objects.Factory.ObjectDefinitionStoreException System.ApplicationException(C) System.Exception(C)Spring.Objects.Factory.NoSuchObjectDefinitionException System.ApplicationException(C) System.Exception(C)Spring.Inventor[] System.Array(C) System.Collections.IEnumerable(I)Spring.Inventor[] System.Array(C) System.Collections.ICollection(I)Spring.Inventor[] System.Array(C) System.Collections.IList(I)Spring.Objects.Factory.ObjectInitializationException System.ApplicationException(C) System.Exception(C)Spring.Util.ConfigXmlDocument System.Xml.XmlDocument(C) System.Xml.XmlNode(C)Spring.Objects.TestObject[] System.Array(C) System.Collections.IEnumerable(I)Spring.Util.FatalReflectionException System.ApplicationException(C) System.Exception(C)Spring.Core.InvalidPropertyException System.ApplicationException(C) System.Exception(C)Spring.Objects.TestObject[] System.Array(C) System.Collections.IList(I)Spring.Core.MethodInvocationException System.ApplicationException(C) System.Exception(C)Spring.Util.Foo[] System.Array(C) System.Collections.IEnumerable(I)Spring.Expressions.IExpression[] System.Array(C) System.Collections.ICollection(I)Spring.Expressions.IExpression[] System.Array(C) System.Collections.IList(I)Spring.Validation.Actions.ErrorMessageAction[] System.Array(C) System.Collections.ICollection(I)Spring.Validation.Actions.ErrorMessageAction[] System.Array(C) System.Collections.IEnumerable(I)NHibernate.PropertyValueException System.ApplicationException(C) System.Exception(C)NHibernate.ADOException System.ApplicationException(C) System.Exception(C)Spring.Objects.Factory.ObjectCreationException System.ApplicationException(C) System.Exception(C)Spring.Aop.Framework.AopConfigException System.ApplicationException(C) System.Exception(C)Spring.Web.Support.MockControl System.Web.UI.UserControl(C) System.Web.UI.Control(C)ASP.withoutresources aspx System.Web.UI.Page(C) System.Web.UI.TemplateControl(C)ASP.withresources aspx System.Web.UI.Page(C) System.Web.UI.TemplateControl(C)ASP.disablessession aspx System.Web.UI.Page(C) System.Web.UI.TemplateControl(C)ASP.maintainssession1 aspx System.Web.UI.Page(C) System.Web.UI.TemplateControl(C)ASP.maintainssession2 aspx System.Web.UI.Page(C) System.Web.UI.TemplateControl(C)ASP.TransferAfterSetResult System.Web.UI.Page(C) System.Web.UI.TemplateControl(C)ASP.TransferAfterSetResult System.Web.UI.Page(C) System.Web.UI.Control(C)ASP.transferaftersetresultsave aspx System.Web.UI.Page(C) System.Web.UI.TemplateControl(C)Spring.Web.UI.Controls.Panel System.Web.UI.WebControls.Panel(C) System.Web.UI.Control(C)Spring.TestSupport.TestUserControl System.Web.UI.UserControl(C) System.Web.UI.Control(C)SpecificationBaseCommand[] System.Array(C) System.Collections.Generic.IEnumerable1(I)Xunit.TestMethod[] System.Array(C) System.Collections.Generic.IEnumerable1(I)Xunit.TestClass[] System.Array(C) System.Collections.Generic.IEnumerable1(I)Xunit.TestMethod[] System.Array(C) System.Collections.IEnumerable(I)Xunit.IResultXmlTransform[] System.Array(C) System.Collections.Generic.IEnumerable1(I)TestableTestClass[] System.Array(C) System.Collections.Generic.IEnumerable1(I)SupportClass+GeneralKeyedCollection2 System.Collections.ObjectModel.KeyedCollection2(C) System.Collections.ObjectModel.Collection1(C)

Table XIXTriples of (latebound, specialized, static receiver]) types when static receiver and specialized are different.