Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
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.
.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
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
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.)
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—
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
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,
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
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.
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.
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
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.
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
)
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)
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)
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.
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
.
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
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
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
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
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
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)
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)
0 10 20 30 40
050
100
150
Namespaces
# ty
pes
Referenced typesSpecializable types (rel)Specialized types
Figure 4. Breakdown of referenced types - I
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
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
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
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
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
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.