Factory method - Increasing the reusability at the cost of understandability

Similar documents
Entropy as a Measure of Object-Oriented Design Quality

An Investigation of Design Level Class Cohesion Metrics

UML. Design Principles.

Exploring Design Level Class Cohesion Metrics

Indicators of Structural Stability of Object-Oriented Designs: A Case Study

Designing and Evaluating Generic Ontologies

ON THE COMPLEXITY OF SCHEDULING UNIVERSITY COURSES. A Thesis. Presented to. the Faculty of California Polytechnic State University, San Luis Obispo

Extensibility Patterns: Extension Access

A set theoretic view of the ISA hierarchy

PRUNING PROCEDURE FOR INCOMPLETE-OBSERVATION DIAGNOSTIC MODEL SIMPLIFICATION

Descriptive Statistics (And a little bit on rounding and significant digits)

Improved Metrics for Non-Classic Test Prioritization Problems

Discrete Finite Probability Probability 1

Techniques of Java Programming

CS 700: Quantitative Methods & Experimental Design in Computer Science

Demand Forecasting. for. Microsoft Dynamics 365 for Operations. User Guide. Release 7.1. April 2018

CALCULATION OF THE MINIMUM COMPUTATIONAL COMPLEXITY BASED ON INFORMATION ENTROPY

Supplementary Logic Notes CSE 321 Winter 2009

Mathematical Foundations of Programming. Nicolai Kraus. Draft of February 15, 2018

Propositional Logic Review

Mathematical Olympiad for Girls

Aspect-Oriented Refactoring of a Two-Dimensional Single Player Fixed Shooter Game Application Using AspectJ

THE SIMPLE PROOF OF GOLDBACH'S CONJECTURE. by Miles Mathis

Flexible Support for Spatial Decision-Making

Activities, Fragments and Intents

MATH2206 Prob Stat/20.Jan Weekly Review 1-2

MA554 Assessment 1 Cosets and Lagrange s theorem

Information System Decomposition Quality

An Operational Semantics for the Dataflow Algebra. A. J. Cowling

* 8 Groups, with Appendix containing Rings and Fields.

Quadratic Equations Part I

Getting Started with Communications Engineering

SDS developer guide. Develop distributed and parallel applications in Java. Nathanaël Cottin. version

What Every Programmer Should Know About Floating-Point Arithmetic DRAFT. Last updated: November 3, Abstract

SpringerBriefs in Statistics

Algebra Year 10. Language

CSCI3390-Lecture 6: An Undecidable Problem

Summary and discussion of: Controlling the False Discovery Rate: A Practical and Powerful Approach to Multiple Testing

0. Introduction 1 0. INTRODUCTION

Basics of Proofs. 1 The Basics. 2 Proof Strategies. 2.1 Understand What s Going On

Flexible Support for Spatial Decision- Making

Group Decision-Making with Incomplete Fuzzy Linguistic Preference Relations

Cell-based Model For GIS Generalization

Structure of Materials Prof. Anandh Subramaniam Department of Material Science and Engineering Indian Institute of Technology, Kanpur

PHIL12A Section answers, 14 February 2011

Natural Language Processing Prof. Pawan Goyal Department of Computer Science and Engineering Indian Institute of Technology, Kharagpur

Dictionary of ligands

ISO INTERNATIONAL STANDARD. Geographic information Spatial referencing by coordinates

Introduction. 1 University of Pennsylvania, Wharton Finance Department, Steinberg Hall-Dietrich Hall, 3620

1 Trees. Listing 1: Node with two child reference. public class ptwochildnode { protected Object data ; protected ptwochildnode l e f t, r i g h t ;

1 Using standard errors when comparing estimated values

The TLA + proof system

Evolutionary Multiobjective. Optimization Methods for the Shape Design of Industrial Electromagnetic Devices. P. Di Barba, University of Pavia, Italy

Efficiently merging symbolic rules into integrated rules

Critical Reading of Optimization Methods for Logical Inference [1]

Probability and Statistics

Conditional probabilities and graphical models

Igor Emri Arkady Voloshin. Statics. Learning from Engineering Examples

Automated and Human Proofs in General Mathematics: An Initial Comparison

Lecture December 2009 Fall 2009 Scribe: R. Ring In this lecture we will talk about

Incompatibility Paradoxes

ECE521 Lecture 7/8. Logistic Regression

Information System Design IT60105

PRELIMINARY MEASUREMENTS IN IDENTIFYING DESIGN FLAWS

Denotational Semantics

An object-oriented design process. Weather system description. Layered architecture. Process stages. System context and models of use

Regression, part II. I. What does it all mean? A) Notice that so far all we ve done is math.

