20.01.2014 Views

thesis - Faculty of Information and Communication Technologies ...

thesis - Faculty of Information and Communication Technologies ...

thesis - Faculty of Information and Communication Technologies ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Chapter 4. Measuring Evolving S<strong>of</strong>tware<br />

Abbv. Name Description<br />

IAS Is Abstract A flag that is set to 1, if class is abstract<br />

IEX Is Exception A flag that is set to 1 if class has<br />

java.lang.Throwable as an ancestor<br />

INF Is Interface A flag that is set to 1 if class is an interface<br />

IPI Is Private A flag that is set to 1 if class is private<br />

IPR Is Protected A flag that is set to 1 if class is protected<br />

IPU Is Public A flag that is set to 1 if class is public<br />

IPK Is Package<br />

Accessible<br />

A flag that is set to 1 if the class has no<br />

visibility modifier <strong>and</strong> hence would revert to<br />

having package visibility<br />

Table 4.4: Flags extracted for each class.<br />

Once information from all the classes is extracted, we remove classes<br />

that are from external libraries that are not part <strong>of</strong> the core s<strong>of</strong>tware<br />

system under study. Though, we ensure that the set <strong>of</strong> input JAR files<br />

used in the Jar Extraction step does not consist <strong>of</strong> any external libraries<br />

(see Section 4.5.1), this additional step was needed since some projects<br />

merged all external library code into their core JAR file in order to reduce<br />

the number <strong>of</strong> different files that needed to be distributed. We<br />

identify <strong>and</strong> removed the set <strong>of</strong> classes that are from external libraries<br />

using the same process that we applied during the Jar Extraction step<br />

(see Section 4.5.1).<br />

The Java programming language provides developers the option for creating<br />

two different types <strong>of</strong> abstractions: a class, <strong>and</strong> an interface [108].<br />

Within the context <strong>of</strong> our study, the key distinction between these two<br />

abstractions is that interfaces do not contain any method bodies <strong>and</strong><br />

hence the metrics defined in Table 4.3 are not available for compiled<br />

Java interfaces which do not contain bytecode instructions in the method<br />

section <strong>of</strong> a class file. However, all <strong>of</strong> the other information (see Table<br />

4.1) is available <strong>and</strong> therefore used to compute the metrics defined<br />

in Table 4.2 <strong>and</strong> Table 4.4. We are also able to extract dependency information<br />

from an interface, that is, other Java classes that an interface<br />

depends upon (discussed in Section 4.5.4). In the rest <strong>of</strong> this <strong>thesis</strong>, to<br />

improve readability, we use the term class to indicate a compiled Java<br />

class, <strong>and</strong> it may be either a Java interface or a Java class. We use<br />

81

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!