reusable due to each layer being executable and
maintainable because of small, manageable
increments in functionality. In addition, our
expectation is for the system to be highly modular,
due to its division to components and layers.
We define maintainability according to the
standard ISO/IEC 9126-1 Software engineering –
Product quality (ISO, 2001) as a characteristic that
allows concluding about the degree in which the
software can be maintained. Reusability, on the
other hand, is understood as ability of software for
integration in other systems (ISO, 2001).
The area of metrics dedicated for agile
approaches, including Scrum, is young and not well
investigated yet (Elssamadisy, 2007). Some work in
the domain of quality metrics has been done for lean
approaches (Petersen & Wohlin, 2010). However, in
order to be able to quantitatively evaluate the impact
of our development approach, we relied on well
established and empirically validated metrics that
are dedicated for object-oriented systems.
The overall quality of a software system is a
combination of the quality of design, architecture,
code and tests. These areas can be evaluated in a
variety of ways, the most common being
automatically collected metrics and measurements.
Our assessment is based on the set of Chidamber
and Kemerer metrics (Chidamber & Kemerer,
1994). Their analysis provides an insight on the
complexity, maintainability and understandability of
the system. The set consists of six metrics which can
be collected automatically for any class, without
detailed investigation of the code: Weighted
Methods Count (WMC), Depth of Inheritance Tree
(DIT), Number of Children (NOC), Coupling
Between Objects (CBO), Response for a Class
(RFC) and Lack of Cohesion in Methods (LCOM).
In general, high value of these metrics denotes
the increase of the density of bugs and thus the
decrease of the overall quality. An exception to that
observation is the NOC metric, which is usually
positively related with the quality. The optimal
values and their thresholds for each metric are often
specific to the project the metrics are applied to.
We have applied the paradigm to the
development of two software projects of significant
complexity and size – a multi-platform board game
(Olszewski & Back, 2012) and a highly-specialised
tool for analysis and processing of digital
microscope images (Olszewski, 2012).
Our results show that, according to the metrics
both systems are highly maintainable and reusable.
Low values of LCOM indicate highly cohesive
systems, which signify the code that is easy to
maintain. Likewise, reasonable values of CBO and
WMC are a sign of systems that can be easily
managed and reused in different settings. In addition
our findings were confirmed by the subjective
perception of the developers of one of the systems
(Olszewski, 2012).
6 ALTERNATIVE PARADIGMS
Maintainable and reusable software can be
developed using various other paradigms. Software
construction and design, in general, is about
recognising components of the system and
establishing the connection between them, based on
the requirements.
Certain complex functionality, however, may
span over a number of components. Aspect-Oriented
Development (Kiczales, et al., 1997) is the approach,
in which the design is primarily focused on
identifying and representing such cross-cutting
concepts – aspects. The behaviour brought to the
system by aspects is combined by join points during
execution time with the static code of components.
Aspect-Oriented Development is based on a
modularisation scheme that is different from the one
present in SFI. As a result, static domain knowledge
is separated from dynamic, frequently changing
requirements. The overall maintainability and
reusability of the system is thus increased. The
drawback of the approach, however, is the necessity
of using a dedicated programming language that is
able to describe and combine aspects.
An emerging paradigm of Data, Context and
Interaction (Reenskaug & Coplien, 2009) is
designed specifically for object-oriented systems and
therefore can be used with existing tools. Its general
goal is the same as the one of Aspect-Oriented
Development – to separate non-changing elements
of the system (Data) from the dynamic ones
(Context and Interaction).
The dissonance between the static code structure
and its run-time representation can be observed in
object-oriented systems (Gamma, et al., 1994). Data,
Context and Interactions aims to minimise this gap
by unifying common practices of object-oriented
design and by decomposing the system into different
perspectives (Reenskaug & Coplien, 2009).
The dynamic parts of the system are injected to
the static objects at run-time, therefore Data, Context
and Interaction is suitable for modern, dynamic,
object-oriented languages. However, not all object-
oriented programming languages offer support for
such operations. The paradigm of SFI, in contrast,
AgileDevelopmentwithStepwiseFeatureIntroduction
165