THE LOGIC OF COMPOUND STATEMENTS

FACULTY OF SCIENCE ACADEMY OF COMPUTER SCIENCE AND SOFTWARE ENGINEERING OBJECT ORIENTED PROGRAMMING DATE 09/06/2014 SESSION 8:30-10:30

Lecture Notes on Data Abstraction

Requirements Validation. Content. What the standards say (*) ?? Validation, Verification, Accreditation!! Correctness and completeness

(Refer Slide Time: 0:21)

Multivariable Calculus with MATLAB

Safety and Reliability of Embedded Systems. (Sicherheit und Zuverlässigkeit eingebetteter Systeme) Fault Tree Analysis Obscurities and Open Issues

rethinking software design by analyzing state

MTAT Software Engineering

Absolute motion versus relative motion in Special Relativity is not dealt with properly

Sharing Objects. Pieter van den Hombergh. Fontys Hogeschool voor Techniek en Logistiek. February 15, 2017

Announcements. John Jannotti (cs32) Design Patterns Feb 13, / 1

Why Learning Logic? Logic. Propositional Logic. Compound Propositions

Risk Assessment of E-Commerce Projects Using Evidential Reasoning

Engineering for Compatibility

Chapter 8: An Introduction to Probability and Statistics

FACULTY OF SCIENCE ACADEMY OF COMPUTER SCIENCE AND SOFTWARE ENGINEERING OBJECT ORIENTED PROGRAMMING DATE 07/2014 SESSION 8:00-10:00

Decision Theory and the Logic of Provability

Arguments and Proofs. 1. A set of sentences (the premises) 2. A sentence (the conclusion)

Midterm 2 V1. Introduction to Artificial Intelligence. CS 188 Spring 2015

Introduction to ecosystem modelling Stages of the modelling process

Notes from Yesterday s Discussion. Big Picture. CIS 500 Software Foundations Fall November 1. Some lessons.

This document is a preview generated by EVS

Metrics for Data Uniformity of User Scenarios through User Interaction Diagrams

Hypothesis testing I. - In particular, we are talking about statistical hypotheses. [get everyone s finger length!] n =

Cover Page. The handle holds various files of this Leiden University dissertation

Try to find a good excuse!

Sequences. We know that the functions can be defined on any subsets of R. As the set of positive integers

Biased Urn Theory. Agner Fog October 4, 2007

Modal Dependence Logic

A JML Specification of the Design Pattern Visitor

THE ROLE OF COMPUTER BASED TECHNOLOGY IN DEVELOPING UNDERSTANDING OF THE CONCEPT OF SAMPLING DISTRIBUTION

Game Theory Lecture 10+11: Knowledge

Transcription:

