report part 1 done
This commit is contained in:
parent
703b77a39d
commit
82a505b60a
4 changed files with 29 additions and 9 deletions
|
@ -85,12 +85,16 @@ def parse(path: str):
|
||||||
# consider only the class matching the input file name, to skip inner classes
|
# consider only the class matching the input file name, to skip inner classes
|
||||||
if path.endswith(node.name + '.java'):
|
if path.endswith(node.name + '.java'):
|
||||||
fqdn = package_name + '.' + node.name
|
fqdn = package_name + '.' + node.name
|
||||||
|
print(fqdn)
|
||||||
|
|
||||||
fields = get_fields(node)
|
fields = get_fields(node)
|
||||||
methods = get_methods(node)
|
methods = get_methods(node)
|
||||||
|
|
||||||
cols = sorted(fields.union(methods))
|
cols = sorted(fields.union(methods))
|
||||||
|
|
||||||
|
print("# Attributes", len(cols))
|
||||||
|
print("# Feature vectors", len(node.methods))
|
||||||
|
|
||||||
df = pd.DataFrame(columns=cols, dtype=int)
|
df = pd.DataFrame(columns=cols, dtype=int)
|
||||||
for m in node.methods:
|
for m in node.methods:
|
||||||
# make sure method is included in csv file
|
# make sure method is included in csv file
|
||||||
|
@ -100,9 +104,6 @@ def parse(path: str):
|
||||||
m_methods = get_methods_accessed_by_method(m, methods)
|
m_methods = get_methods_accessed_by_method(m, methods)
|
||||||
|
|
||||||
for member in m_fields.union(m_methods):
|
for member in m_fields.union(m_methods):
|
||||||
if member not in fields and member not in methods:
|
|
||||||
print(member)
|
|
||||||
|
|
||||||
df.loc[m.name, member] = 1
|
df.loc[m.name, member] = 1
|
||||||
df = df.fillna(0)
|
df = df.fillna(0)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
,abort,actualEncoding,addEventListener,adoptNode,allowGrammarAccess,callUserDataHandlers,canRenameElements,changed,changes,checkDOMNSErr,checkNamespaceWF,checkQName,clearIdentifiers,clone,cloneNode,copyEventListeners,createAttribute,createAttributeNS,createCDATASection,createComment,createDocumentFragment,createDocumentType,createElement,createElementDefinition,createElementNS,createEntity,createEntityReference,createNotation,createProcessingInstruction,createTextNode,deletedText,dispatchEvent,docElement,docType,documentNumber,domNormalizer,encoding,errorChecking,fConfiguration,fDocumentURI,fFreeNLCache,fXPathEvaluator,freeNodeListCache,getAsync,getBaseURI,getDoctype,getDocumentElement,getDocumentURI,getDomConfig,getElementById,getElementsByTagName,getElementsByTagNameNS,getEncoding,getErrorChecking,getFeature,getIdentifier,getIdentifiers,getImplementation,getInputEncoding,getMutationEvents,getNodeListCache,getNodeName,getNodeNumber,getNodeType,getOwnerDocument,getStandalone,getStrictErrorChecking,getTextContent,getUserData,getUserDataRecord,getVersion,getXmlEncoding,getXmlStandalone,getXmlVersion,identifiers,importNode,insertBefore,insertedNode,insertedText,insertingNode,isKidOK,isNormalizeDocRequired,isValidQName,isXML11Version,isXMLName,isXMLVersionChanged,kidOK,load,loadXML,modifiedAttrValue,modifiedCharacterData,modifyingCharacterData,nodeCounter,nodeTable,normalizeDocument,putIdentifier,readObject,removeChild,removeEventListener,removeIdentifier,removeUserDataTable,removedAttrNode,removedNode,removingNode,renameNode,renamedAttrNode,renamedElement,replaceChild,replaceRenameElement,replacedCharacterData,replacedNode,replacedText,replacingData,replacingNode,saveXML,serialVersionUID,setAsync,setAttrNode,setDocumentURI,setEncoding,setErrorChecking,setInputEncoding,setMutationEvents,setStandalone,setStrictErrorChecking,setTextContent,setUserData,setUserDataTable,setVersion,setXmlEncoding,setXmlStandalone,setXmlVersion,standalone,undeferChildren,userData,version,writeObject,xml11Version,xmlVersionChanged,Node,UserDataHandler,kid,DOMMessageFormatter,DOMException,NamespaceContext
|
,abort,actualEncoding,addEventListener,adoptNode,allowGrammarAccess,callUserDataHandlers,canRenameElements,changed,changes,checkDOMNSErr,checkNamespaceWF,checkQName,clearIdentifiers,clone,cloneNode,copyEventListeners,createAttribute,createAttributeNS,createCDATASection,createComment,createDocumentFragment,createDocumentType,createElement,createElementDefinition,createElementNS,createEntity,createEntityReference,createNotation,createProcessingInstruction,createTextNode,deletedText,dispatchEvent,docElement,docType,documentNumber,domNormalizer,encoding,errorChecking,fConfiguration,fDocumentURI,fFreeNLCache,fXPathEvaluator,freeNodeListCache,getAsync,getBaseURI,getDoctype,getDocumentElement,getDocumentURI,getDomConfig,getElementById,getElementsByTagName,getElementsByTagNameNS,getEncoding,getErrorChecking,getFeature,getIdentifier,getIdentifiers,getImplementation,getInputEncoding,getMutationEvents,getNodeListCache,getNodeName,getNodeNumber,getNodeType,getOwnerDocument,getStandalone,getStrictErrorChecking,getTextContent,getUserData,getUserDataRecord,getVersion,getXmlEncoding,getXmlStandalone,getXmlVersion,identifiers,importNode,insertBefore,insertedNode,insertedText,insertingNode,isKidOK,isNormalizeDocRequired,isValidQName,isXML11Version,isXMLName,isXMLVersionChanged,kidOK,load,loadXML,modifiedAttrValue,modifiedCharacterData,modifyingCharacterData,nodeCounter,nodeTable,normalizeDocument,putIdentifier,readObject,removeChild,removeEventListener,removeIdentifier,removeUserDataTable,removedAttrNode,removedNode,removingNode,renameNode,renamedAttrNode,renamedElement,replaceChild,replaceRenameElement,replacedCharacterData,replacedNode,replacedText,replacingData,replacingNode,saveXML,serialVersionUID,setAsync,setAttrNode,setDocumentURI,setEncoding,setErrorChecking,setInputEncoding,setMutationEvents,setStandalone,setStrictErrorChecking,setTextContent,setUserData,setUserDataTable,setVersion,setXmlEncoding,setXmlStandalone,setXmlVersion,standalone,undeferChildren,userData,version,writeObject,xml11Version,xmlVersionChanged,Node,UserDataHandler,kid,DOMException,DOMMessageFormatter,NamespaceContext
|
||||||
getOwnerDocument,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,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,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,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
|
getOwnerDocument,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,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,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,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
|
||||||
getNodeType,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,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,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,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
|
getNodeType,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,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,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,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
|
||||||
getNodeName,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,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,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,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
|
getNodeName,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,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,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,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
|
||||||
|
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
author: Claudio Maggioni
|
author: Claudio Maggioni
|
||||||
title: Information Modelling & Analysis -- Project 1
|
title: Information Modelling & Analysis -- Project 1
|
||||||
|
geometry: margin=2.5cm,bottom=3cm
|
||||||
---
|
---
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
@ -31,6 +32,29 @@ Commit ID: **TBD**
|
||||||
|
|
||||||
## God Classes
|
## God Classes
|
||||||
|
|
||||||
|
The first part of the project requires to label some classes of the _Xerces_
|
||||||
|
project as "God classes" based on the number of methods each class has.
|
||||||
|
Specifically, I label "God classes" the classes that have a number of methods
|
||||||
|
six times the standard deviation above the the mean number of methods, i.e. where
|
||||||
|
the condition
|
||||||
|
|
||||||
|
$$|M(C)| > \mu(M) + 6\sigma(M)$$
|
||||||
|
|
||||||
|
holds.
|
||||||
|
|
||||||
|
To scan and compute the number of methods of each class I use the Python library `javalang`, which implements the Java AST and parser. The Python script
|
||||||
|
`./find_god_classes.py` uses this library to parse each file in the project and
|
||||||
|
compute the number of methods of each class. Note that only non-constructor methods are counted (specifically the code counts the number of `method` nodes in each `ClassDeclaration` node).
|
||||||
|
|
||||||
|
Then, the script computes mean and standard
|
||||||
|
deviation of the number of methods and filters the list of classes according to the
|
||||||
|
condition described above. The file `god_classes/god_classes.csv` then is outputted
|
||||||
|
listing all the god classes found.
|
||||||
|
|
||||||
|
The god classes I identified, and their corresponding number of methods
|
||||||
|
can be found in Table [1](#tab:god_classes){reference-type="ref"
|
||||||
|
reference="tab:god_classes"}.
|
||||||
|
|
||||||
::: {#tab:god_classes}
|
::: {#tab:god_classes}
|
||||||
---------------------------------------------- ---------------
|
---------------------------------------------- ---------------
|
||||||
**Class Name** **\# Methods**
|
**Class Name** **\# Methods**
|
||||||
|
@ -43,11 +67,6 @@ Commit ID: **TBD**
|
||||||
: Identified God Classes
|
: Identified God Classes
|
||||||
:::
|
:::
|
||||||
|
|
||||||
The god classes I identified, and their corresponding number of methods
|
|
||||||
can be found in Table [1](#tab:god_classes){reference-type="ref"
|
|
||||||
reference="tab:god_classes"}.
|
|
||||||
|
|
||||||
Note: the number of methods was computed by considering only methods and not constructors.
|
|
||||||
|
|
||||||
## Feature Vectors
|
## Feature Vectors
|
||||||
|
|
||||||
|
|
BIN
report/main.pdf
BIN
report/main.pdf
Binary file not shown.
Reference in a new issue