1 Introduction
1.1 Outline
2 Overview
2.1 Research Questions
Research Question 1: To what extent does design pattern role explain the variation in change-proneness of classes, when controlling for class size? |
Research Question 2: To what extent does metapattern role explain the variation in change-proneness of classes, when controlling for class size? |
Research Question 3: When controlling for size, do metapattern roles explain as much of the variation in change-proneness as design pattern roles? |
Do (the purely) structural metapattern roles and pattern roles explain the variation in the sizes of classes playing those roles? |
3 Phylogeny: Metapatterns and Patterns
3.1 Connection Metapatterns
Meta pattern | Design pattern |
---|---|
1:1 Connection | Bridge, Builder, MediatorState, Strategy, Visitor |
1:N Connection | Abstract Factory, Command, Flyweight, Iterator, Observer, Prototype, AdapterProxy, Visitor |
1:1 Recursive Connection |
Decorator
|
1:N Recursive Connection | Composite, Interpreter, Visitor |
Unification | Factory Method, Template Method |
1:1 Recursive Unification |
Chain of Responsibility
|
1:N Recursive Unification | None |
No metapattern | Facade, Memento, Singleton |
Pattern |
template
|
hook
|
implementation
|
---|---|---|---|
Abstract factory |
client
|
factory
|
concrete factory
|
(Element tree)
|
client
|
product
|
concrete product
|
Adapter |
client
|
target
|
adapter
|
Command |
invoker
|
command
|
concrete command
|
Composite |
composite
|
component
|
leaf
|
Decorator |
decorator
|
component
|
concrete component
|
Factory method |
creator
|
creator
|
concrete creator
|
Observer |
subject
|
observer
|
concrete observer
|
Prototype |
client
|
prototype
|
concrete prototype
|
State/strategy |
context
|
state
|
concrete state
|
Template method |
abstract class
|
abstract class
|
concrete class
|
Visitor |
client
|
visitor
|
concrete visitor
|
(Product tree)
|
object structure
|
element
|
concrete element
|
3.2 Recursive Metapatterns
3.3 Unification Metapatterns
4 Related Work
5 Data Gathering and Methodology
5.1 Design Pattern Detection
5.2 Metapattern Detection
5.3 Tool Description
5.4 Pattern Counts
Pattern | JHotDraw | Xerces | ExclipseJDT | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Pattern counts | # | # | # | |||||||||
Role cardinality | 1 | 2 | N | 1 | 2 | N | 1 | 2 | N | |||
Design patterns | ||||||||||||
Adapter | 118 | 215 | 187 | 36 | 135 | 230 | 224 | 35 | 419 | 1516 | 1893 | 316 |
Abstract factory | 1259 | 128 | 171 | 148 | 2657 | 163 | 323 | 317 | 0 | NA | NA | NA |
Command | 50 | 183 | 106 | 49 | 88 | 234 | 167 | 95 | 285 | 1414 | 865 | 943 |
Composite | 72 | 317 | 57 | 2 | 13 | 92 | 5 | 0 | 92 | 825 | 96 | 0 |
Decorator | 22 | 220 | 22 | 3 | 0 | NA | NA | NA | 253 | 1101 | 395 | 45 |
Factory method | 444 | 204 | 205 | 12 | 596 | 56 | 26 | 2 | 3285 | 1570 | 1232 | 121 |
Observer | 69 | 86 | 143 | 33 | 64 | 292 | 49 | 36 | 208 | 332 | 299 | 100 |
Prototype | 2 | 44 | 0 | 0 | 0 | NA | NA | NA | 5 | 111 | 0 | 3 |
State/strategy | 46 | 276 | 37 | 7 | 95 | 634 | 114 | 21 | 317 | 2279 | 986 | 83 |
Template method | 63 | 184 | 241 | 50 | 90 | 270 | 357 | 55 | 470 | 1354 | 2433 | 396 |
Visitor | 1 | 21 | 8 | 0 | 6 | 59 | 46 | 14 | 43 | 503 | 327 | 298 |
Ptidej metapatterns | ||||||||||||
Connection | 236 | 272 | 519 | 75 | 307 | 848 | 553 | 103 | 1250 | 2004 | 3472 | 649 |
Recursive connection | 104 | 510 | 152 | 2 | 13 | 123 | 6 | 0 | 373 | 2103 | 686 | 44 |
Unification | 64 | 500 | 87 | 0 | 100 | 733 | 132 | 0 | 500 | 4220 | 804 | 0 |
Thex metapatterns | ||||||||||||
Connection | 339 | 380 | 319 | 6 | 289 | 486 | 203 | 13 | 3324 | 3484 | 2286 | 153 |
Recursive connection | 34 | 316 | 51 | 0 | 47 | 291 | 49 | 1 | 140 | 1025 | 340 | 14 |
Unification | 30 | 270 | 21 | 0 | 25 | 230 | 15 | 0 | 188 | 2578 | 226 | 0 |
Pattern | Key roles |
---|---|
Abstract factory | Abstract factory, abstract product |
Adapter | Target, adapter, adaptee |
Command | Invokder, command, client |
Composite | Composite, component |
Decorator | Component, decorator |
Observer | Subject, observer |
Prototype | Prototype |
State/strategy | State/strategy, context |
Template method | Abstract class |
Visitor | Visitor, element |
5.5 Methodology
Class |
template
|
hook
|
implementation
|
hook
code
|
implementation
code
|
---|---|---|---|---|---|
C
1
| 1 | 0 | 0 | -2/4 | -1/4 |
C
2
| 0 | 1 | 0 | 1 | 0 |
C
3
| 0 | 0 | 1 | 0 | 1 |
C
4
| 1 | 0 | 0 | -2/4 | -1/4 |
C
5
| 0 | 1 | 0 | 1 | 0 |
C
6
| 1 | 0 | 0 | -2/4 | -1/4 |
C
7
| 1 | 0 | 0 | -2/4 | -1/4 |
Pattern |
M
v
|
M
vr
|
M
vrs
|
M
vs
|
M
vr →s
| ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
T | H | M | rm | 2 | N |
R
2
| T | H | M | rm | 2 | N |
R
2
|
R
2
| T | H | M | rm | 2 | N |
R
2
| ||
Design patterns | |||||||||||||||||||||||
Adapter | 0.46 | · |
\(\Downarrow\)
| · | · |
\(\Uparrow\)
| 0.48 | · | · | · | ↓ | 0.57 | 0.57 |
\(\Uparrow\)
|
\(\Downarrow\)
| ↓ |
\(\Uparrow\)
|
\(\Uparrow\)
| 0.36 | ||||
Abstract factory | 0.54 | · |
\(\Uparrow\)
| 0.56 | · | · | · | 0.62 | 0.62 |
\(\Downarrow\)
| · | · |
\(\Uparrow\)
| 0.33 | |||||||||
(Product tree)
|
\(\Downarrow\)
| · | · |
\(\Downarrow\)
| |||||||||||||||||||
Command | 0.50 | · |
\(\Downarrow\)
| · · | · |
\(\Uparrow\)
| 0.55 | · | · |
\(\Downarrow\)
| · · | · |
\(\Uparrow\)
| 0.60 | 0.58 | · |
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
| · |
\(\Uparrow\)
| 0.25 | |
Composite | 0.34 | · |
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
| 0.43 | · | · |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.50 | 0.47 | · |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.40 | |||||
Decorator | 0.48 | ↑ | · | · | · | · | · | 0.48 | · | ↑ | · | · | · | · | 0.57 | 0.57 |
\(\Downarrow\)
|
\(\Uparrow\)
| ↑ | 0.23 | |||
Factory method | 0.48 | · | · |
\(\Downarrow\)
| ↓ |
\(\Uparrow\)
|
\(\Uparrow\)
| 0.52 | · | · |
\(\Downarrow\)
| · |
\(\Uparrow\)
|
\(\Uparrow\)
| 0.59 | 0.57 | ↑ | · |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.13 | |
Observer | 0.48 | · |
\(\Downarrow\)
| · |
\(\Uparrow\)
| ↓ | 0.53 | · | · | · |
\(\Downarrow\)
| · | 0.58 | 0.56 | · |
\(\Downarrow\)
| · | · |
\(\Uparrow\)
|
\(\Uparrow\)
| 0.39 | ||
Prototype |
NS
| · | · | · | · | · | · |
NS
| · | · | · | · | · | · |
NS
|
NS
| · | · | · | · | · | · |
NS
|
State/strategy | 0.40 | · |
\(\Downarrow\)
| · | ↑ |
\(\Uparrow\)
| 0.44 | · | · | · | · | · | 0.51 | 0.51 |
\(\Downarrow\)
| · |
\(\Uparrow\)
|
\(\Uparrow\)
| 0.41 | ||||
Template method | 0.45 |
\(\Downarrow\)
| ↓ |
\(\Uparrow\)
| 0.48 | · | · | · |
\(\Uparrow\)
| 0.57 | 0.56 | · |
\(\Downarrow\)
|
\(\Uparrow\)
| 0.29 | ||||||||
Visitor |
NS
| · | · | · | · | · | · |
NS
| · | · | · | · | · | · |
NS
|
NS
| · | · | · | · | · | · |
NS
|
Embedded metapatterns | |||||||||||||||||||||||
Connection | 0.37 | · |
\(\Downarrow\)
| ↓ | · |
\(\Uparrow\)
| 0.38 | ↑ |
\(\Uparrow\)
| · |
\(\Downarrow\)
| · | 0.46 | 0.45 | · |
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.36 | |||
Rec connection | 0.35 | · | ↓ |
\(\Downarrow\)
|
\(\Uparrow\)
| · | 0.37 | · |
\(\Uparrow\)
|
\(\Downarrow\)
| · | · | 0.47 | 0.45 | · |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.34 | |||
Unification | 0.37 |
\(\Downarrow\)
| · | ↑ | 0.38 | ↑ | · | 0.46 | 0.45 |
\(\Downarrow\)
| · | ↓ | 0.34 | ||||||||||
Thex metapatterns | |||||||||||||||||||||||
Connection | 0.37 | · |
\(\Downarrow\)
| · | · |
\(\Uparrow\)
| 0.38 | · |
\(\Uparrow\)
| · |
\(\Downarrow\)
| · | 0.49 | 0.47 |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.42 | |||||
Rec connection | 0.29 | · | · |
\(\Uparrow\)
| · | 0.33 | · |
\(\Uparrow\)
| · | · | 0.46 | 0.44 |
\(\Downarrow\)
| · |
\(\Uparrow\)
| · | 0.29 | ||||||
Unification | 0.37 |
\(\Uparrow\)
| · |
\(\Uparrow\)
| 0.43 | ↑ | · | · | 0.50 | 0.50 |
\(\Uparrow\)
| · |
\(\Uparrow\)
| 0.17 |
Pattern |
M
v
|
M
vr
|
M
vrs
|
M
vs
|
M
vr →s
| ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
T | H | M | rm | 2 | N |
R
2
| T | H | M | rm | 2 | N |
R
2
|
R
2
| T | H | M | rm | 2 | N |
R
2
| ||
Design patterns | |||||||||||||||||||||||
Adapter | 0.11 |
\(\Uparrow\)
|
\(\Downarrow\)
| · | · | · | 0.15 | · | · | · | · | · | 0.32 | 0.32 |
\(\Uparrow\)
|
\(\Downarrow\)
| ↑ |
\(\Uparrow\)
| · | 0.30 | |||
Abstract factory | 0.11 |
\(\Downarrow\)
| · |
\(\Downarrow\)
|
\(\Uparrow\)
| 0.25 | · | · |
\(\Downarrow\)
|
\(\Uparrow\)
| 0.31 | 0.30 |
\(\Downarrow\)
| · |
\(\Downarrow\)
|
\(\Uparrow\)
| 0.43 | ||||||
(Product tree)
|
\(\Downarrow\)
| · | · | · |
\(\Downarrow\)
|
\(\Downarrow\)
| |||||||||||||||||
Command | 0.11 | · |
\(\Downarrow\)
|
\(\Downarrow\)
| ↓ · | · |
\(\Uparrow\)
| 0.25 | · | ↓ |
\(\Downarrow\)
| · ↓ | · |
\(\Uparrow\)
| 0.32 | 0.28 | · |
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.35 |
Composite | 0.20 |
\(\Uparrow\)
| · | · | · | · | 0.29 | · |
\(\Downarrow\)
| · | · | 0.50 | 0.47 | ||||||||||
Decorator |
NA
|
NA
|
NA
|
NA
|
NA
| ||||||||||||||||||
Factory method |
NA
|
NA
|
NA
|
NA
|
NA
| ||||||||||||||||||
Observer | 0.40 | · | · | · |
\(\Uparrow\)
| 0.47 | · | · | · | ↓ | · |
\(\Uparrow\)
| 0.53 | 0.51 |
\(\Downarrow\)
|
\(\Downarrow\)
| · | · |
\(\Uparrow\)
|
\(\Uparrow\)
| 0.43 | ||
Prototype |
NA
|
NA
|
NA
|
NA
|
NA
| ||||||||||||||||||
State/strategy | 0.17 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.34 | · | · |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.43 | 0.41 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.30 | |||
Template method | 0.15 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
| ↑ | 0.23 | · | · |
\(\Downarrow\)
|
\(\Uparrow\)
| · | 0.37 | 0.36 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
| · | 0.19 | |||
Visitor |
NS
| · | · | · | · | · | · |
NS
| · | · | · | · | · | · |
NS
|
NS
| · | · | · | · | · | · |
NS
|
Embedded metapatterns | |||||||||||||||||||||||
Connection | 0.22 | · |
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.28 | · | · | ↓ | · |
\(\Uparrow\)
| 0.35 | 0.35 |
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.23 | |||
Rec connection | · | · | · | · | · | 0.29 | 0.29 |
\(\Uparrow\)
|
\(\Downarrow\)
| · | · | 0.20 | |||||||||||
Unification | 0.24 |
\(\Downarrow\)
| · | · | 0.26 | · | · |
\(\Uparrow\)
| 0.39 | 0.39 |
\(\Downarrow\)
| · |
\(\Downarrow\)
| 0.12 | |||||||||
Thex metapatterns | |||||||||||||||||||||||
Connection | 0.28 | · |
\(\Downarrow\)
| · |
\(\Uparrow\)
|
\(\Uparrow\)
| 0.35 |
\(\Downarrow\)
| · | · | · |
\(\Uparrow\)
| 0.39 | 0.37 |
\(\Uparrow\)
|
\(\Downarrow\)
| · |
\(\Uparrow\)
|
\(\Uparrow\)
| 0.49 | |||
Rec connection | 0.31 |
\(\Downarrow\)
|
\(\Downarrow\)
| · |
\(\Uparrow\)
| ↑ | 0.41 |
\(\Downarrow\)
| · | · |
\(\Uparrow\)
| · | 0.46 | 0.42 |
\(\Uparrow\)
|
\(\Downarrow\)
| ↑ |
\(\Uparrow\)
| · | 0.38 | |||
Unification | 0.38 | · | · |
\(\Uparrow\)
| 0.46 | · |
\(\Uparrow\)
| 0.56 | 0.54 |
\(\Uparrow\)
| · |
\(\Uparrow\)
| 0.20 |
Pattern |
M
v
|
M
vr
|
M
vrs
|
M
vs
|
M
vr →s
| ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
T | H | M | rm | 2 | N |
R
2
| T | H | M | rm | 2 | N |
R
2
|
R
2
| T | H | M | rm | 2 | N |
R
2
| ||
Design patterns | |||||||||||||||||||||||
Adapter | 0.04 | · |
\(\Downarrow\)
| · |
\(\Uparrow\)
| · | 0.08 |
\(\Uparrow\)
| · | 0.33 | 0.33 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
|
\(\Downarrow\)
| 0.32 | ||||||
Abstract factory |
NA
| · | · | · | · | · | · |
NA
| · | · | · | · | · | · |
NA
|
NA
| · | · | · | · | · | · |
NA
|
Command | 0.03 | · |
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
\(\Uparrow\)
| · |
\(\Uparrow\)
| 0.15 | ↓ | · |
\(\Downarrow\)
| · · | · |
\(\Uparrow\)
| 0.34 | 0.33 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
\(\Uparrow\)
| · |
\(\Uparrow\)
| 0.31 |
Composite | 0.07 |
\(\Uparrow\)
| · |
\(\Downarrow\)
|
\(\Uparrow\)
| · | 0.10 | · | · | · | · | 0.44 | 0.44 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
| · | 0.14 | ||||
Decorator | ↓ |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.05 | · | · | · | · | · |
\(\Uparrow\)
| 0.33 | 0.33 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.09 | ||||
Factory method | 0.02 |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.10 | · |
\(\Uparrow\)
|
\(\Downarrow\)
| · | ↑ |
\(\Uparrow\)
| 0.36 | 0.35 |
\(\Downarrow\)
|
\(\Uparrow\)
| · |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.19 | |
Observer | 0.04 |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Downarrow\)
| · |
\(\Uparrow\)
| 0.16 | · | · | · |
\(\Downarrow\)
|
\(\Uparrow\)
| 0.41 | 0.40 |
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
| · |
\(\Uparrow\)
|
\(\Uparrow\)
| 0.44 | ||
Prototype |
NS
| · | · | · | · | · | · |
NS
| · | · | · | · | · | · |
NS
|
NS
| · | · | · | · | · | · |
NS
|
State/strategy | 0.03 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.14 |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.35 | 0.34 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.27 | |||
Template method | 0.04 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
| · | 0.07 | · |
\(\Uparrow\)
|
\(\Downarrow\)
| · | 0.33 | 0.33 |
\(\Uparrow\)
|
\(\Downarrow\)
| · |
\(\Uparrow\)
|
\(\Downarrow\)
| 0.21 | |||||
Visitor | 0.03 |
\(\Downarrow\)
| · |
\(\Uparrow\)
|
\(\Uparrow\)
| 0.10 | · | · | · | · | ↑ | 0.34 | 0.33 |
\(\Downarrow\)
| · |
\(\Uparrow\)
|
\(\Uparrow\)
| 0.20 | |||||
(Element tree)
|
\(\Downarrow\)
|
\(\Downarrow\)
| · |
\(\Downarrow\)
| ↑ |
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
| |||||||||||||||
Embedded metapatterns | |||||||||||||||||||||||
Connection | 0.05 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.08 |
\(\Uparrow\)
| · |
\(\Downarrow\)
|
\(\Uparrow\)
| 0.32 | 0.32 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
| ↓ | 0.21 | ||||
Rec connection | 0.05 | ↑ |
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.09 | · | · |
\(\Downarrow\)
|
\(\Uparrow\)
| 0.37 | 0.37 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.11 | ||||
Unification | 0.05 |
\(\Downarrow\)
| · |
\(\Downarrow\)
| 0.09 | · | · |
\(\Uparrow\)
| 0.32 | 0.32 |
\(\Downarrow\)
| · |
\(\Downarrow\)
| 0.23 | |||||||||
Thex metapatterns | |||||||||||||||||||||||
Connection | 0.05 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.16 |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.32 | 0.30 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.45 | |||
Rec connection | 0.05 | · |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.12 | ↓ | · |
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.28 | 0.27 |
\(\Uparrow\)
|
\(\Downarrow\)
|
\(\Downarrow\)
|
\(\Uparrow\)
|
\(\Uparrow\)
| 0.18 | ||||
Unification | 0.05 |
\(\Uparrow\)
| · |
\(\Uparrow\)
| 0.07 |
\(\Downarrow\)
| · | 0.30 | 0.30 |
\(\Uparrow\)
| · |
\(\Uparrow\)
| 0.08 |