Factory method - Increasing the reusability at the cost of understandability The author Linkping University Linkping, Sweden Email: liuid23@student.liu.se Abstract This paper describes how Bansiya and Davis s well cited software quality suit contradicts previous results regarding the effects the factory method design pattern has on understandability. That is, the metric suite has an inbuilt bias towards increasing the understandability when one uses simple designs of the factory method in larger designs. This contradicts the previous results that shows that the understandability decreases when one uses the factory method design pattern. Moreover, it also shows that the metric can agree with previous results regarding the effects the same pattern has on reusability. I. INTRODUCTION The effects of using design patterns for object oriented programming has been studied quite thoroughly. For example, Ampatzoglou, Charalampidou and Stamelos did a mapping study, a type of systematic literature study, about the effects of design patterns on software quality in 203 that used 8 papers as their data []. Another interesting area of research is that of software metric. That is, a metric that measures the overall, or parts of, the quality of the code. There are many metrics, based on different principles, of this sort. Given all the work put into these metrics, it s not far fetched that one evaluate the effects of a design pattern by using one or more of them. However, only 6 of the 8 papers that Ampatzoglou, Charalampidou and Stamelos included in their paper used software metrics to evaluate the effects of the design pattern []. They state that using metrics isn t better than using expert knowledge in controlled experiments. However, this low amount of studies based on metrics leaves one question open. Can one expect different results regarding the effects of design pattern on software quality compared to that of the controlled experiments? Moreover, is there an inbuilt agreement with software metrics and the design pattern. That is, can one always expect that the usage of a specific design pattern will affect the software quality in the same way according to the software metric? To do a general study of all the design patterns, all aspects of software qualities and all the software metrics that exists is not possible within the limits of this study. Therefore, this paper is restricted to study the factory method design pattern and its effect on the reusability and understandability aspects of software quality. Moreover, the paper will be restricted to the metrics defined by Bansiya and Davis [2]. As a result, this paper aims to answer the following questions: ) Can reusability, according to Bansiya and Davis s metric suite, be increased by refactoring so that the factory method design pattern is used? 2) If so, is it at the cost of decreasing understandability? Again according to Bansiya and Davis s metric suite. 3) Do the metric in question have an inbuilt agreement with the effects of the factory method design pattern on software quality? A. The pattern II. THE FACTORY DESIGN PATTERN Gamman et al (commonly refereed to as the gang of four or GoF for short) defined the factory method design pattern as one of their creational patterns that in their book Design Patterns - Elements of Reusable Object-Oriented Software [3]. The purpose of the pattern is to abstract the creation of an object for which the caller only wants or needs to know that it derives from a specific class. I.e. the caller does not want or need to know which derived class it gets. Therefore, the caller delegates the creation to a factory. Thereby, abstracting the creational process. The pattern consists of a Product, one or more ConcreteProducts, a Creator and zero or more ConcreteCreators[3]. With this naming the Product is a base (abstract) class or interface and the ConcreteProducts are the derived classes. These are the classes that might be instantiated but the caller does not need to know or wants to know which one but only that it is a Product. The Creator is the base class or interface for the classes that defines the factory method and the ConcreteCreators are its derived classes (if any exists). B. Observed effects Throughout the study of design patterns it has been observed that they can have both positive and negative effects on the software quality []. Interestingly, these are not necessarily mutex in each case. If one divides software quality into different sub-properties, then one will find that a design pattern can affect one of the sub-properties of software quality positively while another is affected negatively. There exists many categorisations of software quality into sub-properties. One of the more known is the original ISO 926-3 standard and the later ISO/IEC 25000:204. However, there are many more categorisations and a significant amount of them are based on the previously mentioned ISO standard(s).

Khomh and Gueheneuce carried out a quantitative study of design patterns to determine the effects on software quality. In their study they found that the factory method had a positive effect on the properties that they called expandability and reusability. However, they also got the result that the very same pattern had a negative effect on the understandability of the software [4]. III. SOFTWARE METRICS Bansiya and Davis have defined a set of metrics that can be weighted together to give an value for the different properties of software quality that they have defined[2]. These properties are reusability, flexibility, understandability, functionality, extendability and effectiveness. Out of these only reusability and understandability is of interest for this study. In their article Bansiya and Davis connects each the software properties to object oriented design properties that affects the specific software property. Thereafter, the design properties are connected to a metric and their normalised values are weighted together for each software quality property as a compound metric. A summary for how the reusability and understandability quality properties is broken down to metrics [2] can be found in table I. Unfortunately, the description of the metrics are a bit vague in the original paper and some references are simply not available. Moreover, no documents aiming to explain these metrics in details was found. Fortunately, Keeffe and Cinnide included a detailed interpretation of the metrics in their paper [5]. The following sections will describe the relevant metrics: A. Average number of ancestors The average number of ancestors (ANA) is a metric that aims to measure the abstraction software property. It is calculated as follows [2]: ) For all classes calculate the number of ancestors at any level. For example, if class A inherit class B which in turn inherit class C, then A gets the value 2. 2) Calculate the average of the values from step. In the example above, this becomes ( 2++0 3 = ). B. Data access metric The data access metric (DAM) aims to calculate how well encapsulated the software is. This is calculated by summing the number of private and protected attributes in a class and divide it by the total number of attributes in the class [2]. This metric is class centred and can be combined to cover the whole design by taking the average value of the DAM value for all classes with at least one attribute in the design [5]. The averaged metric will be called averaged data access metric (adam) in this paper to be clear. C. Direct class coupling The direct class coupling (DCC) metric estimates how coupled a class is. This is done by counting the number of classes (excluding itself) it is connected to through attribute declaration and message passing in methods (parameters) [2]. Obvious, this is a class oriented metric which can be translated to a design level metric by taking the average of all the classes [5]. Moreover, the original description of the metric allows for interpreting that the library classes should be counted to this. However, Keeffe and Cinnide excludes these library functions from the metric [5]. The resulting design metric will be called averaged direct class coupling () in this paper for clarity. D. Cohesion among methods in class Cohesion among methods in class (CAM) is a class centred metric that is calculated as follows [2]: ) Count all the parameter types to all the methods in the class. 2) For each method, divide the number of parameter types for the method with the value from step one. 3) Take the average of the calculated value for all the methods in the class. To make this metric a design metric instead of a class centred metric the average value for all the classes is used [5]. Moreover, any implicit parameter to the own class is ignored. In addition, a class without parameters will get the value. The resulting design metric will be called averaged cohesion among methods in class () in this paper. E. Number of polymorphic methods The number of polymorphic methods (NOP) is counted as the number of methods in a class that can express polymorphic behaviour [2]. Keeffe and Cinnide defines polymorphic behaviour in more generic way than the original Such methods in C++ are marked as virtual [2], as a method that is overridden by any descendent class. This allows for calculating the metric for languages that does not use such constructs, for example Java. Moreover, they make it a design centred metric by taking the sum of NOP for all classes (henceforth referred to as sum of number of polymorphic methods, snop). F. Number of methods The number of methods (NOM) is simply calculated as the number of methods in a class [2]. From this class centred metric a design centred metric can be gained by taking the sum over all the classes in the design [5]. The resulting metric will be called sum of number of methods (snom) in this paper. G. Design size in classes The design size in classes () metric is calculated by counting all the classes in the design [2]. H. Class interface size The class interface size (CIS) metric is calculated by counting all the public methods in a class [2]. To extract a design centred metric from this class centred metric, one takes the average of the CIS value for all classes [5]. This metric will be called average class interface size () in this paper.

Table I MAPPING OF SOFTWARE QUALITY PROPERTIES TO METRICS. ALL THE ABBREVIATIONS ARE EXPLAINED IN THE SUB-SECTIONS OF SECTION III. Quality properties Relevant design properties Weighted metrics Understandability Abstraction, encapsulation, coupling, cohesion, polymorphism, -0.33*ANA+0.33*aDAM-0.33*+0.33*-0.33*sNOPcomplexity and design size 0.33*sNOM-0.33* Reusability Coupling, cohesion, messaging and design size -0.25*+0.25*+0.5*+0.5* IV. METHOD To be able to answer the research questions presented in the introduction, the study is divided into two parts. First is a case study that aims to answer the first two questions regarding if the effects of implementing the factory method design pattern according to Bansiya and Davis s metric suite can agree with the previous results regarding understandability and reusability. The second part is a formal transformation of case when the factory method can be applied. This will then be used as a basis for determine if the metric suite agrees with the observed effects of the factory method design pattern. The following to sections describes the methodology for these two parts. A. Case study FreeCol To evaluate if the factory method increases the reusability and decreases the understandability according to the metric suite presented by Bansiya and Davis [2] a case study will be done. The study will be conducted using a subset of the code for the game FreeCol 2, the package net.sf.freecol.common.option. When the metrics are calculated, the values are normalised with respect to the version before the factory method was implemented. This is the same step taken by Bansiya and Davis in the original paper [2]. Finally, the metrics are weighted together according to the formulas in table I. Note that a higher value is better for both understandability and reusability. B. Inbuilt metric bias When evaluating if Bansiya and Davis s metric suite [2] agrees with the observed effects a formal transformation will be done. This means that there will be a transformation model for how the design changes when refactoring so that it implements the factory method design pattern. Based on this model, parametrised metric values will be calculated and compared. The parametrised metric values can then be compared to see if and under which conditions that Bansiya and Davis s metric suite agrees with the observed effects of the factory method. A. Case study FreeCol V. RESULTS ) Changes in the code: In the net.sf.freecol.common.option package, there s method called readoption method in the 2 FreeCol is a free and open source clone of Sid Meier s Colonization. The code can be acquired from their website http://www.freecol.org p r o t e c t e d A b s t r a c t O p t i o n r e a d O p t i o n ( XMLStreamReader i n ) throws XMLStreamException { A b s t r a c t O p t i o n o p t i o n = n u l l ; i f (ACTION TAG l o g g e r. f i n e s t ( S k i p p i n g a c t i o n + g e t A t t r i b u t e ( in, ID ATTRIBUTE TAG, ) ) ; e l s e i f ( A b s t r a c t U n i t O p t i o n. getxmlelementtagname ( ) o p t i o n = new A b s t r a c t U n i t O p t i o n ( s p ec ) ; e l s e i f ( AudioMixerOption. getxmlelementtagname ( ) o p t i o n = new AudioMixerOption ( s pec ) ; e l s e i f ( BooleanOption. getxmlelementtagname ( ) o p t i o n = new BooleanOption ( s pec ) ; e l s e i f ( S t r i n g O p t i o n. getxmlelementtagname ( ) o p t i o n = new S t r i n g O p t i o n ( spec ) ; e l s e i f ( U n i t L i s t O p t i o n. getxmlelementtagname ( ) o p t i o n = new U n i t L i s t O p t i o n ( s pec ) ; e l s e i f ( UnitTypeOption. getxmlelementtagname ( ) o p t i o n = new UnitTypeOption ( s p ec ) ; e l s e { l o g g e r. f i n e s t ( P a r s i n g of o p t i o n t y p e + t a g + i s n o t implemented y e t ) ; Figure. The original implementation of the readoption method that contains a common structure for a factory method. abstractoption class. The method is one of all the methods spread over the whole implementation of the game that loads data from xml files (for example loading scenarios). However, this method contains a part shown in listing that is a common structure for a factory method. That is, the method itself isn t concerned with which derived class it creates just that its super class is abstractoption. Moreover, having this functionality as a part of a method which responsibility is something else yields a lower reusability since this part cannot be called from another place. Refactoring this part of the code by using the factory method design pattern resulted in a new class called OptionFactory. This class consists of a static map and a public static method show in listing 2. This allows changing the readoption method so that it no longer is responsible

f i n a l c l a s s O p t i o n F a c t o r y { p r i v a t e s t a t i c Map<S t r i n g, C o n s t r u c t o r > c o n s t r u c t o r M a p = new HashMap <>(); s t a t i c { / / P o p u l a t i n g t h e map s t a t i c A b s t r a c t O p t i o n c r e a t e O p t i o n ( S t r i n g tag, S p e c i f i c a t i o n spec ){ t r y { return ( A b s t r a c t O p t i o n ) c o n s t r u c t o r M a p. g e t ( t a g ). n e w I n s t a n c e ( spec ) ; catch ( I n s t a n t i a t i o n E x c e p t i o n I n v o c a t i o n T a r g e t E x c e p t i o n e ) { l o g g e r. f i n e s t ( Unable t o c r e a t e o p t i o n of t y p e + t a g ) ; return n u l l ; catch ( I l l e g a l A c c e s s E x c e p t i o n e ) { l o g g e r. f i n e s t ( P a r s i n g of o p t i o n t y p e + t a g + i s n o t implemented y e t ) ; return n u l l ; Figure 2. The new OptionFactory class which is responsible for creating options. p r o t e c t e d A b s t r a c t O p t i o n r e a d O p t i o n ( XMLStreamReader i n ) throws XMLStreamException { A b s t r a c t O p t i o n o p t i o n = n u l l ; i f (ACTION TAG l o g g e r. f i n e s t ( S k i p p i n g a c t i o n + g e t A t t r i b u t e ( in, ID ATTRIBUTE TAG, ) ) ; e l s e { o p t i o n = O p t i o n F a c t o r y. c r e a t e O p t i o n ( tag, spec ) ; i f ( o p t i o n == n u l l ) Figure 3. The new version of the readoption method that is using the newly created OptionFactory. for knowing which tags that corresponds to the different file types as shown in listing 3. The gain from this is that the AbstractOption is decoupled from the classes that derives from it and that the code can now be reused to create options in other places as well. 2) Software quality effects: The changes in the code mentioned in the previous section had the effect on software quality in that the reusability increased by 6% and that the understandability increased by 8%. All the metric values and their normalisation is shown in table II. B. Inbuilt metric bias The factory design pattern that is used for the transformation model is the simplest for of the textbook implementation. That is, the factory will only consist of one class that contains one public method and no private or protected methods. The new metric values after the transformation has been applied as well as the normalised values are shown in table III. A short description of how these values were acquired follows here: ANA: The factory class does not have any ancestors and therefore only modifies this metric by increasing the design size by. adam: The factory class does not have any attributes at all (only a public method). Therefore, this metric is only changed due to the larger design size. : The only possibility to make a general transformation for this metric is to introduce a new variable. This variable, called in this paper, is the number of different non-library classes that are parameters to the method in the factory pattern. By using this variable one can get the after the transformation. : There is only one method in the factory implementation and therefore the CAM for that class is always one. snop: The factory method does not inherit from any other class and no classes inherit from it. Therefore, this metric value change only because the design size change. : The design size increases with one since one new class is introduced. : The factory method has one public method which affects this metric. Calculating the changes in understandability, abbreviated to u, from the normalised values in table III is done as follows (according to the formula for understandability in table I): u = 0.33 + 0.33 0.33 + + 0.33 0.33 + 0.33 snom + snom 0.33 = 0.33 + 0.33 0.33 + + 0.33 0.33 + 0.33 + 0.33 0.33 0.33 snom The interesting part is when this value is smaller than the normalised value before the transformation (the understandability for the base is always - with this metric): u 0.33 + 0.33 0.33 + + 0.33 0.33 + 0.33 + 0.33 0.33 0.33 snom +

Table II CALCULATED METRIC VALUES FOR THE net.sf.freecol.common.option PACKAGE BEFORE AND AFTER THE REFACTORING WITH THE FACTORY METHOD DESIGN PATTERN. Version ANA adam snop snom Before 3.48 0.93.38 0.9 28 238 2 8.57 After 3.32 0.93.36 0.23 28 239 22 8.8 Normalised before.00.00.00.00.00.00.00.00 Normalised after 0.95.00 0.99.2.00.00.05 0.95 Table III VALUES OF THE METRIC AFTER TRANSFORMATION EXPRESSED USING VALUES BEFORE TRANSFORMATION. Metric After transformation Normalised ANA adam ANA adam + snop snop snom snom + ANA ANA = adam adam = + snom+ snom + + snom + ap + + + + snom + + 2 + snom 0 + 2 + DCC + + snom The value for reusability, abbreviated to r, can be calculated similarly as the understandability was calculated (based on the formula for reusability presented in table I): + r = 0.25 = 0.25 + + 0.25 + 0.25 () + = 0.25 + 0.25 Again the interesting part is when the reusability is larger after the transformation than before the transformation (the reusability for the base is always ): r 0.25 + 0.25 0.25 + 0.25 + 0.25 + 0.25 0.5 + 0.5 0 + + 2 2 + 2 + 2 0 + 2 + 2 (2) As one can see, neither () nor (2) is always true. Instead, they express a constraint for when the effects of the factory method design pattern agrees with the previous results. A. Case study FreeCol VI. DISCUSSION The case study shows that the understandability and the reusability both increased when the code was refactored so that it uses the factory method design pattern. This is enough to answer the first question regarding if one can increase the reusability according to Bansiya and Davis s metric suite by using the factory method. Unfortunately, the results regarding understandability is not enough to say anything regarding the second question since it is not a positive result and not general enough to decisively answer the question with a no. There are naturally many possible reasons to why the gained result in this case study does not agree with the previously observed results. However, some of them are more likely. Firstly, the possibility that the code base used in this case study differentiate in some important properties compared to those used in the previous studies. Unfortunately, this is

not something one can easily verify and will therefore be left as a potential unexplored explanation. Secondly, there is the possibility that Bansiya and Davis s metric suite fails to measure the software qualities correctly. The final explanation that will be covered is the possibility of miscalculations when calculating the metric values. However, the risk of this happening has been reduced by recalculating the metric values at a later point in time. The second explanation is just like the first hard to verify. However, there are some interesting points here. Firstly, understandability is usually defined in terms of how easy software is understood. Naturally, this allows for subjective measurement since, for example, experience potentially could influence what is easy to understand. Therefore, it is not certain that Bansiya and Davis s metric suite for understandability takes the same aspects of the software code into consideration than what was done in the previous studies regarding understandability. This would not be a strict flaw in the metric, only a difference. Unfortunately, there are issues with the metric as well. For example, the DDC metric aims to measure how coupled a class is. However, it does not take static classes into consideration. Similarly, it does not count the classes used inside the method bodies since it is a metric for design level and not implementation level. B. Inbuilt metric bias The results from this part of the study are two constraints that has to be fulfilled for the metric suite to agree with the previous studies. In a sense, this means that the metric suite does not agree with the previous results since it is not unconditional. However, by looking closer at the constraints in the result one can gain more information. As seen in (), the understandability constraint is dependent on, 2,, snom, and. We know that which allows for the simplification of the criteria to: 2 + + snom DCC Moreover, it s quite reasonable that the following holds for larger design sizes: 2 DCC This is because the left hand side grows linearly to the number of classes in the design while the right hand side grows linearly with the number of different non-library classes that the factory class is connected to through the method parameters. This cannot be expected to grow linearly with the design size but rather to reach a quite stable value since the factory is not supposed to handle construction of all classes in the design. Based on the above, it follows that the constraint for understandability is false under all circumstances when the design size is large and the assumption done above is valid. Therefore, it can be expected that the metric will yield that the understandability increases for larger design sizes. The constraint for reusability, (2), depends on, 2, 2 and. As reasoned above is likely to approach a constant value as the design size grows. Moreover, 2 will approach 0 as the design size grows. Unfortunately, 2 and is also likely to be stabilising as the design size grows. This means that when the design size grows the constraint will approach: + 2 All of these metrics are specific for each project ( depends on the parameter types in the classes and depends on how many public methods the classes have). Hence, there is no way to conclude for a general case if this constraint will evaluate to true or false. Finally, one should note that the two constraints are based on implementing a very basic version of the factory method design pattern. Hence, any conclusion based on this assumption must be regarding the most simple case. To be able to draw a general conclusion, the constraint must be generalised to cover the general implementation of the factory method design pattern as well. VII. CONCLUSION DCC The conclusions that can be drawn from this study are (in the order of the research questions): ) The factory method design pattern can increase the reusability according to Bansiya and Davis s metric suite. 2) Based on the results in this study it is not possible to draw a conclusion about if the understandability can decrease by implementing the factory method design pattern. 3) The metric does not have an absolute inbuilt agreement with the previous results. That being said, the metric will disagree with the previous results regarding understandability as long as 2 and the implemented factory method has a simple class design, as used in this study. This means that the metric is unlikely to agree with the previous results as long as the design size is larger and the factory method has a simple class design. VIII. FURTHER STUDIES There are some interesting questions that have not been answered in this study left open. One of them is validating that Bansiya and Davis s metric suite manage to measure understandability in a good manner independent on the subjectivity of understandability. This requires a wider study where designs are evaluated by practitioners with different background, experience and knowledge. Another interesting study to expand the constraints from this study to be more general and to generate more constraints for other design patterns as well. Given such criterion one can validate Bansiya and Davis s metric suite by comparing them with previous

results regarding the effects design patterns has on software quality. Moreover, if the metric suite shows to be valid, then these constraints can be used as a basis for automatically give suggestions if a design pattern could be used to increase the software quality to the developers and designers. REFERENCES [] A. Ampatzoglou, S. Charalampidou, and I. Stamelos, Research state of the art on gof design patterns: A mapping study, Journal of systems and software, vol. 86, no. 7, pp. 945 964, 203. [2] J. Bansiya and C. G. Davis, A hierarchical model for object-oriented design quality assessment, Software engineering, ieee transactions on, vol. 28, no., pp. 4 7, 2002. [3] E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design patterns elements of reusale object-oriented software. Addison-Wesley, 995. [4] F. Khomh and Y. G. Gueheneuce, Do design patterns impact software quality positively?, in 2008 2th european conference on software maintenance and reengineering, Apr. 2008, pp. 274 278. [5] M. O Keeffe and M. Ó. Cinnéide, Automated design improvement by example, Frontiers in artificial intelligence and applications, vol. 6, p. 35, 2007.